Skip to content

Commit 676078f

Browse files
committed
ModCore: AGameTimeFX Editor
1 parent 4ba8985 commit 676078f

File tree

7 files changed

+239
-12
lines changed

7 files changed

+239
-12
lines changed

SDK/BYModCore/Source/AHooks.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,37 @@ MEMBER_HOOK( 0x006b4a20, TMemory, TMemory_Free, TBOOL, void* a_pMem )
173173
#endif // !TMEMORY_USE_DLMALLOC
174174
}
175175

176+
// Good for debugging memory leaks:
177+
// HOOK( 0x006b5540, TMalloc1, void*, TUINT a_uiSize, TMemory::MemBlock* a_pMemBlock, const char* a_szUnused1, TINT a_iUnused2 )
178+
// {
179+
// TPROFILER_SCOPE();
180+
//
181+
// ( TMemory__FUNC__ = __FUNCSIG__, TMemory__FILE__ = __FILE__, TMemory__LINE__ = (TINT)_ReturnAddress() );
182+
// return CallOriginal( a_uiSize, a_pMemBlock, a_szUnused1, a_iUnused2 );
183+
// }
184+
//
185+
// HOOK( 0x006b5630, TMalloc2, void*, TUINT a_uiSize )
186+
// {
187+
// TPROFILER_SCOPE();
188+
//
189+
// ( TMemory__FUNC__ = __FUNCSIG__, TMemory__FILE__ = __FILE__, TMemory__LINE__ = (TINT)_ReturnAddress() );
190+
// return CallOriginal( a_uiSize );
191+
// }
192+
//
193+
// HOOK( 0x006b5590, TMemAlign1, void*, TUINT a_uiAlignment, TUINT a_uiSize, TMemory::MemBlock* a_pMemBlock )
194+
// {
195+
// TPROFILER_SCOPE();
196+
//
197+
// ( TMemory__FUNC__ = __FUNCSIG__, TMemory__FILE__ = __FILE__, TMemory__LINE__ = (TINT)_ReturnAddress() );
198+
// return CallOriginal( a_uiAlignment, a_uiSize, a_pMemBlock );
199+
// }
200+
//
201+
// HOOK( 0x006b5670, TMemAlign2, void*, TUINT a_uiSize, TUINT a_uiAlignment )
202+
// {
203+
// ( TMemory__FUNC__ = __FUNCSIG__, TMemory__FILE__ = __FILE__, TMemory__LINE__ = (TINT)_ReturnAddress() );
204+
// return CallOriginal( a_uiSize, a_uiAlignment );
205+
// }
206+
176207
MEMBER_HOOK( 0x006b5230, TMemory, TMemory_Alloc, void*, TUINT a_uiSize, TUINT a_uiAlignment, TMemory::MemBlock* a_pMemBlock, const char* a_szUnused1, TINT a_iUnused2 )
177208
{
178209
#ifdef TMEMORY_USE_DLMALLOC
@@ -430,7 +461,7 @@ MEMBER_HOOK( 0x006bb000, TTRB, TTRB_Load, TINT, const char* a_szFileName, TUINT
430461
filepath += pOrigFileName->GetString();
431462
bFound = TTRUE;
432463
break;
433-
}
464+
}
434465
}
435466

436467
if ( bFound ) break;
@@ -791,6 +822,8 @@ MEMBER_HOOK( 0x006d5970, TOrderTable, TOrderTable_Flush, void )
791822

