mirror of https://github.com/pret/pokeheartgold
Merge pull request #413 from PikalaxALT/voltorb_flip_graphics
Voltorb Flip graphics; NitroGFX LZ extfmt
This commit is contained in:
commit
70905ba8a8
|
|
@ -2,4 +2,5 @@
|
|||
**/*.inc
|
||||
**/*.json
|
||||
lib/
|
||||
tools/nitrogfx/
|
||||
tools/nitrogfx/*.c
|
||||
tools/nitrogfx/*.h
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
590
asm/overlay_14.s
590
asm/overlay_14.s
File diff suppressed because it is too large
Load Diff
112
asm/overlay_18.s
112
asm/overlay_18.s
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
104
asm/overlay_81.s
104
asm/overlay_81.s
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
1617
asm/unk_020192D0.s
1617
asm/unk_020192D0.s
File diff suppressed because it is too large
Load Diff
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
*.NCGR
|
||||
*.lz
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
*.NCGR
|
||||
*.NSCR
|
||||
*.NCER
|
||||
*.NANR
|
||||
*.png
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 251 B |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
12
main.lsf
12
main.lsf
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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 },
|
||||
};
|
||||
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
};
|
||||
|
|
@ -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 },
|
||||
};
|
||||
|
|
@ -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
|
||||
};
|
||||
|
|
@ -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 },
|
||||
};
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue