Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

padmgr and related #71

Merged
merged 20 commits into from
Apr 14, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Changed names and it stopped matching
  • Loading branch information
silv3rwing07 committed Apr 13, 2020
commit 8ea631942c8360283f7be75816ae865459a70814
10 changes: 5 additions & 5 deletions asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ glabel PadMgr_RumbleControl
/* B3E680 800C74E0 0C00084C */ jal osSyncPrintf
/* B3E684 800C74E4 248458CC */ addiu $a0, %lo(D_801458CC) # addiu $a0, $a0, 0x58cc
/* B3E688 800C74E8 02402025 */ move $a0, $s2
/* B3E68C 800C74EC 0C0401E0 */ jal osSetVibration
/* B3E68C 800C74EC 0C0401E0 */ jal osSetRumble
/* B3E690 800C74F0 02C02825 */ move $a1, $s6
/* B3E694 800C74F4 10400010 */ beqz $v0, .L800C7538
/* B3E698 800C74F8 240D0003 */ li $t5, 3
Expand Down Expand Up @@ -257,7 +257,7 @@ glabel PadMgr_RumbleControl
/* B3E734 800C7594 0C00084C */ jal osSyncPrintf
/* B3E738 800C7598 24845944 */ addiu $a0, %lo(D_80145944) # addiu $a0, $a0, 0x5944
/* B3E73C 800C759C 02402025 */ move $a0, $s2
/* B3E740 800C75A0 0C0401E0 */ jal osSetVibration
/* B3E740 800C75A0 0C0401E0 */ jal osSetRumble
/* B3E744 800C75A4 00002825 */ move $a1, $zero
/* B3E748 800C75A8 1040000F */ beqz $v0, .L800C75E8
/* B3E74C 800C75AC 3C048014 */ lui $a0, %hi(D_80145948) # $a0, 0x8014
Expand Down Expand Up @@ -344,18 +344,18 @@ glabel PadMgr_RumbleControl
/* B3E87C 800C76DC 028E9021 */ addu $s2, $s4, $t6
/* B3E880 800C76E0 265202BC */ addiu $s2, $s2, 0x2bc
/* B3E884 800C76E4 02402825 */ move $a1, $s2
/* B3E888 800C76E8 0C04027D */ jal osProbeVibrationPack
/* B3E888 800C76E8 0C04027D */ jal osProbeRumblePak
/* B3E88C 800C76EC 00403025 */ move $a2, $v0
/* B3E890 800C76F0 14400018 */ bnez $v0, .L800C7754
/* B3E894 800C76F4 2401000B */ li $at, 11
/* B3E898 800C76F8 240F0001 */ li $t7, 1
/* B3E89C 800C76FC 0293C021 */ addu $t8, $s4, $s3
/* B3E8A0 800C7700 A30F02AE */ sb $t7, 0x2ae($t8)
/* B3E8A4 800C7704 02402025 */ move $a0, $s2
/* B3E8A8 800C7708 0C0401E0 */ jal osSetVibration
/* B3E8A8 800C7708 0C0401E0 */ jal osSetRumble
/* B3E8AC 800C770C 24050001 */ li $a1, 1
/* B3E8B0 800C7710 02402025 */ move $a0, $s2
/* B3E8B4 800C7714 0C0401E0 */ jal osSetVibration
/* B3E8B4 800C7714 0C0401E0 */ jal osSetRumble
/* B3E8B8 800C7718 00002825 */ move $a1, $zero
/* B3E8BC 800C771C 3C048014 */ lui $a0, %hi(D_80145A28) # $a0, 0x8014
/* B3E8C0 800C7720 0C00084C */ jal osSyncPrintf
Expand Down
4 changes: 2 additions & 2 deletions include/functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -2334,9 +2334,9 @@ s16 sins(u16);
// ? func_801004C0(?);
// ? func_801005CC(?);
// ? func_80100734(?);
// s32 osSetVibration(unk_controller_t *arg0, u32 vibrate);
// s32 osSetRumble(unk_controller_t *arg0, u32 vibrate);
// void osSetUpMempakWrite(s32 ctrlridx, pif_data_buffer_t* buf);
// s32 osProbeVibrationPack(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx);
// s32 osProbeRumblePak(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx);
// void __osSiCreateAccessQueue();
// void __osSiGetAccess();
// void __osSiRelAccess();
Expand Down
4 changes: 2 additions & 2 deletions include/ultra64/controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@ extern u32 gOsContInitialized; // = 0
extern OSMesgQueue _osContMesgQueue;
extern OSMesg _osContMesgBuff[4];

