Compare commits
3 Commits
main
...
9515dad661
| Author | SHA1 | Date | |
|---|---|---|---|
| 9515dad661 | |||
| b3b6d30400 | |||
| b43f30637a |
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1158
-1207
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,6 @@ enum FP_EntityType
|
||||
|
||||
enum FP_EntityTerryState
|
||||
{
|
||||
FP_EntityTerryState_Nil,
|
||||
FP_EntityTerryState_Idle,
|
||||
FP_EntityTerryState_Attack,
|
||||
FP_EntityTerryState_RangeAttack,
|
||||
@@ -39,14 +38,12 @@ enum FP_EntityTerryState
|
||||
|
||||
enum FP_EntityMobSpawnerState
|
||||
{
|
||||
FP_EntityMobSpawnerState_Nil,
|
||||
FP_EntityMobSpawnerState_Idle,
|
||||
FP_EntityMobSpawnerState_Shutdown,
|
||||
};
|
||||
|
||||
enum FP_EntitySmoochieState
|
||||
{
|
||||
FP_EntitySmoochieState_Nil,
|
||||
FP_EntitySmoochieState_Idle,
|
||||
FP_EntitySmoochieState_Attack,
|
||||
FP_EntitySmoochieState_HurtSide,
|
||||
@@ -56,7 +53,6 @@ enum FP_EntitySmoochieState
|
||||
|
||||
enum FP_EntityCatfishState
|
||||
{
|
||||
FP_EntityCatfishState_Nil,
|
||||
FP_EntityCatfishState_Idle,
|
||||
FP_EntityCatfishState_Attack,
|
||||
FP_EntityCatfishState_Death,
|
||||
@@ -65,7 +61,6 @@ enum FP_EntityCatfishState
|
||||
|
||||
enum FP_EntityClingerState
|
||||
{
|
||||
FP_EntityClingerState_Nil,
|
||||
FP_EntityClingerState_Idle,
|
||||
FP_EntityClingerState_Attack,
|
||||
FP_EntityClingerState_Death,
|
||||
@@ -74,82 +69,63 @@ enum FP_EntityClingerState
|
||||
|
||||
enum FP_EntityMerchantTerryState
|
||||
{
|
||||
FP_EntityMerchantTerryState_Nil,
|
||||
FP_EntityMerchantTerryState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityMerchantGymState
|
||||
{
|
||||
FP_EntityMerchantGymState_Nil,
|
||||
FP_EntityMerchantGymState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityMerchantPhoneCompanyState
|
||||
{
|
||||
FP_EntityMerchantPhoneCompanyState_Nil,
|
||||
FP_EntityMerchantPhoneCompanyState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityMerchantGraveyardState
|
||||
{
|
||||
FP_EntityMerchantGraveyardState_Nil,
|
||||
FP_EntityMerchantGraveyardState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityClubTerryState
|
||||
{
|
||||
FP_EntityClubTerryState_Nil,
|
||||
FP_EntityClubTerryState_Idle,
|
||||
FP_EntityClubTerryState_PartyTime,
|
||||
};
|
||||
|
||||
enum FP_EntityAirportTerryState
|
||||
{
|
||||
FP_EntityAirportTerryState_Nil,
|
||||
FP_EntityAirportTerryState_Idle,
|
||||
FP_EntityAirportTerryState_FlyPassenger,
|
||||
};
|
||||
|
||||
enum FP_EntityAirportTerryPlaneState
|
||||
{
|
||||
FP_EntityAirportTerryPlaneState_Nil,
|
||||
FP_EntityAirportTerryPlaneState_Idle,
|
||||
FP_EntityAirportTerryPlaneState_FlyPassenger,
|
||||
};
|
||||
|
||||
enum FP_EntityChurchTerryState
|
||||
{
|
||||
FP_EntityChurchTerryState_Nil,
|
||||
FP_EntityChurchTerryState_Idle,
|
||||
FP_EntityChurchTerryState_ConvertPatron,
|
||||
};
|
||||
|
||||
enum FP_EntityKennelTerryState
|
||||
{
|
||||
FP_EntityKennelTerryState_Nil,
|
||||
FP_EntityKennelTerryState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityMapState
|
||||
{
|
||||
FP_EntityMapState_Nil,
|
||||
FP_EntityMapState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityHeartState
|
||||
{
|
||||
FP_EntityHeartState_Nil,
|
||||
FP_EntityHeartState_Idle,
|
||||
};
|
||||
|
||||
enum FP_EntityPortalMonkeyState
|
||||
{
|
||||
FP_EntityPortalMonkeyState_Nil,
|
||||
FP_EntityPortalMonkeyState_Idle,
|
||||
FP_EntityPortalMonkeyState_BeingCarried,
|
||||
FP_EntityPortalMonkeyState_DisablingPortal,
|
||||
};
|
||||
|
||||
struct FP_EntityRenderData
|
||||
{
|
||||
FP_Meters height;
|
||||
|
||||
+100
-46
@@ -35,7 +35,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 1.8f;
|
||||
FP_EntityTerryState state = DQN_CAST(FP_EntityTerryState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityTerryState_Nil: break;
|
||||
case FP_EntityTerryState_Idle: result.anim_name = g_anim_names.terry_walk_idle; break;
|
||||
|
||||
case FP_EntityTerryState_Attack: {
|
||||
@@ -84,7 +83,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 1.6f;
|
||||
FP_EntitySmoochieState state = DQN_CAST(FP_EntitySmoochieState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntitySmoochieState_Nil: break;
|
||||
case FP_EntitySmoochieState_Idle: result.anim_name = g_anim_names.smoochie_walk_down; break;
|
||||
case FP_EntitySmoochieState_Attack: result.anim_name = g_anim_names.smoochie_attack_down; break;
|
||||
case FP_EntitySmoochieState_HurtSide: result.anim_name = g_anim_names.smoochie_hurt_side; result.flip = direction == FP_GameDirection_Right ? TELY_AssetFlip_X : TELY_AssetFlip_No; break;
|
||||
@@ -105,7 +103,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 3.66f;
|
||||
FP_EntityMerchantTerryState state = DQN_CAST(FP_EntityMerchantTerryState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityMerchantTerryState_Nil: break;
|
||||
case FP_EntityMerchantTerryState_Idle: result.anim_name = g_anim_names.merchant_terry; break;
|
||||
}
|
||||
} break;
|
||||
@@ -114,7 +111,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 3.66f;
|
||||
FP_EntityMerchantGraveyardState state = DQN_CAST(FP_EntityMerchantGraveyardState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityMerchantGraveyardState_Nil: break;
|
||||
case FP_EntityMerchantGraveyardState_Idle: result.anim_name = g_anim_names.merchant_graveyard; break;
|
||||
}
|
||||
} break;
|
||||
@@ -124,7 +120,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.anim_name = g_anim_names.merchant_gym;
|
||||
FP_EntityMerchantGymState state = DQN_CAST(FP_EntityMerchantGymState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityMerchantGymState_Nil: break;
|
||||
case FP_EntityMerchantGymState_Idle: result.anim_name = g_anim_names.merchant_gym; break;
|
||||
}
|
||||
} break;
|
||||
@@ -133,7 +128,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 3.66f;
|
||||
FP_EntityMerchantPhoneCompanyState state = DQN_CAST(FP_EntityMerchantPhoneCompanyState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityMerchantPhoneCompanyState_Nil: break;
|
||||
case FP_EntityMerchantPhoneCompanyState_Idle: result.anim_name = g_anim_names.merchant_phone_company; break;
|
||||
}
|
||||
} break;
|
||||
@@ -142,7 +136,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 4.f;
|
||||
FP_EntityClubTerryState state = DQN_CAST(FP_EntityClubTerryState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityClubTerryState_Nil: break;
|
||||
case FP_EntityClubTerryState_Idle: result.anim_name = g_anim_names.club_terry_dark; break;
|
||||
case FP_EntityClubTerryState_PartyTime: result.anim_name = g_anim_names.club_terry_alive; break;
|
||||
}
|
||||
@@ -152,7 +145,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 1.6f;
|
||||
FP_EntityClingerState state = DQN_CAST(FP_EntityClingerState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityClingerState_Nil: break;
|
||||
case FP_EntityClingerState_Idle: result.anim_name = g_anim_names.clinger_walk_down; break;
|
||||
|
||||
case FP_EntityClingerState_Attack: {
|
||||
@@ -183,7 +175,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 4.f;
|
||||
FP_EntityHeartState state = DQN_CAST(FP_EntityHeartState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityHeartState_Nil: break;
|
||||
case FP_EntityHeartState_Idle: result.anim_name = g_anim_names.heart; break;
|
||||
}
|
||||
} break;
|
||||
@@ -192,7 +183,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 4.f;
|
||||
FP_EntityAirportTerryState state = DQN_CAST(FP_EntityAirportTerryState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityAirportTerryState_Nil: break;
|
||||
case FP_EntityAirportTerryState_Idle: result.anim_name = g_anim_names.airport_terry; break;
|
||||
case FP_EntityAirportTerryState_FlyPassenger: result.anim_name = g_anim_names.airport_terry; break;
|
||||
}
|
||||
@@ -202,7 +192,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 1.6f;
|
||||
FP_EntityCatfishState state = DQN_CAST(FP_EntityCatfishState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityCatfishState_Nil:
|
||||
case FP_EntityCatfishState_Idle: result.anim_name = g_anim_names.catfish_walk_down; break;
|
||||
case FP_EntityCatfishState_Attack: {
|
||||
switch (direction) {
|
||||
@@ -230,7 +219,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 4.f;
|
||||
FP_EntityChurchTerryState state = DQN_CAST(FP_EntityChurchTerryState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityChurchTerryState_Nil: break;
|
||||
case FP_EntityChurchTerryState_Idle: result.anim_name = g_anim_names.church_terry_dark; break;
|
||||
case FP_EntityChurchTerryState_ConvertPatron: result.anim_name = g_anim_names.church_terry_alive; break;
|
||||
}
|
||||
@@ -240,7 +228,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 3.f;
|
||||
FP_EntityKennelTerryState state = DQN_CAST(FP_EntityKennelTerryState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityKennelTerryState_Nil: break;
|
||||
case FP_EntityKennelTerryState_Idle: result.anim_name = g_anim_names.kennel_terry; break;
|
||||
}
|
||||
} break;
|
||||
@@ -259,7 +246,6 @@ FP_EntityRenderData FP_Entity_GetRenderData(FP_Game *game, FP_EntityType type, u
|
||||
result.height.meters = 3.f;
|
||||
FP_EntityMobSpawnerState state = DQN_CAST(FP_EntityMobSpawnerState)raw_state;
|
||||
switch (state) {
|
||||
case FP_EntityMobSpawnerState_Nil: break;
|
||||
case FP_EntityMobSpawnerState_Idle: result.anim_name = g_anim_names.portal; break;
|
||||
case FP_EntityMobSpawnerState_Shutdown: {
|
||||
result.anim_name = g_anim_names.portal_break;
|
||||
@@ -326,7 +312,9 @@ static FP_GameEntityHandle FP_Entity_CreateClinger(FP_Game *game, Dqn_V2 pos, DQ
|
||||
entity->is_dying = false;
|
||||
entity->base_acceleration_per_s.meters = 8.f;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
entity->attack_cooldown_ms = 1000;
|
||||
entity->faction = FP_GameEntityFaction_Foe;
|
||||
|
||||
@@ -334,6 +322,9 @@ static FP_GameEntityHandle FP_Entity_CreateClinger(FP_Game *game, Dqn_V2 pos, DQ
|
||||
FP_Entity_AddDebugEditorFlags(game, entity->handle);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
entity->flags |= FP_GameEntityFlag_Attackable;
|
||||
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -349,13 +340,19 @@ static FP_GameEntityHandle FP_Entity_CreateSmoochie(FP_Game *game, Dqn_V2 pos, D
|
||||
entity->base_acceleration_per_s.meters = 8.f;
|
||||
entity->is_dying = false;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
entity->attack_cooldown_ms = 1000;
|
||||
entity->local_hit_box_size = FP_Game_MetersToPixelsNx2(game, 0.7f, entity->sprite_height.meters * .6f);
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, entity->handle);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
entity->flags |= FP_GameEntityFlag_Attackable;
|
||||
entity->faction = FP_GameEntityFaction_Foe;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -371,7 +368,12 @@ static FP_GameEntityHandle FP_Entity_CreateCatfish(FP_Game *game, Dqn_V2 pos, DQ
|
||||
entity->base_acceleration_per_s.meters = 8.f;
|
||||
entity->is_dying = false;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
entity->attack_cooldown_ms = 1000;
|
||||
entity->local_hit_box_size = FP_Game_MetersToPixelsNx2(game, 0.7f, entity->sprite_height.meters * .6f);
|
||||
FP_Entity_AddDebugEditorFlags(game, entity->handle);
|
||||
@@ -424,9 +426,13 @@ static FP_GameEntityHandle FP_Entity_CreateMobSpawner(FP_Game *game, Dqn_V2 pos,
|
||||
entity->type = FP_EntityType_MobSpawner;
|
||||
entity->local_pos = pos;
|
||||
entity->local_hit_box_size = Dqn_V2_InitNx1(32);
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
entity->spawn_cap = spawn_cap;
|
||||
entity->spawn_list = FP_SentinelList_Init<FP_GameEntityHandle>(game->chunk_pool);
|
||||
return result;
|
||||
@@ -443,7 +449,12 @@ static FP_GameEntityHandle FP_Entity_CreateTerry(FP_Game *game, Dqn_V2 pos, DQN_
|
||||
entity->type = FP_EntityType_Terry;
|
||||
entity->local_pos = pos;
|
||||
entity->base_acceleration_per_s.meters = 16.f;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
entity->attack_cooldown_ms = 500;
|
||||
entity->local_hit_box_size = FP_Game_MetersToPixelsNx2(game, 0.5f, entity->sprite_height.meters * .6f);
|
||||
entity->hp_cap = FP_DEFAULT_DAMAGE * 3;
|
||||
@@ -469,7 +480,12 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantTerry(FP_Game *game, Dqn_V2 p
|
||||
|
||||
entity->type = FP_EntityType_MerchantTerry;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -493,7 +509,12 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantGraveyard(FP_Game *game, Dqn_
|
||||
|
||||
entity->type = FP_EntityType_MerchantGraveyard;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -517,7 +538,12 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantGym(FP_Game *game, Dqn_V2 pos
|
||||
|
||||
entity->type = FP_EntityType_MerchantGym;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -541,7 +567,12 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantPhoneCompany(FP_Game *game, D
|
||||
|
||||
entity->type = FP_EntityType_MerchantPhoneCompany;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -565,7 +596,12 @@ static FP_GameEntityHandle FP_Entity_CreateClubTerry(FP_Game *game, Dqn_V2 pos,
|
||||
|
||||
entity->type = FP_EntityType_ClubTerry;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -589,7 +625,12 @@ static FP_GameEntityHandle FP_Entity_CreateHeart(FP_Game *game, Dqn_V2 pos, DQN_
|
||||
|
||||
entity->type = FP_EntityType_Heart;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -613,7 +654,12 @@ static FP_GameEntityHandle FP_Entity_CreateChurchTerry(FP_Game *game, Dqn_V2 pos
|
||||
|
||||
entity->type = FP_EntityType_ChurchTerry;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -637,7 +683,12 @@ static FP_GameEntityHandle FP_Entity_CreateKennelTerry(FP_Game *game, Dqn_V2 pos
|
||||
|
||||
entity->type = FP_EntityType_KennelTerry;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -661,7 +712,12 @@ static FP_GameEntityHandle FP_Entity_CreateAirportTerry(FP_Game *game, Dqn_V2 po
|
||||
|
||||
entity->type = FP_EntityType_AirportTerry;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = FP_Entity_GetRenderData(game, entity->type, 0 /*state*/, FP_GameDirection_Down).height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_NonTraversable;
|
||||
|
||||
@@ -684,11 +740,15 @@ static FP_GameEntityHandle FP_Entity_CreatePhoneMessageProjectile(FP_Game *game,
|
||||
va_end(args);
|
||||
|
||||
entity->type = FP_EntityType_PhoneMessageProjectile;
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
|
||||
entity->constant_acceleration_per_s = velocity;
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = render_data.height;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
entity->flags |= FP_GameEntityFlag_TTL;
|
||||
|
||||
@@ -699,10 +759,6 @@ static FP_GameEntityHandle FP_Entity_CreatePhoneMessageProjectile(FP_Game *game,
|
||||
entity->ttl_end_timestamp = game->clock_ms + 1000;
|
||||
entity->projectile_owner = owner;
|
||||
entity->faction = FP_GameEntityFaction_Friendly;
|
||||
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -714,19 +770,19 @@ static FP_GameEntityHandle FP_Entity_CreatePortalMonkey(FP_Game *game, Dqn_V2 po
|
||||
FP_GameEntityHandle result = entity->handle;
|
||||
va_end(args);
|
||||
|
||||
entity->type = FP_EntityType_PortalMonkey;
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->type = FP_EntityType_PortalMonkey;
|
||||
entity->local_pos = pos;
|
||||
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = render_data.height;
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
|
||||
entity->local_hit_box_offset = Dqn_V2_InitNx2(0, render_data.render_size.h * .1f);
|
||||
entity->local_hit_box_size = Dqn_V2_InitNx2(render_data.render_size.w, render_data.render_size.h - (render_data.render_size.h * .4f));
|
||||
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -740,18 +796,16 @@ static FP_GameEntityHandle FP_Entity_CreateAirportTerryPlane(FP_Game *game, Dqn_
|
||||
|
||||
entity->type = FP_EntityType_AirportTerryPlane;
|
||||
FP_EntityRenderData render_data = FP_Entity_GetRenderData(game, entity->type, 0, FP_GameDirection_Down);
|
||||
entity->sprite_height = render_data.height;
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
entity->local_pos = pos;
|
||||
entity->sprite_height = render_data.height;
|
||||
entity->flags |= FP_GameEntityFlag_NoClip;
|
||||
FP_Entity_AddDebugEditorFlags(game, result);
|
||||
|
||||
entity->local_hit_box_offset = Dqn_V2_InitNx2(0, render_data.render_size.h * .1f);
|
||||
entity->local_hit_box_size = Dqn_V2_InitNx2(render_data.render_size.w, render_data.render_size.h - (render_data.render_size.h * .4f));
|
||||
entity->base_acceleration_per_s.meters = 32.f;
|
||||
|
||||
uint64_t duration_ms = FP_GAME_ENTITY_ACTION_INFINITE_TIMER;
|
||||
FP_Game_EntityActionReset(game, result, duration_ms, render_data.sprite);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
+14
-5
@@ -263,11 +263,17 @@ enum FP_GameAudio
|
||||
FP_GameAudio_Count,
|
||||
};
|
||||
|
||||
enum FP_GameActiveMenu
|
||||
enum FP_GameInGameMenu
|
||||
{
|
||||
FP_GameActiveMenu_Nil,
|
||||
FP_GameActiveMenu_Build,
|
||||
FP_GameActiveMenu_Merchant,
|
||||
FP_GameInGameMenu_Nil,
|
||||
FP_GameInGameMenu_Build,
|
||||
FP_GameInGameMenu_Merchant,
|
||||
};
|
||||
|
||||
enum FP_GameState
|
||||
{
|
||||
FP_GameState_IntroScreen,
|
||||
FP_GameState_Play,
|
||||
};
|
||||
|
||||
struct FP_Game
|
||||
@@ -275,6 +281,7 @@ struct FP_Game
|
||||
Dqn_f32 delta_s_accumulator;
|
||||
uint16_t tile_size;
|
||||
TELY_ChunkPool *chunk_pool;
|
||||
TELY_AssetFontHandle inter_regular_font_large;
|
||||
TELY_AssetFontHandle inter_regular_font;
|
||||
TELY_AssetFontHandle inter_italic_font;
|
||||
TELY_AssetFontHandle jetbrains_mono_font;
|
||||
@@ -319,7 +326,7 @@ struct FP_Game
|
||||
Dqn_PCG32 rng;
|
||||
|
||||
bool debug_ui;
|
||||
FP_GameActiveMenu active_menu;
|
||||
FP_GameInGameMenu in_game_menu;
|
||||
bool build_mode_can_place_building;
|
||||
Dqn_usize build_mode_building_index;
|
||||
|
||||
@@ -330,6 +337,8 @@ struct FP_Game
|
||||
uint32_t enemies_per_wave;
|
||||
uint32_t enemies_spawned_this_wave;
|
||||
uint64_t wave_cooldown_timestamp_ms;
|
||||
|
||||
FP_GameState state;
|
||||
};
|
||||
|
||||
struct FP_GameAStarNode
|
||||
|
||||
Reference in New Issue
Block a user