Este blog esta em reforma no momento.

Colorindo console - Stress dá nisso

Em um estado de stress meu cérebro travou, concordo que eu deveria me afastar da máquina, mas como não consigo fiquei jogando Assassins Creed, até matar todo mundo da cidade, e me distrai com coisas totalmente inúteis pra não esquecer que programação é divertida.

Basicamente peguei alguns informativos em blogs e artigos sobre as cores em console. Mais uma vez deu vontade de matar a "anta" que projetou a WinAPI.

Usando o GIMP você pode pegar qualquer imagem em torno de 78x20 pixels e converte-la em algo para aparecer no console.

Tutorial
  1. Primeiro instale a palete com as cores de console no GIMP. Tem um tutorial aqui para você fazer isso.
  2. Pegue a imagem no GIMP, imagem/modo/cores indexadas e selecione esta palete (download).

  3. Feito isso vá em  imagem/modo/rgb isso volta ao padrão RGB necessário para salvar o HTML.
  4. Agora vá em salvar como e salve com a extensão HTML.

  5. Abra o arquivo no bloco-de-notas e vá no topo de tudo, antes do HTML você vai colar este script que vai converter a tabela gerada no GIMP em código multi-plataforma.
  6. Abra o arquivo no navegador, ele irá gerar código C/C++,  um array de const char para o Linux e um array de int pro Windows.
  7. Em seguida abra a IDE de programação C++
  8. Crie um novo projeto do tipo console
  9. Copie e cole este arquivo download.
  10. Basta você substituir as linhas 25 e 50 com as linhas geradas para Linux ou Windows.
Enjoy ^_~

O poder da insônia - Danos na Armadura


Natal meus gatos brincando no lado os cachorros com um papo chato e sem a mínima vontade de tentar lembrar como funciona essa tal de televisão.

Duas horas de desenho no MyPaint e umas linhas no Flex e rascunhei a primeira ideia doida que me veio na mente.

Ao receber dano um conjunto de texturas deve dar conta de deixar a aparência da personagem bem detonada no melhor estilo anime.

Tenho que dar um outro nome para a caracteristica de "vida" da armadura/roupa para não ficar muito idêntico aos RPGs mais conhecidos. Infelizmente não tem como não seguir a mesma ideia que eles seguem, é tudo baseado na realidade.

Mas uma coisa o meu sistema tem que os outros não tem:
Ao diminuir o poder da armadura o carisma da personagem aumenta em bónus XP

Estudo de dados em HTML5

Normatizando a estrutura de dados para o sistema de atualização.

Para quem chegou agora, este é um blog de projeto, ele contém relatórios sobre o desenvolvimento do jogo bem como os estudos dos personagens e tecnologias envolvidas.e a documentação em sí, como é o caso agora.

Sim eu sei, nem tem demo, mas quando tiver ele já vai estar preparado para ser "legal". Na verdade fiz isso por estudo e para distrair a cabeça.

As Informações
São preciso apenas 3 dados para se ter uma informação de update: o endereço, a data e o tamanho do download.
Lógico acrescentamos a descrição, assim temos 4 dados passando uma informação concreta.

Como passar as informações?
A forma mais comum de dados na web é o HTML.
O problema é como passar as informações junto com a página HTML.

Resolver foi muito mais complicado doque achei de inicio, mas deu para manter o padrão webstandard.

Um usuário comum estaria satisfeito com isso como sua página de downloads:
Isto não esta errado já que o a HTML também se destina a usuário final e foi criada com a finalidade principal de passar infomação e ser fácil de usar mesmo sem grandes conhecimentos  (sim padawan a web não é criação exclusiva de empresas e designers).


Mas se perde muitos dos recursos valiosos como facilidade de ser encontrado em buscadores (Google), boa aparência nos navegadores e esteticamente não fica grande coisa mesmo para quem não vê o código.

Então quando se fala em padrão webstandards nós praticamente nos limitamos ao uso profissional, e como este é o meu caso vou partilhar com vocês o sofrimento:


O código ficou assim:
Veja o código na integra no pastebim

