Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
473f241
Remove Gameplay Timer Drawing from Source. This is already handled by…
Caladius Sep 12, 2025
ccf8b7c
Remove IGT from Cosmetic Editor
Caladius Sep 12, 2025
89619bb
Extern Time Formatting from TimeDisplay, replace Gameplay Stat time f…
Caladius Sep 12, 2025
f1e835d
Item and Boss Kill Timestamps; WIP - Cleanup
Caladius Sep 13, 2025
fed3f7e
WIP - Ripping out source intrusion. Items and Boss Kills completed, s…
Caladius Sep 15, 2025
890e8c7
Enemy counts done, WIP player stats.
Caladius Sep 15, 2025
2a67637
Ammo consumed counts complete, removed function from z_param and repl…
Caladius Sep 15, 2025
83280fe
Special cased Enemy Kills, moved out of Mods.cpp and into GameplayStats.
Caladius Sep 15, 2025
4d641f0
Button Press counts, more cleanup.
Caladius Sep 15, 2025
4fc54cf
Fix RTA Timer and SaveManager for storing it
Caladius Sep 15, 2025
450c164
Add rupee usage.
Caladius Sep 15, 2025
1c7e0ed
Add Damage Taken
Caladius Sep 15, 2025
7017e08
Add Rolls and Bonks
Caladius Sep 16, 2025
300ea2c
Add Pause and Steps count. Removed Step count from z_player
Caladius Sep 16, 2025
cd3eed7
Sword Swing Count, removed from z_player
Caladius Sep 16, 2025
9f36709
Sidehops and Backflips, removed from z_player
Caladius Sep 16, 2025
d985bdb
Bunny Hood Time, removed from z_play
Caladius Sep 16, 2025
c4a3ca9
Add Ice trap counts, removed from ExtraTraps.cpp and using the OnItem…
Caladius Sep 16, 2025
bb555ff
PoH/Container counts, added a sorting to the counts list.
Caladius Sep 16, 2025
8791f95
clang
Caladius Sep 16, 2025
9595b96
Add tracking for individual Ice Trap types
Caladius Sep 16, 2025
cffbd65
Clean up
Caladius Sep 16, 2025
362a6cf
Add Pots counter, removed from z_obj_tsubo
Caladius Sep 16, 2025
c95c903
Add Chest count, removed from z_en_box
Caladius Sep 16, 2025
e90bf77
readded Time Spent in a Scene
Caladius Sep 16, 2025
1b5c516
clang
Caladius Sep 16, 2025
9d6eea0
restore old save functions
Caladius Sep 17, 2025
d66c509
Adds some stuff back with saving working
Caladius Sep 17, 2025
d35a779
Catch up to current.
Caladius Sep 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion soh/include/functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -1093,7 +1093,6 @@ void func_80088AA0(s16 seconds);
void func_80088AF0(PlayState* play);
void func_80088B34(s16 arg0);
void Interface_Draw(PlayState* play);
void Interface_DrawTotalGameplayTimer(PlayState* play);
void Interface_Update(PlayState* play);
Path* Path_GetByIndex(PlayState* play, s16 index, s16 max);
f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw);
Expand Down
2 changes: 0 additions & 2 deletions soh/include/z64save.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,6 @@ typedef struct {
/* */ s16 sceneNum;
/* */ s8 roomNum;
/* */ bool gameComplete;
/* */ u32 itemTimestamp[TIMESTAMP_MAX];
/* */ SceneTimestamp sceneTimestamps[8191];
/* */ u32 tsIdx;
/* */ u32 count[COUNT_MAX];
/* */ u32 entrancesDiscovered[SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT];
Expand Down
2 changes: 1 addition & 1 deletion soh/soh/Enhancements/ExtraTraps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,13 @@ void RegisterExtraTraps() {

*should = true;
gSaveContext.ship.pendingIceTrapCount--;
gSaveContext.ship.stats.count[COUNT_ICE_TRAPS]++;
GameInteractor_ExecuteOnItemReceiveHooks(ItemTable_RetrieveEntry(MOD_RANDOMIZER, RG_ICE_TRAP));
if (CVAR_EXTRA_TRAPS_VALUE) {
RollRandomTrap(gPlayState->sceneNum + player->getItemEntry.drawItemId);
} else {
GameInteractor::RawAction::FreezePlayer();
}
GameInteractor_ExecuteOnIceTrapReceived(RG_ICE_TRAP, CVAR_EXTRA_TRAPS_VALUE ? roll : 0);
});
}

