diff --git a/data/sounds/effects/enemy_hit.wav b/data/sounds/effects/enemy_hit.wav new file mode 100644 index 0000000..50d9bbd Binary files /dev/null and b/data/sounds/effects/enemy_hit.wav differ diff --git a/source/core/defaults/audio.hpp b/source/core/defaults/audio.hpp index ecc7f71..d9453a3 100644 --- a/source/core/defaults/audio.hpp +++ b/source/core/defaults/audio.hpp @@ -36,6 +36,7 @@ namespace Defaults::Sound { constexpr const char* CONTINUE = "effects/continue.wav"; // Cuenta atras constexpr const char* ENEMY_EXPLOSION = "effects/enemy_explosion.wav"; // Explosió d'enemic (debris default) + constexpr const char* ENEMY_HIT = "effects/enemy_hit.wav"; // Impacte parcial a enemic (debris_partial — HP > 1) constexpr const char* PLAYER_EXPLOSION = "effects/player_explosion.wav"; // Explosió de la nau del jugador constexpr const char* FRIENDLY_FIRE_HIT = "effects/friendly_fire.wav"; // Friendly fire hit constexpr const char* HIT = "effects/hit.wav"; // Enemic ferit (primer impacte → HURT) diff --git a/source/game/systems/enemy_event_dispatcher.cpp b/source/game/systems/enemy_event_dispatcher.cpp index 2a19957..1def771 100644 --- a/source/game/systems/enemy_event_dispatcher.cpp +++ b/source/game/systems/enemy_event_dispatcher.cpp @@ -31,9 +31,10 @@ namespace Systems::EnemyEvents { } // Helper compartit per CREATE_DEBRIS i CREATE_DEBRIS_PARTIAL: única - // crida a explode(), paràmetres alineats; només canvien piece_scale - // (1.0 explosió, 0.3 xip) i el color (cos vs hit-feedback). - void spawnDebrisForEnemy(Systems::Collision::Context& ctx, const Enemy& enemy, const Bullet* bullet, float piece_scale, SDL_Color color) { + // crida a explode(), paràmetres alineats; canvien piece_scale (1.0 + // explosió, 0.3 xip), el color (cos vs hit-feedback) i el so + // (ENEMY_EXPLOSION en la mort vs ENEMY_HIT en l'impacte parcial). + void spawnDebrisForEnemy(Systems::Collision::Context& ctx, const Enemy& enemy, const Bullet* bullet, float piece_scale, SDL_Color color, const char* sound) { constexpr float SPEED_EXPLOSIO = 80.0F; const Vec2 INHERITED_VEL = enemy.getVelocityVector() * Defaults::Physics::Debris::ENEMY_VELOCITY_INHERITANCE; @@ -48,7 +49,7 @@ namespace Systems::EnemyEvents { INHERITED_VEL, 0.0F, 0.0F, - Defaults::Sound::ENEMY_EXPLOSION, + sound, color, Defaults::Physics::Debris::ENEMY_LIFETIME, Defaults::Physics::Debris::ENEMY_FRICTION, @@ -207,13 +208,13 @@ namespace Systems::EnemyEvents { doAddScore(ctx, enemy, shooter_id); break; case EnemyActionType::CREATE_DEBRIS: - // Explosió de mort: trossos en color cos (correcte físicament). - spawnDebrisForEnemy(ctx, enemy, bullet, 1.0F, enemy.getConfig().colors.normal); + // Explosió de mort: trossos en color cos + so ENEMY_EXPLOSION. + spawnDebrisForEnemy(ctx, enemy, bullet, 1.0F, enemy.getConfig().colors.normal, Defaults::Sound::ENEMY_EXPLOSION); break; case EnemyActionType::CREATE_DEBRIS_PARTIAL: - // Xip d'impacte: trossos en color wounded (daurat) per - // diferenciar-los visualment del cos i marcar "damage". - spawnDebrisForEnemy(ctx, enemy, bullet, Defaults::Enemies::Debris::PARTIAL_PIECE_SCALE, enemy.getConfig().colors.wounded); + // Xip d'impacte: trossos en color wounded (daurat) + so + // ENEMY_HIT, diferent de l'explosió per marcar damage no letal. + spawnDebrisForEnemy(ctx, enemy, bullet, Defaults::Enemies::Debris::PARTIAL_PIECE_SCALE, enemy.getConfig().colors.wounded, Defaults::Sound::ENEMY_HIT); break; case EnemyActionType::CREATE_FIREWORKS: // Burst de mort: línia blanca + glow wounded (daurat) per