sexta-feira, 11 de dezembro de 2009

Resultados

Gostaria de contar para os visitantes do blog o resultado do nosso trabalho.

Para quem não sabe, o jogo Run, Pirate, Rum! é o resultado do Projeto Interdisciplinar do 3° semestre do curso de Design de Games da Anhembi Morumbi. Esse projeto vale 25% da nota de todas as matérias do semestre(por isso interdisciplinar). A nota máxima que poderíamos tirar com esse trabalho seria 5. Como eu postei anteriormente, nossa apresentação teve um pequeno problema que poderia prejudicar a nota. Achei que conseguiríamos uma nota 3,5, chorando um 4. Para minha surpresa, hoje o professor liberou o resultado dos trabalhos e, para minha total surpresa tiramos um 4,5! Isso mesmo: de uma nota total de 5 tiramos 4,5! Isso me deixou completamente feliz! Fomos muito bem apesar do problema citado.

Gostaria de deixar meus sinceros parabéns à equipe do StrogonAwesome pelo seu resultado e também dizer que fiquei muito orgulhoso e feliz de ter trabalhado com os profissionais deste estúdio. Tenho certeza que nossos próximos trabalhos serão melhores pois, neste semestre, aprendemos que precisamos trabalhar duro, ter mais organização (tanto no trabalho quanto nos prazos) e a nos especializarmos mais. Espero que nos projetos futuros eu possa estar mais presente e ativo mesmo trabalhando em dois empregos: um no estúdio(não recebo mas me divirto e aprendo) e outro no mercado de trabalho (preciso de dinheiro também).

Obrigado a Deus pela oportunidade única de criar algo e a todos que acompanharam o processo, aos professores e amigos pelo apoio.

Att: Pobosgame!

terça-feira, 8 de dezembro de 2009

A epopéia do Sound Design-Final!

Depois dos últimos posts complexos sobre sonorização de um jogo em flash, vamos a um tipo de sonorização mais simples: A sonorização baseada na animação.

Opa! O contato com chão está próximo! Hora de sonorizar!


É um tipo de sonorização simples, e felizmente muito frequente!
Ela consiste em declarar um som, da mesma forma que se faz normalmente usando a linguagem do flash, mas em seguida você deve ir para o frame da animação desejada e mandar o som ser disparado. No exemplo acima, temos o guarda, que com seus passos assustadores persegue o Papagaio na prisão!
Com esse método, não é necessário calcular quanto tempo leva para o guarda dar o próximo passo, basta ir normalmente um frame antes do momento que você deseja que o som toque, para dar tempo do som sair com sincronia perfeita.Assim, na timeline do objeto basta digitar por exemplo:
_root.passo.start(0,1);
Assim, toda vez que o guarda entrar nos frames próximos ao contato do seus pés no chão(indicado pelas setas vermelhas na figura), o som é tocado! Naturalmente, em seguida você deve fazer os cuidados que você deseja para o seu código, como tocar apenas se o guarda estiver no palco, etc.
Esse tipo de sonorização é simples, mas ainda exige conhecimentos de animação e muitos testes para ter certeza de que o som está saindo no tempo que você deseja.
Para terminar essa epopéia, gostaria de agradecer aos professores que tornaram possível a sonorização do projeto com suas valiosas dicas!
Também à equipe, sensacionalmente sensacional como sempre, e temos certeza que terminaremos o projeto 100% em um futuro próximo, e estaremos juntos em um projeto futuro, portanto, não deixe de conferir o blog do estúdio mais Awesome já feito "Hands Down"!
Um abraço a todos os envolvidos e até o próximo épico!

A epopéia do Sound Design-Parte II

Continuando com a descrição da programação dos sons, vamos falar de um recurso que me foi muito útil e pode ser aplicado em diversas situações: O Gambetão!


Ma..ma...mas o que é isso!?!?