Este é o conteúdo do widget.
Com um mínimo de esforço uma pessoa que não conhece HTML já deve ter começado a entender o código. A marcação HTML5 deixa o significado das tags mais simples, mas vamos começar a explicar a estrutura por traz da simplicidade passo a passo.


O STYLE como você percebeu é onde fica todo nossa definição de visual, cor e tipo de letra por exemplo. Aqui esta esta uma área separada, o STYLE é onde se agrega o CSS, uma linguagem de configuração separada da HTML. Também chamada de folha de estilo.
Antigamente a formatação era incluída junto da HTML, mas isso dava um trabalho absurdo para manutenção das páginas então se criou uma segunda linguagem.
Aos que estão acostumados com HTML notem que há um atributo a mais na tag STYLE SCOPED. Isto isola o estilo dentro da tag pai, no caso ASIDE.
Evitaria usar tanto a repetição de #CabecalhoDeAtualizacaoWWP mas preferi manter uma compatibilidade com a HTML4.
Aqui também eu poderia comprimir a imagem de fundo em um formato textual e inseri-la no código sem precisar carregar a imagem separado!

HEADER é uma seção de cabeçalho, aqui indico informações relevantes sobre a peça.
Escolhi que ele passaria o título e a descrição da atualização, tudo ficando bem avista para o usuário.
Aproveitei-me da tag TIME que pode inserir datas dentro do texto. Obviamente não existe nenhuma informação visual além do texto, esta tag apenas serve para um mecanismo de busca ou indexação ter uma referência.
Os espertos notaram umas tags de META, a rigor uma tag dessas deve ser introduzida no cabeçalho da pagina principal e não num elemento. Mas ficou omisso o caso dos widgets na descrição oficial, o próprio www.data-vocabulary.org apenas traz uma indicação de usar estes dados no texto bruto do documento. Então esses metadados estão fora do padrão e aparecem aqui apenas para mostrar algumas coisas que eu acho que tem "pano pra manga" no padrão web.

Em seguida o link de download num paragrafo normal P. Exencial, pode parecer redundância de dados com o widget na mesma pagina do projeto, mas a proposta é uma unidade independente.

DETAILS esta tag provém detalhes para a página principal ou de elementos desta. No caso serão passados nossos detalhes de update.
Inseri um par de comentários, antes e depois de details para facilitar a identificação da área dentro do código HTML.
Os comentários na HTML tem a exata função de delimitar áreas de código com algum comentário que facilite sua identificação para o scripter e no caso para meu interpretador em C++.

ADDRESS como o nome diz, meus dados de contato.
Não há uma obrigatoriedade de dados físicos, até porque na verdade GEOTAGS são inseridas usando METADADOS, os mesmos que como citado acima não podem ser incluídos fora do cabeçalho da página principal.


Os dados de atualização em si
Escolhi demarcar os dados dentro da tag
, inicialmente pensei em mandar os dados em forma de seção CDATA, assim eu passaria um XML simples, que é muito mais simples de ser analisado, mas a HTML5 tem uma série a mais de tags que facilitou meu trabalho.


A HTML prove 2 tags que comportão esses dados: A e TIME sendo que A já guarda o endereço inplicitamente em forma de parâmetro.

Eu devo passar uma lista com as ultimas atualizações válidas, inclusive para o jogador fazer um downgrade. Então os dados serão passados em dentro da estrutura UL.

Na tag A além do atributo href usei também um atributo personalizado conforme descrito aqui para passar o tamanho do download.

Nota: Toda a definição de TAGs descrita aqui pode ser encontrada neste endereço http://www.w3.org/TR/html5/

O Visual
Aqui deixamos as informações definidas acima com uma aparência  mais humana.
Escolhi o background uma imagem que irá ter o tema de RPG como convém ao jogo.
Dai bastou manter um pequeno valor de contraste das cores para permitir leitura.

Como não é tão interessante que o usuário use os links, alterei os links das revisões para que aparecem sem destaque. Já os do link de download mantive o padrão de destaque com uma cor viva contrastante e o sublinhado. Aproveitei um efeitinho da CSS3 o text-shadown.

Nada muito maior é necessário.

Os textos
As informações passadas ao usuário são poucas e se limitam ao relevante.
No caso do widget apenas tem relevância o link de download.

As descrições nos updates serão coisa de no máximo 2 linhas, se possível uma lauda de tamanho de texto.

Também será informado o tamanho da atualização.

Ex.s:
Nova fase disponível. Fase da Aracne (2MB)
Corrigido: problema na textura tal (0.4MB)

Aqui uma referência que tirei do site do Soul Order.

Opinião pessoal
Este já é o terceiro projeto independente sério em HTML5 que faço (sendo 1 freela) em todos fiz uma árdua pesquisa e procurei conselhos de outros profissionais.
A ideia por trás dela é a websemantica, por isso as tags tem nomes sugestivos à seções comuns encontradas em páginas atualmente. Talvez numa HTML6 isto provavelmente vai mudar também de acordo com um novo contexto.

Sistematicamente todos os blogs em português e a maioria dos estrangeiros se limita a passar informações relativa a multimédia e afins chamando tudo de revolução sem se dar conta de como e para que a tecnologia (na verdade cheguei a ver demos de HTML5 sem uma linha sequer de HTML5). Então se você esta procurando informação não-poluída sobre HTML 5 a melhor fonte é a W3C mesmo.

Vamos agora finalmente falar de programação (Welcome to the Hell C++)
HTML é lindona o conceito de dados estruturados com semântica é show, mas obviamente conceito e nada é a mesma coisa se você não tem onde visualizar os dados.

Não vou descrever a parte da programação a fundo, basta saber que é nela que pegamos os dados e fazemos alguma coisa com eles.
Quem quiser ver um pouco de programação mais explicada pode olhar meu tutorial de Away3D e Blender.

Usei as seguintes bibliotecas:
CURL é uma excelente biblioteca, já implementa os mecanismos de conexão com servidor e recebimento de dados facilmente.
TinyXML é ainda mais fácil de instalar e bastante prática. Não é a mais fundida biblioteca de análise XML mas é a que me responde bem e rápido.
POSIX Threads a terceira cabeça do cão do inferno, sem comentários, mas sem ela não tem como fazer um mecanismo de checagem de atualização que não TRAVE o jogo.

Criei uma classe auto-suficiente para fazer a checagem de dados e o aviso ao sistema principal.

Automaticamente a classe procura por um endereço principal e caso seja preciso em endereços redundantes.

Ela pega os dados que estão delimitados entre ini: wwp_update_details e end: wwp_update_details. E joga eles num analizador XML simples.
Infelizmente tive que usar uma marcação de comentário, uma solução não muito elegante, mas pratica.
A TinyXML não conseguiria analizar os dados HTML já que a HTML ao contrário da XML prevê dados mau formatados.

Com a POSIX eu rodo ela em um processo separado de baixa prioridade (assim espero que ocorra).
Assim a classe faz seu trabalho da forma mais silenciosa possível.

Os arquivos para quem quizer ver melhor estão aqui:
main.cpp
WWP::WWP_UpdateChecker.h
WWP::WWP_UpdateChecker.cpp
WWP::WWP_UpdateInfo.h
WWP::WWP_UpdateInfo.cpp

Exploração urbana 02

As chuvas mortais que caíram no estado fizeram alguns estragos e não foi só a minha Internet que caiu.
Aproveitei para tirar umas fotos diversas de texturas e de exemplos de terreno.
 Este é um riozinho passando pela cidade, depois de transbordar a parede e parte de uma casa caiu.
 Estes detalhes de entulho em corregos são realmente interessantes, sempre que passo por eles fico imaginando a sensação de explorar entre eles como se fossem cavernas ou vales hostis (se não fosse o fato do esgoto acho que até exploraria).
 Geralmente eles tem TODOS os elementos necessários para você por num game, vários obstáculos e pontos de apoio para fazer caminhos alternativos e lugares para esconder itens.
 Também oferecem ótimas texturas.
 Fico olhando para os canos e imagino que Cibele pode usa-los facilmente para escalar e chegar em obstáculos. Parkour de pobre!
 Muros fudidos e muito fungo.
 Invadir quintais parece fácil.
Preciso me segurar para não abrir o Blender e sair modelando.

Estas fotos foram tiradas aqui (google maps).

Animando o Corpo-Seco


Gente eu apanhei feio, mas comecei a descobrir onde estão os controles do Blender 2.5 para animação.
Muitos dos controles não mudaram, simplesmente ficaram mais aprimorados, pelo menos é oque aparente dando uma olhada inicial no DVD de Sintel.
O difícil é agente se readaptar aos atalhos.

Offtopic
O DVD é realmente luxuoso, tem tutoriais, o filme, documentário, extras e todos os elementos de produção (sim eu comprei na pré-venda ano passado antes de começar a produção).
Se quando eu comecei a usar o Blender tivesse essa quantia de material para aprender eu teria sido muito feliz.

Jacaré e o aprendizado da nova interface de animação

Jacarés ficam esperando suas presas no charco, nos mangues e nas montanhas geladas e nos esgotos das cidades.
Predadores vorazes sua poderosa mandíbula é capaz de entortar o aço mas seus dentes não cortam. Ele esmaga sua presa e em seguida tenta arrancar pedaços dela com violentos movimentos.
As raças conhecidas são os jacarés dos mangues, jacarés do esgoto, jacarés mandíbula-gigante (que vivem nas montanhas) e jacarés alados.
Os especialistas dizem que os jacarés evoluíram de largatixas do período permiano. E que uma maneira de se imobilizar o jacaré é pô-lo de barriga para cima e fazer-lhe cafuné na barriga.

 E modelagem foi extreme-low-poly, talvez meu senso numérico tenha falhado um pouco mas no final das contas acho que atingi um bom custo benefício.

Pintar foi gostosinho os pincéis do Blender agora aparecem com miniaturas para seleção.
Animar que esta sendo complicado, ainda não entendi direito o novo mecanismo, não acho onde estão os controles de frames individuais para cada bone e o menu de propriedades do lado é muito mais cheio de coisas (também esta condensando vários painéis do Blender antigo).
Mas logo animo ele direito.

Corpo Seco NPC

Um "Corpo-Seco" é tradicionalmente um morto-vivo que se confunde com a vegetação pois o aspecto da sua carcaça lembra galhos de árvores secos e distorcidos.
Só se transformam em corpos-secos pessoas que foram extremamente más em vida, essa ideia é bem antiga deve vir até da Europa pré cristã e chegou à nossas roças.
A saber um Litch é um mago que viveu pela maldade e fez grandes crueldades em nome do mal para re-viver como um dos demônios mais fortes. Já um corpo-seco é uma pessoa que fez uma maldade tão grande, como por exemplo um funkeiro que vai num asilo e fica cantando creu no ouvido dos velhinhos, uma mulher que põe laxante em saco de bala de São Cosme e Damião, etc. Essas pessoas por sua maldade tão grotesca são renegados até no inferno e a própria terra enojada os cospe.
São almas condenadas com sede de sangue dos vivos.
No jogo eles estarão escondidos no mato camuflados.
Eu gostei do resultado da modelagem, fiz ela em um dia, e depois o normalmap.
Ainda irei pintar e se possível acrescentar detalhes de folhas e galhos de árvores na pintura e no normalmap.

Mas que ele ficou bonitinho ele ficou, o resultado ficou mais a cara de SD do jogo do que os meus primeiros mortos-vivos.

Coelhinhos from hell

Cibele encontra uma multidão indo em direção oposta, e imediatamente os adverte:
-Não, pera! Onde vocês vão? Não podem ir por esse caminho.
-O que? Por que não?
-Tá cheio de "coelhinhos" lá! Eles são medonhos e surgem do nada.
-Ora menina, não nos atrapalhe. Essas pessoas perderam suas casas essa semana, e ontem mesmo tivemos que passar por um pântano cheio de crocodilos.
-Crocodilos não são NADA! Aqueles coelhinhos são o diabo, eles vão matar vocês!
-Desapareça!
Dando um safanão que a jogou longe o homem saiu conduzindo a multidão de pessoas tristes. Enquanto passava Cibele ouve deles os lamentos: "-Eles vieram de noite!", "-Minha esposa, meus filhos...", "-Malditos clérigos de Nagdahbastarthen!", "-Minha plantação, todo meu trabalho", "-Meu ouro, minhas ferramentas".

