Dealing with bugs

I’m now in the process to solve some problems with the engine.
The first one is scrolling, while it has been fixed and also helped closing other nasty problems in the code found while re-implementing the scroll, it still lacks support for two players, the scroll is still based in just one. Now, we must take care to not scroll the screen in a way any of the two players disappear from the screen. While in regular horizontal scroll this is not a problem, Rockbot is meant to be a platform game, so scrolling of screen change is more complex.
Think about the case of entering a boss room: how one player can enter it and the second one not?
Or when you go up/down a ladder and the screen is scrolled to show a new part of the stage. What to do that if the other player is not even in the ladder?

The solution, of course, is to now allow the player out of the screen while the second one is not also on the exit. Meaning that, to enter on a boos room, both must be in the door area, or to change area when on a ladder, both must be.. in the ladder!

Another problem is that in one player mode, when you die, you just return to a “safe spot”, in the start or middle of the stage. In 2 player mode, the player must return to the same part, but not in the same spot, because this can make him die again – imagine diying by falling in spikes, then returning above the same spikes again and again. A good solution to this problem is found in chip & dale for the NES, the player that died returns floating in a baloon, and press a button the the character is at a good position.

While adding so many problems, having two player simultaneous adds a lot of fun to the game, and is a feature used so few times in games that it is a shame. Godd times of Battletoads, Chip & Dale and Contra ūüôā

Game concepts

While development is a little slow (using my free time for other kind of fun things) I’ve started to think about the game design itself. While player characters are basically done (Rockbot and Betabot) we need to start to think about bosses, enemies, and the most difficult part in my opinion: the background.

[Rockbot first draft]

For bosses, I’ve started, in the best Megaman’s and Capcom’s tradition, a contest between my friends for ideas, concepts and design. While they have priority, anyone is welcome to participate, just post a comment in this topic.
Enemies and background need to have bosses decided first to get started, and I’m afraid drawing backgrounds will take a long time so for now, we’ll use very simple backgrounds, and eliminate as soon as possible the ones I’ve got from RPG Maker.

So, while the idea for this game is to have and editor, I’m focusing in harcoding most things, exept for the graphics and stages; so do not expect to create a game using it for a while, first we need to create a game for developing the engine with it. First version will be just a megaman-like game, not an editor like RPG Maker.

Better quality code

Most work being done in Rockbot lately is just the rewrite of old code. This is happening for several reasons, such as the original code being based on a RPG and not an action game, new need when engine envolves to support multiple players and projectiles, and finnaly because Rockbot is meant to be a kind of “learning” project, not only for me, but for people who will read the code, so I’m trying to make it more legible.

[TTF fonts in action]

As news, we have working support for SDL_ttf and using some old-school fonts, some fixes in sprites, an shooting. For now, the shooting does nothing more than draw the projectiles on the screen, but it already led to a lot of bug fixes because it showed some fails, and some optimization. Now I need to fix the scroolling, that is based on a really old code and concept, that I need to re-work from scratch.

[shooting]

All in all, it is a boring phase for the project now, but things are looking really bright for the future.

Player 2 – READY

[English]
Just commited to our internal subversion repository a big update including a new, improved and easier animation system and support for simultaneous two player game. Also, a first version of our custom made graphics, that still need some work, but already gives and idea of things to come. We still need to work on self-made background graphis to move the project to sourceforge.

[Rockbot on left, and Betabot on right]

There are some bugs that need to be worked right now, such as redrawning all sprites after a screen scrolling (not only the sprite that caused the scroll), better handling os sprite erasing to avoid copying parts of other sprites and leaving those on the underscreen, animation duration, lock screen scroll if one player os on the extreme left/right and much more.


[Português]
Acabei de enviar para nosso reposit√≥rio interno uma grande atualiza√ß√£o, incluindo um novo, melhorado e simplificado sistema de anima√ß√£o e suporte a dois jogadores simult√Ęneos. Tamb√©m uma vers√£o inicial de nossos gr√°ficos pr√≥prios, que ainda precisam de trabalho, mas j√° d√£o uma id√©ia do que est√° por vir. Ainda temos que fazer os gr√°ficos de fundo para podermos migrar para o sourceforge.
Existem alguns bugs que precisam ser trabalhados a partir de agora, tais como redesenhar todos os sprites quando mover a tela (n√£o apenas o sprite que causou o movimento), melhorar o ocultamento na tela para evitar copiar partes de outros sprites e deixar estas na tela de fundo,
duração de animação, trancar o movimento da tela quando um dos jogadores está na extrema esquerda/direita.

Progresso

Ontem fiz diversas corre√ß√Ķes que fizeram o jogo funcionar novamente em Playstation 2 – o PS2 tem diversas limita√ß√Ķes que precisam ser respeitadas, ent√£o eu fa√ßo o desenvolvimento no Linux e depois testo e arrumo no console, al√©m de ter acelerado bastante a velocidade depois que achei a resolu√ß√£o certa para a tela da TV (640×448).
Hoje comecei programando umas telas de introdu√ß√£o, e como o tempo est√° feio demais para sair de casa, planejo ainda adicionar suporte a dois jogadores simult√Ęneos na tela, o que j√° terminaria a base mais b√°sica do jogo. Os pr√≥ximos passos seriam adicionar suporte a tiros e NPCs, o que certamente vai exigir a reescrita de uma boa parte de c√≥digo.
[tela de título]
[introdução e história]
[jogo em ação]

