Where do we stand?

Hello all, sorry for the lack of news lately.

People following the project are probally asking, what is happening, is it still alive? The answer for the second question is yes, and for the first one, a long one.

First of all, I need to tell how the porting to C++ is going. Most of the basic engine code (colision, players, npcs, sound, graphics) is already ported and working, but as this code is the oldest one, there are lots of room for improvement, even the already ported code have parts that will need to be rewritten in the future, as the code is ugly, full of hacks and hardcoded parts. It is important to remember that the project was started with a much smaller scope than the current one, so, having a code that was well written for future support was not an important matter – sorry for that. So, because of that, some parts as jump and gravity – that now uses acceleration and speed meaning a much better behavior – were completely redone, and with that, a lot of old and new bugs appeared.

This moves us to where we are now. I am dividing my time between fixing bugs and porting code such as the weapons menu, that by being much newer, are better modularized, and can be ported without any drastic chances, and much faster. I have no idea when the porting will be completed to get the same level of maturity and functionality from version 0.1 RC1, but I hope to create a beta release by the end of this month (november/2011).

Talking about released, another improvement we want, and need to make, is how we build the project for different platforms. Sadly, out prefered development IDE (Qt Creator) still have a very limited support for multiple toolkits, so we are probably going to use Code Blocks IDE for that. This is a must, as compiling in C++ uses much more objects and a single script or makefile is not enough in most cases.

Engine Status

Pequena amostra do estado atual do motor de jogo, escrito em C++, para o Rockbot:


Eu diria que o port está em torno de 40%, mas deve progredir bastante em breve, pois grande parte da lógica e rotinas mais complexas já foi portada.

C++ is fun, but sometimes, is not

As vezes o C++ cria alguns problemas chatos. A idéia de uma linguagem com orientação a objetos é que cade peçado (classe/objeto) é uma entidade independente, mas que pode conter outras entidades. O problema começa quando você tem dois tipos de entidades diferentes, como NPCs e Players,q eu tem que fazer cálculos levando em conta a outra entidade, que ela no conhece. No caso do Rockbot, a classe game, possui duas listas, uma de players e outra de npcs, e cada uma destas, contém uma lista de projéteis, o problema é que cada elemento da lista precisa acessar a lista do outro tipo de elemento, para fazer verificações de colisão e proximidade. Vou ter que pensar muito bem em uma solução.

 

Press Start to Continue…

Ei camaradas, quanto tempo heim?

Sinto muito por ficar tanto tempo sem dar notícias, mas eu estava passando pelo processo de comprar um apartamento e me mudar para ele, então desde novembro as coisas estavam um pouco complicadas, e quando chegou abril, foi uma loucura com mudança super-rápida, mandar consertar alguns problemas no lugar e, além disso, o trabalho está bem puxado, já que comecei a atudar em uma nova parte que me consome um bocado do cérebro e é bem cansativa. Resumindo, agora estou vivendo no meu próprio apartamento, já pude começar a relaxar um pouco, e estou tentando retomar o trabalho no Rockbot onde o deixei. O port do código para C++ está indo bem apesar de trabalhoso; a nova versão está bem rápida e o código faz muito mais sentido, o que tornará muito mais fácil programar em cima dele, quando o port estiver finalizado. Espero poder lançar uma versão nova mẽs que vem, mas tenham em mente que, como é uma reescrita total do código, muitas funcionalidades presentes hoje não estarão mais lá por uns tempos.

Nos vemos em breve!

Complete Rewrite

Aproveitando a oportunidade oferecida pela reescrita do formato de arquivos, vamos reescrever o Rockbot praticamente do zero em C++. A decisão já vinha sendo amadurecida faz tempo e basicamente se deve a:

  • confusão de manter um código organizado em ANSI C
  • bom suporte de compiladores C++ para as plataformas que queremos portar o jogo
  • simplicidade da programação graças a herança, hash tables e vectors

Vai levar um tempo para tudo ficar pronto novamente, mas temos certeza que isso irá acelerar o desenvolvimento enormemente daqui para a frente.

 

Twitter

Já que o trabalho agora é de longo prazo, para implementarmos muita coisa no editor, vamos postar poucas novidades aqui no blog do jogo, mas fiquem de olho no nosso twitter (@RockbotGame), que está visível na direita do site, para atualizações constantes.

Backend

Após um curto período de descanso e férias, o trabalho no Rockbot está andando. Estamos trabalhando mais na estrutura das coisas, por isso não existe nada novo para mostrar, pelo contrário, o número de bugs foi às alturas. Essa situação deve perdurar por mais uns 2 meses e, ao fim deles, teremos toda a estrutura para finalizar os últimos ajustes e lançar a versão final.

