O documento seguinte descreve como deverá se parecer o jogo completo. Isso não garante NADA na versão atual do jogo.
O jogo
O propósito deste projeto é fazer a remontagem UNIX/Linux do famoso jogo de DOS "stunts".
"O jogo antigo"
O jogo original de DOS (desenvolvido pela Broderbund e Mindscape) pode ser baixado em diversos sites de jogos antigos (abandonware), ex: o site da XTC.
Stunts é um jogo de corridas 3D, com gráficos CGA/EGA/VGA simples e sem texturas ou sombreamento suave, mas devido às suas espetaculares acrobacias (loopings, pontes como rampas, etc.) ele era realmente divertido de jogar. Um dos melhores aspectos do jogo é que o mesmo possuía um editor de pistas. Devido às suas pistas modulares (tile-based), todo jogador podia fazer suas próprias pistas.
Similaridades / diferenças
UltimateStunts vai ser muito similar a Stunts:
- Ele é um jogo de corridas 3D
- É possível (e relativamente simples) fazer suas próprias pistas
- As pistas são feitas de grandes blocos, chamados "tiles"
- É possível jogá-lo em computadores relativamente antigos
- Os jogos compartilham algumas acrobacias MUITO espetaculares
- Você é livre para dirigir onde quiser (mas vai tomar tempo de penalidade por isso)
- Independência de plataforma: UltimateStunts tem o código aberto e vai utilizar livrarias independentes de plataforma se possível.
- Som 3D
- Melhores pistas: Os tamanhos da pista (l*p*a) são variáveis.
- Melhores gráficos (baseados em openGL), com textura, sombreamento suave, reflexos, etc.
- Multiplayer: o jogo original permitia 1 jogador humano no máximo e 1 computador oponente. UltimateStunts vai ser um jogo de rede baseado em IP, com um servidor e clientes ambos humanos e de inteligência artificial.
- Uma quantidade expandida de "tiles" e pistas. Na verdade, você pode expandir sua própria coleção de "tiles" e pistas com pacotes.
Especificações detalhadas
O jogo
O jogo será um jogo de corridas tridimensional, no qual criar suas próprias pistas e fazer acrobacias são partes essenciais da jogabilidade. A física será quase realística, jogabilidade é mais importante que realismo. Os objetivos que um jogador pode ter são: ganhar dos oponentes numa corrida, conseguir um recorde, e criar pistas que são tão longas, rápidas, divertidas ou (quase) impossíveis de dirigir.Multi-jogador
Jogadores poderão dirigir sozinhos (só para conseguir entrar na lista de recordes), contra oponentes de computador, contra seus amigos numa sessão de tela dividida, ou numa sessão multi-jogadores através de uma rede interna ou da internet. Combinações também serão possíveis, por exemplo, jogar contra oponentes de computador através da internet.Rede
Sempre que a comunicação de rede estiver envolvida em uma sessão de jogo, um programa servidor separado é iniciado em um dos computadores. Será possível iniciar o servidor com um item de menu no programa cliente, mas também será possível iniciar manualmente em um computador servidor dedicado. Todos programas clientes que estiverem envolvidos na sessão do jogo precisam se conectar ao servidor. O servidor não apenas repassa os dados, mas também age como juiz. A simulação do jogo rodará em um servidor, e todos simuladores locais precisam se sincronizar com o servidor. O servidor também decide em que pista se jogará, e quais carros são permitidos. Todos arquivos deverão estar disponíveis no servidor, e se eles não estão disponíveis em um dos clientes, aquele cliente poderá baixar os arquivos faltantes automaticamente.Gráficos
Ultimate Stunts será capaz de oferecer gráficos 3D de alta qualidade, porém, será bastante flexível nesse ponto. De forma a oferecer um jogo jogável mesmo em plataformas sem aceleração por hardware disponível, será possível diminuir a complexidade dos gráficos para um mínimo. Por outro lado, em plataformas de alta performance, tecnologias avançadas serão usadas.As pistas
As pistas consistirão de "tiles" quadrados, assim como em Stunts. As diferenças são:- Os tamanhos de uma pista de Ultimate Stunts não são fixos. Pistas podem ser criadas extremamente grandes. Fatores limitantes podem ser os tamanhos dos valores inteiros (dados serão transferidos através da rede como inteiros de 32 bits; posições são multiplicadas por 1000 para conseguir uma precisão de 1 mm), a precisão de pontos flutuantes (alguns cálculos são feitos com coordenadas absolutas), ou a utilização da memória. A utilização da memória de pistas grandes não será muito grande, porque apenas alguns inteiros são armazenados por tile, para definir a tile modelo, a orientação e a altura.
- Em Stunts, para cada lugar no mapa, um tipo de paisagem e um tipo de tile são definidos. Isso não permite colocar uma tile em cima da outra, e também coloca limitação em diferenças de altura. Em Ultimate Stunts, a pista será uma matriz tridimensional de tiles. Em uma pista com n camadas, um máximo de n tiles podem ser colocados em cima uns dos outros. Para cada lugar nessa grade tridimensional, três valores são definidos: um se refere ao tile modelo, um define a rotação, (0, 1, 2 ou 3) do tile, e um terceiro define a altura do tile (medido em alturas de 1 tile). Este último valor torna possível criar diferenças de altura muito grandes com apenas algumas camadas.
- Os tiles que podem ser usados em Ultimate Stunts não serão limitados a uma configuração fixa. Ao invés disso, todo tile é armazenado em seu(s) próprio(s) arquivo(s), e os arquivos da pista consultarão esses arquivos.
O editor de pistas
O editor de pistas será um programa amigável para edição de pistas. Será possível iniciar o editor de pistas de um item de menu no programa principal. Devido às pistas em Ultimate Stunts serem mais 3D que as pistas de Stunts, o editor será mais complexo. Ele será inspirado pelo editor de montanhas russas de Rollercoaster Tycoon. A idéia básica é ter um "cursor" no final da pista. O usuário pode se as pistas precisam virar para a direita ou esquerda, se precisam ir para cima ou para baixo, se uma acrobacia precisa ser incluída, etc. Então o editor de tile deverá automaticamente aplicar as alterações certas à pista. É claro que o editor de pistas deverá também validar as pistas, e tornar impossível fazer alterações invalidas. O editor de pistas deverá também ter a possibilidade de importar pistas do Stunts original.Replays
Assim como Stunts, Ultimate Stunts terá a possibilidade de criar e ver replays (mas não será capaz de ler replays do Stunts original). Replays de Ultimate Stunts conterão cada posição e orientação para cada objeto em movimento na cena, para cada frame. Com as ferramentas de conversão corretas, esses dados também poderão ser usados em programas de animação (como 3D Studio), por exemplo, para criação de um vídeo de introdução para Ultimate Stunts. Em Ultimate Stunts também será possível usar o replay como um jogador fantasma.O editor stunts3dedit
Quando o projeto se iniciou, não haviam planos para um editor 3D, mas tão breve tiles complexos foram necessários, ele foi criado para reduzir a dificuldade de escrever as definições de tile em arquivos de texto. O editor 3D será o que é agora: uma ferramenta simples para manipulação de muito baixo nível de polígonos, com alguns modificadores de alto nível. Um recurso que se torna cada vez mais importante é a possibilidade de importar formatos de arquivos estrangeiros. A utilização será: criar um modelo em um editor externo, importá-lo no stunts3dedit, fazer algumas correções, e salvar-lo para utilização em Ultimate Stunts.Requerimentos
UltimateStunts é muito flexível em suas necessidades de sistema: ele pode ser jogado em computadores sem aceleração por hardware, mas é possível se utilizar das vantagens da tecnologia 3D em PCs modernos.
As seguintes coisas são necessárias para se ter os arquivos de Windows funcionando:
- Windows 95,NT ou superior (mas Wine, o emulador de Windows no Linux, provavelmente irá funcionar)
- Instalação do openGL (ou Mesa) (padrão na maioria dos sistemas)
- O sistema X window
- openGL (ou Mesa)
- SDL (versões anteriores usavam glut)
- Livraria de rede BSD (sempre(?) disponível em sistemas BSD e Linux)
Para ter o jogo funcionando legal com uma taxa de quadros-por-segundo normal, o seguinte é recomendado:
- Processador Pentium 200MHz ou superior (ou alguma coisa comparável em plataformas não-PC)
- Uma placa de vídeo com aceleração por hardware, suportada pelo OpenGL
- Som (pelo FMOD, ou no futuro versões por openAL))
- Joysticks
A tecnologia
As plataformas principais de desenvolvimento são Linux e Cygwin (= no windows), mas eu estou tentando manter portável para outros ambientes "unix-like", como MacOS/X. Para gráficos e entradas, uma combinação openGL/SDL é utilizada. A rede é feita por funções de rede padrão UNIX (BSD). A comunicação do jogo usará UDP/IP. Som é implementado usando a livraria FMOD, mas assim que eu aprender a usar, uma implementação openAL vai ser adicionada.
O projeto irá prover um número diferente de programas. Estes incluem os seguintes:
- O programa principal de UltimateStunts, provendo gráficos, som, etc. Este programa também fornece um bom gui.
- Um programa servidor
- Um cliente de Inteligência Artificial
- Um editor 3D simples, para modificar "tiles" e carros, e importar de outros formatos de arquivo.
- Um editor de pistas
Atualmente, o programa kdevelop é usado para desenvolvimento.
Rede e simulação
A funcionalidade de vários programas envolvidos em uma sessão de jogo serão muito flexíveis, já que a melhor configuração vai depender de parâmetros de rede, como largura da banda. O seguinte texto descreve futuras versões. Isto NÃO se aplica à versão atual.
Em um jogo local, onde apenas um computador está envolvido na sessão do jogo, todas as coisas (incluindo gráficos, jogadores de IA e física) são feitas por um único programa. Quando mais de um humano é envolvido, em um jogo de rede, os dados serão distribuídos pelo programa servidor. A simulação da física principal é feita pelo programa servidor, mas (dependendo da largura da banda) alguns programas cliente podem também calcular a física, para corrigir a sincronização lenta com o servidor.
Jogadores de IA podem ser iniciados dentro do servidor e do cliente de UltimateStunts. Eles podem também ser adicionados utilizando um programa cliente de IA separado. Experts que quiserem performance melhor, podem usar o programa servidor para agir também como cliente. Desta forma, o programa servidor pode dar entrada em um jogo pela internet através de uma conexão lenta, e agir como servidor para vários jogadores em uma rede local. Isto permite a possibilidade de compartilhar uma única conexão cliente-servidor por vários jogadores.
Gráficos
Devido aos gráficos serem "tile-based", a renderização pode ser feita mais rapidamente desligando o "z-buffering", padrão do openGL e simplesmente renderizar os "tiles" na ordem certa. Além disto, os recursos gráficos usados serão muito configuráveis. Se o "z-buffering" é desligado, textura desligada, sombreamento suave desligado, fundo desligado, resolução definida em 320x200, etc., o jogo se parecerá muito similar ao jogo original de DOS, mas rodará em qualquer computador.