# 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: Os power-ups caem como fichas com uma letra; pegue com a pá para usar. Novos power-ups aparecem conforme os níveis avançam: | Ficha | Power-up | A partir do nível | Efeito | | --- | --- | --- | --- | | S | Salvar | 0 | Salva o nível atual | | 3 | Bolas triplas | 0 | Até 3 bolas em jogo (cai quando a bola fica muito tempo sem tocar em nada) | | P | Tamanho da pá | 0 | 50% de chance de dobrar ou reduzir a pá pela metade por 10 s | | X | Super-bola | 0 | Quebra um bloco indestrutível; só cai se ainda houver um | | Z | Câmera lenta | 2 | Bolas a 60% da velocidade por 8 s | | C | Pegar | 4 | A pá segura a bola por 12 s; solte o dedo para lançar | | U | Escudo | 6 | Uma barreira no fundo salva uma bola | | O | Bola grande | 8 | Bola 60% maior por 10 s | | F | Bola de fogo | 12 | Atravessa e quebra blocos por 5 s | | ! | Pressa (negativo) | 15 | Bolas 35% mais rápidas por 6 s | | L | Laser | 20 | A pá atira dois lasers por 6 s | | * | Congelar | 25 | Os anéis param de girar por 8 s | | B | Bola bomba | 30 | O próximo bloco atingido explode | | H | Teleguiada | 40 | A bola curva em direção ao núcleo por 6 s | ### 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 As fases são geradas aleatoriamente e são infinitas. A dificuldade só aumenta com o nível: mais anéis (até 14), anéis girando mais rápido, bola mais rápida, mais blocos indestrutíveis e mais power-ups negativos. A cada 50 níveis aparece um novo tipo de bloco, e a fração de blocos especiais cresce de 8% no nível 50 até 50%: | Nível | Bloco | Comportamento | | --- | --- | --- | | 50 | Água | 3 toques; esvazia a cada toque e segura a bola por um instante | | 100 | Gelo | 2 toques; racha no primeiro e acelera a bola | | 150 | TNT | Explode ao quebrar, levando os vizinhos (em cadeia) | | 200 | Borracha | 2 toques; rebate a bola mais rápido | | 250 | Fantasma | Some e reaparece; a bola atravessa quando ele some | | 300 | Musgo | Cresce de novo uma vez, 8 s depois de quebrado | | 350 | Ímã | 2 toques; puxa a bola quando ela passa perto | ## 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/