Neste meio tempo, a arte está sendo bastante melhorada, e planejamos começar a trabalhar em versões para Dreamcast e Android, também ajustando a imagem para ser centralizadas em dispositivos cuja resolução é maior que a padrão, mas não o suficiente para uma escala em 2x.

Goodbye Nintendo DS, and also 0.1

Nós decidimos mudar um pouco o nosso planejamento. Conforme fomos implementando funções que supostamente deveriam entrar apenas em versões futuras, e o motor do jogo amadureceu, ao invés de continuar fazendo uma série de versões zero-ponto (0.X), nossa próxima versão será a 1.0, focada na reestrutuação da arquitetura de arquivos, de forma a termos muito menos coisas hardcoded, mas não como inicialmente previsto. Resumindo, algumas coisas que pensamos em fazer ajustáveis manualmente, como definir a posição X e Y inicial para cada sprite de um NPC, não irá mais acontecer, já que adiciona muita complexidade mas tem poucas vantagens para um usuário ou editor. O que irá sim ser feito, como já foi feito para os objetos, é uma melhor separação entre elementos do mapa, ou seja, ao invés de fazer parte do arquivo de mapa, a lista de objetos é guardada em um arquivo separado, como se fosse uma tabela relacional de SQL. Isso irá permitir modificações no formato de arquivo sem haver necessidade de se reconstruir o mapa inteiro, fazendo com que seja mais rápido implementar melhorias no editor e jogo.

Por fim, temos novos requisitos mínimos para hardware:

  • tela de 320×200
  • 16 MB de RAM
  • CPU deve ser veloz o suficiente para rodar o jogo a 30 FPS

Isso fará com que a versão para Nintendo DS seja definitivamente excluída. Infelizmente o hardware, e principalmente o SDK, do DS são muito fracos para suportar um jogo multi-plataforma com SDL. Uma versão nativa ainda será possível, mas não estará em nosso radar a menos que alguma outra pessoa decida fazê-la. Para pessoas donas de um DS, recomendo comprarem um Dingoo A320 ou GA330, ou esperem por uma versão decente da SDL para DSi ou 3DS.

0.1 Release Candidate 1 Released (Rock&Roll)

Depois de mais de dois meses, trazemos finalmente uma versão nova.

Entre em nossa seção de downloads para pegar binários para Linux, Ubuntu 10.04, Windows, Playstation 2 e Dingoo (Dingux).

