From f0a0515f2882dea79f0cfc1d528f9f113575f100 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 25 Apr 2026 12:19:51 +0200 Subject: [PATCH] fix(player): puja la sombra pel valor `jump.shadow_y_offset` del YAML --- data/player/morcus.yaml | 5 +++++ data/player/sam.yaml | 5 +++++ source/game/entities/player.cpp | 8 +++++++- source/game/entities/player.hpp | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/data/player/morcus.yaml b/data/player/morcus.yaml index 7ef9949..cab1f57 100644 --- a/data/player/morcus.yaml +++ b/data/player/morcus.yaml @@ -78,6 +78,10 @@ turn: # gravity → acceleració descendent constant (px/s²). # landing_stun_ms → temps en què el jugador queda paralitzat en aterrar # (no es pot moure ni tornar a saltar). +# shadow_y_offset → desplaçament vertical de la sombra (px, positiu = +# puja). Compensa la franja transparent que els +# sprites del jugador tenen sota els peus reals +# perquè camine "pel mig del passadís" (3 px aquí). # L'alçada del cos viu al bloc `collision:` (`height`), igual que la resta # d'entitats: és una propietat de col·lisió, no de la física del salt. # Amb impulse=240 i gravity=600: pic ≈ 48 px, temps total en l'aire ≈ 0.8 s. @@ -85,3 +89,4 @@ jump: impulse: 240 gravity: 600 landing_stun_ms: 200 + shadow_y_offset: 3 diff --git a/data/player/sam.yaml b/data/player/sam.yaml index 6380486..bd0f1a5 100644 --- a/data/player/sam.yaml +++ b/data/player/sam.yaml @@ -78,6 +78,10 @@ turn: # gravity → acceleració descendent constant (px/s²). # landing_stun_ms → temps en què el jugador queda paralitzat en aterrar # (no es pot moure ni tornar a saltar). +# shadow_y_offset → desplaçament vertical de la sombra (px, positiu = +# puja). Compensa la franja transparent que els +# sprites del jugador tenen sota els peus reals +# perquè camine "pel mig del passadís" (3 px aquí). # L'alçada del cos viu al bloc `collision:` (`height`), igual que la resta # d'entitats: és una propietat de col·lisió, no de la física del salt. # Amb impulse=240 i gravity=600: pic ≈ 48 px, temps total en l'aire ≈ 0.8 s. @@ -85,3 +89,4 @@ jump: impulse: 240 gravity: 600 landing_stun_ms: 200 + shadow_y_offset: 3 diff --git a/source/game/entities/player.cpp b/source/game/entities/player.cpp index b2265b6..2cb5664 100644 --- a/source/game/entities/player.cpp +++ b/source/game/entities/player.cpp @@ -146,6 +146,7 @@ void Player::readJumpBlock(const fkyaml::node& yaml) { if (j.contains("impulse")) { jump_config.impulse_px_per_s = j["impulse"].get_value(); } if (j.contains("gravity")) { jump_config.gravity_px_per_s2 = j["gravity"].get_value(); } if (j.contains("landing_stun_ms")) { jump_config.landing_stun_ms = j["landing_stun_ms"].get_value(); } + if (j.contains("shadow_y_offset")) { jump_config.shadow_y_offset = j["shadow_y_offset"].get_value(); } } void Player::applyCardinal(Cardinal c) { @@ -721,7 +722,12 @@ void Player::renderShadow() const { const float CX = getPosX() + (static_cast(sprite_w) * 0.5F); const float GROUND_Y = getGroundFeetY(); const auto SX = static_cast(CX - (static_cast(SHADOW_W) * 0.5F)); - const auto SY = static_cast(GROUND_Y) - SHADOW_H; + // Pugem la sombra `shadow_y_offset` px per compensar la franja + // transparent que el sprite del jugador té sota els peus reals + // (perquè la silueta camine pel mig del passadís en falsa + // perspectiva). Sense aquest ajust, la sombra apareix per sota + // del passadís. + const auto SY = static_cast(GROUND_Y) - SHADOW_H - jump_config.shadow_y_offset; // ARGB negre amb alpha ~40%. `blendRect` mescla sobre el canvas; així // la sombra fosqueja el sòl (pintat o no) sense tapar-lo del tot. diff --git a/source/game/entities/player.hpp b/source/game/entities/player.hpp index 6b1c17c..5ac11a4 100644 --- a/source/game/entities/player.hpp +++ b/source/game/entities/player.hpp @@ -368,6 +368,7 @@ class Player : public AnimatedSprite { float impulse_px_per_s{0.0F}; // Velocitat vertical inicial. float gravity_px_per_s2{0.0F}; // Acceleració descendent constant. int landing_stun_ms{0}; // Stun en aterrar (no es mou ni salta). + int shadow_y_offset{0}; // Px que puja la sombra (compensa transparències al peu del sprite). }; static JumpConfig jump_config;