Sentinel Programming Game - Beta version is comming

segunda-feira, 21 de julho de 2014
It has been a while since i made the first demo video presenting the Sentinel Game.
A lot of things has changed since then.
The scenario improved a lot, lots of bugs were fixed and also lots of optimizations were made in the runtime interpreter.
So now, the game is prettier and the user codes are interpreted faster. yay!

I've been very busy at work recently, but I'm still being able to update the game every now and then.
But, in order to release it as soon as possible (at least a beta version) , i decided to remove some features.
For the beta release, players can have only one robot, as a side effect, the robot creation screen was removed.
Anyway, It still looks promising for a beta version.

That being said, i'm happy to share a new development progress video.

Read more ...

Resigning from work with style

quarta-feira, 9 de abril de 2014
For the last 18 months, i've worked at Huawei, a Chinese multinational Telecom company. So far so good, but i really missed working with game technologies.

Suddenly, a job opportunity pops from nowhere! An opportunity to work again with cool technology and manage the development of serious games and 3D simulations with technologies like augmented reality, holography and virtual reality, just to name a few.

I've accepted it, and it was then, time to quit the job at Huawei.
To resign with style ;) and to show my colleagues my appreciation and gratitude for all we've been through together i wrote my resignation letter the best way i know - as a game! I know a simple e-mail woud be much more direct, but playing a game at work is far more fun than reading an email, right ?

The game depicts a miner in a cart jumping obstacles to get gold ores. Each gold ore reveals part of a poem. Among other things the poem brings the sentence: "consider this game as my resignation from  Huawei", so everybody got the point and, of course, had fun with it.

You can check below the video of the game, played up to the end.

Read more ...

An amazing game, an amazing effect

sábado, 15 de março de 2014

An amazing game, with an amazing effect

 
Some months ago i put my hands on an amazing game called Rain. It's an adventure game in which the player takes up the role as a young unamed boy who is invisible and can only be seen when standing in the pouring rain. The game is impressive! It has a sensitive atmosphere and an immersive story. But, as a developer, what really caught my attention, was the partial visibility/invisibility of the character when only part of him was under the rain, and part was under some cover. This effect can be seen a lot in the video below.


Mimicking the effect


I liked this effect so much, that i had to figure out how to implement it, just for the fun of it.
So I spent this saturday morning playing with some shaders and cameras and achieved a very close effect. You can see the result in the video below, or you can try it yourself here.




With some particles and a "wet surface" shader this could get even closer to the original. Not bad for a quick try huh ?

Read more ...

Programação, Jogos e Jogos de programação

segunda-feira, 17 de fevereiro de 2014
Programação, Jogos e Jogos de programação


Desde que tenho acesso a computadores, estou programando alguma coisa. Me lembro de quando ainda cursava o ensino médio (é estou velho) que estava sempre escrevendo um cracker em assembly pra desbloquear algum progama pago ou um emulador de um processador qualquer (z80, 6502 etc) só por diversão…


E não demorou muito para eu ser apresentado um jogo que me permitia justamente isso: programar por diversão.  O jogo em questão é o ATRobots onde o “jogador” programava a IA de um robô em uma linguagem similar a assembly x86 e enviava seu robô -  representado na tela por um singelo triângulo num fundo preto - para combater outros robôs programados por outros jogadores.

Além deste existem similares voltados para outras linguagens como Robocode para JAVA, CRobots para C e C++Robots para C++, não tenho dúvidas de que haja pelo menos um par destes jogos por aí, para cada linguagem de programação. Ruby, python quem sabe até brainfuck - não me surpreenderia!



Uma abordagem mais amigável


TLE - Dentro da nave
Em meados de 2009 tive o prazer de auxiliar uns amigos Erick Lima, Thiago Martins no projeto de conclusão de curso onde se propunham a utilizar o videogame como forma de ensino de programação. O projeto se chamava TLE – CONTRA O TEMPO: A SALA DE AULA LEVADA AO MUNDO DOS GAMES. O jogador andava por um nave em 3D solucionando problemas técnicos através de pequenos algoritmos programados em uma linguagem simplificada chamada Portugol diretamente dentro do jogo e ao concluir, o jogo executava o interpretador da linguagem e comparava se a saída do algoritmo do jogador poderia ser aceita como correta ou não.