A lista de modificações em relação ao beta7 é:

  • corrigir problema de botões no menu (corrigir esquema de read_input e game_mode)
  • array de teclas deve ser INT e não CHAR
  • estrelas maiores devem ser cinza
  • melhorar “pisca” do player quando invulnerável (está muito rápido)
  • inimigos tem que ter um hit-timer para ficarem invencíveis por um segundo, como os players
  • direcionar debug para arquivo stdout.txt
  • spiked chain não deve ser destruída no hit
  • chefes tem que ter um hit-timer para ficarem invencíveis por um segundo, como os players
  • EDITOR: implementar fator de zoom
  • direcionar debug para arquivo stdout.txt
  • ajustar sensibilidade do análogo para PS2 e PC independentemente
  • implementar direcional digital no PS2
  • corrigir problema em que player muda tipo de animação no meio do pulo
  • refinar velocidade e gravidade do pulo
  • corrigir problema em “got weapon” onde não anda para o meio se passou dele
  • teleporte voltado para esquerda não está aparecendo
  • corrigir problema de pulo+espinhos depois de barreira
  • descobrir porque player fica invulnerável após morte (hit == 1?)
  • melhorar dano de espinhos
  • plataformas que se movimentam “derrubam” jogador para dentro das paredes
  • itens colocados via editor não estão funcionando corretamente
  • pílula só deve ser barulho se HP OK – pular sobre escadas ainda está dando problema
  • corrigir pequena discrepância na posição vertical da tela (área cinza)
  • implementar morte para 2 jogadores (player reaparece na mesma tela, junto do player que está vivo – não pode ter 2 mortos simultâneos)
  • (URGENT) corrigir scroll para 2 player mode
  • (SERIOUS) em 2 player mode, ESC não sai do jogo (PC)
  • criar flag LINUX, WIN32 e colocar PC (Linux e Windows) no projeto – ajuda com alguns ifdefs
  • tecla de quit deve funcionar apenas em PC e Dingux
  • (URGENT) objetos só testam player 1
  • (SERIOUS) na água, se esbarra em uma parede, volta a gravidade normal (devemos testar meio do player/terrain apenas)
  • menu deve ser chamado indepententemente para betabot e rockbot
  • (FEATURE) betabot must shot two projectiles at once
  • colorcycle deve ser aplicado também sobre nível 3 de tiles
  • implementar sistema de checkpoints (no loadMap, se a posição do mapa for < RES_W, é checkpoint) – na versão 0.2 isso será uma lista em stage
  • congelamento de tempo só pode parar um único chefe (magebot)
  • animação de hit deve seguir o player/npc
  • animações de hit devem sumir quando o player morrer ou trocar de tela OK – new gravity system more similar to megaman games
  • (SERIOUS) quando atingido, se está segurando o botão de pulo, está pulando automaticamente
  • add a animation state for transition between stand and moving called OK – add a “scroll lock” terrain type, similar to boss door, but without doors animation/sound
  • (URGENT) blocks are falling
  • to not block top and botton in colision. if player leaves by bottom, dies (holes).
  • fix door/scroll-lock right to left (infinite loop) OK – show 3rd level on “ready”
  • dying makes the music reset to apebot’s OK – (SERIOUS) stage intro dialog is showing again when player dies
  • must show player and NPC on boss dialog OK – (SERIOUS) moving left/right platform not working
  • (URGENT) crashing when loading a stage after beating a boss OK – teleporter is returning to the first used one always
  • implement teleporters return (for 8 bosses room in skull castle) OK – (URGENT) create a new type of terrain that is meant to be checkpoint
  • (URGENT): npc grtempaphics are using filename as key. this is wrong, as we can have different NPCs with same graphic file, must use name instead.
  • (URGENT) when beating a boss and dying, is returning to previous stage (must set checkpoint to new stage)
  • (see checkpoint terrain) – boss door 1 must save checkpoint – novos npcs: c) DONE – morcegos d) DONE – shooters de teto (atira uma na diagonal, uma reto) e) shooters laterais
  • allow user to define NPC direction in editor
  • different damages according to weapon type for bosses OK – (SERIOUS) ready is showing in the top-left after first blink in Dingux, similar problem for Destrin ship
  • (URGENT) fix jump on stairs
  • (URGENT) items placed with editor are not being shown in game (do not allow dot in the name)
  • (URGENT) player is heatting the head too soon
  • colorcycle is not working well in intro (have to add one extra colorcycle in the start with a very small timer)
  • user key reading in intro is too slow, so keypresses are being lost (had a bug with new/load screen not showing)
  • (SERIOUS) item colision check is bad (falling from jump item if a bit to the left) (removed reducer)
  • (URGENT) intro and dialogs are out of place (showing dynamite in spike)
  • only show weapons adquired
  • jump should not pass the screen maximun (y + ph > 4), but must keep the gravity calc
  • add jet and coil “you got”
  • TEST – jump is slow in Dingux: need to refactory in order to move the same amount (x axis), but faster (more yinc)
  • (URGENT) with the new jump gravity system, player if “kicking” in the water
  • fix star speed by using sdl_surfaces for stars/bg instead of fill_rect
  • (SERIOUS) check weapon damage in bosses, seems like it is not working
  • moving cursor in weapons menu should move only to the first available weapon, not empty positions
  • fix got weapon sound effect repeating
  • need small music for castle intro
  • check and improve color-cycling in the game intro (is failing in the dingux)
  • adjust timings in intro
  • IA para Apebot
  • ending (rockbot or betabot over train)
  • show boss energy
  • player2 energy must be placed under p1
  • thinner energy bars
  • (URGENT) [PS2] intro feeezes (probally due to colorcycle)
  • INITIAL_HP must be used in NPCs only for bosses
  • [PS2] the “you got” second line is showing trash
  • (URGENT) [PS2] teleporters are sending player to the wrong place
  • [PS2] trash appearing in credits
  • (URGENT/RE-TEST) [PS2] corrigir problema de botoes do player2 no PS2

A versão para Nintendo DS continua ausente, e deve ser o foco do RC2.

Esperamos que vocês gostem, e se acharem algum problema, nos informem.

Bugfixing

O período de correção de bugs está indo bem, e eu gostaria de aproveitar a chance e explicar o porque da ausência da versão de Nintendo DS. ocorre que, durante o desenvolvimento do beta7, expandimos o tamanho da imagem png do tileset para caber as imagens das novas fases. Descobrimos, infelizmente, que o DS não consegue carregar um arquivo tão largo (não tem a ver com memória e sim tamanho em pixels). A solução é encolhermos o arquivo e refazermos algumas fases, ou separar, no DS, o tileset em dois arquivos. Infelizmente o DS é uma máquina muito ruim de se programar para, e por isso a solução deve ainda demorar um pouco.