Gameplay stats 1.1 (#2129)

This commit is contained in:
Sarge-117 2022-12-10 12:37:33 -08:00 committed by GitHub
parent 8021f29c3e
commit 8c23bcd67c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 39 additions and 3 deletions

View file

@ -1616,11 +1616,18 @@ void func_80084BF4(PlayState* play, u16 flag) {
// Gameplay stat tracking: Update time the item was acquired
// (special cases for some duplicate items)
void GameplayStats_SetTimestamp(u8 item) {
void GameplayStats_SetTimestamp(PlayState* play, u8 item) {
if (gSaveContext.sohStats.timestamp[item] != 0) {
// If we already have a timestamp for this item, do nothing
if (gSaveContext.sohStats.timestamp[item] != 0){
return;
}
// Use ITEM_KEY_BOSS only for Ganon's boss key - not any other boss keys
if (play != NULL) {
if (item == ITEM_KEY_BOSS && play->sceneNum != 13 && play->sceneNum != 10) {
return;
}
}
u32 time = GAMEPLAYSTAT_TOTAL_TIME;
@ -1658,6 +1665,11 @@ void Randomizer_GameplayStats_SetTimestamp(uint16_t item) {
time = 1;
}
// Use ITEM_KEY_BOSS to timestamp Ganon's boss key
if (item == RG_GANONS_CASTLE_BOSS_KEY) {
gSaveContext.sohStats.timestamp[ITEM_KEY_BOSS] = time;
}
// Count any bottled item as a bottle
if (item >= RG_EMPTY_BOTTLE && item <= RG_BOTTLE_WITH_BIG_POE) {
if (gSaveContext.sohStats.timestamp[ITEM_BOTTLE] == 0) {
@ -1698,7 +1710,7 @@ u8 Item_Give(PlayState* play, u8 item) {
s16 temp;
// Gameplay stats: Update the time the item was obtained
GameplayStats_SetTimestamp(item);
GameplayStats_SetTimestamp(play, item);
slot = SLOT(item);
if (item >= ITEM_STICKS_5) {

View file

@ -1087,6 +1087,10 @@ void Play_Update(PlayState* play) {
// Gameplay stat tracking
if (!gSaveContext.sohStats.gameComplete) {
gSaveContext.sohStats.playTimer++;
if (CVar_GetS32("gMMBunnyHood", 0) && Player_GetMask(play) == PLAYER_MASK_BUNNY) {
gSaveContext.sohStats.count[COUNT_TIME_BUNNY_HOOD]++;
}
}
func_800AA178(1);

View file

@ -374,6 +374,7 @@ void EnClearTag_Update(Actor* thisx, PlayState* play2) {
if ((s8)this->actor.colChkInfo.health <= 0) {
this->state = CLEAR_TAG_STATE_CRASHING;
this->actor.velocity.y = 0.0f;
gSaveContext.sohStats.count[COUNT_ENEMIES_DEFEATED_ARWING]++;
goto state_crashing;
}
}

View file

@ -5350,6 +5350,13 @@ s32 func_8083BDBC(Player* this, PlayState* play) {
}
} else {
func_8083BCD0(this, play, sp2C);
if (sp2C == 1 || sp2C == 3) {
gSaveContext.sohStats.count[COUNT_SIDEHOPS]++;
}
if (sp2C == 2) {
gSaveContext.sohStats.count[COUNT_BACKFLIPS]++;
}
return 1;
}
}