Os desafios neste jogo contém sempre o fator tempo, forçando o jogador a
TLE - Console de Programação dentro do jogo
solucionar o problema de maneira rápida ou enfrentar resultados catastróficos. No caso a esquerda, há uma quantidade limitada de oxigênio disponível para o jogador enquanto ele tenta escrever um algoritmo que quebre uma senha.
O projeto é simples mas bastante divertido e pode ser baixado aqui.
Apesar da simplicidade, este jogo quebrou alguns paradigmas se comparado aos outros jogos de programação. Neste o foco não é somente programação, também contém uma estória e uma narrativa justificando as ações do jogador. Além disso, o que considero mais importante, este jogo não requer que o jogador compile manualmente seus códigos nem que saiba uma linguagem de programação específica . Ok, eu entendo que o jogador precisa saber o tal “portugol” mas é algo muito mais próximo da linguagem humana do que C, java ou assembly.

Com isso, se por um lado perdemos um grupo específico de nerds frenéticos em seus teclados, ávidos por escrever linhas nas suas linguagens preferidas, por outro lado aproximamos o jogador menos técnico deste tipo de jogo. Na prática o jogo cumpre seu papel como ferramenta de ensino de programação.

Depois deste projeto fiquei realmente interessado em aproximar jogos de programação de jogadores não-programadores. Há cerca de 2 anos comecei meu próprio jogo de programação que chamei de Sentinel e fico feliz em mostrar as primeiras cenas deste projeto e comentar um pouco sobre a sua implementação nos parágrafos que se seguem.

 



Sentinel - Ambiente de programação Simplificado
Pequeno programa SENTINEL
Muitos projetos pela web permitem que pessoas leigas criem alguma lógica de programação e pequenos algorítmos de maneira intuitiva ou pouco complexa utilizando linguagens visuais.
O Google app inventor é um bom exemplo disso, permitindo que usuários conectem blocos de isntruções como quebra-cabeças.
Esta abordagem além de substituir completamente a digitação de código por parte do usuário, também impede erros sintáticos e semânticos que seriam inconvenientes de tratar durante a execução do jogo.
Depois de ter muito trabalho implementando um ambiente de programação visual, descobri o projeto Blokly que implementa este ambiente de forma geral, permitindo bastante customização.
O resultado desta programação é a Abstract Syntax Tree (AST)  representada em XML pronta para ser enviada ao interpretador.

Exemplo de AST para um pequeno trecho de código













Sentinel - Linguagem de programação
Como queria um ambiente 3d para o jogo e a capacidade de executar na WEB Unity3d foi uma escolha óbvia, entretanto ainda era um desafio executar lógicas de programação durante o gameplay. Procurei interpretadores de diversas linguagens de maneira que pudesse integrar com a Unity. Nada deu certo, ou pelo menos nada deu certo satisfatóriamente. Era necessário ter controle absoluto da interpretação do código e garantir que independente do frame rate o código de um robô rodaria igual em qualquer computador. Neste ponto ficou claro que seria necessário criar uma linguagem de programação do zero, ou pelo menos o interpretador.

Cada robô dentro da Unity3d tem associado a si uma thread com uma instância do interpretador pronto apto a executar a AST gerada pelo editor de blocos.
Cada robô roda sua própria instância do interpretador













Para que a AST esteja pronta para ser interpretada, basta serializar a representação XML para objeto na memória do interpretador e Voilà! Sem análise sintática ou léxica. Um graaaande atalho!

A linguagem sentinel implementa apenas 4 tipos de dados: Texto, Numero, Booleano e Listas (semelhante a arrays). Embora o editor só permita a conexão entre blocos do tipo correto, a linguagem pode converter nativamente  de qualquer tipo de dados para outro, tornando a linguagem bastante tolerante a erros básicos de programação como indexar um array com um a string ou indexar um array com um índice inexistente.

O Interpretador da linguagem existe de forma independente do resto do jogo, de modo que seria possível colocá-lo numa dll separada e utilizá-lo como um interpretador para propósitos gerais. O propósito deste post é na verdade apresentar o projeto como um todo, mostrando que o interpretador funciona e já é possível criar, programar e executar a lógica de combate dos robôs. Sendo um projeto de um interpretador embutido em uma engine de jogos, é evidente que existe bastante espaço pra falar da implementação e arquitetura do projeto o que pretendo sem dúvidas fazer em posts futuros.

Read more ...