Nessuna descrizione

Gabriel Capella b41bd5473d Rebalance stars against simulated win times 5 giorni fa
assets 70c31513cb Add score, stars, juice, music and a new home screen; auto-save on win 5 giorni fa
scenes 2784f50a53 Add a Levels screen with best stars per level 5 giorni fa
scripts b41bd5473d Rebalance stars against simulated win times 5 giorni fa
tools 70c31513cb Add score, stars, juice, music and a new home screen; auto-save on win 5 giorni fa
.dockerignore b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 giorni fa
.gitignore 70c31513cb Add score, stars, juice, music and a new home screen; auto-save on win 5 giorni fa
Dockerfile b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 giorni fa
README.md b41bd5473d Rebalance stars against simulated win times 5 giorni fa
export_presets.cfg b1babde37e Finish the Godot migration and remove the cocos2d-x version 5 giorni fa
manual.md 70c31513cb Add score, stars, juice, music and a new home screen; auto-save on win 5 giorni fa
project.godot 70c31513cb Add score, stars, juice, music and a new home screen; auto-save on win 5 giorni fa

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 automaticamente a cada vitória e 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
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.

O primeiro bloco especial (água) aparece no nível 15; depois disso, um novo tipo a cada 50 níveis. A fração de blocos especiais cresce de 6% no nível 15 até 50%:

Nível Bloco Comportamento
15 Água 3 toques; esvazia a cada toque e segura a bola por um instante
50 Gelo 2 toques; racha no primeiro e acelera a bola
100 TNT Explode ao quebrar, levando os vizinhos (em cadeia)
150 Borracha 2 toques; rebate a bola mais rápido
200 Fantasma Some e reaparece; a bola atravessa quando ele some
250 Musgo Cresce de novo uma vez, 8 s depois de quebrado
300 Ímã 2 toques; puxa a bola quando ela passa perto

Conforme os blocos acabam, o núcleo passa a puxar a bola, para que o fim de uma fase não se arraste.

Pontuação e estrelas

Cada bloco quebrado vale 10 pontos, multiplicados pelo combo: a cada 3 blocos seguidos sem a bola tocar na pá, o multiplicador sobe (até ×5). Ao vencer, a fase dá de 1 a 3 estrelas conforme o tempo (3 estrelas dentro do tempo-alvo, 2 dentro de 1,75× o tempo-alvo). A melhor pontuação e as estrelas ficam salvas.

A pá direciona a bola: no centro ela sobe reta, nas pontas sai inclinada até 60°.

Música

As duas músicas (menu e jogo) são sintetizadas por tools/make_music.py (precisa de numpy e ffmpeg) e salvas em assets/music/.

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/