Expand Down
58 changes: 58 additions & 0 deletions soh/soh/Enhancements/GameplayStats/gameplaystats2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#pragma once

#include "soh/cvar_prefixes.h"
#include <stdint.h>
#include <string>
#include "imgui.h"

extern "C" {
uint64_t GetUnixTimestamp(void);
};

// New

typedef enum {
TIMESTAMP_DEFEAT_GOHMA = 0xA0,
TIMESTAMP_DEFEAT_KING_DODONGO,
TIMESTAMP_DEFEAT_BARINADE,
TIMESTAMP_DEFEAT_PHANTOM_GANON,
TIMESTAMP_DEFEAT_VOLVAGIA,
TIMESTAMP_DEFEAT_MORPHA,
TIMESTAMP_DEFEAT_BONGO_BONGO,
TIMESTAMP_DEFEAT_TWINROVA,
TIMESTAMP_DEFEAT_GANONDORF,
TIMESTAMP_DEFEAT_GANON,
TIMESTAMP_BOSSRUSH_FINISH,
TIMESTAMP_TRIFORCE_COMPLETED,
} GameplayStatTimestamp;

typedef enum {
STAT_TYPE_SCENE,
STAT_TYPE_ITEM,
STAT_TYPE_EVENT,
STAT_TYPE_ALL,
} GameplayStatEntryTypes;

typedef enum {
STAT_TYPE_ENEMY = 0x4,
STAT_TYPE_PLAYER,
STAT_TYPE_COLLECT,
} GameplaystatCountTypes;

typedef enum {
STAT_ACTION_SAVE,
STAT_ACTION_LOAD,
STAT_ACTION_DELETE,
} GameplayStatsActions;

typedef struct {
uint32_t entryType;
std::string entryName;
ImVec4 entryColor;
uint32_t entryTimestamp;
} GameplayStatObject;

extern void GameplayStats_AddTimestamp(GameplayStatObject statObject);
extern GameplayStatObject GameplayStats_GetObject(uint32_t entryId, uint32_t entryType);

// End
1 change: 1 addition & 0 deletions soh/soh/Enhancements/TimeDisplay/TimeDisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ typedef struct {
} TimeObject;

extern const std::vector<TimeObject> timeDisplayList;
extern std::string formatTimeDisplay(uint32_t value);
4 changes: 2 additions & 2 deletions soh/soh/Enhancements/boss-rush/BossRush.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh_assets.h"
#include "soh/frame_interpolation.h"
#include "soh/Enhancements/GameplayStats/gameplaystats2.h"

#include <array>
#include <string>
Expand Down Expand Up @@ -560,8 +561,7 @@ void BossRush_HandleCompleteBoss(PlayState* play) {
play->sceneNum == SCENE_GANON_BOSS) {
gSaveContext.ship.stats.playTimer += 2;
gSaveContext.ship.stats.gameComplete = 1;
gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_BOSSRUSH_FINISH] =
static_cast<uint32_t>(GAMEPLAYSTAT_TOTAL_TIME);
GameplayStats_AddTimestamp(GameplayStats_GetObject(TIMESTAMP_BOSSRUSH_FINISH, STAT_TYPE_EVENT));
}
}