Coelhinhos, entidades abissais que surgiram na terra após fugir do inferno. Criaturas com uma sede de sangue insaciável e selvageria impressionante, atacando mesmo o oponente depois de morto.
Caracterizam-se pela emboscada onde a vitima distraída é morta quase que instantaneamente pelas suas pressas gigantes. Ou se sobreviver ao ataque morre em poucas horas devido ao poder infeccioso das bactérias mutantes que vivem na gengiva do coelhinho.


Uma boa saída entre fases, para situar o jogador dentro da trama. E uma desculpa para pôr coelhinhos na cena.
Notem que pela descrição os coelhinhos além de dano de perfuração tem dano de veneno e técnicas como "fingir de morto" não funcionam.

101 postagens

Puxa eu nem tinha reparado até ver o número redondo 100 no painel de controle do Blogger

http://wildwitchproject.tumblr.com/
Bom, uma ferramenta nova que estou usando é o Tumblr, um sistema de blogs que se propõe a ser simples até o talo, tanto que mais lembra um Twitter doque um site de blog, Só que com as vantagens de ser encorpado.
Comecei as primeiras customizações no serviço, que me permitiram fazer muitas coisas, como faço atualmente no Blogger.
Um mínimo de conhecimento de CSS já da pra fazer estrago. Acho até que vou fazer uns tutoriaizinhos pra chamar a atenção pro blog :P

Bom, em outras palavras isso representa uma ferramenta extra e não uma futura substituição.
O Blogger continua sendo a unidade principal que gera textos e documentos para o jogo, o Tumblr entra substituindo o twitipic, onde eu posso postar imagens e ideias rápidas sem compromisso.

Modelos para Dezembro Hárpia, Rapy and Zody e Mecha

Bom, vamos aos progressos coisas soltas mais recentes.
Vocês já estavam pensando que ele não ia sair do concept, né? Este é o inicio da modelagem do Dr Rapy and Zody.
Pra quem não se lembra ele é um cientista louco que ficou décadas preso num sanatório e quando escapou durante uma guerra civil montou um monstro com pedaços de corpos que encontrou no campo de batalha. Vejam os detalhes  aqui.
A modelagem da hárpia também começou. As hárpias são seres metade pássaro e metade sapatão que sequestraram a "linda" filha do Rei Trololow e a prenderam numa gaiola para que só elas desfrutassem da sua linda e melodiosa voz.  Ela é outro modelo que estou refazendo e esta bem melhor olhem só.
Este modelo esta meio que na modelagem ~ concept, mas é um mecha para uma das fases.
Bom, não sou muito bom no design de mechas, mas acho que dá pra quebrar o galho.
Algumas soluções surgem no momento da necessidade, como nesse sistema de conexão das asas. Acabou que deu uma boa visão esteticamente.
Abro o MyPaint em segundo plano, a cabeça começa a flutuar em tantas coisas que aproveito para rascunhar algumas imagens. Olha a Loira do Banheiro ai, o problema desses personagens bonitos é que agente se apaixona por eles e fica o tempo todo repensando.

Homem Poraque

Thessalius Ludicus Victor
Convencido, inescrupuloso e bastante forte.
A palavra cuzão é a que seus "amigos" melhor usavam para descreve-lo.
Sempre arrumou confusão na cidade onde vivia até que um dia sua ambição o fez ser banido para uma ilha deserta no meio do "grande rio".
E porque ele não saiu de lá nadando? Simplesmente porque a ilha fica circundada por fendas como se tivesse cachoeiras por todos os lados. Nenhum navio consegue entrar ou sair de lá.

Tessalius é um poraque, bem mais abrasileirado doque um tritão com tridente de raios, mas igualmente mortal.

A ideia é que Cibele encontre ele com algo em mãos que o ajudará a escapar da prisão se possível em uma quest alternativa.

Bom, não estava muito inspirado hoje. Quem sabe mais adiante eu melhore sua história.

Pensando no sistema de update

Nada muito grande mas como se trata de um jogo que pode levar muito tempo até chegar no final uma opção é realmente os updates.
Bom, como abrir um jogo e receber um aviso: "Favor atualizar seu cliente" é uma coisa chata até no cliente do World of Warcraft.

