Merge pull request #413 from PikalaxALT/voltorb_flip_graphics

Voltorb Flip graphics; NitroGFX LZ extfmt
This commit is contained in:
Adrienn Tindall 2025-12-12 01:10:57 -05:00 committed by GitHub
commit 70905ba8a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
107 changed files with 4335 additions and 4985 deletions

View File

@ -2,4 +2,5 @@
**/*.inc
**/*.json
lib/
tools/nitrogfx/
tools/nitrogfx/*.c
tools/nitrogfx/*.h

View File

@ -94,9 +94,9 @@
.public TextPrinterCheckActive
.public AddTextPrinterParameterized
.public AddTextPrinterParameterizedWithColor
.public sub_02020A0C
.public sub_02020A18
.public sub_02020A24
.public DpadMenuBox_GetPosition
.public DpadMenuBox_GetDimensions
.public DpadMenuBox_GetNeighborInDirection
.public GfGfx_EngineBTogglePlanes
.public TouchscreenHitbox_FindRectAtTouchNew
.public System_GetTouchNew

View File

@ -86,11 +86,11 @@
.public sub_02019B08
.public sub_02019B1C
.public sub_02019B44
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019BE4
.public sub_02019F74
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_NoHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public Heap_Create

View File

@ -130,18 +130,18 @@
.public sub_02019B10
.public sub_02019B1C
.public sub_02019B44
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F74
.public sub_02019F78
.public sub_02019F7C
.public sub_02019F88
.public sub_02019F90
.public sub_02019F94
.public sub_02019FC4
.public sub_02019FD0
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetUnk0F
.public GridInputHandler_SetNextInput
.public GridInputHandler_SetNextLastUnk0FInputs
.public GridInputHandler_IsButtonInputMode
.public GridInputHandler_SetButtonInputMode
.public GridInputHandler_SetAllEnabled
.public GridInputHandler_ClearEnabledFlag
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public Heap_Create
@ -181,7 +181,7 @@
.public ScheduleBgTilemapBufferTransfer
.public ScheduleSetBgPosText
.public AddTextPrinterParameterizedWithColor
.public sub_02020A0C
.public DpadMenuBox_GetPosition
.public sub_020210BC
.public sub_02021148
.public sub_02021238

View File

@ -141,14 +141,14 @@
.public sub_02019B1C
.public sub_02019B44
.public sub_02019B70
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F74
.public sub_02019F7C
.public sub_02019F88
.public sub_02019FD0
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_SetNextInput
.public GridInputHandler_SetNextLastUnk0FInputs
.public GridInputHandler_ClearEnabledFlag
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public SetKeyRepeatTimers
@ -190,7 +190,7 @@
.public ScheduleBgTilemapBufferTransfer
.public ScheduleSetBgPosText
.public AddTextPrinterParameterizedWithColor
.public sub_02020A0C
.public DpadMenuBox_GetPosition
.public sub_020210BC
.public sub_02021148
.public sub_02021238

View File

@ -28,11 +28,11 @@
.public NewMsgDataFromNarc
.public DestroyMsgData
.public NewString_ReadMsgData
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F7C
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_SetNextInput
.public GridInputHandler_GetDpadBox
.public Heap_Create
.public Heap_Destroy
.public InitBgFromTemplate

View File

@ -33,11 +33,11 @@
.public BufferPlayersName
.public BufferIntegerAsString
.public StringExpandPlaceholders
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F74
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetDpadBox
.public Heap_Create
.public Heap_Destroy
.public Heap_Free

View File

@ -55,11 +55,11 @@
.public IsPaletteFadeFinished
.public sub_02014510
.public sub_020145B4
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F74
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public Heap_Create

View File

@ -51,11 +51,11 @@
.public IsPaletteFadeFinished
.public sub_0200FBDC
.public MailMsg_GetExpandedString
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019BE4
.public sub_02019F74
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_NoHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public SetKeyRepeatTimers
@ -78,7 +78,7 @@
.public DoScheduledBgGpuUpdates
.public ScheduleBgTilemapBufferTransfer
.public AddTextPrinterParameterizedWithColor
.public sub_02020A0C
.public DpadMenuBox_GetPosition
.public GfGfx_SetBanks
.public GfGfx_DisableEngineAPlanes
.public GfGfx_EngineATogglePlanes

View File

@ -78,13 +78,13 @@
.public YesNoPrompt_Reset
.public MenuInputStateMgr_GetState
.public MenuInputStateMgr_SetState
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F74
.public sub_02019F7C
.public sub_02019FD0
.public sub_02019FF8
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_SetNextInput
.public GridInputHandler_ClearEnabledFlag
.public GridInputHandler_SetEnabledFlag
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public Heap_Create

View File

@ -86,14 +86,14 @@
.public sub_020196B8
.public sub_020196E8
.public sub_0201980C
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019BE4
.public sub_02019F74
.public sub_02019F7C
.public sub_02019FC4
.public sub_02019FD0
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_NoHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_SetNextInput
.public GridInputHandler_SetAllEnabled
.public GridInputHandler_ClearEnabledFlag
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public Main_SetHBlankIntrCB
.public Heap_Create

View File

@ -92,11 +92,11 @@
.public TouchscreenListMenu_Destroy
.public TouchscreenListMenu_DestroyButtons
.public TouchscreenListMenu_HandleInput
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019BE4
.public sub_02019F74
.public sub_02019F88
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_NoHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_SetNextLastUnk0FInputs
.public Main_SetVBlankIntrCB
.public Main_SetHBlankIntrCB
.public Heap_Create

View File

@ -59,11 +59,11 @@
.public IsPaletteFadeFinished
.public sub_020163E0
.public sub_020164C4
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019BE4
.public sub_02019F74
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_NoHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public Main_SetHBlankIntrCB
.public Heap_Create
@ -89,7 +89,7 @@
.public ScheduleBgTilemapBufferTransfer
.public ScheduleSetBgPosText
.public AddTextPrinterParameterizedWithColor
.public sub_02020A0C
.public DpadMenuBox_GetPosition
.public GfGfx_SetBanks
.public GfGfx_DisableEngineAPlanes
.public GfGfx_EngineATogglePlanes

View File

@ -37,12 +37,12 @@
.public BeginNormalPaletteFade
.public IsPaletteFadeFinished
.public sub_0200FBDC
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019D18
.public sub_02019F74
.public sub_02019F7C
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_SetNextInput
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public SetKeyRepeatTimers
.public Heap_Create
@ -63,7 +63,7 @@
.public FillWindowPixelBuffer
.public DoScheduledBgGpuUpdates
.public ScheduleSetBgPosText
.public sub_02020A0C
.public DpadMenuBox_GetPosition
.public GfGfx_DisableEngineAPlanes
.public GfGfx_EngineATogglePlanes
.public GfGfx_DisableEngineBPlanes

View File

@ -33,20 +33,20 @@
.public sub_02019B1C
.public sub_02019B44
.public sub_02019B70
.public sub_02019BA4
.public sub_02019BDC
.public sub_02019BE4
.public sub_02019D18
.public sub_02019F74
.public sub_02019F78
.public sub_02019F7C
.public sub_02019F88
.public sub_02019F90
.public sub_02019F94
.public sub_02019FC4
.public sub_02019FD0
.public sub_02019FF8
.public sub_0201A018
.public GridInputHandler_Create
.public GridInputHandler_Free
.public GridInputHandler_HandleInput_NoHold
.public GridInputHandler_HandleInput_AllowHold
.public GridInputHandler_GetNextInput
.public GridInputHandler_GetUnk0F
.public GridInputHandler_SetNextInput
.public GridInputHandler_SetNextLastUnk0FInputs
.public GridInputHandler_IsButtonInputMode
.public GridInputHandler_SetButtonInputMode
.public GridInputHandler_SetAllEnabled
.public GridInputHandler_ClearEnabledFlag
.public GridInputHandler_SetEnabledFlag
.public GridInputHandler_GetDpadBox
.public Main_SetVBlankIntrCB
.public HBlankInterruptDisable
.public Sys_ClearSleepDisableFlag
@ -58,7 +58,7 @@
.public CopyToBgTilemapRect
.public FillBgTilemapRect
.public ScheduleBgTilemapBufferTransfer
.public sub_02020A24
.public DpadMenuBox_GetNeighborInDirection
.public GfGfx_DisableEngineAPlanes
.public GfGfx_DisableEngineBPlanes
.public TouchscreenHitbox_TouchNewIsIn

View File

@ -17,9 +17,9 @@
.public sub_02020910
.public sub_020209AC
.public sub_020209E0
.public sub_02020A0C
.public sub_02020A18
.public sub_02020A24
.public DpadMenuBox_GetPosition
.public DpadMenuBox_GetDimensions
.public DpadMenuBox_GetNeighborInDirection
.public sub_02020B3C
.public sub_02026DE0
.public NNS_G2dInitCellTransferStateManager

View File

@ -17696,7 +17696,7 @@ _02224CAA:
str r0, [sp, #4]
str r1, [sp, #8]
ldr r0, [r5, #4]
bl sub_02020A24
bl DpadMenuBox_GetNeighborInDirection
add r4, r0, #0
mov r6, #0
b _02224D36
@ -17713,7 +17713,7 @@ _02224CCE:
mov r0, #1
str r0, [sp, #8]
ldr r0, [r5, #4]
bl sub_02020A24
bl DpadMenuBox_GetNeighborInDirection
add r4, r0, #0
mov r6, #1
b _02224D36
@ -17730,7 +17730,7 @@ _02224CF0:
mov r0, #2
str r0, [sp, #8]
ldr r0, [r5, #4]
bl sub_02020A24
bl DpadMenuBox_GetNeighborInDirection
add r4, r0, #0
mov r6, #2
b _02224D36
@ -17747,7 +17747,7 @@ _02224D12:
mov r0, #3
str r0, [sp, #8]
ldr r0, [r5, #4]
bl sub_02020A24
bl DpadMenuBox_GetNeighborInDirection
add r4, r0, #0
mov r6, #3
b _02224D36
@ -17787,7 +17787,7 @@ _02224D58:
add r1, r7, #0
add r2, r7, #0
add r3, r7, #0
bl sub_02020A24
bl DpadMenuBox_GetNeighborInDirection
mov r1, #0x7f
and r0, r1
lsl r0, r0, #0x18
@ -17814,13 +17814,13 @@ _02224D90:
add r0, r0, r7
add r1, #3
add r2, #2
bl sub_02020A0C
bl DpadMenuBox_GetPosition
ldr r0, [r5, #4]
add r1, sp, #0x10
add r0, r0, r7
add r1, #1
add r2, sp, #0x10
bl sub_02020A18
bl DpadMenuBox_GetDimensions
ldr r0, [r5, #4]
add r1, r6, #0
add r0, r0, r7

View File

@ -1639,7 +1639,7 @@ _021ED60C:
ldr r1, [r4, #0xc]
lsl r0, r0, #2
ldr r0, [r1, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
mov r1, #2
add r5, r0, #0
mvn r1, r1
@ -1725,7 +1725,7 @@ _021ED6B2:
ldr r1, [r4, #0xc]
lsl r0, r0, #2
ldr r0, [r1, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
ldr r1, _021ED74C ; =gSystem
mov r2, #0x10
ldr r1, [r1, #0x4c]
@ -2014,7 +2014,7 @@ ov103_021ED8F8: ; 0x021ED8F8
ldr r1, [r4, #0xc]
lsl r0, r0, #2
ldr r0, [r1, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
bl ov103_021EEAC8
@ -2148,7 +2148,7 @@ ov103_021ED9D8: ; 0x021ED9D8
ldr r1, [r4, #0xc]
lsl r0, r0, #2
ldr r0, [r1, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
bl ov103_021EEAC8
@ -4310,7 +4310,7 @@ _021EEA62:
ldr r1, _021EEA98 ; =ov103_021EF008
ldr r2, _021EEA9C ; =ov103_021EEFC8
add r3, r5, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #0x9e
ldr r2, [r5, #0xc]
lsl r1, r1, #2
@ -4332,11 +4332,11 @@ ov103_021EEAA0: ; 0x021EEAA0
ldr r1, [r0, #0xc]
mov r0, #0x9e
lsl r0, r0, #2
ldr r3, _021EEAAC ; =sub_02019BDC
ldr r3, _021EEAAC ; =GridInputHandler_Free
ldr r0, [r1, r0]
bx r3
.balign 4, 0
_021EEAAC: .word sub_02019BDC
_021EEAAC: .word GridInputHandler_Free
thumb_func_end ov103_021EEAA0
thumb_func_start ov103_021EEAB0
@ -4376,7 +4376,7 @@ ov103_021EEAC8: ; 0x021EEAC8
lsl r0, r0, #2
ldr r0, [r2, r0]
add r4, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r3, r0, #0
ldrb r2, [r3]
ldrb r3, [r3, #1]

File diff suppressed because it is too large Load Diff

View File

@ -3523,7 +3523,7 @@ ov18_021E7564: ; 0x021E7564
add r0, r0, #4
ldr r0, [r6, r0]
mov r1, #1
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
ldr r5, _021E7624 ; =_021F9774
ldr r0, [r6, #4]
mov r1, #2
@ -34344,7 +34344,7 @@ ov18_021F6DE0: ; 0x021F6DE0
ldr r1, _021F6E20 ; =_021FB9F0
ldr r2, _021F6E24 ; =_021FB688
add r3, r5, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F6E28 ; =0x00001864
mov r2, #1
str r0, [r5, r1]
@ -34378,7 +34378,7 @@ ov18_021F6E2C: ; 0x021F6E2C
bne _021F6E4C
ldr r0, _021F6E54 ; =0x00001864
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
_021F6E4C:
pop {r4, pc}
nop
@ -34393,11 +34393,11 @@ ov18_021F6E58: ; 0x021F6E58
ldr r0, _021F6E90 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
mov r0, #0x67
add r2, sp, #0
lsl r0, r0, #4
@ -34454,7 +34454,7 @@ ov18_021F6EC0: ; 0x021F6EC0
ldr r1, _021F6EFC ; =_021FB968
ldr r2, _021F6F00 ; =_021FB668
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F6F04 ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -34491,7 +34491,7 @@ ov18_021F6F08: ; 0x021F6F08
_021F6F24:
ldr r0, _021F6F34 ; =0x00001864
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, pc}
nop
_021F6F30: .word gSystem
@ -34505,11 +34505,11 @@ ov18_021F6F38: ; 0x021F6F38
ldr r0, _021F6F70 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
mov r0, #0x67
add r2, sp, #0
lsl r0, r0, #4
@ -34566,7 +34566,7 @@ ov18_021F6FA0: ; 0x021F6FA0
ldr r1, _021F6FDC ; =_021FBC34
ldr r2, _021F6FE0 ; =_021FB6A8
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F6FE4 ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -34603,7 +34603,7 @@ ov18_021F6FE8: ; 0x021F6FE8
_021F7004:
ldr r0, _021F7014 ; =0x00001864
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, pc}
nop
_021F7010: .word gSystem
@ -34617,11 +34617,11 @@ ov18_021F7018: ; 0x021F7018
ldr r0, _021F705C ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
mov r0, #0x67
add r2, sp, #0
lsl r0, r0, #4
@ -34680,7 +34680,7 @@ _021F7086:
ldr r0, [r5, r0]
lsr r1, r1, #0x18
add r3, r2, #0
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F70DA
_021F70A2:
add r1, r1, #1
@ -34708,7 +34708,7 @@ _021F70B8:
ldr r0, [r5, r0]
lsr r1, r1, #0x18
add r3, r2, #0
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F70DA
_021F70D4:
sub r3, #8
@ -34763,7 +34763,7 @@ ov18_021F7124: ; 0x021F7124
ldr r1, _021F7160 ; =_021FBB94
ldr r2, _021F7164 ; =_021FB638
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F7168 ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -34800,7 +34800,7 @@ ov18_021F716C: ; 0x021F716C
_021F7188:
ldr r0, _021F7198 ; =0x00001864
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, pc}
nop
_021F7194: .word gSystem
@ -34814,11 +34814,11 @@ ov18_021F719C: ; 0x021F719C
ldr r0, _021F71D4 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
mov r0, #0x67
add r2, sp, #0
lsl r0, r0, #4
@ -34866,7 +34866,7 @@ ov18_021F71DC: ; 0x021F71DC
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x12
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F7218:
cmp r1, #0
@ -34881,7 +34881,7 @@ _021F7218:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x12
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F7236:
cmp r4, #0x10
@ -34901,7 +34901,7 @@ _021F7236:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x12
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F725E:
cmp r1, #0x10
@ -34916,7 +34916,7 @@ _021F725E:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x12
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F727C:
cmp r6, #0x13
@ -34942,7 +34942,7 @@ _021F727C:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x13
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F72B0:
cmp r1, #2
@ -34957,7 +34957,7 @@ _021F72B0:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x13
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F72CE:
cmp r4, #0xf
@ -34977,7 +34977,7 @@ _021F72CE:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x13
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7312
_021F72F6:
cmp r1, #0xe
@ -34992,7 +34992,7 @@ _021F72F6:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x13
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
_021F7312:
add r0, r5, #0
add r1, r4, #0
@ -35040,7 +35040,7 @@ ov18_021F7354: ; 0x021F7354
ldr r1, _021F7390 ; =_021FB780
ldr r2, _021F7394 ; =_021FB648
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F7398 ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -35065,7 +35065,7 @@ ov18_021F739C: ; 0x021F739C
add r5, r0, #0
ldr r0, _021F7438 ; =0x00001864
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r4, r0, #0
ldr r0, [r5]
mov r1, #0
@ -35126,7 +35126,7 @@ _021F73F8:
lsl r1, r4, #0x18
ldr r0, [r5, r0]
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r5, #0
add r1, r4, #0
bl ov18_021F7444
@ -35135,7 +35135,7 @@ _021F73F8:
_021F742C:
ldr r0, _021F7438 ; =0x00001864
ldr r0, [r5, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, r5, r6, pc}
nop
_021F7438: .word 0x00001864
@ -35150,11 +35150,11 @@ ov18_021F7444: ; 0x021F7444
ldr r0, _021F74A0 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
cmp r4, #0
bne _021F7470
ldr r1, _021F74A4 ; =0x0000187C
@ -35232,7 +35232,7 @@ ov18_021F74D8: ; 0x021F74D8
ldr r1, _021F7514 ; =_021FB7A0
ldr r2, _021F7518 ; =_021FB678
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F751C ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -35257,7 +35257,7 @@ ov18_021F7520: ; 0x021F7520
add r5, r0, #0
ldr r0, _021F75BC ; =0x00001864
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r4, r0, #0
ldr r0, [r5]
mov r1, #0
@ -35318,7 +35318,7 @@ _021F757C:
lsl r1, r4, #0x18
ldr r0, [r5, r0]
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r5, #0
add r1, r4, #0
bl ov18_021F75C8
@ -35327,7 +35327,7 @@ _021F757C:
_021F75B0:
ldr r0, _021F75BC ; =0x00001864
ldr r0, [r5, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, r5, r6, pc}
nop
_021F75BC: .word 0x00001864
@ -35342,11 +35342,11 @@ ov18_021F75C8: ; 0x021F75C8
ldr r0, _021F7628 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
cmp r4, #0
bne _021F75F4
ldr r1, _021F762C ; =0x00001884
@ -35433,7 +35433,7 @@ ov18_021F7668: ; 0x021F7668
ldr r1, _021F76A4 ; =_021FB8D4
ldr r2, _021F76A8 ; =_021FB6B8
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F76AC ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -35470,7 +35470,7 @@ ov18_021F76B0: ; 0x021F76B0
_021F76CC:
ldr r0, _021F76DC ; =0x00001864
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, pc}
nop
_021F76D8: .word gSystem
@ -35484,11 +35484,11 @@ ov18_021F76E0: ; 0x021F76E0
ldr r0, _021F7718 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
mov r0, #0x67
add r2, sp, #0
lsl r0, r0, #4
@ -35545,7 +35545,7 @@ ov18_021F7748: ; 0x021F7748
ldr r1, _021F7784 ; =_021FBB0C
ldr r2, _021F7788 ; =_021FB658
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021F778C ; =0x00001864
mov r2, #1
str r0, [r4, r1]
@ -35582,7 +35582,7 @@ ov18_021F7790: ; 0x021F7790
_021F77AC:
ldr r0, _021F77BC ; =0x00001864
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
pop {r4, pc}
nop
_021F77B8: .word gSystem
@ -35596,11 +35596,11 @@ ov18_021F77C0: ; 0x021F77C0
ldr r0, _021F77F8 ; =0x00001864
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
mov r0, #0x67
add r2, sp, #0
lsl r0, r0, #4
@ -35643,7 +35643,7 @@ ov18_021F7800: ; 0x021F7800
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0xf
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F7832:
cmp r1, #0xa
@ -35661,7 +35661,7 @@ _021F7832:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0xf
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F7858:
cmp r6, #0xa
@ -35681,7 +35681,7 @@ _021F7858:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0xf
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F7880:
cmp r1, #0xa
@ -35696,7 +35696,7 @@ _021F7880:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0xf
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F789E:
cmp r4, #0x10
@ -35717,7 +35717,7 @@ _021F789E:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x10
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F78C8:
cmp r1, #0xd
@ -35735,7 +35735,7 @@ _021F78C8:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x10
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F78EE:
cmp r6, #0xe
@ -35755,7 +35755,7 @@ _021F78EE:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x10
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
b _021F7932
_021F7916:
cmp r1, #0xd
@ -35770,7 +35770,7 @@ _021F7916:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
mov r3, #0x10
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
_021F7932:
add r0, r5, #0
add r1, r6, #0
@ -36074,7 +36074,7 @@ ov18_021F7B74: ; 0x021F7B74
ldr r0, [r4, r0]
cmp r0, #0
beq _021F7B8A
bl sub_02019BDC
bl GridInputHandler_Free
ldr r0, _021F7B8C ; =0x00001864
mov r1, #0
str r1, [r4, r0]

View File

@ -820,7 +820,7 @@ ov29_0225DB9C: ; 0x0225DB9C
lsl r0, r0, #4
ldr r0, [r5, r0]
add r4, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
ldrb r1, [r0]
lsl r1, r1, #0xc
str r1, [sp]
@ -869,7 +869,7 @@ ov29_0225DBF0: ; 0x0225DBF0
ldr r1, _0225DC2C ; =ov29_0225E280
ldr r2, _0225DC30 ; =ov29_0225E13C
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #0x1d
lsl r1, r1, #4
str r0, [r4, r1]
@ -890,11 +890,11 @@ _0225DC30: .word ov29_0225E13C
ov29_0225DC34: ; 0x0225DC34
mov r1, #0x1d
lsl r1, r1, #4
ldr r3, _0225DC40 ; =sub_02019BDC
ldr r3, _0225DC40 ; =GridInputHandler_Free
ldr r0, [r0, r1]
bx r3
nop
_0225DC40: .word sub_02019BDC
_0225DC40: .word GridInputHandler_Free
thumb_func_end ov29_0225DC34
thumb_func_start ov29_0225DC44
@ -1049,7 +1049,7 @@ _0225DD42:
lsl r0, r0, #4
ldr r0, [r4, r0]
mov r1, #0xb
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r4, #0
mov r1, #0xb
bl ov29_0225DB9C
@ -1071,7 +1071,7 @@ _0225DD80:
mov r0, #0x1d
lsl r0, r0, #4
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
add r5, r0, #0
cmp r5, #0xc
bls _0225DD92

View File

@ -1004,7 +1004,7 @@ ov32_0225DD24: ; 0x0225DD24
add r5, r0, #0
ldr r0, [r5, #0x18]
add r4, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
ldrb r1, [r0]
lsl r1, r1, #0xc
str r1, [sp]
@ -1053,7 +1053,7 @@ ov32_0225DD74: ; 0x0225DD74
ldr r1, _0225DDA4 ; =ov32_0225E204
ldr r2, _0225DDA8 ; =ov32_0225E168
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
str r0, [r4, #0x18]
add r0, r4, #0
mov r1, #0
@ -1068,11 +1068,11 @@ _0225DDA8: .word ov32_0225E168
thumb_func_start ov32_0225DDAC
ov32_0225DDAC: ; 0x0225DDAC
ldr r3, _0225DDB4 ; =sub_02019BDC
ldr r3, _0225DDB4 ; =GridInputHandler_Free
ldr r0, [r0, #0x18]
bx r3
nop
_0225DDB4: .word sub_02019BDC
_0225DDB4: .word GridInputHandler_Free
thumb_func_end ov32_0225DDAC
thumb_func_start ov32_0225DDB8
@ -1177,7 +1177,7 @@ _0225DE56:
pop {r3, r4, r5, pc}
_0225DE6C:
ldr r0, [r5, #0x18]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
mov r1, #2
add r4, r0, #0
mvn r1, r1
@ -1258,7 +1258,7 @@ _0225DEEA:
pop {r3, r4, r5, pc}
_0225DF0A:
ldr r0, [r5, #0x18]
bl sub_02019F74
bl GridInputHandler_GetNextInput
ldr r1, _0225DF78 ; =gSystem
ldr r2, [r1, #0x4c]
mov r1, #0x10

View File

@ -1110,7 +1110,7 @@ ov64_021E622C: ; 0x021E622C
ldr r1, _021E6258 ; =ov64_021E7008
ldr r2, _021E625C ; =ov64_021E6EA8
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #6
lsl r1, r1, #6
str r0, [r4, r1]
@ -1126,11 +1126,11 @@ _021E625C: .word ov64_021E6EA8
ov64_021E6260: ; 0x021E6260
mov r1, #6
lsl r1, r1, #6
ldr r3, _021E626C ; =sub_02019BDC
ldr r3, _021E626C ; =GridInputHandler_Free
ldr r0, [r0, r1]
bx r3
nop
_021E626C: .word sub_02019BDC
_021E626C: .word GridInputHandler_Free
thumb_func_end ov64_021E6260
thumb_func_start ov64_021E6270
@ -1278,7 +1278,7 @@ _021E635E:
mov r0, #6
lsl r0, r0, #6
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
mov r1, #2
add r5, r0, #0
mvn r1, r1
@ -1360,7 +1360,7 @@ _021E63F6:
mov r0, #6
lsl r0, r0, #6
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
bl ov64_021E677C
@ -1371,7 +1371,7 @@ _021E6410:
mov r0, #6
lsl r0, r0, #6
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
ldr r1, _021E64F0 ; =gSystem
ldr r2, [r1, #0x4c]
mov r1, #0x10
@ -1662,7 +1662,7 @@ _021E6656:
mov r0, #6
lsl r0, r0, #6
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r5, #0
bl ov64_021E677C
@ -2331,7 +2331,7 @@ ov64_021E6BD8: ; 0x021E6BD8
lsl r0, r0, #6
ldr r0, [r4, r0]
add r5, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r2, r0, #0
mov r0, #0x17
lsl r0, r0, #4

View File

@ -419,7 +419,7 @@ ov67_021E5C44: ; 0x021E5C44
add r4, r0, #0
ldr r0, _021E5D88 ; =0x000004A4
ldr r0, [r4, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
cmp r0, #0xc
bhi _021E5C58
beq _021E5C72
@ -508,7 +508,7 @@ _021E5CEC:
bl ov67_021E6490
ldr r0, _021E5D88 ; =0x000004A4
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
mov r1, #0x4a
lsl r1, r1, #4
ldrh r2, [r4, r1]
@ -547,7 +547,7 @@ _021E5D40:
bl ov67_021E6490
ldr r0, _021E5D88 ; =0x000004A4
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
mov r1, #0x4a
lsl r1, r1, #4
ldrh r2, [r4, r1]
@ -2376,7 +2376,7 @@ ov67_021E6BC4: ; 0x021E6BC4
ldr r0, _021E6BF8 ; =ov67_021E6E60
ldr r2, _021E6BFC ; =ov67_021E6D6C
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
ldr r1, _021E6C00 ; =0x000004A4
str r0, [r4, r1]
add r0, r4, #0
@ -2394,12 +2394,12 @@ _021E6C00: .word 0x000004A4
thumb_func_start ov67_021E6C04
ov67_021E6C04: ; 0x021E6C04
ldr r1, _021E6C0C ; =0x000004A4
ldr r3, _021E6C10 ; =sub_02019BDC
ldr r3, _021E6C10 ; =GridInputHandler_Free
ldr r0, [r0, r1]
bx r3
.balign 4, 0
_021E6C0C: .word 0x000004A4
_021E6C10: .word sub_02019BDC
_021E6C10: .word GridInputHandler_Free
thumb_func_end ov67_021E6C04
thumb_func_start ov67_021E6C14
@ -2409,11 +2409,11 @@ ov67_021E6C14: ; 0x021E6C14
ldr r0, _021E6C58 ; =0x000004A4
add r4, r1, #0
ldr r0, [r5, r0]
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
add r3, sp, #0
ldrb r2, [r3, #1]
ldrb r3, [r3]

View File

@ -784,13 +784,13 @@ ov68_021E5F68: ; 0x021E5F68
mov r0, #0x72
lsl r0, r0, #2
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
mov r1, #0x73
lsl r1, r1, #2
strh r0, [r4, r1]
sub r0, r1, #4
ldr r0, [r4, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
mov r1, #2
add r5, r0, #0
mvn r1, r1
@ -3607,7 +3607,7 @@ ov68_021E75C0: ; 0x021E75C0
ldr r1, _021E75FC ; =ov68_021E7D64
ldr r2, _021E7600 ; =ov68_021E7C08
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #0x72
lsl r1, r1, #2
str r0, [r4, r1]
@ -3628,11 +3628,11 @@ _021E7600: .word ov68_021E7C08
ov68_021E7604: ; 0x021E7604
mov r1, #0x72
lsl r1, r1, #2
ldr r3, _021E7610 ; =sub_02019BDC
ldr r3, _021E7610 ; =GridInputHandler_Free
ldr r0, [r0, r1]
bx r3
nop
_021E7610: .word sub_02019BDC
_021E7610: .word GridInputHandler_Free
thumb_func_end ov68_021E7604
thumb_func_start ov68_021E7614
@ -3699,7 +3699,7 @@ _021E766A:
mov r4, #3
ldr r0, [r5, r0]
add r1, r4, #0
bl sub_02019F7C
bl GridInputHandler_SetNextInput
ldr r1, [r5]
ldrh r0, [r1, #0x16]
add r0, r0, #1
@ -3749,7 +3749,7 @@ _021E7700:
mov r4, #0
ldr r0, [r5, r0]
add r1, r4, #0
bl sub_02019F7C
bl GridInputHandler_SetNextInput
b _021E7728
_021E7710:
ldr r0, _021E7738 ; =0x000005DD
@ -3845,7 +3845,7 @@ _021E7792:
lsl r1, r4, #0x18
ldr r0, [r5, r0]
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
b _021E7884
_021E77E8:
cmp r4, #5
@ -3881,7 +3881,7 @@ _021E77E8:
lsl r1, r4, #0x18
ldr r0, [r5, r0]
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
b _021E7884
_021E7840:
cmp r4, #6
@ -3902,7 +3902,7 @@ _021E7840:
ldr r0, [r5, r0]
lsl r1, r4, #0x18
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
b _021E7884
_021E786E:
cmp r4, #7
@ -3914,7 +3914,7 @@ _021E786E:
lsl r1, r4, #0x18
ldr r0, [r5, r0]
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
_021E7884:
lsl r1, r4, #0x18
add r0, r5, #0
@ -3937,7 +3937,7 @@ ov68_021E7898: ; 0x021E7898
lsl r0, r0, #2
ldr r0, [r4, r0]
mov r1, #7
bl sub_02019FF8
bl GridInputHandler_SetEnabledFlag
add r0, r4, #0
add r0, #0x88
bl ScheduleWindowCopyToVram
@ -3961,7 +3961,7 @@ _021E78D6:
lsl r0, r0, #2
ldr r0, [r4, r0]
mov r1, #7
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r4, #0
add r0, #0x88
bl ClearWindowTilemapAndScheduleTransfer
@ -3997,12 +3997,12 @@ ov68_021E7910: ; 0x021E7910
add r0, #0x10
ldr r0, [r4, r0]
mov r1, #4
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
mov r0, #0x72
lsl r0, r0, #2
ldr r0, [r4, r0]
mov r1, #5
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
pop {r4, pc}
_021E7936:
ldr r1, [r4]
@ -4012,13 +4012,13 @@ _021E7936:
add r0, #0x10
ldr r0, [r4, r0]
mov r1, #5
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
b _021E7954
_021E794A:
add r0, #0x10
ldr r0, [r4, r0]
mov r1, #5
bl sub_02019FF8
bl GridInputHandler_SetEnabledFlag
_021E7954:
ldr r0, [r4]
ldrh r0, [r0, #0x16]
@ -4031,13 +4031,13 @@ _021E7954:
add r0, #0x10
ldr r0, [r4, r0]
mov r1, #4
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
pop {r4, pc}
_021E7970:
add r0, #0x10
ldr r0, [r4, r0]
mov r1, #4
bl sub_02019FF8
bl GridInputHandler_SetEnabledFlag
pop {r4, pc}
thumb_func_end ov68_021E7910

View File

@ -1909,7 +1909,7 @@ _0223ED0E:
_0223ED1C:
ldr r0, _0223EF48 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r5, r0, #0
mov r0, #2
mvn r0, r0
@ -2004,7 +2004,7 @@ _0223EDDA:
bl ov81_02241C0C
ldr r0, _0223EF48 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
mov r1, #0xf
lsl r1, r1, #6
add r2, r0, #0
@ -2014,7 +2014,7 @@ _0223EDDA:
bl ov81_02242218
ldr r0, _0223EF48 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
mov r2, #6
@ -2023,7 +2023,7 @@ _0223EDDA:
_0223EE12:
ldr r0, _0223EF48 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #6
blo _0223EE30
ldr r0, _0223EF4C ; =0x000005DC
@ -2266,7 +2266,7 @@ ov81_0223EF5C: ; 0x0223EF5C
bl ov81_0224218C
ldr r0, _0223F034 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
mov r2, #6
@ -2725,7 +2725,7 @@ _0223F3B8:
_0223F3CC:
ldr r0, _0223F66C ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r5, r0, #0
mov r0, #2
mvn r0, r0
@ -2852,7 +2852,7 @@ _0223F4DC:
bl PlaySE
ldr r0, _0223F66C ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r2, r0, #0
cmp r2, #3
bne _0223F51C
@ -2897,7 +2897,7 @@ _0223F540:
_0223F548:
ldr r0, _0223F66C ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #4
ldr r0, _0223F670 ; =0x000005DC
blo _0223F56E
@ -3199,7 +3199,7 @@ _0223F798:
_0223F7BC:
ldr r0, _0223FB10 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r5, r0, #0
mov r0, #2
mvn r0, r0
@ -3388,7 +3388,7 @@ _0223F956:
bl PlaySE
ldr r0, _0223FB10 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r5, r0, #0
sub r0, r5, #4
cmp r0, #1
@ -3461,7 +3461,7 @@ _0223F9C4:
_0223FA02:
ldr r0, _0223FB10 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #6
ldr r0, _0223FB14 ; =0x000005DC
blo _0223FA28
@ -3614,10 +3614,10 @@ ov81_0223FB3C: ; 0x0223FB3C
add r3, #0x9c
str r1, [r0, r2]
ldr r0, [r0, r3]
ldr r3, _0223FB60 ; =sub_02019F7C
ldr r3, _0223FB60 ; =GridInputHandler_SetNextInput
bx r3
.balign 4, 0
_0223FB60: .word sub_02019F7C
_0223FB60: .word GridInputHandler_SetNextInput
thumb_func_end ov81_0223FB3C
thumb_func_start ov81_0223FB64
@ -6828,7 +6828,7 @@ _022414A2:
ldr r0, _022414DC ; =0x00000464
mov r1, #6
ldr r0, [r4, r0]
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r4, #0
mov r1, #6
bl ov81_0224141C
@ -6865,7 +6865,7 @@ ov81_022414E0: ; 0x022414E0
ldr r1, [r4, r1]
lsl r1, r1, #0x18
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
ldr r0, _02241520 ; =0x00000464
mov r1, #0
ldr r0, [r4, r0]
@ -7170,7 +7170,7 @@ ov81_0224174C: ; 0x0224174C
ldr r0, _022417B0 ; =0x00000464
mov r1, #4
ldr r0, [r4, r0]
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r4, #0
mov r1, #4
bl ov81_0224141C
@ -7211,7 +7211,7 @@ ov81_022417B4: ; 0x022417B4
ldr r1, [r4, r1]
lsl r1, r1, #0x18
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
ldr r0, _02241800 ; =0x00000464
ldrb r2, [r4, #9]
ldr r0, [r4, r0]
@ -7233,7 +7233,7 @@ ov81_02241804: ; 0x02241804
add r5, r0, #0
ldr r0, _0224183C ; =0x00000464
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
mov r1, #0xf7
lsl r1, r1, #2
add r4, r0, #0
@ -7431,7 +7431,7 @@ ov81_02241980: ; 0x02241980
ldr r0, _022419DC ; =0x00000464
mov r1, #6
ldr r0, [r4, r0]
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r4, #0
mov r1, #6
bl ov81_0224141C
@ -7475,7 +7475,7 @@ ov81_022419E0: ; 0x022419E0
ldr r1, [r4, r1]
lsl r1, r1, #0x18
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
ldr r0, _02241A34 ; =0x00000464
ldrb r2, [r4, #9]
ldr r0, [r4, r0]
@ -7497,7 +7497,7 @@ ov81_02241A38: ; 0x02241A38
add r5, r0, #0
ldr r0, _02241A78 ; =0x00000464
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
mov r1, #0xf7
lsl r1, r1, #2
add r4, r0, #0
@ -7729,7 +7729,7 @@ ov81_02241C0C: ; 0x02241C0C
add r4, r0, #0
ldr r0, _02241C80 ; =0x00000464
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r2, r0, #0
cmp r2, #6
bhs _02241C7C
@ -7814,7 +7814,7 @@ ov81_02241CA0: ; 0x02241CA0
add r4, r1, #0
ldr r0, [r5, r0]
add r7, r2, #0
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #6
bhs _02241CE2
ldrb r2, [r5, #0x11]
@ -7900,7 +7900,7 @@ ov81_02241D38: ; 0x02241D38
add r5, r0, #0
ldr r0, _02241D8C ; =0x00000464
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r4, r0, #0
cmp r4, #4
bhs _02241D88
@ -7945,7 +7945,7 @@ ov81_02241D94: ; 0x02241D94
add r5, r0, #0
ldr r0, _02241DD8 ; =0x00000464
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r4, r0, #0
cmp r4, #6
bhs _02241DD4
@ -10727,10 +10727,10 @@ _022431F4:
thumb_func_start ov81_02243220
ov81_02243220: ; 0x02243220
ldr r3, _02243224 ; =sub_02019BDC
ldr r3, _02243224 ; =GridInputHandler_Free
bx r3
.balign 4, 0
_02243224: .word sub_02019BDC
_02243224: .word GridInputHandler_Free
thumb_func_end ov81_02243220
thumb_func_start ov81_02243228
@ -10738,7 +10738,7 @@ ov81_02243228: ; 0x02243228
push {r3, r4, r5, lr}
add r5, r2, #0
add r4, r3, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
ldrb r1, [r0]
str r1, [r5]
ldrb r0, [r0, #1]
@ -10767,7 +10767,7 @@ ov81_02243240: ; 0x02243240
ldr r0, _02243264 ; =ov81_022436F0
ldr r1, _02243268 ; =ov81_02243808
ldr r2, _0224326C ; =ov81_02243658
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {pc}
nop
@ -10782,17 +10782,17 @@ ov81_02243270: ; 0x02243270
add r4, r0, #0
cmp r1, #1
bne _0224327E
bl sub_02019FC4
bl GridInputHandler_SetAllEnabled
pop {r4, pc}
_0224327E:
mov r1, #6
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r4, #0
mov r1, #7
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r4, #0
mov r1, #8
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
pop {r4, pc}
.balign 4, 0
thumb_func_end ov81_02243270
@ -10825,7 +10825,7 @@ ov81_022432AC: ; 0x022432AC
ldr r0, _022432D0 ; =ov81_02243668
ldr r1, _022432D4 ; =ov81_02243750
ldr r2, _022432D8 ; =ov81_02243648
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {pc}
nop
@ -10849,10 +10849,10 @@ ov81_022432DC: ; 0x022432DC
ldr r0, _02243308 ; =ov81_02243688
ldr r1, _0224330C ; =ov81_02243718
ldr r2, _02243310 ; =ov81_02243648
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #2
add r4, r0, #0
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r4, #0
add sp, #0xc
pop {r3, r4, pc}
@ -10869,22 +10869,22 @@ ov81_02243314: ; 0x02243314
add r4, r2, #0
cmp r1, #1
bne _0224332C
bl sub_02019FC4
bl GridInputHandler_SetAllEnabled
add r0, r5, #0
mov r1, #3
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
b _02243348
_0224332C:
bl sub_02019FC4
bl GridInputHandler_SetAllEnabled
add r0, r5, #0
mov r1, #4
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r5, #0
mov r1, #5
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r5, #0
mov r1, #6
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
_02243348:
add r0, r4, #0
bl ov81_02242704
@ -10892,7 +10892,7 @@ _02243348:
bne _0224335A
add r0, r5, #0
mov r1, #2
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
_0224335A:
pop {r3, r4, r5, pc}
thumb_func_end ov81_02243314
@ -10952,7 +10952,7 @@ ov81_02243398: ; 0x02243398
ldr r1, _022433EC ; =ov81_02243788
ldr r2, _022433F0 ; =ov81_02243638
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {r3, r4, pc}
_022433CA:
@ -10966,7 +10966,7 @@ _022433CA:
ldr r1, _022433F8 ; =ov81_022437C8
ldr r2, _022433F0 ; =ov81_02243638
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {r3, r4, pc}
nop
@ -10984,22 +10984,22 @@ ov81_022433FC: ; 0x022433FC
add r4, r2, #0
cmp r1, #1
bne _0224341C
bl sub_02019FC4
bl GridInputHandler_SetAllEnabled
add r0, r5, #0
mov r1, #4
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r5, #0
mov r1, #5
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
b _02243430
_0224341C:
bl sub_02019FC4
bl GridInputHandler_SetAllEnabled
add r0, r5, #0
mov r1, #6
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
add r0, r5, #0
mov r1, #7
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
_02243430:
add r0, r4, #0
bl ov81_02242704
@ -11007,7 +11007,7 @@ _02243430:
bne _02243442
add r0, r5, #0
mov r1, #3
bl sub_02019FD0
bl GridInputHandler_ClearEnabledFlag
_02243442:
pop {r3, r4, r5, pc}
thumb_func_end ov81_022433FC

View File

@ -1436,7 +1436,7 @@ _0223E9A2:
bl ov83_022407FC
ldr r0, _0223EC8C ; =0x0000085C
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
bl ov83_022408E0
@ -1469,7 +1469,7 @@ _0223E9EC:
bl ov83_022407FC
ldr r0, _0223EC8C ; =0x0000085C
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r1, r0, #0
add r0, r4, #0
bl ov83_022408E0
@ -19137,10 +19137,10 @@ ov83_022479E4: ; 0x022479E4
thumb_func_start ov83_02247A18
ov83_02247A18: ; 0x02247A18
ldr r3, _02247A1C ; =sub_02019BDC
ldr r3, _02247A1C ; =GridInputHandler_Free
bx r3
.balign 4, 0
_02247A1C: .word sub_02019BDC
_02247A1C: .word GridInputHandler_Free
thumb_func_end ov83_02247A18
thumb_func_start ov83_02247A20
@ -19166,7 +19166,7 @@ ov83_02247A24: ; 0x02247A24
ldr r0, _02247A68 ; =ov83_02248530
ldr r1, _02247A6C ; =ov83_022485A8
ldr r2, _02247A70 ; =ov83_02248500
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {pc}
_02247A4A:
@ -19180,7 +19180,7 @@ _02247A4A:
ldr r0, _02247A74 ; =ov83_02248558
ldr r1, _02247A78 ; =ov83_022485E8
ldr r2, _02247A70 ; =ov83_02248500
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {pc}
nop
@ -19208,7 +19208,7 @@ ov83_02247A7C: ; 0x02247A7C
ldr r0, _02247AC0 ; =ov83_02248530
ldr r1, _02247AC4 ; =ov83_022485A8
ldr r2, _02247AC8 ; =ov83_02248510
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {pc}
_02247AA2:
@ -19222,7 +19222,7 @@ _02247AA2:
ldr r0, _02247ACC ; =ov83_02248558
ldr r1, _02247AD0 ; =ov83_022485E8
ldr r2, _02247AC8 ; =ov83_02248510
bl sub_02019BA4
bl GridInputHandler_Create
add sp, #0xc
pop {pc}
nop
@ -19236,7 +19236,7 @@ _02247AD0: .word ov83_022485E8
thumb_func_start ov83_02247AD4
ov83_02247AD4: ; 0x02247AD4
push {r3, lr}
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r1, r0, #4
cmp r1, #3
bhi _02247AF6
@ -19266,12 +19266,12 @@ _02247B00: .word ov83_02248544
ov83_02247B04: ; 0x02247B04
push {r4, lr}
add r4, r0, #0
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r2, r0, #0
add r0, r4, #0
mov r1, #0
add r3, r2, #0
bl sub_02019F88
bl GridInputHandler_SetNextLastUnk0FInputs
pop {r4, pc}
.balign 4, 0
thumb_func_end ov83_02247B04
@ -19347,7 +19347,7 @@ ov83_02247B7C: ; 0x02247B7C
ldr r1, _02247BBC ; =ov83_02248610
ldr r2, _02247BC0 ; =ov83_02248520
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
add r5, r0, #0
add r0, r4, #0
mov r1, #0x40
@ -19370,7 +19370,7 @@ _02247BC0: .word ov83_02248520
ov83_02247BC4: ; 0x02247BC4
push {r4, lr}
add r4, r0, #0
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r1, r0, #4
cmp r1, #3
bhi _02247C28
@ -19394,7 +19394,7 @@ _02247BE8:
tst r0, r1
beq _02247C08
add r0, r4, #0
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #0
beq _02247C04
cmp r0, #2
@ -19411,7 +19411,7 @@ _02247C08:
tst r0, r1
beq _02247C30
add r0, r4, #0
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #1
beq _02247C24
cmp r0, #3

View File

@ -3273,7 +3273,7 @@ ov86_021E73CC: ; 0x021E73CC
ldr r0, [r4, r0]
cmp r0, #0
beq _021E73E6
bl sub_02019BDC
bl GridInputHandler_Free
mov r0, #0x95
mov r1, #0
lsl r0, r0, #2
@ -3564,11 +3564,11 @@ ov86_021E75EC: ; 0x021E75EC
lsl r0, r0, #2
ldr r0, [r5, r0]
add r4, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
add r3, sp, #0
ldrb r2, [r3, #1]
ldrb r3, [r3]
@ -3609,7 +3609,7 @@ ov86_021E7630: ; 0x021E7630
str r0, [sp, #8]
ldr r0, _021E7674 ; =ov86_021E8094
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #0x95
lsl r1, r1, #2
str r0, [r4, r1]
@ -3716,7 +3716,7 @@ ov86_021E7710: ; 0x021E7710
mov r0, #0x95
lsl r0, r0, #2
ldr r0, [r4, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r5, r0, #0
cmp r5, #0x1a
bhi _021E7728
@ -3851,11 +3851,11 @@ ov86_021E781C: ; 0x021E781C
lsl r0, r0, #2
ldr r0, [r5, r0]
add r4, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
add r3, sp, #0
ldrb r2, [r3, #1]
ldrb r3, [r3]
@ -3895,7 +3895,7 @@ ov86_021E7860: ; 0x021E7860
str r0, [sp, #8]
ldr r0, _021E78A4 ; =ov86_021E7F94
add r3, r5, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #0x95
lsl r1, r1, #2
str r0, [r5, r1]
@ -4044,7 +4044,7 @@ ov86_021E7984: ; 0x021E7984
mov r0, #0x95
lsl r0, r0, #2
ldr r0, [r4, r0]
bl sub_02019BE4
bl GridInputHandler_HandleInput_NoHold
add r5, r0, #0
cmp r5, #8
bhi _021E799C
@ -4082,7 +4082,7 @@ _021E79D2:
mov r0, #0x95
lsl r0, r0, #2
ldr r0, [r4, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r0, #7
bhi _021E7AB4
add r0, r0, r0

View File

@ -3697,7 +3697,7 @@ _021E75B2:
bne _021E75E6
add r0, r0, #4
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r4, r0, #0
add r0, r5, #0
bl ov99_021E7508
@ -4282,7 +4282,7 @@ ov99_021E7A78: ; 0x021E7A78
str r0, [sp, #8]
ldr r0, _021E7AB4 ; =ov99_021EA03C
add r3, r4, #0
bl sub_02019BA4
bl GridInputHandler_Create
mov r1, #0xff
lsl r1, r1, #2
str r0, [r4, r1]
@ -4303,7 +4303,7 @@ ov99_021E7AB8: ; 0x021E7AB8
ldr r0, [r4, r0]
cmp r0, #0
beq _021E7AD2
bl sub_02019BDC
bl GridInputHandler_Free
mov r0, #0xff
mov r1, #0
lsl r0, r0, #2
@ -4395,7 +4395,7 @@ _021E7B4C:
add r0, #8
ldr r0, [r5, r0]
mov r6, #0
bl sub_02019F74
bl GridInputHandler_GetNextInput
cmp r7, #0
beq _021E7B80
cmp r0, #0x1e
@ -4421,7 +4421,7 @@ _021E7B96:
lsl r0, r0, #2
ldr r0, [r5, r0]
add r1, r6, #0
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r5, #0
add r1, r6, #0
bl ov99_021E7C58
@ -4445,12 +4445,12 @@ ov99_021E7BC8: ; 0x021E7BC8
mov r0, #0xff
lsl r0, r0, #2
ldr r0, [r5, r0]
bl sub_02019D18
bl GridInputHandler_HandleInput_AllowHold
add r6, r0, #0
mov r0, #0xff
lsl r0, r0, #2
ldr r0, [r5, r0]
bl sub_02019F74
bl GridInputHandler_GetNextInput
add r4, r0, #0
ldr r0, _021E7C50 ; =ov99_021E9F54
bl TouchscreenHitbox_FindHitboxAtTouchNew
@ -4520,11 +4520,11 @@ ov99_021E7C58: ; 0x021E7C58
lsl r0, r0, #2
ldr r0, [r5, r0]
add r4, r1, #0
bl sub_0201A018
bl GridInputHandler_GetDpadBox
add r1, sp, #0
add r1, #1
add r2, sp, #0
bl sub_02020A0C
bl DpadMenuBox_GetPosition
ldr r0, _021E7C9C ; =0x00000408
add r2, sp, #0
ldrb r1, [r2, #1]
@ -4559,7 +4559,7 @@ ov99_021E7CA8: ; 0x021E7CA8
lsl r1, r4, #0x18
ldr r0, [r5, r0]
lsr r1, r1, #0x18
bl sub_02019F7C
bl GridInputHandler_SetNextInput
add r0, r5, #0
add r1, r4, #0
bl ov99_021E7C58

File diff suppressed because it is too large Load Diff

892
asm/unk_0201956C.s Normal file
View File

@ -0,0 +1,892 @@
.include "asm/macros.inc"
.include "unk_020192D0.inc"
.include "global.inc"
.rodata
_020F6298:
.word sub_02019BA0, BgCommitTilemapBufferToVram, ScheduleBgTilemapBufferTransfer
.text
thumb_func_start sub_0201956C
sub_0201956C: ; 0x0201956C
push {r3, r4, r5, r6, r7, lr}
add r6, r0, #0
add r7, r1, #0
add r0, r3, #0
mov r1, #0x10
add r5, r2, #0
str r3, [sp]
bl Heap_Alloc
add r4, r0, #0
str r6, [r4]
strh r5, [r4, #8]
ldr r0, [sp]
lsl r2, r7, #0x10
str r0, [r4, #0xc]
ldrh r0, [r4, #0xa]
ldr r1, _020195BC ; =0xFFFF8000
lsr r3, r2, #0x10
lsr r2, r1, #0x11
and r0, r1
and r2, r3
orr r0, r2
strh r0, [r4, #0xa]
ldrh r2, [r4, #0xa]
sub r0, r1, #1
lsl r5, r5, #4
and r0, r2
strh r0, [r4, #0xa]
ldr r0, [sp]
add r1, r5, #0
bl Heap_Alloc
mov r1, #0
add r2, r5, #0
str r0, [r4, #4]
bl MI_CpuFill8
add r0, r4, #0
pop {r3, r4, r5, r6, r7, pc}
nop
_020195BC: .word 0xFFFF8000
thumb_func_end sub_0201956C
thumb_func_start sub_020195C0
sub_020195C0: ; 0x020195C0
push {r4, r5, r6, lr}
add r5, r0, #0
ldrh r0, [r5, #8]
mov r6, #0
cmp r0, #0
bls _020195E4
add r4, r6, #0
_020195CE:
ldr r0, [r5, #4]
ldr r0, [r0, r4]
cmp r0, #0
beq _020195DA
bl Heap_Free
_020195DA:
ldrh r0, [r5, #8]
add r6, r6, #1
add r4, #0x10
cmp r6, r0
blo _020195CE
_020195E4:
ldr r0, [r5, #4]
bl Heap_Free
add r0, r5, #0
bl Heap_Free
pop {r4, r5, r6, pc}
.balign 4, 0
thumb_func_end sub_020195C0
thumb_func_start sub_020195F4
sub_020195F4: ; 0x020195F4
push {r3, r4, r5, r6, r7, lr}
lsl r7, r1, #4
ldr r4, [r0, #4]
ldr r1, [sp, #0x18]
add r6, r3, #0
mul r1, r6
ldr r0, [r0, #0xc]
add r5, r4, r7
lsl r1, r1, #1
str r2, [sp]
bl Heap_Alloc
str r0, [r4, r7]
ldrh r0, [r5, #4]
mov r1, #0x3f
bic r0, r1
lsl r1, r6, #0x10
lsr r2, r1, #0x10
mov r1, #0x3f
and r1, r2
orr r0, r1
strh r0, [r5, #4]
ldrh r1, [r5, #4]
ldr r0, _02019660 ; =0xFFFFF03F
and r1, r0
ldr r0, [sp, #0x18]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
lsl r0, r0, #0x1a
lsr r0, r0, #0x14
orr r0, r1
strh r0, [r5, #4]
ldr r0, [sp]
ldr r1, _02019664 ; =0xFFFF1FFF
strb r0, [r5, #0xa]
mov r0, #0
strb r0, [r5, #6]
strb r0, [r5, #7]
ldrh r2, [r5, #4]
and r1, r2
strh r1, [r5, #4]
mov r1, #1
ldrh r2, [r5, #4]
lsl r1, r1, #0xc
orr r1, r2
strh r1, [r5, #4]
strb r0, [r5, #0xc]
mov r1, #0x20
strb r1, [r5, #0xd]
strb r0, [r5, #0xe]
mov r0, #0x18
strb r0, [r5, #0xf]
pop {r3, r4, r5, r6, r7, pc}
nop
_02019660: .word 0xFFFFF03F
_02019664: .word 0xFFFF1FFF
thumb_func_end sub_020195F4
thumb_func_start sub_02019668
sub_02019668: ; 0x02019668
push {r4, lr}
ldr r3, [r0, #4]
lsl r1, r1, #4
add r4, r3, r1
add r0, r2, #0
ldrh r2, [r4, #4]
ldr r1, [r3, r1]
lsl r3, r2, #0x1a
lsl r2, r2, #0x14
lsr r3, r3, #0x1a
lsr r2, r2, #0x1a
mul r2, r3
lsl r2, r2, #1
bl MIi_CpuCopy16
pop {r4, pc}
thumb_func_end sub_02019668
thumb_func_start sub_02019688
sub_02019688: ; 0x02019688
push {r4, r5, r6, lr}
sub sp, #8
add r5, r0, #0
ldr r0, [r5, #0xc]
add r4, r1, #0
str r0, [sp]
add r0, r2, #0
add r1, r3, #0
ldr r2, [sp, #0x18]
add r3, sp, #4
bl GfGfxLoader_GetScrnData
ldr r2, [sp, #4]
add r6, r0, #0
add r0, r5, #0
add r1, r4, #0
add r2, #0xc
bl sub_02019668
add r0, r6, #0
bl Heap_Free
add sp, #8
pop {r4, r5, r6, pc}
thumb_func_end sub_02019688
thumb_func_start sub_020196B8
sub_020196B8: ; 0x020196B8
push {r4, r5, r6, lr}
sub sp, #8
add r5, r0, #0
ldr r0, [r5, #0xc]
add r4, r1, #0
str r0, [sp]
add r0, r2, #0
add r1, r3, #0
ldr r2, [sp, #0x18]
add r3, sp, #4
bl GfGfxLoader_GetScrnDataFromOpenNarc
ldr r2, [sp, #4]
add r6, r0, #0
add r0, r5, #0
add r1, r4, #0
add r2, #0xc
bl sub_02019668
add r0, r6, #0
bl Heap_Free
add sp, #8
pop {r4, r5, r6, pc}
thumb_func_end sub_020196B8
thumb_func_start sub_020196E8
sub_020196E8: ; 0x020196E8
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x38
str r0, [sp, #0x1c]
add r0, r2, #0
ldr r2, [sp, #0x1c]
lsl r1, r1, #4
ldr r2, [r2, #4]
add r4, r2, r1
strb r0, [r4, #6]
strb r3, [r4, #7]
mov r1, #0xd
ldrsb r1, [r4, r1]
str r1, [sp, #0x28]
cmp r0, r1
bge _020197E6
mov r1, #0xf
ldrsb r1, [r4, r1]
str r1, [sp, #0x20]
cmp r3, r1
bge _020197E6
ldrh r1, [r4, #4]
lsl r2, r1, #0x1a
lsr r2, r2, #0x1a
str r2, [sp, #0x2c]
add r7, r0, r2
mov r2, #0xc
ldrsb r2, [r4, r2]
mov ip, r2
cmp r7, r2
blt _020197E6
lsl r1, r1, #0x14
lsr r1, r1, #0x1a
str r1, [sp, #0x24]
add r6, r3, r1
mov r1, #0xe
ldrsb r2, [r4, r1]
cmp r6, r2
blt _020197E6
lsl r1, r0, #0x18
lsr r1, r1, #0x18
str r1, [sp, #0x34]
ldr r1, [sp, #0x2c]
mov r5, #0
lsl r1, r1, #0x18
str r5, [sp, #0x30]
mov r5, ip
lsr r1, r1, #0x18
cmp r0, r5
bge _02019762
mov r5, ip
lsl r5, r5, #0x18
lsr r5, r5, #0x18
str r5, [sp, #0x34]
mov r5, ip
sub r0, r5, r0
sub r1, r1, r0
lsl r0, r0, #0x18
lsl r1, r1, #0x18
lsr r0, r0, #0x18
lsr r1, r1, #0x18
str r0, [sp, #0x30]
_02019762:
ldr r0, [sp, #0x28]
cmp r7, r0
blt _02019770
sub r0, r7, r0
sub r0, r1, r0
lsl r0, r0, #0x18
lsr r1, r0, #0x18
_02019770:
lsl r0, r3, #0x18
lsr r7, r0, #0x18
ldr r0, [sp, #0x24]
mov r5, #0
lsl r0, r0, #0x18
lsr r0, r0, #0x18
cmp r3, r2
bge _02019790
lsl r5, r2, #0x18
sub r2, r2, r3
sub r0, r0, r2
lsl r0, r0, #0x18
lsl r2, r2, #0x18
lsr r7, r5, #0x18
lsr r0, r0, #0x18
lsr r5, r2, #0x18
_02019790:
ldr r2, [sp, #0x20]
cmp r6, r2
blt _0201979E
sub r2, r6, r2
sub r0, r0, r2
lsl r0, r0, #0x18
lsr r0, r0, #0x18
_0201979E:
str r1, [sp]
str r0, [sp, #4]
ldr r0, [r4]
add r3, r7, #0
str r0, [sp, #8]
ldr r0, [sp, #0x30]
str r0, [sp, #0xc]
str r5, [sp, #0x10]
ldr r0, [sp, #0x2c]
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x14]
ldr r0, [sp, #0x24]
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x18]
ldr r0, [sp, #0x1c]
ldrb r1, [r4, #0xa]
ldr r0, [r0]
ldr r2, [sp, #0x34]
bl CopyToBgTilemapRect
ldr r2, [sp, #0x1c]
ldr r0, [sp, #0x1c]
ldrh r2, [r2, #0xa]
ldrb r1, [r4, #0xa]
ldr r0, [r0]
lsl r2, r2, #0x11
lsr r3, r2, #0xf
ldr r2, _020197EC ; =_020F6298
ldr r2, [r2, r3]
blx r2
ldrh r1, [r4, #4]
ldr r0, _020197F0 ; =0xFFFFEFFF
and r0, r1
strh r0, [r4, #4]
_020197E6:
add sp, #0x38
pop {r3, r4, r5, r6, r7, pc}
nop
_020197EC: .word _020F6298
_020197F0: .word 0xFFFFEFFF
thumb_func_end sub_020196E8
thumb_func_start sub_020197F4
sub_020197F4: ; 0x020197F4
push {r4, lr}
ldr r2, [r0, #4]
lsl r3, r1, #4
add r4, r2, r3
mov r2, #6
mov r3, #7
ldrsb r2, [r4, r2]
ldrsb r3, [r4, r3]
bl sub_020196E8
pop {r4, pc}
.balign 4, 0
thumb_func_end sub_020197F4
thumb_func_start sub_0201980C
sub_0201980C: ; 0x0201980C
push {r4, r5, r6, r7, lr}
sub sp, #0x2c
ldr r2, [r0, #4]
str r0, [sp, #0x10]
lsl r0, r1, #4
add r4, r2, r0
mov r0, #1
ldrh r1, [r4, #4]
lsl r0, r0, #0xc
orr r0, r1
strh r0, [r4, #4]
mov r0, #0xd
ldrsb r6, [r4, r0]
mov r0, #6
ldrsb r0, [r4, r0]
cmp r0, r6
bge _020198F4
mov r1, #0xf
ldrsb r1, [r4, r1]
str r1, [sp, #0x28]
mov r1, #7
ldrsb r3, [r4, r1]
ldr r1, [sp, #0x28]
cmp r3, r1
bge _020198F4
ldrh r2, [r4, #4]
lsl r1, r2, #0x1a
lsr r1, r1, #0x1a
str r1, [sp, #0x24]
add r7, r0, r1
mov r1, #0xc
ldrsb r1, [r4, r1]
mov ip, r1
cmp r7, r1
blt _020198F4
lsl r1, r2, #0x14
lsr r1, r1, #0x1a
str r1, [sp, #0x1c]
ldr r1, [sp, #0x1c]
str r3, [sp, #0x18]
add r2, r3, r1
mov r1, #0xe
ldrsb r1, [r4, r1]
str r1, [sp, #0x14]
cmp r2, r1
blt _020198F4
ldr r1, [sp, #0x24]
mov r5, ip
lsl r1, r1, #0x18
str r0, [sp, #0x20]
asr r1, r1, #0x18
cmp r0, r5
bge _02019884
mov r5, ip
str r5, [sp, #0x20]
mov r5, ip
sub r0, r5, r0
sub r0, r1, r0
lsl r0, r0, #0x18
asr r1, r0, #0x18
_02019884:
cmp r7, r6
blt _02019890
sub r0, r7, r6
sub r0, r1, r0
lsl r0, r0, #0x18
asr r1, r0, #0x18
_02019890:
ldr r0, [sp, #0x1c]
ldr r5, [sp, #0x14]
lsl r0, r0, #0x18
asr r0, r0, #0x18
cmp r3, r5
bge _020198AA
add r3, r5, #0
add r6, r5, #0
ldr r5, [sp, #0x18]
sub r5, r6, r5
sub r0, r0, r5
lsl r0, r0, #0x18
asr r0, r0, #0x18
_020198AA:
ldr r5, [sp, #0x28]
cmp r2, r5
blt _020198B8
sub r2, r2, r5
sub r0, r0, r2
lsl r0, r0, #0x18
asr r0, r0, #0x18
_020198B8:
lsl r2, r3, #0x18
lsr r2, r2, #0x18
lsl r1, r1, #0x18
str r2, [sp]
lsr r1, r1, #0x18
lsl r0, r0, #0x18
str r1, [sp, #4]
lsr r0, r0, #0x18
str r0, [sp, #8]
mov r0, #0x10
str r0, [sp, #0xc]
ldr r0, [sp, #0x10]
ldr r3, [sp, #0x20]
ldrb r1, [r4, #0xa]
lsl r3, r3, #0x18
ldr r0, [r0]
mov r2, #0
lsr r3, r3, #0x18
bl FillBgTilemapRect
ldr r2, [sp, #0x10]
ldr r0, [sp, #0x10]
ldrh r2, [r2, #0xa]
ldrb r1, [r4, #0xa]
ldr r0, [r0]
lsl r2, r2, #0x11
lsr r3, r2, #0xf
ldr r2, _020198F8 ; =_020F6298
ldr r2, [r2, r3]
blx r2
_020198F4:
add sp, #0x2c
pop {r4, r5, r6, r7, pc}
.balign 4, 0
_020198F8: .word _020F6298
thumb_func_end sub_0201980C
thumb_func_start sub_020198FC
sub_020198FC: ; 0x020198FC
push {r3, r4}
ldr r4, [r0, #4]
lsl r1, r1, #4
add r1, r4, r1
strb r2, [r1, #8]
ldr r2, _0201992C ; =0xFFFFFFF8
strb r3, [r1, #9]
add r2, sp
ldrb r2, [r2, #0x10]
strb r2, [r1, #0xb]
ldrh r3, [r1, #4]
ldr r2, _02019930 ; =0xFFFF1FFF
and r3, r2
mov r2, #2
lsl r2, r2, #0xc
orr r3, r2
strh r3, [r1, #4]
ldrh r3, [r0, #0xa]
lsl r1, r2, #2
orr r1, r3
strh r1, [r0, #0xa]
pop {r3, r4}
bx lr
nop
_0201992C: .word 0xFFFFFFF8
_02019930: .word 0xFFFF1FFF
thumb_func_end sub_020198FC
thumb_func_start sub_02019934
sub_02019934: ; 0x02019934
push {r3, r4, r5, r6, r7, lr}
add r5, r0, #0
ldrh r1, [r5, #0xa]
lsl r0, r1, #0x10
lsr r0, r0, #0x1f
beq _02019970
ldr r0, _02019974 ; =0xFFFF7FFF
add r6, r5, #0
and r0, r1
strh r0, [r5, #0xa]
ldrh r0, [r5, #8]
add r6, #0xa
mov r4, #0
cmp r0, #0
bls _02019970
mov r7, #2
lsl r7, r7, #0xe
_02019956:
add r0, r5, #0
add r1, r4, #0
bl sub_02019978
cmp r0, #1
bne _02019968
ldrh r0, [r6]
orr r0, r7
strh r0, [r6]
_02019968:
ldrh r0, [r5, #8]
add r4, r4, #1
cmp r4, r0
blo _02019956
_02019970:
pop {r3, r4, r5, r6, r7, pc}
nop
_02019974: .word 0xFFFF7FFF
thumb_func_end sub_02019934
thumb_func_start sub_02019978
sub_02019978: ; 0x02019978
push {r4, r5, r6, lr}
add r5, r0, #0
add r6, r1, #0
ldr r2, [r5, #4]
lsl r4, r6, #4
add r2, r2, r4
ldrh r2, [r2, #4]
lsl r2, r2, #0x10
lsr r2, r2, #0x1d
bne _02019990
mov r0, #0
pop {r4, r5, r6, pc}
_02019990:
bl sub_0201980C
ldr r2, [r5, #4]
add r1, r2, #6
add r3, r2, r4
mov r2, #8
ldrsb r0, [r1, r4]
ldrsb r2, [r3, r2]
add r0, r0, r2
strb r0, [r1, r4]
ldr r2, [r5, #4]
add r1, r2, #7
add r3, r2, r4
mov r2, #9
ldrsb r0, [r1, r4]
ldrsb r2, [r3, r2]
add r0, r0, r2
strb r0, [r1, r4]
add r0, r5, #0
add r1, r6, #0
bl sub_020197F4
ldr r1, [r5, #4]
add r1, #0xb
ldrb r0, [r1, r4]
sub r0, r0, #1
strb r0, [r1, r4]
ldr r0, [r5, #4]
add r2, r0, r4
ldrb r0, [r2, #0xb]
cmp r0, #0
bne _020199DC
ldrh r1, [r2, #4]
ldr r0, _020199E0 ; =0xFFFF1FFF
and r0, r1
strh r0, [r2, #4]
mov r0, #0
pop {r4, r5, r6, pc}
_020199DC:
mov r0, #1
pop {r4, r5, r6, pc}
.balign 4, 0
_020199E0: .word 0xFFFF1FFF
thumb_func_end sub_02019978
thumb_func_start sub_020199E4
sub_020199E4: ; 0x020199E4
ldr r2, [r0, #4]
lsl r0, r1, #4
add r0, r2, r0
ldrh r0, [r0, #4]
lsl r0, r0, #0x10
lsr r0, r0, #0x1d
bx lr
.balign 4, 0
thumb_func_end sub_020199E4
thumb_func_start sub_020199F4
sub_020199F4: ; 0x020199F4
push {r3, r4, r5, r6, r7, lr}
sub sp, #8
str r2, [sp]
ldr r2, [r0, #4]
lsl r0, r1, #4
add r1, r2, r0
ldr r0, [r2, r0]
add r7, r3, #0
mov ip, r0
ldrh r0, [r1, #4]
add r1, sp, #0x10
lsl r0, r0, #0x1a
lsr r0, r0, #0x1a
mov lr, r0
ldrb r0, [r1, #0x14]
add r0, r7, r0
str r0, [sp, #4]
cmp r7, r0
bge _02019A58
ldrb r0, [r1, #0x18]
ldrb r1, [r1, #0x10]
ldr r6, _02019A5C ; =0x00000FFF
lsl r5, r0, #0xc
ldr r0, [sp]
add r2, r0, r1
_02019A26:
ldr r1, [sp]
add r0, r1, #0
cmp r0, r2
bge _02019A4C
mov r0, lr
mul r0, r7
lsl r3, r0, #1
mov r0, ip
add r3, r0, r3
_02019A38:
lsl r0, r1, #1
ldrh r4, [r3, r0]
and r4, r6
orr r4, r5
strh r4, [r3, r0]
add r0, r1, #1
lsl r0, r0, #0x10
lsr r1, r0, #0x10
cmp r1, r2
blt _02019A38
_02019A4C:
add r0, r7, #1
lsl r0, r0, #0x10
lsr r7, r0, #0x10
ldr r0, [sp, #4]
cmp r7, r0
blt _02019A26
_02019A58:
add sp, #8
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
_02019A5C: .word 0x00000FFF
thumb_func_end sub_020199F4
thumb_func_start sub_02019A60
sub_02019A60: ; 0x02019A60
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x10
str r0, [sp]
lsl r0, r1, #4
str r0, [sp, #0xc]
ldr r0, [sp]
mov r6, #0
ldr r1, [r0, #4]
ldr r0, [sp, #0xc]
add r3, r1, r0
ldr r0, [r1, r0]
mov ip, r0
ldrh r0, [r3, #4]
lsl r0, r0, #0x1a
lsr r0, r0, #0x1a
mov lr, r0
ldrh r0, [r2, #0xa]
lsl r0, r0, #0x11
lsr r7, r0, #0x11
ldrb r0, [r2, #9]
lsl r0, r0, #0x1c
lsr r0, r0, #0x10
str r0, [sp, #8]
ldrb r0, [r2, #8]
cmp r0, #0
ble _02019B04
_02019A94:
ldrb r0, [r2, #6]
add r3, r0, r6
ldr r0, [sp]
ldr r1, [r0, #4]
ldr r0, [sp, #0xc]
add r0, r1, r0
ldrh r0, [r0, #4]
lsl r0, r0, #0x14
lsr r0, r0, #0x1a
cmp r3, r0
bge _02019B04
ldrb r0, [r2, #7]
mov r1, #0
str r0, [sp, #4]
cmp r0, #0
ble _02019AF0
_02019AB4:
ldr r0, [sp]
ldrb r5, [r2, #5]
ldr r3, [r0, #4]
ldr r0, [sp, #0xc]
add r4, r5, r1
add r0, r3, r0
ldrh r0, [r0, #4]
lsl r0, r0, #0x1a
lsr r0, r0, #0x1a
cmp r4, r0
bge _02019AF0
ldr r0, [sp, #8]
add r3, r7, r1
add r0, r0, r3
ldrb r3, [r2, #6]
add r4, r3, r6
mov r3, lr
mul r4, r3
add r3, r5, r4
add r3, r1, r3
lsl r4, r3, #1
mov r3, ip
strh r0, [r3, r4]
add r0, r1, #1
lsl r0, r0, #0x10
lsr r1, r0, #0x10
ldrb r0, [r2, #7]
str r0, [sp, #4]
cmp r1, r0
blt _02019AB4
_02019AF0:
ldr r0, [sp, #4]
add r0, r7, r0
lsl r0, r0, #0x10
lsr r7, r0, #0x10
add r0, r6, #1
lsl r0, r0, #0x10
lsr r6, r0, #0x10
ldrb r0, [r2, #8]
cmp r6, r0
blt _02019A94
_02019B04:
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end sub_02019A60
thumb_func_start sub_02019B08
sub_02019B08: ; 0x02019B08
ldr r2, [r0, #4]
lsl r0, r1, #4
ldr r0, [r2, r0]
bx lr
thumb_func_end sub_02019B08
thumb_func_start sub_02019B10
sub_02019B10: ; 0x02019B10
ldr r2, [r0, #4]
lsl r0, r1, #4
add r0, r2, r0
ldrb r0, [r0, #0xa]
bx lr
.balign 4, 0
thumb_func_end sub_02019B10
thumb_func_start sub_02019B1C
sub_02019B1C: ; 0x02019B1C
push {r4, r5}
cmp r2, #0
beq _02019B2E
ldr r5, [r0, #4]
lsl r4, r1, #4
add r5, r5, r4
mov r4, #6
ldrsb r4, [r5, r4]
strb r4, [r2]
_02019B2E:
cmp r3, #0
beq _02019B3E
ldr r2, [r0, #4]
lsl r0, r1, #4
add r1, r2, r0
mov r0, #7
ldrsb r0, [r1, r0]
strb r0, [r3]
_02019B3E:
pop {r4, r5}
bx lr
.balign 4, 0
thumb_func_end sub_02019B1C
thumb_func_start sub_02019B44
sub_02019B44: ; 0x02019B44
push {r4, r5}
cmp r2, #0
beq _02019B58
ldr r5, [r0, #4]
lsl r4, r1, #4
add r4, r5, r4
ldrh r4, [r4, #4]
lsl r4, r4, #0x1a
lsr r4, r4, #0x1a
strh r4, [r2]
_02019B58:
cmp r3, #0
beq _02019B6A
ldr r2, [r0, #4]
lsl r0, r1, #4
add r0, r2, r0
ldrh r0, [r0, #4]
lsl r0, r0, #0x14
lsr r0, r0, #0x1a
strh r0, [r3]
_02019B6A:
pop {r4, r5}
bx lr
.balign 4, 0
thumb_func_end sub_02019B44
thumb_func_start sub_02019B70
sub_02019B70: ; 0x02019B70
push {r3, r4}
ldr r4, [r0, #4]
lsl r1, r1, #4
add r4, r4, r1
strb r2, [r4, #0xc]
ldr r2, [r0, #4]
add r2, r2, r1
strb r3, [r2, #0xd]
ldr r3, _02019B9C ; =0xFFFFFFF8
mov r2, #0x10
add r3, sp
ldrsb r4, [r3, r2]
ldr r2, [r0, #4]
add r2, r2, r1
strb r4, [r2, #0xe]
mov r2, #0x14
ldr r0, [r0, #4]
ldrsb r2, [r3, r2]
add r0, r0, r1
strb r2, [r0, #0xf]
pop {r3, r4}
bx lr
.balign 4, 0
_02019B9C: .word 0xFFFFFFF8
thumb_func_end sub_02019B70
thumb_func_start sub_02019BA0
sub_02019BA0: ; 0x02019BA0
bx lr
.balign 4, 0
thumb_func_end sub_02019BA0

View File

@ -3,48 +3,6 @@
.include "global.inc"
.text
.public sub_02020B3C
thumb_func_start sub_02020654
sub_02020654: ; 0x02020654
push {r3, r4, r5, lr}
add r4, r0, #0
add r0, r1, #0
mov r1, #0x30
mul r1, r4
bl Heap_Alloc
ldr r2, _02020670 ; =sub_02020684
add r1, r4, #0
add r5, r0, #0
bl NNS_G2dInitCellTransferStateManager
add r0, r5, #0
pop {r3, r4, r5, pc}
.balign 4, 0
_02020670: .word sub_02020684
thumb_func_end sub_02020654
thumb_func_start thunk_UpdateCellTransferStateManager
thunk_UpdateCellTransferStateManager: ; 0x02020674
ldr r3, _02020678 ; =NNS_G2dUpdateCellTransferStateManager
bx r3
.balign 4, 0
_02020678: .word NNS_G2dUpdateCellTransferStateManager
thumb_func_end thunk_UpdateCellTransferStateManager
thumb_func_start sub_0202067C
sub_0202067C: ; 0x0202067C
ldr r3, _02020680 ; =Heap_Free
bx r3
.balign 4, 0
_02020680: .word Heap_Free
thumb_func_end sub_0202067C
thumb_func_start sub_02020684
sub_02020684: ; 0x02020684
push {r3, lr}
bl GF_CreateNewVramTransferTask
pop {r3, pc}
thumb_func_end sub_02020684
thumb_func_start sub_0202068C
sub_0202068C: ; 0x0202068C
@ -585,98 +543,3 @@ _02020A00:
pop {r4, pc}
.balign 4, 0
thumb_func_end sub_020209E0
thumb_func_start sub_02020A0C
sub_02020A0C: ; 0x02020A0C
ldrb r3, [r0]
strb r3, [r1]
ldrb r0, [r0, #1]
strb r0, [r2]
bx lr
.balign 4, 0
thumb_func_end sub_02020A0C
thumb_func_start sub_02020A18
sub_02020A18: ; 0x02020A18
ldrb r3, [r0, #2]
strb r3, [r1]
ldrb r0, [r0, #3]
strb r0, [r2]
bx lr
.balign 4, 0
thumb_func_end sub_02020A18
thumb_func_start sub_02020A24
sub_02020A24: ; 0x02020A24
push {r4, r5}
ldr r5, _02020A9C ; =0xFFFFFFF8
ldr r4, [sp, #0xc]
add r5, sp
ldrb r5, [r5, #0x18]
cmp r5, #3
bhi _02020A64
add r5, r5, r5
add r5, pc
ldrh r5, [r5, #6]
lsl r5, r5, #0x10
asr r5, r5, #0x10
add pc, r5
_02020A3E: ; jump table
.short _02020A46 - _02020A3E - 2 ; case 0
.short _02020A4E - _02020A3E - 2 ; case 1
.short _02020A56 - _02020A3E - 2 ; case 2
.short _02020A5E - _02020A3E - 2 ; case 3
_02020A46:
lsl r4, r4, #3
add r4, r0, r4
ldrb r4, [r4, #4]
b _02020A64
_02020A4E:
lsl r4, r4, #3
add r4, r0, r4
ldrb r4, [r4, #5]
b _02020A64
_02020A56:
lsl r4, r4, #3
add r4, r0, r4
ldrb r4, [r4, #6]
b _02020A64
_02020A5E:
lsl r4, r4, #3
add r4, r0, r4
ldrb r4, [r4, #7]
_02020A64:
cmp r1, #0
beq _02020A6E
lsl r5, r4, #3
ldrb r5, [r0, r5]
strb r5, [r1]
_02020A6E:
cmp r2, #0
beq _02020A7A
lsl r1, r4, #3
add r1, r0, r1
ldrb r1, [r1, #1]
strb r1, [r2]
_02020A7A:
cmp r3, #0
beq _02020A86
lsl r1, r4, #3
add r1, r0, r1
ldrb r1, [r1, #2]
strb r1, [r3]
_02020A86:
ldr r2, [sp, #8]
cmp r2, #0
beq _02020A94
lsl r1, r4, #3
add r0, r0, r1
ldrb r0, [r0, #3]
strb r0, [r2]
_02020A94:
add r0, r4, #0
pop {r4, r5}
bx lr
nop
_02020A9C: .word 0xFFFFFFF8
thumb_func_end sub_02020A24

View File

@ -1,29 +1,39 @@
VOLTORB_FLIP_DIR := files/application/voltorb_flip
VOLTORB_FLIP_FILES := \
voltorb_flip_00000000.bin \
voltorb_flip_00000001.bin \
voltorb_flip_00000002.bin \
voltorb_flip_00000003.bin \
voltorb_flip_00000004.bin \
voltorb_flip_00000005.bin \
voltorb_flip_00000006.bin \
voltorb_flip_00000007.bin \
voltorb_flip_00000008.bin \
voltorb_flip_00000009.bin \
voltorb_flip_00000010.bin \
voltorb_flip_00000011.bin \
voltorb_flip_00000012.bin \
voltorb_flip_00000013.bin \
voltorb_flip_00000014.bin \
voltorb_flip_00000015.bin \
voltorb_flip_00000016.bin \
voltorb_flip_00000017.bin
voltorb_flip_00000000.NCLR \
voltorb_flip_00000001.NCLR \
voltorb_flip_00000002.NCGR.lz \
voltorb_flip_00000003.NCGR.lz \
voltorb_flip_00000004.NSCR.lz \
voltorb_flip_00000005.NSCR.lz \
voltorb_flip_00000006.NSCR.lz \
voltorb_flip_00000007.NSCR.lz \
voltorb_flip_00000008.NSCR.lz \
voltorb_flip_00000009.NSCR.lz \
voltorb_flip_00000010.NCLR \
voltorb_flip_00000011.NCGR.lz \
voltorb_flip_00000012.NCER.lz \
voltorb_flip_00000013.NANR.lz \
voltorb_flip_00000014.NCLR \
voltorb_flip_00000015.NCGR.lz \
voltorb_flip_00000016.NCER.lz \
voltorb_flip_00000017.NANR.lz
EXTFMT_LZ_FILES += $(addprefix $(VOLTORB_FLIP_DIR)/,$(filter %.lz,$(VOLTORB_FLIP_FILES)))
VERSION101_SOPC_NCGR_FILES += \
$(VOLTORB_FLIP_DIR)/voltorb_flip_00000002.NCGR \
$(VOLTORB_FLIP_DIR)/voltorb_flip_00000003.NCGR
CLOBBER_SIZE_VERSION101_NCGR_FILES += \
$(VOLTORB_FLIP_DIR)/voltorb_flip_00000011.NCGR \
$(VOLTORB_FLIP_DIR)/voltorb_flip_00000015.NCGR
$(VOLTORB_FLIP_DIR).narc: $(addprefix $(VOLTORB_FLIP_DIR)/,$(VOLTORB_FLIP_FILES))
$(KNARC) -p $@ -d $(VOLTORB_FLIP_DIR) -i
clean-voltorb-flip:
$(RM) $(VOLTORB_FLIP_DIR).narc
$(RM) $(VOLTORB_FLIP_DIR).narc $(VOLTORB_FLIP_DIR)/*.lz
.PHONY: clean-voltorb-flip
clean-filesystem: clean-voltorb-flip

View File

@ -0,0 +1,2 @@
*.NCGR
*.lz

View File

@ -0,0 +1,5 @@
*.NCGR
*.NSCR
*.NCER
*.NANR
*.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

View File

@ -12,8 +12,11 @@ $(8BPP_NOPAD_NCLR_PNG_FILES): GFX_FLAGS = -bitdepth 8 -nopad
$(8BPP_COMP10_NOPAD_NCLR_PAL_FILES): GFX_FLAGS = -bitdepth 8 -nopad -comp 10
$(4BPP_NOPAD_PCMP_NCLR_FILES): GFX_FLAGS = -bitdepth 4 -nopad -pcmp
LZ_FLAGS := -l2 -s
$(PADDED_LZ_FILES): LZ_FLAGS += -A4
LZ_FLAGS = -nopad
$(EXTFMT_LZ_FILES): LZ_FLAGS = -nopad -extfmt
# note: this is as of yet unused
$(PADDED_LZ_FILES): LZ_FLAGS =
%.NCGR: %.png
$(GFX) $< $@ $(GFX_FLAGS)
@ -31,4 +34,4 @@ $(PADDED_LZ_FILES): LZ_FLAGS += -A4
$(GFX) $< $@ $(GFX_FLAGS)
%.lz: %
$(NTRCOMP) $(LZ_FLAGS) -o $@ $<
$(GFX) $< $@ $(LZ_FLAGS)

View File

@ -64,6 +64,13 @@ typedef enum PocketType {
POCKET_TYPE_BERRIES,
} PocketType;
typedef struct UnkStruct_0203FC14 {
FieldSystem *fieldSystem;
SaveData *saveData;
int unk8;
u8 unkC;
} UnkStruct_0203FC14;
struct UnkStruct_ScrCmd230 {
u8 filler_00[0x30];
u8 unk_30[6];

View File

@ -13,7 +13,7 @@
#include "pokemon_types_def.h"
#include "task.h"
#include "unk_02014DA0.h"
#include "unk_02020654.h"
#include "unk_02020A0C.h"
#include "unk_0202E41C.h"
#include "yes_no_prompt.h"
@ -393,7 +393,7 @@ struct PartyMenu {
LISTMENUITEM *listMenuItems; // 0x820
PartyMenuContextMenuCursor *contextMenuCursor;
PartyMenuMonsDrawState monsDrawState[PARTY_SIZE]; // 0x828
const UnkStruct_02020654 *unk_948;
const DpadMenuBox *dpadMenuBox;
PartyMenuSwapMonsData swapMonsData;
int (*itemUseCallback)(PartyMenu *);
int (*yesCallback)(PartyMenu *); // 0xc58

View File

@ -99,12 +99,12 @@ BOOL sub_0200D294(SpriteSystem *spriteSystem, SpriteManager *spriteManager, cons
BOOL sub_0200D2A4(SpriteSystem *spriteSystem, SpriteManager *spriteManager, const u16 *fileIdList, int loadCharMode, int loadPlttMode);
Sprite *SpriteSystem_CreateSpriteFromResourceHeader(SpriteSystem *spriteSystem, SpriteManager *spriteManager, const UnmanagedSpriteTemplate *template);
BOOL SpriteSystem_InitManagerWithCapacities(SpriteSystem *spriteSystem, SpriteManager *spriteManager, SpriteResourceCountsListUnion *countsArray);
BOOL SpriteSystem_LoadCharResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId);
BOOL SpriteSystem_LoadCharResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId);
s8 SpriteSystem_LoadPlttResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId SpriteSystem_LoadPlttResObj, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId);
s8 SpriteSystem_LoadPlttResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *SpriteSystem_LoadPlttResObj, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId);
u8 SpriteSystem_LoadPaletteBuffer(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId);
u8 SpriteSystem_LoadPaletteBufferFromOpenNarc(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId);
BOOL SpriteSystem_LoadCharResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int vram, int resId);
BOOL SpriteSystem_LoadCharResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int vram, int resId);
s8 SpriteSystem_LoadPlttResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId SpriteSystem_LoadPlttResObj, int fileId, BOOL compressed, int pltt_num, int vram, int resId);
s8 SpriteSystem_LoadPlttResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *SpriteSystem_LoadPlttResObj, int fileId, BOOL compressed, int pltt_num, int vram, int resId);
u8 SpriteSystem_LoadPaletteBuffer(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int pltt_num, int vram, int resId);
u8 SpriteSystem_LoadPaletteBufferFromOpenNarc(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int pltt_num, int vram, int resId);
BOOL SpriteSystem_LoadCellResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int resId);
BOOL SpriteSystem_LoadCellResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int resId);
BOOL SpriteSystem_LoadAnimResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int resId);
@ -112,7 +112,7 @@ BOOL SpriteSystem_LoadAnimResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteM
ManagedSprite *SpriteSystem_NewSprite(SpriteSystem *spriteSystem, SpriteManager *spriteManager, const ManagedSpriteTemplate *unkTemplate);
ManagedSprite *SpriteSystem_NewSpriteWithYOffset(SpriteSystem *spriteSystem, SpriteManager *spriteManager, const ManagedSpriteTemplate *unkTemplate, fx32 yOffset);
NNSG2dImagePaletteProxy *SpriteManager_FindPlttResourceProxy(SpriteManager *spriteManager, int id);
int SpriteManager_FindPlttResourceOffset(SpriteManager *spriteManager, int id, NNS_G2D_VRAM_TYPE vram);
int SpriteManager_FindPlttResourceOffset(SpriteManager *spriteManager, int id, int vram);
BOOL SpriteManager_UnloadCharObjById(SpriteManager *spriteManager, u32 character);
BOOL SpriteManager_UnloadPlttObjById(SpriteManager *spriteManager, u32 pal);
BOOL SpriteManager_UnloadCellObjById(SpriteManager *spriteManager, u32 cell);
@ -143,7 +143,7 @@ void ManagedSprite_SetDrawFlag(ManagedSprite *managedSprite, int flag);
BOOL thunk_Sprite_GetDrawFlag(Sprite *sprite);
BOOL ManagedSprite_GetDrawFlag(ManagedSprite *managedSprite);
void thunk_Sprite_SetPaletteOverride(Sprite *sprite, int flag);
void ManagedSprite_SetPaletteOverride(ManagedSprite *managedSprite, int flag);
void ManagedSprite_SetPaletteOverride(ManagedSprite *managedSprite, int index);
void thunk_Sprite_SetPaletteOffset(Sprite *sprite, u8 a1);
void ManagedSprite_SetPaletteOverrideOffset(ManagedSprite *managedSprite, u8 a1);
u8 ManagedSprite_GetPaletteOverrideOffset(ManagedSprite *managedSprite);
@ -190,9 +190,9 @@ void ManagedSprite_SetOamMode(ManagedSprite *managedSprite, GXOamMode mode);
GXOamMode thunk_Sprite_GetOamMode(Sprite *sprite);
GXOamMode ManagedSprite_GetOamMode(ManagedSprite *managedSprite);
u32 ManagedSprite_GetUserAttrForCurrentAnimFrame(ManagedSprite *managedSprite);
BOOL SpriteSystem_LoadCharResObjWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId);
BOOL SpriteSystem_LoadCharResObjAtEndWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId);
BOOL SpriteSystem_LoadCharResObjFromOpenNarcWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId);
BOOL SpriteSystem_LoadCharResObjWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int vram, int resId);
BOOL SpriteSystem_LoadCharResObjAtEndWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int vram, int resId);
BOOL SpriteSystem_LoadCharResObjFromOpenNarcWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int vram, int resId);
void SpriteSystem_ReplaceCharResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int resId);
void SpriteSystem_ReplacePlttResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int resId);
SpriteList *SpriteManager_GetSpriteList(SpriteManager *spriteManager);

View File

@ -90,15 +90,15 @@ typedef struct GF_2DGfxResObjList {
GF_2DGfxResMan *Create2DGfxResObjMan(int num, GfGfxResType type, enum HeapID heapID);
void Destroy2DGfxResObjMan(GF_2DGfxResMan *mgr);
SpriteResource *Add2DGfxResObjFromHeader(GF_2DGfxResMan *mgr, const GF_2DGfxResHeader *header, int idx, enum HeapID heapID);
SpriteResource *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID);
SpriteResource *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID);
SpriteResource *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, enum HeapID heapID);
SpriteResource *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, enum HeapID heapID);
SpriteResource *AddCellOrAnimResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, GfGfxResType type, enum HeapID heapID);
void ReplaceCharResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, enum HeapID heapID);
void ReplacePlttResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, enum HeapID heapID);
SpriteResource *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID);
SpriteResource *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID, BOOL atEnd);
SpriteResource *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID);
SpriteResource *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID, BOOL atEnd);
SpriteResource *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, enum HeapID heapID);
SpriteResource *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, enum HeapID heapID, BOOL atEnd);
SpriteResource *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, enum HeapID heapID);
SpriteResource *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, enum HeapID heapID, BOOL atEnd);
SpriteResource *AddCellOrAnimResObjFromOpenNarc(GF_2DGfxResMan *resMan, NARC *narc, int fileId, BOOL compressed, int id, GfGfxResType type, enum HeapID heapID);
void ReplaceCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, enum HeapID heapID);
void ReplacePlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, enum HeapID heapID);
@ -129,6 +129,6 @@ int GF2DGfxResHeader_GetNarcMemberIdByIndex(GF_2DGfxResHeader *header, int idx);
BOOL GF2DGfxResHeader_GetCompressFlagByIndex(GF_2DGfxResHeader *header, int idx);
int GF2DGfxResHeader_GetExDat0ByIndex(GF_2DGfxResHeader *header, int idx);
int GF2DGfxResHeader_GetExDat1ByIndex(GF_2DGfxResHeader *header, int idx);
void GF2DGfxResObj_LoadExDat(SpriteResource *obj, GfGfxResType type, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID);
void GF2DGfxResObj_LoadExDat(SpriteResource *obj, GfGfxResType type, int vram, int pltt_num, enum HeapID heapID);
#endif // POKEHEARTGOLD_UNK_0200A090_H

View File

@ -5,21 +5,6 @@
#include "heap.h"
#include "overlay_manager.h"
#include "save.h"
#include "unk_02020654.h"
typedef struct UnkStruct_0203FC14 {
FieldSystem *fieldSystem;
SaveData *saveData;
int unk8;
u8 unkC;
} UnkStruct_0203FC14;
void *sub_02019BA4(const void *, const void *, const void *, void *, int, u8, enum HeapID);
void sub_02019BDC(void *);
int sub_02019F74(void *);
void sub_02019F7C(void *, int);
int sub_02019D18(void *);
const UnkStruct_02020654 *sub_0201A018(void *, int);
BOOL sub_020192D0(OverlayManager *man, int *state);
BOOL sub_0201935C(OverlayManager *man, int *state);

49
include/unk_02019BA4.h Normal file
View File

@ -0,0 +1,49 @@
#ifndef POKEHEARTGOLD_UNK_02019BA4_H
#define POKEHEARTGOLD_UNK_02019BA4_H
#include "touchscreen.h"
#include "unk_02020A0C.h"
#define GRID_MENU_NOTHING_CHOSEN -1
#define GRID_MENU_CANCEL -2
#define GRID_MENU_CURSOR_MOVE -3
#define GRID_MENU_BUTTON_MODE -4
typedef void (*DpadGridCallback)(void *data, int newTarget, int prevTarget);
typedef struct GridCallbacks {
DpadGridCallback onButton;
DpadGridCallback onSwitchToTouchMode;
DpadGridCallback onKeyMove;
DpadGridCallback onTouch;
} GridCallbacks;
typedef struct GridInputHandler {
const TouchscreenHitbox *touchscreenHitboxes; // 0x00
const DpadMenuBox *dpadPositions; // 0x04
BOOL isButtons; // 0x08
u8 modeSwitchLagFrame; // 0x0C
u8 nextInput; // 0x0D
u8 lastInput; // 0x0E
u8 unk_0F; // 0x0F
u32 enabledFlag[2]; // 0x10
const GridCallbacks *callbacks; // 0x18
void *data; // 0x1C, passed as data to unk_18
} GridInputHandler;
GridInputHandler *GridInputHandler_Create(const TouchscreenHitbox *hitBoxes, const DpadMenuBox *dpadBoxes, const GridCallbacks *callbacks, void *callbackParam, BOOL inputState, u8 initialPos, enum HeapID heapId);
void GridInputHandler_Free(GridInputHandler *inputHandler);
int GridInputHandler_HandleInput_NoHold(GridInputHandler *inputHandler);
int GridInputHandler_HandleInput_AllowHold(GridInputHandler *inputHandler);
int GridInputHandler_GetNextInput(GridInputHandler *inputHandler);
int GridInputHandler_GetUnk0F(GridInputHandler *inputHandler);
void GridInputHandler_SetNextInput(GridInputHandler *inputHandler, int nextInput);
void GridInputHandler_SetNextLastUnk0FInputs(GridInputHandler *inputHandler, int nextInput, int lastInput, int unk0F);
BOOL GridInputHandler_IsButtonInputMode(GridInputHandler *inputHandler);
void GridInputHandler_SetButtonInputMode(GridInputHandler *inputHandler, BOOL isButtons);
void GridInputHandler_SetAllEnabled(GridInputHandler *inputHandler);
void GridInputHandler_ClearEnabledFlag(GridInputHandler *inputHandler, u32 target);
void GridInputHandler_SetEnabledFlag(GridInputHandler *inputHandler, u32 target);
const DpadMenuBox *GridInputHandler_GetDpadBox(GridInputHandler *inputHandler, int target);
#endif // POKEHEARTGOLD_UNK_02019BA4_H

View File

@ -1,23 +0,0 @@
#ifndef POKEHEARTGOLD_UNK_02020654_H
#define POKEHEARTGOLD_UNK_02020654_H
#include "heap.h"
typedef struct UnkStruct_02020654 {
u8 unk_0;
u8 unk_1;
u8 unk_2;
u8 unk_3;
u8 unk_4;
u8 unk_5;
u8 unk_6;
u8 unk_7;
} UnkStruct_02020654;
NNSG2dCellTransferState *sub_02020654(int a0, enum HeapID heapID);
void sub_02020A0C(const UnkStruct_02020654 *a0, u8 *a1, u8 *a2);
void thunk_UpdateCellTransferStateManager(void);
void sub_0202067C(NNSG2dCellTransferState *state);
u8 sub_02020A24(const UnkStruct_02020654 *a0, u8 *px, u8 *py, int a3, int a4, int partyMonIndex, int direction);
#endif // POKEHEARTGOLD_UNK_02020654_H

21
include/unk_02020A0C.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef POKEHEARTGOLD_UNK_02020A0C_H
#define POKEHEARTGOLD_UNK_02020A0C_H
#include "heap.h"
typedef struct DpadMenuBox {
u8 left;
u8 top;
u8 width;
u8 height;
u8 buttonUp;
u8 buttonDown;
u8 buttonLeft;
u8 buttonRight;
} DpadMenuBox;
void DpadMenuBox_GetPosition(const DpadMenuBox *dpadBoxes, u8 *px, u8 *py);
void DpadMenuBox_GetDimensions(const DpadMenuBox *dpadBoxes, u8 *pw, u8 *ph);
u8 DpadMenuBox_GetNeighborInDirection(const DpadMenuBox *dpadBoxes, u8 *px, u8 *py, u8 *pw, u8 *ph, u8 partyMonIndex, u8 direction);
#endif // POKEHEARTGOLD_UNK_02020A0C_H

View File

@ -12,24 +12,24 @@
#include "player_data.h"
#include "sprite_system.h"
#include "touchscreen_list_menu.h"
#include "yes_no_prompt.h"
typedef struct Ov122_021E70B8 {
typedef struct VFCardFlipAnim {
BgConfig *bgConfig;
GameState *game;
Ov122_021E8CFC *unk8;
int unkC;
u8 unk10;
u8 unk11;
u8 unk12;
u8 unk13;
} Ov122_021E70B8;
VoltorbFlipGameState *game;
VoltorbFlipInputHandler *inputHandler;
int mode;
u8 step;
u8 cursorPos;
u8 frame;
u8 row;
} VFCardFlipAnim;
typedef struct Ov122_021E7888 {
u8 unk0;
u8 unk1[0x3];
} Ov122_021E7888;
typedef struct VoltorbFlipAppWork {
typedef struct VoltorbFlipAppData {
enum HeapID heapID;
Options *options;
u16 *coins;
@ -37,32 +37,31 @@ typedef struct VoltorbFlipAppWork {
PlayerProfile *profile;
NARC *narc;
BgConfig *bgConfig;
void *unk1C;
void *listMenuSpawner;
TouchscreenListMenu *menu;
Window windows[17];
LISTMENUITEM *menuItems[2];
void *unk13C;
YesNoPrompt *yesNoPrompt;
String *string;
SpriteSystem *spriteRenderer;
SpriteManager *spriteGfxHandler;
ManagedSprite *unk14C[0xd];
ManagedSprite *sprites[13];
MsgData *msgData;
MessageFormat *msgFmt;
u16 unk188[10][8];
u8 unk228;
u8 menuInputState;
u8 unk229;
u8 unk22A;
u8 printerId;
u16 payoutDisplay;
u8 unk22E[0x2];
int unk230;
int unk234;
int unk238;
struct WorkflowEngine *workflow;
struct Ov122_021E8CFC *unk240;
GameState *game;
Ov122_021E70B8 unk248;
Ov122_021E7888 unk25C;
} VoltorbFlipAppWork;
BOOL hasPlayedOneLeve;
BOOL printedCanGetMoreCoinsMessage;
BOOL memoOpen;
struct VoltorbFlipTaskEngine *workflow;
VoltorbFlipInputHandler *inputHandler;
VoltorbFlipGameState *game;
VFCardFlipAnim cardFlipControl;
u8 screenIsDimmed;
} VoltorbFlipAppData;
#endif // POKEHEARTGOLD_VOLTORB_FLIP_WORK_H

View File

@ -1,31 +0,0 @@
#ifndef POKEHEARTGOLD_VOLTORB_FLIP_DATA_H
#define POKEHEARTGOLD_VOLTORB_FLIP_DATA_H
#include "bg_window.h"
#include "touchscreen_list_menu.h"
typedef struct Ov122_021E9278 {
u8 unk0[5][2];
TouchscreenListMenuTemplate menuTemplate;
} Ov122_021E9278;
typedef struct MsgNoList {
const u8 *msgNos;
int size;
} MsgNoList;
typedef struct Ov122_021E6C2C {
int unk0;
int unk4;
int unk8;
} Ov122_021E6C2C;
typedef struct BgTemplates {
BgTemplate unk0[6];
} BgTemplates;
extern const u8 sMainMenuMsgNos[];
extern const u8 sGameInfoMsgNos[];
extern const u8 ov122_021E9270[];
#endif // POKEHEARTGOLD_VOLTORB_FLIP_DATA_H

View File

@ -38,7 +38,7 @@ typedef enum RoundOutcome {
ROUND_OUTCOME_QUIT,
ROUND_OUTCOME_WON,
ROUND_OUTCOME_LOST,
} RoundOutcome;
} VoltorbFlipRoundOutcome;
// Internally, levels are encoded in descending order:
//
@ -62,7 +62,7 @@ typedef struct Card {
} Card;
typedef struct RoundSummary {
RoundOutcome roundOutcome;
VoltorbFlipRoundOutcome roundOutcome;
u8 cardsFlipped;
u8 boardId;
Level level;
@ -74,7 +74,7 @@ typedef struct GameState {
u8 pointsPerRow[5];
u8 voltorbsPerCol[5];
u8 voltorbsPerRow[5];
RoundOutcome roundOutcome;
VoltorbFlipRoundOutcome roundOutcome;
u16 payout;
u16 maxPayout;
u16 multiplierCards; // number of x2 and x3 cards on board
@ -83,9 +83,9 @@ typedef struct GameState {
u8 boardId;
Level level;
u8 historyHead; // index of current game in `boardHistory`
u8 unk150[0x4];
RoundSummary boardHistory[5];
} GameState;
u8 filler[4];
RoundSummary boardHistory[5]; // this is a ring buffer
} VoltorbFlipGameState;
// This structure specifies the number of Voltorbs, x2, and x3 cards in the
// round and defines restrictions on the boards that can be generated.
@ -105,26 +105,26 @@ typedef struct BoardConfig {
u8 maxFreeMultipliers : 4;
} BoardConfig;
GameState *CreateGameState(enum HeapID);
void FreeGameState(GameState *);
void NewBoard(GameState *);
void ov122_021E8528(GameState *);
void SetRoundOutcome(GameState *, RoundOutcome);
void MultiplyPayoutAndUpdateCardsFlipped(GameState *, CardType);
void FlipCard(GameState *, int);
BOOL DeductFromPayout(GameState *, u8);
BOOL IsCardFlipped(GameState *, int);
BOOL EarnedMaxPayout(GameState *);
CardType GetCardType(GameState *, int);
int IsCardMemoFlagOn(GameState *, int, int);
void ToggleCardMemo(GameState *, int, int);
int PointsAlongAxis(GameState *, Axis, u8);
int VoltorbsAlongAxis(GameState *, Axis, u8);
int FlippedCardsAlongAxis(GameState *, Axis, u8);
u16 GamePayout(GameState *);
u8 MultiplierCards(GameState *);
u8 MultiplierCardsFlipped(GameState *);
u8 GameLevel(GameState *);
int LevelsGained(GameState *);
VoltorbFlipGameState *VoltorbFlip_CreateGameState(enum HeapID);
void VoltorbFlip_FreeGameState(VoltorbFlipGameState *gameState);
void VoltorbFlipGameState_NewBoard(VoltorbFlipGameState *gameState);
void VoltorbFlipGameState_UpdateHistoryAndReset(VoltorbFlipGameState *);
void VoltorbFlipGameState_SetRoundOutcome(VoltorbFlipGameState *, VoltorbFlipRoundOutcome);
void VoltorbFlipGameState_MultiplyPayoutAndUpdateCardsFlipped(VoltorbFlipGameState *, CardType);
void VoltorbFlipGameState_FlipCard(VoltorbFlipGameState *, int);
BOOL VoltorbFlipGameState_DeductFromPayout(VoltorbFlipGameState *, u8);
BOOL VoltorbFlipGameState_IsCardFlipped(VoltorbFlipGameState *, int);
BOOL VoltorbFlipGameState_HasEarnedMaxPayout(VoltorbFlipGameState *);
CardType VoltorbFlipGameState_GetCardType(VoltorbFlipGameState *, int);
BOOL VoltorbFlipGameState_IsCardMemoFlagOn(VoltorbFlipGameState *, int, int);
void VoltorbFlipGameState_ToggleCardMemo(VoltorbFlipGameState *, int, int);
int VoltorbFlipGameStates_GetPointsAlongAxis(VoltorbFlipGameState *, Axis, u8);
int VoltorbFlipGameState_GetVoltorbsAlongAxis(VoltorbFlipGameState *, Axis, u8);
int VoltorbFlipGameState_CountFlippedCardsAlongAxis(VoltorbFlipGameState *, Axis, u8);
u16 VoltorbFlipGameState_GetGamePayout(VoltorbFlipGameState *);
u8 VoltorbFlipGameState_GetMultiplierCards(VoltorbFlipGameState *);
u8 VoltorbFlipGameState_GetMultiplierCardsFlipped(VoltorbFlipGameState *);
u8 VoltorbFlipGameState_GetGameLevel(VoltorbFlipGameState *);
int VoltorbFlipGameState_CalculateLevelsGained(VoltorbFlipGameState *);
#endif // POKEHEARTGOLD_VOLTORB_FLIP_GAME_H

View File

@ -1,42 +1,47 @@
#ifndef POKEHEARTGOLD_VOLTORB_FLIP_INPUT_H
#define POKEHEARTGOLD_VOLTORB_FLIP_INPUT_H
#include "sprite_system.h"
#include "unk_02019BA4.h"
typedef struct Ov122_021E8CFC {
struct ManagedSprite *unk0;
struct ManagedSprite *unk4;
void *unk8;
u8 unkC;
u8 unkD;
u8 unkEx : 4;
u8 unkEy : 4;
u8 memoOpen : 1;
u8 memoFocused : 1;
u8 unkFz : 1;
u8 unkFp : 5;
} Ov122_021E8CFC;
typedef enum VoltorbFlipInput {
VOLTORB_FLIP_INPUT_GRID_BEGIN = 0,
VOLTORB_FLIP_INPUT_GRID_END = 24,
VOLTORB_FLIP_INPUT_MEMO,
VOLTORB_FLIP_INPUT_QUIT,
// Pseudo-input codes for wrapping around horizontally.
// These put the cursor in the last-observed row on either
// the first or last column.
VOLTORB_FLIP_COL4_ROWLAST,
VOLTORB_FLIP_COL0_ROWLAST,
typedef void (*Ov122UnkCB)(struct Ov122_021E8CFC *a0, int a1, int a2);
// relative consts
VOLTORB_FLIP_INPUT_GRID_NUM = VOLTORB_FLIP_INPUT_GRID_END + 1,
} VoltorbFlipInput;
Ov122_021E8CFC *ov122_021E8CFC(enum HeapID, struct ManagedSprite *, struct ManagedSprite *);
void ov122_021E8D58(Ov122_021E8CFC *);
int ov122_021E8D74(Ov122_021E8CFC *);
void ov122_021E8D8C(Ov122_021E8CFC *, int);
void SetMemoOpen(Ov122_021E8CFC *, BOOL);
void SetMemoFocused(Ov122_021E8CFC *, BOOL);
int ov122_021E8DF0(Ov122_021E8CFC *);
int ov122_021E8E0C(Ov122_021E8CFC *);
BOOL ov122_021E8E28(Ov122_021E8CFC *);
void ov122_021E8E40(Ov122_021E8CFC *);
void ov122_021E8E58(Ov122_021E8CFC *);
int ov122_021E8E70(Ov122_021E8CFC *);
typedef struct VoltorbFlipInputHandler {
struct ManagedSprite *boardCursorSprite; // 0x0
struct ManagedSprite *memoCursorSprite; // 0x4
GridInputHandler *gridInputHandler; // 0x8
u8 selectedRow; // 0xC
u8 focus; // 0xD
u8 memoButtonID : 4; // 0xE:0
u8 lastMemoButtonID : 4; // 0xE:4
u8 memoOpen : 1; // 0xF:0
u8 memoFocused : 1; // 0xF:1
u8 touchNew : 1; // 0xF:2
} VoltorbFlipInputHandler;
struct Ov122_021E8CFC;
void ov122_021E91D0(struct Ov122_021E8CFC *a0, int a1, int a2);
void ov122_021E91F4(struct Ov122_021E8CFC *a0, int a1, int a2);
void ov122_021E91F8(struct Ov122_021E8CFC *a0, int a1, int a2);
void ov122_021E925C(struct Ov122_021E8CFC *a0, int a1, int a2);
VoltorbFlipInputHandler *VoltorbFlipInputHandler_Create(enum HeapID heapID, struct ManagedSprite *boardCursorSprite, struct ManagedSprite *memoCursorSprite);
void VoltorbFlipInputHandler_Free(VoltorbFlipInputHandler *inputHandler);
int VoltorbFlipInputHandler_HandleInput(VoltorbFlipInputHandler *inputHandler);
void VoltorbFlipInputHandler_SetBoardFocused(VoltorbFlipInputHandler *inputHandler, BOOL draw);
void VoltorbFlipInputHandler_SetMemoOpen(VoltorbFlipInputHandler *inputHandler, BOOL open);
void VoltorbFlipInputHandler_SetMemoFocused(VoltorbFlipInputHandler *inputHandler, BOOL focused);
int VoltorbFlipInputHandler_GetCursorPos(VoltorbFlipInputHandler *inputHandler);
int VoltorbFlipInputHandler_GetMemoButtonID(VoltorbFlipInputHandler *inputHandler);
BOOL VoltorbFlipInputHandler_IsCursorInGridRange(VoltorbFlipInputHandler *inputHandler);
void VoltorbFlipInputHandler_SetGridCursor0(VoltorbFlipInputHandler *inputHandler);
void VoltorbFlipInputHandler_SetMemoCursor0(VoltorbFlipInputHandler *inputHandler);
int VoltorbFlipInputHandler_GetTouchNew(VoltorbFlipInputHandler *inputHandler);
#endif // POKEHEARTGOLD_VOLTORB_FLIP_INPUT_H

View File

@ -1,50 +1,69 @@
#ifndef POKEHEARTGOLD_VOLTORB_FLIP_INTERNAL_H
#define POKEHEARTGOLD_VOLTORB_FLIP_INTERNAL_H
#include "voltorb_flip/voltorb_flip_work.h"
#include "voltorb_flip/voltorb_flip_workflow.h"
typedef enum VoltorbFlipSpriteID {
VF_SPRITE_00,
VF_SPRITE_FLIPPING_CARD,
VF_SPRITE_02,
VF_SPRITE_03,
VF_SPRITE_MEMO,
VF_SPRITE_TOGGLE_MEMO_VOLTORB,
VF_SPRITE_TOGGLE_MEMO_ONE,
VF_SPRITE_TOGGLE_MEMO_TWO,
VF_SPRITE_TOGGLE_MEMO_THREE,
VF_SPRITE_MEMO_CURSOR,
VF_SPRITE_10,
VF_SPRITE_11,
VF_SPRITE_12,
VF_SPRITE_NUM,
} VoltorbFlipSpriteID;
BOOL ov122_021E5BA8(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E5BE4(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL GenerateBoardAndPrintNewLevel(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintYouCanEarnEvenMoreCoins(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E5D24(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintPlayNewRound(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E5DB4(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL AwaitMainMenuSelection(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintWhichSetOfInfo(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E5E34(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL AwaitGameInfoSelection(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL OpenHowToPlayScreen(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintHowToPlayMsg(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL CloseTutorialScreen(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL OpenHintScreen(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintHintMsg(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL CloseTutorialScreen(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL OpenAboutMemoScreen(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintAboutMemoMsg(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL CloseTutorialScreen(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL RenderBoard(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL AwaitBoardInteraction(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E6008(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PlaySuspensefulFanfare(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL StartCardFlipEffect(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL AwaitCardFlipAndResult(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E6358(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PlayWinRoundFanfare(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL AwardCoins(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E64E8(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E6594(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E65F4(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E65FC(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E67E0(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E66CC(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E66FC(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E6700(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E67DC(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL PrintAreYouSureYouWantToQuit(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E6900(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL AwaitQuitYesNoSelection(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
BOOL ov122_021E69DC(WorkflowEngine *a0, VoltorbFlipAppWork *a1);
#include "voltorb_flip/voltorb_flip_app_data.h"
#include "voltorb_flip/voltorb_flip_tasks.h"
BOOL VoltorbFlipTaskEngine_InitChecks_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_InitChecks_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_NewRound_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_NewRound_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_NewRound_TidyUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_SelectMainMenu_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_SelectMainMenu_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_SelectMainMenu_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_SelectGameInfo_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_SelectGameInfo_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_SelectGameInfo_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_HowToPlayScreen_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_HowToPlayScreen_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_TutorialScreens_TidyUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_HintScreen_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_HintScreen_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_TutorialScreens_TidyUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_AboutMemoScreen_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_AboutMemoScreen_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_TutorialScreens_TidyUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_RenderBoard_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_BoardInteraction_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_BoardInteraction_TidyUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltrbFlipWorkflow_CardFlipEffect_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_CardFlipEffect_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_CardFlipEffect_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_CardFlipEffect_End(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_WinRound_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_AwardCoins_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_RevealBoard_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_RevealBoard_End(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_MemoTouch_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_MemoTouch_Run(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_Memo_TidyUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_MemoButtons_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_MemoButtons_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_MemoTouch_Main(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_MemoTouch_End(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_QuitRound_SetUp(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_QuitRound_Begin(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_QuitRound_Run(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
BOOL VoltorbFlipTaskEngine_QuitRound_End(VoltorbFlipTaskEngine *taskEngine, VoltorbFlipAppData *voltorbFlip);
extern const VoltorbFlipTasks sVoltorbFlipWorkflows;
#endif // POKEHEARTGOLD_VOLTORB_FLIP_INTERNAL_H

View File

@ -1,10 +1,10 @@
#ifndef POKEHEARTGOLD_VOLTORB_FLIP_WORKFLOW_H
#define POKEHEARTGOLD_VOLTORB_FLIP_WORKFLOW_H
#include "voltorb_flip/voltorb_flip_work.h"
#include "voltorb_flip/voltorb_flip_app_data.h"
typedef enum Workflow {
WORKFLOW_UNK_0,
typedef enum VoltorbFlipTaskId {
WORKFLOW_COIN_CASE_FULL,
WORKFLOW_NEW_ROUND,
WORKFLOW_SELECT_MAIN_MENU,
WORKFLOW_SELECT_GAME_INFO,
@ -14,38 +14,37 @@ typedef enum Workflow {
WORKFLOW_RENDER_BOARD,
WORKFLOW_AWAIT_BOARD_INTERACT,
WORKFLOW_FLIP_CARD,
WORKFLOW_UNK_10,
WORKFLOW_WIN_ROUND,
WORKFLOW_AWARD_COINS,
WORKFLOW_REVEAL_BOARD,
WORKFLOW_UNK_13,
WORKFLOW_UNK_14,
WORKFLOW_MEMO_TOUCH,
WORKFLOW_MEMO_BUTTONS,
WORKFLOW_QUIT_ROUND,
WORKFLOW_UNK_16,
WORKFLOW_TERMINATE = 65534,
WORKFLOW_NONE = 65535,
} Workflow;
} VoltorbFlipTaskId;
typedef BOOL (*VoltorbFlipTask)(struct WorkflowEngine *a0, VoltorbFlipAppWork *a1);
typedef BOOL (*VoltorbFlipTaskFunc)(struct VoltorbFlipTaskEngine *workflow, VoltorbFlipAppData *voltorbFlip);
// A list of Tasks which will be executed synchronously and in order by the
// WorkflowEngine.
//
// The WorkflowEngine starts with the first non-NULL task provided.
typedef struct VoltorbFlipWorkflow {
typedef struct VoltorbFlipTask {
// Optional. Runs over multiple frames.
VoltorbFlipTask task1;
VoltorbFlipTaskFunc setup;
// Optional. Runs over 1 frame.
VoltorbFlipTask task2;
VoltorbFlipTaskFunc begin;
// Required. Runs over multiple frames.
VoltorbFlipTask task3;
VoltorbFlipTaskFunc main;
// Optional. Runs over 1 frame.
VoltorbFlipTask task4;
VoltorbFlipTaskFunc end;
// Optional. Runs over multiple frames.
VoltorbFlipTask task5;
} VoltorbFlipWorkflow;
VoltorbFlipTaskFunc tidy;
} VoltorbFlipTask;
typedef VoltorbFlipWorkflow VoltorbFlipWorkflows[16];
typedef VoltorbFlipTask VoltorbFlipTasks[16];
// A Workflow is a series of Tasks that run sequentially. The WorkflowEngine
// handles the transitions between a Workflow's Tasks automatically.
@ -56,22 +55,22 @@ typedef VoltorbFlipWorkflow VoltorbFlipWorkflows[16];
//
// At a given time, only one Workflow and one Task within that Workflow will
// be active. An enqueued Workflow starts once the current Workflow finishes.
typedef struct WorkflowEngine {
VoltorbFlipWorkflows *workflows;
struct VoltorbFlipAppWork *work;
typedef struct VoltorbFlipTaskEngine {
VoltorbFlipTasks *tasks;
struct VoltorbFlipAppData *work;
u16 curWorkflow;
u16 nextWorkflow;
u8 size; // The number of workflows registered
u8 workflowState; // The internal state of the WorkflowEngine (as it manages Task transitions)
u8 taskState; // The state of the Task that is currently being executed
} WorkflowEngine;
} VoltorbFlipTaskEngine;
WorkflowEngine *CreateWorkflowEngine(enum HeapID, VoltorbFlipWorkflows *, int, struct VoltorbFlipAppWork *);
void FreeWorkflowEngine(WorkflowEngine *);
BOOL RunWorkflowEngine(struct WorkflowEngine *);
void EnqueueWorkflow(WorkflowEngine *, Workflow);
int CurrentWorkflow(WorkflowEngine *);
int CurrentTaskState(WorkflowEngine *);
int IncrementTaskState(WorkflowEngine *);
VoltorbFlipTaskEngine *VoltorbFlipTaskEngine_Create(enum HeapID heapId, VoltorbFlipTasks *tasks, int, VoltorbFlipAppData *voltorbFlip);
void VoltorbFlipTaskEngine_Free(VoltorbFlipTaskEngine *engine);
BOOL VoltorbFlipTaskEngine_Run(VoltorbFlipTaskEngine *engine);
void VoltorbFlipTaskEngine_Enqueue(VoltorbFlipTaskEngine *engine, VoltorbFlipTaskId taskId);
int VoltorbFlipTaskEngine_CurrentWorkflow(VoltorbFlipTaskEngine *engine);
int VoltorbFlipTaskEngine_CurrentTaskState(VoltorbFlipTaskEngine *engine);
int VoltorbFlipTaskEngine_IncrementTaskState(VoltorbFlipTaskEngine *engine);
#endif // POKEHEARTGOLD_VOLTORB_FLIP_WORKFLOW_H

View File

@ -14,5 +14,8 @@ void GF_DestroyVramTransferManager(void);
BOOL GF_CreateNewVramTransferTask(NNS_GFD_DST_TYPE type, u32 dstAddr, void *pSrc, u32 szByte);
void GF_RunVramTransferTasks(void);
u32 GF_GetNumPendingVramTransferTasks(void);
NNSG2dCellTransferState *sub_02020654(int a0, enum HeapID heapID);
void thunk_UpdateCellTransferStateManager(void);
void sub_0202067C(NNSG2dCellTransferState *state);
#endif // POKEHEARTGOLD_VRAM_TRANSFER_MANAGER_H

View File

@ -2,6 +2,9 @@
#define NNS_G2D_G2D_CELL_TRANSFER_MANAGER_H
#include <nnsys/g2d/g2d_Image.h>
#include <nnsys/gfd/VramTransferMan/gfd_VramTransferManager.h>
typedef BOOL (*VramTransferTaskRegisterFuncPtr)(NNS_GFD_DST_TYPE type, u32 dstAddr, void *pSrc, u32 szByte);
typedef struct NNSG2dCellTransferState {
NNSG2dVRamLocation dstVramLocation;
@ -18,5 +21,7 @@ typedef struct NNSG2dCellTransferState {
void NNS_G2dFreeCellTransferStateHandle(u32 handle);
u32 NNS_G2dGetNewCellTransferStateHandle();
NNS_G2dInitCellTransferStateManager(NNSG2dCellTransferState *pCellStateArray, u32 numCellState, VramTransferTaskRegisterFuncPtr pTaskRegisterFunc);
void NNS_G2dUpdateCellTransferStateManager(void);
#endif // NNS_G2D_G2D_CELL_TRANSFER_MANAGER_H

View File

@ -62,6 +62,8 @@ Static main
Object src/touchscreen_list_menu.o
Object src/camera_translation.o
Object asm/unk_020192D0.o
Object asm/unk_0201956C.o
Object src/unk_02019BA4.o
Object src/system.o
Object src/heap.o
Object src/bg_window.o
@ -72,7 +74,8 @@ Static main
Object src/math_util.o
Object src/text.o
Object src/vram_transfer_manager.o
Object asm/unk_02020654.o
Object asm/unk_0202068C.o
Object src/unk_02020A0C.o
Object src/ascii_util.o
Object asm/unk_02020B8C.o
Object asm/unk_020210A0.o
@ -1295,14 +1298,9 @@ Overlay voltorb_flip
{
After main
Object src/voltorb_flip/voltorb_flip.o
Object src/voltorb_flip/voltorb_flip_workflow.o
Object src/voltorb_flip/voltorb_flip_tasks.o
Object src/voltorb_flip/voltorb_flip_game.o
Object src/voltorb_flip/voltorb_flip_input.o
Object src/voltorb_flip/voltorb_flip_data1.o
Object src/voltorb_flip/voltorb_flip_data2.o
Object src/voltorb_flip/voltorb_flip_data3.o
Object src/voltorb_flip/voltorb_flip_data4.o
Object src/voltorb_flip/voltorb_flip_data5.o
}
Overlay OVY_123
{

View File

@ -40,7 +40,8 @@ fi
for fl in "$dir"/*.bin; do
lz=
if [ $(head -c1 "$fl" | hexdump -ve '1/1 "%02x"') = '10' ]; then
ch1=$(head -c1 "$fl")
if [ $ch1 = $(echo -ne '\020') ] || [ $ch1 = $(echo -ne '\021') ]; then
mv "$fl" "$fl.lz"
"$REPO_DIR/tools/nitrogfx/nitrogfx" "$fl.lz" "$fl"
lz=.lz

View File

@ -157,7 +157,7 @@ static const UnkStruct_0207A22C _0210150C[2][6] = {
}
};
static const UnkStruct_02020654 _0210140C[8] = {
static const DpadMenuBox _0210140C[8] = {
{ 0x40, 0x19, 0x00, 0x00, 0x07, 0x02, 0x07, 0x01 },
{ 0xC0, 0x21, 0x00, 0x00, 0x07, 0x03, 0x00, 0x02 },
{ 0x40, 0x49, 0x00, 0x00, 0x00, 0x04, 0x01, 0x03 },
@ -168,7 +168,7 @@ static const UnkStruct_02020654 _0210140C[8] = {
{ 0xE0, 0xA8, 0x00, 0x00, 0x05, 0x01, 0x05, 0x00 },
};
static const UnkStruct_02020654 _0210144C[8] = {
static const DpadMenuBox _0210144C[8] = {
{ 0x40, 0x19, 0x00, 0x00, 0x04, 0x02, 0x01, 0x01 },
{ 0xC0, 0x19, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00 },
{ 0x40, 0x49, 0x00, 0x00, 0x00, 0x04, 0x03, 0x03 },
@ -179,7 +179,7 @@ static const UnkStruct_02020654 _0210144C[8] = {
{ 0xE0, 0xA8, 0x00, 0x00, 0x05, 0x01, 0xFF, 0xFF },
};
static const UnkStruct_02020654 _0210148C[8] = {
static const DpadMenuBox _0210148C[8] = {
{ 0x40, 0x19, 0x00, 0x00, 0x07, 0x02, 0x07, 0x01 },
{ 0xC0, 0x21, 0x00, 0x00, 0x07, 0x03, 0x00, 0x02 },
{ 0x40, 0x49, 0x00, 0x00, 0x00, 0x04, 0x01, 0x03 },
@ -190,7 +190,7 @@ static const UnkStruct_02020654 _0210148C[8] = {
{ 0xE0, 0xB8, 0x00, 0x00, 0x06, 0x01, 0x06, 0x00 },
};
static const UnkStruct_02020654 _021014CC[8] = {
static const DpadMenuBox _021014CC[8] = {
{ 0x40, 0x19, 0x00, 0x00, 0x05, 0x02, 0x05, 0x01 },
{ 0xC0, 0x21, 0x00, 0x00, 0x05, 0x03, 0x00, 0x02 },
{ 0x40, 0x49, 0x00, 0x00, 0x00, 0x04, 0x01, 0x03 },
@ -990,13 +990,13 @@ static void sub_02079CE4(PartyMenu *partyMenu) {
static void sub_02079D38(PartyMenu *partyMenu) {
u8 r4 = 3;
if (partyMenu->args->unk_25 == 2) {
partyMenu->unk_948 = _0210144C;
partyMenu->dpadMenuBox = _0210144C;
} else if (partyMenu->args->context == PARTY_MENU_CONTEXT_UNION_ROOM_BATTLE_SELECT || partyMenu->args->context == PARTY_MENU_CONTEXT_17 || partyMenu->args->context == PARTY_MENU_CONTEXT_BATTLE_HALL || partyMenu->args->context == PARTY_MENU_CONTEXT_23) {
partyMenu->unk_948 = _0210148C;
partyMenu->dpadMenuBox = _0210148C;
} else if (partyMenu->args->context == PARTY_MENU_CONTEXT_SPIN_TRADE) {
partyMenu->unk_948 = _021014CC;
partyMenu->dpadMenuBox = _021014CC;
} else {
partyMenu->unk_948 = _0210140C;
partyMenu->dpadMenuBox = _0210140C;
}
if (partyMenu->args->context != PARTY_MENU_CONTEXT_UNION_ROOM_BATTLE_SELECT && partyMenu->args->context != PARTY_MENU_CONTEXT_17 && partyMenu->args->context != PARTY_MENU_CONTEXT_23 && partyMenu->args->context != PARTY_MENU_CONTEXT_BATTLE_HALL) {
Sprite_SetDrawFlag(partyMenu->sprites[PARTY_MENU_SPRITE_ID_8], FALSE);
@ -1292,7 +1292,7 @@ static BOOL sub_0207A880(PartyMenu *partyMenu, u8 partySlot) {
static void sub_0207A89C(PartyMenu *partyMenu) {
u8 x;
u8 y;
sub_02020A24(partyMenu->unk_948, &x, &y, 0, 0, partyMenu->partyMonIndex, 4);
DpadMenuBox_GetNeighborInDirection(partyMenu->dpadMenuBox, &x, &y, NULL, NULL, partyMenu->partyMonIndex, 4);
Sprite_SetAnimCtrlSeq(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], sub_0207B5EC(partyMenu->args->unk_25, partyMenu->partyMonIndex));
Sprite_SetPositionXY(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], x, y);
}
@ -1384,7 +1384,7 @@ static BOOL PartyMenu_HandleDpadInput(PartyMenu *partyMenu) {
static u8 PartyMenu_GetSelectionInDirection(PartyMenu *partyMenu, u8 *px, u8 *py, u8 direction) {
u8 result = partyMenu->partyMonIndex;
while (TRUE) {
result = sub_02020A24(partyMenu->unk_948, px, py, 0, 0, result, direction);
result = DpadMenuBox_GetNeighborInDirection(partyMenu->dpadMenuBox, px, py, NULL, NULL, result, direction);
if (result == 6 || result == 7 || result == 0xFF) {
break;
}
@ -1402,12 +1402,12 @@ static u8 PartyMenu_GetNewSelectionFromTable(PartyMenu *partyMenu, u8 *px, u8 *p
break;
}
if (PartyMenu_IsMonDrawStateActive(partyMenu, table[i])) {
sub_02020A24(partyMenu->unk_948, px, py, 0, 0, table[i], DIR_MAX);
DpadMenuBox_GetNeighborInDirection(partyMenu->dpadMenuBox, px, py, NULL, NULL, table[i], DIR_MAX);
return table[i];
}
++i;
}
sub_02020A24(partyMenu->unk_948, px, py, 0, 0, 0, DIR_MAX);
DpadMenuBox_GetNeighborInDirection(partyMenu->dpadMenuBox, px, py, NULL, NULL, 0, DIR_MAX);
return 0;
}
@ -1416,7 +1416,7 @@ void sub_0207AB84(PartyMenu *partyMenu, u8 partySlot) {
Sprite_SetDrawFlag(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], FALSE);
} else {
u8 x, y;
sub_02020A24(partyMenu->unk_948, &x, &y, 0, 0, partyMenu->partyMonIndex, DIR_MAX);
DpadMenuBox_GetNeighborInDirection(partyMenu->dpadMenuBox, &x, &y, NULL, NULL, partyMenu->partyMonIndex, DIR_MAX);
Sprite_SetAnimCtrlSeq(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], sub_0207B5EC(partyMenu->args->unk_25, partySlot));
Sprite_SetDrawFlag(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], TRUE);
Sprite_SetPositionXY(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], x, y);
@ -1522,7 +1522,7 @@ static u8 PartyMenu_HandleInput(PartyMenu *partyMenu) {
// UB: hits "return result;" but result was never initialized
break;
}
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->unk_948[selection].unk_0, partyMenu->unk_948[selection].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->dpadMenuBox[selection].left, partyMenu->dpadMenuBox[selection].top);
return sub_0207AC70(partyMenu, MENU_INPUT_STATE_TOUCH);
case PARTY_MON_SELECTION_CANCEL:
if (partyMenu->cancelDisabled) {
@ -1534,22 +1534,22 @@ static u8 PartyMenu_HandleInput(PartyMenu *partyMenu) {
partyMenu->partyMonIndex = PARTY_MON_SELECTION_CONFIRM;
sub_0207CB3C(partyMenu, MENU_INPUT_STATE_TOUCH);
G2_BlendNone();
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->unk_948[7].unk_0, partyMenu->unk_948[7].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->dpadMenuBox[7].left, partyMenu->dpadMenuBox[7].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, PARTY_MENU_STATE_3, TRUE);
return 5;
case PARTY_MON_SELECTION_CONFIRM:
PartyMenu_MoveCursorSpriteTo_WithSfx(partyMenu, 6, partyMenu->unk_948[6].unk_0, partyMenu->unk_948[6].unk_1);
PartyMenu_MoveCursorSpriteTo_WithSfx(partyMenu, 6, partyMenu->dpadMenuBox[6].left, partyMenu->dpadMenuBox[6].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_8, sub_0207AC70(partyMenu, MENU_INPUT_STATE_TOUCH), TRUE);
return 5;
}
} else {
if (gSystem.newKeys & PAD_BUTTON_A) {
if (partyMenu->partyMonIndex == PARTY_MON_SELECTION_CONFIRM) {
PartyMenu_MoveCursorSpriteTo(partyMenu, partyMenu->partyMonIndex, partyMenu->unk_948[partyMenu->partyMonIndex].unk_0, partyMenu->unk_948[partyMenu->partyMonIndex].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, partyMenu->partyMonIndex, partyMenu->dpadMenuBox[partyMenu->partyMonIndex].left, partyMenu->dpadMenuBox[partyMenu->partyMonIndex].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, sub_0207AC70(partyMenu, MENU_INPUT_STATE_BUTTONS), FALSE);
return 5;
} else if (partyMenu->partyMonIndex == PARTY_MON_SELECTION_CANCEL) {
PartyMenu_MoveCursorSpriteTo_WithSfx(partyMenu, partyMenu->partyMonIndex, partyMenu->unk_948[partyMenu->partyMonIndex].unk_0, partyMenu->unk_948[partyMenu->partyMonIndex].unk_1);
PartyMenu_MoveCursorSpriteTo_WithSfx(partyMenu, partyMenu->partyMonIndex, partyMenu->dpadMenuBox[partyMenu->partyMonIndex].left, partyMenu->dpadMenuBox[partyMenu->partyMonIndex].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_8, sub_0207AC70(partyMenu, MENU_INPUT_STATE_BUTTONS), FALSE);
return 5;
} else {
@ -1563,7 +1563,7 @@ static u8 PartyMenu_HandleInput(PartyMenu *partyMenu) {
if (partyMenu->partyMonIndex == PARTY_MON_SELECTION_CONFIRM) {
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, PARTY_MENU_STATE_3, FALSE);
} else {
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->unk_948[7].unk_0, partyMenu->unk_948[7].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->dpadMenuBox[7].left, partyMenu->dpadMenuBox[7].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, PARTY_MENU_STATE_3, TRUE);
}
return 5;
@ -1903,7 +1903,7 @@ static u8 sub_0207B600(PartyMenu *partyMenu) {
if (oldSelection != partyMenu->partyMonIndex) {
sub_0207B51C(partyMenu, oldSelection, FALSE);
sub_0207B51C(partyMenu, partyMenu->partyMonIndex, TRUE);
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->unk_948[selection].unk_0, partyMenu->unk_948[selection].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->dpadMenuBox[selection].left, partyMenu->dpadMenuBox[selection].top);
}
sub_0207FBC8(partyMenu);
return 3;
@ -1917,7 +1917,7 @@ static u8 sub_0207B600(PartyMenu *partyMenu) {
if (oldSelection != partyMenu->partyMonIndex) {
sub_0207B51C(partyMenu, partyMenu->partyMonIndex, TRUE);
}
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->unk_948[selection].unk_0, partyMenu->unk_948[selection].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->dpadMenuBox[selection].left, partyMenu->dpadMenuBox[selection].top);
sub_0207FC1C(partyMenu);
return 0;
}
@ -2234,7 +2234,7 @@ static int PartyMenu_Subtask_Softboiled(PartyMenu *partyMenu) {
if (selection >= Party_GetCount(partyMenu->args->party)) {
break;
}
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->unk_948[selection].unk_0, partyMenu->unk_948[selection].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->dpadMenuBox[selection].left, partyMenu->dpadMenuBox[selection].top);
return PartyMenu_SoftboiledTryTargetCheck(partyMenu);
case PARTY_MON_SELECTION_CANCEL:
PlaySE(SEQ_SE_GS_GEARCANCEL);
@ -2350,7 +2350,7 @@ static u8 PartyMenu_GiveOrUseItemOnMon_HandleInput(PartyMenu *partyMenu) {
case PARTY_MON_SELECTION_5:
case PARTY_MON_SELECTION_6:
if (selection < Party_GetCount(partyMenu->args->party)) {
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->unk_948[selection].unk_0, partyMenu->unk_948[selection].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, selection, partyMenu->dpadMenuBox[selection].left, partyMenu->dpadMenuBox[selection].top);
partyMenu->partyMonIndex = selection;
if (!partyMenu->monsDrawState[partyMenu->partyMonIndex].isEgg) {
PlaySE(SEQ_SE_DP_SELECT);
@ -2364,7 +2364,7 @@ static u8 PartyMenu_GiveOrUseItemOnMon_HandleInput(PartyMenu *partyMenu) {
case PARTY_MON_SELECTION_CANCEL:
if (!partyMenu->cancelDisabled) {
PlaySE(SEQ_SE_GS_GEARCANCEL);
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->unk_948[7].unk_0, partyMenu->unk_948[7].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->dpadMenuBox[7].left, partyMenu->dpadMenuBox[7].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, PARTY_MENU_STATE_3, TRUE);
return 5;
}
@ -2392,7 +2392,7 @@ static u8 PartyMenu_GiveOrUseItemOnMon_HandleInput(PartyMenu *partyMenu) {
if (partyMenu->partyMonIndex == PARTY_MON_SELECTION_CONFIRM) {
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, PARTY_MENU_STATE_3, FALSE);
} else {
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->unk_948[7].unk_0, partyMenu->unk_948[7].unk_1);
PartyMenu_MoveCursorSpriteTo(partyMenu, 7, partyMenu->dpadMenuBox[7].left, partyMenu->dpadMenuBox[7].top);
PartyMenu_StartContextMenuButtonAnim(partyMenu, PARTY_MENU_SPRITE_ID_9, PARTY_MENU_STATE_3, TRUE);
}
return 5;

View File

@ -610,7 +610,7 @@ void sub_0207F178(PartyMenu *partyMenu) {
void sub_0207F240(PartyMenu *partyMenu, u8 partySlot, int selected) {
u8 sp1, sp0;
sub_02020A0C(&partyMenu->unk_948[partySlot], &sp1, &sp0);
DpadMenuBox_GetPosition(&partyMenu->dpadMenuBox[partySlot], &sp1, &sp0);
Sprite_SetAnimCtrlSeq(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], sub_0207B5EC(partyMenu->args->unk_25, partySlot));
Sprite_SetDrawFlag(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], TRUE);
Sprite_SetPositionXY(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], sp1, sp0);

View File

@ -12,7 +12,7 @@
#include "unk_02009D48.h"
#include "unk_0200ACF0.h"
#include "unk_0200B150.h"
#include "unk_02020654.h"
#include "vram_transfer_manager.h"
static void SpriteSystem_DeleteSpriteList(SpriteManager *spriteManager);
static void SpriteManager_FreeResourceHeaders(SpriteManager *spriteManager);
@ -309,7 +309,7 @@ BOOL SpriteSystem_InitManagerWithCapacities(SpriteSystem *spriteSystem, SpriteMa
return TRUE;
}
BOOL SpriteSystem_LoadCharResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId) {
BOOL SpriteSystem_LoadCharResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) {
return FALSE;
}
@ -323,7 +323,7 @@ BOOL SpriteSystem_LoadCharResObj(SpriteSystem *spriteSystem, SpriteManager *spri
return obj != NULL;
}
BOOL SpriteSystem_LoadCharResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId) {
BOOL SpriteSystem_LoadCharResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) {
return FALSE;
}
@ -337,7 +337,7 @@ BOOL SpriteSystem_LoadCharResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteM
return obj != NULL;
}
s8 SpriteSystem_LoadPlttResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId) {
s8 SpriteSystem_LoadPlttResObj(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int pltt_num, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], resId)) {
return -1;
}
@ -345,13 +345,13 @@ s8 SpriteSystem_LoadPlttResObj(SpriteSystem *spriteSystem, SpriteManager *sprite
if (obj != NULL) {
GF_ASSERT(sub_0200B00C(obj) == TRUE);
RegisterLoadedResources(spriteManager->_2dGfxResObjList[GF_GFX_RES_TYPE_PLTT], obj);
return SpriteTransfer_GetPlttOffset(obj, vram);
return SpriteTransfer_GetPlttOffset(obj, (NNS_G2D_VRAM_TYPE)vram);
}
GF_ASSERT(FALSE);
return -1;
}
s8 SpriteSystem_LoadPlttResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId) {
s8 SpriteSystem_LoadPlttResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int pltt_num, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], resId)) {
return -1;
}
@ -359,13 +359,13 @@ s8 SpriteSystem_LoadPlttResObjFromOpenNarc(SpriteSystem *spriteSystem, SpriteMan
if (obj != NULL) {
GF_ASSERT(sub_0200B00C(obj) == TRUE);
RegisterLoadedResources(spriteManager->_2dGfxResObjList[GF_GFX_RES_TYPE_PLTT], obj);
return SpriteTransfer_GetPlttOffset(obj, vram);
return SpriteTransfer_GetPlttOffset(obj, (NNS_G2D_VRAM_TYPE)vram);
}
GF_ASSERT(FALSE);
return -1;
}
u8 SpriteSystem_LoadPaletteBuffer(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId) {
u8 SpriteSystem_LoadPaletteBuffer(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int pltt_num, int vram, int resId) {
int ret = SpriteSystem_LoadPlttResObj(spriteSystem, spriteManager, narcId, fileId, compressed, pltt_num, vram, resId);
if (ret != -1) {
PaletteData_LoadPaletteSlotFromHardware(plttData, bufferId, ret * 16, pltt_num * 32);
@ -373,7 +373,7 @@ u8 SpriteSystem_LoadPaletteBuffer(PaletteData *plttData, PaletteBufferId bufferI
return ret;
}
u8 SpriteSystem_LoadPaletteBufferFromOpenNarc(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int pltt_num, NNS_G2D_VRAM_TYPE vram, int resId) {
u8 SpriteSystem_LoadPaletteBufferFromOpenNarc(PaletteData *plttData, PaletteBufferId bufferId, SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int pltt_num, int vram, int resId) {
int ret = SpriteSystem_LoadPlttResObjFromOpenNarc(spriteSystem, spriteManager, narc, fileId, compressed, pltt_num, vram, resId);
if (ret != -1) {
PaletteData_LoadPaletteSlotFromHardware(plttData, bufferId, ret * 16, pltt_num * 32);
@ -491,8 +491,8 @@ NNSG2dImagePaletteProxy *SpriteManager_FindPlttResourceProxy(SpriteManager *spri
return SpriteTransfer_GetPaletteProxy(SpriteResourceCollection_Find(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], id), NULL);
}
int SpriteManager_FindPlttResourceOffset(SpriteManager *spriteManager, int id, NNS_G2D_VRAM_TYPE vram) {
return SpriteTransfer_GetPlttOffset(SpriteResourceCollection_Find(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], id), vram);
int SpriteManager_FindPlttResourceOffset(SpriteManager *spriteManager, int id, int vram) {
return SpriteTransfer_GetPlttOffset(SpriteResourceCollection_Find(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], id), (NNS_G2D_VRAM_TYPE)vram);
}
BOOL SpriteManager_UnloadCharObjById(SpriteManager *spriteManager, u32 character) {
@ -712,12 +712,12 @@ BOOL ManagedSprite_GetDrawFlag(ManagedSprite *a0) {
return thunk_Sprite_GetDrawFlag(a0->sprite);
}
void thunk_Sprite_SetPaletteOverride(Sprite *sprite, int a1) {
Sprite_SetPaletteOverride(sprite, a1);
void thunk_Sprite_SetPaletteOverride(Sprite *sprite, int index) {
Sprite_SetPaletteOverride(sprite, index);
}
void ManagedSprite_SetPaletteOverride(ManagedSprite *managedSprite, int a1) {
thunk_Sprite_SetPaletteOverride(managedSprite->sprite, a1);
void ManagedSprite_SetPaletteOverride(ManagedSprite *managedSprite, int index) {
thunk_Sprite_SetPaletteOverride(managedSprite->sprite, index);
}
void thunk_Sprite_SetPaletteOffset(Sprite *sprite, u8 a1) {
@ -967,7 +967,7 @@ u32 ManagedSprite_GetUserAttrForCurrentAnimFrame(ManagedSprite *managedSprite) {
return Sprite_GetCurrentAnimFrameExAttr(managedSprite->sprite);
}
BOOL SpriteSystem_LoadCharResObjWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId) {
BOOL SpriteSystem_LoadCharResObjWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) {
return FALSE;
}
@ -981,7 +981,7 @@ BOOL SpriteSystem_LoadCharResObjWithHardwareMappingType(SpriteSystem *spriteSyst
return obj != NULL;
}
BOOL SpriteSystem_LoadCharResObjAtEndWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId) {
BOOL SpriteSystem_LoadCharResObjAtEndWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NarcId narcId, int fileId, BOOL compressed, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) {
return FALSE;
}
@ -995,7 +995,7 @@ BOOL SpriteSystem_LoadCharResObjAtEndWithHardwareMappingType(SpriteSystem *sprit
return obj != NULL;
}
BOOL SpriteSystem_LoadCharResObjFromOpenNarcWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, NNS_G2D_VRAM_TYPE vram, int resId) {
BOOL SpriteSystem_LoadCharResObjFromOpenNarcWithHardwareMappingType(SpriteSystem *spriteSystem, SpriteManager *spriteManager, NARC *narc, int fileId, BOOL compressed, int vram, int resId) {
if (!GF2DGfxResObjExistsById(spriteManager->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) {
return FALSE;
}

View File

@ -7,17 +7,17 @@
static void loadAll2DGfxResObjFromHeaderInternal(GF_2DGfxResMan *mgr, const GF_2DGfxResHeader *header, int first, int count, GF_2DGfxResObjList *list, enum HeapID heapID);
static void destroyAllObjects(GF_2DGfxResMan *mgr);
static SpriteResource *GF2DGfxResMan_GetFreeObject(GF_2DGfxResMan *mgr);
static struct CharResExtraData *GetResourceExtraCharData(void *resource, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID);
static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID);
static struct CharResExtraData *GetResourceExtraCharData(void *resource, int vram, enum HeapID heapID);
static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, int vram, int pltt_num, enum HeapID heapID);
static struct CellResExtraData *GetResourceExtraCellData(void *resource, enum HeapID heapID);
static struct AnimResExtraData *GetResourceExtraAnimData(void *resource, enum HeapID heapID);
static struct MulticellResExtraData *GetResourceExtraMulticellData(void *resource, enum HeapID heapID);
static struct MultianimResExtraData *GetResourceExtraMultianimData(void *resource, enum HeapID heapID);
static void destroyResObjExtra(SpriteResource *obj);
static void *getResObjExtra(SpriteResource *obj);
static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, SpriteResource *obj, char *name, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, enum HeapID heapID);
static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd);
static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd);
static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, SpriteResource *obj, char *name, int id, int vram, int pltt_num, GfGfxResType type, enum HeapID heapID);
static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd);
static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd);
static int GF2DGfxResHeaderNarc_CountObjects(const GF_2DGfxResHeaderNarc *a0);
static void *loadResourceFromNarc(NARC *narc, int fileId, BOOL compressed, enum HeapID heapID, BOOL atEnd);
@ -69,7 +69,7 @@ SpriteResource *Add2DGfxResObjFromHeader(GF_2DGfxResMan *mgr, const GF_2DGfxResH
return ret;
}
SpriteResource *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID) {
SpriteResource *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, enum HeapID heapID) {
SpriteResource *ret;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR);
@ -80,7 +80,7 @@ SpriteResource *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fi
return ret;
}
SpriteResource *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID) {
SpriteResource *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, enum HeapID heapID) {
SpriteResource *ret;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT);
@ -106,7 +106,7 @@ SpriteResource *AddCellOrAnimResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId,
void ReplaceCharResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, enum HeapID heapID) {
int id;
NNS_G2D_VRAM_TYPE vram;
int vram;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR);
GF_ASSERT(obj != NULL);
@ -119,7 +119,7 @@ void ReplaceCharResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId
void ReplacePlttResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, enum HeapID heapID) {
int id;
NNS_G2D_VRAM_TYPE vram;
int vram;
int pltt_num;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT);
@ -132,7 +132,7 @@ void ReplacePlttResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId
Add2DGfxResObjFromNarc(mgr, obj, narcId, fileId, compressed, id, vram, pltt_num, GF_GFX_RES_TYPE_PLTT, heapID, FALSE);
}
SpriteResource *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID) {
SpriteResource *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, enum HeapID heapID) {
SpriteResource *ret;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR);
@ -143,7 +143,7 @@ SpriteResource *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int f
return ret;
}
SpriteResource *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID, BOOL atEnd) {
SpriteResource *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, enum HeapID heapID, BOOL atEnd) {
SpriteResource *ret;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR);
@ -154,7 +154,7 @@ SpriteResource *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC
return ret;
}
SpriteResource *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID) {
SpriteResource *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, enum HeapID heapID) {
SpriteResource *ret;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT);
@ -165,7 +165,7 @@ SpriteResource *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int f
return ret;
}
SpriteResource *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID, BOOL atEnd) {
SpriteResource *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, enum HeapID heapID, BOOL atEnd) {
SpriteResource *ret;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT);
@ -191,7 +191,7 @@ SpriteResource *AddCellOrAnimResObjFromOpenNarc(GF_2DGfxResMan *resMan, NARC *na
void ReplaceCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, enum HeapID heapID) {
int id;
NNS_G2D_VRAM_TYPE vram;
int vram;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR);
GF_ASSERT(obj != NULL);
@ -204,7 +204,7 @@ void ReplaceCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NAR
void ReplacePlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, enum HeapID heapID) {
int id;
NNS_G2D_VRAM_TYPE vram;
int vram;
int pltt_num;
GF_ASSERT(mgr != NULL);
GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT);
@ -477,7 +477,7 @@ static SpriteResource *GF2DGfxResMan_GetFreeObject(GF_2DGfxResMan *mgr) {
return NULL;
}
void GF2DGfxResObj_LoadExDat(SpriteResource *obj, GfGfxResType type, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID) {
void GF2DGfxResObj_LoadExDat(SpriteResource *obj, GfGfxResType type, int vram, int pltt_num, enum HeapID heapID) {
void *resource = GF2dGfxRawResObj_GetData(obj->resource);
switch (type) {
case GF_GFX_RES_TYPE_CHAR:
@ -501,17 +501,17 @@ void GF2DGfxResObj_LoadExDat(SpriteResource *obj, GfGfxResType type, NNS_G2D_VRA
}
}
static struct CharResExtraData *GetResourceExtraCharData(void *resource, NNS_G2D_VRAM_TYPE vram, enum HeapID heapID) {
static struct CharResExtraData *GetResourceExtraCharData(void *resource, int vram, enum HeapID heapID) {
struct CharResExtraData *ret = Heap_Alloc(heapID, sizeof(struct CharResExtraData));
NNS_G2dGetUnpackedCharacterData(resource, &ret->charData);
ret->vram = vram;
ret->vram = (NNS_G2D_VRAM_TYPE)vram;
return ret;
}
static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, NNS_G2D_VRAM_TYPE vram, int pltt_num, enum HeapID heapID) {
static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, int vram, int pltt_num, enum HeapID heapID) {
struct PlttResExtraData *ret = Heap_Alloc(heapID, sizeof(struct PlttResExtraData));
NNS_G2dGetUnpackedPaletteData(resource, &ret->plttData);
ret->vram = vram;
ret->vram = (NNS_G2D_VRAM_TYPE)vram;
ret->pltt_num = pltt_num;
return ret;
}
@ -553,20 +553,20 @@ static void *getResObjExtra(SpriteResource *obj) {
return obj->extra;
}
static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, SpriteResource *obj, char *name, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, enum HeapID heapID) {
static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, SpriteResource *obj, char *name, int id, int vram, int pltt_num, GfGfxResType type, enum HeapID heapID) {
obj->resource = GF2dGfxRawResMan_ReadAndAllocObj(mgr->resourceMgr, name, id, heapID);
obj->type = type;
GF2DGfxResObj_LoadExDat(obj, type, vram, pltt_num, heapID);
}
static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd) {
static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd) {
void *res = GfGfxLoader_LoadFromNarc(narcId, fileId, compressed, heapID, atEnd);
obj->resource = GF2dGfxRawResMan_AllocObj(mgr->resourceMgr, res, id);
obj->type = type;
GF2DGfxResObj_LoadExDat(obj, type, vram, pltt_num, heapID);
}
static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd) {
static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, SpriteResource *obj, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, enum HeapID heapID, BOOL atEnd) {
void *res = loadResourceFromNarc(narc, fileId, compressed, heapID, atEnd);
obj->resource = GF2dGfxRawResMan_AllocObj(mgr->resourceMgr, res, id);
obj->type = type;

311
src/unk_02019BA4.c Normal file
View File

@ -0,0 +1,311 @@
#include "unk_02019BA4.h"
#include "list_menu_items.h"
#include "menu_input_state.h"
#include "system.h"
static int GridInputHandler_HandleTouch(GridInputHandler *inputHandler, u16 hitboxId);
static int GridInputHandler_HandleButton(GridInputHandler *inputHandler);
static int GridInputHandler_HandleDpad(GridInputHandler *inputHandler, u8 direction, u8 input);
static BOOL DpadBox_IsForcedInDirection(const DpadMenuBox *dpadBox, u32 direction);
static BOOL GridInputHandlerFlagArray_CheckFlag(u32 *flags, u32 bitPos);
GridInputHandler *GridInputHandler_Create(const TouchscreenHitbox *hitBoxes, const DpadMenuBox *dpadBoxes, const GridCallbacks *callbacks, void *callbackParam, BOOL inputState, u8 initialPos, enum HeapID heapId) {
GridInputHandler *ret = Heap_Alloc(heapId, sizeof(GridInputHandler));
ret->touchscreenHitboxes = hitBoxes;
ret->dpadPositions = dpadBoxes;
ret->callbacks = callbacks;
ret->data = callbackParam;
ret->modeSwitchLagFrame = FALSE;
ret->isButtons = inputState;
ret->nextInput = initialPos;
ret->lastInput = 0xFF;
ret->unk_0F = 0xFF;
ret->enabledFlag[0] = -1;
ret->enabledFlag[1] = -1;
return ret;
}
void GridInputHandler_Free(GridInputHandler *inputHandler) {
Heap_Free(inputHandler);
}
int GridInputHandler_HandleInput_NoHold(GridInputHandler *inputHandler) {
u16 i = 0;
BOOL r6 = FALSE;
int r0;
u8 input;
u8 direction;
// Handle touch input
while (TRUE) {
if (inputHandler->touchscreenHitboxes[i].rect.top == TOUCHSCREEN_RECTLIST_END) {
break;
}
if (TouchscreenHitbox_TouchNewIsIn(&inputHandler->touchscreenHitboxes[i]) == TRUE) {
r0 = GridInputHandler_HandleTouch(inputHandler, i);
if (r0 != GRID_MENU_NOTHING_CHOSEN) {
return r0;
}
r6 = TRUE;
}
++i;
}
if (r6) {
return GRID_MENU_NOTHING_CHOSEN;
}
// Switch to button input mode
if (inputHandler->isButtons == FALSE && inputHandler->modeSwitchLagFrame == TRUE) {
if (gSystem.newKeys & (PAD_BUTTON_A | PAD_BUTTON_B | PAD_KEY_UP | PAD_KEY_DOWN | PAD_KEY_LEFT | PAD_KEY_RIGHT)) {
return GridInputHandler_HandleButton(inputHandler);
} else {
return GRID_MENU_NOTHING_CHOSEN;
}
}
// Handle cursor move
if (gSystem.newKeys & PAD_KEY_UP) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 0);
direction = 0;
} else if (gSystem.newKeys & PAD_KEY_DOWN) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 1);
direction = 1;
} else if (gSystem.newKeys & PAD_KEY_LEFT) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 2);
direction = 2;
} else if (gSystem.newKeys & PAD_KEY_RIGHT) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 3);
direction = 3;
} else {
input = 0xFF;
}
if (input != 0xFF) {
return GridInputHandler_HandleDpad(inputHandler, direction, input);
}
// Handle select or cancel
if (gSystem.newKeys & PAD_BUTTON_A) {
return inputHandler->nextInput;
} else if (gSystem.newKeys & PAD_BUTTON_B) {
return GRID_MENU_CANCEL;
}
return GRID_MENU_NOTHING_CHOSEN;
}
int GridInputHandler_HandleInput_AllowHold(GridInputHandler *inputHandler) {
u16 i = 0;
BOOL r6 = FALSE;
int r0;
u8 input;
u8 direction;
// Handle touch input
while (TRUE) {
if (inputHandler->touchscreenHitboxes[i].rect.top == TOUCHSCREEN_RECTLIST_END) {
break;
}
if (TouchscreenHitbox_TouchNewIsIn(&inputHandler->touchscreenHitboxes[i]) == TRUE) {
r0 = GridInputHandler_HandleTouch(inputHandler, i);
if (r0 != GRID_MENU_NOTHING_CHOSEN) {
return r0;
}
r6 = TRUE;
}
++i;
}
if (r6) {
return GRID_MENU_NOTHING_CHOSEN;
}
// Switch to button input mode
if (inputHandler->isButtons == FALSE && inputHandler->modeSwitchLagFrame == TRUE) {
if (gSystem.newKeys & (PAD_BUTTON_A | PAD_BUTTON_B | PAD_KEY_UP | PAD_KEY_DOWN | PAD_KEY_LEFT | PAD_KEY_RIGHT)) {
return GridInputHandler_HandleButton(inputHandler);
} else {
return GRID_MENU_NOTHING_CHOSEN;
}
}
// Handle cursor move
if (gSystem.newAndRepeatedKeys & PAD_KEY_UP) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 0);
direction = 0;
} else if (gSystem.newAndRepeatedKeys & PAD_KEY_DOWN) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 1);
direction = 1;
} else if (gSystem.newAndRepeatedKeys & PAD_KEY_LEFT) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 2);
direction = 2;
} else if (gSystem.newAndRepeatedKeys & PAD_KEY_RIGHT) {
input = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, inputHandler->nextInput, 3);
direction = 3;
} else {
input = 0xFF;
}
if (input != 0xFF) {
return GridInputHandler_HandleDpad(inputHandler, direction, input);
}
// Handle select or cancel
if (gSystem.newKeys & PAD_BUTTON_A) {
return inputHandler->nextInput;
} else if (gSystem.newKeys & PAD_BUTTON_B) {
return GRID_MENU_CANCEL;
}
return GRID_MENU_NOTHING_CHOSEN;
}
static int GridInputHandler_HandleTouch(GridInputHandler *inputHandler, u16 hitboxId) {
if (GridInputHandlerFlagArray_CheckFlag(inputHandler->enabledFlag, hitboxId) == TRUE) {
inputHandler->nextInput = hitboxId;
inputHandler->lastInput = 0xFF;
inputHandler->unk_0F = 0xFF;
if (inputHandler->isButtons == TRUE && inputHandler->modeSwitchLagFrame == TRUE) {
inputHandler->isButtons = FALSE;
inputHandler->callbacks->onSwitchToTouchMode(inputHandler->data, inputHandler->nextInput, inputHandler->lastInput);
}
inputHandler->callbacks->onTouch(inputHandler->data, inputHandler->nextInput, inputHandler->lastInput);
return hitboxId;
}
return GRID_MENU_NOTHING_CHOSEN;
}
static int GridInputHandler_HandleButton(GridInputHandler *inputHandler) {
inputHandler->isButtons = TRUE;
inputHandler->lastInput = 0xFF;
inputHandler->unk_0F = 0xFF;
inputHandler->callbacks->onButton(inputHandler->data, inputHandler->nextInput, inputHandler->lastInput);
return GRID_MENU_BUTTON_MODE;
}
static int GridInputHandler_HandleDpad(GridInputHandler *inputHandler, u8 direction, u8 input) {
u8 neighborIsEnabled;
u32 mask;
u8 r1;
if (input & 0x80) {
if (inputHandler->unk_0F != 0xFF) {
input = inputHandler->unk_0F;
} else {
input ^= 0x80;
}
}
neighborIsEnabled = TRUE;
while (TRUE) {
mask = 1 << (input % 32);
if (inputHandler->enabledFlag[input / 32] & mask) {
break;
}
neighborIsEnabled = FALSE;
r1 = DpadMenuBox_GetNeighborInDirection(inputHandler->dpadPositions, NULL, NULL, NULL, NULL, input, direction) & 0x7F;
if (r1 == input || r1 == inputHandler->nextInput) {
input = inputHandler->nextInput;
break;
}
input = r1;
}
if (inputHandler->nextInput != input) {
if (DpadBox_IsForcedInDirection(&inputHandler->dpadPositions[input], direction) == TRUE && neighborIsEnabled) {
inputHandler->unk_0F = inputHandler->nextInput;
} else {
inputHandler->unk_0F = 0xFF;
}
inputHandler->lastInput = inputHandler->nextInput;
inputHandler->nextInput = input;
inputHandler->callbacks->onKeyMove(inputHandler->data, inputHandler->nextInput, inputHandler->lastInput);
return GRID_MENU_CURSOR_MOVE;
}
return GRID_MENU_NOTHING_CHOSEN;
}
int GridInputHandler_GetNextInput(GridInputHandler *inputHandler) {
return inputHandler->nextInput;
}
int GridInputHandler_GetUnk0F(GridInputHandler *inputHandler) {
return inputHandler->unk_0F;
}
void GridInputHandler_SetNextInput(GridInputHandler *inputHandler, int nextInput) {
inputHandler->nextInput = nextInput;
inputHandler->lastInput = 0xFF;
inputHandler->unk_0F = 0xFF;
}
void GridInputHandler_SetNextLastUnk0FInputs(GridInputHandler *inputHandler, int nextInput, int lastInput, int unk0F) {
inputHandler->nextInput = nextInput;
inputHandler->lastInput = lastInput;
inputHandler->unk_0F = unk0F;
}
BOOL GridInputHandler_IsButtonInputMode(GridInputHandler *inputHandler) {
return inputHandler->isButtons;
}
void GridInputHandler_SetButtonInputMode(GridInputHandler *inputHandler, BOOL isButtons) {
inputHandler->isButtons = isButtons;
if (isButtons == TRUE) {
inputHandler->lastInput = 0xFF;
inputHandler->unk_0F = 0xFF;
inputHandler->callbacks->onButton(inputHandler->data, inputHandler->nextInput, -1);
} else {
inputHandler->callbacks->onSwitchToTouchMode(inputHandler->data, inputHandler->nextInput, -1);
}
}
void GridInputHandler_SetAllEnabled(GridInputHandler *inputHandler) {
inputHandler->enabledFlag[0] = -1u;
inputHandler->enabledFlag[1] = -1u;
}
void GridInputHandler_ClearEnabledFlag(GridInputHandler *inputHandler, u32 target) {
if (inputHandler->enabledFlag[target / 32] & (1 << (target % 32))) {
inputHandler->enabledFlag[target / 32] &= ((1 << (target % 32)) ^ -1);
}
}
void GridInputHandler_SetEnabledFlag(GridInputHandler *inputHandler, u32 target) {
if (!(inputHandler->enabledFlag[target / 32] & (1 << (target % 32)))) {
inputHandler->enabledFlag[target / 32] ^= (1 << (target % 32));
}
}
const DpadMenuBox *GridInputHandler_GetDpadBox(GridInputHandler *inputHandler, int target) {
return &inputHandler->dpadPositions[target];
}
static BOOL DpadBox_IsForcedInDirection(const DpadMenuBox *dpadBox, u32 direction) {
switch (direction) {
case 0:
if (dpadBox->buttonDown & 0x80) {
return TRUE;
}
break;
case 1:
if (dpadBox->buttonUp & 0x80) {
return TRUE;
}
break;
case 2:
if (dpadBox->buttonRight & 0x80) {
return TRUE;
}
break;
case 3:
if (dpadBox->buttonLeft & 0x80) {
return TRUE;
}
break;
}
return FALSE;
}
static BOOL GridInputHandlerFlagArray_CheckFlag(u32 *flags, u32 bitPos) {
return (flags[bitPos / 32] & (1 << (bitPos % 32))) != 0;
}

42
src/unk_02020A0C.c Normal file
View File

@ -0,0 +1,42 @@
#include "unk_02020A0C.h"
void DpadMenuBox_GetPosition(const DpadMenuBox *dpadBoxes, u8 *px, u8 *py) {
*px = dpadBoxes->left;
*py = dpadBoxes->top;
}
void DpadMenuBox_GetDimensions(const DpadMenuBox *dpadBoxes, u8 *pw, u8 *ph) {
*pw = dpadBoxes->width;
*ph = dpadBoxes->height;
}
u8 DpadMenuBox_GetNeighborInDirection(const DpadMenuBox *dpadBoxes, u8 *px, u8 *py, u8 *pw, u8 *ph, u8 partyMonIndex, u8 direction) {
u8 neighbor = partyMonIndex;
switch (direction) {
case 0:
neighbor = dpadBoxes[neighbor].buttonUp;
break;
case 1:
neighbor = dpadBoxes[neighbor].buttonDown;
break;
case 2:
neighbor = dpadBoxes[neighbor].buttonLeft;
break;
case 3:
neighbor = dpadBoxes[neighbor].buttonRight;
break;
}
if (px != NULL) {
*px = dpadBoxes[neighbor].left;
}
if (py != NULL) {
*py = dpadBoxes[neighbor].top;
}
if (pw != NULL) {
*pw = dpadBoxes[neighbor].width;
}
if (ph != NULL) {
*ph = dpadBoxes[neighbor].height;
}
return neighbor;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +0,0 @@
#include "global.h"
#include "voltorb_flip/voltorb_flip_data.h"
const u8 sMainMenuMsgNos[] = { 17, 18, 19, 0 };
const u8 sGameInfoMsgNos[] = { 21, 22, 23, 24 };
const u8 ov122_021E9270[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00, 0x00 };
const Ov122_021E9278 ov122_021E9278 = {
.unk0 = {
{ 0x77, 0x17 },
{ 0x74, 0x14 },
{ 0x71, 0x11 },
{ 0x6E, 0x0E },
{ 0x6B, 0x0B },
},
.menuTemplate = { 1, 1, 0, GF_BG_LYR_MAIN_3, 11, 0, 0, 58, 31, 104 },
};

View File

@ -1,364 +0,0 @@
#include "global.h"
#include "voltorb_flip/voltorb_flip.h"
#include "voltorb_flip/voltorb_flip_data.h"
#include "bg_window.h"
#include "gf_gfx_planes.h"
#include "sprite_system.h"
const u16 ov122_021E92A0[] = {
0x00A0,
0x00A1,
0x00C0,
0x00C1,
0x00E0,
0x00E1,
0x0100,
0x0101,
};
const struct GraphicsModes sVoltorbFlipBgModeSet = {
GX_DISPMODE_GRAPHICS,
GX_BGMODE_0,
GX_BGMODE_0,
GX_BG0_AS_2D,
};
const MsgNoList sMenuMsgNos[] = {
{ sMainMenuMsgNos, 3 },
{ sGameInfoMsgNos, 4 },
};
const u8 ov122_021E92B0[4][4] = {
{ 0x0C, 0x08, 0x05, 0x01 },
{ 0x0F, 0x0B, 0x06, 0x02 },
{ 0x0E, 0x0A, 0x07, 0x04 },
{ 0x0D, 0x09, 0x08, 0x08 },
};
const OamCharTransferParam ov122_021E92D0 = {
0x00000000,
0x00020000,
0x00004000,
GX_OBJVRAMMODE_CHAR_1D_32K,
GX_OBJVRAMMODE_CHAR_1D_32K,
};
const SpriteResourceCountsListUnion ov122_021E92E4 = { 2, 2, 2, 2, 0, 0 };
const OamManagerParam ov122_021E92FC = { 0, 126, 0, 32, 1, 126, 0, 32 };
const GraphicsBanks sVoltorbFlipGraphicsBanks = {
GX_VRAM_BG_128_B,
GX_VRAM_BGEXTPLTT_NONE,
GX_VRAM_SUB_BG_128_C,
GX_VRAM_SUB_BGEXTPLTT_NONE,
GX_VRAM_OBJ_128_A,
GX_VRAM_OBJEXTPLTT_NONE,
GX_VRAM_SUB_OBJ_16_I,
GX_VRAM_SUB_OBJEXTPLTT_NONE,
GX_VRAM_TEX_NONE,
GX_VRAM_TEXPLTT_NONE,
};
const Ov122_021E6C2C ov122_021E9344[4] = {
{ 0x00, 0x00, 0x21 },
{ 0x02, 0x00, 0x22 },
{ 0x00, 0x02, 0x23 },
{ 0x02, 0x02, 0x24 },
};
const ManagedSpriteTemplate ov122_021E93A8 = {
0, 0, 0, 0, 0, 0xFFFF, NNS_G2D_VRAM_TYPE_2DSUB, {
1,
1,
1,
1,
0,
0,
},
0,
0
};
const ManagedSpriteTemplate ov122_021E9374 = {
0, 0, 0, 0, 0, 0xFFFF, NNS_G2D_VRAM_TYPE_2DMAIN, {
0,
0,
0,
0,
0,
0,
},
3,
0
};
const WindowTemplate sVoltorbFlipWindowTemplates[17] = {
{
.bgId = 0x03,
.left = 0x02,
.top = 0x13,
.width = 0x1B,
.height = 0x04,
.palette = 0x0C,
.baseTile = 0x00A2,
},
{
.bgId = 0x03,
.left = 0x02,
.top = 0x15,
.width = 0x1B,
.height = 0x02,
.palette = 0x0C,
.baseTile = 0x00A2,
},
{
.bgId = 0x01,
.left = 0x19,
.top = 0x04,
.width = 0x06,
.height = 0x06,
.palette = 0x0E,
.baseTile = 0x010E,
},
{
.bgId = 0x01,
.left = 0x19,
.top = 0x15,
.width = 0x06,
.height = 0x02,
.palette = 0x0E,
.baseTile = 0x0132,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x01,
.width = 0x1E,
.height = 0x02,
.palette = 0x0C,
.baseTile = 0x0001,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x03,
.width = 0x1E,
.height = 0x02,
.palette = 0x0C,
.baseTile = 0x003D,
},
{
.bgId = 0x05,
.left = 0x0D,
.top = 0x06,
.width = 0x12,
.height = 0x03,
.palette = 0x0C,
.baseTile = 0x0079,
},
{
.bgId = 0x05,
.left = 0x0D,
.top = 0x0A,
.width = 0x12,
.height = 0x03,
.palette = 0x0C,
.baseTile = 0x00AF,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x0E,
.width = 0x13,
.height = 0x04,
.palette = 0x0C,
.baseTile = 0x00E5,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x13,
.width = 0x13,
.height = 0x04,
.palette = 0x0C,
.baseTile = 0x0131,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x0F,
.width = 0x07,
.height = 0x02,
.palette = 0x0D,
.baseTile = 0x0001,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x05,
.width = 0x1E,
.height = 0x06,
.palette = 0x0C,
.baseTile = 0x000F,
},
{
.bgId = 0x05,
.left = 0x0A,
.top = 0x0E,
.width = 0x15,
.height = 0x04,
.palette = 0x0C,
.baseTile = 0x00C3,
},
{
.bgId = 0x05,
.left = 0x0A,
.top = 0x13,
.width = 0x15,
.height = 0x04,
.palette = 0x0C,
.baseTile = 0x0117,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x11,
.width = 0x1E,
.height = 0x06,
.palette = 0x0C,
.baseTile = 0x0001,
},
{
.bgId = 0x05,
.left = 0x02,
.top = 0x07,
.width = 0x06,
.height = 0x06,
.palette = 0x0D,
.baseTile = 0x0001,
},
{
.bgId = 0x05,
.left = 0x01,
.top = 0x0F,
.width = 0x1E,
.height = 0x08,
.palette = 0x0C,
.baseTile = 0x0025,
},
};
const BgTemplates sVoltorbFlipBgTemplates = {
{
{
.x = 0,
.y = 0,
.bufferSize = 0x0800,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x04000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 3,
.areaOver = GX_BG_AREAOVER_XLU,
.dummy = 0,
.mosaic = FALSE,
},
{
.x = 0,
.y = 0,
.bufferSize = 0x0800,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0800,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 2,
.areaOver = GX_BG_AREAOVER_XLU,
.dummy = 0,
.mosaic = FALSE,
},
{
.x = 0,
.y = 0,
.bufferSize = 0x0800,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1000,
.charBase = GX_BG_CHARBASE_0x0c000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.dummy = 0,
.mosaic = FALSE,
},
{
.x = 0,
.y = 0,
.bufferSize = 0x0800,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1800,
.charBase = GX_BG_CHARBASE_0x10000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.dummy = 0,
.mosaic = FALSE,
},
{
.x = 0,
.y = 0,
.bufferSize = 0x0800,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x04000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.dummy = 0,
.mosaic = FALSE,
},
{
.x = 0,
.y = 0,
.bufferSize = 0x0800,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0800,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.dummy = 0,
.mosaic = FALSE,
},
}
};

View File

@ -1,23 +0,0 @@
#include "global.h"
#include "voltorb_flip/voltorb_flip_internal.h"
#include "voltorb_flip/voltorb_flip_workflow.h"
const VoltorbFlipWorkflows sVoltorbFlipWorkflows = {
[WORKFLOW_UNK_0] = { NULL, ov122_021E5BA8, ov122_021E5BE4, NULL, NULL },
[WORKFLOW_NEW_ROUND] = { NULL, GenerateBoardAndPrintNewLevel, PrintYouCanEarnEvenMoreCoins, NULL, ov122_021E5D24 },
[WORKFLOW_SELECT_MAIN_MENU] = { PrintPlayNewRound, ov122_021E5DB4, AwaitMainMenuSelection, NULL, NULL },
[WORKFLOW_SELECT_GAME_INFO] = { PrintWhichSetOfInfo, ov122_021E5E34, AwaitGameInfoSelection, NULL, NULL },
[WORKFLOW_HOW_TO_PLAY] = { OpenHowToPlayScreen, NULL, PrintHowToPlayMsg, NULL, CloseTutorialScreen },
[WORKFLOW_HINT] = { OpenHintScreen, NULL, PrintHintMsg, NULL, CloseTutorialScreen },
[WORKFLOW_ABOUT_MEMO] = { OpenAboutMemoScreen, NULL, PrintAboutMemoMsg, NULL, CloseTutorialScreen },
[WORKFLOW_RENDER_BOARD] = { NULL, NULL, RenderBoard, NULL, NULL },
[WORKFLOW_AWAIT_BOARD_INTERACT] = { NULL, NULL, AwaitBoardInteraction, NULL, ov122_021E6008 },
[WORKFLOW_FLIP_CARD] = { PlaySuspensefulFanfare, StartCardFlipEffect, AwaitCardFlipAndResult, ov122_021E6358, NULL },
[WORKFLOW_UNK_10] = { NULL, NULL, PlayWinRoundFanfare, NULL, NULL },
[WORKFLOW_AWARD_COINS] = { NULL, NULL, AwardCoins, NULL, NULL },
[WORKFLOW_REVEAL_BOARD] = { NULL, NULL, ov122_021E64E8, ov122_021E6594, NULL },
[WORKFLOW_UNK_13] = { ov122_021E65F4, NULL, ov122_021E65FC, NULL, ov122_021E67E0 },
[WORKFLOW_UNK_14] = { ov122_021E66CC, ov122_021E66FC, ov122_021E6700, ov122_021E67DC, ov122_021E67E0 },
[WORKFLOW_QUIT_ROUND] = { PrintAreYouSureYouWantToQuit, ov122_021E6900, AwaitQuitYesNoSelection, ov122_021E69DC, NULL },
};

View File

@ -1,217 +0,0 @@
#include "global.h"
#include "voltorb_flip/voltorb_flip.h"
#include "voltorb_flip/voltorb_flip_game.h"
// clang-format off
const u8 sBoardIdDistribution[8][80] = {
// Lv. 8
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
},
// Lv. 7
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 6
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 5
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 4
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 3
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 2
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 1
{
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
};
// clang-format on
// This is arranged such that the payout monotically increases as you go down
// the list.
//
// MaxFreePerRowCol is generally set to ~half the total number of 2's and 3's
// on the board. These are mostly the same across both level sets.
//
// In the second level set, MaxFreeTotal is the same as MaxFreePerRowCol,
// meaning you can potentially get up to ~half the multiplier cards for free. In
// the first level set, MaxFreeTotal is 1 greater, so you can potentially get
// one more multiplier for free.
// - The exception is Lv. 1, where MaxFreeTotal is 1 less than the total number
// of multipliers. In this case, your board could give you all but 1 of the
// multipliers for free.
const BoardConfig sBoardConfigs[80] = {
// Lv. 1
// Voltorbs Twos Threes MaxFreePerRowCol MaxFreeTotal Payout
{ 6, 3, 1, 3, 3 }, // 24
{ 6, 0, 3, 2, 2 }, // 27
{ 6, 5, 0, 3, 4 }, // 32
{ 6, 2, 2, 3, 3 }, // 36
{ 6, 4, 1, 3, 4 }, // 48
{ 6, 3, 1, 3, 3 }, // 24
{ 6, 0, 3, 2, 2 }, // 27
{ 6, 5, 0, 3, 4 }, // 32
{ 6, 2, 2, 3, 3 }, // 36
{ 6, 4, 1, 3, 4 }, // 48
// Lv. 2
{ 7, 1, 3, 2, 3 }, // 54
{ 7, 6, 0, 3, 4 }, // 64
{ 7, 3, 2, 2, 3 }, // 72
{ 7, 0, 4, 2, 3 }, // 81
{ 7, 5, 1, 3, 4 }, // 96
{ 7, 1, 3, 2, 2 }, // 54
{ 7, 6, 0, 3, 3 }, // 64
{ 7, 3, 2, 2, 2 }, // 72
{ 7, 0, 4, 2, 2 }, // 81
{ 7, 5, 1, 3, 3 }, // 96
// Lv. 3
{ 8, 2, 3, 2, 3 }, // 108
{ 8, 7, 0, 3, 4 }, // 128
{ 8, 4, 2, 3, 4 }, // 144
{ 8, 1, 4, 2, 3 }, // 162
{ 8, 6, 1, 4, 3 }, // 192
{ 8, 2, 3, 2, 2 }, // 108
{ 8, 7, 0, 3, 3 }, // 128
{ 8, 4, 2, 3, 3 }, // 144
{ 8, 1, 4, 2, 2 }, // 162
{ 8, 6, 1, 3, 3 }, // 192
// Lv. 4
{ 8, 3, 3, 4, 3 }, // 216
{ 8, 0, 5, 2, 3 }, // 243
{ 10, 8, 0, 4, 5 }, // 256
{ 10, 5, 2, 3, 4 }, // 288
{ 10, 2, 4, 3, 4 }, // 324
{ 8, 3, 3, 3, 3 }, // 216
{ 8, 0, 5, 2, 2 }, // 243
{ 10, 8, 0, 4, 4 }, // 256
{ 10, 5, 2, 3, 3 }, // 288
{ 10, 2, 4, 3, 3 }, // 324
// Lv. 5
{ 10, 7, 1, 4, 5 }, // 384
{ 10, 4, 3, 3, 4 }, // 432
{ 10, 1, 5, 3, 4 }, // 486
{ 10, 9, 0, 4, 5 }, // 512
{ 10, 6, 2, 4, 5 }, // 576
{ 10, 7, 1, 4, 4 }, // 384
{ 10, 4, 3, 3, 3 }, // 432
{ 10, 1, 5, 3, 3 }, // 486
{ 10, 9, 0, 4, 4 }, // 512
{ 10, 6, 2, 4, 4 }, // 576
// Lv. 6
{ 10, 3, 4, 3, 4 }, // 648
{ 10, 0, 6, 3, 4 }, // 729
{ 10, 8, 1, 4, 5 }, // 768
{ 10, 5, 3, 4, 5 }, // 864
{ 10, 2, 5, 3, 4 }, // 972
{ 10, 3, 4, 3, 3 }, // 648
{ 10, 0, 6, 3, 3 }, // 729
{ 10, 8, 1, 4, 4 }, // 768
{ 10, 5, 3, 4, 4 }, // 864
{ 10, 2, 5, 3, 3 }, // 972
// Lv. 7
{ 10, 7, 2, 4, 5 }, // 1152
{ 10, 4, 4, 4, 5 }, // 1296
{ 13, 1, 6, 3, 4 }, // 1458
{ 13, 9, 1, 5, 6 }, // 1536
{ 10, 6, 3, 4, 5 }, // 1728
{ 10, 7, 2, 4, 4 }, // 1152
{ 10, 4, 4, 4, 4 }, // 1296
{ 13, 1, 6, 3, 3 }, // 1458
{ 13, 9, 1, 5, 5 }, // 1536
{ 10, 6, 3, 4, 4 }, // 1728
// Lv. 8
{ 10, 0, 7, 3, 4 }, // 2187
{ 10, 8, 2, 5, 6 }, // 2304
{ 10, 5, 4, 4, 5 }, // 2592
{ 10, 2, 6, 4, 5 }, // 2916
{ 10, 7, 3, 5, 6 }, // 3456
{ 10, 0, 7, 3, 3 }, // 2187
{ 10, 8, 2, 5, 5 }, // 2304
{ 10, 5, 4, 4, 4 }, // 2592
{ 10, 2, 6, 4, 4 }, // 2916
{ 10, 7, 3, 5, 5 }, // 3456
};

View File

@ -1,389 +0,0 @@
#include "global.h"
#include "voltorb_flip/voltorb_flip.h"
#include "voltorb_flip/voltorb_flip_data.h"
#include "voltorb_flip/voltorb_flip_input.h"
const Ov122UnkCB ov122_021E9A0C[] = {
ov122_021E91D0,
ov122_021E91F4,
ov122_021E91F8,
ov122_021E925C,
};
const u8 ov122_021E9A1C[] = {
0x50,
0x68,
0xC8,
0xE0,
0x50,
0x68,
0xE0,
0xF8,
0x68,
0x80,
0xC8,
0xE0,
0x68,
0x80,
0xE0,
0xF8,
0x80,
0x98,
0xE0,
0xF8,
0x08,
0x48,
0xC0,
0x00,
0xA0,
0xC0,
0xC0,
0x00,
0xFF,
0x00,
0x00,
0x00,
};
const u8 ov122_021E9A3C[] = {
0x08,
0x20,
0x08,
0x20,
0x08,
0x20,
0x28,
0x40,
0x08,
0x20,
0x48,
0x60,
0x08,
0x20,
0x68,
0x80,
0x08,
0x20,
0x88,
0xA0,
0x28,
0x40,
0x08,
0x20,
0x28,
0x40,
0x28,
0x40,
0x28,
0x40,
0x48,
0x60,
0x28,
0x40,
0x68,
0x80,
0x28,
0x40,
0x88,
0xA0,
0x48,
0x60,
0x08,
0x20,
0x48,
0x60,
0x28,
0x40,
0x48,
0x60,
0x48,
0x60,
0x48,
0x60,
0x68,
0x80,
0x48,
0x60,
0x88,
0xA0,
0x68,
0x80,
0x08,
0x20,
0x68,
0x80,
0x28,
0x40,
0x68,
0x80,
0x48,
0x60,
0x68,
0x80,
0x68,
0x80,
0x68,
0x80,
0x88,
0xA0,
0x88,
0xA0,
0x08,
0x20,
0x88,
0xA0,
0x28,
0x40,
0x88,
0xA0,
0x48,
0x60,
0x88,
0xA0,
0x68,
0x80,
0x88,
0xA0,
0x88,
0xA0,
0x08,
0x48,
0xC0,
0x00,
0xA0,
0xC0,
0xC0,
0x00,
0xFF,
0x00,
0x00,
0x00,
};
const u8 ov122_021E9AAC[] = {
0x08,
0x08,
0x18,
0x18,
0x14,
0x05,
0x19,
0x01,
0x28,
0x08,
0x18,
0x18,
0x15,
0x06,
0x00,
0x02,
0x48,
0x08,
0x18,
0x18,
0x16,
0x07,
0x01,
0x03,
0x68,
0x08,
0x18,
0x18,
0x17,
0x08,
0x02,
0x04,
0x88,
0x08,
0x18,
0x18,
0x18,
0x09,
0x03,
0x19,
0x08,
0x28,
0x18,
0x18,
0x00,
0x0A,
0x19,
0x06,
0x28,
0x28,
0x18,
0x18,
0x01,
0x0B,
0x05,
0x07,
0x48,
0x28,
0x18,
0x18,
0x02,
0x0C,
0x06,
0x08,
0x68,
0x28,
0x18,
0x18,
0x03,
0x0D,
0x07,
0x09,
0x88,
0x28,
0x18,
0x18,
0x04,
0x0E,
0x08,
0x19,
0x08,
0x48,
0x18,
0x18,
0x05,
0x0F,
0x19,
0x0B,
0x28,
0x48,
0x18,
0x18,
0x06,
0x10,
0x0A,
0x0C,
0x48,
0x48,
0x18,
0x18,
0x07,
0x11,
0x0B,
0x0D,
0x68,
0x48,
0x18,
0x18,
0x08,
0x12,
0x0C,
0x0E,
0x88,
0x48,
0x18,
0x18,
0x09,
0x13,
0x0D,
0x19,
0x08,
0x68,
0x18,
0x18,
0x0A,
0x14,
0x1A,
0x10,
0x28,
0x68,
0x18,
0x18,
0x0B,
0x15,
0x0F,
0x11,
0x48,
0x68,
0x18,
0x18,
0x0C,
0x16,
0x10,
0x12,
0x68,
0x68,
0x18,
0x18,
0x0D,
0x17,
0x11,
0x13,
0x88,
0x68,
0x18,
0x18,
0x0E,
0x18,
0x12,
0x1A,
0x08,
0x88,
0x18,
0x18,
0x0F,
0x00,
0x1A,
0x15,
0x28,
0x88,
0x18,
0x18,
0x10,
0x01,
0x14,
0x16,
0x48,
0x88,
0x18,
0x18,
0x11,
0x02,
0x15,
0x17,
0x68,
0x88,
0x18,
0x18,
0x12,
0x03,
0x16,
0x18,
0x88,
0x88,
0x18,
0x18,
0x13,
0x04,
0x17,
0x1A,
0xE0,
0x28,
0x00,
0x00,
0x19,
0x1A,
0x1B,
0x1C,
0xE0,
0xB0,
0x00,
0x00,
0x19,
0x1A,
0x1B,
0x1C,
};
u8 ov122_021E9BA0[5][2] = {
{ 0xC8, 0x50 },
{ 0xE0, 0x50 },
{ 0xC8, 0x68 },
{ 0xE0, 0x68 },
{ 0xE0, 0x80 },
};

View File

@ -2,72 +2,279 @@
#include "global.h"
#include "voltorb_flip/voltorb_flip.h"
#include "voltorb_flip/voltorb_flip_data.h"
#include "heap.h"
#include "math_util.h"
static void AddRoundSummary(GameState *);
static RoundSummary *PrevRoundSummary(GameState *);
static int CardValue(CardType);
static int CalcNextLevel(GameState *);
static void SelectBoardId(GameState *);
static void CountPointsInRowCols(GameState *);
static void CountVoltorbsInRowCols(GameState *);
static void CalcBoardMaxPayout(GameState *);
static void CountMultiplierCards(GameState *);
static void PlaceCardsOnBoard(GameState *, CardType, int, int);
static BOOL RetryBoardGen(GameState *);
static void GenerateBoard(GameState *);
static Card *GetCard(GameState *, int);
static void VoltorbFlipGameState_PushBoardHistory(VoltorbFlipGameState *gameState);
static RoundSummary *VoltorbFlipGameState_GetBoardHistoryTop(VoltorbFlipGameState *gameState);
static int GetCardValueFromType(CardType cardType);
static int VoltorbFlipGameState_CalcNextLevel(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_SelectBoardId(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_CountPointsInRowCols(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_CountVoltorbsInRowCols(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_CalcBoardMaxPayout(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_CountMultiplierCards(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_PlaceCardsOnBoard(VoltorbFlipGameState *gameState, CardType type, int n, BOOL isNot1Card);
static BOOL VoltorbFlipGameState_RetryBoardGen(VoltorbFlipGameState *gameState);
static void VoltorbFlipGameState_GenerateBoard(VoltorbFlipGameState *gameState);
static Card *VoltorbFlipGameState_GetCard(VoltorbFlipGameState *gameState, CardID cardId);
extern const u8 sBoardIdDistribution[8][80];
extern const BoardConfig sBoardConfigs[80];
// clang-format off
const u8 sBoardIdDistribution[8][80] = {
// Lv. 8
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
},
// Lv. 7
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 6
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 5
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 4
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 3
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 2
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
// Lv. 1
{
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
},
};
// clang-format on
GameState *CreateGameState(enum HeapID heapID) {
GameState *ptr = Heap_Alloc(heapID, sizeof(GameState));
MI_CpuFill8(ptr, 0, sizeof(GameState));
// This is arranged such that the payout monotically increases as you go down
// the list.
//
// MaxFreePerRowCol is generally set to ~half the total number of 2's and 3's
// on the board. These are mostly the same across both level sets.
//
// In the second level set, MaxFreeTotal is the same as MaxFreePerRowCol,
// meaning you can potentially get up to ~half the multiplier cards for free. In
// the first level set, MaxFreeTotal is 1 greater, so you can potentially get
// one more multiplier for free.
// - The exception is Lv. 1, where MaxFreeTotal is 1 less than the total number
// of multipliers. In this case, your board could give you all but 1 of the
// multipliers for free.
const BoardConfig sBoardConfigs[80] = {
// Lv. 1
// Voltorbs Twos Threes MaxFreePerRowCol MaxFreeTotal Payout
{ 6, 3, 1, 3, 3 }, // 24
{ 6, 0, 3, 2, 2 }, // 27
{ 6, 5, 0, 3, 4 }, // 32
{ 6, 2, 2, 3, 3 }, // 36
{ 6, 4, 1, 3, 4 }, // 48
{ 6, 3, 1, 3, 3 }, // 24
{ 6, 0, 3, 2, 2 }, // 27
{ 6, 5, 0, 3, 4 }, // 32
{ 6, 2, 2, 3, 3 }, // 36
{ 6, 4, 1, 3, 4 }, // 48
// Lv. 2
{ 7, 1, 3, 2, 3 }, // 54
{ 7, 6, 0, 3, 4 }, // 64
{ 7, 3, 2, 2, 3 }, // 72
{ 7, 0, 4, 2, 3 }, // 81
{ 7, 5, 1, 3, 4 }, // 96
{ 7, 1, 3, 2, 2 }, // 54
{ 7, 6, 0, 3, 3 }, // 64
{ 7, 3, 2, 2, 2 }, // 72
{ 7, 0, 4, 2, 2 }, // 81
{ 7, 5, 1, 3, 3 }, // 96
// Lv. 3
{ 8, 2, 3, 2, 3 }, // 108
{ 8, 7, 0, 3, 4 }, // 128
{ 8, 4, 2, 3, 4 }, // 144
{ 8, 1, 4, 2, 3 }, // 162
{ 8, 6, 1, 4, 3 }, // 192
{ 8, 2, 3, 2, 2 }, // 108
{ 8, 7, 0, 3, 3 }, // 128
{ 8, 4, 2, 3, 3 }, // 144
{ 8, 1, 4, 2, 2 }, // 162
{ 8, 6, 1, 3, 3 }, // 192
// Lv. 4
{ 8, 3, 3, 4, 3 }, // 216
{ 8, 0, 5, 2, 3 }, // 243
{ 10, 8, 0, 4, 5 }, // 256
{ 10, 5, 2, 3, 4 }, // 288
{ 10, 2, 4, 3, 4 }, // 324
{ 8, 3, 3, 3, 3 }, // 216
{ 8, 0, 5, 2, 2 }, // 243
{ 10, 8, 0, 4, 4 }, // 256
{ 10, 5, 2, 3, 3 }, // 288
{ 10, 2, 4, 3, 3 }, // 324
// Lv. 5
{ 10, 7, 1, 4, 5 }, // 384
{ 10, 4, 3, 3, 4 }, // 432
{ 10, 1, 5, 3, 4 }, // 486
{ 10, 9, 0, 4, 5 }, // 512
{ 10, 6, 2, 4, 5 }, // 576
{ 10, 7, 1, 4, 4 }, // 384
{ 10, 4, 3, 3, 3 }, // 432
{ 10, 1, 5, 3, 3 }, // 486
{ 10, 9, 0, 4, 4 }, // 512
{ 10, 6, 2, 4, 4 }, // 576
// Lv. 6
{ 10, 3, 4, 3, 4 }, // 648
{ 10, 0, 6, 3, 4 }, // 729
{ 10, 8, 1, 4, 5 }, // 768
{ 10, 5, 3, 4, 5 }, // 864
{ 10, 2, 5, 3, 4 }, // 972
{ 10, 3, 4, 3, 3 }, // 648
{ 10, 0, 6, 3, 3 }, // 729
{ 10, 8, 1, 4, 4 }, // 768
{ 10, 5, 3, 4, 4 }, // 864
{ 10, 2, 5, 3, 3 }, // 972
// Lv. 7
{ 10, 7, 2, 4, 5 }, // 1152
{ 10, 4, 4, 4, 5 }, // 1296
{ 13, 1, 6, 3, 4 }, // 1458
{ 13, 9, 1, 5, 6 }, // 1536
{ 10, 6, 3, 4, 5 }, // 1728
{ 10, 7, 2, 4, 4 }, // 1152
{ 10, 4, 4, 4, 4 }, // 1296
{ 13, 1, 6, 3, 3 }, // 1458
{ 13, 9, 1, 5, 5 }, // 1536
{ 10, 6, 3, 4, 4 }, // 1728
// Lv. 8
{ 10, 0, 7, 3, 4 }, // 2187
{ 10, 8, 2, 5, 6 }, // 2304
{ 10, 5, 4, 4, 5 }, // 2592
{ 10, 2, 6, 4, 5 }, // 2916
{ 10, 7, 3, 5, 6 }, // 3456
{ 10, 0, 7, 3, 3 }, // 2187
{ 10, 8, 2, 5, 5 }, // 2304
{ 10, 5, 4, 4, 4 }, // 2592
{ 10, 2, 6, 4, 4 }, // 2916
{ 10, 7, 3, 5, 5 }, // 3456
};
VoltorbFlipGameState *VoltorbFlip_CreateGameState(enum HeapID heapID) {
VoltorbFlipGameState *ptr = Heap_Alloc(heapID, sizeof(VoltorbFlipGameState));
MI_CpuFill8(ptr, 0, sizeof(VoltorbFlipGameState));
return ptr;
}
void FreeGameState(GameState *game) {
void VoltorbFlip_FreeGameState(VoltorbFlipGameState *game) {
Heap_Free(game);
}
void NewBoard(GameState *game) {
SelectBoardId(game);
GenerateBoard(game);
CountPointsInRowCols(game);
CalcBoardMaxPayout(game);
CountMultiplierCards(game);
void VoltorbFlipGameState_NewBoard(VoltorbFlipGameState *game) {
VoltorbFlipGameState_SelectBoardId(game);
VoltorbFlipGameState_GenerateBoard(game);
VoltorbFlipGameState_CountPointsInRowCols(game);
VoltorbFlipGameState_CalcBoardMaxPayout(game);
VoltorbFlipGameState_CountMultiplierCards(game);
}
void ov122_021E8528(GameState *game) {
void VoltorbFlipGameState_UpdateHistoryAndReset(VoltorbFlipGameState *game) {
int i;
RoundSummary temp[5];
RoundSummary boardHistoryBak[5];
AddRoundSummary(game);
VoltorbFlipGameState_PushBoardHistory(game);
for (i = 0; i < 5; i++) {
temp[i] = game->boardHistory[i];
boardHistoryBak[i] = game->boardHistory[i];
}
int head = game->historyHead;
MI_CpuFill8(game, 0, sizeof(GameState));
MI_CpuFill8(game, 0, sizeof(VoltorbFlipGameState));
for (i = 0; i < 5; i++) {
game->boardHistory[i] = temp[i];
game->boardHistory[i] = boardHistoryBak[i];
}
game->historyHead = head;
}
void SetRoundOutcome(GameState *game, RoundOutcome outcome) {
void VoltorbFlipGameState_SetRoundOutcome(VoltorbFlipGameState *game, VoltorbFlipRoundOutcome outcome) {
game->roundOutcome = outcome;
}
void MultiplyPayoutAndUpdateCardsFlipped(GameState *game, CardType type) {
u32 value = CardValue(type);
void VoltorbFlipGameState_MultiplyPayoutAndUpdateCardsFlipped(VoltorbFlipGameState *game, CardType type) {
u32 value = GetCardValueFromType(type);
GF_ASSERT(value < 4);
if (value == 0) {
@ -93,8 +300,8 @@ void MultiplyPayoutAndUpdateCardsFlipped(GameState *game, CardType type) {
game->payout = newPayout;
}
void FlipCard(GameState *game, CardID cardId) {
Card *card = GetCard(game, cardId);
void VoltorbFlipGameState_FlipCard(VoltorbFlipGameState *game, CardID cardId) {
Card *card = VoltorbFlipGameState_GetCard(game, cardId);
GF_ASSERT(card->flipped == FALSE);
card->flipped = TRUE;
@ -102,7 +309,7 @@ void FlipCard(GameState *game, CardID cardId) {
}
// Returns TRUE if some amount was deducted.
BOOL DeductFromPayout(GameState *game, u8 amount) {
BOOL VoltorbFlipGameState_DeductFromPayout(VoltorbFlipGameState *game, u8 amount) {
int payout = game->payout;
if (payout != 0) {
int newPayout = payout - amount;
@ -115,42 +322,37 @@ BOOL DeductFromPayout(GameState *game, u8 amount) {
return FALSE;
}
BOOL IsCardFlipped(GameState *game, CardID cardId) {
Card *card = GetCard(game, cardId);
BOOL VoltorbFlipGameState_IsCardFlipped(VoltorbFlipGameState *game, CardID cardId) {
Card *card = VoltorbFlipGameState_GetCard(game, cardId);
return card->flipped;
}
BOOL EarnedMaxPayout(GameState *game) {
BOOL VoltorbFlipGameState_HasEarnedMaxPayout(VoltorbFlipGameState *game) {
GF_ASSERT(game->payout <= game->maxPayout);
return game->payout == game->maxPayout;
}
CardType GetCardType(GameState *game, CardID cardId) {
Card *card = GetCard(game, cardId);
CardType VoltorbFlipGameState_GetCardType(VoltorbFlipGameState *game, CardID cardId) {
Card *card = VoltorbFlipGameState_GetCard(game, cardId);
return card->type;
}
int IsCardMemoFlagOn(GameState *game, CardID cardId, int memoFlag) {
Card *card = GetCard(game, cardId);
int cardMemoFlag = card->memo & memoFlag;
if (cardMemoFlag == memoFlag) {
return 1;
}
return 0;
BOOL VoltorbFlipGameState_IsCardMemoFlagOn(VoltorbFlipGameState *game, CardID cardId, int memoFlag) {
Card *card = VoltorbFlipGameState_GetCard(game, cardId);
return (card->memo & memoFlag) == memoFlag;
}
void ToggleCardMemo(GameState *game, CardID cardId, int memoFlag) {
Card *card = GetCard(game, cardId);
int var2 = card->memo;
if (var2 & memoFlag) {
void VoltorbFlipGameState_ToggleCardMemo(VoltorbFlipGameState *game, CardID cardId, int memoFlag) {
Card *card = VoltorbFlipGameState_GetCard(game, cardId);
if (card->memo & memoFlag) {
card->memo -= memoFlag;
return;
} else {
card->memo |= memoFlag;
}
card->memo |= memoFlag;
}
int PointsAlongAxis(GameState *game, Axis axis, u8 i) {
int VoltorbFlipGameStates_GetPointsAlongAxis(VoltorbFlipGameState *game, Axis axis, u8 i) {
GF_ASSERT(i < 5);
switch (axis) {
@ -164,7 +366,7 @@ int PointsAlongAxis(GameState *game, Axis axis, u8 i) {
return 0;
}
int VoltorbsAlongAxis(GameState *game, Axis axis, u8 i) {
int VoltorbFlipGameState_GetVoltorbsAlongAxis(VoltorbFlipGameState *game, Axis axis, u8 i) {
GF_ASSERT(i < 5);
switch (axis) {
@ -178,7 +380,7 @@ int VoltorbsAlongAxis(GameState *game, Axis axis, u8 i) {
return 0;
}
int FlippedCardsAlongAxis(GameState *game, Axis axis, u8 i) {
int VoltorbFlipGameState_CountFlippedCardsAlongAxis(VoltorbFlipGameState *game, Axis axis, u8 i) {
u8 count = 0;
switch (axis) {
@ -202,29 +404,29 @@ int FlippedCardsAlongAxis(GameState *game, Axis axis, u8 i) {
return count;
}
u16 GamePayout(GameState *game) {
u16 VoltorbFlipGameState_GetGamePayout(VoltorbFlipGameState *game) {
return game->payout;
}
u8 MultiplierCards(GameState *game) {
u8 VoltorbFlipGameState_GetMultiplierCards(VoltorbFlipGameState *game) {
return game->multiplierCards;
}
u8 MultiplierCardsFlipped(GameState *game) {
u8 VoltorbFlipGameState_GetMultiplierCardsFlipped(VoltorbFlipGameState *game) {
return game->multipliersFlipped;
}
u8 GameLevel(GameState *game) {
u8 VoltorbFlipGameState_GetGameLevel(VoltorbFlipGameState *game) {
return game->level;
}
// Levels gained (as viewed in display).
int LevelsGained(GameState *game) {
RoundSummary *round = PrevRoundSummary(game);
int VoltorbFlipGameState_CalculateLevelsGained(VoltorbFlipGameState *game) {
RoundSummary *round = VoltorbFlipGameState_GetBoardHistoryTop(game);
return round->level - game->level;
}
static void AddRoundSummary(GameState *game) {
static void VoltorbFlipGameState_PushBoardHistory(VoltorbFlipGameState *game) {
GF_ASSERT(game->historyHead < 5);
RoundSummary *round = &game->boardHistory[game->historyHead];
@ -236,7 +438,7 @@ static void AddRoundSummary(GameState *game) {
game->historyHead = (game->historyHead + 1) % 5;
}
static RoundSummary *PrevRoundSummary(GameState *game) {
static RoundSummary *VoltorbFlipGameState_GetBoardHistoryTop(VoltorbFlipGameState *game) {
int idx;
int head = game->historyHead;
@ -249,7 +451,7 @@ static RoundSummary *PrevRoundSummary(GameState *game) {
return &game->boardHistory[idx];
}
static int CardValue(CardType type) {
static int GetCardValueFromType(CardType type) {
switch (type) {
case CARD_TYPE_ONE:
return 1;
@ -265,12 +467,12 @@ static int CardValue(CardType type) {
// True if the boardId corresponds to at least level `level`.
#define LEVEL_AT_LEAST(boardId, level) (boardId >= 10 * (level - 1))
static int CalcNextLevel(GameState *game) {
static int VoltorbFlipGameState_CalcNextLevel(VoltorbFlipGameState *game) {
int i;
u32 boardId;
RoundOutcome roundOutcome;
VoltorbFlipRoundOutcome roundOutcome;
RoundSummary *prevRound = PrevRoundSummary(game);
RoundSummary *prevRound = VoltorbFlipGameState_GetBoardHistoryTop(game);
roundOutcome = prevRound->roundOutcome;
if (roundOutcome == ROUND_OUTCOME_WON && LEVEL_AT_LEAST(prevRound->boardId, 8)) {
@ -315,11 +517,11 @@ static int CalcNextLevel(GameState *game) {
return 7; // Lv. 1
}
static void SelectBoardId(GameState *game) {
static void VoltorbFlipGameState_SelectBoardId(VoltorbFlipGameState *game) {
int i;
int rand = (u32)MTRandom() % 100;
int level = CalcNextLevel(game);
int level = VoltorbFlipGameState_CalcNextLevel(game);
GF_ASSERT(level < 8);
for (i = 0; i < 80; i++) {
@ -332,26 +534,26 @@ static void SelectBoardId(GameState *game) {
game->boardId = i;
}
static void CountPointsInRowCols(GameState *game) {
static void VoltorbFlipGameState_CountPointsInRowCols(VoltorbFlipGameState *game) {
int r;
int c;
for (r = 0; r < 5; r++) {
game->pointsPerRow[r] = 0;
for (c = 0; c < 5; c++) {
game->pointsPerRow[r] += CardValue(game->cards[r][c].type);
game->pointsPerRow[r] += GetCardValueFromType(game->cards[r][c].type);
}
}
for (r = 0; r < 5; r++) {
game->pointsPerCol[r] = 0;
for (c = 0; c < 5; c++) {
game->pointsPerCol[r] += CardValue(game->cards[c][r].type);
game->pointsPerCol[r] += GetCardValueFromType(game->cards[c][r].type);
}
}
}
static void CountVoltorbsInRowCols(GameState *game) {
static void VoltorbFlipGameState_CountVoltorbsInRowCols(VoltorbFlipGameState *game) {
int r;
int c;
@ -374,27 +576,27 @@ static void CountVoltorbsInRowCols(GameState *game) {
}
}
static void CalcBoardMaxPayout(GameState *game) {
static void VoltorbFlipGameState_CalcBoardMaxPayout(VoltorbFlipGameState *game) {
int i;
int var1 = 1;
int payout = 1;
for (i = 0; i < 25; i++) {
Card *card = GetCard(game, (u8)i);
Card *card = VoltorbFlipGameState_GetCard(game, (u8)i);
GF_ASSERT(card->type != CARD_TYPE_NONE);
if (card->type != CARD_TYPE_VOLTORB) {
var1 *= CardValue(card->type);
payout *= GetCardValueFromType(card->type);
}
}
if (var1 > 50000) {
var1 = 50000;
if (payout > 50000) {
payout = 50000;
}
game->maxPayout = var1;
game->maxPayout = payout;
}
static void CountMultiplierCards(GameState *game) {
static void VoltorbFlipGameState_CountMultiplierCards(VoltorbFlipGameState *game) {
for (int i = 0; i < 25; i++) {
Card *card = GetCard(game, (u8)i);
Card *card = VoltorbFlipGameState_GetCard(game, (u8)i);
GF_ASSERT(card->type != CARD_TYPE_NONE);
if (IS_MULTIPLIER_CARD(card->type)) {
@ -403,7 +605,7 @@ static void CountMultiplierCards(GameState *game) {
}
}
static void PlaceCardsOnBoard(GameState *game, CardType type, int n, BOOL isNot1Card) {
static void VoltorbFlipGameState_PlaceCardsOnBoard(VoltorbFlipGameState *game, CardType type, int n, BOOL isNot1Card) {
u8 cardId;
int attempts = 0;
@ -414,7 +616,7 @@ static void PlaceCardsOnBoard(GameState *game, CardType type, int n, BOOL isNot1
} else {
cardId = i;
}
Card *card = GetCard(game, cardId);
Card *card = VoltorbFlipGameState_GetCard(game, cardId);
if (card->type == CARD_TYPE_ONE || !isNot1Card) {
card->type = type;
} else {
@ -431,7 +633,7 @@ static void PlaceCardsOnBoard(GameState *game, CardType type, int n, BOOL isNot1
}
}
static BOOL RetryBoardGen(GameState *game) {
static BOOL VoltorbFlipGameState_RetryBoardGen(VoltorbFlipGameState *game) {
int i;
const BoardConfig *config;
@ -445,12 +647,12 @@ static BOOL RetryBoardGen(GameState *game) {
config = &sBoardConfigs[game->boardId];
for (i = 0; i < 25; i++) {
Card *card = GetCard(game, (u8)i);
Card *card = VoltorbFlipGameState_GetCard(game, (u8)i);
if (IS_MULTIPLIER_CARD(card->type)) {
int col = i % 5;
int row = i / 5;
int voltorbsInCol = VoltorbsAlongAxis(game, AXIS_COL, col);
int voltorbsInRow = VoltorbsAlongAxis(game, AXIS_ROW, row);
int voltorbsInCol = VoltorbFlipGameState_GetVoltorbsAlongAxis(game, AXIS_COL, col);
int voltorbsInRow = VoltorbFlipGameState_GetVoltorbsAlongAxis(game, AXIS_ROW, row);
if (voltorbsInRow == 0 || voltorbsInCol == 0) {
freeMultipliersPerCol[col]++;
freeMultipliersPerRow[row]++;
@ -472,7 +674,7 @@ static BOOL RetryBoardGen(GameState *game) {
return FALSE;
}
static void GenerateBoard(GameState *game) {
static void VoltorbFlipGameState_GenerateBoard(VoltorbFlipGameState *game) {
GF_ASSERT(game->boardId < 80);
int voltorbs = sBoardConfigs[game->boardId].voltorbs;
@ -480,19 +682,19 @@ static void GenerateBoard(GameState *game) {
int threes = sBoardConfigs[game->boardId].threes;
for (int i = 0; i < 1000; i++) {
PlaceCardsOnBoard(game, CARD_TYPE_ONE, 25, FALSE);
PlaceCardsOnBoard(game, CARD_TYPE_VOLTORB, voltorbs, TRUE);
PlaceCardsOnBoard(game, CARD_TYPE_TWO, twos, TRUE);
PlaceCardsOnBoard(game, CARD_TYPE_THREE, threes, TRUE);
CountVoltorbsInRowCols(game);
VoltorbFlipGameState_PlaceCardsOnBoard(game, CARD_TYPE_ONE, 25, FALSE);
VoltorbFlipGameState_PlaceCardsOnBoard(game, CARD_TYPE_VOLTORB, voltorbs, TRUE);
VoltorbFlipGameState_PlaceCardsOnBoard(game, CARD_TYPE_TWO, twos, TRUE);
VoltorbFlipGameState_PlaceCardsOnBoard(game, CARD_TYPE_THREE, threes, TRUE);
VoltorbFlipGameState_CountVoltorbsInRowCols(game);
if (!RetryBoardGen(game)) {
if (!VoltorbFlipGameState_RetryBoardGen(game)) {
break;
}
}
}
static Card *GetCard(GameState *game, CardID cardId) {
static Card *VoltorbFlipGameState_GetCard(VoltorbFlipGameState *game, CardID cardId) {
GF_ASSERT((u32)cardId < 25);
u8 row = cardId / 5;

View File

@ -4,237 +4,321 @@
#include "constants/sndseq.h"
#include "voltorb_flip/voltorb_flip.h"
#include "voltorb_flip/voltorb_flip_data.h"
#include "heap.h"
#include "sprite_system.h"
#include "system.h"
#include "touchscreen.h"
#include "unk_02005D10.h"
#include "unk_020192D0.h"
#include "unk_02020654.h"
static void ov122_021E8E78(Ov122_021E8CFC *);
static void ov122_021E8F58(Ov122_021E8CFC *);
static int ov122_021E8F6C(Ov122_021E8CFC *);
static int ov122_021E9020(Ov122_021E8CFC *);
static void ov122_021E9108(Ov122_021E8CFC *, int);
static void ov122_021E9134(Ov122_021E8CFC *);
static void ov122_021E9154(Ov122_021E8CFC *, int);
static void ov122_021E91AC(struct Ov122_021E8CFC *, u32, int, int);
static void VoltorbFlipInputHandler_HandleDpad(VoltorbFlipInputHandler *inputHandler);
static void VoltorbFlipInputHandler_MoveMemoCursorToExit(VoltorbFlipInputHandler *inputHandler);
static int VoltorbFlipInputHandler_HandleInput_Memo(VoltorbFlipInputHandler *inputHandler);
static int VoltorbFlipInputHandler_HandleInput_NoMemo(VoltorbFlipInputHandler *inputHandler);
static void VoltorbFlipInputHandler_SetFocus(VoltorbFlipInputHandler *inputHandler, int newFocus);
static void VoltorbFlipInputHandler_SetMemoCursorSpritePos(VoltorbFlipInputHandler *inputHandler);
static void VoltorbFlipInputHandler_UpdateBoardCursorAnim(VoltorbFlipInputHandler *inputHandler, int newFocus);
static void VoltorbFlipInputHandler_HandleChangeFocus(VoltorbFlipInputHandler *inputHandler, int newFocus, int oldFocus, MenuInputState inputMode);
static void VoltorbFlipInputCB_OnButtonPress(void *data, int new, int prev);
static void VoltorbFlipInputCB_OnTouchSwitch(void *data, int new, int prev);
static void VoltorbFlipInputCB_OnKeyMove(void *data, int new, int prev);
static void VoltorbFlipInputCB_OnTouch(void *data, int new, int prev);
extern const Ov122UnkCB ov122_021E9A0C[];
extern const TouchscreenHitbox ov122_021E9A1C[];
extern const u8 ov122_021E9A3C[];
extern const u8 ov122_021E9AAC[];
extern u8 ov122_021E9BA0[5][2];
const GridCallbacks sInputCallbacks = {
VoltorbFlipInputCB_OnButtonPress,
VoltorbFlipInputCB_OnTouchSwitch,
VoltorbFlipInputCB_OnKeyMove,
VoltorbFlipInputCB_OnTouch,
};
Ov122_021E8CFC *ov122_021E8CFC(enum HeapID heapID, struct ManagedSprite *a1, struct ManagedSprite *a2) {
GF_ASSERT(a1 != NULL);
// clang-format off
const TouchscreenHitbox sMemoTouchscreenHitboxes[] = {
{ .rect = { 80, 104, 200, 224 } },
{ .rect = { 80, 104, 224, 248 } },
{ .rect = { 104, 128, 200, 224 } },
{ .rect = { 104, 128, 224, 248 } },
{ .rect = { 128, 152, 224, 248 } },
{ .rect = { 8, 72, 192, 256 } },
{ .rect = { 160, 192, 192, 256 } },
{ .rect = TOUCHSCREEN_RECTLIST_END },
};
Ov122_021E8CFC *ptr = Heap_Alloc(heapID, sizeof(Ov122_021E8CFC));
MI_CpuFill8(ptr, 0, sizeof(Ov122_021E8CFC));
const TouchscreenHitbox sTouchscreenHitboxes[] = {
{ .rect = { 8, 32, 8, 32 } },
{ .rect = { 8, 32, 40, 64 } },
{ .rect = { 8, 32, 72, 96 } },
{ .rect = { 8, 32, 104, 128 } },
{ .rect = { 8, 32, 136, 160 } },
{ .rect = { 40, 64, 8, 32 } },
{ .rect = { 40, 64, 40, 64 } },
{ .rect = { 40, 64, 72, 96 } },
{ .rect = { 40, 64, 104, 128 } },
{ .rect = { 40, 64, 136, 160 } },
{ .rect = { 72, 96, 8, 32 } },
{ .rect = { 72, 96, 40, 64 } },
{ .rect = { 72, 96, 72, 96 } },
{ .rect = { 72, 96, 104, 128 } },
{ .rect = { 72, 96, 136, 160 } },
{ .rect = { 104, 128, 8, 32 } },
{ .rect = { 104, 128, 40, 64 } },
{ .rect = { 104, 128, 72, 96 } },
{ .rect = { 104, 128, 104, 128 } },
{ .rect = { 104, 128, 136, 160 } },
{ .rect = { 136, 160, 8, 32 } },
{ .rect = { 136, 160, 40, 64 } },
{ .rect = { 136, 160, 72, 96 } },
{ .rect = { 136, 160, 104, 128 } },
{ .rect = { 136, 160, 136, 160 } },
{ .rect = { 8, 72, 192, 0 } },
{ .rect = { 160, 192, 192, 0 } },
{ .rect = TOUCHSCREEN_RECTLIST_END },
};
ptr->unk0 = a1;
ptr->unk4 = a2;
ptr->unk8 = sub_02019BA4(ov122_021E9A3C, ov122_021E9AAC, ov122_021E9A0C, ptr, 1, ptr->unkD, heapID);
const DpadMenuBox sDpadButtonSpecs[] = {
{ 8, 8, 24, 24, 20, 5, 25, 1 },
{ 40, 8, 24, 24, 21, 6, 0, 2 },
{ 72, 8, 24, 24, 22, 7, 1, 3 },
{ 104, 8, 24, 24, 23, 8, 2, 4 },
{ 136, 8, 24, 24, 24, 9, 3, 25 },
{ 8, 40, 24, 24, 0, 10, 25, 6 },
{ 40, 40, 24, 24, 1, 11, 5, 7 },
{ 72, 40, 24, 24, 2, 12, 6, 8 },
{ 104, 40, 24, 24, 3, 13, 7, 9 },
{ 136, 40, 24, 24, 4, 14, 8, 25 },
{ 8, 72, 24, 24, 5, 15, 25, 11 },
{ 40, 72, 24, 24, 6, 16, 10, 12 },
{ 72, 72, 24, 24, 7, 17, 11, 13 },
{ 104, 72, 24, 24, 8, 18, 12, 14 },
{ 136, 72, 24, 24, 9, 19, 13, 25 },
{ 8, 104, 24, 24, 10, 20, 26, 16 },
{ 40, 104, 24, 24, 11, 21, 15, 17 },
{ 72, 104, 24, 24, 12, 22, 16, 18 },
{ 104, 104, 24, 24, 13, 23, 17, 19 },
{ 136, 104, 24, 24, 14, 24, 18, 26 },
{ 8, 136, 24, 24, 15, 0, 26, 21 },
{ 40, 136, 24, 24, 16, 1, 20, 22 },
{ 72, 136, 24, 24, 17, 2, 21, 23 },
{ 104, 136, 24, 24, 18, 3, 22, 24 },
{ 136, 136, 24, 24, 19, 4, 23, 26 },
{ 224, 40, 0, 0, 25, 26, 27, 28 },
{ 224, 176, 0, 0, 25, 26, 27, 28 },
};
ov122_021E9108(ptr, 0);
u8 sMemoCursorPos[5][2] = {
{ 200, 80 },
{ 224, 80 },
{ 200, 104 },
{ 224, 104 },
{ 224, 128 },
};
// clang-format on
VoltorbFlipInputHandler *VoltorbFlipInputHandler_Create(enum HeapID heapID, struct ManagedSprite *boardCursorSprite, struct ManagedSprite *memoCursorSprite) {
GF_ASSERT(boardCursorSprite != NULL);
VoltorbFlipInputHandler *ptr = Heap_Alloc(heapID, sizeof(VoltorbFlipInputHandler));
MI_CpuFill8(ptr, 0, sizeof(VoltorbFlipInputHandler));
ptr->boardCursorSprite = boardCursorSprite;
ptr->memoCursorSprite = memoCursorSprite;
ptr->gridInputHandler = GridInputHandler_Create(sTouchscreenHitboxes, sDpadButtonSpecs, &sInputCallbacks, ptr, 1, ptr->focus, heapID);
VoltorbFlipInputHandler_SetFocus(ptr, 0);
return ptr;
}
void ov122_021E8D58(Ov122_021E8CFC *a0) {
GF_ASSERT(a0->unk8 != 0);
sub_02019BDC(a0->unk8);
Heap_Free(a0);
void VoltorbFlipInputHandler_Free(VoltorbFlipInputHandler *inputHandler) {
GF_ASSERT(inputHandler->gridInputHandler != 0);
GridInputHandler_Free(inputHandler->gridInputHandler);
Heap_Free(inputHandler);
}
int ov122_021E8D74(Ov122_021E8CFC *a0) {
if (a0->memoFocused) {
return ov122_021E8F6C(a0);
int VoltorbFlipInputHandler_HandleInput(VoltorbFlipInputHandler *inputHandler) {
if (inputHandler->memoFocused) {
return VoltorbFlipInputHandler_HandleInput_Memo(inputHandler);
} else {
return VoltorbFlipInputHandler_HandleInput_NoMemo(inputHandler);
}
return ov122_021E9020(a0);
}
void ov122_021E8D8C(Ov122_021E8CFC *a0, int a1) {
if (a1 != 0) {
ManagedSprite_SetDrawFlag(a0->unk0, 1);
return;
void VoltorbFlipInputHandler_SetBoardFocused(VoltorbFlipInputHandler *inputHandler, BOOL draw) {
if (draw) {
ManagedSprite_SetDrawFlag(inputHandler->boardCursorSprite, TRUE);
} else {
ManagedSprite_SetDrawFlag(inputHandler->boardCursorSprite, FALSE);
inputHandler->focus = 0;
}
ManagedSprite_SetDrawFlag(a0->unk0, 0);
a0->unkD = 0;
}
void SetMemoOpen(Ov122_021E8CFC *a0, BOOL val) {
a0->memoOpen = val;
ov122_021E9154(a0, a0->unkD);
void VoltorbFlipInputHandler_SetMemoOpen(VoltorbFlipInputHandler *inputHandler, BOOL open) {
inputHandler->memoOpen = open;
VoltorbFlipInputHandler_UpdateBoardCursorAnim(inputHandler, inputHandler->focus);
}
void SetMemoFocused(Ov122_021E8CFC *a0, BOOL val) {
a0->memoFocused = val;
ov122_021E9154(a0, a0->unkD);
ManagedSprite_SetDrawFlag(a0->unk4, val);
void VoltorbFlipInputHandler_SetMemoFocused(VoltorbFlipInputHandler *inputHandler, BOOL focused) {
inputHandler->memoFocused = focused;
VoltorbFlipInputHandler_UpdateBoardCursorAnim(inputHandler, inputHandler->focus);
ManagedSprite_SetDrawFlag(inputHandler->memoCursorSprite, focused);
}
int ov122_021E8DF0(Ov122_021E8CFC *a0) {
GF_ASSERT(a0 != 0);
GF_ASSERT(a0->unk8 != 0);
int VoltorbFlipInputHandler_GetCursorPos(VoltorbFlipInputHandler *inputHandler) {
GF_ASSERT(inputHandler != 0);
GF_ASSERT(inputHandler->gridInputHandler != 0);
// This seems to return which touch screen hitbox was pressed/clicked
return sub_02019F74(a0->unk8);
return GridInputHandler_GetNextInput(inputHandler->gridInputHandler);
}
int ov122_021E8E0C(Ov122_021E8CFC *a0) {
GF_ASSERT(a0 != 0);
GF_ASSERT(a0->unk8 != 0);
return a0->unkEx;
int VoltorbFlipInputHandler_GetMemoButtonID(VoltorbFlipInputHandler *inputHandler) {
GF_ASSERT(inputHandler != 0);
GF_ASSERT(inputHandler->gridInputHandler != 0);
return inputHandler->memoButtonID;
}
BOOL ov122_021E8E28(Ov122_021E8CFC *a0) {
int var1 = sub_02019F74(a0->unk8);
return var1 != 25 && var1 != 26;
BOOL VoltorbFlipInputHandler_IsCursorInGridRange(VoltorbFlipInputHandler *inputHandler) {
int input = GridInputHandler_GetNextInput(inputHandler->gridInputHandler);
return input != VOLTORB_FLIP_INPUT_MEMO && input != VOLTORB_FLIP_INPUT_QUIT;
}
void ov122_021E8E40(Ov122_021E8CFC *a0) {
sub_02019F7C(a0->unk8, 0);
ov122_021E9108(a0, 0);
void VoltorbFlipInputHandler_SetGridCursor0(VoltorbFlipInputHandler *inputHandler) {
GridInputHandler_SetNextInput(inputHandler->gridInputHandler, 0);
VoltorbFlipInputHandler_SetFocus(inputHandler, 0);
}
void ov122_021E8E58(Ov122_021E8CFC *a0) {
a0->unkEx = 0;
a0->unkEy = 0;
ov122_021E9134(a0);
void VoltorbFlipInputHandler_SetMemoCursor0(VoltorbFlipInputHandler *inputHandler) {
inputHandler->memoButtonID = 0;
inputHandler->lastMemoButtonID = 0;
VoltorbFlipInputHandler_SetMemoCursorSpritePos(inputHandler);
}
BOOL ov122_021E8E70(Ov122_021E8CFC *a0) {
return a0->unkFz;
BOOL VoltorbFlipInputHandler_GetTouchNew(VoltorbFlipInputHandler *inputHandler) {
return inputHandler->touchNew;
}
// Probably for handling focus movement
static void ov122_021E8E78(Ov122_021E8CFC *a0) {
int var2;
u8 var1 = a0->unkEx;
static void VoltorbFlipInputHandler_HandleDpad(VoltorbFlipInputHandler *inputHandler) {
int newMemoButtonID;
u8 lastMemoButtonID = inputHandler->memoButtonID;
if ((gSystem.newAndRepeatedKeys & 0x80) != 0) {
var2 = var1 + 2;
if (var2 > 4) {
var2 = 4;
if (gSystem.newAndRepeatedKeys & PAD_KEY_DOWN) {
newMemoButtonID = lastMemoButtonID + 2;
if (newMemoButtonID > 4) {
newMemoButtonID = 4;
}
a0->unkEx = var2;
} else if ((gSystem.newAndRepeatedKeys & 0x20) != 0) {
var2 = var1 - 1;
if (var2 < 0) {
var2 = 0;
inputHandler->memoButtonID = newMemoButtonID;
} else if (gSystem.newAndRepeatedKeys & PAD_KEY_LEFT) {
newMemoButtonID = lastMemoButtonID - 1;
if (newMemoButtonID < 0) {
newMemoButtonID = 0;
}
a0->unkEx = var2;
} else if ((gSystem.newAndRepeatedKeys & 0x40) != 0) {
if (var1 == 4 && (u8)(a0->unkEy + 0xfe) <= 1) {
a0->unkEx = (a0->unkEy);
inputHandler->memoButtonID = newMemoButtonID;
} else if (gSystem.newAndRepeatedKeys & PAD_KEY_UP) {
if (lastMemoButtonID == 4 && (inputHandler->lastMemoButtonID == 2 || inputHandler->lastMemoButtonID == 3)) {
inputHandler->memoButtonID = inputHandler->lastMemoButtonID;
} else {
var2 = var1 - 2;
if (var2 < 0) {
var2 = 0;
newMemoButtonID = lastMemoButtonID - 2;
if (newMemoButtonID < 0) {
newMemoButtonID = 0;
}
a0->unkEx = var2;
inputHandler->memoButtonID = newMemoButtonID;
}
} else if ((gSystem.newAndRepeatedKeys & 0x10) != 0) {
var2 = var1 + 1;
if (var2 > 4) {
var2 = 4;
} else if (gSystem.newAndRepeatedKeys & PAD_KEY_RIGHT) {
newMemoButtonID = lastMemoButtonID + 1;
if (newMemoButtonID > 4) {
newMemoButtonID = 4;
}
a0->unkEx = var2;
inputHandler->memoButtonID = newMemoButtonID;
}
if (var1 != a0->unkEx) {
a0->unkEy = var1;
ov122_021E9134(a0);
if (lastMemoButtonID != inputHandler->memoButtonID) {
inputHandler->lastMemoButtonID = lastMemoButtonID;
VoltorbFlipInputHandler_SetMemoCursorSpritePos(inputHandler);
PlaySE(SEQ_SE_DP_SELECT);
}
}
static void ov122_021E8F58(Ov122_021E8CFC *a0) {
a0->unkEx = 4;
ov122_021E9134(a0);
static void VoltorbFlipInputHandler_MoveMemoCursorToExit(VoltorbFlipInputHandler *inputHandler) {
inputHandler->memoButtonID = 4;
VoltorbFlipInputHandler_SetMemoCursorSpritePos(inputHandler);
}
static int ov122_021E8F6C(Ov122_021E8CFC *a0) {
a0->unkFz = FALSE;
static int VoltorbFlipInputHandler_HandleInput_Memo(VoltorbFlipInputHandler *inputHandler) {
inputHandler->touchNew = FALSE;
if ((gSystem.newKeys & (1 << 10)) != 0) {
if (gSystem.newKeys & PAD_BUTTON_X) {
return 4;
}
if ((gSystem.newKeys & 2) != 0) {
ov122_021E8F58(a0);
if (gSystem.newKeys & PAD_BUTTON_B) {
VoltorbFlipInputHandler_MoveMemoCursorToExit(inputHandler);
return 3;
}
if ((gSystem.newKeys & 1) != 0) {
if (a0->unkEx == 4) {
ov122_021E8F58(a0);
if (gSystem.newKeys & PAD_BUTTON_A) {
if (inputHandler->memoButtonID == 4) {
VoltorbFlipInputHandler_MoveMemoCursorToExit(inputHandler);
return 3;
}
return 1;
}
ov122_021E8E78(a0);
a0->unkFz = TRUE;
VoltorbFlipInputHandler_HandleDpad(inputHandler);
inputHandler->touchNew = TRUE;
u8 var1 = TouchscreenHitbox_FindRectAtTouchNew(ov122_021E9A1C);
if (var1 < 8) {
switch (var1) {
u8 input = TouchscreenHitbox_FindRectAtTouchNew(sMemoTouchscreenHitboxes);
if (input < NELEMS(sMemoTouchscreenHitboxes)) { // bug: limit should be 1 fewer
switch (input) {
case 4:
a0->unkEx = var1;
ov122_021E9134(a0);
inputHandler->memoButtonID = input;
VoltorbFlipInputHandler_SetMemoCursorSpritePos(inputHandler);
return 3;
case 5:
return 4;
case 6:
return 2;
default:
a0->unkEx = var1;
ov122_021E9134(a0);
default: // 0-3
inputHandler->memoButtonID = input;
VoltorbFlipInputHandler_SetMemoCursorSpritePos(inputHandler);
return 1;
}
}
return 0;
}
static int ov122_021E9020(Ov122_021E8CFC *a0) {
int var1 = sub_02019F74(a0->unk8);
u32 elementId = sub_02019D18(a0->unk8);
sub_02019F74(a0->unk8);
static int VoltorbFlipInputHandler_HandleInput_NoMemo(VoltorbFlipInputHandler *inputHandler) {
int newFocus = GridInputHandler_GetNextInput(inputHandler->gridInputHandler);
int elementId = GridInputHandler_HandleInput_AllowHold(inputHandler->gridInputHandler);
GridInputHandler_GetNextInput(inputHandler->gridInputHandler);
if (elementId < 28) {
a0->unkFz = System_GetTouchNew();
if (elementId < NELEMS(sTouchscreenHitboxes)) { // bug: limit should be 1 lower
inputHandler->touchNew = System_GetTouchNew();
// Open/close Memo button
if (elementId == 25) {
if (a0->unkFz) {
a0->unkD = var1;
sub_02019F7C(a0->unk8, a0->unkD);
if (elementId == VOLTORB_FLIP_INPUT_MEMO) {
if (inputHandler->touchNew) {
inputHandler->focus = newFocus;
GridInputHandler_SetNextInput(inputHandler->gridInputHandler, inputHandler->focus);
} else {
ov122_021E8E40(a0);
VoltorbFlipInputHandler_SetGridCursor0(inputHandler);
}
return 4;
}
// Quit button
if (elementId == 26) {
if (elementId == VOLTORB_FLIP_INPUT_QUIT) {
return 2;
}
return 1;
}
a0->unkFz = 0;
if ((gSystem.newKeys & (1 << 10)) != 0) {
if ((u8)(a0->unkD + 0xe7) <= 1) {
ov122_021E8E40(a0);
inputHandler->touchNew = FALSE;
if (gSystem.newKeys & PAD_BUTTON_X) {
if (inputHandler->focus == VOLTORB_FLIP_INPUT_MEMO || inputHandler->focus == VOLTORB_FLIP_INPUT_QUIT) {
VoltorbFlipInputHandler_SetGridCursor0(inputHandler);
}
return 4;
}
if ((gSystem.newKeys & 2) != 0) {
if (gSystem.newKeys & PAD_BUTTON_B) {
return 3;
}
if (a0->memoOpen && a0->unkD != 25 && a0->unkD != 26) {
u32 whichButton = TouchscreenHitbox_FindRectAtTouchNew(ov122_021E9A1C);
if (inputHandler->memoOpen && inputHandler->focus != VOLTORB_FLIP_INPUT_MEMO && inputHandler->focus != VOLTORB_FLIP_INPUT_QUIT) {
u32 whichButton = TouchscreenHitbox_FindRectAtTouchNew(sMemoTouchscreenHitboxes);
if (whichButton < 8) {
switch (whichButton) {
case 0:
@ -251,82 +335,91 @@ static int ov122_021E9020(Ov122_021E8CFC *a0) {
return 0;
}
static void ov122_021E9108(Ov122_021E8CFC *a0, int a1) {
u8 temp1;
u8 temp2;
static void VoltorbFlipInputHandler_SetFocus(VoltorbFlipInputHandler *inputHandler, int newFocus) {
u8 x;
u8 y;
ov122_021E9154(a0, a1);
sub_02020A0C(sub_0201A018(a0->unk8, a1), &temp1, &temp2);
ManagedSprite_SetPositionXY(a0->unk0, temp1, temp2);
a0->unkD = a1;
VoltorbFlipInputHandler_UpdateBoardCursorAnim(inputHandler, newFocus);
DpadMenuBox_GetPosition(GridInputHandler_GetDpadBox(inputHandler->gridInputHandler, newFocus), &x, &y);
ManagedSprite_SetPositionXY(inputHandler->boardCursorSprite, x, y);
inputHandler->focus = newFocus;
}
static void ov122_021E9134(Ov122_021E8CFC *a0) {
ManagedSprite_SetPositionXY(a0->unk4, ov122_021E9BA0[a0->unkEx][0], ov122_021E9BA0[a0->unkEx][1]);
static void VoltorbFlipInputHandler_SetMemoCursorSpritePos(VoltorbFlipInputHandler *inputHandler) {
ManagedSprite_SetPositionXY(inputHandler->memoCursorSprite, sMemoCursorPos[inputHandler->memoButtonID][0], sMemoCursorPos[inputHandler->memoButtonID][1]);
}
static void ov122_021E9154(Ov122_021E8CFC *a0, int newFocus) {
static void VoltorbFlipInputHandler_UpdateBoardCursorAnim(VoltorbFlipInputHandler *inputHandler, int newFocus) {
int indicatorType;
if (newFocus < 25) {
if (a0->memoFocused) {
if (newFocus < VOLTORB_FLIP_INPUT_GRID_NUM) { // In grid
if (inputHandler->memoFocused) {
indicatorType = 24; // Disabled pencil
} else if (a0->memoOpen) {
} else if (inputHandler->memoOpen) {
indicatorType = 23; // Pencil
} else {
indicatorType = 18; // Card focus
}
} else if (newFocus == 25) {
indicatorType = 7; // Open/close Memo button
} else if (newFocus == 26) {
indicatorType = 4; // Quit button
} else if (newFocus == VOLTORB_FLIP_INPUT_MEMO) { // Memo
indicatorType = 7; // Open/close Memo button
} else if (newFocus == VOLTORB_FLIP_INPUT_QUIT) { // Quit
indicatorType = 4; // Quit button
} else {
GF_ASSERT(FALSE);
}
if (a0->memoOpen) {
ManagedSprite_SetPaletteOverride(a0->unk0, 4);
if (inputHandler->memoOpen) {
ManagedSprite_SetPaletteOverride(inputHandler->boardCursorSprite, 4);
} else {
ManagedSprite_SetPaletteOverride(a0->unk0, 2);
ManagedSprite_SetPaletteOverride(inputHandler->boardCursorSprite, 2);
}
ManagedSprite_SetAnimNoRestart(a0->unk0, indicatorType);
ManagedSprite_SetAnimNoRestart(inputHandler->boardCursorSprite, indicatorType);
}
static void ov122_021E91AC(Ov122_021E8CFC *a0, u32 newFocus, int a2, int a3) {
if ((a3 == 0 || newFocus != 25) && newFocus != a2 && newFocus < 28) {
static void VoltorbFlipInputHandler_HandleChangeFocus(VoltorbFlipInputHandler *inputHandler, int newFocus, int oldFocus, MenuInputState inputMode) {
if ((inputMode == MENU_INPUT_STATE_BUTTONS || newFocus != VOLTORB_FLIP_INPUT_MEMO) && newFocus != oldFocus && newFocus < NELEMS(sTouchscreenHitboxes)) {
// Updates visual focus indicator
ov122_021E9108(a0, newFocus);
VoltorbFlipInputHandler_SetFocus(inputHandler, newFocus);
// Plays when you switch focus
PlaySE(SEQ_SE_DP_SELECT);
}
}
void ov122_021E91D0(Ov122_021E8CFC *a0, int a1, int a2) {
sub_02019F7C(a0->unk8, (u8)a1);
ov122_021E9108(a0, a1);
// DpadGridCallbacks
static void VoltorbFlipInputCB_OnButtonPress(void *data, int new, int prev) {
VoltorbFlipInputHandler *inputHandler = data;
GridInputHandler_SetNextInput(inputHandler->gridInputHandler, (u8)new);
VoltorbFlipInputHandler_SetFocus(inputHandler, new);
PlaySE(SEQ_SE_DP_SELECT);
}
void ov122_021E91F4(Ov122_021E8CFC *a0, int a1, int a2) {
static void VoltorbFlipInputCB_OnTouchSwitch(void *data, int new, int prev) {
// no-op
}
void ov122_021E91F8(Ov122_021E8CFC *a0, int a1, int a2) {
if (a1 == 27) {
a1 = a0->unkC * 5 + 4;
GF_ASSERT(a1 < 25);
sub_02019F7C(a0->unk8, (u8)a1);
} else if (a1 == 28) {
a1 = a0->unkC * 5;
GF_ASSERT(a1 < 25);
sub_02019F7C(a0->unk8, (u8)a1);
static void VoltorbFlipInputCB_OnKeyMove(void *data, int new, int prev) {
VoltorbFlipInputHandler *inputHandler = data;
if (new == VOLTORB_FLIP_COL4_ROWLAST) { // wrap around left
new = inputHandler->selectedRow * 5 + 4;
GF_ASSERT(new < VOLTORB_FLIP_INPUT_GRID_NUM);
GridInputHandler_SetNextInput(inputHandler->gridInputHandler, (u8)new);
} else if (new == VOLTORB_FLIP_COL0_ROWLAST) { // wrap around right
new = inputHandler->selectedRow * 5;
GF_ASSERT(new < VOLTORB_FLIP_INPUT_GRID_NUM);
GridInputHandler_SetNextInput(inputHandler->gridInputHandler, (u8)new);
}
if (a1 != 25 && a1 != 26) {
a0->unkC = a1 / 5;
if (new != VOLTORB_FLIP_INPUT_MEMO && new != VOLTORB_FLIP_INPUT_QUIT) {
inputHandler->selectedRow = new / 5;
}
ov122_021E91AC(a0, a1, a2, 0);
VoltorbFlipInputHandler_HandleChangeFocus(inputHandler, new, prev, MENU_INPUT_STATE_BUTTONS);
}
void ov122_021E925C(Ov122_021E8CFC *a0, int a1, int a2) {
ov122_021E91AC(a0, a1, a2, 1);
static void VoltorbFlipInputCB_OnTouch(void *data, int new, int prev) {
VoltorbFlipInputHandler *inputHandler = data;
VoltorbFlipInputHandler_HandleChangeFocus(inputHandler, new, prev, MENU_INPUT_STATE_TOUCH);
}

Some files were not shown because too many files have changed in this diff Show More