sexta-feira, 3 de março de 2017

SOURCE A VENDA!
Entre em contato via whatsapp , telegram ou skype pra saber como adquirir
61 9 92497414
PedroLFreire2@hotmail.com

ROCK N ROLL RACING SOURCE CODE (CÓDIGO FONTE)


ISOMETRIA GRÁFICA EM JOGOS 2D
Teste
Vá em iniciar->Programas->Snes Fan Remix
abra Rock N Roll Racing Servidor




Agora entre no jogo
Iniciar->Programas->Snes Fan Remix->Rock N Roll Racing VB6

o jogo rodará em tela cheia.

Na hora de escolher o carro, percebemos o seguinte

O jogo pode escolher infinitas cores,  aleatoriamente escolhe 255 para a paleta de cores.

O processo de troca de cor na sprite , é um processamento por mapeamento.
Nos jogos menos complexo, a troca de cor pode ser feita analisando pixel a pixel do primeiro da primeira linha ate o ultimo da ultima linha.
No nosso, a troca de cor é feita por mapeamento, ou seja, o computador mantem na memória um mapa de quais pixels é pra ser trocado. 
Exemplo:
Se uma imagem tem 200 linhas com 200 pixels cadas e se for pra trocar apenas 5 pixels, nao seria preciso, varrer toda a imagem. No mapeamento, o computador sabe a posicao desses 5 pixels.
Isso faz com que a troca de cor em todos os sprites do carro sejam feita bastante rapidamente. Se fosse varrer desde o primeiro pixel ao ultimo, iriamos ter cerca de 20x mais lentidão.


Cada Sprite possui um mapeamento de cor.
Usando de exemplo uma das sprites do jogo, vemos que o nivel de cor cinza indica ao computador toda a lataria do carro.
Sendo assim , eu nao preciso criar varias sprites pra cada cor , basta apenas mandar o computador troca a cor usando esse mapeamento.
As cores verde , azul e vermelho indicam ao computador algumas posicoes do pneu.
Isso é fundamental pra montarmos o efeito de animação dos pneus, caso contrario teriamos que cria 3 sprites adicionais pra cada uma, pelo menos só pra criar o efeito de giro do pneu.

ISOMETRIA
A Isometria é considerada como um "falso 3D" .
Embora haja a percepção das dimensoes X,Y e profundidade,
Estarmos lidando com sprites (2D) , e no fim das contas as sprites podem se mover pela tela pelo eixo X,Y , mas nao podem se deslocar no eixo Z, significando que nao existe via calculo computacional rotacao e perspectiva.
Toda rotacao e perspectivas sao outras sprites ja com o objeto desenhado nelas.
Porem, o Objeto mesmo em isometria adquiri propriedades X,Y e Z que mesmo nao sendo o Z aplicado graficalmente, é aplicado posicionalmente em relacao a pista e a outros objetos, sendo por isso ser preciso um calculo tridimensional.
Por Exemplo, quando o carro salta, ou sobe uma rampa, sua posicao Z muda em relacao ao nivel da pista. Não pode o programado simplesmente deslocar o objeto via eixo X,Y sem saber o calculo resultante.
Como mesmo as bibliotecas modernas como directX , OpenGL, e programas de criacao como Blitz3D e Unity nao nos informar onde as novas posicoes X e Y devem aparecer apos processamo do Eixo Z (Eles apenas desenham o objeto 3D nessa nova posicao , mas nao nos informa os novos pontos X Y de cada vertice). Foi preciso criar um algoritmo para isso, que faz os calculos rotacionais e nos informar a nova posicao X,Y.

Outro aspecto importante na isometria, é que os cenarios nao se movem como em jogos como mario, onde os cenarios se deslocam em angulos retos 90º (se movem reto para esquerda ou direita, ou para cima e para baixo).
Na isometria, os  angulos dos cenarios se movem em outros angulos nao retos, geralmente bastante proximo a 45º
Todo cenário se desloca em 45° quando o carro anda em linha reta, inclusive todas as sprites da pista são desenhadas para isto.
Quando o carro anda em linha reta , qualquer um sabe que ele esta andando em 90° porém a nova orientação do jogo , traduz 90° em 45°, logo quando o carro anda reto, ele não está em 90° , como o Mario do SuperMario faria, e sim está andando em 45°.
Se o carro virar um pouco, ir para 70° , os 2 angulos nao sao mais paralelos, logo ele se chocara contra a borda em algum momento. Esse novo angulo de 70º é traduzido para cerca de 25º.
Assim o computador mantem o posicionamento do carro na memória (indicado pelos vertices numero 0,1,2,3), onde quando o carro anda reto, na memória, eles estão se deslocando exatamente em 90°.
Mas na tela, para se adptar a isometria, o computado recalcula o angulo para 45º.
Tudo o que acontece no jogo, como carro batendo, saindo da pista, se chocando contra outros carros, sendo atingido, enfim,, qualquer coisa, como em qualquer outro jogo, acontece exclusivamente na memoria do computador, os graficos exibidos para nos é apenas a traducao grafica.
O computador sabe pelos vertices e colidiu contra qualquer coisa , se saiu da pista ou qualquer outra coisa.

Programadores de jogos ,uns 90% desistem de criar qualquer jogo com grafico isometrico, ao notarem que o deslocamento de objetos não é como no jogo superMario ou Zelda, onde o andar reto deles é se deslocar em angulo retos pela tela (90,180,270 graus). andar em angulos nao retos e checar onde realmente estão em relacao ao mapa é muito dificil, e as atuais bibliotecas graficas , mesmo super modernas , nao possibilitam o uso de objetos 2D se deslocando corretamente em cenario 3D, por isso, voce programador de jogos graficamente isometrico precisa estudar e criar seu algoritmo de transformacao 3D.



Um exemplo bem pratico pode ser analisado nessa situação da foto abaixo


Podemos notar que o carro saltou pela rampa e deve cair de volta na pista.
Sem uso de calculo 3D , mesmo em imagens 2D, nao sabemos onde o carro deve cair. Nao basta simplesmente o programador mando a posicao Y do carro ir descendo.


Devido a velocidade que o carro esteja, ele pode "flutuar" mais ou menos tempo no ar. Simplesmente descer o eixo Y do carro nao indica onde o carro deve cair realmente.


Aplicando calculo tridimensional , vemos 4 numeros que representam os 4 vertices do carro (ponta de frente esquerda, frente direita, traseira esquerda e traseira direita.)
Vemos algumas linhas, que sao as bordas dos polignos que representam cada pedaco da pista.

Na memoria do computador,  constantemente ele verifica a situacao dos vertices do carros em relacao a pista e outros objetos recalcula as novas posicoes 2D na tela, alem de tambem verifica se os vertices colidiram contra outros objetos, como as bordas, se estao na rampa, se estao fora da pista , se foram atingidos por armas , se se chocaram contra outros carros e assim vai.

Esse video mostra o deslocamento do carro tanto na tela quanto na memoria (representado pelos vertices). Não se preocupe se as linhas mapeadas nao estao em 90º, na memoria estão, e essa é a base da programacao.




Notem o carro ou cenário se deslocando 45° e os vertices 0,1,2,3 que representam o carro se deslocando 90º em relacao as linhas (bordas dos poligonos que representam os pedacos da pista).




Comandos

A – pula
Z – acelera
S – atira
X – solta arma traseira disponível (no caso o óleo)
Setas Esquerda/Direita - vira o carro , escolhe piloto , etc.
Seta para Baixo – freia o carro

ESC – cancela diversas ações

Espaço – Usado apenas caso tenha pedido para sair do servidor ,e tenha desistido disto.

N - Mostra wireframe
I - Mostra informações
' - Desce o console para digitar comando para o servidor
TAB - Informação dos jogadores

Comandos do servidor
timeleft - mostra tempo restante
kick - "Kica" "Chuta" um jogador do servidor
sv_hideconsole - esconde console
gl_vsync - ativa sincronismo vertical da placa de video
showfps - mostra fps
cl_quit - sai do jogo
cl_gaitestimation - estimacao de desempenho do jogo em relacao a conexao do servidor. se o servidor estiver lento e nao conseguir mandar ao cliente sua posicao no jogo, o proprio jogo cria sua estimativa de posicao atraves de alguns calculos.
name - ajusta o nome
camleft - ajusta posicao da camera.
camright - ajusta posicao da camera.
camup - ajusta posicao da camera.
camdown - ajusta posicao da camera.
fixecam - desliga/liga a movimentacao suave da camera tentando centralizar o carro.
camspeed - velocidade da movimentacao da camera centralizando o carro

Sobre o código
Feito em Visual Basic 6
É uma recriação do jogo Rock N Roll Racing

usa Directx7 , embora seja antigo e possua bem menos recursos graficos que o Dx8, o DX7 usa manipulacao de sprites sem necessidade do sprite ser uma textura de um poligono como acontece no Dx8 em diante, isso permite uma otima perfomance.

caso tenha interesse no código fonte, ele está custando R$7000 pela toda mistica que envolve esse jogo e por toda a complexidade de programacao que envolve no desenvolvimento de um jogo com isometria gráfica.
Foram colocadas 3 pista.
1 - Mundo.
1- Carro.
Aceito propostas
WhatsApp +55 61 9 92497414
skype: PedroLFreire2@hotmail.com