Skip to content

Commit 003b3cc

Browse files
committed
RestorePauseMissionText
Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>
1 parent 6198f0e commit 003b3cc

9 files changed

Lines changed: 70 additions & 18 deletions

File tree

MarathonRecomp/api/Marathon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "Sonicteam/HUDMainMenu.h"
5050
#include "Sonicteam/HUDMessageWindow.h"
5151
#include "Sonicteam/HUDOption.h"
52+
#include "Sonicteam/HUDPause.h"
5253
#include "Sonicteam/HUDPopupScreen.h"
5354
#include "Sonicteam/HUDRaderMap.h"
5455
#include "Sonicteam/HUDStageTitle.h"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/Engine/Task.h>
5+
6+
namespace Sonicteam
7+
{
8+
class HUDPause : public SoX::RefCountObject, public SoX::Engine::Task
9+
{
10+
public:
11+
xpointer<CsdObject> m_pCsdObject;
12+
MARATHON_INSERT_PADDING(0xA0);
13+
be<float> m_TextPriority;
14+
MARATHON_INSERT_PADDING(0x40);
15+
xpointer<HudTextParts> m_pHudTextRoot;
16+
bool m_ShowMissionWindow;
17+
};
18+
}

MarathonRecomp/api/Sonicteam/PauseTask.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ namespace Sonicteam
2525
be<uint32_t> m_SelectedIndex;
2626
MARATHON_INSERT_PADDING(0x28);
2727
be<uint32_t> m_Buttons;
28-
MARATHON_INSERT_PADDING(0x1E0);
28+
MARATHON_INSERT_PADDING(0x1D8);
29+
xpointer<TextEntity> m_pMissionText;
30+
MARATHON_INSERT_PADDING(0x4);
2931
be<uint32_t> m_ItemCount;
3032
};
33+
34+
MARATHON_ASSERT_OFFSETOF(PauseTask, m_pMissionText, 0x27C);
35+
MARATHON_ASSERT_OFFSETOF(PauseTask, m_ItemCount, 0x284);
3136
}

MarathonRecomp/patches/aspect_ratio_patches.cpp

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include "aspect_ratio_patches.h"
2-
#include <api/Marathon.h>
32
#include <gpu/video.h>
43
#include <hid/hid.h>
54
#include <patches/hook_event.h>
@@ -10,7 +9,6 @@
109
#include <ui/imgui_utils.h>
1110
#include <ui/options_menu.h>
1211
#include <user/config.h>
13-
#include <app.h>
1412

1513
// #define CORNER_DEBUG
1614

@@ -1613,19 +1611,6 @@ PPC_FUNC(sub_8262D868)
16131611
ReplaceTextVariables(pTextEntity);
16141612
}
16151613

1616-
void SetTextEntityModifier(Sonicteam::TextEntity* pTextEntity, uint64_t flags)
1617-
{
1618-
if (!pTextEntity)
1619-
return;
1620-
1621-
auto pTextModifier = (uint64_t*)(reinterpret_cast<uint8_t*>(pTextEntity) + sizeof(Sonicteam::TextEntity));
1622-
1623-
*pTextModifier = flags;
1624-
1625-
pTextEntity->m_FieldDD = true;
1626-
pTextEntity->Update();
1627-
}
1628-
16291614
// Sonicteam::HUDMainMenu::Destroy
16301615
PPC_FUNC_IMPL(__imp__sub_824E2978);
16311616
PPC_FUNC(sub_824E2978)
@@ -1986,7 +1971,7 @@ const xxHashMap<CsdModifier> g_csdModifiers =
19861971
// pausemenu
19871972
{ HashStr("sprite/pausemenu/pausemenu/pause_menu"), { CSD_SCALE } },
19881973
{ HashStr("sprite/pausemenu/pausemenu/pause_menu_cursor"), { CSD_SCALE } },
1989-
{ HashStr("sprite/pausemenu/pausemenu/mission"), { CSD_SCALE } },
1974+
{ HashStr("sprite/pausemenu/pausemenu/mission"), { CSD_ALIGN_BOTTOM | CSD_SCALE } },
19901975

19911976
// radarmap_cover
19921977
{ HashStr("sprite/radarmap_cover/radarmap_cover/Scene_0000"), { CSD_RADARMAP | CSD_ALIGN_TOP_RIGHT | CSD_SCALE } },

