Skip to content

Commit 66ee094

Browse files
Merge branch 'main' into restore-mission-text
2 parents 5e1be36 + ca2cb1f commit 66ee094

21 files changed

+666
-926
lines changed

MarathonRecomp/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ set(MARATHON_RECOMP_PATCHES_CXX_SOURCES
143143
"patches/misc_patches.cpp"
144144
"patches/player_patches.cpp"
145145
"patches/SaveDataTask_patches.cpp"
146+
"patches/text_patches.cpp"
146147
"patches/TitleTask_patches.cpp"
147148
"patches/video_patches.cpp"
148149
)
@@ -543,7 +544,9 @@ BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/com
543544
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/select.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/select.dds" ARRAY_NAME "g_select" COMPRESSION_TYPE "zstd")
544545
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/light.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/light.dds" ARRAY_NAME "g_light" COMPRESSION_TYPE "zstd")
545546
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/main_menu1.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/main_menu1.dds" ARRAY_NAME "g_main_menu1" COMPRESSION_TYPE "zstd")
546-
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/arrow.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/arrow.dds" ARRAY_NAME "arrow" COMPRESSION_TYPE "zstd")
547+
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/arrow.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/arrow.dds" ARRAY_NAME "g_arrow" COMPRESSION_TYPE "zstd")
548+
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/window.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/window.dds" ARRAY_NAME "g_window" COMPRESSION_TYPE "zstd")
549+
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/select_arrow.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/select_arrow.dds" ARRAY_NAME "g_select_arrow" COMPRESSION_TYPE "zstd")
547550

548551
## Installer ##
549552
BIN2C(TARGET_OBJ MarathonRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/installer/install_001.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/installer/install_001.dds" ARRAY_NAME "g_install_001" COMPRESSION_TYPE "zstd")

MarathonRecomp/api/Sonicteam/SoX/Engine/Doc.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ namespace Sonicteam::SoX::Engine
1010
public:
1111
xpointer<void> m_pVftable;
1212
MARATHON_INSERT_PADDING(4);
13-
xpointer<SoX::Engine::DocMode> m_pDocMode;
14-
MARATHON_INSERT_PADDING(0x50);
13+
xpointer<DocMode> m_pDocMode;
14+
xpointer<Task> m_pRootTask;
15+
xpointer<Task> m_pRootGTask;
16+
MARATHON_INSERT_PADDING(8);
17+
xpointer<Task> m_pDocModeExecutor;
18+
MARATHON_INSERT_PADDING(0x3C);
1519

1620
template <typename T>
1721
inline T* GetDocMode();

MarathonRecomp/api/Sonicteam/TitleTask.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,27 @@ namespace Sonicteam
88
class TitleTask : public SoX::Engine::Task
99
{
1010
public:
11-
MARATHON_INSERT_PADDING(0x30);
11+
static constexpr float ms_DefaultMovieWaitTime = 30.0f;
12+
13+
enum TitleState : uint32_t
14+
{
15+
TitleState_Open,
16+
TitleState_Wait,
17+
TitleState_PressStart,
18+
TitleState_OptionsOpen = 5,
19+
TitleState_OptionsWait,
20+
TitleState_OptionsProceed = 7,
21+
TitleState_Proceed,
22+
TitleState_Outro = 13
23+
};
24+
25+
be<TitleState> m_State;
26+
MARATHON_INSERT_PADDING(0x0C);
27+
be<float> m_MovieWaitTime;
28+
be<uint32_t> m_Field60;
29+
MARATHON_INSERT_PADDING(0x18);
1230
be<uint32_t> m_SelectedIndex;
31+
MARATHON_INSERT_PADDING(0x20);
32+
be<uint32_t> m_CastIndex;
1333
};
1434
}

MarathonRecomp/exports.cpp

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,31 @@
1+
#include "exports.h"
12
#include <apu/embedded_player.h>
2-
#include <cpu/guest_stack_var.h>
33
#include <kernel/function.h>
44
#include <kernel/heap.h>
5-
#include <kernel/memory.h>
6-
#include <ui/game_window.h>
5+
#include <app.h>
76

