Decomp thirty adventure-log accessors

Decompile from asm, all of them accessors on ADVENTURE_LOG_PTR:

  SetAdventureLogStructLocation  SetAdventureLogCompleted   IncrementNbEvolutions
  SetAdventureLogDungeonFloor    GetAdventureLogCompleted   GetNbEvolutions
  GetAdventureLogDungeonFloor    IsAdventureLogNotEmpty     IncrementNbEggsHatched
  IncrementNbDungeonsCleared     GetNbDungeonsCleared       GetNbEggsHatched
  IncrementNbFriendRescues       GetNbFriendRescues         GetNbPokemonJoined
  GetNbMovesLearned              SetVictoriesOnOneFloor     GetVictoriesOnOneFloor
  GetNbPokemonBattled            IncrementNbBigTreasureWins SetNbBigTreasureWins
  GetNbBigTreasureWins           SetNbRecycled              GetNbRecycled
  IncrementNbSkyGiftsSent        SetNbSkyGiftsSent          GetNbSkyGiftsSent
  IncrementNbFainted             GetNbFainted               GetSentryDutyGamePoints

No new types. struct adventure_log already exists in include/adventure_log.h with
every field these touch named and offset-commented, and struct dungeon_floor_pair
in dungeon.h; every offset in the asm lands on a named field. That header is the
reason a batch this size was tractable: the only modelling needed was reading
which field each function touches.

Two orderings decided four of the thirty, both instances of the rule added to
MATCHING_TIPS in the previous commit. IsAdventureLogNotEmpty needed its loop
index declared before the pointer local, not after -- with the pointer first the
two land in swapped registers, at 35. The three Set functions needed the
completion-flag write placed before the clamp rather than after: written in the
obvious order the clamp is emitted ahead of the first pointer load and the two
literal-pool words come out reversed, at 250 each. Reordering the statement fixed
all three.

The counters clamp at 0x000F423F, decimal 999999, and each function sets one bit
of completion_flags[0]. The exact shape differs per function and is reproduced
rather than normalised: three increment then clamp, two clamp then increment, and
the three setters write the flag before storing the value. Those differences are
what the target does.

The clamp comparisons are signed even though the fields are u32, so each is
written with an explicit (s32) cast rather than retyping a shared struct.

ADVENTURE_LOG_PTR and _022AB69C move into adventure_log.h. src/main_0204FDFC.c
declared the pointer itself, from before any of this was decompiled; that line is
replaced by the header it already includes, and the object rebuilds unchanged.

Nine adventure-log functions remain in asm and are not in this commit:
ClearAdventureLogStruct, ComputeSpecialCounters, CopyLogTo, CopyLogFrom,
SetItemAcquired, GetNbItemAcquired, SetChallengeLetterCleared, SetPokemonBattled
and SetSentryDutyGamePoints.

No comments are added to any pmd-sky file.

Authored by Claude (Opus 5) under human direction. Confirmed by a matching
build: build/pmdsky.us/pmdsky.us.nds: OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-08-17 23:05:26 -07:00
parent 59c4a95e44
commit 4f46fed938
29 changed files with 1781 additions and 1883 deletions

View File

@@ -1,11 +1,4 @@
#pragma once
.public _0209E3A1
.public _0209E3A2
.public _0209E3A3
.public _022AB4F8
.public _022AB5AC
.public _022AB69C
.public ADVENTURE_LOG_PTR
.public DUNGEON_DATA_LIST
.public DungeonSwapIdToIdx
.public DungeonSwapIdxToId
@@ -35,8 +28,13 @@
.public ResetPlayTimer
.public SECONDARY_TERRAIN_TYPES
.public StrncpyName
.public TEAM_MEMBER_TABLE_PTR
.public _0209E3A1
.public _0209E3A2
.public _0209E3A3
.public _022AB4F8
.public _022AB5AC
.public sub_0204CEE0
.public sub_02050E5C
.public sub_02050E8C
.public sub_0205EE40
.public TEAM_MEMBER_TABLE_PTR

View File

@@ -0,0 +1,2 @@
#pragma once
.public ADVENTURE_LOG_PTR

View File

@@ -0,0 +1 @@
#pragma once

View File

@@ -1,27 +1,3 @@
#pragma once
.public _0209E6BD
.public _022AB924
.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS
.public ADVENTURE_LOG_PTR
.public ARM9_UNKNOWN_DATA__NA_209E6BC
.public CONVERSION2_TYPE_TABLE
.public Copy16BitsFrom
.public Copy16BitsTo
.public CopyNStringFromId
.public GetAdventureLogCompleted
.public GetBaseFormCastformCherrimDeoxys
.public GetDexNumberVeneer
.public GetRankUpEntry
.public GetResolvedPerformanceProgressFlag
.public GetStringFromFileVeneer
.public IsItemValidVeneer
.public IsRealMove
.public MemZero
.public NormalizeTreasureBox
.public SetAdventureLogCompleted
.public SetResolvedPerformanceProgressFlag
.public StrncpyName
.public StrncpySimpleNoPad
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public TEAM_NAME

View File

@@ -0,0 +1,8 @@
#pragma once
.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS
.public ADVENTURE_LOG_PTR
.public GetBaseFormCastformCherrimDeoxys
.public GetDexNumberVeneer
.public IsRealMove
.public SetAdventureLogCompleted
.public TEAM_MEMBER_TABLE_PTR