MarathonRecomp/patches/aspect_ratio_patches.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <xxHashMap.h>
4+
#include <api/Marathon.h>
45

56
#define MAKE_BITFLAG32(bit) 1U << bit
67
#define MAKE_BITFLAG64(bit) 1ULL << bit
@@ -157,8 +158,21 @@ struct MovieModifier
157158
};
158159

159160
extern const xxHashMap<MovieModifier> g_movieModifiers;
160-
161161
MovieModifier FindMovieModifier(XXH64_hash_t nameHash);
162162

163+
static void SetTextEntityModifier(Sonicteam::TextEntity* pTextEntity, uint64_t flags)
164+
{
165+
if (!pTextEntity)
166+
return;
167+
168+
const auto pTextModifier = reinterpret_cast<uint64_t *>(
169+
reinterpret_cast<uint8_t *>(pTextEntity) + sizeof(Sonicteam::TextEntity));
170+
171+
*pTextModifier = flags;
172+
173+
pTextEntity->m_FieldDD = true;
174+
pTextEntity->Update();
175+
}
176+
163177
#undef MAKE_BITFLAG64
164178
#undef MAKE_BITFLAG32

MarathonRecomp/patches/misc_patches.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,23 @@ PPC_FUNC(sub_82188460)
233233
ctx.r3.u64 = Config::Subtitles;
234234
}
235235

236+
237+
// Sonicteam::HUDPause::ProcessMessage
238+
PPC_FUNC_IMPL(__imp__sub_824EF788);
239+
PPC_FUNC(sub_824EF788)
240+
{
241+
if (Config::RestorePauseMissionText)
242+
reinterpret_cast<Sonicteam::HUDPause*>(base + ctx.r3.u32)->m_ShowMissionWindow = true;
243+
244+
__imp__sub_824EF788(ctx, base);
245+
}
246+
247+
// The mission text is drawn at a lower priority
248+
// than the mission box by default. 1001.0f is the
249+
// priority value used by the rest of the pause menu.
250+
void PauseTask_SetMissionTextPriority(PPCRegister& priority)
251+
{
252+
priority.f64 = 1001.0f;
253+
}
254+
236255
void NOP() {}

MarathonRecomp/patches/pause_patches.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include <kernel/memory.h>
33
#include <ui/options_menu.h>
44

5+
#include "aspect_ratio_patches.h"
6+
57
void AddPauseMenuItem
68
(
79
Sonicteam::TextBook* in_pTextBook,
@@ -107,5 +109,7 @@ PPC_FUNC(sub_82509870)
107109
}
108110
}
109111

112+
SetTextEntityModifier(pPauseTask->m_pMissionText.get(), CSD_ALIGN_BOTTOM | CSD_SCALE);
113+
110114
__imp__sub_82509870(ctx, base);
111115
}

MarathonRecomp/user/config_def.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ CONFIG_DEFINE_HIDDEN("Codes", bool, RestoreChaosBoostJump, false, false);
9595
CONFIG_DEFINE_HIDDEN("Codes", bool, RestoreChaosSpearFlips, false, false);
9696
CONFIG_DEFINE_HIDDEN("Codes", bool, RestoreContextualHUDColours, false, false);
9797
CONFIG_DEFINE_HIDDEN("Codes", bool, RestoreDemoCameraMode, false, false);
98+
CONFIG_DEFINE_HIDDEN("Codes", bool, RestorePauseMissionText, false, false);
9899
CONFIG_DEFINE_HIDDEN("Codes", bool, RestoreSonicActionGauge, false, false);
99100
CONFIG_DEFINE_HIDDEN("Codes", bool, SkipIntroLogos, false, false);
100101
CONFIG_DEFINE_HIDDEN("Codes", bool, TailsGauge, false, false);

MarathonRecompLib/config/Marathon.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,11 @@ name = "SonicGauge_FixFlags"
556556
address = 0x822196EC
557557
registers = ["r3", "r31"]
558558

559+
[[midasm_hook]]
560+
name = "PauseTask_SetMissionTextPriority"
561+
address = 0x82509AEC
562+
registers = ["f1"]
563+
559564
[[midasm_hook]]
560565
name = "SonicGauge_FixGemSprite"
561566
address = 0x82185768

0 commit comments

Comments
 (0)