Sim, é um grande retângulo verde que cobre todo o stage. Em algumas situações de sonorização não era nada conveniente colocar as coordenadas do palco o tempo todo, visto que deixaria os "ifs" do código muito extensos horizontalmente, prejudicando a legibilidade do programa. Então, o gambetão é exatamente isso: um substituto rápido para as coordenadas de onde o jogo acontece.
Um exemplo da sua aplicação está no terceiro estágio, onde temos alguns barris que caem constantemente do convés do navio onde o pirata se encontra. Era necessário fazer o som do barril caindo disparar apenas quando ele entrasse no palco, e somente uma vez enquanto ele estivesse caindo. E é aí que entra outro recurso usado: o gambisForte.
Vejam! Um quadradro preto abaixo do barril!!
O gambisForte determina quando o efeito sonoro será disparado, é um recurso alternativo para sonorizar o barril a partir da sua posição Y no stage, e funciona muito bem.
Então, basta mandar que o som seja disparado quando o barril colidir com o gambisForte. Contudo, um controle por "cooldown" será necessário, uma vez que enquanto o barril estiver colidindo com o objeto durante a queda, o som será tocado repetidas vezes, causando um resultado desastroso! Então, basta mandar o som tocar se o contador for 0(zero) e ser resetado quando o barril for removido e o próximo estiver chegando.
Obviamente, o som deve tocar apenas quando o jogador estiver simultaneamente na tela com o barril, caso contrário, desde o início da fase o jogador poderá ouvir o som sendo que os barris ainda estão longe! Aí temos que voltar para o Gambetão, então o código ficou assim:
createEmptyMovieClip("fallinlove",6);
barrel = new Sound(fallinlove);
barrel.attachSound("barrel");
barrel.setVolume(0);
Declarando o som do barril primeiro é claro! Lembre-se de associar o som a um movie clip vazio, para poder controlar seu volume individualmente. Como o nome do movie clip fantasma não influência muito no código, vamos chamá-lo de "fall in love". Lembre-se também de colocar o movie clip em um Depth ainda não utilizado(6, nesse caso).
Aí sim vamos para a condição:
function checaSom()
{
if(gambetao.hitTest(barco2.gambisForte1))
{
if((barco2.barril.hitTest(barco2.gambisForte1)) && (sound == "on"))
{
barrel.setVolume(100);
if(cdbarril == 0)
{
barrel.start(0,1);
cdbarril=51;
}
}
}
else
{
barrel.setVolume(0);
}
}
Traduzindo: Se o Gambetão tocar no gambisForte e enquanto este estiver tocando no barril e o som do jogo estiver ligado, torna o máximo o valor do volume do som, além disso, se o Cooldown do som do barril for 0(zero), toca o som e muda o valor do cooldown para 51. Se a primeira condição não for satisfeita, zera o volume do som.
O Cooldown assume valor 51 pois é o tempo aproximado que leva para o barril percorrer a tela e voltar para cima, se cálculos cronometrados como esse forem importantes no seu código, não deixe de fazê-los! Não esqueça também de decrementar o valor do Cooldown a cada frame, para quando ele estiver próximo de colidir novamente com o gambisForte o som estará pronto para tocar novamente.
Por fim, basta deixar o gambisForte "invisível" mudando seu alpha para 0%, e ocultar o Gambetão com a camada do cenário para que o jogador não os veja.
Complexo? Talvez, mas para fazer seu jogo funcionar você deve experimentar todos os recursos possíveis, ainda que eles não sejam "códigos éticos"(isso existe?).
Agora que você conheceu um pouco mais do trabalho dos efeitos sonoros, da próxima vez que jogar o Run, Pirate, Rum! lembre-se que o Gambetão está seguindo você o tempo todo...e nunca se sabe onde estarão mais gambisFortes escondidos, então, tome cuidado!

A epopéia do Sound Design-Parte I

Eae pessoal, faz um bom tempo desde a minha última postagem!

Falarei um pouco sobre o que foi o meu trabalho neste semestre, da mesma forma como o apliquei no projeto!

Trabalhei com o Sound Design do jogo, a parte de efeitos sonoros, ou seja, enquanto as animações dava vida aos desenhos e a programação as faziam funcionar, o efeitos sonoros dão vida ao ambiente, tudo ditado pelo clima que a música escolhida quer passar.

Então sem mais delongas, vamos à aplicação.

Vou explicar a função de um dos features do nosso jogo: O botão de Som


Este aqui!

Ele serve para desligar ou ligar o som quando você desejar, sem necessidade de acessar a sua caixa de som ou o controlador de volume, muito conveniente se você estiver em um laptop sem caixa de som ou sem um fone de ouvido, por exemplo.

Para fazê-lo funcionar, você deve criar uma variável de controle no frame em que a tela do jogo se encontra. vamos chama-la de "sound". Então, coloquemos na linguagem do flash:

var sound = "on";

o "on" obviamente é para fazer a checagem se o botão está pressionado ou não, como será explicado adiante. Não se esqueça de criar uma função para fazer o botão funcionar!

function onEnterFrame()
{
botaoSom();
}

Depois disso, você deve criar as funções que ligam ou desligam o som, por exemplo:

function soundOn()
{
som.setVolume(100);
}

function soundOff()
{
som.setVolume(0);
}