Expand Down
6 changes: 1 addition & 5 deletions soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ static const char* MarginCvarList[]{
CVAR_COSMETIC("HUD.CLeftButton"), CVAR_COSMETIC("HUD.CRightButton"), CVAR_COSMETIC("HUD.Dpad"),
CVAR_COSMETIC("HUD.Minimap"), CVAR_COSMETIC("HUD.SmallKey"), CVAR_COSMETIC("HUD.Rupees"),
CVAR_COSMETIC("HUD.Carrots"), CVAR_COSMETIC("HUD.Timers"), CVAR_COSMETIC("HUD.ArcheryScore"),
CVAR_COSMETIC("HUD.TitleCard.Map"), CVAR_COSMETIC("HUD.TitleCard.Boss"), CVAR_COSMETIC("HUD.IGT"),
CVAR_COSMETIC("HUD.TitleCard.Map"), CVAR_COSMETIC("HUD.TitleCard.Boss"),
};

static const char* MarginCvarNonAnchor[]{
Expand Down Expand Up @@ -1804,10 +1804,6 @@ void Draw_Placements() {
"Title cards (Bosses)", CVAR_COSMETIC("HUD.TitleCard.Boss"), 0,
static_cast<int>(ImGui::GetWindowViewport()->Size.y / 2), -50,
static_cast<int>(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f);
Draw_Table_Dropdown("In-game Gameplay Timer position", "tablegameplaytimer", "In-game Gameplay Timer settings",
"In-game Gameplay Timer", CVAR_COSMETIC("HUD.IGT"), 0,
static_cast<int>(ImGui::GetWindowViewport()->Size.y / 2), -50,
static_cast<int>(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f);
if (ImGui::CollapsingHeader("Enemy Health Bar position")) {
if (ImGui::BeginTable("enemyhealthbar", 1, FlagsTable)) {
ImGui::TableSetupColumn("Enemy Health Bar settings", FlagsCell, TablesCellsWidth);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ DEFINE_HOOK(OnActorDestroy, (void* actor));
DEFINE_HOOK(OnEnemyDefeat, (void* actor));
DEFINE_HOOK(OnBossDefeat, (void* actor));
DEFINE_HOOK(OnTimestamp, (u8 item));
DEFINE_HOOK(OnAmmoUsed, (s16 item, s16 ammoUsed));
DEFINE_HOOK(OnIceTrapReceived, (s16 item, s16 trapType));
DEFINE_HOOK(OnPlayerBonk, ());
DEFINE_HOOK(OnPlayerHealthChange, (int16_t amount));
DEFINE_HOOK(OnPlayerBottleUpdate, (int16_t contents));
Expand Down
8 changes: 8 additions & 0 deletions soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,14 @@ void GameInteractor_ExecuteOnTimestamp(u8 item) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnTimestamp>(item);
}

void GameInteractor_ExecuteOnAmmoUsed(s16 item, s16 ammoUsed) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnAmmoUsed>(item, ammoUsed);
}

void GameInteractor_ExecuteOnIceTrapReceived(s16 item, s16 trapType) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnIceTrapReceived>(item, trapType);
}

void GameInteractor_ExecuteOnPlayerBonk() {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnPlayerBonk>();
}
Expand Down
2 changes: 2 additions & 0 deletions soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ void GameInteractor_ExecuteOnActorDestroy(void* actor);
void GameInteractor_ExecuteOnEnemyDefeat(void* actor);
void GameInteractor_ExecuteOnBossDefeat(void* actor);
void GameInteractor_ExecuteOnTimestamp(u8 item);
void GameInteractor_ExecuteOnAmmoUsed(s16 item, s16 ammoUsed);
void GameInteractor_ExecuteOnIceTrapReceived(s16 item, s16 trapType);
void GameInteractor_ExecuteOnPlayerBonk();
void GameInteractor_ExecuteOnPlayerHealthChange(int16_t amount);
void GameInteractor_ExecuteOnPlayerBottleUpdate(int16_t contents);
Expand Down
Loading
Loading