Merge pull request 'KingSlimeFix' (#35) from KingSlimeFix into master
Reviewed-on: #35
This commit is contained in:
commit
6909515260
@ -106,4 +106,5 @@ enum class Attribute{
|
|||||||
ITEM_USE_COUNT,
|
ITEM_USE_COUNT,
|
||||||
LAST_JUMP_TIMER,
|
LAST_JUMP_TIMER,
|
||||||
INITIALIZED,
|
INITIALIZED,
|
||||||
|
JUMP_MOVE_TO_TARGET_TIMER,
|
||||||
};
|
};
|
@ -116,20 +116,22 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto StartJumpTowardsPlayer=[&](float jumpDuration,float recoveryTime,float jumpMoveSpd){
|
const auto StartJumpTowardsPlayer=[&](float jumpDuration,float recoveryTime,float jumpMoveSpd,float moveTowardsTargetLockinTime){
|
||||||
m.F(A::JUMP_ORIGINAL_LANDING_TIMER)=m.F(A::JUMP_LANDING_TIMER)=jumpDuration;
|
m.F(A::JUMP_ORIGINAL_LANDING_TIMER)=m.F(A::JUMP_LANDING_TIMER)=jumpDuration;
|
||||||
m.B(A::JUMP_TOWARDS_PLAYER)=true;
|
m.B(A::JUMP_TOWARDS_PLAYER)=true;
|
||||||
m.F(A::RECOVERY_TIME)=recoveryTime;
|
m.F(A::RECOVERY_TIME)=recoveryTime;
|
||||||
m.F(A::JUMP_MOVE_SPD)=jumpMoveSpd;
|
m.F(A::JUMP_MOVE_SPD)=jumpMoveSpd;
|
||||||
|
m.F(A::JUMP_MOVE_TO_TARGET_TIMER)=moveTowardsTargetLockinTime;
|
||||||
m.SetState(State::JUMP);
|
m.SetState(State::JUMP);
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto StartJump=[&](float jumpDuration,vf2d targetPos,float recoveryTime,float jumpMoveSpd){
|
const auto StartJump=[&](float jumpDuration,vf2d targetPos,float recoveryTime,float jumpMoveSpd,float moveTowardsTargetLockinTime){
|
||||||
m.F(A::JUMP_ORIGINAL_LANDING_TIMER)=m.F(A::JUMP_LANDING_TIMER)=jumpDuration;
|
m.F(A::JUMP_ORIGINAL_LANDING_TIMER)=m.F(A::JUMP_LANDING_TIMER)=jumpDuration;
|
||||||
m.V(A::JUMP_TARGET_POS)=targetPos;
|
m.V(A::JUMP_TARGET_POS)=targetPos;
|
||||||
m.B(A::JUMP_TOWARDS_PLAYER)=false;
|
m.B(A::JUMP_TOWARDS_PLAYER)=false;
|
||||||
m.F(A::RECOVERY_TIME)=recoveryTime;
|
m.F(A::RECOVERY_TIME)=recoveryTime;
|
||||||
m.F(A::JUMP_MOVE_SPD)=jumpMoveSpd;
|
m.F(A::JUMP_MOVE_SPD)=jumpMoveSpd;
|
||||||
|
m.F(A::JUMP_MOVE_TO_TARGET_TIMER)=moveTowardsTargetLockinTime;
|
||||||
m.SetState(State::JUMP);
|
m.SetState(State::JUMP);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -142,7 +144,8 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
m.I(A::JUMP_COUNT)++;
|
m.I(A::JUMP_COUNT)++;
|
||||||
float jumpTime=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",0);
|
float jumpTime=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",0);
|
||||||
float jumpSpd=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",1);
|
float jumpSpd=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",1);
|
||||||
StartJumpTowardsPlayer(jumpTime,0.2f,jumpSpd);
|
float lockedInTargetTime=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",2);
|
||||||
|
StartJumpTowardsPlayer(jumpTime,0.2f,jumpSpd,lockedInTargetTime);
|
||||||
}break;
|
}break;
|
||||||
default:{
|
default:{
|
||||||
m.PerformIdleAnimation();
|
m.PerformIdleAnimation();
|
||||||
@ -173,6 +176,7 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
if(m.B(A::JUMP_TOWARDS_PLAYER)){
|
if(m.B(A::JUMP_TOWARDS_PLAYER)){
|
||||||
jumpTargetPos=game->GetPlayer()->GetPos();
|
jumpTargetPos=game->GetPlayer()->GetPos();
|
||||||
}
|
}
|
||||||
|
if(m.F(A::JUMP_LANDING_TIMER)>m.F(A::JUMP_MOVE_TO_TARGET_TIMER)){
|
||||||
if(m.GetPos().x>jumpTargetPos.x){
|
if(m.GetPos().x>jumpTargetPos.x){
|
||||||
m.SetX(std::max(jumpTargetPos.x,m.GetPos().x-m.F(A::JUMP_MOVE_SPD)*game->GetElapsedTime()));
|
m.SetX(std::max(jumpTargetPos.x,m.GetPos().x-m.F(A::JUMP_MOVE_SPD)*game->GetElapsedTime()));
|
||||||
} else
|
} else
|
||||||
@ -185,6 +189,7 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
if(m.GetPos().y<jumpTargetPos.y){
|
if(m.GetPos().y<jumpTargetPos.y){
|
||||||
m.SetY(std::min(jumpTargetPos.y,m.GetPos().y+m.F(A::JUMP_MOVE_SPD)*game->GetElapsedTime()));
|
m.SetY(std::min(jumpTargetPos.y,m.GetPos().y+m.F(A::JUMP_MOVE_SPD)*game->GetElapsedTime()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if(m.F(A::JUMP_LANDING_TIMER)>=m.F(A::JUMP_ORIGINAL_LANDING_TIMER)/2){
|
if(m.F(A::JUMP_LANDING_TIMER)>=m.F(A::JUMP_ORIGINAL_LANDING_TIMER)/2){
|
||||||
m.SetZ(util::lerp(0,float(ConfigInt("JumpHeight")),1-jumpLandingTimerRatio));
|
m.SetZ(util::lerp(0,float(ConfigInt("JumpHeight")),1-jumpLandingTimerRatio));
|
||||||
}else{
|
}else{
|
||||||
@ -230,7 +235,8 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
m.I(A::JUMP_COUNT)++;
|
m.I(A::JUMP_COUNT)++;
|
||||||
float jumpTime=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",0);
|
float jumpTime=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",0);
|
||||||
float jumpSpd=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",1);
|
float jumpSpd=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",1);
|
||||||
StartJumpTowardsPlayer(jumpTime,0.2f,jumpSpd);
|
float lockedInTargetTime=ConfigFloatArr("Phase2.Jump["+std::to_string(m.I(A::JUMP_COUNT))+"]",2);
|
||||||
|
StartJumpTowardsPlayer(jumpTime,0.2f,jumpSpd,lockedInTargetTime);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -252,7 +258,7 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
}
|
}
|
||||||
if(m.F(A::SHOOT_RING_TIMER)==0){
|
if(m.F(A::SHOOT_RING_TIMER)==0){
|
||||||
if(m.I(A::PATTERN_REPEAT_COUNT)>=ConfigInt("Phase1.JumpAfter")){
|
if(m.I(A::PATTERN_REPEAT_COUNT)>=ConfigInt("Phase1.JumpAfter")){
|
||||||
StartJumpTowardsPlayer(ConfigFloat("Phase1.AirborneTime"),ConfigFloat("Phase1.LandingRecoveryTime"),ConfigFloat("JumpMoveSpd"));
|
StartJumpTowardsPlayer(ConfigFloat("Phase1.AirborneTime"),ConfigFloat("Phase1.LandingRecoveryTime"),ConfigFloat("JumpMoveSpd"),ConfigFloat("Phase1.JumpLockinTargetTime"));
|
||||||
m.I(A::PATTERN_REPEAT_COUNT)=0;
|
m.I(A::PATTERN_REPEAT_COUNT)=0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -280,6 +286,9 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
if(m.GetRemainingHPPct()<=ConfigFloat("Phase3.Change")/100.f){
|
if(m.GetRemainingHPPct()<=ConfigFloat("Phase3.Change")/100.f){
|
||||||
m.phase=3;
|
m.phase=3;
|
||||||
m.SetSize(ConfigFloat("Phase3.Size")/100,false);
|
m.SetSize(ConfigFloat("Phase3.Size")/100,false);
|
||||||
|
if(m.I(A::PATTERN_REPEAT_COUNT)==0){
|
||||||
|
m.I(A::PATTERN_REPEAT_COUNT)=1;
|
||||||
|
}
|
||||||
TransitionPhase(m.phase);
|
TransitionPhase(m.phase);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -310,7 +319,7 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(m.I(A::PATTERN_REPEAT_COUNT)==0){
|
if(m.I(A::PATTERN_REPEAT_COUNT)==0){
|
||||||
StartJumpTowardsPlayer(ConfigFloat("Phase3.JumpDelayTime"),ConfigFloat("Phase3.JumpRecoveryTime"),ConfigFloat("Phase3.JumpMoveSpd"));
|
StartJumpTowardsPlayer(ConfigFloat("Phase3.JumpDelayTime"),ConfigFloat("Phase3.JumpRecoveryTime"),ConfigFloat("Phase3.JumpMoveSpd"),ConfigFloat("Phase3.JumpLockinTargetTime"));
|
||||||
m.I(A::PATTERN_REPEAT_COUNT)++;
|
m.I(A::PATTERN_REPEAT_COUNT)++;
|
||||||
}else
|
}else
|
||||||
if(m.I(A::PATTERN_REPEAT_COUNT)<4&&m.F(A::SHOOT_TIMER)==0){
|
if(m.I(A::PATTERN_REPEAT_COUNT)<4&&m.F(A::SHOOT_TIMER)==0){
|
||||||
@ -343,7 +352,8 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,std::string strat
|
|||||||
float jumpAngle=util::angleTo(m.GetPos(),game->GetCurrentMapData().MapSize*game->GetCurrentMapData().tilewidth/2); //We jump towards the center to keep the player from constantly dealing with a stuck boss.
|
float jumpAngle=util::angleTo(m.GetPos(),game->GetCurrentMapData().MapSize*game->GetCurrentMapData().tilewidth/2); //We jump towards the center to keep the player from constantly dealing with a stuck boss.
|
||||||
float jumpDistance=ConfigFloat("Phase4.JumpDistance")/100*game->GetCurrentMapData().tilewidth;
|
float jumpDistance=ConfigFloat("Phase4.JumpDistance")/100*game->GetCurrentMapData().tilewidth;
|
||||||
float jumpSpd=jumpDistance/ConfigFloat("Phase4.JumpDuration");
|
float jumpSpd=jumpDistance/ConfigFloat("Phase4.JumpDuration");
|
||||||
StartJump(ConfigFloat("Phase4.JumpDuration"),m.GetPos()+vf2d{cos(jumpAngle)*jumpDistance,sin(jumpAngle)*jumpDistance},0,jumpSpd);
|
float lockedInTargetTime=jumpDistance/ConfigFloat("Phase4.JumpLockinTargetTime");
|
||||||
|
StartJump(ConfigFloat("Phase4.JumpDuration"),m.GetPos()+vf2d{cos(jumpAngle)*jumpDistance,sin(jumpAngle)*jumpDistance},0,jumpSpd,lockedInTargetTime);
|
||||||
}else
|
}else
|
||||||
if(m.I(A::PATTERN_REPEAT_COUNT)<5&&m.F(A::SHOOT_TIMER)==0){
|
if(m.I(A::PATTERN_REPEAT_COUNT)<5&&m.F(A::SHOOT_TIMER)==0){
|
||||||
m.I(A::PATTERN_REPEAT_COUNT)++;
|
m.I(A::PATTERN_REPEAT_COUNT)++;
|
||||||
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 5
|
#define VERSION_MINOR 5
|
||||||
#define VERSION_PATCH 1
|
#define VERSION_PATCH 1
|
||||||
#define VERSION_BUILD 8085
|
#define VERSION_BUILD 8086
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
@ -117,6 +117,8 @@ MonsterStrategy
|
|||||||
JumpAfter = 4 shots
|
JumpAfter = 4 shots
|
||||||
AirborneTime = 3.0
|
AirborneTime = 3.0
|
||||||
LandingRecoveryTime = 2.0
|
LandingRecoveryTime = 2.0
|
||||||
|
# How much time remaining for the jump target being locked into place.
|
||||||
|
JumpLockinTargetTime = 0.0
|
||||||
}
|
}
|
||||||
Phase2
|
Phase2
|
||||||
{
|
{
|
||||||
@ -134,10 +136,11 @@ MonsterStrategy
|
|||||||
|
|
||||||
# Argument 0 is jump time.
|
# Argument 0 is jump time.
|
||||||
# Argument 1 is move speed.
|
# Argument 1 is move speed.
|
||||||
|
# Argument 2 is locked-in target time.
|
||||||
|
|
||||||
Jump[1] = 1.8, 45
|
Jump[1] = 1.8, 45, 0.0
|
||||||
Jump[2] = 1.2, 70
|
Jump[2] = 1.2, 70, 0.0
|
||||||
Jump[3] = 0.6, 400
|
Jump[3] = 0.7, 1900, 0.5
|
||||||
}
|
}
|
||||||
Phase3
|
Phase3
|
||||||
{
|
{
|
||||||
@ -154,6 +157,8 @@ MonsterStrategy
|
|||||||
JumpMoveSpd = 80
|
JumpMoveSpd = 80
|
||||||
JumpDelayTime = 1.2
|
JumpDelayTime = 1.2
|
||||||
JumpRecoveryTime = 2.0
|
JumpRecoveryTime = 2.0
|
||||||
|
# How much time remaining for the jump target being locked into place.
|
||||||
|
JumpLockinTargetTime = 0.0
|
||||||
}
|
}
|
||||||
Phase4
|
Phase4
|
||||||
{
|
{
|
||||||
@ -171,6 +176,9 @@ MonsterStrategy
|
|||||||
|
|
||||||
JumpDuration = 3.0
|
JumpDuration = 3.0
|
||||||
JumpDistance = 1000
|
JumpDistance = 1000
|
||||||
|
|
||||||
|
# How much time remaining for the jump target being locked into place.
|
||||||
|
JumpLockinTargetTime = 0.0
|
||||||
}
|
}
|
||||||
Phase5
|
Phase5
|
||||||
{
|
{
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user