From 72c27ed92ec035d77e2f9d2fc8a6223b0c21f064 Mon Sep 17 00:00:00 2001 From: En Yi Date: Mon, 13 Nov 2023 14:23:31 +0800 Subject: [PATCH] Add more SFX Also, revert crate ground state behaviour --- engine/engine_conf.h | 4 ++-- scene_test.c | 8 ++++++++ scenes/assets_tag.h | 1 + scenes/game_systems.c | 28 ++++++++++++++++++++++++++++ scenes/items_ent.c | 4 +--- 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/engine/engine_conf.h b/engine/engine_conf.h index d77d165..8184773 100644 --- a/engine/engine_conf.h +++ b/engine/engine_conf.h @@ -3,12 +3,12 @@ #define MAX_TEXTURES 16 #define MAX_SPRITES 64 -#define MAX_SOUNDS 16 +#define MAX_SOUNDS 32 #define MAX_FONTS 4 #define MAX_N_TILES 4096 #define MAX_NAME_LEN 32 #define MAX_LEVEL_PACK 4 -#define N_SFX 18 +#define N_SFX 32 #define MAX_EMITTER_CONF 8 //#define MAX_PARTICLE_EMITTER 8 #define MAX_ACTIVE_PARTICLE_EMITTER 32 diff --git a/scene_test.c b/scene_test.c index 71f45ad..95eaa19 100644 --- a/scene_test.c +++ b/scene_test.c @@ -48,6 +48,14 @@ int main(void) load_sfx(&engine, "snd_wdrop", WATER_IN_SFX); load_sfx(&engine, "snd_bland", BOULDER_LAND_SFX); load_sfx(&engine, "snd_bubble", BUBBLE_SFX); + load_sfx(&engine, "snd_mdestroy", METAL_DESTROY_SFX); + load_sfx(&engine, "snd_wdestroy", WOOD_DESTROY_SFX); + load_sfx(&engine, "snd_cland", WOOD_LAND_SFX); + load_sfx(&engine, "snd_explsn", EXPLOSION_SFX); + load_sfx(&engine, "snd_coin", COIN_SFX); + load_sfx(&engine, "snd_arrhit", ARROW_DESTROY_SFX); + load_sfx(&engine, "snd_launch", ARROW_RELEASE_SFX); + load_sfx(&engine, "snd_launch", BOMB_RELEASE_SFX); LevelScene_t scene; scene.scene.engine = &engine; diff --git a/scenes/assets_tag.h b/scenes/assets_tag.h index eeb8bd6..520dba5 100644 --- a/scenes/assets_tag.h +++ b/scenes/assets_tag.h @@ -32,5 +32,6 @@ typedef enum SFXTag { BOMB_RELEASE_SFX, EXPLOSION_SFX, BUBBLE_SFX, + COIN_SFX, } SFXTag_t; #endif diff --git a/scenes/game_systems.c b/scenes/game_systems.c index c475929..c565c00 100644 --- a/scenes/game_systems.c +++ b/scenes/game_systems.c @@ -281,6 +281,7 @@ void destroy_entity(Scene_t* scene, TileGrid_t* tilemap, Entity_t* p_ent) .update_func = &simple_particle_system_update, }; play_particle_emitter(&scene->part_sys, &emitter); + play_sfx(scene->engine, COIN_SFX); } else if (p_ent->m_tag == ARROW_ENT_TAG) { @@ -294,6 +295,7 @@ void destroy_entity(Scene_t* scene, TileGrid_t* tilemap, Entity_t* p_ent) .update_func = &simple_particle_system_update, }; play_particle_emitter(&scene->part_sys, &emitter); + play_sfx(scene->engine, ARROW_DESTROY_SFX); } remove_entity_from_tilemap(&scene->ent_manager, tilemap, p_ent); @@ -1470,6 +1472,10 @@ void state_transition_update_system(Scene_t* scene) { play_sfx(scene->engine, BOULDER_LAND_SFX); } + else if (p_ent->m_tag == CRATES_ENT_TAG) + { + play_sfx(scene->engine, WOOD_LAND_SFX); + } } if (p_mstate->water_state == 0b01) { @@ -1755,15 +1761,19 @@ void container_destroy_system(Scene_t* scene) { case CONTAINER_LEFT_ARROW: new_ent = create_arrow(&scene->ent_manager, 0); + play_sfx(scene->engine, ARROW_RELEASE_SFX); break; case CONTAINER_RIGHT_ARROW: new_ent = create_arrow(&scene->ent_manager, 1); + play_sfx(scene->engine, ARROW_RELEASE_SFX); break; case CONTAINER_UP_ARROW: new_ent = create_arrow(&scene->ent_manager, 2); + play_sfx(scene->engine, ARROW_RELEASE_SFX); break; case CONTAINER_DOWN_ARROW: new_ent = create_arrow(&scene->ent_manager, 3); + play_sfx(scene->engine, ARROW_RELEASE_SFX); break; case CONTAINER_BOMB: if (dmg_src != NULL && dmg_src->m_tag == PLAYER_ENT_TAG) @@ -1782,19 +1792,37 @@ void container_destroy_system(Scene_t* scene) launch_dir.x = -1; } new_ent = create_bomb(&scene->ent_manager, launch_dir); + play_sfx(scene->engine, BOMB_RELEASE_SFX); } else { new_ent = create_explosion(&scene->ent_manager); + play_sfx(scene->engine, EXPLOSION_SFX); } break; case CONTAINER_EXPLOSION: new_ent = create_explosion(&scene->ent_manager); + play_sfx(scene->engine, EXPLOSION_SFX); break; default: new_ent = NULL; break; } + if ( + p_container->item != CONTAINER_EXPLOSION + && p_container->item != CONTAINER_BOMB + ) + { + if (p_container->material == WOODEN_CONTAINER) + { + play_sfx(scene->engine, WOOD_DESTROY_SFX); + } + else + { + play_sfx(scene->engine, METAL_DESTROY_SFX); + } + } + if (new_ent != NULL) { CTransform_t* new_p_ct = get_component(new_ent, CTRANSFORM_COMP_T); diff --git a/scenes/items_ent.c b/scenes/items_ent.c index 1ec4117..01e35d9 100644 --- a/scenes/items_ent.c +++ b/scenes/items_ent.c @@ -46,9 +46,7 @@ Entity_t* create_crate(EntityManager_t* ent_manager, bool metal, ContainerItem_t CTransform_t* p_ctransform = add_component(p_crate, CTRANSFORM_COMP_T); p_ctransform->grav_delay = 7; p_ctransform->shape_factor = metal ? (Vector2){0.7,0.7} : (Vector2){0.8,0.8} ; - CMovementState_t* p_move = add_component(p_crate, CMOVEMENTSTATE_T); - p_move->ground_state |= 3; - + add_component(p_crate, CMOVEMENTSTATE_T); add_component(p_crate, CTILECOORD_COMP_T); CHurtbox_t* p_hurtbox = add_component(p_crate, CHURTBOX_T);