Compare commits

...

2 Commits

Author SHA1 Message Date
En Yi 72c27ed92e Add more SFX
Also, revert crate ground state behaviour
2023-11-13 14:23:31 +08:00
En Yi c78dc50f50 Fix Boulder landing playing on spawning
Done by setting its ground state to 1. For consistency, this is
done to any entity that can 'land'. So far, this has no tangible
gameplay effects.
2023-11-13 11:34:39 +08:00
6 changed files with 48 additions and 4 deletions

View File

@ -3,12 +3,12 @@
#define MAX_TEXTURES 16 #define MAX_TEXTURES 16
#define MAX_SPRITES 64 #define MAX_SPRITES 64
#define MAX_SOUNDS 16 #define MAX_SOUNDS 32
#define MAX_FONTS 4 #define MAX_FONTS 4
#define MAX_N_TILES 4096 #define MAX_N_TILES 4096
#define MAX_NAME_LEN 32 #define MAX_NAME_LEN 32
#define MAX_LEVEL_PACK 4 #define MAX_LEVEL_PACK 4
#define N_SFX 18 #define N_SFX 32
#define MAX_EMITTER_CONF 8 #define MAX_EMITTER_CONF 8
//#define MAX_PARTICLE_EMITTER 8 //#define MAX_PARTICLE_EMITTER 8
#define MAX_ACTIVE_PARTICLE_EMITTER 32 #define MAX_ACTIVE_PARTICLE_EMITTER 32

View File

@ -48,6 +48,14 @@ int main(void)
load_sfx(&engine, "snd_wdrop", WATER_IN_SFX); load_sfx(&engine, "snd_wdrop", WATER_IN_SFX);
load_sfx(&engine, "snd_bland", BOULDER_LAND_SFX); load_sfx(&engine, "snd_bland", BOULDER_LAND_SFX);
load_sfx(&engine, "snd_bubble", BUBBLE_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; LevelScene_t scene;
scene.scene.engine = &engine; scene.scene.engine = &engine;

View File

@ -32,5 +32,6 @@ typedef enum SFXTag {
BOMB_RELEASE_SFX, BOMB_RELEASE_SFX,
EXPLOSION_SFX, EXPLOSION_SFX,
BUBBLE_SFX, BUBBLE_SFX,
COIN_SFX,
} SFXTag_t; } SFXTag_t;
#endif #endif

View File