87
void Game_PlaySound(const char* pName)
98
{
109
if (EmbeddedPlayer::s_isActive)
1110
{
1211
EmbeddedPlayer::Play(pName);
1312
}
13+
else
14+
{
15+
Game_PlaySound("system", pName);
16+
}
17+
}
18+
19+
void Game_PlaySound(const char* pBankName, const char* pName)
20+
{
21+
auto pBankNameGuest = g_userHeap.Alloc(strlen(pBankName) + 1);
22+
auto pNameGuest = g_userHeap.Alloc(strlen(pName) + 1);
23+
24+
strcpy((char*)pBankNameGuest, pBankName);
25+
strcpy((char*)pNameGuest, pName);
26+
27+
GuestToHostFunction<int>(sub_824C7868, App::s_pApp->m_pDoc->m_pRootTask.get(), pBankNameGuest, pNameGuest);
1428

15-
// TODO: support in-game sounds (see sub_824C7868).
16-
// else
17-
// {
18-
// // Use EVENT category in cutscenes since SYSTEM gets muted by the game.
19-
// uint32_t category = !InspirePatches::s_sceneName.empty() ? 10 : 7;
20-
//
21-
// guest_stack_var<boost::anonymous_shared_ptr> soundPlayer;
22-
// GuestToHostFunction<void>(sub_82B4DF50, soundPlayer.get(), ((be<uint32_t>*)g_memory.Translate(0x83367900))->get(), category, 0, 0);
23-
//
24-
// auto soundPlayerVtable = (be<uint32_t>*)g_memory.Translate(*(be<uint32_t>*)soundPlayer->get());
25-
// uint32_t virtualFunction = *(soundPlayerVtable + 1);
26-
//
27-
// size_t strLen = strlen(pName);
28-
// void *strAllocation = g_userHeap.Alloc(strLen + 1);
29-
// memcpy(strAllocation, pName, strLen + 1);
30-
// GuestToHostFunction<void>(virtualFunction, soundPlayer->get(), strAllocation, 0);
31-
// g_userHeap.Free(strAllocation);
32-
// }
29+
g_userHeap.Free(pBankNameGuest);
30+
g_userHeap.Free(pNameGuest);
3331
}

MarathonRecomp/exports.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
#pragma once
22

33
void Game_PlaySound(const char* pName);
4+
void Game_PlaySound(const char* pBankName, const char* pName);

MarathonRecomp/gpu/imgui/imgui_font_builder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ static bool FontBuilder_Build(ImFontAtlas* atlas)
223223
double spaceAdvance = 0.0;
224224

225225
auto& config = atlas->ConfigData[i];
226-
bool increaseSpacing = strstr(config.Name, "Seurat") != nullptr;
226+
bool increaseSpacing = strstr(config.Name, "Rodin") != nullptr;
227227