Open Rockbot – p√°gina no ar

J√° est√° no ar a p√°gina do projeto Open Rockbot: http://www.upperland.net/rockbot/index.php

A p√°gina ainda n√£o possui muito material, mas colocamos um leitor de RSS para exibir as novidades publicadas aqui e em breve vamos colocar algumas informa√ß√Ķes sobre o desenvolvimento e telas.

Apresentando o projeto Open Rockbot

Eis o nome do projeto para criar uma engine open-source similar aos jogos cl√°ssicos Rockman (Megaman nos EUA). O nome surgiu f√°cil, trocando man (homem) por bot (rob√ī) e mantendo o Rock ao inv√©s de Mega, pois a vers√£o japonesa √© mais legal.
Mais complexos são os objetivos: criar uma engine que seja flexível o suficiente para se criar um jogo praticamente igual a um Rockman clássico; para tanto o programa se dividirá em duas partes.

Primeiramente teremos um editor, programado em C++ e usando a biblioteca Qt para a cria√ß√£o de janelas e widgets, este editor dever√° permitir ao usu√°rio criar mapas, definindo pontos em que o personagem toma dano, morre, portas e outros, ponto inicial de sa√≠da do personagem, e v√°rios aspectos dos npcs, tais como se eles disparam, se atacam ao se aproximarem, etc. Agora pense por exemplo na l√≥gica de Toadman de Rockman 4: se atingido por um tiro, ele pula sobre o personagem. Isto √© dif√≠cil de ser informado pelo usu√°rio, de forma que alguns tipos pr√©-existentes de habilidades e NPCs ter√£o de ser programados diretamente na engine e disponibilizadas como op√ß√Ķes de escolha. A complexidade do editor portanto est√° em dar ao usu√°rio, op√ß√Ķes o suficiente para ele poder criar um jogo que n√£o fique repetitivo.

O game-core, programado em C e utilizando a biblioteca SDL, e portado para Windows, Linux e Playstation 2, é o jogo em sí. Ele deverá abrir um arquivo de jogo, criado no editor, ler as fases e npcs e permitir ao usuário jogá-las. A engine em sí é basicamente simples, e como a idéia é reproduzir a série clássica de Rockman (1-6 e 9), um mínimo de diferenças em relação ao original deve ser feito, mas iremos adicionar alguns elementos inéditos à série, como a possibilidade de duas pessoas jogarem com dois personagens simultaneamente, ao melhor estilo Contra ou Chip & Dale.

Por enquanto √© isso, acompanhem as novidades aqui na upperland.net que logo teremos mais informa√ß√Ķes sobre este projeto.

Desenvolvendo para Playstation 2 – ROUND 2, FIGHT!

Cerca de um ano e meio atr√°s eu brinquei um pouco de converter um pequeno game que estou desenvolvendo, parecido com Rockman (Megaman) para o Playstation 2 usando o SDK PS2DEV dispon√≠vel em  http://www.ps2dev.org. Este SDK, al√©m de um toolkit pr√≥prio, chamado gsKit, tem suporta a uma biblioteca gr√°fica, muito utilizada para jogos em Linux mas tamb√©m utilizada em Windows e Mac, chamada SDL, e para o qual eu j√° havia desenvolvido pequenos games. Ap√≥s ligar com diversos problemas de compila√ß√£o, consegui instalar todo o ambiente em meu Duron 1.6/512MB RAM rodando Ubuntu Linux e comecei a desenvolver.

O problema √© que, do modo como eu estava desenvolvendo, eu tinha que copiar o execut√°vel (.elf) para um memory card ou pendrive USB, e toda vez ir5 do computador em um quarto, at√© o PS2 na sala. Isso at√© n√£o era o maior problema, o problema √© que desta forma, voc√™ n√£o tem a m√≠nima id√©ia se o seu programa deu um erro, voc√™ simplesmente fica olhando para uma tela escura, ou a tela do seu jogo travado. Utilizando c√≥digos de cores para debugar (desenhando ret√Ęngulos coloridos como forma de indicar por onde o programa passou), consegui algum sucesso, mas a dificuldade acabou me fazendo desistir.

Chegamos ao presente. Agora com um computador bem mais r√°pido (Core 2 Duo 2.2/2GB RAM), l√° fui eu tentar um segundo m√©todo: rodar o programa via emulador de Playstation 2, chamado PCSX2. No linux este emulador mostra as mensagens de output (printf para quem sabe C) do processador IOP (entrada e sa√≠da do PS2), e ent√£o eu poderia finalmente debugar e corrigir os problemas do jogo, certo? Errado! O emulador simplesmente quebra com o OpenGL da minha m√°quina…

