Skip to content

Commit 49970d5

Browse files
bodyprog: sd splits
1 parent 37200c5 commit 49970d5

File tree

5 files changed

+585
-377
lines changed

5 files changed

+585
-377
lines changed

configs/USA/bodyprog.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ segments:
6969
- [0x69C, .rodata, bodyprog_800348C0]
7070
- [0x91C, .rodata, bodyprog_8003AB28]
7171
- [0x1094, .rodata, libsd/bodyprog_80045A7C]
72-
- [0x11C4, .rodata, libsd/bodyprog_CD_80047D50]
72+
- [0x119C, .rodata, libsd/bodyprog_VAB_80047B24]
73+
- [0x11DC, .rodata, libsd/bodyprog_800485D8]
7374
- [0x1208, .rodata, gfx/text_draw]
7475
- [0x1330, .rodata, items/item_screens_1]
7576
- [0x1350, .rodata, items/item_screens_2]
@@ -116,7 +117,8 @@ segments:
116117
- [0x1B4EC, c, view/vc_util]
117118
- [0x1BF04, c, bodyprog_80040A64]
118119
- [0x20F1C, c, libsd/bodyprog_80045A7C]
119-
- [0x231F0, c, libsd/bodyprog_CD_80047D50]
120+
- [0x22FC4, c, libsd/bodyprog_VAB_80047B24]
121+
- [0x23A78, c, libsd/bodyprog_800485D8]
120122
- [0x23ED8, c, view/vw_main]
121123
- [0x243C8, c, view/vw_calc] # Contains part of SH2's `vb_main`?
122124
- [0x25D1C, c, gfx/text_draw]
@@ -306,7 +308,7 @@ segments:
306308
- [0x84238, .data, bodyprog_800A8D98]
307309
- [0x84ECC, .data, syswork_functable]
308310
- [0x84F2C, .data, bodyprog_8003AB28]
309-
- [0x85468, .data, libsd/bodyprog_CD_80047D50]
311+
- [0x85468, .data, libsd/bodyprog_VAB_80047B24]
310312
- [0x85A80, .data, libsd/bodyprog_80045A7C]
311313
- [0x88920, .data, view/vw_calc]
312314
- [0x88938, .data, gfx/text_draw]

src/bodyprog/libsd/bodyprog_80045A7C.c

Lines changed: 4 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ void func_80046B78(void) // 0x80046B78
653653
D_800C1658.field_E = 0;
654654
}
655655