Por que usar "setVolume" e não ".start" ou ".stop"? É mais conveniente, visto que o volume zerado faz o som continuar existindo, assim, sons como a música continuariam normalmente ao invés de recomeçar, o que seria incômodo em fases como o bote, em que o ritmo sonoro é importante.

Por fim, é só programar o botão propriamente dito:

function botaSom()
{

pausaSom.onRelease = function()
{

if(sound=="on")
{
soundOff();
sound="off";
}

else if(sound=="off")
{
soundOn();
sound="on";
}
}
}

Simples não? Se a variável sound estiver em "on" e o botão for pressionado, chama a função que zera o volume de todos os sons e torna a sound para "off". Se estiver em "off" e o botão for pressionado, inverte o processo.

Esse é o funcionamento do botão de som, experimente usar uma sintaxe parecida para outras aplicações!

Mais detalhes da epopéia do Sound Design a seguir!

segunda-feira, 7 de dezembro de 2009

Para quem quiser ouvir as músicas

Apenas reforçando o que ja foi dito pelos demais nos posts anteriores a este, neste semestre aprendemos bem mais do que apenas o dado em aula, aprendemos tambem muito sobre o grupo e como podemos trabalhar ainda melhor semestre que vem. Aguardem!

Voltando a questão das músicas, o Leonardo sugeriu que fossem postados aqui links de youtube para permitir que todos possam ter acesso rápido as músicas citadas no post "Música, maestro!".

Pirate Fortress
http://www.youtube.com/watch?v=Cu2Oa_NQUM4

Run, Rambi, Run!
http://www.youtube.com/watch?v=GMAWnr5jMx0&feature=related

Dragon roost Island
http://www.youtube.com/watch?v=dIu5LvkSKl4

King K.Rool
http://www.youtube.com/watch?v=KwLaaBwT9eA

Enchanted Riverbank
http://www.youtube.com/watch?v=Xq71M21ISDc

Flight of the Zinger
http://www.youtube.com/watch?v=feoFZIRuic0

Krook´s March
http://www.youtube.com/watch?v=SW6xqrabrYo


Stronghold Showdown
http://www.youtube.com/watch?v=3GsBO0CsPQk

Donkey Kong Rescued
http://www.youtube.com/watch?v=SvJuEpg0e84



Desfrutem, e até a próxima!

Encerramento do semestre

Infelizmente as fases 6 e 7 não foram terminadas. Ambas estavam em produção, a 7 estava bem avançada, o maior problema foi o tempo, uma vez que ela e muito extensa e exige bastante precisão e códigos de programação únicos.

O level design da mesma estava muito interessante, o conceito e um puzzle misturado com elementos de ação no qual o papagaio e o pirata devem se coordenar para abrir as portas em uma sequência determinada como disse Milton em alguns posts abaixo.

Diria que 70% da fase estava pronta, entretanto não o bastante para mostrar na apresentação. O jogo estava funcional em sua maior parte. Elementos intrigantes como elevadores, e um mecanismo em forma d T que muda o percurso do jogador, pode ser girado no sentido horário ou anti-horário cabe ao jogador escolher as posições certas ate encontrar o próximo botão para próxima porta.

Quem sabe agora com tempo livre terminemos pelo menos essas ultimas duas fases. Como a Jessica disse esse semestre foi de grande aprendizado, evolui muito quebrando a cabeça com o flash mas valeu cada minuto, o resultado final não foi o melhor mas estamos progredindo.

Abraço a todos

Ate

Inter entregue

Finalmente entregamos o inter. Não quis escrever no dia da entrega porque fiquei meio chateada. Ainda não me conformo que um descuido tão simples (abrir o arquivo errado) teve uma consequência desastrosa (e com razão).
Mas, no final, acho que esses deslizes servirão de aprendizado. Percebemos que não podemos focar somente em uma das proposta do projeto e temos que cuidar cautelosamente da apresentação, pois será nela que mostraremos o quanto de esforço fizemos para colocar nossa idéia em prática.

Com relação ao jogo, o resultado foi satisfatório . Os gráficos ficaram bem elaborados e a programação (que não foi nada fácil de produzir) está funcionando. Queríamos, principalmente, produzir um jogo diferente, com uma jogabilidade criativa e divertida e acredito que este objetivo tenha sido atingido. Não concluímos o jogo, mas fizemos 5 das 7 fases, cada uma possui uma característica de gameplay.

Gostaria de agradecer ao Tomoyose pela paciência de explicar as tantas dúvidas, nem sempre simples. E ao João Mattar pelo apoio no artigo e pelas dicas úteis que nos deu nas suas aulas.

É isso ai gente. :)

Beijos.