feat(title): game_logo.gif al lloc del text i font PixeloidSans-Bold per al copyright

This commit is contained in:
JailDesigner committed 2026-05-06 22:35:27 +02:00
1 parent 8bc45ccedc
commit 233fcb8226
11 files changed
+197 -45

No files matched your search

+18 -39
View File
@@ -32,11 +32,6 @@ namespace {
// docs/audit-core-rendering.md).
const char* const SCENE_NAME = "TITLE";
// Textos hardcodejats fins que tinguem artwork. Quan apareguen com
// a sprites, aquesta secció desapareix sencera.
const char* const TITLE_LINE_1 = "Aventures en Egipte";
const char* const TITLE_LINE_2 = "A R C A D E";
constexpr int TITLE_Y_PERCENT = 25;
constexpr int PROMPT_Y_PERCENT = 60;
constexpr int COPYRIGHT_Y_PERCENT = 90;
@@ -63,14 +58,6 @@ namespace {
});
}
// Separació vertical entre la primera i segona línia del títol. Una
// alçada de línia és l'opció més llegible al canvas de 240 px sense
// entrar a configuració extra; si demà cal afinar-ho, mou-se a
// ui.yaml.
[[nodiscard]] auto titleLineGap(const Text& font) -> int {
return font.getLineHeight();
}
// Reproducció del so de START. Centralitzat ací per disparar-lo des
// dels punts on una pulsació té efecte real (entrada a STARTING o
// upgrade a BOTH); l'attract timeout no l'ha de tocar.
@@ -82,10 +69,11 @@ namespace {
} // namespace
TitleScene::TitleScene(std::shared_ptr<Text> display_font, std::shared_ptr<Text> condensed_font, std::shared_ptr<Surface> background, std::shared_ptr<Surface> mini_logo)
: display_font_(std::move(display_font)),
condensed_font_(std::move(condensed_font)),
TitleScene::TitleScene(std::shared_ptr<Text> condensed_font, std::shared_ptr<Text> copyright_font, std::shared_ptr<Surface> background, std::shared_ptr<Surface> game_logo, std::shared_ptr<Surface> mini_logo)
: condensed_font_(std::move(condensed_font)),
copyright_font_(std::move(copyright_font)),
background_(std::move(background)),
game_logo_(std::move(game_logo)),
mini_logo_(std::move(mini_logo)),
timer_ms_(UiConfig::get().titleDurationMs()) {
std::cout << "[scene] " << SCENE_NAME << " start\n";
@@ -275,24 +263,14 @@ void TitleScene::render() {
constexpr Uint8 OUTLINE_DIST = 1;
constexpr Uint8 STROKE4 = Text::CENTER_FLAG | Text::COLOR_FLAG | Text::STROKE4_FLAG;
if (display_font_) {
const int TITLE_Y = (GameCanvas::HEIGHT * TITLE_Y_PERCENT) / 100;
display_font_->writeDX(STROKE4,
GameCanvas::CENTER_X,
TITLE_Y,
TITLE_LINE_1,
display_font_->getDefaultKerning(),
TEXT_COLOR,
OUTLINE_DIST,
OUTLINE_COLOR);
display_font_->writeDX(STROKE4,
GameCanvas::CENTER_X,
TITLE_Y + titleLineGap(*display_font_),
TITLE_LINE_2,
display_font_->getDefaultKerning(),
TEXT_COLOR,
OUTLINE_DIST,
OUTLINE_COLOR);
// Logotip del joc: GIF amb la seua paleta nadiua, centrat
// horitzontalment al canvas i ancorat al mateix Y on abans naixia
// la primera línia del text. Substitueix els dos `display_font_`
// que pintaven "Aventures en Egipte" + "A R C A D E".
if (game_logo_) {
const int LOGO_Y = (GameCanvas::HEIGHT * TITLE_Y_PERCENT) / 100;
const int LOGO_X = GameCanvas::CENTER_X - (game_logo_->getWidth() / 2);
game_logo_->render(LOGO_X, LOGO_Y);
}
if (condensed_font_) {
@@ -326,20 +304,21 @@ void TitleScene::render() {
// Footer: minilogo centrat horitzontalment damunt del © de
// copyright. El text va al 90% Y, el logo just damunt amb un petit
// gap (LOGO_GAP_PX). Tots dos blocs són hardcodejats fins que
// tinguem artwork final.
if (condensed_font_) {
// gap (LOGO_GAP_PX). El copyright fa servir una font pixel-art
// pròpia (PixeloidSans-Bold) — més neta i petita que la del
// "press start" perquè la jerarquia tipogràfica del peu quedi clara.
if (copyright_font_) {
const int COPY_Y = (GameCanvas::HEIGHT * COPYRIGHT_Y_PERCENT) / 100;
if (mini_logo_) {
const int LOGO_X = GameCanvas::CENTER_X - (mini_logo_->getWidth() / 2);
const int LOGO_Y = COPY_Y - mini_logo_->getHeight() - LOGO_GAP_PX;
mini_logo_->render(LOGO_X, LOGO_Y);
}
condensed_font_->writeDX(Text::CENTER_FLAG | Text::COLOR_FLAG,
copyright_font_->writeDX(Text::CENTER_FLAG | Text::COLOR_FLAG,
GameCanvas::CENTER_X,
COPY_Y,
"© 2026 JailDesigner",
condensed_font_->getDefaultKerning() - 1,
copyright_font_->getDefaultKerning(),
ui_config.titleCopyrightColor());
}
+3 -2
View File
@@ -34,7 +34,7 @@ class TitleScene : public Scene {
STARTING,
ATTRACT_OUT };
TitleScene(std::shared_ptr<Text> display_font, std::shared_ptr<Text> condensed_font, std::shared_ptr<Surface> background, std::shared_ptr<Surface> mini_logo);
TitleScene(std::shared_ptr<Text> condensed_font, std::shared_ptr<Text> copyright_font, std::shared_ptr<Surface> background, std::shared_ptr<Surface> game_logo, std::shared_ptr<Surface> mini_logo);
~TitleScene() override;
void update(int delta_ms) override;
@@ -49,9 +49,10 @@ class TitleScene : public Scene {
void advanceToIntro(DebugConfig::StartingPlayers players);
void advanceToLogo();
std::shared_ptr<Text> display_font_;
std::shared_ptr<Text> condensed_font_;
std::shared_ptr<Text> copyright_font_;
std::shared_ptr<Surface> background_;
std::shared_ptr<Surface> game_logo_;
std::shared_ptr<Surface> mini_logo_;
int timer_ms_;
int blink_elapsed_ms_{0};