Bom, nesse ano e meio que se passou, eu adquiri um eeePC 701 e um roteador wifi. Com isso, um segundo método se abriu para mim: programar para o PS2 via rede. Na verdade sem o roteador eu poderia ter feito o trabalho usando um cabo USB ou um cabo cross ethernet, mas nunca me dispus, já com o cabo de rede e o roteador, eu posso também colocar o PS2 em rede, o que é um grande incentivo.

O sistema funciona basicamente assim, você grava um CD com um programa chamado ps2link e um arquivo de configuração que determina o endereço IP quie o PS2 irá requisitar ao seu roteador, e depois um cliente no Windows ou Linux, para acessar o PS2 e enviar para ele o seu programa via rede, ou seja, nada mais de atravessar a sala com o pendrive. Também permite dar um soft-reset Рque já descobri não funciona direito com a SDL por alguma razão que ainda não tive tempo de achar.

Mas enfim, comprei um CD para gravar o programa e um cabo de rede de 6 metros, que se mostrou um metro mais curto do que seria recomend√°vel… ningu√©m manda eu n√£o usar o metro apra medir a dist√Ęncia antes. Gravei o programa, liguei o PS2 com ele e foi pura emo√ß√£o no momento que consegui dar um ping ao endere√ßo 192.168.1.10 e obeter respota! ūüėÄ
A seguir comecei a fu√ßar no c√≥digo, recolocando todos os printfs que eu havia retirado j√° que n√£o apareciam mesmo, e rodar. Em uma hora eu consegui consertar o meu embri√£o de jogo, adicionei suporte ao joystick direito (esse era um dos bugs, o outro era ter muitos acessos aos arquivos, no PS2 ele tem poucos file pointers simult√Ęneos) e unifiquei o sistema de sprites em uma vari√°vel √ļnica, otimizando a execu√ß√£o um bocado.
O resultado est√° nesta screenshot abaixo:

Os gráficos estão com alguns bugs porque eu não tive tempo de arrumar o mapa após criar o novo sistema de tiles/sprites, mas dá para ter uma idéia vendo o protoman lá na parte superior esquerda da tela.
Resumindo, se voc√™ tem paci√™ncia para fazer as configura√ß√Ķes iniciais do SDK, programar para o Playstation 2 usando a SDL √© uma grande barbada, e altamente recomend√°vel pela divers√£o Nerd que ir√° gerar ūüėČ

[GBA] Megaman & Bass

Na época do declínio do Super Nintendo [SNES], uma das produtoras de jgoos que mais resistiu a abandoná-lo foi a Capcom, que fez vários jogos inclusive após lançar similares para Playstation [PSX]. Megaman & Bass (Rockman & Forte no Japão) é um destes jogos, lançado nos EUA somente em sua versão para Gameboy Advance, uma pérola produzida após o Megaman 8 de PSX.
O jogo é muito parecido com o 8, inclusive usando vários gráficos iguais, mas conseguiu melhorar algumas falhas do primeiro, como jogabilidade e dificuldade de algumas fases Рquem é que já não amaldiçoou a fase do skate? Uma das principais mudanças é a inclusão de um segundo personagem, Bass com habilidades diferentes de Megaman, e que seria o equivalente a dificuldade easy, já que possui duplo pulo, apesar de seu tiro ser bem mais fraco.

[ reutilizaram até os chefes de Megaman 8]
[ quase igual ao 8, mas com o Forte jog√°vel]

De diferente tamb√©m, o jogo vai abrindo caminhos ap√≥s derrotar um chefe, ou seja,ap√≥s derrotar um chefe, um caminho se abre atr√°s para que voc√™ possa acessar outras fases. O que ajuda bastante a descobrir a ordem de uso das armas. De igual, o velho esquema de loja de upgrade, iniciado em Megaman 7, Rush e o c√£o Forte basicamente ausentes, sem toda a import√Ęncia que j√° tiveram como em Megaman 3 e 4 e a boa resposta dos controles, que alavancou a Capcom ao sucesso na √©poca do NES e Super NES.

[ caminhos v√£o se abrindo]

Este sem d√ļvida √© um jogo que vale a pena ser terminado, mesmo que em um emulador no PC, pois √© superior a Megaman 8 apesar de ter gr√°ficos ligeiramente inferiores, aus√™ncia de vozes, √© bem mais divertido e menos burocr√°tico que o 8. Al√©m disso tem uma database de personagens de TODOS os jogos, mostrando que este √© o derradeiro encerramento da s√©rie cl√°ssica, e o fato de poder jogar com dois personagens, faz com que voc√™ queira revisitar as fases diversas vezes. Bem que a Capcom poderia ter colocado o Protoman como personagem secreto tamb√©m…

[ jogar com protoman é o sonho de muitos]

Gr√°ficos: 8 [conseguir gr√°ficos de PSX no SNES foi uma proeza]
Som: 6 [na média, não ajuda nem atrapalha]
Divers√£o: 8 [jogar com o Bass e depois com o Megaman vale a pena]
Dificuldade: 5/7 [com o Bass é mais fácil]

Reboot!

Estou integrando o blog com meu site principal (http://www.upperland.net), e por isso vou voltar a utilizar ele para postar informa√ß√Ķes, novidades e reviews de jogos. Aguarde muitas coisas sobre Playstation 2 e Nintendo DS!