228228
auto& [index, count] = ranges[i];
229229
for (size_t j = 0; j < count; j++)
@@ -238,7 +238,7 @@ static bool FontBuilder_Build(ImFontAtlas* atlas)
238238
{
239239
if (increaseSpacing)
240240
{
241-
advance *= 1.5;
241+
advance *= 1.75;
242242
}
243243

244244
spaceAdvance = advance;

MarathonRecomp/gpu/video.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2809,8 +2809,8 @@ static void DrawImGui()
28092809
// OptionsMenu::Draw();
28102810
AchievementOverlay::Draw();
28112811
InstallerWizard::Draw();
2812-
MessageWindow::Draw();
28132812
ButtonGuide::Draw();
2813+
MessageWindow::Draw();
28142814
Fader::Draw();
28152815
BlackBar::Draw();
28162816

MarathonRecomp/locale/locale.cpp

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -525,36 +525,36 @@ std::unordered_map<std::string_view, std::unordered_map<ELanguage, std::string>>
525525
// Notes: message appears when user chooses "Quit" on the first available installation screen.
526526
"Installer_Message_Quit",
527527
{
528-
{ ELanguage::English, "Are you sure you want to quit?" },
529-
{ ELanguage::Japanese, "[終了:しゅうりょう]してもよろしいですか?" },
530-
{ ELanguage::German, "Installation verlassen?" },
531-
{ ELanguage::French, "Êtes-vous sûr de vouloir quitter ?" },
532-
{ ELanguage::Spanish, "¿Estás seguro de que quieres\nsalir?" },
533-
{ ELanguage::Italian, "Sicuro di voler uscire?" }
528+
{ ELanguage::English, "Exit the installer.\nOK?" },
529+
{ ELanguage::Japanese, "" },
530+
{ ELanguage::German, "" },
531+
{ ELanguage::French, "" },
532+
{ ELanguage::Spanish, "" },
533+
{ ELanguage::Italian, "" }
534534
}
535535
},
536536
{
537537
// Notes: message appears when user chooses "Cancel" during installation.
538538
"Installer_Message_Cancel",
539539
{
540-
{ ELanguage::English, "Are you sure you want to cancel the installation?" },
541-
{ ELanguage::Japanese, "インストールをキャンセルしてもよろしいですか?" },
542-
{ ELanguage::German, "Bist du dir sicher, dass du die Installation abbrechen möchtest?" },
543-
{ ELanguage::French, "Êtes-vous sûr de vouloir annuler l'installation ?" },
544-
{ ELanguage::Spanish, "¿Estás seguro de que quieres cancelar la instalación?" },
545-
{ ELanguage::Italian, "Sicuro di voler annullare l'installazione?" }
540+
{ ELanguage::English, "Cancel the installation.\nOK?" },
541+
{ ELanguage::Japanese, "" },
542+
{ ELanguage::German, "" },
543+
{ ELanguage::French, "" },
544+
{ ELanguage::Spanish, "" },
545+
{ ELanguage::Italian, "" }
546546
}
547547
},
548548
{
549549
// Notes: message appears when pressing B at the title screen.
550550
"Title_Message_Quit",
551551
{
552-
{ ELanguage::English, "Are you sure you want to quit?" },
553-
{ ELanguage::Japanese, "[終了:しゅうりょう]してもよろしいですか?" },
554-
{ ELanguage::German, "Spiel verlassen?" },
555-
{ ELanguage::French, "Êtes-vous sûr de vouloir quitter ?" },
556-
{ ELanguage::Spanish, "¿Estás seguro de que quieres\nsalir?" },
557-
{ ELanguage::Italian, "Sicuro di voler uscire ?" }
552+
{ ELanguage::English, "Exit the game.\nOK?" },
553+
{ ELanguage::Japanese, "" },
554+
{ ELanguage::German, "" },
555+
{ ELanguage::French, "" },
556+
{ ELanguage::Spanish, "" },
557+
{ ELanguage::Italian, "" }
558558
}
559559
},
560560
{
@@ -663,6 +663,17 @@ std::unordered_map<std::string_view, std::unordered_map<ELanguage, std::string>>
663663
{ ELanguage::Italian, "La verifica dei file d'installazione non è andata a buon fine.\n\nErrore: %s\n\nIl gioco si chiuderà. Prova a reinstallare il gioco utilizzando l'argomento di avvio --install." }
664664
}
665665
},
666+
{
667+
"Common_OK",
668+
{
669+
{ ELanguage::English, "OK" },
670+
{ ELanguage::Japanese, "OK" },
671+
{ ELanguage::German, "OK" },
672+
{ ELanguage::French, "OK" },
673+
{ ELanguage::Spanish, "OK" },
674+
{ ELanguage::Italian, "OK" }
675+
}
676+
},
666677
{
667678
"Common_On",
668679
{

MarathonRecomp/patches/SaveDataTask_patches.cpp

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -46,29 +46,3 @@ void SaveAlertThreeOptionRemoveDeviceSelect(PPCRegister& r5)
4646
// second index for the three option alert windows.
4747
options[2] = 0;
4848
}
49-
50-
// Load system message.
51-
PPC_FUNC_IMPL(__imp__sub_825ECB48);
52-
PPC_FUNC(sub_825ECB48)
53-
{
54-
auto* pMessage = (const char*)(base + ctx.r5.u32);
55-
void* pNewMessage = nullptr;
56-
57-
if (strcmp(pMessage, "msg_deviceselect") == 0)
58-
{
59-
constexpr const char* MSG_RETRY = "msg_retry";
60-
61-
pNewMessage = g_userHeap.Alloc(strlen(MSG_RETRY) + 1);
62-
63-
strcpy((char*)pNewMessage, MSG_RETRY);
64-
65-
ctx.r5.u32 = g_memory.MapVirtual(pNewMessage);
66-
}
67-
68-
__imp__sub_825ECB48(ctx, base);
69-
70-
if (!pNewMessage)
71-
return;
72-
73-
g_userHeap.Free(pNewMessage);
74-
}

0 commit comments

Comments
 (0)