extern s32 osSetVibration(unk_controller_t *arg0, u32 vibrate);
extern s32 osSetRumble(unk_controller_t *arg0, u32 vibrate);
extern void osSetUpMempakWrite(s32 ctrlridx, pif_data_buffer_t* buf);
extern s32 osProbeVibrationPack(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx);
extern s32 osProbeRumblePak(OSMesgQueue* ctrlrqueue, unk_controller_t *unk_controller, u32 ctrlridx);
extern void __osSiCreateAccessQueue();
extern void __osSiGetAccess();
extern void __osSiRelAccess();
Expand Down
2 changes: 1 addition & 1 deletion spec
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ beginseg
include "build/data/code_80100290.data.o"
include "build/data/code_80100290.rodata.o"
include "build/data/code_80100290.bss.o"
include "build/src/libultra_code/osVibrationPack.o"
include "build/src/libultra_code/osRumblePak.o"
include "build/src/libultra_code/__osSiCreateAccessQueue.o"
include "build/src/libultra_code/osContInit.o"
include "build/src/libultra_code/osContStartReadData.o"
Expand Down
117 changes: 58 additions & 59 deletions src/code/padmgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
#include <padmgr.h>

/*
Absent: padmgr_force_stop_ON padmgr.o
Absent: padmgr_force_stop_OFF padmgr.o
padmgr_PakConnectCheck padmgr.o
padmgr_HandleDoneReadPadMsg padmgr.o
padmgr_ConnectCheck padmgr.o
Absent: padmgr_RequestPadData_NonLock padmgr.o
Absent: padmgr_ClearPadData padmgr.o
Absent: padmgr_Create padmgr.o
Absent: padmgr_isConnectedController padmgr.o
Absent: padmgr_force_stop_ON padmgr.o
Absent: padmgr_force_stop_OFF padmgr.o
padmgr_PakConnectCheck padmgr.o
padmgr_HandleDoneReadPadMsg padmgr.o
padmgr_ConnectCheck padmgr.o
Absent: padmgr_RequestPadData_NonLock padmgr.o
Absent: padmgr_ClearPadData padmgr.o
Absent: padmgr_Create padmgr.o
Absent: padmgr_isConnectedController padmgr.o
*/
silv3rwing07 marked this conversation as resolved.
Show resolved Hide resolved

s32 D_8012D280 = 1;
Expand Down Expand Up @@ -90,7 +90,7 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック ぶるぶるぶるぶる");
osSyncPrintf(VT_RST);