792823
HOOK( 0x006114d0, AModelLoader_AModelLoaderLoadTRBCallback, TBOOL, TModel* a_pModel )
793824
{
825+
TPROFILER_SCOPE();
826+
794827
TBOOL bRes = TFALSE;
795828

796829
for ( TINT i = 0; i < AHooks::ModelLoader::LoadTRBCallback[ HookType_Before ].Size(); i++ )
@@ -1059,6 +1092,11 @@ void AHooks::Initialise()
10591092
InstallHook<ATreeManager_Render>();
10601093
InstallHook<ARegrowthManager_FindObjectShittyWay>();
10611094

1095+
// InstallHook<TMalloc1>();
1096+
// InstallHook<TMalloc2>();
1097+
// InstallHook<TMemAlign1>();
1098+
// InstallHook<TMemAlign2>();
1099+
10621100
#ifdef USE_ATOMIC
10631101
InstallHook<TMutex_Create>();
10641102
InstallHook<TMutex_Destroy>();
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#include "pch.h"
2+
#include "AGameTimeFXEditor.h"
3+
4+
#include "AImGui.h"
5+
6+
//-----------------------------------------------------------------------------
7+
// Enables memory debugging.
8+
// Note: Should be the last include!
9+
//-----------------------------------------------------------------------------
10+
#include <Core/TMemoryDebugOn.h>
11+
12+
TOSHI_NAMESPACE_USING
13+
14+
AGameTimeFXEditor::AGameTimeFXEditor()
15+
: m_ppSettings( TNULL )
16+
, m_iNumSettings( 0 )
17+
, m_bClosed( TFALSE )
18+
{
19+
TUINTPTR pFXManager = *TREINTERPRETCAST( TUINTPTR*, 0x00783d08 );
20+
21+
if ( pFXManager )
22+
{
23+
m_ppSettings = *TREINTERPRETCAST( Settings_TRBHeader***, pFXManager + 0x794 );
24+
m_iNumSettings = *TREINTERPRETCAST( TINT*, pFXManager + 0x79C );
25+
26+
m_bClosed = TTRUE;
27+
}
28+
}
29+
30+
AGameTimeFXEditor::~AGameTimeFXEditor()
31+
{
32+
}
33+
34+
TBOOL AGameTimeFXEditor::Render()
35+
{
36+
if ( !m_ppSettings || m_bClosed ) return !m_bClosed;
37+
38+
ImGui::Begin( "AGameTimeFX Editor", &m_bClosed );
39+
{
40+
if ( ImGui::BeginTabBar( "MyTabBar" ) )
41+
{
42+
if ( ImGui::BeginTabItem( "FX" ) )
43+
{
44+
for ( TINT i = 0; i < m_iNumSettings; i++ )
45+
{
46+
if ( ImGui::CollapsingHeader( m_ppSettings[ i ]->m_pchName ) )
47+
{
48+
49+
#define FIELD1( name ) \
50+
ImGui::Text( #name ); \
51+
ImGui::InputFloat( #name, &( m_ppSettings[ i ]->name ) )
52+
53+
#define FIELD4( name ) \
54+
ImGui::Text( #name ); \
55+
ImGui::InputFloat4( #name, ( (float*)&m_ppSettings[ i ]->name ) )
56+
57+
FIELD4( m_vecLightDir );
58+
FIELD4( field1_0x10 );
59+
FIELD4( m_oShadowColour );
60+
FIELD4( m_oAmbientColour );
61+
FIELD4( m_vecFogColor );
62+
FIELD4( field5_0x50 );
63+
FIELD4( field6_0x60 );
64+
FIELD4( field7_0x70 );
65+
FIELD4( field8_0x80 );
66+
FIELD4( field9_0x90 );
67+
FIELD4( field10_0xa0 );
68+
FIELD4( field11_0xb0 );
69+
FIELD4( field12_0xc0 );
70+
FIELD4( field13_0xd0 );
71+
FIELD4( field14_0xe0 );
72+
FIELD4( field15_0xf0 );
73+
FIELD4( field16_0x100 );
74+
FIELD1( field17_0x110 );
75+
FIELD1( field19_0x118 );
76+
FIELD1( m_fFogStart );
77+
FIELD1( m_fFogEnd );
78+
FIELD1( field22_0x124 );
79+
FIELD1( m_fShadowAmbientProgress );
80+
FIELD1( m_flInstanceShading );
81+
FIELD1( field25_0x130 );
82+
FIELD1( field26_0x134 );
83+
FIELD1( field27_0x138 );
84+
FIELD1( field28_0x13c );
85+
FIELD1( m_fStarsOpacity );
86+
FIELD1( field30_0x144 );
87+
FIELD1( field31_0x148 );
88+
FIELD1( field32_0x14c );
89+
FIELD1( m_fDarkeningFactor );
90+
FIELD1( m_fLightIntensity );
91+
FIELD1( field35_0x158 );
92+
FIELD1( field36_0x15c );
93+
FIELD1( field37_0x160 );
94+
FIELD1( field38_0x164 );
95+
FIELD1( field39_0x168 );
96+
FIELD1( field40_0x16c );
97+
FIELD1( field41_0x170 );
98+
FIELD1( field42_0x174 );
99+
}
100+
}
101+
102+
ImGui::EndTabItem();
103+
}
104+
105+
ImGui::EndTabBar();
106+
}
107+
108+
ImGui::End();
109+
}
110+
111+
return !m_bClosed;
112+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#pragma once
2+
3+
class AGameTimeFXEditor
4+
{
5+
public:
6+
struct Settings_TRBHeader
7+
{
8+
Toshi::TVector4 m_vecLightDir;
9+
Toshi::TVector4 field1_0x10;
10+
Toshi::TVector4 m_oShadowColour;
11+
Toshi::TVector4 m_oAmbientColour;
12+
Toshi::TVector4 m_vecFogColor;
13+
Toshi::TVector4 field5_0x50;
14+
Toshi::TVector4 field6_0x60;
15+
Toshi::TVector4 field7_0x70;
16+
Toshi::TVector4 field8_0x80;
17+
Toshi::TVector4 field9_0x90;
18+
Toshi::TVector4 field10_0xa0;
19+
Toshi::TVector4 field11_0xb0;
20+
Toshi::TVector4 field12_0xc0;
21+
Toshi::TVector4 field13_0xd0;
22+
Toshi::TVector4 field14_0xe0;
23+
Toshi::TVector4 field15_0xf0;
24+
Toshi::TVector4 field16_0x100;
25+
TFLOAT field17_0x110;
26+
TCHAR* m_pchName;
27+
TFLOAT field19_0x118;
28+
TFLOAT m_fFogStart;
29+
TFLOAT m_fFogEnd;
30+
TFLOAT field22_0x124;
31+
TFLOAT m_fShadowAmbientProgress;
32+
TFLOAT m_flInstanceShading;
33+
TFLOAT field25_0x130;
34+
TFLOAT field26_0x134;
35+
TFLOAT field27_0x138;
36+
TFLOAT field28_0x13c;
37+
TFLOAT m_fStarsOpacity;
38+
TFLOAT field30_0x144;
39+
TFLOAT field31_0x148;
40+
TFLOAT field32_0x14c;
41+
TFLOAT m_fDarkeningFactor;
42+
TFLOAT m_fLightIntensity;
43+
TFLOAT field35_0x158;
44+
TFLOAT field36_0x15c;
45+
TFLOAT field37_0x160;
46+
TFLOAT field38_0x164;
47+
TFLOAT field39_0x168;
48+
TFLOAT field40_0x16c;
49+
TFLOAT field41_0x170;
50+
TFLOAT field42_0x174;
51+
};
52+
53+
public:
54+
AGameTimeFXEditor();
55+
~AGameTimeFXEditor();
56+
57+
TBOOL Render();
58+
void SetVisible( TBOOL a_bVisible ) { m_bClosed = !a_bVisible; }
59+
60+
private:
61+
Settings_TRBHeader** m_ppSettings;
62+
TINT m_iNumSettings;
63+
64+
TBOOL m_bClosed;
65+
};

SDK/BYModCore/Source/ImGui/AImGui.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "AImGui.h"
44
#include "AImGuiState.h"
55
#include "ADebugFlyState.h"
6+
#include "AGameTimeFXEditor.h"
67
#include "DXVK/d3d8/d3d8_device.h"
78
#include "imgui_impl_dx8.h"
89
#include "imgui_impl_dx9.h"
@@ -200,6 +201,8 @@ void AImGUI::Toggle()
200201
}
201202
}
202203

204+
static AGameTimeFXEditor* s_pFXEditor = TNULL;
205+
203206
void AImGUI::Render()
204207
{
205208
constexpr TFLOAT WINDOW_MAX_WIDTH = 580;
@@ -271,17 +274,23 @@ void AImGUI::Render()
271274
CALL( 0x00603210, void );
272275
}
273276

274-
if (ImGui::Button("Start New Game (Experimental)"))
277+
if ( ImGui::Button( "FX Editor" ) )
275278
{
276-
Toggle();
277-
//AGameStateController::GetSingleton()->ReplaceState(new AGameState);
278-
*(TUINT*)(0x007817ec) = 1;
279-
CALL_THIS(0x00651a90, void*, void, *(void**)0x007b5ea8);
280-
AGameStateController::GetSingleton()->m_eFlags |= 0x20;
281-
CALL_THIS(0x00429580, AGameStateController*, void, AGameStateController::GetSingleton(), TINT, 0x2002);
282-
//AGameStateController::GetSingleton()->GetCurrentState()->Remove();
279+
if ( !s_pFXEditor ) s_pFXEditor = new AGameTimeFXEditor();
280+
s_pFXEditor->SetVisible( TTRUE );
283281
}
284282

283+
// if (ImGui::Button("Start New Game (Experimental)"))
284+
// {
285+
// Toggle();
286+
// //AGameStateController::GetSingleton()->ReplaceState(new AGameState);
287+
// *(TUINT*)(0x007817ec) = 1;
288+
// CALL_THIS(0x00651a90, void*, void, *(void**)0x007b5ea8);
289+
// AGameStateController::GetSingleton()->m_eFlags |= 0x20;
290+
// CALL_THIS(0x00429580, AGameStateController*, void, AGameStateController::GetSingleton(), TINT, 0x2002);
291+
// //AGameStateController::GetSingleton()->GetCurrentState()->Remove();
292+
// }
293+
285294
//auto pPrevState = AGameStateController::GetSingleton()->GetPreviousState();
286295

287296
//if (pPrevState->IsExactly((TClass*)0x00781b0c))
@@ -396,6 +405,9 @@ void AImGUI::Render()
396405
}
397406

398407
ImGui::End();
408+
409+
// Various windows...
410+
if ( s_pFXEditor ) s_pFXEditor->Render();
399411
}
400412

401413
void AImGUI::RenderOverlay()

SDK/BYardSDK/Source/BYardSDK/AMainThreadJob.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ class AMainThreadJob : public Toshi::T2DList<AMainThreadJob>::Node
1414

1515
TBOOL IsFinished() const { return m_bIsFinished; }
1616

17-
protected:
17+
public:
1818
TBOOL m_bIsFinished = TFALSE;
1919
};

SDK/BYardSDK/Source/BYardSDK/AModelLoaderJob.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class AModelLoaderJob : public ATRBLoaderJob
1212

1313
void InitJob( Toshi::TManagedModel* a_pModelRef, Toshi::TTRB* a_pTRB, const char* a_szFileName, TBOOL a_bCanBeCanceled );
1414

15-
private:
15+
public:
1616
Toshi::TManagedModel* m_pModelRef = TNULL;
1717
Toshi::TModel* m_pModel = TNULL;
1818
TBOOL m_bCanBeCanceled;

SDK/BYardSDK/Source/BYardSDK/ATRBLoaderJob.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ class ATRBLoaderJob : public AMainThreadJob
1313

1414
Toshi::TTRBStreamJob& GetStream() { return m_oStreamJob; }
1515

16-
protected:
16+
public:
1717
Toshi::TTRBStreamJob m_oStreamJob;
1818
};

0 commit comments

Comments
 (0)