Nincs leírás

Gabriel Capella 5722e7dc0e Inset the core so its gap to the first ring matches the tile gaps 5 napja
assets b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
scenes b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
scripts 5722e7dc0e Inset the core so its gap to the first ring matches the tile gaps 5 napja
.dockerignore b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
.gitignore b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
Dockerfile b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
README.md b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
export_presets.cfg b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja
manual.md 7060ab9ab9 Transformado manual de .txt para .md 9 éve
project.godot b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 napja

README.md

RedCore

Gabriel Capella, 8962078

João Herique Luciano, 8535957

EP2 MAC0463

O jogo desenvolvido nesse projeto foi um estilo brick-break onde o objetivo é avançar de fases atingindo o núcleo vermelho dentro das camadas de blocos. Os blocos em questão podem ser destrúidos ao serem atingidos pela(s) bola(s) em jogo.

Satisfazendo alguns requisitos do trabalho, foram implementadas as seguin- tes funcionalidades:

  • Power ups-downs: aumento/diminuição da pá; bolas múltiplas (até 3); salvar o nível do jogo; super-bola, capaz de destruir qualquer tipo de bloco.
  • Fases aleatórias: as fases são geradas aleatoriamente, no sentido de variação do tamanho, cor e velocidade de rotação dos blocos.
  • Blocos móveis: os blocos se movem ao redor do núcleo.
  • Mais de um tipo de bloco: existem dois tipos de blocos (normais e indestrutiveis).

Alguns detalhes que devem ser mencionados sobre a implementação:

  • Os power ups colidem com a bola, podendo ser jogados para fora do mapa (isso foi proposital para aumentar a dificuldade)
  • O nível salvo pelo jogo reduz em 1 para cada 12 horas sem jogar (queremos que o jogador jogue sempre que possível)
  • O jogo não tem pausa (propositalmente, também), pois o objetivo é conquistar o máximo de níveis possíveis numa jogatina

Power-ups:

  • Aumento/diminuição da pá (power-up azul): tem 50% de chance de aumentar ou de diminuir a pá (diminuir pela metade e aumentar para o dobro do tamanho). A pá volta ao seu tamanho normal depois de um tempo.
  • Bolas múltiplas (power-up rosa): aumenta o número de bolas no jogo para 3.
  • Salvamento do nível (power-up verde): salva o nível atual do jogo
  • Super-bola (power-up): a bola pode destruir tanto os blocos normais quanto o bloco indestrutível. Ela volta ao normal depois de destruir um bloco indestrutível.

Desenvolvimento

O jogo foi desenvolvido originalmente com o framework cocos2d-x, em C++, para Android, e testado em um celular Motorola G4 com Android 7.0.

Hoje o jogo é um projeto Godot 4.7 em GDScript, portado do código cocos2d-x mantendo o mesmo comportamento (geração de fases, power-ups, efeitos e sons). Para editar, abra o project.godot no editor Godot.

  • scenes/: cenas (título, jogo, bola, pá, power-up, efeito de explosão)
  • scripts/: um script por classe do jogo original (blocks.gd é o antigo BlocksLayer)
  • assets/: fonte e sons

Fases Aleatórias

Para deixar o jogo mais legal criamos fases aletórias. São infinitas fases.

Comforme o nível são geradas são geradas fases na seguinte sequência: 1 fase de uma camada, 2 de duas camada, 3 de 3 camadas, até 8 fases de 8. Quando a oitava fase de 8 camadas é completa, o tamanho da camada é dividido por 1.5 e o ciclo se repete, mas agora com no máximo 12 camadas.

Fases com o a mesma quantidade de camadas são destintas pois a probabilidade de blocos indestrutíveis aumenta conforme o jogador chega mais perto da última.

Build

O build roda dentro do Docker, com o Godot em modo headless. Antes de exportar, ele roda as duas cenas e falha se houver erros de script:

docker build --target test -t redcore-build .
id=$(docker create redcore-build) && docker cp $id:/project/build/RedCore.x86_64 build/ && docker rm $id
./build/RedCore.x86_64

Com BuildKit, docker build --output build . faz o mesmo em um passo. Por enquanto só o export para Linux está configurado.

Link para o repositório

https://git.capella.pro/capella/RedCore/