Emulate D1 bosses more accurately

Use D1 timing for gating, cloaking, and teleporting
This commit is contained in:
Kp 2019-08-06 02:59:40 +00:00
parent 49fd1f358e
commit 184be218b7
2 changed files with 20 additions and 8 deletions

View file

@ -122,9 +122,11 @@ namespace dsx {
struct d_level_shared_boss_state : ::dcx::d_level_shared_boss_state
{
// Time between cloaks
using D1_Boss_cloak_interval = std::integral_constant<fix, F1_0 * 10>;
using D1_Boss_teleport_interval = std::integral_constant<fix, F1_0 * 8>;
#if defined(DXX_BUILD_DESCENT_I)
static constexpr std::integral_constant<fix, F1_0 * 10> Boss_cloak_interval{};
static constexpr std::integral_constant<fix, F1_0 * 8> Boss_teleport_interval{};
static constexpr D1_Boss_cloak_interval Boss_cloak_interval{};
static constexpr D1_Boss_teleport_interval Boss_teleport_interval{};
#elif defined(DXX_BUILD_DESCENT_II)
fix Boss_cloak_interval;
fix Boss_teleport_interval;

View file

@ -596,25 +596,35 @@ void init_ai_objects(void)
Boss_dying = 0;
const auto Difficulty_level = GameUniqueState.Difficulty_level;
#define D1_Boss_gate_interval F1_0*5 - Difficulty_level*F1_0/2
#if defined(DXX_BUILD_DESCENT_I)
GameUniqueState.Boss_gate_interval = F1_0*5 - Difficulty_level*F1_0/2;
GameUniqueState.Boss_gate_interval = D1_Boss_gate_interval;
#elif defined(DXX_BUILD_DESCENT_II)
GameUniqueState.Boss_gate_interval = F1_0*4 - Difficulty_level*i2f(2)/3;
ai_do_cloak_stuff();
init_buddy_for_level();
if (Current_mission && (Current_level_num == Last_level))
if (EMULATING_D1)
{
LevelSharedBossState.Boss_cloak_interval = d_level_shared_boss_state::D1_Boss_cloak_interval::value;
LevelSharedBossState.Boss_teleport_interval = d_level_shared_boss_state::D1_Boss_teleport_interval::value;
GameUniqueState.Boss_gate_interval = D1_Boss_gate_interval;
}
else
{
GameUniqueState.Boss_gate_interval = F1_0*4 - Difficulty_level*i2f(2)/3;
if (Current_level_num == Last_level)
{
LevelSharedBossState.Boss_teleport_interval = F1_0*10;
LevelSharedBossState.Boss_cloak_interval = F1_0*15; // Time between cloaks
} else
{
} else
{
LevelSharedBossState.Boss_teleport_interval = F1_0*7;
LevelSharedBossState.Boss_cloak_interval = F1_0*10; // Time between cloaks
}
}
#endif
#undef D1_Boss_gate_interval
}
//-------------------------------------------------------------------------------------------