Compare commits

..

2 Commits

Author SHA1 Message Date
25736461fb fp: Add game over sequence 2023-10-08 19:05:56 +11:00
a651bc7e14 Rebase changes 2023-10-08 19:00:13 +11:00
12 changed files with 57 additions and 17 deletions

BIN
Data/Audio/airport.ogg (Stored with Git LFS)

Binary file not shown.

BIN
Data/Audio/church.wav (Stored with Git LFS)

Binary file not shown.

BIN
Data/Audio/club_terry.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Data/Audio/club_terry.wav (Stored with Git LFS)

Binary file not shown.

BIN
Data/Audio/dog.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Data/Audio/dog.wav (Stored with Git LFS)

Binary file not shown.

BIN
Data/Audio/merchant_ghost.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Data/Audio/merchant_gym.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Data/Audio/merchant_tech.ogg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Data/Audio/merchant_terry.ogg (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -459,10 +459,12 @@ static void FP_PlayReset(FP_Game *game, TELY_Platform *platform)
play->merchant_phone_company = FP_Entity_CreateMerchantPhoneCompany(game, base_top_right, "PhoneCompany"); play->merchant_phone_company = FP_Entity_CreateMerchantPhoneCompany(game, base_top_right, "PhoneCompany");
} }
#if 0
FP_Entity_CreateClubTerry(game, Dqn_V2_InitNx2(+500, -191), "Club Terry"); FP_Entity_CreateClubTerry(game, Dqn_V2_InitNx2(+500, -191), "Club Terry");
FP_Entity_CreateKennelTerry(game, Dqn_V2_InitNx2(-300, -191), "Kennel Terry"); FP_Entity_CreateKennelTerry(game, Dqn_V2_InitNx2(-300, -191), "Kennel Terry");
FP_Entity_CreateChurchTerry(game, Dqn_V2_InitNx2(-800, -191), "Church Terry"); FP_Entity_CreateChurchTerry(game, Dqn_V2_InitNx2(-800, -191), "Church Terry");
FP_Entity_CreateAirportTerry(game, Dqn_V2_InitNx2(-1200, -191), "Airport Terry"); FP_Entity_CreateAirportTerry(game, Dqn_V2_InitNx2(-1200, -191), "Airport Terry");
#endif
play->tile_size = 37; play->tile_size = 37;
Dqn_V2I max_tile = platform->core.window_size / play->tile_size; Dqn_V2I max_tile = platform->core.window_size / play->tile_size;
@ -506,6 +508,13 @@ void TELY_DLL_Init(void *user_data)
game->audio[FP_GameAudio_Woosh] = platform->func_load_audio(assets, DQN_STRING8("Woosh"), DQN_STRING8("Data/Audio/woosh.ogg")); game->audio[FP_GameAudio_Woosh] = platform->func_load_audio(assets, DQN_STRING8("Woosh"), DQN_STRING8("Data/Audio/woosh.ogg"));
game->audio[FP_GameAudio_Ching] = platform->func_load_audio(assets, DQN_STRING8("Ching"), DQN_STRING8("Data/Audio/ching.ogg")); game->audio[FP_GameAudio_Ching] = platform->func_load_audio(assets, DQN_STRING8("Ching"), DQN_STRING8("Data/Audio/ching.ogg"));
game->audio[FP_GameAudio_Church] = platform->func_load_audio(assets, DQN_STRING8("Church"), DQN_STRING8("Data/Audio/church.ogg")); game->audio[FP_GameAudio_Church] = platform->func_load_audio(assets, DQN_STRING8("Church"), DQN_STRING8("Data/Audio/church.ogg"));
game->audio[FP_GameAudio_Plane] = platform->func_load_audio(assets, DQN_STRING8("Plane"), DQN_STRING8("Data/Audio/airport.ogg"));
game->audio[FP_GameAudio_Club] = platform->func_load_audio(assets, DQN_STRING8("Club"), DQN_STRING8("Data/Audio/club_terry.ogg"));
game->audio[FP_GameAudio_Dog] = platform->func_load_audio(assets, DQN_STRING8("Dog"), DQN_STRING8("Data/Audio/dog.ogg"));
game->audio[FP_GameAudio_MerchantTerry] = platform->func_load_audio(assets, DQN_STRING8("Door"), DQN_STRING8("Data/Audio/merchant_terry.ogg"));
game->audio[FP_GameAudio_MerchantGhost] = platform->func_load_audio(assets, DQN_STRING8("Ghost"), DQN_STRING8("Data/Audio/merchant_ghost.ogg"));
game->audio[FP_GameAudio_MerchantGym] = platform->func_load_audio(assets, DQN_STRING8("Gym"), DQN_STRING8("Data/Audio/merchant_gym.ogg"));
game->audio[FP_GameAudio_MerchantPhone] = platform->func_load_audio(assets, DQN_STRING8("Phone"), DQN_STRING8("Data/Audio/merchant_tech.ogg"));
platform->user_data = game; platform->user_data = game;
{ {
@ -1855,14 +1864,17 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput *input
TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_J)) { TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_J)) {
if (placeable_building.type == FP_EntityType_ClubTerry) { if (placeable_building.type == FP_EntityType_ClubTerry) {
FP_Entity_CreateClubTerry(game, placement_pos, "Club Terry"); FP_Entity_CreateClubTerry(game, placement_pos, "Club Terry");
TELY_Audio_Play(audio, game->audio[FP_GameAudio_Club], 1.f);
} else if (placeable_building.type == FP_EntityType_ChurchTerry) { } else if (placeable_building.type == FP_EntityType_ChurchTerry) {
FP_Entity_CreateChurchTerry(game, placement_pos, "Church Terry"); FP_Entity_CreateChurchTerry(game, placement_pos, "Church Terry");
TELY_Audio_Play(audio, game->audio[FP_GameAudio_Church], 1.f); TELY_Audio_Play(audio, game->audio[FP_GameAudio_Church], 1.f);
} else if (placeable_building.type == FP_EntityType_AirportTerry) { } else if (placeable_building.type == FP_EntityType_AirportTerry) {
FP_Entity_CreateAirportTerry(game, placement_pos, "Airport Terry"); FP_Entity_CreateAirportTerry(game, placement_pos, "Airport Terry");
TELY_Audio_Play(audio, game->audio[FP_GameAudio_Plane], 1.f);
} else { } else {
DQN_ASSERT(placeable_building.type == FP_EntityType_KennelTerry); DQN_ASSERT(placeable_building.type == FP_EntityType_KennelTerry);
FP_Entity_CreateKennelTerry(game, placement_pos, "Kennel Terry"); FP_Entity_CreateKennelTerry(game, placement_pos, "Kennel Terry");
TELY_Audio_Play(audio, game->audio[FP_GameAudio_Dog], 1.f);
} }
(*inventory_count)--; (*inventory_count)--;
@ -1925,7 +1937,9 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput *input
entity->terry_mobile_data_plan_cap); entity->terry_mobile_data_plan_cap);
// NOTE: Recover hp & stamina // NOTE: Recover hp & stamina
if (game->play.update_counter % 4 == 0) {
entity->stamina = DQN_MIN(entity->stamina + 1, entity->stamina_cap); entity->stamina = DQN_MIN(entity->stamina + 1, entity->stamina_cap);
}
if (entity->flags & FP_GameEntityFlag_RecoversHP) { if (entity->flags & FP_GameEntityFlag_RecoversHP) {
if (game->play.update_counter % entity->hp_recover_every_n_ticks == 0) { if (game->play.update_counter % entity->hp_recover_every_n_ticks == 0) {
@ -2475,6 +2489,7 @@ void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *renderer,
FP_GameEntity *player = FP_Game_GetEntity(game, game->play.player); FP_GameEntity *player = FP_Game_GetEntity(game, game->play.player);
Dqn_V2 player_pos = FP_Game_CalcEntityWorldPos(game, game->play.player); Dqn_V2 player_pos = FP_Game_CalcEntityWorldPos(game, game->play.player);
{ {
static bool sound_played_flags[4] = {false, false, false, false};
FP_GameInventory *invent = &player->inventory; FP_GameInventory *invent = &player->inventory;
struct FP_MerchantToMenuMapping { struct FP_MerchantToMenuMapping {
FP_GameEntityHandle merchant; FP_GameEntityHandle merchant;
@ -2484,11 +2499,13 @@ void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *renderer,
uint8_t *inventory_count; uint8_t *inventory_count;
uint32_t *building_base_price; uint32_t *building_base_price;
uint32_t *upgrade_base_price; uint32_t *upgrade_base_price;
FP_GameAudio audio_type;
bool *sound_played;
} merchants[] = { } merchants[] = {
{game->play.merchant_terry, g_anim_names.merchant_terry_menu, g_anim_names.club_terry_dark, Dqn_V2_InitNx2(0.015f, +0.04f), &invent->clubs, &invent->clubs_base_price, &invent->health_base_price}, {game->play.merchant_terry, g_anim_names.merchant_terry_menu, g_anim_names.club_terry_dark, Dqn_V2_InitNx2(0.015f, +0.04f), &invent->clubs, &invent->clubs_base_price, &invent->health_base_price, FP_GameAudio_MerchantTerry, &sound_played_flags[0]},
{game->play.merchant_graveyard, g_anim_names.merchant_graveyard_menu, g_anim_names.church_terry_dark, Dqn_V2_InitNx2(0.04f, -0.15f), &invent->churchs, &invent->churchs_base_price, &invent->stamina_base_price}, {game->play.merchant_graveyard, g_anim_names.merchant_graveyard_menu, g_anim_names.church_terry_dark, Dqn_V2_InitNx2(0.04f, -0.15f), &invent->churchs, &invent->churchs_base_price, &invent->stamina_base_price, FP_GameAudio_MerchantGhost, &sound_played_flags[1]},
{game->play.merchant_gym, g_anim_names.merchant_gym_menu, g_anim_names.kennel_terry, Dqn_V2_InitNx2(0, +0), &invent->kennels, &invent->kennels_base_price, &invent->attack_base_price}, {game->play.merchant_gym, g_anim_names.merchant_gym_menu, g_anim_names.kennel_terry, Dqn_V2_InitNx2(0, +0), &invent->kennels, &invent->kennels_base_price, &invent->attack_base_price, FP_GameAudio_MerchantGym, &sound_played_flags[2]},
{game->play.merchant_phone_company, g_anim_names.merchant_phone_company_menu, g_anim_names.airport_terry, Dqn_V2_InitNx2(0, -0.1f), &invent->airports, &invent->airports_base_price, &invent->mobile_plan_base_price}, {game->play.merchant_phone_company, g_anim_names.merchant_phone_company_menu, g_anim_names.airport_terry, Dqn_V2_InitNx2(0, -0.1f), &invent->airports, &invent->airports_base_price, &invent->mobile_plan_base_price, FP_GameAudio_MerchantPhone, &sound_played_flags[3]},
}; };
bool activated_merchant = false; bool activated_merchant = false;
@ -2497,8 +2514,10 @@ void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *renderer,
Dqn_V2 world_pos = FP_Game_CalcEntityWorldPos(game, merchant_handle); Dqn_V2 world_pos = FP_Game_CalcEntityWorldPos(game, merchant_handle);
Dqn_f32 dist_squared = Dqn_V2_LengthSq_V2x2(world_pos, player_pos); Dqn_f32 dist_squared = Dqn_V2_LengthSq_V2x2(world_pos, player_pos);
if (dist_squared > DQN_SQUARED(FP_Game_MetersToPixelsNx1(game->play, 4))) if (dist_squared > DQN_SQUARED(FP_Game_MetersToPixelsNx1(game->play, 4))) {
*mapping.sound_played = false;
continue; continue;
}
// NOTE: Render animated merchant menu ============================= // NOTE: Render animated merchant menu =============================
activated_merchant = true; activated_merchant = true;
@ -2529,6 +2548,11 @@ void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *renderer,
Dqn_V2_Zero /*rotate origin*/, Dqn_V2_Zero /*rotate origin*/,
0.f /*rotation*/, 0.f /*rotation*/,
TELY_COLOUR_WHITE_V4); TELY_COLOUR_WHITE_V4);
if (activated_merchant && !*mapping.sound_played) {
TELY_Audio_Play(audio, game->audio[mapping.audio_type], 1.f);
*mapping.sound_played = true;
}
} }
TELY_Render_PushColourV4(renderer, TELY_COLOUR_WHITE_V4); TELY_Render_PushColourV4(renderer, TELY_COLOUR_WHITE_V4);

View File

@ -265,6 +265,13 @@ enum FP_GameAudio
FP_GameAudio_Woosh, FP_GameAudio_Woosh,
FP_GameAudio_Ching, FP_GameAudio_Ching,
FP_GameAudio_Church, FP_GameAudio_Church,
FP_GameAudio_Plane,
FP_GameAudio_Club,
FP_GameAudio_Dog,
FP_GameAudio_MerchantTerry,
FP_GameAudio_MerchantGhost,
FP_GameAudio_MerchantGym,
FP_GameAudio_MerchantPhone,
FP_GameAudio_Count, FP_GameAudio_Count,
}; };