if (osSetVibration(&padmgr->unk_controller[i], temp) != 0) {
if (osSetRumble(&padmgr->unk_controller[i], temp) != 0) {
padmgr->pakType[i] = 0;
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました");
Expand All @@ -107,7 +107,7 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止");
osSyncPrintf(VT_RST);

if (osSetVibration(&padmgr->unk_controller[i], 0) != 0) {
if (osSetRumble(&padmgr->unk_controller[i], 0) != 0) {
padmgr->pakType[i] = 0;
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました");
Expand Down Expand Up @@ -142,13 +142,14 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
if (!triedRumbleComm) {
ctrlr = D_8016A4F0 % 4;

if ((padmgr->ctrlrIsConnected[ctrlr] != 0) && (padmgr->pad_status[ctrlr].status & 1) && (padmgr->pakType[ctrlr] != 1)) {
var4 = osProbeVibrationPack(ctrlrqueue, &padmgr->unk_controller[ctrlr], ctrlr);
if ((padmgr->ctrlrIsConnected[ctrlr] != 0) && (padmgr->pad_status[ctrlr].status & 1) &&
(padmgr->pakType[ctrlr] != 1)) {
var4 = osProbeRumblePak(ctrlrqueue, &padmgr->unk_controller[ctrlr], ctrlr);

if (var4 == 0) {
padmgr->pakType[ctrlr] = 1;
osSetVibration(&padmgr->unk_controller[ctrlr], 1);
osSetVibration(&padmgr->unk_controller[ctrlr], 0);
osSetRumble(&padmgr->unk_controller[ctrlr], 1);
osSetRumble(&padmgr->unk_controller[ctrlr], 0);
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("padmgr: %dコン: %s\n", ctrlr + 1, "振動パックを認識しました");
osSyncPrintf(VT_RST);
Expand All @@ -167,29 +168,28 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrqueue);
}
#else
u32 D_8012D284 = 0; //errcnt
u32 D_8012D284 = 0; // errcnt
u32 D_8016A4F0;
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s")
#endif


//func_800A2300 in 1.0
void PadMgr_RumbleStop(PadMgr* padmgr){
// func_800A2300 in 1.0
void PadMgr_RumbleStop(PadMgr* padmgr) {
s32 i;
OSMesgQueue* ctrlrqueue;

ctrlrqueue = PadMgr_LockSerialMesgQueue(padmgr);

for (i = 0; i < 4; i++) {
if (osProbeVibrationPack(ctrlrqueue, &padmgr->unk_controller[i], i) == 0) {
if (osProbeRumblePak(ctrlrqueue, &padmgr->unk_controller[i], i) == 0) {
if ((gFaultStruct.msgId == 0) && (padmgr->rumbleOnFrames != 0)) {
osSyncPrintf(VT_FGCOL(YELLOW));
// EUC-JP: コン | 'Con'? , EUC-JP: 振動パック 停止 | Stop vibration pack
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止");
osSyncPrintf(VT_RST);
}

osSetVibration(&padmgr->unk_controller[i], 0);
osSetRumble(&padmgr->unk_controller[i], 0);
}
}

Expand All @@ -206,10 +206,9 @@ void PadMgr_RumbleSetSingle(PadMgr* padmgr, u32 ctrlr, u32 rumble) {
}

// 800A23CC in 1.0
void PadMgr_RumbleSet(PadMgr* padmgr, u8* ctrlr_rumbles)
{
void PadMgr_RumbleSet(PadMgr* padmgr, u8* ctrlr_rumbles) {
silv3rwing07 marked this conversation as resolved.
Show resolved Hide resolved
s32 i;
for(i=0; i<4; ++i){
for (i = 0; i < 4; ++i) {
padmgr->rumbleEnable[i] = ctrlr_rumbles[i];
}
padmgr->rumbleOnFrames = 0xF0;
Expand Down Expand Up @@ -296,50 +295,50 @@ void PadMgr_ProcessInputs(PadMgr* padmgr) {
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_ProcessInputs.s")
#endif

void PadMgr_HandleRetraceMsg(PadMgr *padmgr) {
OSMesgQueue *queue; //s1
void PadMgr_HandleRetraceMsg(PadMgr* padmgr) {
OSMesgQueue* queue; // s1
u32 i;
u32 mask;

queue = PadMgr_LockSerialMesgQueue(padmgr);
osContStartReadData(queue);
if (padmgr->retraceCallback){
if (padmgr->retraceCallback) {
padmgr->retraceCallback(padmgr, padmgr->retraceCallbackValue);
}
osRecvMesg(queue, NULL, OS_MESG_BLOCK);
osContGetReadData(&padmgr->pads[0]);
if (padmgr->preNMIShutdown){
if (padmgr->preNMIShutdown) {
bzero(&padmgr->pads[0], 0x18);
}
PadMgr_ProcessInputs(padmgr);
func_80103210(queue);
osRecvMesg(queue, NULL, OS_MESG_BLOCK);
func_8010328C(padmgr);
PadMgr_UnlockSerialMesgQueue(padmgr, queue);
mask = 0; //s2
for(i=0; i-4!=0; ++i){ //s1
if(padmgr->pad_status[i].errno == 0){
if(padmgr->pad_status[i].type - 5 == 0){

mask = 0; // s2
for (i = 0; i - 4 != 0; ++i) { // s1
silv3rwing07 marked this conversation as resolved.
Show resolved Hide resolved
if (padmgr->pad_status[i].errno == 0) {
if (padmgr->pad_status[i].type - 5 == 0) {
mask |= 1 << i;
}else{
} else {
LogUtils_LogThreadId("../padmgr.c", 0x1ca);
osSyncPrintf("this->pad_status[i].type = %x\n", padmgr->pad_status[i].type);
//EUC-JP: 知らない種類のコントローラが接続されています | An unknown type of controller is connected
// EUC-JP: 知らない種類のコントローラが接続されています | An unknown type of controller is connected
osSyncPrintf("知らない種類のコントローラが接続されています\n");
}
}
}
padmgr->validCtrlrsMask = mask;
if (gFaultStruct.msgId){

if (gFaultStruct.msgId) {
PadMgr_RumbleStop(padmgr);
}else if (padmgr->rumbleOffFrames > 0){
} else if (padmgr->rumbleOffFrames > 0) {
--padmgr->rumbleOffFrames;
PadMgr_RumbleStop(padmgr);
}else if (padmgr->rumbleOnFrames == 0){
} else if (padmgr->rumbleOnFrames == 0) {
PadMgr_RumbleStop(padmgr);
}else if (!padmgr->preNMIShutdown){
} else if (!padmgr->preNMIShutdown) {
PadMgr_RumbleControl(padmgr);
--padmgr->rumbleOnFrames;
}
Expand All @@ -352,29 +351,30 @@ void PadMgr_HandlePreNMI(PadMgr* padmgr) {
}

#ifdef NON_MATCHING
//Regalloc differences
void PadMgr_RequestPadData(PadMgr *padmgr, Input *inputs, s32 mode)
{
// Regalloc differences
void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode) {
u32 i;
Input *pm_inputs;
Input *newin;
Input* pm_inputs;
silv3rwing07 marked this conversation as resolved.
Show resolved Hide resolved
Input* newin;

PadMgr_LockPadData(padmgr);
pm_inputs = padmgr->inputs;
newin = inputs;
for(i=0; i<4; ++i){
if(mode){
for (i = 0; i < 4; ++i) {
if (mode) {
*newin = *pm_inputs;
pm_inputs->pressed_diff.input.button = 0;
pm_inputs->pressed_diff.input.x = 0;
pm_inputs->pressed_diff.input.y = 0;
pm_inputs->released_adj.input.button = 0;
}else{
//Correct instructions, wrong regalloc
} else {
// Correct instructions, wrong regalloc
newin->prev = newin->current;
newin->current = pm_inputs->current;
newin->pressed_diff.input.button = newin->current.input.button & (newin->prev.input.button ^ newin->current.input.button);
newin->released_adj.input.button = newin->prev.input.button & (newin->prev.input.button ^ newin->current.input.button);
newin->pressed_diff.input.button =
newin->current.input.button & (newin->prev.input.button ^ newin->current.input.button);
newin->released_adj.input.button =
newin->prev.input.button & (newin->prev.input.button ^ newin->current.input.button);
func_800FCC6C(newin);
newin->pressed_diff.input.x = (newin->current.input.x - newin->prev.input.x) + newin->pressed_diff.input.x;
newin->pressed_diff.input.y = (newin->current.input.y - newin->prev.input.y) + newin->pressed_diff.input.y;
Expand All @@ -388,7 +388,7 @@ void PadMgr_RequestPadData(PadMgr *padmgr, Input *inputs, s32 mode)
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RequestPadData.s")
#endif

//800A2918 in 1.0
// 800A2918 in 1.0
void PadMgr_MainProc(PadMgr* padmgr) {
s16* mesg;
s32 exit;
Expand All @@ -398,7 +398,7 @@ void PadMgr_MainProc(PadMgr* padmgr) {
osSyncPrintf("コントローラスレッド実行開始\n");
exit = 0;

while (!exit){
while (!exit) {
if ((D_8012D280 > 2) && (padmgr->queue3.validCount == 0)) {
// EUC-JP: コントローラスレッドイベント待ち | Waiting for controller thread event
osSyncPrintf("コントローラスレッドイベント待ち %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
Expand All @@ -407,18 +407,18 @@ void PadMgr_MainProc(PadMgr* padmgr) {
osRecvMesg(&padmgr->queue3, &mesg, OS_MESG_BLOCK);
LogUtils_CheckNullPointer("msg", mesg, "../padmgr.c", 563);

switch (*mesg){
switch (*mesg) {
case OS_SC_RETRACE_MSG:
if (D_8012D280 > 2) {
osSyncPrintf("padmgr_HandleRetraceMsg START %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
}

PadMgr_HandleRetraceMsg(padmgr);

if (D_8012D280 > 2) {
osSyncPrintf("padmgr_HandleRetraceMsg END %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
}

break;
case OS_SC_PRE_NMI_MSG:
PadMgr_HandlePreNMI(padmgr);
Expand All @@ -434,9 +434,8 @@ void PadMgr_MainProc(PadMgr* padmgr) {
osSyncPrintf("コントローラスレッド実行終了\n");
}

//func_800A2A14 in 1.0
void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* ctrlrqueue, UNK_TYPE arg2, OSId id, OSPri priority, void* stack)
{
// func_800A2A14 in 1.0
void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* ctrlrqueue, UNK_TYPE arg2, OSId id, OSPri priority, void* stack) {
// EUC-JP: パッドマネージャ作成 | Create pad manager
osSyncPrintf("パッドマネージャ作成 padmgr_Create()\n");
bzero(padmgr, sizeof(PadMgr));
Expand Down
10 changes: 7 additions & 3 deletions src/code/z_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,12 @@ void func_8006390C(Input* input) {

regGroup = (gGameInfo->regGroup * REG_PAGES + gGameInfo->regPage) * REG_PER_PAGE - REG_PER_PAGE;
dpad = input->current.input.button & (U_JPAD | L_JPAD | R_JPAD | D_JPAD);
if (!~(input->current.input.button | ~L_TRIG) || !~(input->current.input.button | ~R_TRIG) || !~(input->current.input.button | ~START_BUTTON)) {
if (!~(input->current.input.button | ~L_TRIG) || !~(input->current.input.button | ~R_TRIG) ||
!~(input->current.input.button | ~START_BUTTON)) {
input_combo = inputCombos;
for (i = 0; i < REG_GROUPS; i++) {
if (~(~input_combo->push | input->current.input.button) || ~(~input_combo->held | input->pressed_diff.input.button)) {
if (~(~input_combo->push | input->current.input.button) ||
~(~input_combo->held | input->pressed_diff.input.button)) {
input_combo++;
} else {
break;
Expand Down Expand Up @@ -157,7 +159,9 @@ void func_8006390C(Input* input) {
increment = (dpad & R_JPAD)
? (!~(input->current.input.button | ~(A_BUTTON | B_BUTTON))
? 1000
: !~(input->current.input.button | ~A_BUTTON) ? 100 : !~(input->current.input.button | ~B_BUTTON) ? 10 : 1)
: !~(input->current.input.button | ~A_BUTTON)
? 100
: !~(input->current.input.button | ~B_BUTTON) ? 10 : 1)
: (dpad & L_JPAD) ? (!~(input->current.input.button | ~(A_BUTTON | B_BUTTON))
? -1000
: !~(input->current.input.button | ~A_BUTTON)
Expand Down
10 changes: 6 additions & 4 deletions src/code/z_demo.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,15 @@ void func_80064558(GlobalContext* globalCtx, CutsceneContext* csCtx) {
void func_800645A0(GlobalContext* globalCtx, CutsceneContext* csCtx) {
Input* pad1 = &globalCtx->state.input[0];

if (!~(pad1->pressed_diff.input.button | ~L_JPAD) && (csCtx->state == CS_STATE_IDLE) && (gSaveContext.scene_setup_index >= 4)) {
if (!~(pad1->pressed_diff.input.button | ~L_JPAD) && (csCtx->state == CS_STATE_IDLE) &&
(gSaveContext.scene_setup_index >= 4)) {
D_8015FCC8 = 0;
gSaveContext.cutscene_index = 0xFFFD;
gSaveContext.cutscene_trigger = 1;
}

if (!~(pad1->pressed_diff.input.button | ~U_JPAD) && (csCtx->state == CS_STATE_IDLE) && (gSaveContext.scene_setup_index >= 4) &&
(D_8011D394 == 0)) {
if (!~(pad1->pressed_diff.input.button | ~U_JPAD) && (csCtx->state == CS_STATE_IDLE) &&
(gSaveContext.scene_setup_index >= 4) && (D_8011D394 == 0)) {
D_8015FCC8 = 1;
gSaveContext.cutscene_index = 0xFFFD;
gSaveContext.cutscene_trigger = 1;
Expand Down Expand Up @@ -443,7 +444,8 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt

if ((gSaveContext.game_mode != 0) && (gSaveContext.game_mode != 3) && (globalCtx->sceneNum != SCENE_SPOT00) &&
(csCtx->frames > 20) &&
(!~(globalCtx->state.input[0].pressed_diff.input.button | ~A_BUTTON) || !~(globalCtx->state.input[0].pressed_diff.input.button | ~B_BUTTON) ||
(!~(globalCtx->state.input[0].pressed_diff.input.button | ~A_BUTTON) ||
!~(globalCtx->state.input[0].pressed_diff.input.button | ~B_BUTTON) ||
!~(globalCtx->state.input[0].pressed_diff.input.button | ~START_BUTTON)) &&
silv3rwing07 marked this conversation as resolved.
Show resolved Hide resolved
(gSaveContext.file_num != 0xFEDC) && (globalCtx->sceneLoadFlag == 0)) {
Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
Expand Down
Loading