Então vou tentar incorporar a carga durante a execução do jogo. Teoricamente é simples e usando a experiência adquirida com sockets e threading desses últimos messes será "pá-pimba".
Isso também representa problemas como o desses desenhos: do jogador entrar num cenário, sair, fazer uma quest e voltar e encontrar um cenário modificado.

No entanto usando a arquitetura de database fica mais prático fazer isso do que com estruturas de arquivos, além de poder ter um controle de versionamento do jogo nas mãos do jogador!
É um rascunho de ideia meio doida mas coerente.

Estou adicionando essa ideia no documento de de coisas boas e ruins sobre jogos. Lembram-se dele? É uma tabela colaborativa que eu disponibilizei esses tempos aqui.

Como adotei a ideia de banco de dados como estrutura de arquivos, essa estratégia deve ser fácil de ser adotada, nem que represente clonar uma tabela que esta sendo usada em tempo de execução para realizar o update de forma suave.
(Sim tenho um certo vicio em databases, afinal são quase 15 anos de programação web  XP )

Esses tempos eu me estressei com o recurso das "migrates" do framework Rails, e agora estou eu aqui pensando em montar scripts Lua para fazer o mesmo!!!

Teoricamente é só mandar código que automatize a migração de maquinas de estado dentro e fora do jogo. Bom o tempo dirá se essa teoria é de fato tão simples quanto parece.
^^

Distraindo a cabeça com um novo header

Não vai ajudar nada no desenvolvimento, mas vai fazer um bem a mim e bem pro blog mudar um pouco a cara.
Desenhar e projetar um novo header me faz relaxar.
Meu traço e habilidades de desenho taum um lixo. Só dão pro gasto.
To sem ideias de pose, mas a clássica serve também.
Para deixar o desenho um pouco mais bombado resolvi esculpir o relevo da personagem e jogar como um bumpmap para iluminação.
Agora o novo header vai ter uma interação com a fonte de luz (também).
Esse teste de implementação ainda esta pouco animador. Usei um exemplo que achei neste site, mas o algoritmo serve apenas para "luz direcional".
A chave do bump é essa matriz muito simples, até impressiona (se eu soubesse matemaquiques nesse nível estaria feliz!)
Bom, terminando o freela chato, e acertando o ritmo de postagem no RPG Vale eu volto com força pro projeto.

Recebi uns feed-back positivos do projeto essa semana que me deixaram muito feliz e deram um animo ^^

terra brasilis et difficile

Meu ritimo de postagem diminuiu um pouco, por sorte meus acessos não muito.
 

Bom, olhando a imagem acima vocês podem ver que as plantas parasitárias ficaram um lixo.
Então vou deixar a modelagem manual de lado um pouco. Assim que estiver plotando esta arvore no ambiente do game, vou tentar implementar um sistema de particulas para fazer o trabalho.

A ideia de fazer arvores próximas à realidade que eu encontro ainda esta meio confusa e complicada.
Este modelo de arvore ficou com cerca de 1000 triângulos. Algo bem realista, e fácil de aplicar um LOD.

Pode parecer muito polígono, mas essa é uma das coisas que eu sabia que iam aparecer desde antes de começar o projeto oficialmente.

A implementação com a OgreKit ainda esta nos testes, mas pelo visto vai ser ela mesmo. Talvez eu tenho que migrar do Eclipse para o CMake (texto puro), algo que não deve ser tão ruim assim. No final das contas o Eclipse só esta servindo pra corrigir erros de digitação.
Não me acerto em fazer o Code Blocks funcionar e o Visual Studio não mostro nenhuma vantagem sobre o Eclipse.
Estou preparando o projeto de objetos interativos. Essa imagem é um aviso que o jogador terá que fazer algum teste para conseguir decifrar.

Outro passo corrido é o "model sheet" da Cibele. Eu tenho alguns outros estudos dela em alguma pilha de papel mofado mas não no formato SD que irei usar no jogo.

Bom, uma semana e meia de freela dor-de-cabeça atrapalhando tudo, mas os problemas foram pro ralo.