@ -281,6 +281,7 @@ void destroy_entity(Scene_t* scene, TileGrid_t* tilemap, Entity_t* p_ent)
.update_func = &simple_particle_system_update, .update_func = &simple_particle_system_update,
}; };
play_particle_emitter(&scene->part_sys, &emitter); play_particle_emitter(&scene->part_sys, &emitter);
play_sfx(scene->engine, COIN_SFX);
} }
else if (p_ent->m_tag == ARROW_ENT_TAG) 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, .update_func = &simple_particle_system_update,
}; };
play_particle_emitter(&scene->part_sys, &emitter); play_particle_emitter(&scene->part_sys, &emitter);
play_sfx(scene->engine, ARROW_DESTROY_SFX);
} }
remove_entity_from_tilemap(&scene->ent_manager, tilemap, p_ent); remove_entity_from_tilemap(&scene->ent_manager, tilemap, p_ent);
@ -498,6 +500,8 @@ void player_movement_input_system(Scene_t* scene)
{ {
// the else if check is to prevent playing the landing sfx // the else if check is to prevent playing the landing sfx
// on first frame jumps // on first frame jumps
// This is also why this is done here instead of in the
// state transition function
play_sfx(scene->engine, PLAYER_LAND_SFX); play_sfx(scene->engine, PLAYER_LAND_SFX);
} }
} }
@ -1468,6 +1472,10 @@ void state_transition_update_system(Scene_t* scene)
{ {
play_sfx(scene->engine, BOULDER_LAND_SFX); 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) if (p_mstate->water_state == 0b01)
{ {
@ -1753,15 +1761,19 @@ void container_destroy_system(Scene_t* scene)
{ {
case CONTAINER_LEFT_ARROW: case CONTAINER_LEFT_ARROW:
new_ent = create_arrow(&scene->ent_manager, 0); new_ent = create_arrow(&scene->ent_manager, 0);
play_sfx(scene->engine, ARROW_RELEASE_SFX);
break; break;
case CONTAINER_RIGHT_ARROW: case CONTAINER_RIGHT_ARROW:
new_ent = create_arrow(&scene->ent_manager, 1); new_ent = create_arrow(&scene->ent_manager, 1);
play_sfx(scene->engine, ARROW_RELEASE_SFX);
break; break;
case CONTAINER_UP_ARROW: case CONTAINER_UP_ARROW:
new_ent = create_arrow(&scene->ent_manager, 2); new_ent = create_arrow(&scene->ent_manager, 2);
play_sfx(scene->engine, ARROW_RELEASE_SFX);
break; break;
case CONTAINER_DOWN_ARROW: case CONTAINER_DOWN_ARROW:
new_ent = create_arrow(&scene->ent_manager, 3); new_ent = create_arrow(&scene->ent_manager, 3);
play_sfx(scene->engine, ARROW_RELEASE_SFX);
break; break;
case CONTAINER_BOMB: case CONTAINER_BOMB:
if (dmg_src != NULL && dmg_src->m_tag == PLAYER_ENT_TAG) if (dmg_src != NULL && dmg_src->m_tag == PLAYER_ENT_TAG)
@ -1780,19 +1792,37 @@ void container_destroy_system(Scene_t* scene)
launch_dir.x = -1; launch_dir.x = -1;
} }
new_ent = create_bomb(&scene->ent_manager, launch_dir); new_ent = create_bomb(&scene->ent_manager, launch_dir);
play_sfx(scene->engine, BOMB_RELEASE_SFX);
} }
else else
{ {
new_ent = create_explosion(&scene->ent_manager); new_ent = create_explosion(&scene->ent_manager);
play_sfx(scene->engine, EXPLOSION_SFX);
} }
break; break;
case CONTAINER_EXPLOSION: case CONTAINER_EXPLOSION:
new_ent = create_explosion(&scene->ent_manager); new_ent = create_explosion(&scene->ent_manager);
play_sfx(scene->engine, EXPLOSION_SFX);
break; break;
default: default:
new_ent = NULL; new_ent = NULL;
break; 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) if (new_ent != NULL)
{ {
CTransform_t* new_p_ct = get_component(new_ent, CTRANSFORM_COMP_T); CTransform_t* new_p_ct = get_component(new_ent, CTRANSFORM_COMP_T);

View File

@ -47,6 +47,7 @@ Entity_t* create_crate(EntityManager_t* ent_manager, bool metal, ContainerItem_t
p_ctransform->grav_delay = 7; p_ctransform->grav_delay = 7;
p_ctransform->shape_factor = metal ? (Vector2){0.7,0.7} : (Vector2){0.8,0.8} ; p_ctransform->shape_factor = metal ? (Vector2){0.7,0.7} : (Vector2){0.8,0.8} ;
add_component(p_crate, CMOVEMENTSTATE_T); add_component(p_crate, CMOVEMENTSTATE_T);
add_component(p_crate, CTILECOORD_COMP_T); add_component(p_crate, CTILECOORD_COMP_T);
CHurtbox_t* p_hurtbox = add_component(p_crate, CHURTBOX_T); CHurtbox_t* p_hurtbox = add_component(p_crate, CHURTBOX_T);
p_hurtbox->size = p_bbox->size; p_hurtbox->size = p_bbox->size;
@ -89,7 +90,9 @@ Entity_t* create_boulder(EntityManager_t* ent_manager)
p_ctransform->grav_delay = 5; p_ctransform->grav_delay = 5;
p_ctransform->active = true; p_ctransform->active = true;
p_ctransform->shape_factor = (Vector2){0.6, 0.6}; p_ctransform->shape_factor = (Vector2){0.6, 0.6};
add_component(p_boulder, CMOVEMENTSTATE_T); CMovementState_t* p_move = add_component(p_boulder, CMOVEMENTSTATE_T);
p_move->ground_state |= 3;
add_component(p_boulder, CTILECOORD_COMP_T); add_component(p_boulder, CTILECOORD_COMP_T);
CMoveable_t* p_cmove = add_component(p_boulder, CMOVEABLE_T); CMoveable_t* p_cmove = add_component(p_boulder, CMOVEABLE_T);
p_cmove->move_speed = 8; p_cmove->move_speed = 8;

View File

@ -74,7 +74,9 @@ Entity_t* create_player(EntityManager_t* ent_manager)
p_cjump->jump_ready = true; p_cjump->jump_ready = true;
add_component(p_ent, CPLAYERSTATE_T); add_component(p_ent, CPLAYERSTATE_T);
add_component(p_ent, CTILECOORD_COMP_T); add_component(p_ent, CTILECOORD_COMP_T);
add_component(p_ent, CMOVEMENTSTATE_T);
CMovementState_t* p_move = add_component(p_ent, CMOVEMENTSTATE_T);
p_move->ground_state |= 3;
CHitBoxes_t* p_hitbox = add_component(p_ent, CHITBOXES_T); CHitBoxes_t* p_hitbox = add_component(p_ent, CHITBOXES_T);
p_hitbox->n_boxes = 2; p_hitbox->n_boxes = 2;
p_hitbox->boxes[0] = (Rectangle) { p_hitbox->boxes[0] = (Rectangle) {