656-
static u8 g_Sd_ReverbDepths[36] = {
656+
u8 g_Sd_ReverbDepths[36] = {
657657
20, 10, 40, 40, 60, 60, 60, 20,
658658
20, 20, 40, 40, 60, 60, 60, 60,
659659
40, 20, 20, 60, 60, 120, 20, 10,
@@ -662,7 +662,7 @@ static u8 g_Sd_ReverbDepths[36] = {
662662
};
663663

664664
// Sound volumes?
665-
static u8 D_800AA604[41][16] = {
665+
u8 D_800AA604[41][16] = {
666666
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
667667
{ 0, 1, 2, 3, 4, 5, 5, 6, 0, 0, 0, 1, 1, 1, 0, 0 },
668668
{ 0, 2, 2, 2, 0, 4, 3, 6, 6, 5, 6, 1, 1, 1, 0, 0 },
@@ -763,7 +763,7 @@ void func_80046C54(u8 arg0, u8 arg1) // 0x80046C54
763763
}
764764
}
765765

766-
static s_XaItemData g_XaItemData[727] = {
766+
s_XaItemData g_XaItemData[727] = {
767767
{ 0, 0, 0, 0, 0, 0, 0, 0 },
768768
{ 1, 0, 0, 0, 0, 0, 362, 1 },
769769
{ 1, 0, 0, 0, 1, 1, 295, 1 },
@@ -2331,99 +2331,4 @@ void Sd_SetReverbEnable(s32 mode) // 0x80047AFC
23312331
SdSetSerialAttr(0, 1, mode);
23322332
}
23332333

2334-
void func_80047B24(s32 arg0) // 0x80047B24
2335-
{
2336-
if (D_800C1658.xaAudioIdx_4 != 0)
2337-
{
2338-
Sd_CmdPoolAdd(2);
2339-
}
2340-
2341-
D_800C37D0 = 0;
2342-
Sd_CmdPoolAdd(arg0);
2343-
D_800C1658.isVabLoading_15 = true;
2344-
}
2345-
2346-
void func_80047B80(void) // 0x80047B80
2347-
{
2348-
u8 depth;
2349-
u8 cmd;
2350-
2351-
switch (g_Sd_AudioStreamingStates.vabLoadState_0)
2352-
{
2353-
case 0:
2354-
cmd = g_Sd_CmdPool[0];
2355-
D_800C37D4 = &D_800A986C[cmd];
2356-
D_800C37C8 = D_800C37D4->field_0;
2357-
2358-
if (D_800C37C8)
2359-
{
2360-
if (D_800C1658.field_8[D_800C37C8 - 1] == cmd)
2361-
{
2362-
g_Sd_AudioStreamingStates.vabLoadState_0 = 0;
2363-
D_800C1658.isVabLoading_15 = false;
2364-
Sd_CmdPoolUpdate();
2365-
break;
2366-
}
2367-
2368-
D_800C1658.field_8[D_800C37C8 - 1] = cmd;
2369-
}
2370-
2371-
if (cmd >= 170 && cmd <= 204)
2372-
{
2373-
depth = g_Sd_ReverbDepths[cmd - 170];
2374-
if (depth != g_Sd_ReverbDepth)
2375-
{
2376-
Sd_SetReverbDepth(depth);
2377-
}
2378-
}
2379-
2380-
g_Sd_AudioStreamingStates.vabLoadState_0 = 1;
2381-
break;
2382-
2383-
case 1:
2384-
func_80047D1C();
2385-
break;
2386-
2387-
case 2:
2388-
func_80047D50();
2389-
break;
2390-
2391-
case 3:
2392-
func_80047DB0();
2393-
break;
2394-
2395-
case 4:
2396-
func_80047E3C();
2397-
break;
2398-
2399-
case 5:
2400-
func_80047F18();
2401-
break;
2402-
2403-
case 6:
2404-
func_80048000();
2405-
break;
2406-
2407-
case 7:
2408-
func_8004807C();
2409-
break;
2410-
2411-
case 8:
2412-
func_800480FC();
2413-
break;
2414-
2415-
case 9:
2416-
func_800481F8();
2417-
break;
2418-
2419-
default:
2420-
break;
2421-
}
2422-
}
2423-
2424-
void func_80047D1C(void) // 0x80047D1C
2425-
{
2426-
D_800C37CC = 0;
2427-
SdVabClose(D_800C37C8);
2428-
g_Sd_AudioStreamingStates.vabLoadState_0 = 2;
2429-
}
2334+
const s32 rodataPad_80025CF8 = 0;
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
#include "game.h"
2+
3+
#include <libcd.h>
4+
#include <libetc.h>
5+
6+
#include "bodyprog/bodyprog.h"
7+
#include "bodyprog/libsd.h"
8+
#include "bodyprog/math/math.h"
9+
#include "main/fsqueue.h"
10+
11+
#define CD_ERROR_LIMIT 600 // Matches value used in beatmania `FSCD.C`.
12+
13+
//const s32 g_rodataPad_80025D38 = 0;
14+
15+
void Sd_CmdPoolExecute(void) // 0x800485D8
16+
{
17+
g_Sd_CurrentCmd = g_Sd_CmdPool[0];
18+
switch (g_Sd_CurrentCmd)
19+
{
20+
case 0:
21+
break;
22+
23+
case 1:
24+
Sd_XaAudioPlay();
25+
break;
26+
27+
case 2:
28+
Sd_XaAudioStop();
29+
break;
30+
31+
case 6:
32+
Sd_XaPreLoadAudioInit();
33+
break;
34+
35+
case 7:
36+
func_80046A70();
37+
break;
38+
39+
case 8:
40+
func_80046B04();
41+
break;
42+
43+
default:
44+
if (g_Sd_CurrentCmd >= 160)
45+
{
46+
func_80047B80();
47+
}
48+
else if (g_Sd_CurrentCmd >= 32)
49+
{
50+
func_800482D8();
51+
}
52+
else
53+
{
54+
Sd_CmdPoolUpdate();
55+
}
56+
break;
57+
}
58+
59+
if (D_800C1658.xaAudioIdx_4 != 0)
60+
{
61+
D_800C1688.field_4 = VSync(SyncMode_Count) - D_800C1688.field_8;
62+
}
63+
64+
if (D_800C1658.bgmFadeSpeed_14 != 0)
65+
{
66+
D_800C1658.field_E = NO_VALUE;
67+
68+
if (g_Sd_ChannelsVolume.volumeBgm_8 <= 0)
69+
{
70+
g_Sd_ChannelsVolume.volumeBgm_8 = 0;
71+
func_80046B78();
72+
}
73+
else
74+
{
75+
g_Sd_ChannelsVolume.volumeBgm_8 -= D_800C1658.bgmFadeSpeed_14;
76+
77+
if ((g_Sd_ChannelsVolume.volumeBgm_8 << 16) <= 0)
78+
{
79+
g_Sd_ChannelsVolume.volumeBgm_8 = 0;
80+
func_80046B78();
81+
}
82+
}
83+
84+
g_Sd_ChannelsVolume.volumeBgm_6 = g_Sd_ChannelsVolume.volumeBgm_8;
85+
86+
Sd_SetVolBgm(g_Sd_ChannelsVolume.volumeBgm_8, g_Sd_ChannelsVolume.volumeBgm_8);
87+
}
88+
else if (g_Sd_ChannelsVolume.volumeBgm_6 != g_Sd_ChannelsVolume.volumeBgm_8)
89+
{
90+
if (g_Sd_ChannelsVolume.volumeBgm_8 < g_Sd_ChannelsVolume.volumeBgm_6)
91+
{
92+
g_Sd_ChannelsVolume.volumeBgm_8++;
93+
if (ABS(g_Sd_ChannelsVolume.volumeBgm_8 - g_Sd_ChannelsVolume.volumeBgm_6) < 2)
94+
{
95+
g_Sd_ChannelsVolume.volumeBgm_8 = g_Sd_ChannelsVolume.volumeBgm_6;
96+
}
97+
}
98+
else
99+
{
100+
g_Sd_ChannelsVolume.volumeBgm_8--;
101+
if (ABS(g_Sd_ChannelsVolume.volumeBgm_8 - g_Sd_ChannelsVolume.volumeBgm_6) < 2)
102+
{
103+
g_Sd_ChannelsVolume.volumeBgm_8 = g_Sd_ChannelsVolume.volumeBgm_6;
104+
}
105+
}
106+
107+
Sd_SetVolBgm(g_Sd_ChannelsVolume.volumeBgm_8, g_Sd_ChannelsVolume.volumeBgm_8);
108+
}
109+
110+
if ((u32)D_800C1688.field_4 > (u32)D_800C1688.field_0)
111+
{
112+
if (g_Sd_CurrentCmd == 0)
113+
{
114+
if (D_800C1658.isXaLoading_16 == false)
115+
{
116+
Sd_CmdPoolAdd(2);
117+
}
118+
119+
D_800C1688.field_8 = VSync(SyncMode_Count);
120+
D_800C1688.field_4 = 0;
121+
}
122+
}
123+
124+
if (D_800C1658.muteGame_17 == true)
125+
{
126+
if (g_Sd_ChannelsVolume.volumeGlobal_A > 0)
127+
{
128+
g_Sd_ChannelsVolume.volumeGlobal_A -= 8;
129+
if ((g_Sd_ChannelsVolume.volumeGlobal_A << 16) <= 0)
130+
{
131+
g_Sd_ChannelsVolume.volumeGlobal_A = 0;
132+
}
133+
134+
SdSetMVol(g_Sd_ChannelsVolume.volumeGlobal_A, g_Sd_ChannelsVolume.volumeGlobal_A);
135+
}
136+
}
137+
else
138+
{
139+
if (g_Sd_ChannelsVolume.volumeGlobal_A < (OPT_SOUND_VOLUME_MAX - 1))
140+
{
141+
g_Sd_ChannelsVolume.volumeGlobal_A += 4;
142+
if (g_Sd_ChannelsVolume.volumeGlobal_A >= (OPT_SOUND_VOLUME_MAX - 1))
143+
{
144+
g_Sd_ChannelsVolume.volumeGlobal_A = OPT_SOUND_VOLUME_MAX - 1;
145+
}
146+
147+
SdSetMVol(g_Sd_ChannelsVolume.volumeGlobal_A, g_Sd_ChannelsVolume.volumeGlobal_A);
148+
}
149+
}
150+
151+
if (D_800C1658.cdErrorCount_0 > CD_ERROR_LIMIT)
152+
{
153+
CdReset(0);
154+
CdControlB(CdlNop, NULL, NULL);
155+
if (g_Sd_AudioStreamingStates.vabLoadState_0 != 0)
156+
{
157+
g_Sd_AudioStreamingStates.vabLoadState_0 = 1;
158+
}
159+
160+
g_Sd_AudioStreamingStates.xaLoadState_1 = 0;
161+
g_Sd_AudioStreamingStates.xaStopState_2 = 0;
162+
g_Sd_AudioStreamingStates.xaPreLoadState_3 = 0;
163+
D_800C1658.cdErrorCount_0 = 0;
164+
}
165+
}
166+
167+
u8 Sd_CdPrimitiveCmdTry(s32 com, u8* param, u8* res) // 0x80048954
168+
{
169+
u8 syncRes;
170+
u8 comCopy;
171+
172+
comCopy = com;
173+
174+
if (CdSync(1, &syncRes) == CdlComplete && CdControl(comCopy, param, res))
175+
{
176+
D_800C1658.cdErrorCount_0 = 0;
177+
return false;
178+
}
179+
180+
D_800C1658.cdErrorCount_0++;
181+
182+
if (D_800C1658.cdErrorCount_0 > CD_ERROR_LIMIT)
183+
{
184+
CdReset(0);
185+
CdControlB(CdlNop, NULL, NULL);
186+
VSync(SyncMode_Wait3);
187+
188+
if (g_Sd_AudioStreamingStates.vabLoadState_0 != 0)
189+
{
190+
g_Sd_AudioStreamingStates.vabLoadState_0 = 1;
191+
}
192+
193+
g_Sd_AudioStreamingStates.xaLoadState_1 = 0;
194+
g_Sd_AudioStreamingStates.xaStopState_2 = 0;
195+
g_Sd_AudioStreamingStates.xaPreLoadState_3 = 0;
196+
D_800C1658.cdErrorCount_0 = 0;
197+
}
198+
199+
return true;
200+
}
201+
202+
const s32 unused_Rodata_80025D60[2] = { 0x6A375A00, 0x892FBD00 }; // Unused.

0 commit comments

Comments
 (0)