View File

@@ -0,0 +1,7 @@
#pragma once
.public ADVENTURE_LOG_PTR
.public GetAdventureLogCompleted
.public IsItemValidVeneer
.public NormalizeTreasureBox
.public SetAdventureLogCompleted
.public SetResolvedPerformanceProgressFlag

View File

@@ -0,0 +1,18 @@
#pragma once
.public ADVENTURE_LOG_PTR
.public ARM9_UNKNOWN_DATA__NA_209E6BC
.public CONVERSION2_TYPE_TABLE
.public ComputeSpecialCounters
.public Copy16BitsFrom
.public Copy16BitsTo
.public CopyNStringFromId
.public GetRankUpEntry
.public GetResolvedPerformanceProgressFlag
.public GetStringFromFileVeneer
.public MemZero
.public StrncpyName
.public StrncpySimpleNoPad
.public StrncpySimpleNoPadSafe
.public TEAM_NAME
.public _0209E6BD
.public _022AB924

View File

@@ -835,355 +835,3 @@ sub_0204FA0C: ; 0x0204FA0C
_0204FA1C: .word sub_02050E8C
_0204FA20: .word PLAY_TIME_SECONDS
arm_func_end sub_0204FA0C
arm_func_start SetAdventureLogStructLocation
SetAdventureLogStructLocation: ; 0x0204FA24
ldr r1, _0204FA34 ; =_022AB69C
ldr r0, _0204FA38 ; =ADVENTURE_LOG_PTR
str r1, [r0]
bx lr
.align 2, 0
_0204FA34: .word _022AB69C
_0204FA38: .word ADVENTURE_LOG_PTR
arm_func_end SetAdventureLogStructLocation
arm_func_start SetAdventureLogDungeonFloor
SetAdventureLogDungeonFloor: ; 0x0204FA3C
ldr r1, _0204FA58 ; =ADVENTURE_LOG_PTR
ldrb r2, [r0]
ldr r1, [r1]
strb r2, [r1, #0x278]
ldrb r0, [r0, #1]
strb r0, [r1, #0x279]
bx lr
.align 2, 0
_0204FA58: .word ADVENTURE_LOG_PTR
arm_func_end SetAdventureLogDungeonFloor
arm_func_start GetAdventureLogDungeonFloor
GetAdventureLogDungeonFloor: ; 0x0204FA5C
ldr r0, _0204FA6C ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
add r0, r0, #0x278
bx lr
.align 2, 0
_0204FA6C: .word ADVENTURE_LOG_PTR
arm_func_end GetAdventureLogDungeonFloor
arm_func_start ClearAdventureLogStruct
ClearAdventureLogStruct: ; 0x0204FA70
mov r3, #0
ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR
mov r0, r3
_0204FA7C:
ldr r2, [r1]
str r0, [r2, r3, lsl #2]
add r3, r3, #1
cmp r3, #4
blt _0204FA7C
ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR
mov r3, #0
ldr r2, [r1]
str r0, [r2, #0x2c]
ldr r2, [r1]
str r0, [r2, #0x30]
ldr r2, [r1]
str r0, [r2, #0x34]
ldr r2, [r1]
str r0, [r2, #0x28]
ldr r2, [r1]
str r0, [r2, #0x10]
ldr r2, [r1]
str r0, [r2, #0x14]
ldr r2, [r1]
str r0, [r2, #0x18]
ldr r2, [r1]
str r0, [r2, #0x1c]
ldr r2, [r1]
str r0, [r2, #0x20]
ldr r2, [r1]
str r0, [r2, #0x24]
ldr r2, [r1]
str r0, [r2, #0x38]
ldr r2, [r1]
str r0, [r2, #0x3c]
ldr r2, [r1]
str r0, [r2, #0x40]
_0204FB00:
ldr r2, [r1]
add r2, r2, r0, lsl #2
str r3, [r2, #0x44]
ldr r2, [r1]
add r2, r2, r0, lsl #2
add r0, r0, #1
str r3, [r2, #0xd8]
cmp r0, #0x25
blt _0204FB00
ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR
mov r2, #0
_0204FB2C:
ldr r1, [r0]
add r1, r1, r3, lsl #2
add r3, r3, #1
str r2, [r1, #0x16c]
cmp r3, #0x11
blt _0204FB2C
ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR
mov ip, #0
_0204FB4C:
ldr r1, [r0]
add r1, r1, r2, lsl #2
add r2, r2, #1
str ip, [r1, #0x1b0]
cmp r2, #0x2c
blt _0204FB4C
ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR
ldr r0, [r1]
str ip, [r0, #0x260]
mov r0, #0x3e8
_0204FB74:
rsb r2, ip, #5
mul r3, r2, r0
ldr r2, [r1]
add r2, r2, ip, lsl #2
add ip, ip, #1
str r3, [r2, #0x264]
cmp ip, #5
blt _0204FB74
bx lr
.align 2, 0
_0204FB98: .word ADVENTURE_LOG_PTR
arm_func_end ClearAdventureLogStruct
arm_func_start SetAdventureLogCompleted
SetAdventureLogCompleted: ; 0x0204FB9C
ldr r1, _0204FBC0 ; =ADVENTURE_LOG_PTR
mov r3, r0, asr #5
ldr ip, [r1]
and r0, r0, #0x1f
ldr r2, [ip, r3, lsl #2]
mov r1, #1
orr r0, r2, r1, lsl r0
str r0, [ip, r3, lsl #2]
bx lr
.align 2, 0
_0204FBC0: .word ADVENTURE_LOG_PTR
arm_func_end SetAdventureLogCompleted
arm_func_start IsAdventureLogNotEmpty
IsAdventureLogNotEmpty: ; 0x0204FBC4
ldr r0, _0204FBF8 ; =ADVENTURE_LOG_PTR
mov r1, #0
ldr r2, [r0]
b _0204FBE8
_0204FBD4:
ldr r0, [r2, r1, lsl #2]
cmp r0, #0
movne r0, #1
bxne lr
add r1, r1, #1
_0204FBE8:
cmp r1, #4
blt _0204FBD4
mov r0, #0
bx lr
.align 2, 0
_0204FBF8: .word ADVENTURE_LOG_PTR
arm_func_end IsAdventureLogNotEmpty
arm_func_start GetAdventureLogCompleted
GetAdventureLogCompleted: ; 0x0204FBFC
ldr r1, _0204FC24 ; =ADVENTURE_LOG_PTR
mov r2, r0, asr #5
ldr r1, [r1]
and r3, r0, #0x1f
ldr r0, [r1, r2, lsl #2]
mov r1, #1
tst r0, r1, lsl r3
moveq r1, #0
and r0, r1, #0xff
bx lr
.align 2, 0
_0204FC24: .word ADVENTURE_LOG_PTR
arm_func_end GetAdventureLogCompleted
arm_func_start IncrementNbDungeonsCleared
IncrementNbDungeonsCleared: ; 0x0204FC28
ldr r0, _0204FC64 ; =ADVENTURE_LOG_PTR
ldr r1, _0204FC68 ; =0x000F423F
ldr r3, [r0]
ldr r2, [r3, #0x10]
add r2, r2, #1
str r2, [r3, #0x10]
ldr r3, [r0]
ldr r2, [r3]
orr r2, r2, #0x10
str r2, [r3]
ldr r2, [r0]
ldr r0, [r2, #0x10]
cmp r0, r1
strgt r1, [r2, #0x10]
bx lr
.align 2, 0
_0204FC64: .word ADVENTURE_LOG_PTR
_0204FC68: .word 0x000F423F
arm_func_end IncrementNbDungeonsCleared
arm_func_start GetNbDungeonsCleared
GetNbDungeonsCleared: ; 0x0204FC6C
ldr r0, _0204FC7C ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x10]
bx lr
.align 2, 0
_0204FC7C: .word ADVENTURE_LOG_PTR
arm_func_end GetNbDungeonsCleared
arm_func_start IncrementNbFriendRescues
IncrementNbFriendRescues: ; 0x0204FC80
ldr r0, _0204FCC0 ; =ADVENTURE_LOG_PTR
ldr r1, _0204FCC4 ; =0x000F423F
ldr r3, [r0]
ldr r2, [r3, #0x14]
add r2, r2, #1
str r2, [r3, #0x14]
ldr r2, [r0]
ldr r0, [r2, #0x14]
cmp r0, r1
ldr r0, _0204FCC0 ; =ADVENTURE_LOG_PTR
strgt r1, [r2, #0x14]
ldr r1, [r0]
ldr r0, [r1]
orr r0, r0, #0x40
str r0, [r1]
bx lr
.align 2, 0
_0204FCC0: .word ADVENTURE_LOG_PTR
_0204FCC4: .word 0x000F423F
arm_func_end IncrementNbFriendRescues
arm_func_start GetNbFriendRescues
GetNbFriendRescues: ; 0x0204FCC8
ldr r0, _0204FCD8 ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x14]
bx lr
.align 2, 0
_0204FCD8: .word ADVENTURE_LOG_PTR
arm_func_end GetNbFriendRescues
arm_func_start IncrementNbEvolutions
IncrementNbEvolutions: ; 0x0204FCDC
ldr r0, _0204FD1C ; =ADVENTURE_LOG_PTR
ldr r1, _0204FD20 ; =0x000F423F
ldr r3, [r0]
ldr r2, [r3, #0x18]
add r2, r2, #1
str r2, [r3, #0x18]
ldr r2, [r0]
ldr r0, [r2, #0x18]
cmp r0, r1
ldr r0, _0204FD1C ; =ADVENTURE_LOG_PTR
strgt r1, [r2, #0x18]
ldr r1, [r0]
ldr r0, [r1]
orr r0, r0, #0x80
str r0, [r1]
bx lr
.align 2, 0
_0204FD1C: .word ADVENTURE_LOG_PTR
_0204FD20: .word 0x000F423F
arm_func_end IncrementNbEvolutions
arm_func_start GetNbEvolutions
GetNbEvolutions: ; 0x0204FD24
ldr r0, _0204FD34 ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x18]
bx lr
.align 2, 0
_0204FD34: .word ADVENTURE_LOG_PTR
arm_func_end GetNbEvolutions
arm_func_start IncrementNbSteals
IncrementNbSteals: ; 0x0204FD38
bx lr
arm_func_end IncrementNbSteals
arm_func_start IncrementNbEggsHatched
IncrementNbEggsHatched: ; 0x0204FD3C
ldr r1, _0204FD70 ; =ADVENTURE_LOG_PTR
ldr r0, _0204FD74 ; =0x000F423F
ldr r2, [r1]
ldr r1, [r2, #0x1c]
cmp r1, r0
addlt r0, r1, #1
strlt r0, [r2, #0x1c]
ldr r0, _0204FD70 ; =ADVENTURE_LOG_PTR
ldr r1, [r0]
ldr r0, [r1]
orr r0, r0, #0x100
str r0, [r1]
bx lr
.align 2, 0
_0204FD70: .word ADVENTURE_LOG_PTR
_0204FD74: .word 0x000F423F
arm_func_end IncrementNbEggsHatched
arm_func_start GetNbEggsHatched
GetNbEggsHatched: ; 0x0204FD78
ldr r0, _0204FD88 ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x1c]
bx lr
.align 2, 0
_0204FD88: .word ADVENTURE_LOG_PTR
arm_func_end GetNbEggsHatched
arm_func_start GetNbPokemonJoined
GetNbPokemonJoined: ; 0x0204FD8C
ldr r0, _0204FD9C ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x2c]
bx lr
.align 2, 0
_0204FD9C: .word ADVENTURE_LOG_PTR
arm_func_end GetNbPokemonJoined
arm_func_start GetNbMovesLearned
GetNbMovesLearned: ; 0x0204FDA0
ldr r0, _0204FDB0 ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x34]
bx lr
.align 2, 0
_0204FDB0: .word ADVENTURE_LOG_PTR
arm_func_end GetNbMovesLearned
arm_func_start SetVictoriesOnOneFloor
SetVictoriesOnOneFloor: ; 0x0204FDB4
ldr r1, _0204FDE0 ; =0x000F423F
cmp r0, r1
movgt r0, r1
ldr r1, _0204FDE4 ; =ADVENTURE_LOG_PTR
ldr r2, [r1]
str r0, [r2, #0x28]
ldr r1, [r1]
ldr r0, [r1]
orr r0, r0, #0x200
str r0, [r1]
bx lr
.align 2, 0
_0204FDE0: .word 0x000F423F
_0204FDE4: .word ADVENTURE_LOG_PTR
arm_func_end SetVictoriesOnOneFloor
arm_func_start GetVictoriesOnOneFloor
GetVictoriesOnOneFloor: ; 0x0204FDE8
ldr r0, _0204FDF8 ; =ADVENTURE_LOG_PTR
ldr r0, [r0]
ldr r0, [r0, #0x28]
bx lr
.align 2, 0
_0204FDF8: .word ADVENTURE_LOG_PTR
arm_func_end GetVictoriesOnOneFloor

89
asm/main_0204FA70.s Normal file
View File

@@ -0,0 +1,89 @@
.include "asm/macros.inc"
.include "main_0204FA70.inc"
.text
arm_func_start ClearAdventureLogStruct
ClearAdventureLogStruct: ; 0x0204FA70
mov r3, #0
ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR
mov r0, r3
_0204FA7C:
ldr r2, [r1]
str r0, [r2, r3, lsl #2]
add r3, r3, #1
cmp r3, #4
blt _0204FA7C
ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR
mov r3, #0
ldr r2, [r1]
str r0, [r2, #0x2c]
ldr r2, [r1]
str r0, [r2, #0x30]
ldr r2, [r1]
str r0, [r2, #0x34]
ldr r2, [r1]
str r0, [r2, #0x28]
ldr r2, [r1]
str r0, [r2, #0x10]
ldr r2, [r1]
str r0, [r2, #0x14]
ldr r2, [r1]
str r0, [r2, #0x18]
ldr r2, [r1]
str r0, [r2, #0x1c]
ldr r2, [r1]
str r0, [r2, #0x20]
ldr r2, [r1]
str r0, [r2, #0x24]
ldr r2, [r1]
str r0, [r2, #0x38]
ldr r2, [r1]
str r0, [r2, #0x3c]
ldr r2, [r1]
str r0, [r2, #0x40]
_0204FB00:
ldr r2, [r1]
add r2, r2, r0, lsl #2
str r3, [r2, #0x44]
ldr r2, [r1]
add r2, r2, r0, lsl #2
add r0, r0, #1
str r3, [r2, #0xd8]
cmp r0, #0x25
blt _0204FB00
ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR
mov r2, #0
_0204FB2C:
ldr r1, [r0]
add r1, r1, r3, lsl #2
add r3, r3, #1
str r2, [r1, #0x16c]
cmp r3, #0x11
blt _0204FB2C
ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR
mov ip, #0
_0204FB4C:
ldr r1, [r0]
add r1, r1, r2, lsl #2
add r2, r2, #1
str ip, [r1, #0x1b0]
cmp r2, #0x2c
blt _0204FB4C
ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR
ldr r0, [r1]
str ip, [r0, #0x260]
mov r0, #0x3e8
_0204FB74:
rsb r2, ip, #5
mul r3, r2, r0
ldr r2, [r1]
add r2, r2, ip, lsl #2
add ip, ip, #1
str r3, [r2, #0x264]
cmp ip, #5
blt _0204FB74
bx lr
.align 2, 0
_0204FB98: .word ADVENTURE_LOG_PTR
arm_func_end ClearAdventureLogStruct

9
asm/main_0204FD38.s Normal file
View File

@@ -0,0 +1,9 @@
.include "asm/macros.inc"
.include "main_0204FD38.inc"
.text
arm_func_start IncrementNbSteals
IncrementNbSteals: ; 0x0204FD38
bx lr
arm_func_end IncrementNbSteals

File diff suppressed because it is too large Load Diff

206
asm/main_0204FFEC.s Normal file
View File

@@ -0,0 +1,206 @@
.include "asm/macros.inc"
.include "main_0204FFEC.inc"
.text
arm_func_start ComputeSpecialCounters
ComputeSpecialCounters: ; 0x0204FFEC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r4, #0
mov r8, r4
_0204FFF8:
mov r0, #0x44
mul sl, r8, r0
ldr r0, _0205022C ; =TEAM_MEMBER_TABLE_PTR
ldr r0, [r0]
ldrb r0, [r0, sl]
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _0205009C
mov sb, #0
mov r7, #1
ldr r3, _02050230 ; =ADVENTURE_LOG_PTR
ldr ip, _0205022C ; =TEAM_MEMBER_TABLE_PTR
mov fp, sb
mov lr, r7
mov r2, #6
_0205003C:
mul r1, sb, r2
ldr r0, [ip]
add r0, r0, sl
add r5, r0, #0x22
ldrb r0, [r5, r1]
add r1, r5, r1
tst r0, #1
movne r0, r7
moveq r0, fp
tst r0, #0xff
beq _02050090
ldrh r0, [r1, #2]
ldr r5, [r3]
mov r1, r0, lsr #5
add r6, r5, r1, lsl #2
mov r1, r0, lsr #0x1f
rsb r0, r1, r0, lsl #27
ldr r5, [r6, #0x16c]
add r0, r1, r0, ror #27
orr r0, r5, lr, lsl r0
str r0, [r6, #0x16c]
_02050090:
add sb, sb, #1
cmp sb, #4
blt _0205003C
_0205009C:
ldr r0, _02050234 ; =0x0000022B
add r8, r8, #1
cmp r8, r0
blt _0204FFF8
mov r6, #0
add r5, r0, #0x258
_020500B4:
mov r0, r6, lsl #0x10
mov r0, r0, asr #0x10
bl GetDexNumberVeneer
add r6, r6, #1
cmp r6, r5
blt _020500B4
mov r7, #0
ldr r5, _02050230 ; =ADVENTURE_LOG_PTR
ldr sb, _02050238 ; =0x0000021F
mov r8, r7
mov r6, #1
_020500E0:
mov r0, r8, lsl #0x10
mov r0, r0, lsr #0x10
bl IsRealMove
cmp r0, #0
beq _02050120
mov r0, r8, asr #4
add r0, r8, r0, lsr #27
ldr r2, [r5]
mov r0, r0, asr #5
add r2, r2, r0, lsl #2
mov r1, r8, lsr #0x1f
rsb r0, r1, r8, lsl #27
ldr r2, [r2, #0x16c]
add r0, r1, r0, ror #27
tst r2, r6, lsl r0
addne r7, r7, #1
_02050120:
add r8, r8, #1
cmp r8, sb
blt _020500E0
cmp r7, #0
ble _02050150
ldr r0, _02050230 ; =ADVENTURE_LOG_PTR
ldr r1, [r0]
str r7, [r1, #0x34]
ldr r1, [r0]
ldr r0, [r1]
orr r0, r0, #4
str r0, [r1]
_02050150:
mov sb, #1
ldr r5, _02050230 ; =ADVENTURE_LOG_PTR
ldr sl, _0205023C ; =0x00000483
mov r8, #0
mov r6, sb
_02050164:
mov r0, sb, lsl #0x10
mov r0, r0, asr #0x10
bl GetBaseFormCastformCherrimDeoxys
mov r7, r0
bl GetDexNumberVeneer
cmp r0, #0
beq _020501B4
mov r1, r0, asr #4
add r1, r0, r1, lsr #27
ldr r3, [r5]
mov r2, r1, asr #5
mov r1, r0, lsr #0x1f
add r2, r3, r2, lsl #2
rsb r0, r1, r0, lsl #27
ldr r2, [r2, #0x44]
add r0, r1, r0, ror #27
tst r2, r6, lsl r0
beq _020501B4
mov r0, r7
bl RecruitSpecialPokemonLog
_020501B4:
add sb, sb, #1
cmp sb, sl
blt _02050164
ldr r0, _02050230 ; =ADVENTURE_LOG_PTR
mov r2, #1
ldr r1, [r0]
ldr r3, _02050240 ; =0x000001ED
mov r0, r2
_020501D4:
mov r5, r2, asr #4
add r5, r2, r5, lsr #27
mov sb, r5, asr #5
mov r6, r2, lsr #0x1f
rsb r5, r6, r2, lsl #27
add r7, r1, sb, lsl #2
add r6, r6, r5, ror #27
add r5, r1, sb, lsl #2
ldr r7, [r7, #0x44]
ldr r5, [r5, #0xd8]
tst r7, r0, lsl r6
addne r8, r8, #1
tst r5, r0, lsl r6
add r2, r2, #1
addne r4, r4, #1
cmp r2, r3
blt _020501D4
ldr r0, _02050230 ; =ADVENTURE_LOG_PTR
str r8, [r1, #0x2c]
ldr r0, [r0]
str r4, [r0, #0x30]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0205022C: .word TEAM_MEMBER_TABLE_PTR
_02050230: .word ADVENTURE_LOG_PTR
_02050234: .word 0x0000022B
_02050238: .word 0x0000021F
_0205023C: .word 0x00000483
_02050240: .word 0x000001ED
arm_func_end ComputeSpecialCounters
arm_func_start RecruitSpecialPokemonLog
RecruitSpecialPokemonLog: ; 0x02050244
stmdb sp!, {r3, lr}
cmp r0, #0x258
subge r0, r0, #0x258
movge r0, r0, lsl #0x10
ldr r2, _020502AC ; =ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS
mov r3, #0
movge r0, r0, asr #0x10
_02050260:
mov r1, r3, lsl #1
ldrsh r1, [r2, r1]
cmp r1, #0
ldmeqia sp!, {r3, pc}
cmp r1, #0xc9
bne _0205028C
cmp r0, #0xc9
blt _02050294
cmp r0, #0xe4
ble _0205029C
b _02050294
_0205028C:
cmp r1, r0
beq _0205029C
_02050294:
add r3, r3, #1
b _02050260
_0205029C:
add r0, r3, #0x24
and r0, r0, #0xff
bl SetAdventureLogCompleted
ldmia sp!, {r3, pc}
.align 2, 0
_020502AC: .word ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS
arm_func_end RecruitSpecialPokemonLog

131
asm/main_02050300.s Normal file
View File

@@ -0,0 +1,131 @@
.include "asm/macros.inc"
.include "main_02050300.inc"
.text
arm_func_start SetItemAcquired
SetItemAcquired: ; 0x02050300
stmdb sp!, {r4, r5, r6, lr}
ldrsh r0, [r0, #4]
bl NormalizeTreasureBox
mov r4, r0
mov r0, r4, lsl #0x10
mov r0, r0, asr #0x10
bl IsItemValidVeneer
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
cmp r4, #0x3b
blt _02050380
cmp r4, #0x41
bgt _02050380
sub r0, r4, #0x21
and r0, r0, #0xff
mov r5, #1
bl SetAdventureLogCompleted
mov r6, #0x1a
b _02050364
_0205034C:
and r0, r6, #0xff
bl GetAdventureLogCompleted
cmp r0, #0
moveq r5, #0
beq _0205036C
add r6, r6, #1
_02050364:
cmp r6, #0x20
ble _0205034C
_0205036C:
cmp r5, #0
beq _02050380
mov r0, #0x15
mov r1, #1
bl SetResolvedPerformanceProgressFlag
_02050380:
ldr r3, _020503C8 ; =ADVENTURE_LOG_PTR
mov r0, r4, asr #4
ldr ip, [r3]
add r0, r4, r0, lsr #27
mov r2, r4, lsr #0x1f
rsb r1, r2, r4, lsl #27
add lr, ip, #0x1b0
mov ip, r0, asr #5
ldr r4, [lr, ip, lsl #2]
add r0, r2, r1, ror #27
mov r1, #1
orr r0, r4, r1, lsl r0
str r0, [lr, ip, lsl #2]
ldr r1, [r3]
ldr r0, [r1]
orr r0, r0, #8
str r0, [r1]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020503C8: .word ADVENTURE_LOG_PTR
arm_func_end SetItemAcquired
arm_func_start GetNbItemAcquired
GetNbItemAcquired: ; 0x020503CC
stmdb sp!, {r4, lr}
ldr r1, _0205041C ; =ADVENTURE_LOG_PTR
mov r0, #0
ldr r4, [r1]
mov lr, r0
mov ip, #1
_020503E4:
mov r1, lr, asr #4
add r1, lr, r1, lsr #27
mov r1, r1, asr #5
add r3, r4, r1, lsl #2
mov r2, lr, lsr #0x1f
rsb r1, r2, lr, lsl #27
ldr r3, [r3, #0x1b0]
add r1, r2, r1, ror #27
tst r3, ip, lsl r1
add lr, lr, #1
addne r0, r0, #1
cmp lr, #0x580
blt _020503E4
ldmia sp!, {r4, pc}
.align 2, 0
_0205041C: .word ADVENTURE_LOG_PTR
arm_func_end GetNbItemAcquired
arm_func_start SetChallengeLetterCleared
SetChallengeLetterCleared: ; 0x02050420
stmdb sp!, {r4, lr}
ldr r3, _020504A0 ; =ADVENTURE_LOG_PTR
mov r2, r0, lsr #0x1f
ldr ip, [r3]
rsb r1, r2, r0, lsl #27
mov lr, r0, lsr #5
add r4, ip, #0x260
ldr ip, [r4, lr, lsl #2]
add r1, r2, r1, ror #27
mov r0, #1
orr r1, ip, r0, lsl r1
str r1, [r4, lr, lsl #2]
ldr r4, [r3]
mov ip, r0
b _02050488
_0205045C:
mov r1, r0, asr #4
add r1, r0, r1, lsr #27
mov r1, r1, asr #5
add r3, r4, r1, lsl #2
mov r2, r0, lsr #0x1f
rsb r1, r2, r0, lsl #27
ldr r3, [r3, #0x260]
add r1, r2, r1, ror #27
tst r3, ip, lsl r1
ldmeqia sp!, {r4, pc}
add r0, r0, #1
_02050488:
cmp r0, #6
blt _0205045C
ldr r0, [r4, #4]
orr r0, r0, #4
str r0, [r4, #4]
ldmia sp!, {r4, pc}
.align 2, 0
_020504A0: .word ADVENTURE_LOG_PTR
arm_func_end SetChallengeLetterCleared

1008
asm/main_020504BC.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -29,4 +29,7 @@ struct adventure_log {
u16 padding; // 0x27A
};
extern struct adventure_log* ADVENTURE_LOG_PTR;
extern struct adventure_log _022AB69C;
#endif //PMDSKY_ADVENTURE_LOG_H

11
include/main_0204FA24.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef PMDSKY_MAIN_0204FA24_H
#define PMDSKY_MAIN_0204FA24_H
#include "adventure_log.h"
#include "util.h"
void SetAdventureLogStructLocation(void);
void SetAdventureLogDungeonFloor(struct dungeon_floor_pair* floor);
struct dungeon_floor_pair* GetAdventureLogDungeonFloor(void);
#endif

17
include/main_0204FB9C.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef PMDSKY_MAIN_0204FB9C_H
#define PMDSKY_MAIN_0204FB9C_H
#include "adventure_log.h"
#include "util.h"
void SetAdventureLogCompleted(s32 id);
s32 IsAdventureLogNotEmpty(void);
bool8 GetAdventureLogCompleted(s32 id);
void IncrementNbDungeonsCleared(void);
u32 GetNbDungeonsCleared(void);
void IncrementNbFriendRescues(void);
u32 GetNbFriendRescues(void);
void IncrementNbEvolutions(void);
u32 GetNbEvolutions(void);
#endif

14
include/main_0204FD3C.h Normal file
View File

@@ -0,0 +1,14 @@
#ifndef PMDSKY_MAIN_0204FD3C_H
#define PMDSKY_MAIN_0204FD3C_H
#include "adventure_log.h"
#include "util.h"
void IncrementNbEggsHatched(void);
u32 GetNbEggsHatched(void);
u32 GetNbPokemonJoined(void);
u32 GetNbMovesLearned(void);
void SetVictoriesOnOneFloor(s32 value);
u32 GetVictoriesOnOneFloor(void);
#endif

17
include/main_0204FEB4.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef PMDSKY_MAIN_0204FEB4_H
#define PMDSKY_MAIN_0204FEB4_H
#include "adventure_log.h"
#include "util.h"
u32 GetNbPokemonBattled(void);
void IncrementNbBigTreasureWins(void);
void SetNbBigTreasureWins(s32 value);
u32 GetNbBigTreasureWins(void);
void SetNbRecycled(s32 value);
u32 GetNbRecycled(void);
void IncrementNbSkyGiftsSent(void);
void SetNbSkyGiftsSent(s32 value);
u32 GetNbSkyGiftsSent(void);
#endif

10
include/main_020502B0.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_MAIN_020502B0_H
#define PMDSKY_MAIN_020502B0_H
#include "adventure_log.h"
#include "util.h"
void IncrementNbFainted(void);
u32 GetNbFainted(void);
#endif

9
include/main_020504A4.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_MAIN_020504A4_H
#define PMDSKY_MAIN_020504A4_H
#include "adventure_log.h"
#include "util.h"
u32 GetSentryDutyGamePoints(s32 index);
#endif

View File

@@ -243,8 +243,19 @@ Static main
Object src/dungeon_init.o
Object src/main_0204F050.o
Object asm/main_0204F0A0.o
Object src/main_0204FA24.o
Object asm/main_0204FA70.o
Object src/main_0204FB9C.o
Object asm/main_0204FD38.o
Object src/main_0204FD3C.o
Object src/main_0204FDFC.o
Object asm/main_0204FE58.o
Object src/main_0204FEB4.o
Object asm/main_0204FFEC.o
Object src/main_020502B0.o
Object asm/main_02050300.o
Object src/main_020504A4.o
Object asm/main_020504BC.o
Object src/number_util.o
Object asm/main_02051098.o
Object src/dungeon_recruitment_2.o

17
src/main_0204FA24.c Normal file
View File

@@ -0,0 +1,17 @@
#include "main_0204FA24.h"
#include "adventure_log.h"
void SetAdventureLogStructLocation(void)
{
ADVENTURE_LOG_PTR = &_022AB69C;
}
void SetAdventureLogDungeonFloor(struct dungeon_floor_pair *floor)
{
ADVENTURE_LOG_PTR->current_floor = *floor;
}
struct dungeon_floor_pair* GetAdventureLogDungeonFloor(void)
{
return &ADVENTURE_LOG_PTR->current_floor;
}

67
src/main_0204FB9C.c Normal file
View File

@@ -0,0 +1,67 @@
#include "main_0204FB9C.h"
#include "adventure_log.h"
void SetAdventureLogCompleted(s32 id)
{
ADVENTURE_LOG_PTR->completion_flags[id >> 5] |= 1 << (id & 0x1F);
}
s32 IsAdventureLogNotEmpty(void)
{
s32 i;
struct adventure_log *log = ADVENTURE_LOG_PTR;
for (i = 0; i < 4; i++) {
if (log->completion_flags[i] != 0) {
return 1;
}
}
return 0;
}
bool8 GetAdventureLogCompleted(s32 id)
{
return (ADVENTURE_LOG_PTR->completion_flags[id >> 5] & (1 << (id & 0x1F))) != 0;
}
void IncrementNbDungeonsCleared(void)
{
ADVENTURE_LOG_PTR->nb_dungeons_cleared++;
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x10;
if ((s32) ADVENTURE_LOG_PTR->nb_dungeons_cleared > 999999) {
ADVENTURE_LOG_PTR->nb_dungeons_cleared = 999999;
}
}
u32 GetNbDungeonsCleared(void)
{
return ADVENTURE_LOG_PTR->nb_dungeons_cleared;
}
void IncrementNbFriendRescues(void)
{
ADVENTURE_LOG_PTR->nb_friend_rescues++;
if ((s32) ADVENTURE_LOG_PTR->nb_friend_rescues > 999999) {
ADVENTURE_LOG_PTR->nb_friend_rescues = 999999;
}
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x40;
}
u32 GetNbFriendRescues(void)
{
return ADVENTURE_LOG_PTR->nb_friend_rescues;
}
void IncrementNbEvolutions(void)
{
ADVENTURE_LOG_PTR->nb_evolutions++;
if ((s32) ADVENTURE_LOG_PTR->nb_evolutions > 999999) {
ADVENTURE_LOG_PTR->nb_evolutions = 999999;
}
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x80;
}
u32 GetNbEvolutions(void)
{
return ADVENTURE_LOG_PTR->nb_evolutions;
}

39
src/main_0204FD3C.c Normal file
View File

@@ -0,0 +1,39 @@
#include "main_0204FD3C.h"
#include "adventure_log.h"
void IncrementNbEggsHatched(void)
{
if ((s32) ADVENTURE_LOG_PTR->nb_eggs_hatched < 999999) {
ADVENTURE_LOG_PTR->nb_eggs_hatched++;
}
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x100;
}
u32 GetNbEggsHatched(void)
{
return ADVENTURE_LOG_PTR->nb_eggs_hatched;
}
u32 GetNbPokemonJoined(void)
{
return ADVENTURE_LOG_PTR->pokemon_joined_counter;
}
u32 GetNbMovesLearned(void)
{
return ADVENTURE_LOG_PTR->moves_learned_counter;
}
void SetVictoriesOnOneFloor(s32 value)
{
if (value > 999999) {
value = 999999;
}
ADVENTURE_LOG_PTR->nb_victories_on_one_floor = value;
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x200;
}
u32 GetVictoriesOnOneFloor(void)
{
return ADVENTURE_LOG_PTR->nb_victories_on_one_floor;
}

View File

@@ -1,8 +1,6 @@
#include "main_0204FDFC.h"
#include "adventure_log.h"
extern struct adventure_log* ADVENTURE_LOG_PTR;
extern s32 GetDexNumberVeneer();
void SetPokemonJoined(u32 monster_id)

59
src/main_0204FEB4.c Normal file
View File

@@ -0,0 +1,59 @@
#include "main_0204FEB4.h"
#include "adventure_log.h"
u32 GetNbPokemonBattled(void)
{
return ADVENTURE_LOG_PTR->pokemon_battled_counter;
}
void IncrementNbBigTreasureWins(void)
{
SetNbBigTreasureWins(ADVENTURE_LOG_PTR->nb_big_treasure_wins + 1);
}
void SetNbBigTreasureWins(s32 value)
{
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x400;
if (value > 999999) {
value = 999999;
}
ADVENTURE_LOG_PTR->nb_big_treasure_wins = value;
}
u32 GetNbBigTreasureWins(void)
{
return ADVENTURE_LOG_PTR->nb_big_treasure_wins;
}
void SetNbRecycled(s32 value)
{
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x800;
if (value > 999999) {
value = 999999;
}
ADVENTURE_LOG_PTR->nb_recycled = value;
}
u32 GetNbRecycled(void)
{
return ADVENTURE_LOG_PTR->nb_recycled;
}
void IncrementNbSkyGiftsSent(void)
{
SetNbSkyGiftsSent(ADVENTURE_LOG_PTR->nb_gifts_sent + 1);
}
void SetNbSkyGiftsSent(s32 value)
{
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x1000;
if (value > 999999) {
value = 999999;
}
ADVENTURE_LOG_PTR->nb_gifts_sent = value;
}
u32 GetNbSkyGiftsSent(void)
{
return ADVENTURE_LOG_PTR->nb_gifts_sent;
}

15
src/main_020502B0.c Normal file
View File

@@ -0,0 +1,15 @@
#include "main_020502B0.h"
#include "adventure_log.h"
void IncrementNbFainted(void)
{
if ((s32) ADVENTURE_LOG_PTR->nb_faints < 999999) {
ADVENTURE_LOG_PTR->nb_faints++;
}
ADVENTURE_LOG_PTR->completion_flags[0] |= 0x20;
}
u32 GetNbFainted(void)
{
return ADVENTURE_LOG_PTR->nb_faints;
}

7
src/main_020504A4.c Normal file
View File

@@ -0,0 +1,7 @@
#include "main_020504A4.h"
#include "adventure_log.h"
u32 GetSentryDutyGamePoints(s32 index)
{
return ADVENTURE_LOG_PTR->sentry_duty_game_points[index];
}