# Sauerbraten

Cube 2: Sauerbraten (ou somente Sauerbraten) é um jogo de computador de tiro em primeira pessoa multi-plataforma, que pode ser executado nos sistemas operacionais Windows, Linux, FreeBSD e Mac OS X usando OpenGL e SDL. O jogo é gratuito e de código aberto (sob a licença Zlib). Sauerbraten possui modos singleplayer e multi-jogador, além de conter um editor de mapas dentro do próprio jogo, seu principal atrativo.
O desenvolvimento do jogo se iniciou como uma reedição do jogo Cube, lançado em maio de 2004. Em 19 de julho de 2010, foi lançada a versão chamada de "Justice Edition". Em 4 de janeiro de 2013 foi lançada a "Sauerbraten Collect Edition", trazendo 45 novos mapas e 3 novos modos de jogo, chamados de “collect”, “insta collect” e “efficiency collect”.
Em 10 de novembro de 2019 foi confirmado que uma nova versão estava sendo planejada para 2020.
Em 29 de novembro de 2020, após 7 anos da versão anterior, foi lançada a edição "2020 Edition", trazendo SDL 2, quase 200 novos mapas, opções de customização de HUD, novos comandos e várias correções.
Apesar de longas pausas nos lançamentos de versões, Sauerbraten continua recebendo pequenas atualizações em sua página oficial no SourceForge.

## Características

Sauerbraten tem características e funções muito similares às de seu predecessor, Cube, porém apresenta qualidade gráfica melhorada, enquanto mantendo e melhorando um de seus principais objetivos: a edição de mapas em tempo real. O novo sistema utiliza mapas contendo entidades que se estendem em 6 direções (octree), permitindo a criação de geometrias mais complexas, juntamente com maior facilidade de edição.

### Edição em tempo real

Cada nodo com a forma de cubo representa um volume a ser desenhado pela engine gráfica, um simples cubo, cujas bordas podem ser encurtadas ou ampliadas para deformar, de forma a criar uma variedade de formatos. O paradigma "WYSIWYG" - em que o resultado da edição é revelado e experimentado instantaneamente e em sua forma final - permite aos desenvolvedores de mapas adicionar muitos detalhes aos mapas, enquanto diminui o tempo necessário para criá-los. Isso é um distanciamento do paradigma padrão em que os editores lidam com milhares de polígonos numa rede tridimensional de triângulos, que o sistema tenta subdividir para se encaixarem em árvores de dados, como as a árvores BSP, que requerem extenso pré-processamento para serem construídas. O feito de Sauerbraten é então que os modelos criados pelos editores já estão na estrutura de uma árvore de dados (octree), que consiste de pequenos cubos, da qual os polígonos são gerados com grande eficiência para a unidade de processamento gráfico desenhar, sem a necessidade de pré-processamento intensivo.

### Jogabilidade

O jogo contém modo multiplayer e singleplayer. O jogador pode se conectar a uma rede local (LAN) ou à Internet, em que o cliente requisita uma lista de servidores de um "servidor mestre". O jogo online tem modos de Deathmatch, Captura de pontos de controle, Instagib (morte instantânea, em vários tipos, como em times, Captura de bandeira, etc), assim como modos de edição cooperativa online. Existem também modos offline, com diversas fases ou em mapas online contra oponentes de inteligência artificial (bots).

## Modos de jogo

Sauerbraten conta com uma vasta lista de modos que modificam a jogabilidade, adicionando diferentes objetivos e itens para o jogador.
* Coopedit: Edição de mapas em modo cooperativo.
* Single Player: Pequenas histórias distintas em diferentes mapas com monstros, portas, elevadores, itens e botões.
* EFFIC (Eficiência): Todos os jogadores já nascem com todas as armas disponíveis, menos o Revolver.
* INSTA (Morte Instantânea): Todos os jogadores já nascem com apenas 1 (um) de vida e somente uma arma disponível, o Rifle.
* FFA (Livre Para Todos): Todos os jogadores já nascem com apenas uma arma, o Revolver, e é necessário coletar itens pelo mapa para adquirir mais armas e vida.
* Tactics (Táticas): Jogadores nascem com duas armas aleatórias e colete, não há itens, é necessário eliminar outros jogadores para adquirir pontos.

##### Modificadores de Modos

