Skip to content

Commit

Permalink
SetGameSpeed - custom FF display can be set up as hidden or visible
Browse files Browse the repository at this point in the history
+ small refactors to cover those new options:
- Custom Maximum Speed.
  • Loading branch information
jetrotal committed Nov 18, 2023
1 parent 02c1d37 commit bf8c96b
Showing 5 changed files with 34 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/fps_overlay.cpp
Original file line number Diff line number Diff line change
@@ -85,7 +85,7 @@ void FpsOverlay::Draw(Bitmap& dst) {
}

// Always drawn when speedup is on independent of FPS
if (last_speed_mod > 1) {
if (!Game_Clock::GetSpeedOverlayMode() && last_speed_mod > 1) {
if (speedup_dirty) {
std::string text = "> x" + std::to_string(last_speed_mod);

2 changes: 2 additions & 0 deletions src/game_clock.cpp
Original file line number Diff line number Diff line change
@@ -25,6 +25,8 @@
constexpr bool Game_Clock::is_steady;
Game_Clock::Data Game_Clock::data;

int hideDisplay = 0;

// Damping factor fps computation.
static constexpr auto _fps_smooth = 2.0f / 121.0f;

17 changes: 17 additions & 0 deletions src/game_clock.h
Original file line number Diff line number Diff line change
@@ -36,6 +36,8 @@ class Game_Clock {
using duration = clock::duration;
using time_point = clock::time_point;

int hideDisplay;

static constexpr bool is_steady = clock::is_steady;

/** Get current time */
@@ -76,6 +78,12 @@ class Game_Clock {
/** @return the speed up or slowdown factor we'll use to run the game. */
static float GetGameSpeedFactor();

/** Set either if Speed Multiplier Overlay is hidden or Visible. */
static void setSpeedOverlayMode(bool mode);

/** Check if Speed Multiplier Overlay is hidden or Visible. */
static int GetSpeedOverlayMode();

/** Get the time of the current frame */
static time_point GetFrameTime();

@@ -117,6 +125,7 @@ class Game_Clock {
float speed = 1.0;
float fps = 0.0;
int frame = 0;
bool hideSpeedOverlay = 0;
};
static Data data;
};
@@ -180,4 +189,12 @@ inline float Game_Clock::GetGameSpeedFactor() {
return data.speed;
}

inline int Game_Clock::GetSpeedOverlayMode() {
return data.hideSpeedOverlay;
}

inline void Game_Clock::setSpeedOverlayMode(bool s) {
data.hideSpeedOverlay = s;
}

#endif
14 changes: 13 additions & 1 deletion src/game_interpreter.cpp
Original file line number Diff line number Diff line change
@@ -4988,8 +4988,20 @@ bool Game_Interpreter::CommandManiacCallCommand(lcf::rpg::EventCommand const&) {
}

bool Game_Interpreter::CommandSetGameSpeed(lcf::rpg::EventCommand const& com) {
// #SetGameSpeed, "",[speedIsVar, speed, speedLimitIsVar,speedLimit, hideSpeedMultiplierIsVar, hideSpeedMultiplier ];

int32_t speed = ValueOrVariable(com.parameters[0], com.parameters[1]) * Game_Clock::GetGameSpeedFactor();
if (speed > 100) speed = 100;
int32_t speedLimit = ValueOrVariable(com.parameters[2], com.parameters[3]);
bool hideSpeedMultiplier = ValueOrVariable(com.parameters[4], com.parameters[5]);

if (speedLimit == 0) speedLimit = 100;
if (speed > speedLimit) speed = speedLimit;

if (Input::IsSystemPressed(Input::FAST_FORWARD_A) || Input::IsSystemPressed(Input::FAST_FORWARD_B))
Game_Clock::setSpeedOverlayMode(0);
else
Game_Clock::setSpeedOverlayMode(hideSpeedMultiplier);

Game_Clock::SetGameSpeedFactor(speed);
return true;
}
1 change: 1 addition & 0 deletions src/player.cpp
Original file line number Diff line number Diff line change
@@ -310,6 +310,7 @@ void Player::UpdateInput() {
if (Input::IsSystemPressed(Input::FAST_FORWARD_B)) {
speed = speed_modifier_b;
}
Game_Clock::setSpeedOverlayMode(0);
Game_Clock::SetGameSpeedFactor(speed);

if (Main_Data::game_quit) {

0 comments on commit bf8c96b

Please sign in to comment.