diff --git a/README.md b/README.md index 4ac66261..89511745 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (90.6686%) +# banjo (90.6988%) diff --git a/include/structs.h b/include/structs.h index 309ca36c..d20daf36 100644 --- a/include/structs.h +++ b/include/structs.h @@ -896,4 +896,12 @@ typedef struct{ // u8 pad16[2]; void *unk18; }struct86s; + +typedef struct { + s32 unk0; //sound state cnt + s32 unk4; + s32 unk8; //maxSounds + ALHeap *unkC; //heap + u16 unk10; +}Struct87s; #endif diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg index 14f9e1c7..a49b97e7 100644 --- a/progress/progress_core1.svg +++ b/progress/progress_core1.svg @@ -17,7 +17,7 @@ core1 - 81.5990% - 81.5990% + 81.8075% + 81.8075% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 7637f8aa..b0e0956d 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 90.6686% - 90.6686% + 90.6988% + 90.6988% \ No newline at end of file diff --git a/src/core1/code_3A70.c b/src/core1/code_3A70.c index 1c1efd5a..cb04f4f2 100644 --- a/src/core1/code_3A70.c +++ b/src/core1/code_3A70.c @@ -1,12 +1,17 @@ #include #include "functions.h" #include "variables.h" -#include "n_libaudio.h" -void func_802444C0(N_AL_Struct81s *arg0); -void func_80244050(ALEventQueue *arg0, N_AL_Struct81s *arg1, u16 arg2); - -extern Gfx D_80275880[]; +Gfx D_80275880[] = { + gsSPClearGeometryMode(G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0060CD00), + gsSPTexture(0, 0, 0, G_TX_RENDERTILE, G_OFF), + gsDPPipeSync(), + gsDPPipelineMode(G_PM_1PRIMITIVE), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetCycleType(G_CYC_1CYCLE), + gsDPSetRenderMode(G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2), + gsSPEndDisplayList() +}; extern f64 D_80277650; extern f64 D_80277658; @@ -167,459 +172,4 @@ void func_802424D4(Gfx **gfx, Mtx **mtx, Vtx **vtx, f32 arg3[3], f32 arg4[3], f3 #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_3A70/func_80242BE8.s") // BREAK???=== -extern struct{ - N_AL_Struct81s *unk0; - N_AL_Struct81s *unk4; - N_AL_Struct81s *unk8; -}D_802758C0; -extern N_ALSndPlayer *D_802758CC; -extern s32 D_802758D0; -extern s16 D_802758D4; - -extern ALEventUnknown; - -u8 pad_8027EEC0[0x54]; -u16 *D_8027EF14; -extern struct { - u8 pad0[4]; - s32 volume[3]; -}D_8027EF18; - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_3A70/func_80243070.s") -// void func_80243070(void *arg0) { - // s16 sp40; - // ALLink *temp_a0; - // s32 var_s1; - // s32 var_v0; - // u32 var_s0; - // u32 var_s0_2; - // void *temp_s0; - // void *temp_s0_2; - // void *temp_s0_3; - - // D_802758CC->maxSounds = (s32) arg0->unk8; - // D_802758CC->target = NULL; - // D_802758CC->frameTime = 33000; - // ; - // D_802758CC->sndState = alHeapDBAlloc(NULL, 0, arg0->unkC, 1, arg0->unk0 * sizeof(N_AL_Struct81s)); - // alEvtqNew(&D_802758CC->evtq, alHeapDBAlloc(NULL, 0, arg0->unkC, 1, arg0->unk4 * 0x1C), arg0->unk4); - // // var_s0 = 1; - // // var_s1 = 0x50; - // D_802758C0.unk8 = D_802758CC->sndState; - // if ((u32) arg0->unk0 >= 2U) { - // do { - // temp_a0 = var_s1 + D_802758CC->unk40; - // alLink(temp_a0, temp_a0 - 0x50); - // var_s0 += 1; - // var_s1 += 0x50; - // } while (var_s0 < (u32) arg0->unk0); - // } - // D_8027EF14 = alHeapDBAlloc(NULL, 0, arg0->unkC, 2, (s32) arg0->unk10); - // var_v0 = 0; - // var_s0_2 = 0; - // if (arg0->unk10 != 0) { - // do { - // var_s0_2 += 1; - // *(D_8027EF14 + var_v0) = 0x7FFF; - // var_v0 += 2; - // } while (var_s0_2 < (u16) arg0->unk10); - // } - // D_802758CC->unk0 = 0; - // D_802758CC->unk8 = &func_8024324C; - // temp_s0 = D_802758CC; - // temp_s0->unk4 = temp_s0; - // n_alSynAddSndPlayer(D_802758CC); - // temp_s0_2 = D_802758CC; - // sp40 = 0x20; - // alEvtqPostEvent(temp_s0_2 + 0x14, (ALEvent *) &sp40, temp_s0_2->unk48); - // temp_s0_3 = D_802758CC; - // D_802758CC->unk4C = alEvtqNextEvent(temp_s0_3 + 0x14, temp_s0_3 + 0x28); -// } - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_3A70/func_8024324C.s") -#else -void func_8024324C(N_ALSndPlayer *arg0) { - N_ALEvent sp3C; - - do { - if (arg0->nextEvent.type == 0x20) { - sp3C.type = 0x20; - alEvtqPostEvent(&arg0->evtq, (ALEvent *) &sp3C, arg0->frameTime); - func_80244190(arg0); - } else { - func_802432F8(arg0, &arg0->nextEvent); - } - arg0->nextDelta = alEvtqNextEvent(&arg0->evtq, &arg0->nextEvent); - } while (arg0->nextDelta == 0); - arg0->curTime += arg0->nextDelta; -} -#endif - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_3A70/func_802432F8.s") - -void func_80243F84(N_AL_Struct81s *arg0) { - if (arg0->unk3F & 4) { - n_alSynStopVoice(&arg0->voice); - n_alSynFreeVoice(&arg0->voice); - } - func_802444C0(arg0); - func_80244050(&D_802758CC->evtq, arg0, 0xFFFF); -} - -void func_80243FE4(N_AL_Struct81s *arg0) { - ALEvent evt; - f32 sp1C; - - sp1C = alCents2Ratio(arg0->unk8->keyMap->detune)* arg0->unk2C; - evt.type = 0x10; - evt.msg.unk3A70.unk0 = arg0; - evt.msg.unk3A70.unk4 = reinterpret_cast(s32, sp1C); - alEvtqPostEvent(&D_802758CC->evtq, &evt, 33333); -} - -void func_80244050(ALEventQueue *arg0, N_AL_Struct81s *arg1, u16 arg2) { - s32 pad[5]; - u32 mask; - ALEventListItem *next_event_list; - ALEventListItem *event_list; - - mask = osSetIntMask(OS_IM_NONE); - for(event_list = (ALEventListItem *)arg0->allocList.next; event_list != NULL; event_list = next_event_list) { - next_event_list = (ALEventListItem *)event_list->node.next; - if ((arg1 == event_list->evt.msg.unk3A70.unk0) && (reinterpret_cast(u16, event_list->evt.type) & arg2)) { - if (next_event_list != NULL) { - next_event_list->delta += event_list->delta; - } - alUnlink((ALLink *)event_list); - alLink((ALLink *)event_list, (ALLink *)arg0); - } - } - osSetIntMask(mask); -} - -s32 func_80244110(u16 *arg0, u16 *arg1) { - N_AL_Struct81s *var_v0; - N_AL_Struct81s *var_v1_2; - N_AL_Struct81s *var_a2; - u16 var_a0; - u16 var_a3; - u16 var_v1; - - var_v0 = D_802758C0.unk0; - var_v1_2 = D_802758C0.unk8; - var_a2 = D_802758C0.unk4; - - for(var_a3 = 0; var_v0 != NULL; var_a3++){ - var_v0 = (N_AL_Struct81s *) var_v0->node.next; - } - - - for(var_a0 = 0; var_v1_2 != NULL; var_a0++) { - var_v1_2 = (N_AL_Struct81s *) var_v1_2->node.next; - } - - for(var_v1 = 0; var_a2 != NULL; var_v1++) { - var_a2 = (N_AL_Struct81s *) var_a2->node.prev; - } - - *arg0 = var_a0; - *arg1 = var_a3; - return var_v1; -} - - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_3A70/func_80244190.s") -#else -void func_80244190(N_AL_Struct81s *arg0) { - ALMicroTime *temp_a1; - s32 prev_volume; - s32 temp_t1; - s32 temp_t5; - s32 var_t0; - ALMicroTime var_t1; - u8 temp_t6; - u8 var_a2; - ALEnvelope *envelope; - N_AL_Struct81s *var_v0; - N_AL_Struct81s *var_v1; - - for(var_v0 = D_802758C0.unk0; var_v0 != NULL; var_v0 = (N_AL_Struct81s *)var_v0->node.next){ - var_v1 = var_v0; - envelope = var_v0->unk8->envelope; - temp_a1 = &envelope->attackTime; - D_8027EF18.volume[AL_PHASE_ATTACK] = (s32) envelope->attackVolume; - D_8027EF18.volume[AL_PHASE_DECAY] = (s32) envelope->decayVolume; - while( var_v0->envPhase < AL_PHASE_RELEASE - && var_v0->unk48 >= temp_a1[var_v0->envPhase] - && temp_a1[var_v0->envPhase] != -1 - ){ - var_v0->unk48 -= temp_a1[var_v0->envPhase]; - var_v0->envPhase++; - } - - if (var_v0->envPhase < AL_PHASE_RELEASE) { - if (temp_a1[var_v1->envPhase] != -1) { - var_v0->unk44 = D_8027EF18.volume[var_v0->envPhase - 1] + ((s32) ((D_8027EF18.volume[var_v0->envPhase] - D_8027EF18.volume[var_v0->envPhase - 1]) * var_v0->unk48) / temp_a1[var_v0->envPhase]); - } else { - var_v0->unk44 = D_8027EF18.volume[var_v0->envPhase - 1]; // - } - } - var_v0->unk48 += arg0->unk48; - } -} -#endif - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_3A70/func_8024431C.s") -#else -N_AL_Struct81s *func_8024431C(ALBank *bank, ALSound *sound) { - s32 pad; - ALKeyMap *sp30; - N_AL_Struct81s *temp_s0; - OSIntMask mask; - s32 sp24; - - temp_s0 = D_802758C0.unk8; - sp30 = sound->keyMap; - if (temp_s0 != NULL) { - mask = osSetIntMask(OS_IM_NONE); - D_802758C0.unk8 = (N_AL_Struct81s *) temp_s0->unk0.next; - alUnlink((ALLink *)temp_s0); - if (D_802758C0.unk0 != NULL) { - temp_s0->unk0.next = D_802758C0.unk0; - temp_s0->unk0.prev = NULL; - D_802758C0.unk0->unk0.prev = temp_s0; - D_802758C0.unk0 = temp_s0; - } else { - temp_s0->unk0.prev = NULL; - temp_s0->unk0.next = NULL; - D_802758C0.unk0 = temp_s0; - D_802758C0.unk4 = temp_s0; - } - osSetIntMask(mask); - sp24 = ((sound->envelope->decayTime + 1) == 0) + 0x40; - temp_s0->unk36 = sp24; - temp_s0->unk40 = 5; - temp_s0->unk38 = 2; - temp_s0->unk8 = sound; - temp_s0->unk2C = 1.0f; - temp_s0->unk3F = sp30->keyMax & 0xF0; - temp_s0->unk30 = 0; - temp_s0->envPhase = AL_PHASE_ATTACK; - temp_s0->unk44 = 0.0f; - temp_s0->unk48 = 0; - if (temp_s0->unk3F & 0x20) { - temp_s0->unk28 = alCents2Ratio((sp30->keyBase * 0x64) - 0x1770); - } else { - temp_s0->unk28 = alCents2Ratio(((sp30->keyBase * 0x64) + sp30->detune) - 0x1770); - } - if (sp24 != 0x40) { - temp_s0->unk3F |= 2; - } - temp_s0->unk3E = 0; - temp_s0->unk3D = 0x40; - temp_s0->unk34 = 0x7FFF; - } - return temp_s0; -} -#endif - -void func_802444C0(N_AL_Struct81s *arg0){ - N_AL_Struct81s *var_v0; - - sizeof(ALVoice); - - var_v0 = D_802758C0.unk0; - if(arg0 == D_802758C0.unk0){ - D_802758C0.unk0 = (N_AL_Struct81s *)arg0->node.next; - } - - if(arg0 == D_802758C0.unk4){ - D_802758C0.unk4 = (N_AL_Struct81s *)arg0->node.prev; - } - - alUnlink((ALLink *)arg0); - - if(D_802758C0.unk8 != NULL){ - arg0->node.next = (ALLink *)D_802758C0.unk8; - arg0->node.prev = NULL; - D_802758C0.unk8->node.prev = (ALLink *)arg0; - D_802758C0.unk8 = arg0; - } - else{ - arg0->node.prev = NULL; - arg0->node.next = NULL; - D_802758C0.unk8 = arg0; - } - - if(arg0->unk3F & 0x4){ - D_802758D4--; - } - - arg0->unk40 = 0; - if(arg0->unk30 != NULL){ - if(*arg0->unk30 == arg0){ - *arg0->unk30 = NULL; - } - arg0->unk30 = NULL; - } -} - -void func_80244594(N_AL_Struct81s *arg0, u8 arg1){ - if(arg0 != NULL) - arg0->unk36 = arg1; -} - -s32 func_802445AC(N_AL_Struct81s *arg0){ - if(arg0 != NULL) - return arg0->unk40; - return 0; -} - -bool func_802445C4(ALBank *bank, s16 arg1){ - ALSound *snd = bank->instArray[0]->soundArray[arg1-1]; - if (snd->envelope->decayTime == -1) - return TRUE; - else - return FALSE; -} - -void *func_80244608(ALBank *bank, s16 arg1, struct46s *arg2) { - ALKeyMap *temp_v0_2; - ALSound *temp_s2; - N_AL_Struct81s *temp_v0; - s32 var_s3; - s16 sp6E; - s32 sp68; - s32 var_s4; - N_AL_Struct81s *var_fp; - ALEvent sp50; - ALEvent sp40; - - var_fp = NULL; - sp6E = 0; - var_s3 = 0; - if (arg1 == 0) { - return NULL; - } - - do{ - temp_s2 = bank->instArray[0]->soundArray[arg1-1]; - temp_v0 = func_8024431C(bank, temp_s2); - if (temp_v0 != NULL) { - temp_v0->unk4C = (s32) (arg1 - 1); - D_802758CC->target = temp_v0; - sp50.type = AL_SEQ_MIDI_EVT; - ((s32 *)&sp50.msg)[0] = temp_v0; - var_s4 = temp_s2->keyMap->velocityMax * 0x8235; - if (temp_v0->unk3F & 0x10) { - temp_v0->unk3F &= ~(0x10); - alEvtqPostEvent(&D_802758CC->evtq, (ALEvent *) &sp50, var_s3 + 1); - sp68 = var_s4 + 1; - sp6E = arg1; - } else { - alEvtqPostEvent(&D_802758CC->evtq, (ALEvent *) &sp50, var_s4 + 1); - } - var_fp = temp_v0; - } - temp_v0_2 = temp_s2->keyMap; - var_s3 += var_s4; - arg1 = temp_v0_2->velocityMin + ((temp_v0_2->keyMin & 0xC0) * 4); - } while (arg1 != 0 && temp_v0 != NULL); - - if (var_fp != NULL) { - var_fp->unk3F |= 1; - var_fp->unk30 = arg2; - if (sp6E != 0) { - var_fp->unk3F |= 0x10; - sp40.type = 0x200; - ((s32 *)&sp40.msg)[0] = var_fp; - ((s32 *)&sp40.msg)[1] = sp6E; - ((s32 *)&sp40.msg)[2] = bank; - alEvtqPostEvent(&D_802758CC->evtq, &sp40, sp68); - } - } - if (arg2 != NULL) { - arg2->unk0 = (s32) var_fp; - } - return var_fp; -} - -void func_80244814(N_AL_Struct81s *arg0){ - ALEvent evt; - - evt.type = 0x400; - ((s32 *)&evt.msg)[0] = arg0; - if(arg0 != NULL){ - arg0->unk3F &= ~(0x10); - alEvtqPostEvent(&D_802758CC->evtq, &evt, 0); - } -} - -void func_80244860(u8 arg0) { - OSIntMask mask; - ALEvent evt; - N_AL_Struct81s *var_s0; - - mask = osSetIntMask(1U); - for(var_s0 = D_802758C0.unk0; var_s0 != NULL; var_s0 = (N_AL_Struct81s *)var_s0->node.next){ - evt.type = 0x400; - ((s32 *)&evt.msg)[0] = (s32)var_s0; - if ((var_s0->unk3F & arg0) == arg0) { - var_s0->unk3F &= ~(0x10); - alEvtqPostEvent(&D_802758CC->evtq, &evt, 0); - } - } - osSetIntMask(mask); -} - -void func_80244918(void){ - func_80244860(1); -} - -void func_80244938(void){ - func_80244860(0x11); -} - -void func_80244958(void){ - func_80244860(3); -} - -void func_80244978(s32 arg0, s16 type, s32 arg2){ - ALEvent sp18; - if(arg0){ - sp18.type = type; - ((s32 *)&sp18.msg)[0] = arg0; - ((s32 *)&sp18.msg)[1] = arg2; - - alEvtqPostEvent(&D_802758CC->evtq, &sp18, 0); - } -} - -s32 func_802449C4(u8 arg0){ - return D_8027EF14[arg0]; -} - -void func_802449E4(u8 arg0, u16 arg1) { - N_AL_Struct81s *var_s0; - s32 pad30; - ALEvent evt; - - var_s0 = D_802758C0.unk0; - D_8027EF14[arg0] = arg1; - while(var_s0 != NULL){ - if ((var_s0->unk8->keyMap->keyMin & 0x3F) == arg0) { - evt.type = 0x800; - ((s32 *)&evt.msg)[0] = var_s0; - alEvtqPostEvent(&D_802758CC->evtq, &evt, 0); - } - var_s0 = (N_AL_Struct81s *)var_s0->node.next; - } -} - -void func_80244A98(s32 arg0){ - D_802758D0 = arg0; -} diff --git a/src/core1/code_5650.c b/src/core1/code_5650.c new file mode 100644 index 00000000..f5464670 --- /dev/null +++ b/src/core1/code_5650.c @@ -0,0 +1,448 @@ +#include +#include "functions.h" +#include "variables.h" +#include "n_libaudio.h" + +void func_802444C0(N_AL_Struct81s *arg0); +void func_80244050(ALEventQueue *arg0, N_AL_Struct81s *arg1, u16 arg2); + + + +void func_8024324C(N_ALSndPlayer *arg0); + +// extern ALEventUnknown; +/* .bss */ +N_ALSndPlayer D_8027EEC0; +u16 *D_8027EF14; +extern struct { + u8 pad0[4]; + s32 volume[3]; +}D_8027EF18; + +/* .data */ +extern struct{ + N_AL_Struct81s *unk0; + N_AL_Struct81s *unk4; + N_AL_Struct81s *unk8; +}D_802758C0 = {NULL, NULL, NULL}; +extern N_ALSndPlayer *D_802758CC = &D_8027EEC0; +extern s32 D_802758D0 = 1; +extern s16 D_802758D4 = 0; + +/* .code */ +void func_80243070(Struct87s *arg0) { + N_AL_Struct81s *temp_a0; + N_AL_Struct81s *var_v0; + ALEvent sp40; + u32 var_s0; + + D_802758CC->maxSounds = (s32) arg0->unk8; + D_802758CC->target = NULL; + D_802758CC->frameTime = 33000; + D_802758CC->sndState = alHeapDBAlloc(NULL, 0, arg0->unkC, 1, arg0->unk0 * sizeof(N_AL_Struct81s)); + alEvtqNew(&D_802758CC->evtq, alHeapDBAlloc(NULL, 0, arg0->unkC, 1, arg0->unk4 * 0x1C), arg0->unk4); + D_802758C0.unk8 = D_802758CC->sndState; + for(var_s0 = 1; var_s0 < arg0->unk0; var_s0++){ + var_v0 = (N_AL_Struct81s *)D_802758CC->sndState; + temp_a0 = var_s0 + var_v0; + alLink((ALLink *)temp_a0, (ALLink*)(temp_a0 - 1)); + } + D_8027EF14 = alHeapDBAlloc(NULL, 0, arg0->unkC, 2, (s32) arg0->unk10); + for(var_s0 = 0; var_s0 < arg0->unk10; var_s0++){ + D_8027EF14[var_s0] = 0x7FFF; + } + D_802758CC->node.next = NULL; + D_802758CC->node.handler = (ALVoiceHandler)func_8024324C; + D_802758CC->node.clientData = D_802758CC; + n_alSynAddSndPlayer(D_802758CC); + sp40.type = 0x20; + alEvtqPostEvent(&D_802758CC->evtq, &sp40, D_802758CC->frameTime); + D_802758CC->nextDelta = alEvtqNextEvent(&D_802758CC->evtq, &D_802758CC->nextEvent); +} + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_5650/func_8024324C.s") +#else +void func_8024324C(N_ALSndPlayer *arg0) { + N_ALEvent sp3C; + + do { + if (arg0->nextEvent.type == 0x20) { + sp3C.type = 0x20; + alEvtqPostEvent(&arg0->evtq, (ALEvent *) &sp3C, arg0->frameTime); + func_80244190(arg0); + } else { + func_802432F8(arg0, &arg0->nextEvent); + } + arg0->nextDelta = alEvtqNextEvent(&arg0->evtq, &arg0->nextEvent); + } while (arg0->nextDelta == 0); + arg0->curTime += arg0->nextDelta; +} +#endif + +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_5650/func_802432F8.s") + +void func_80243F84(N_AL_Struct81s *arg0) { + if (arg0->unk3F & 4) { + n_alSynStopVoice(&arg0->voice); + n_alSynFreeVoice(&arg0->voice); + } + func_802444C0(arg0); + func_80244050(&D_802758CC->evtq, arg0, 0xFFFF); +} + +void func_80243FE4(N_AL_Struct81s *arg0) { + ALEvent evt; + f32 sp1C; + + sp1C = alCents2Ratio(arg0->unk8->keyMap->detune)* arg0->unk2C; + evt.type = 0x10; + evt.msg.unk3A70.unk0 = arg0; + evt.msg.unk3A70.unk4 = reinterpret_cast(s32, sp1C); + alEvtqPostEvent(&D_802758CC->evtq, &evt, 33333); +} + +void func_80244050(ALEventQueue *arg0, struct struct_81_s *arg1, u16 arg2) { + s32 pad[5]; + u32 mask; + ALEventListItem *next_event_list; + ALEventListItem *event_list; + + mask = osSetIntMask(OS_IM_NONE); + for(event_list = (ALEventListItem *)arg0->allocList.next; event_list != NULL; event_list = next_event_list) { + next_event_list = (ALEventListItem *)event_list->node.next; + if ((arg1 == event_list->evt.msg.unk3A70.unk0) && (reinterpret_cast(u16, event_list->evt.type) & arg2)) { + if (next_event_list != NULL) { + next_event_list->delta += event_list->delta; + } + alUnlink((ALLink *)event_list); + alLink((ALLink *)event_list, (ALLink *)arg0); + } + } + osSetIntMask(mask); +} + +s32 func_80244110(u16 *arg0, u16 *arg1) { + N_AL_Struct81s *var_v0; + N_AL_Struct81s *var_v1_2; + N_AL_Struct81s *var_a2; + u16 var_a0; + u16 var_a3; + u16 var_v1; + + var_v0 = D_802758C0.unk0; + var_v1_2 = D_802758C0.unk8; + var_a2 = D_802758C0.unk4; + + for(var_a3 = 0; var_v0 != NULL; var_a3++){ + var_v0 = (N_AL_Struct81s *) var_v0->node.next; + } + + + for(var_a0 = 0; var_v1_2 != NULL; var_a0++) { + var_v1_2 = (N_AL_Struct81s *) var_v1_2->node.next; + } + + for(var_v1 = 0; var_a2 != NULL; var_v1++) { + var_a2 = (N_AL_Struct81s *) var_a2->node.prev; + } + + *arg0 = var_a0; + *arg1 = var_a3; + return var_v1; +} + + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_5650/func_80244190.s") +#else +void func_80244190(N_AL_Struct81s *arg0) { + ALMicroTime *temp_a1; + s32 prev_volume; + s32 temp_t1; + s32 temp_t5; + s32 var_t0; + ALMicroTime var_t1; + u8 temp_t6; + u8 var_a2; + ALEnvelope *envelope; + N_AL_Struct81s *var_v0; + N_AL_Struct81s *var_v1; + + for(var_v0 = D_802758C0.unk0; var_v0 != NULL; var_v0 = (N_AL_Struct81s *)var_v0->node.next){ + var_v1 = var_v0; + envelope = var_v0->unk8->envelope; + temp_a1 = &envelope->attackTime; + D_8027EF18.volume[AL_PHASE_ATTACK] = (s32) envelope->attackVolume; + D_8027EF18.volume[AL_PHASE_DECAY] = (s32) envelope->decayVolume; + while( var_v0->envPhase < AL_PHASE_RELEASE + && var_v0->unk48 >= temp_a1[var_v0->envPhase] + && temp_a1[var_v0->envPhase] != -1 + ){ + var_v0->unk48 -= temp_a1[var_v0->envPhase]; + var_v0->envPhase++; + } + + if (var_v0->envPhase < AL_PHASE_RELEASE) { + if (temp_a1[var_v1->envPhase] != -1) { + var_v0->unk44 = D_8027EF18.volume[var_v0->envPhase - 1] + ((s32) ((D_8027EF18.volume[var_v0->envPhase] - D_8027EF18.volume[var_v0->envPhase - 1]) * var_v0->unk48) / temp_a1[var_v0->envPhase]); + } else { + var_v0->unk44 = D_8027EF18.volume[var_v0->envPhase - 1]; // + } + } + var_v0->unk48 += arg0->unk48; + } +} +#endif + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_5650/func_8024431C.s") +#else +N_AL_Struct81s *func_8024431C(ALBank *bank, ALSound *sound) { + s32 pad; + ALKeyMap *sp30; + N_AL_Struct81s *temp_s0; + OSIntMask mask; + s32 sp24; + + temp_s0 = D_802758C0.unk8; + sp30 = sound->keyMap; + if (temp_s0 != NULL) { + mask = osSetIntMask(OS_IM_NONE); + D_802758C0.unk8 = (N_AL_Struct81s *) temp_s0->unk0.next; + alUnlink((ALLink *)temp_s0); + if (D_802758C0.unk0 != NULL) { + temp_s0->unk0.next = D_802758C0.unk0; + temp_s0->unk0.prev = NULL; + D_802758C0.unk0->unk0.prev = temp_s0; + D_802758C0.unk0 = temp_s0; + } else { + temp_s0->unk0.prev = NULL; + temp_s0->unk0.next = NULL; + D_802758C0.unk0 = temp_s0; + D_802758C0.unk4 = temp_s0; + } + osSetIntMask(mask); + sp24 = ((sound->envelope->decayTime + 1) == 0) + 0x40; + temp_s0->unk36 = sp24; + temp_s0->unk40 = 5; + temp_s0->unk38 = 2; + temp_s0->unk8 = sound; + temp_s0->unk2C = 1.0f; + temp_s0->unk3F = sp30->keyMax & 0xF0; + temp_s0->unk30 = 0; + temp_s0->envPhase = AL_PHASE_ATTACK; + temp_s0->unk44 = 0.0f; + temp_s0->unk48 = 0; + if (temp_s0->unk3F & 0x20) { + temp_s0->unk28 = alCents2Ratio((sp30->keyBase * 0x64) - 0x1770); + } else { + temp_s0->unk28 = alCents2Ratio(((sp30->keyBase * 0x64) + sp30->detune) - 0x1770); + } + if (sp24 != 0x40) { + temp_s0->unk3F |= 2; + } + temp_s0->unk3E = 0; + temp_s0->unk3D = 0x40; + temp_s0->unk34 = 0x7FFF; + } + return temp_s0; +} +#endif + +void func_802444C0(N_AL_Struct81s *arg0){ + N_AL_Struct81s *var_v0; + + sizeof(ALVoice); + + var_v0 = D_802758C0.unk0; + if(arg0 == D_802758C0.unk0){ + D_802758C0.unk0 = (N_AL_Struct81s *)arg0->node.next; + } + + if(arg0 == D_802758C0.unk4){ + D_802758C0.unk4 = (N_AL_Struct81s *)arg0->node.prev; + } + + alUnlink((ALLink *)arg0); + + if(D_802758C0.unk8 != NULL){ + arg0->node.next = (ALLink *)D_802758C0.unk8; + arg0->node.prev = NULL; + D_802758C0.unk8->node.prev = (ALLink *)arg0; + D_802758C0.unk8 = arg0; + } + else{ + arg0->node.prev = NULL; + arg0->node.next = NULL; + D_802758C0.unk8 = arg0; + } + + if(arg0->unk3F & 0x4){ + D_802758D4--; + } + + arg0->unk40 = 0; + if(arg0->unk30 != NULL){ + if(*arg0->unk30 == arg0){ + *arg0->unk30 = NULL; + } + arg0->unk30 = NULL; + } +} + +void func_80244594(N_AL_Struct81s *arg0, u8 arg1){ + if(arg0 != NULL) + arg0->unk36 = arg1; +} + +s32 func_802445AC(N_AL_Struct81s *arg0){ + if(arg0 != NULL) + return arg0->unk40; + return 0; +} + +bool func_802445C4(ALBank *bank, s16 arg1){ + ALSound *snd = bank->instArray[0]->soundArray[arg1-1]; + if (snd->envelope->decayTime == -1) + return TRUE; + else + return FALSE; +} + +void *func_80244608(ALBank *bank, s16 arg1, struct46s *arg2) { + ALKeyMap *temp_v0_2; + ALSound *temp_s2; + N_AL_Struct81s *temp_v0; + s32 var_s3; + s16 sp6E; + s32 sp68; + s32 var_s4; + N_AL_Struct81s *var_fp; + ALEvent sp50; + ALEvent sp40; + + var_fp = NULL; + sp6E = 0; + var_s3 = 0; + if (arg1 == 0) { + return NULL; + } + + do{ + temp_s2 = bank->instArray[0]->soundArray[arg1-1]; + temp_v0 = func_8024431C(bank, temp_s2); + if (temp_v0 != NULL) { + temp_v0->unk4C = (s32) (arg1 - 1); + D_802758CC->target = temp_v0; + sp50.type = AL_SEQ_MIDI_EVT; + ((s32 *)&sp50.msg)[0] = temp_v0; + var_s4 = temp_s2->keyMap->velocityMax * 0x8235; + if (temp_v0->unk3F & 0x10) { + temp_v0->unk3F &= ~(0x10); + alEvtqPostEvent(&D_802758CC->evtq, (ALEvent *) &sp50, var_s3 + 1); + sp68 = var_s4 + 1; + sp6E = arg1; + } else { + alEvtqPostEvent(&D_802758CC->evtq, (ALEvent *) &sp50, var_s4 + 1); + } + var_fp = temp_v0; + } + temp_v0_2 = temp_s2->keyMap; + var_s3 += var_s4; + arg1 = temp_v0_2->velocityMin + ((temp_v0_2->keyMin & 0xC0) * 4); + } while (arg1 != 0 && temp_v0 != NULL); + + if (var_fp != NULL) { + var_fp->unk3F |= 1; + var_fp->unk30 = arg2; + if (sp6E != 0) { + var_fp->unk3F |= 0x10; + sp40.type = 0x200; + ((s32 *)&sp40.msg)[0] = var_fp; + ((s32 *)&sp40.msg)[1] = sp6E; + ((s32 *)&sp40.msg)[2] = bank; + alEvtqPostEvent(&D_802758CC->evtq, &sp40, sp68); + } + } + if (arg2 != NULL) { + arg2->unk0 = (s32) var_fp; + } + return var_fp; +} + +void func_80244814(N_AL_Struct81s *arg0){ + ALEvent evt; + + evt.type = 0x400; + ((s32 *)&evt.msg)[0] = arg0; + if(arg0 != NULL){ + arg0->unk3F &= ~(0x10); + alEvtqPostEvent(&D_802758CC->evtq, &evt, 0); + } +} + +void func_80244860(u8 arg0) { + OSIntMask mask; + ALEvent evt; + N_AL_Struct81s *var_s0; + + mask = osSetIntMask(1U); + for(var_s0 = D_802758C0.unk0; var_s0 != NULL; var_s0 = (N_AL_Struct81s *)var_s0->node.next){ + evt.type = 0x400; + ((s32 *)&evt.msg)[0] = (s32)var_s0; + if ((var_s0->unk3F & arg0) == arg0) { + var_s0->unk3F &= ~(0x10); + alEvtqPostEvent(&D_802758CC->evtq, &evt, 0); + } + } + osSetIntMask(mask); +} + +void func_80244918(void){ + func_80244860(1); +} + +void func_80244938(void){ + func_80244860(0x11); +} + +void func_80244958(void){ + func_80244860(3); +} + +void func_80244978(s32 arg0, s16 type, s32 arg2){ + ALEvent sp18; + if(arg0){ + sp18.type = type; + ((s32 *)&sp18.msg)[0] = arg0; + ((s32 *)&sp18.msg)[1] = arg2; + + alEvtqPostEvent(&D_802758CC->evtq, &sp18, 0); + } +} + +s32 func_802449C4(u8 arg0){ + return D_8027EF14[arg0]; +} + +void func_802449E4(u8 arg0, u16 arg1) { + N_AL_Struct81s *var_s0; + s32 pad30; + ALEvent evt; + + var_s0 = D_802758C0.unk0; + D_8027EF14[arg0] = arg1; + while(var_s0 != NULL){ + if ((var_s0->unk8->keyMap->keyMin & 0x3F) == arg0) { + evt.type = 0x800; + ((s32 *)&evt.msg)[0] = var_s0; + alEvtqPostEvent(&D_802758CC->evtq, &evt, 0); + } + var_s0 = (N_AL_Struct81s *)var_s0->node.next; + } +} + +void func_80244A98(s32 arg0){ + D_802758D0 = arg0; +} diff --git a/subyaml/core1.us.v10.yaml b/subyaml/core1.us.v10.yaml index 5d41de05..07bb20af 100644 --- a/subyaml/core1.us.v10.yaml +++ b/subyaml/core1.us.v10.yaml @@ -38,6 +38,7 @@ segments: - [0x2FA0, c, code_2FA0] #DONE - [0x31C0, c, code_31C0] - [0x3A70, c, code_3A70] + - [0x5650, c, code_5650] - [0x7090, c, code_7090] #DONE - [0x72B0, c, code_72B0] #DONE - [0x7F60, c, code_7F60] @@ -247,7 +248,9 @@ segments: - [0x37E30, bin, data_37E30] #data Section - [0x37E40, .data, code_2FA0] - [0x37E50, .data, code_31C0] - - [0x37E60, bin, data_37E60] + - [0x37E60, .data, code_3A70] + - [0x37EA0, bin, data_37EA0] # .data, code_5650] + - [0x37EC0, bin, data_37EC0] - [0x37EF0, .data, code_8C50] - [0x38030, bin, data_38030] - [0x381F0, bin, data_381F0] # .data, done/code_CE60] @@ -279,6 +282,7 @@ segments: - [0x39C00, bin, data_39C00] # .rodata, code_1D00] - [0x39C20, .rodata, code_31C0] - [0x39C30, bin, data_39C30] # .rodata, code_3A70] + - [0x39C40, .rodata, code_5650] - [0x39CA0, .rodata, code_72B0] - [0x39CC0, bin, data_39CC0] - [0x39CD0, bin, data_39CD0] # .rodata, code_7F60] @@ -325,7 +329,7 @@ segments: - [0x3c710, .bss, code_2BD0] - [0x3c710, .bss, code_2DA0] - [0x3c710, .bss, code_31C0] - - [0x3c710, .bss, code_3A70] + - [0x3c710, .bss, code_5650] - [0x3c710, .bss, code_7090] - [0x3c710, .bss, code_72B0] - [0x3c710, .bss, code_8C50]