Os modificadores são adições especiais aos modos primários, seguem o mesmo principio do modo original, porém com novas regras.
* Team (Time): Jogadores são balanceados em times ("Evil", "Good" e outros customizáveis), o time com maior pontuação de eliminações vence.
** Collect (Coletar): Parecido com Team, porém jogadores precisam eliminar inimigos para adquirir caveiras, times ganham pontos ao entregar as caveiras.
* CTF (Capture A Bandeira): Jogadores são balanceados em dois times ("Evil" e "Good"), o objetivo de cada time é roubar a bandeira inimiga e levar para a própria base, o jogo termina quando o tempo acaba ou quando um time consegue a pontuação de 10 bandeiras.
** Protect (Proteger): Semelhante ao CTF, porém o objetivo é tocar na bandeira inimiga e proteger a própria bandeira (nesse modo jogadores podem pegar a própria bandeira).
** Hold (Segurar): Semelhante ao CTF, porém há apenas uma bandeira, jogadores precisam manter aquela bandeira por 20 segundos para fazer pontos.
* Capture (Capturar): Jogadores nascem com duas armas aleatórias e precisam capturar as bases inimigas para conseguir mais armas, cada time recebe uma pontuação ao ficar 10 segundos em uma base.
** Regen Capture: Semelhante ao Capture, porém jogadores nascem sem armas, precisam capturar bases para regenerar a vida e receber mais armas.
Todos os modificadores, exceto Capture e Regen Capture, utilizam por padrão o modo primário FFA, se nenhum outro for especificado.
Combinações de modificadores possíveis :
| Modificador | EFFIC | INSTA | FFA | TACTICS |
| Collect | Sim | Sim | Sim | Não |
| Teamplay | Sim | Sim | Sim | Sim |
| CTF | Sim | Sim | Sim | Não |
| Protect | Sim | Sim | Sim | Não |
| Hold | Sim | Sim | Sim | Não |
| Capture | Não | Não | Não | Não |
| Regen Capture | Não | Não | Não | Não |

## Linguagem de Programação CubeScript

Cube 2 Sauerbraten e outros jogos do motor Cube Engine, contam com uma Linguagem de Script embutida, conhecida como CubeScript.
CubeScript é uma linguagem simples baseada em C++ com a intenção de ser usada somente dentro do jogo, é responsável por cuidar da interface do usuário, executando ações ao pressionar teclas ou ao enviar comandos.
Apesar de simples, CubeScript suporta todas as operações básicas de uma linguagem de programação de alto nível e interage diretamente com o console do jogador (a interface de textos e imagens presente no jogo).
Em paralelo ao CubeScript, existem os comandos "GUI" que transformam o código em interface gráfica do jogo, possibilitando adicionar textos coloridos, botões, imagens, slidebars e campos de texto.
Em CubeScript não é obrigatório o uso de ponto e virgula no fim de cada linha de código separados por uma quebra de linha, mas se torna obrigatório o uso quando duas ou mais ações distintas são adicionadas em uma mesma linha. Comentários são feitos utilizando duas barras (//), não é possível criar comentários de múltiplas linhas utilizando atalhos como "/* */".

##### Console (interface) do jogo

É possível acessar três tipos de consoles no Sauerbraten, um dedicado ao bate-papo dos jogadores, e outro dedicado à informações de partida, este último substitui o primeiro quando aberto.
Console superior: Arquivo de mensagens de partidas e bate-papo recebidos durante toda a sessão do jogador.
Console inferior: Também utilizado para bate-papo, qualquer texto inserido após um caractere de barra (/) será interpretado como uma função de CubeScript.
O terceiro console é um editor de textos, o editor conta com botões para salvar e carregar arquivos de texto, também botões para executar, copiar, colar e deletar o conteúdo do editor. O editor de textos pode ser acessado pelo usuário ao enviar o comando /notepad no console.

##### Funções comuns utilizando CubeScript

Enviando uma mensagem "Olá Mundo" para o console do jogador.
Executando um Loop e enviando mensagens formatadas para o console do jogador.
Criando uma interface de usuário única, separada dos demais menus do jogo, com um titulo e um botão para fechá-la e enviar uma mensagem, o botão contém um ícone ("exit") que é localizado nos arquivos do jogo.
Uma interface pode ser chamada pelo usuário ao enviar o comando /showgui "identificação" no console do jogo, a identificação é o texto adicionado na função newgui.
Criando uma função para retornar ao jogador os dados preenchidos em uma interface através de input de texto.
O Sauerbraten possui uma enorme documentação online onde aborda todos os aspectos. A documentação pode ser acessada também localmente, disponível na pasta sauerbraten/docs.

## Eisenstern

Eisenstern foi um protótipo de RPG desenvolvido a partir do sistema de Cube 2. O jogo, apesar de incompleto, era lançado juntamente com o Sauerbraten.
O projeto original foi descontinuado.