summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandom <28494085+Random06457@users.noreply.github.com>2020-10-11 19:45:08 +0200
committerGitHub <noreply@github.com>2020-10-11 13:45:08 -0400
commitb010db7c19207f0e607d5ccaf0d1f2350dda3964 (patch)
tree12dc8d3a3dfb57705ba907dd0af855662ed35bde
parent9d3554220793d515230844f894ede66100bdc039 (diff)
Decompile z_sram.c (#431)
* Decompile z_sram.c * rename Sram_CalcChecksum to Sram_WriteSaveSlot * progress * done i think * add original name comments * temp substructs * minor fixes * review * review 2 * fix Co-authored-by: fig <fig02srl@gmail.com>
-rw-r--r--asm/non_matchings/code/code_800EC960/func_800EDD68.s4
-rw-r--r--asm/non_matchings/code/code_800EC960/func_800EEA50.s4
-rw-r--r--asm/non_matchings/code/z_message_PAL/func_8010C39C.s8
-rw-r--r--asm/non_matchings/code/z_play/Gameplay_Init.s2
-rw-r--r--asm/non_matchings/code/z_sram/Sram_OpenSave.s (renamed from asm/non_matchings/code/z_sram/func_800A8484.s)26
-rw-r--r--asm/non_matchings/code/z_sram/Sram_VerifyAndLoadAllSaves.s (renamed from asm/non_matchings/code/z_sram/func_800A8A20.s)22
-rw-r--r--asm/non_matchings/code/z_sram/func_800A81A0.s78
-rw-r--r--asm/non_matchings/code/z_sram/func_800A82C8.s118
-rw-r--r--asm/non_matchings/code/z_sram/func_800A88D4.s91
-rw-r--r--asm/non_matchings/code/z_sram/func_800A9258.s354
-rw-r--r--asm/non_matchings/code/z_sram/func_800A96D0.s81
-rw-r--r--asm/non_matchings/code/z_sram/func_800A97F0.s193
-rw-r--r--asm/non_matchings/code/z_sram/func_800A9A9C.s15
-rw-r--r--asm/non_matchings/code/z_sram/func_800A9AD0.s177
-rw-r--r--asm/non_matchings/code/z_sram/func_800A9CD4.s38
-rw-r--r--asm/non_matchings/code/z_sram/func_800A9D28.s4
-rw-r--r--asm/non_matchings/overlays/actors/ovl_kaleido_scope/KaleidoScope_Update.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80803ED8.s8
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808044A0.s8
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804A50.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804CD0.s2
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804ED8.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805524.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805B2C.s8
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805EB8.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808064F4.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80806710.s2
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808069B4.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80808000.s2
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080969C.s2
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B1A8.s2
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B22C.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B52C.s16
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080BFE4.s12
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080C60C.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080FE2C.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80810440.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808106F4.s4
-rw-r--r--asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808113A8.s4
-rw-r--r--data/code_800EC960.data.s4
-rw-r--r--data/z_sram.data.s46
-rw-r--r--include/functions.h25
-rw-r--r--include/macros.h12
-rw-r--r--include/variables.h15
-rw-r--r--include/z64.h291
-rw-r--r--include/z64save.h190
-rw-r--r--spec3
-rw-r--r--src/code/code_80097A00.c6
-rw-r--r--src/code/z_actor.c12
-rw-r--r--src/code/z_demo.c2
-rw-r--r--src/code/z_elf_message.c6
-rw-r--r--src/code/z_kankyo.c2
-rw-r--r--src/code/z_lifemeter.c2
-rw-r--r--src/code/z_map_exp.c8
-rw-r--r--src/code/z_parameter.c149
-rw-r--r--src/code/z_play.c14
-rw-r--r--src/code/z_sram.c904
-rw-r--r--src/code/z_ss_sram.c53
-rw-r--r--src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c4
-rw-r--r--src/overlays/actors/ovl_En_GirlA/z_en_girla.c10
-rw-r--r--src/overlays/actors/ovl_En_Ishi/z_en_ishi.c2
-rw-r--r--src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c6
-rw-r--r--src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c3
-rw-r--r--src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c10
-rw-r--r--src/overlays/actors/ovl_En_Ma3/z_en_ma3.c12
-rw-r--r--src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c4
-rw-r--r--src/overlays/actors/ovl_En_Reeba/z_en_reeba.c3
-rw-r--r--src/overlays/actors/ovl_En_Rl/z_en_rl.c2
-rw-r--r--src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c2
-rw-r--r--src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c6
-rw-r--r--src/overlays/actors/ovl_player_actor/z_player.c39
-rw-r--r--src/overlays/gamestates/ovl_opening/z_opening.c2
-rw-r--r--src/overlays/gamestates/ovl_select/z_select.c4
-rw-r--r--src/overlays/gamestates/ovl_title/z_title.c4
74 files changed, 1514 insertions, 1672 deletions
diff --git a/asm/non_matchings/code/code_800EC960/func_800EDD68.s b/asm/non_matchings/code/code_800EC960/func_800EDD68.s
index 7eaae4bfc..bbb66a996 100644
--- a/asm/non_matchings/code/code_800EC960/func_800EDD68.s
+++ b/asm/non_matchings/code/code_800EC960/func_800EDD68.s
@@ -8,9 +8,9 @@ glabel func_800EDD68
/* B64F20 800EDD80 AFA40020 */ sw $a0, 0x20($sp)
/* B64F24 800EDD84 15C10004 */ bne $t6, $at, .L800EDD98
/* B64F28 800EDD88 3C028013 */ lui $v0, %hi(D_80131864) # $v0, 0x8013
-/* B64F2C 800EDD8C 3C048013 */ lui $a0, %hi(D_80131BE4) # $a0, 0x8013
+/* B64F2C 800EDD8C 3C048013 */ lui $a0, %hi(gScarecrowCustomSongPtr) # $a0, 0x8013
/* B64F30 800EDD90 10000003 */ b .L800EDDA0
-/* B64F34 800EDD94 8C841BE4 */ lw $a0, %lo(D_80131BE4)($a0)
+/* B64F34 800EDD94 8C841BE4 */ lw $a0, %lo(gScarecrowCustomSongPtr)($a0)
.L800EDD98:
/* B64F38 800EDD98 3C048013 */ lui $a0, %hi(D_80131BEC) # $a0, 0x8013
/* B64F3C 800EDD9C 8C841BEC */ lw $a0, %lo(D_80131BEC)($a0)
diff --git a/asm/non_matchings/code/code_800EC960/func_800EEA50.s b/asm/non_matchings/code/code_800EC960/func_800EEA50.s
index 03e9d45ab..36b68da95 100644
--- a/asm/non_matchings/code/code_800EC960/func_800EEA50.s
+++ b/asm/non_matchings/code/code_800EC960/func_800EEA50.s
@@ -3280,8 +3280,8 @@ glabel L800F12F0
/* B68560 800F13C0 24050003 */ li $a1, 3
/* B68564 800F13C4 0C03ED07 */ jal GfxPrint_SetPos
/* B68568 800F13C8 24060006 */ li $a2, 6
-/* B6856C 800F13CC 3C148013 */ lui $s4, %hi(D_80131BE8) # $s4, 0x8013
-/* B68570 800F13D0 26941BE8 */ addiu $s4, %lo(D_80131BE8) # addiu $s4, $s4, 0x1be8
+/* B6856C 800F13CC 3C148013 */ lui $s4, %hi(gScarecrowSpawnSongPtr) # $s4, 0x8013
+/* B68570 800F13D0 26941BE8 */ addiu $s4, %lo(gScarecrowSpawnSongPtr) # addiu $s4, $s4, 0x1be8
/* B68574 800F13D4 3C058015 */ lui $a1, %hi(D_8014A2C0) # $a1, 0x8015
/* B68578 800F13D8 24A5A2C0 */ addiu $a1, %lo(D_8014A2C0) # addiu $a1, $a1, -0x5d40
/* B6857C 800F13DC 8E860000 */ lw $a2, ($s4)
diff --git a/asm/non_matchings/code/z_message_PAL/func_8010C39C.s b/asm/non_matchings/code/z_message_PAL/func_8010C39C.s
index 6e0277d1b..e5fe58d06 100644
--- a/asm/non_matchings/code/z_message_PAL/func_8010C39C.s
+++ b/asm/non_matchings/code/z_message_PAL/func_8010C39C.s
@@ -2382,8 +2382,8 @@ glabel L8010DF4C
/* B852F4 8010E154 0C00084C */ jal osSyncPrintf
/* B852F8 8010E158 248447AC */ addiu $a0, %lo(D_801547AC) # addiu $a0, $a0, 0x47ac
/* B852FC 8010E15C 3C048016 */ lui $a0, %hi(gSaveContext+0xf41) # $a0, 0x8016
-/* B85300 8010E160 3C058013 */ lui $a1, %hi(D_80131BE4) # $a1, 0x8013
-/* B85304 8010E164 8CA51BE4 */ lw $a1, %lo(D_80131BE4)($a1)
+/* B85300 8010E160 3C058013 */ lui $a1, %hi(gScarecrowCustomSongPtr) # $a1, 0x8013
+/* B85304 8010E164 8CA51BE4 */ lw $a1, %lo(gScarecrowCustomSongPtr)($a1)
/* B85308 8010E168 2484F5A1 */ addiu $a0, %lo(gSaveContext+0xf41) # addiu $a0, $a0, -0xa5f
/* B8530C 8010E16C 0C01A508 */ jal MemCopy
/* B85310 8010E170 24060360 */ li $a2, 864
@@ -2583,8 +2583,8 @@ glabel L8010E364
/* B855E8 8010E448 0C00084C */ jal osSyncPrintf
/* B855EC 8010E44C 24844880 */ addiu $a0, %lo(D_80154880) # addiu $a0, $a0, 0x4880
/* B855F0 8010E450 3C048016 */ lui $a0, %hi(gSaveContext+0x12c6) # $a0, 0x8016
-/* B855F4 8010E454 3C058013 */ lui $a1, %hi(D_80131BE8) # $a1, 0x8013
-/* B855F8 8010E458 8CA51BE8 */ lw $a1, %lo(D_80131BE8)($a1)
+/* B855F4 8010E454 3C058013 */ lui $a1, %hi(gScarecrowSpawnSongPtr) # $a1, 0x8013
+/* B855F8 8010E458 8CA51BE8 */ lw $a1, %lo(gScarecrowSpawnSongPtr)($a1)
/* B855FC 8010E45C 2484F926 */ addiu $a0, %lo(gSaveContext+0x12c6) # addiu $a0, $a0, -0x6da
/* B85600 8010E460 0C01A508 */ jal MemCopy
/* B85604 8010E464 24060080 */ li $a2, 128
diff --git a/asm/non_matchings/code/z_play/Gameplay_Init.s b/asm/non_matchings/code/z_play/Gameplay_Init.s
index a9c657103..19a19e9d4 100644
--- a/asm/non_matchings/code/z_play/Gameplay_Init.s
+++ b/asm/non_matchings/code/z_play/Gameplay_Init.s
@@ -116,7 +116,7 @@ glabel Gameplay_Init
/* B33D2C 800BCB8C 0C016B12 */ jal func_8005AC48
/* B33D30 800BCB90 A62007A0 */ sh $zero, 0x7a0($s1)
/* B33D34 800BCB94 02202025 */ move $a0, $s1
-/* B33D38 800BCB98 0C02A74A */ jal func_800A9D28
+/* B33D38 800BCB98 0C02A74A */ jal Sram_Init
/* B33D3C 800BCB9C 26251F74 */ addiu $a1, $s1, 0x1f74
/* B33D40 800BCBA0 0C044826 */ jal func_80112098
/* B33D44 800BCBA4 02202025 */ move $a0, $s1
diff --git a/asm/non_matchings/code/z_sram/func_800A8484.s b/asm/non_matchings/code/z_sram/Sram_OpenSave.s
index 2b333da9c..166c1dde9 100644
--- a/asm/non_matchings/code/z_sram/func_800A8484.s
+++ b/asm/non_matchings/code/z_sram/Sram_OpenSave.s
@@ -96,7 +96,7 @@ glabel jtbl_80140FB8
.word L800A85C0
.text
-glabel func_800A8484
+glabel Sram_OpenSave
/* B1F624 800A8484 27BDFFD8 */ addiu $sp, $sp, -0x28
/* B1F628 800A8488 AFB00014 */ sw $s0, 0x14($sp)
/* B1F62C 800A848C 00808025 */ move $s0, $a0
@@ -108,11 +108,11 @@ glabel func_800A8484
/* B1F644 800A84A4 3C118016 */ lui $s1, %hi(gSaveContext) # $s1, 0x8016
/* B1F648 800A84A8 2631E660 */ addiu $s1, %lo(gSaveContext) # addiu $s1, $s1, -0x19a0
/* B1F64C 800A84AC 8E261354 */ lw $a2, 0x1354($s1)
-/* B1F650 800A84B0 3C078013 */ lui $a3, %hi(D_8012A4E0)
+/* B1F650 800A84B0 3C078013 */ lui $a3, %hi(gSramSlotOffsets)
/* B1F654 800A84B4 3C048014 */ lui $a0, %hi(D_80140864) # $a0, 0x8014
/* B1F658 800A84B8 00067040 */ sll $t6, $a2, 1
/* B1F65C 800A84BC 00EE3821 */ addu $a3, $a3, $t6
-/* B1F660 800A84C0 94E5A4E0 */ lhu $a1, %lo(D_8012A4E0)($a3)
+/* B1F660 800A84C0 94E5A4E0 */ lhu $a1, %lo(gSramSlotOffsets)($a3)
/* B1F664 800A84C4 24840864 */ addiu $a0, %lo(D_80140864) # addiu $a0, $a0, 0x864
/* B1F668 800A84C8 0C00084C */ jal osSyncPrintf
/* B1F66C 800A84CC A7A50026 */ sh $a1, 0x26($sp)
@@ -151,9 +151,9 @@ glabel func_800A8484
glabel L800A854C
/* B1F6EC 800A854C 0002C840 */ sll $t9, $v0, 1
-/* B1F6F0 800A8550 3C0C8013 */ lui $t4, %hi(D_8012A670)
+/* B1F6F0 800A8550 3C0C8013 */ lui $t4, %hi(dungeonEntrances)
/* B1F6F4 800A8554 01996021 */ addu $t4, $t4, $t9
-/* B1F6F8 800A8558 858CA670 */ lh $t4, %lo(D_8012A670)($t4)
+/* B1F6F8 800A8558 858CA670 */ lh $t4, %lo(dungeonEntrances)($t4)
/* B1F6FC 800A855C 1000002C */ b .L800A8610
/* B1F700 800A8560 AE2C0000 */ sw $t4, ($s1)
@@ -250,14 +250,14 @@ glabel L800A85CC
/* B1F7FC 800A865C 3C048014 */ lui $a0, %hi(D_801408C0) # $a0, 0x8014
/* B1F800 800A8660 0C00084C */ jal osSyncPrintf
/* B1F804 800A8664 248408C0 */ addiu $a0, %lo(D_801408C0) # addiu $a0, $a0, 0x8c0
-/* B1F808 800A8668 3C048013 */ lui $a0, %hi(D_80131BE4) # $a0, 0x8013
+/* B1F808 800A8668 3C048013 */ lui $a0, %hi(gScarecrowCustomSongPtr) # $a0, 0x8013
/* B1F80C 800A866C 3C058016 */ lui $a1, %hi(gSaveContext+0xf41) # $a1, 0x8016
/* B1F810 800A8670 24A5F5A1 */ addiu $a1, %lo(gSaveContext+0xf41) # addiu $a1, $a1, -0xa5f
-/* B1F814 800A8674 8C841BE4 */ lw $a0, %lo(D_80131BE4)($a0)
+/* B1F814 800A8674 8C841BE4 */ lw $a0, %lo(gScarecrowCustomSongPtr)($a0)
/* B1F818 800A8678 0C01A508 */ jal MemCopy
/* B1F81C 800A867C 24060360 */ li $a2, 864
-/* B1F820 800A8680 3C108013 */ lui $s0, %hi(D_80131BE4) # $s0, 0x8013
-/* B1F824 800A8684 8E101BE4 */ lw $s0, %lo(D_80131BE4)($s0)
+/* B1F820 800A8680 3C108013 */ lui $s0, %hi(gScarecrowCustomSongPtr) # $s0, 0x8013
+/* B1F824 800A8684 8E101BE4 */ lw $s0, %lo(gScarecrowCustomSongPtr)($s0)
/* B1F828 800A8688 00003825 */ move $a3, $zero
.L800A868C:
/* B1F82C 800A868C 3C048014 */ lui $a0, %hi(D_80140908) # $a0, 0x8014
@@ -288,14 +288,14 @@ glabel L800A85CC
/* B1F88C 800A86EC 3C048014 */ lui $a0, %hi(D_80140964) # $a0, 0x8014
/* B1F890 800A86F0 0C00084C */ jal osSyncPrintf
/* B1F894 800A86F4 24840964 */ addiu $a0, %lo(D_80140964) # addiu $a0, $a0, 0x964
-/* B1F898 800A86F8 3C048013 */ lui $a0, %hi(D_80131BE8) # $a0, 0x8013
+/* B1F898 800A86F8 3C048013 */ lui $a0, %hi(gScarecrowSpawnSongPtr) # $a0, 0x8013
/* B1F89C 800A86FC 3C058016 */ lui $a1, %hi(gSaveContext+0x12c6) # $a1, 0x8016
/* B1F8A0 800A8700 24A5F926 */ addiu $a1, %lo(gSaveContext+0x12c6) # addiu $a1, $a1, -0x6da
-/* B1F8A4 800A8704 8C841BE8 */ lw $a0, %lo(D_80131BE8)($a0)
+/* B1F8A4 800A8704 8C841BE8 */ lw $a0, %lo(gScarecrowSpawnSongPtr)($a0)
/* B1F8A8 800A8708 0C01A508 */ jal MemCopy
/* B1F8AC 800A870C 24060080 */ li $a2, 128
-/* B1F8B0 800A8710 3C108013 */ lui $s0, %hi(D_80131BE8) # $s0, 0x8013
-/* B1F8B4 800A8714 8E101BE8 */ lw $s0, %lo(D_80131BE8)($s0)
+/* B1F8B0 800A8710 3C108013 */ lui $s0, %hi(gScarecrowSpawnSongPtr) # $s0, 0x8013
+/* B1F8B4 800A8714 8E101BE8 */ lw $s0, %lo(gScarecrowSpawnSongPtr)($s0)
/* B1F8B8 800A8718 00003825 */ move $a3, $zero
.L800A871C:
/* B1F8BC 800A871C 3C048014 */ lui $a0, %hi(D_801409AC) # $a0, 0x8014
diff --git a/asm/non_matchings/code/z_sram/func_800A8A20.s b/asm/non_matchings/code/z_sram/Sram_VerifyAndLoadAllSaves.s
index ee08fad08..0328da4ac 100644
--- a/asm/non_matchings/code/z_sram/func_800A8A20.s
+++ b/asm/non_matchings/code/z_sram/Sram_VerifyAndLoadAllSaves.s
@@ -94,7 +94,7 @@ glabel D_80140CC4
.balign 4
.text
-glabel func_800A8A20
+glabel Sram_VerifyAndLoadAllSaves
/* B1FBC0 800A8A20 27BDFF88 */ addiu $sp, $sp, -0x78
/* B1FBC4 800A8A24 AFA40078 */ sw $a0, 0x78($sp)
/* B1FBC8 800A8A28 AFBF004C */ sw $ra, 0x4c($sp)
@@ -119,7 +119,7 @@ glabel func_800A8A20
/* B1FC14 800A8A74 3C040800 */ lui $a0, 0x800
/* B1FC18 800A8A78 34068000 */ li $a2, 32768
/* B1FC1C 800A8A7C 00003825 */ move $a3, $zero
-/* B1FC20 800A8A80 0C02A7A8 */ jal Sram_ReadWrite
+/* B1FC20 800A8A80 0C02A7A8 */ jal SsSram_ReadWrite
/* B1FC24 800A8A84 8DE50000 */ lw $a1, ($t7)
/* B1FC28 800A8A88 3C148016 */ lui $s4, %hi(gSaveContext) # $s4, 0x8016
/* B1FC2C 800A8A8C 2694E660 */ addiu $s4, %lo(gSaveContext) # addiu $s4, $s4, -0x19a0
@@ -134,8 +134,8 @@ glabel func_800A8A20
/* B1FC50 800A8AB0 A7B80066 */ sh $t8, 0x66($sp)
.L800A8AB4:
/* B1FC54 800A8AB4 97B90072 */ lhu $t9, 0x72($sp)
-/* B1FC58 800A8AB8 3C098013 */ lui $t1, %hi(D_8012A4E0) # $t1, 0x8013
-/* B1FC5C 800A8ABC 2529A4E0 */ addiu $t1, %lo(D_8012A4E0) # addiu $t1, $t1, -0x5b20
+/* B1FC58 800A8AB8 3C098013 */ lui $t1, %hi(gSramSlotOffsets) # $t1, 0x8013
+/* B1FC5C 800A8ABC 2529A4E0 */ addiu $t1, %lo(gSramSlotOffsets) # addiu $t1, $t1, -0x5b20
/* B1FC60 800A8AC0 00194040 */ sll $t0, $t9, 1
/* B1FC64 800A8AC4 01091021 */ addu $v0, $t0, $t1
/* B1FC68 800A8AC8 94520000 */ lhu $s2, ($v0)
@@ -189,8 +189,8 @@ glabel func_800A8A20
/* B1FD24 800A8B84 95A50000 */ lhu $a1, ($t5)
/* B1FD28 800A8B88 8FAE005C */ lw $t6, 0x5c($sp)
/* B1FD2C 800A8B8C 8FB9007C */ lw $t9, 0x7c($sp)
-/* B1FD30 800A8B90 3C188013 */ lui $t8, %hi(D_8012A4E0) # $t8, 0x8013
-/* B1FD34 800A8B94 2718A4E0 */ addiu $t8, %lo(D_8012A4E0) # addiu $t8, $t8, -0x5b20
+/* B1FD30 800A8B90 3C188013 */ lui $t8, %hi(gSramSlotOffsets) # $t8, 0x8013
+/* B1FD34 800A8B94 2718A4E0 */ addiu $t8, %lo(gSramSlotOffsets) # addiu $t8, $t8, -0x5b20
/* B1FD38 800A8B98 000E7840 */ sll $t7, $t6, 1
/* B1FD3C 800A8B9C 01F81021 */ addu $v0, $t7, $t8
/* B1FD40 800A8BA0 94520006 */ lhu $s2, 6($v0)
@@ -264,7 +264,7 @@ glabel func_800A8A20
/* B1FE4C 800A8CAC 97AB0072 */ lhu $t3, 0x72($sp)
/* B1FE50 800A8CB0 1560001C */ bnez $t3, .L800A8D24
/* B1FE54 800A8CB4 00000000 */ nop
-/* B1FE58 800A8CB8 0C02A0B2 */ jal func_800A82C8
+/* B1FE58 800A8CB8 0C02A0B2 */ jal Sram_InitDebugSave
/* B1FE5C 800A8CBC 00000000 */ nop
/* B1FE60 800A8CC0 2402005A */ li $v0, 90
/* B1FE64 800A8CC4 240E0044 */ li $t6, 68
@@ -292,7 +292,7 @@ glabel func_800A8A20
/* B1FEBC 800A8D1C 10000003 */ b .L800A8D2C
/* B1FEC0 800A8D20 00000000 */ nop
.L800A8D24:
-/* B1FEC4 800A8D24 0C02A068 */ jal func_800A81A0
+/* B1FEC4 800A8D24 0C02A068 */ jal Sram_InitNewSave
/* B1FEC8 800A8D28 00000000 */ nop
.L800A8D2C:
/* B1FECC 800A8D2C 3C048014 */ lui $a0, %hi(D_80140B74) # $a0, 0x8014
@@ -334,7 +334,7 @@ glabel func_800A8A20
/* B1FF54 800A8DB4 95500006 */ lhu $s0, 6($t2)
/* B1FF58 800A8DB8 24061450 */ li $a2, 5200
/* B1FF5C 800A8DBC 24070001 */ li $a3, 1
-/* B1FF60 800A8DC0 0C02A7A8 */ jal Sram_ReadWrite
+/* B1FF60 800A8DC0 0C02A7A8 */ jal SsSram_ReadWrite
/* B1FF64 800A8DC4 02012021 */ addu $a0, $s0, $at
/* B1FF68 800A8DC8 928B001F */ lbu $t3, 0x1f($s4)
/* B1FF6C 800A8DCC 928C0020 */ lbu $t4, 0x20($s4)
@@ -362,7 +362,7 @@ glabel func_800A8A20
/* B1FFC0 800A8E20 95D00000 */ lhu $s0, ($t6)
/* B1FFC4 800A8E24 24061450 */ li $a2, 5200
/* B1FFC8 800A8E28 24070001 */ li $a3, 1
-/* B1FFCC 800A8E2C 0C02A7A8 */ jal Sram_ReadWrite
+/* B1FFCC 800A8E2C 0C02A7A8 */ jal SsSram_ReadWrite
/* B1FFD0 800A8E30 02012021 */ addu $a0, $s0, $at
/* B1FFD4 800A8E34 3C048014 */ lui $a0, %hi(D_80140C14) # $a0, 0x8014
/* B1FFD8 800A8E38 24840C14 */ addiu $a0, %lo(D_80140C14) # addiu $a0, $a0, 0xc14
@@ -392,7 +392,7 @@ glabel func_800A8A20
/* B20030 800A8E90 3C040800 */ lui $a0, 0x800
/* B20034 800A8E94 34068000 */ li $a2, 32768
/* B20038 800A8E98 00003825 */ move $a3, $zero
-/* B2003C 800A8E9C 0C02A7A8 */ jal Sram_ReadWrite
+/* B2003C 800A8E9C 0C02A7A8 */ jal SsSram_ReadWrite
/* B20040 800A8EA0 8D050000 */ lw $a1, ($t0)
/* B20044 800A8EA4 97A90066 */ lhu $t1, 0x66($sp)
/* B20048 800A8EA8 3C048014 */ lui $a0, %hi(D_80140C58) # $a0, 0x8014
diff --git a/asm/non_matchings/code/z_sram/func_800A81A0.s b/asm/non_matchings/code/z_sram/func_800A81A0.s
deleted file mode 100644
index e6627d6a2..000000000
--- a/asm/non_matchings/code/z_sram/func_800A81A0.s
+++ /dev/null
@@ -1,78 +0,0 @@
-glabel func_800A81A0
-/* B1F340 800A81A0 27BDFFE8 */ addiu $sp, $sp, -0x18
-/* B1F344 800A81A4 AFBF0014 */ sw $ra, 0x14($sp)
-/* B1F348 800A81A8 3C048016 */ lui $a0, %hi(gSaveContext+0x1c) # $a0, 0x8016
-/* B1F34C 800A81AC 2484E67C */ addiu $a0, %lo(gSaveContext+0x1c) # addiu $a0, $a0, -0x1984
-/* B1F350 800A81B0 0C001114 */ jal bzero
-/* B1F354 800A81B4 24051338 */ li $a1, 4920
-/* B1F358 800A81B8 3C028016 */ lui $v0, %hi(gSaveContext) # $v0, 0x8016
-/* B1F35C 800A81BC 2442E660 */ addiu $v0, %lo(gSaveContext) # addiu $v0, $v0, -0x19a0
-/* B1F360 800A81C0 3C0F8013 */ lui $t7, %hi(D_8012A4F8) # $t7, 0x8013
-/* B1F364 800A81C4 25EFA4F8 */ addiu $t7, %lo(D_8012A4F8) # addiu $t7, $t7, -0x5b08
-/* B1F368 800A81C8 3C0E8016 */ lui $t6, %hi(gSaveContext+0x1c) # $t6, 0x8016
-/* B1F36C 800A81CC AC400014 */ sw $zero, 0x14($v0)
-/* B1F370 800A81D0 AC400018 */ sw $zero, 0x18($v0)
-/* B1F374 800A81D4 25CEE67C */ addiu $t6, %lo(gSaveContext+0x1c) # addiu $t6, $t6, -0x1984
-/* B1F378 800A81D8 25E80048 */ addiu $t0, $t7, 0x48
-.L800A81DC:
-/* B1F37C 800A81DC 8DF90000 */ lw $t9, ($t7)
-/* B1F380 800A81E0 25EF000C */ addiu $t7, $t7, 0xc
-/* B1F384 800A81E4 25CE000C */ addiu $t6, $t6, 0xc
-/* B1F388 800A81E8 ADD9FFF4 */ sw $t9, -0xc($t6)
-/* B1F38C 800A81EC 8DF8FFF8 */ lw $t8, -8($t7)
-/* B1F390 800A81F0 ADD8FFF8 */ sw $t8, -8($t6)
-/* B1F394 800A81F4 8DF9FFFC */ lw $t9, -4($t7)
-/* B1F398 800A81F8 15E8FFF8 */ bne $t7, $t0, .L800A81DC
-/* B1F39C 800A81FC ADD9FFFC */ sw $t9, -4($t6)
-/* B1F3A0 800A8200 8DF90000 */ lw $t9, ($t7)
-/* B1F3A4 800A8204 3C0A8013 */ lui $t2, %hi(D_8012A544) # $t2, 0x8013
-/* B1F3A8 800A8208 254AA544 */ addiu $t2, %lo(D_8012A544) # addiu $t2, $t2, -0x5abc
-/* B1F3AC 800A820C ADD90000 */ sw $t9, ($t6)
-/* B1F3B0 800A8210 8D4C0000 */ lw $t4, ($t2)
-/* B1F3B4 800A8214 3C098016 */ lui $t1, %hi(gSaveContext+0x68) # $t1, 0x8016
-/* B1F3B8 800A8218 2529E6C8 */ addiu $t1, %lo(gSaveContext+0x68) # addiu $t1, $t1, -0x1938
-/* B1F3BC 800A821C A92C0000 */ swl $t4, ($t1)
-/* B1F3C0 800A8220 8D4B0004 */ lw $t3, 4($t2)
-/* B1F3C4 800A8224 B92C0003 */ swr $t4, 3($t1)
-/* B1F3C8 800A8228 954C0008 */ lhu $t4, 8($t2)
-/* B1F3CC 800A822C 3C088013 */ lui $t0, %hi(D_8012A550) # $t0, 0x8013
-/* B1F3D0 800A8230 2508A550 */ addiu $t0, %lo(D_8012A550) # addiu $t0, $t0, -0x5ab0
-/* B1F3D4 800A8234 3C0D8016 */ lui $t5, %hi(gSaveContext+0x74) # $t5, 0x8016
-/* B1F3D8 800A8238 A92B0004 */ swl $t3, 4($t1)
-/* B1F3DC 800A823C 25ADE6D4 */ addiu $t5, %lo(gSaveContext+0x74) # addiu $t5, $t5, -0x192c
-/* B1F3E0 800A8240 25180060 */ addiu $t8, $t0, 0x60
-/* B1F3E4 800A8244 B92B0007 */ swr $t3, 7($t1)
-/* B1F3E8 800A8248 A52C0008 */ sh $t4, 8($t1)
-.L800A824C:
-/* B1F3EC 800A824C 8D0E0000 */ lw $t6, ($t0)
-/* B1F3F0 800A8250 2508000C */ addiu $t0, $t0, 0xc
-/* B1F3F4 800A8254 25AD000C */ addiu $t5, $t5, 0xc
-/* B1F3F8 800A8258 ADAEFFF4 */ sw $t6, -0xc($t5)
-/* B1F3FC 800A825C 8D0FFFF8 */ lw $t7, -8($t0)
-/* B1F400 800A8260 ADAFFFF8 */ sw $t7, -8($t5)
-/* B1F404 800A8264 8D0EFFFC */ lw $t6, -4($t0)
-/* B1F408 800A8268 1518FFF8 */ bne $t0, $t8, .L800A824C
-/* B1F40C 800A826C ADAEFFFC */ sw $t6, -4($t5)
-/* B1F410 800A8270 3C198013 */ lui $t9, %hi(D_8012A5B0) # $t9, 0x8013
-/* B1F414 800A8274 9739A5B0 */ lhu $t9, %lo(D_8012A5B0)($t9)
-/* B1F418 800A8278 3C018016 */ lui $at, %hi(gSaveContext+0x1352) # $at, 0x8016
-/* B1F41C 800A827C 8FBF0014 */ lw $ra, 0x14($sp)
-/* B1F420 800A8280 A439F9B2 */ sh $t9, %lo(gSaveContext+0x1352)($at)
-/* B1F424 800A8284 24090051 */ li $t1, 81
-/* B1F428 800A8288 240AF8D0 */ li $t2, -1840
-/* B1F42C 800A828C 240B0048 */ li $t3, 72
-/* B1F430 800A8290 240C1579 */ li $t4, 5497
-/* B1F434 800A8294 24189527 */ li $t8, -27353
-/* B1F438 800A8298 24080001 */ li $t0, 1
-/* B1F43C 800A829C 3C0D4000 */ lui $t5, 0x4000
-/* B1F440 800A82A0 A4491348 */ sh $t1, 0x1348($v0)
-/* B1F444 800A82A4 A44A134A */ sh $t2, 0x134a($v0)
-/* B1F448 800A82A8 A44B134C */ sh $t3, 0x134c($v0)
-/* B1F44C 800A82AC A44C134E */ sh $t4, 0x134e($v0)
-/* B1F450 800A82B0 A4581350 */ sh $t8, 0x1350($v0)
-/* B1F454 800A82B4 A0400032 */ sb $zero, 0x32($v0)
-/* B1F458 800A82B8 A4480F32 */ sh $t0, 0xf32($v0)
-/* B1F45C 800A82BC AC4D0164 */ sw $t5, 0x164($v0)
-/* B1F460 800A82C0 03E00008 */ jr $ra
-/* B1F464 800A82C4 27BD0018 */ addiu $sp, $sp, 0x18
-
diff --git a/asm/non_matchings/code/z_sram/func_800A82C8.s b/asm/non_matchings/code/z_sram/func_800A82C8.s
deleted file mode 100644
index 4a4e7bd87..000000000
--- a/asm/non_matchings/code/z_sram/func_800A82C8.s
+++ /dev/null
@@ -1,118 +0,0 @@
-glabel func_800A82C8
-/* B1F468 800A82C8 27BDFFE8 */ addiu $sp, $sp, -0x18
-/* B1F46C 800A82CC AFBF0014 */ sw $ra, 0x14($sp)
-/* B1F470 800A82D0 3C048016 */ lui $a0, %hi(gSaveContext+0x1c) # $a0, 0x8016
-/* B1F474 800A82D4 2484E67C */ addiu $a0, %lo(gSaveContext+0x1c) # addiu $a0, $a0, -0x1984
-/* B1F478 800A82D8 0C001114 */ jal bzero
-/* B1F47C 800A82DC 24051338 */ li $a1, 4920
-/* B1F480 800A82E0 3C028016 */ lui $v0, %hi(gSaveContext) # $v0, 0x8016
-/* B1F484 800A82E4 2442E660 */ addiu $v0, %lo(gSaveContext) # addiu $v0, $v0, -0x19a0
-/* B1F488 800A82E8 3C0F8013 */ lui $t7, %hi(D_8012A5B4) # $t7, 0x8013
-/* B1F48C 800A82EC 25EFA5B4 */ addiu $t7, %lo(D_8012A5B4) # addiu $t7, $t7, -0x5a4c
-/* B1F490 800A82F0 3C0E8016 */ lui $t6, %hi(gSaveContext+0x1c) # $t6, 0x8016
-/* B1F494 800A82F4 AC400014 */ sw $zero, 0x14($v0)
-/* B1F498 800A82F8 AC400018 */ sw $zero, 0x18($v0)
-/* B1F49C 800A82FC 25CEE67C */ addiu $t6, %lo(gSaveContext+0x1c) # addiu $t6, $t6, -0x1984
-/* B1F4A0 800A8300 25E80048 */ addiu $t0, $t7, 0x48
-.L800A8304:
-/* B1F4A4 800A8304 8DF90000 */ lw $t9, ($t7)
-/* B1F4A8 800A8308 25EF000C */ addiu $t7, $t7, 0xc
-/* B1F4AC 800A830C 25CE000C */ addiu $t6, $t6, 0xc
-/* B1F4B0 800A8310 ADD9FFF4 */ sw $t9, -0xc($t6)
-/* B1F4B4 800A8314 8DF8FFF8 */ lw $t8, -8($t7)
-/* B1F4B8 800A8318 ADD8FFF8 */ sw $t8, -8($t6)
-/* B1F4BC 800A831C 8DF9FFFC */ lw $t9, -4($t7)
-/* B1F4C0 800A8320 15E8FFF8 */ bne $t7, $t0, .L800A8304
-/* B1F4C4 800A8324 ADD9FFFC */ sw $t9, -4($t6)
-/* B1F4C8 800A8328 8DF90000 */ lw $t9, ($t7)
-/* B1F4CC 800A832C 3C0A8013 */ lui $t2, %hi(D_8012A600) # $t2, 0x8013
-/* B1F4D0 800A8330 254AA600 */ addiu $t2, %lo(D_8012A600) # addiu $t2, $t2, -0x5a00
-/* B1F4D4 800A8334 ADD90000 */ sw $t9, ($t6)
-/* B1F4D8 800A8338 8D4C0000 */ lw $t4, ($t2)
-/* B1F4DC 800A833C 3C098016 */ lui $t1, %hi(gSaveContext+0x68) # $t1, 0x8016
-/* B1F4E0 800A8340 2529E6C8 */ addiu $t1, %lo(gSaveContext+0x68) # addiu $t1, $t1, -0x1938
-/* B1F4E4 800A8344 A92C0000 */ swl $t4, ($t1)
-/* B1F4E8 800A8348 8D4B0004 */ lw $t3, 4($t2)
-/* B1F4EC 800A834C B92C0003 */ swr $t4, 3($t1)
-/* B1F4F0 800A8350 954C0008 */ lhu $t4, 8($t2)
-/* B1F4F4 800A8354 3C088013 */ lui $t0, %hi(D_8012A60C) # $t0, 0x8013
-/* B1F4F8 800A8358 2508A60C */ addiu $t0, %lo(D_8012A60C) # addiu $t0, $t0, -0x59f4
-/* B1F4FC 800A835C 3C0D8016 */ lui $t5, %hi(gSaveContext+0x74) # $t5, 0x8016
-/* B1F500 800A8360 A92B0004 */ swl $t3, 4($t1)
-/* B1F504 800A8364 25ADE6D4 */ addiu $t5, %lo(gSaveContext+0x74) # addiu $t5, $t5, -0x192c
-/* B1F508 800A8368 25180060 */ addiu $t8, $t0, 0x60
-/* B1F50C 800A836C B92B0007 */ swr $t3, 7($t1)
-/* B1F510 800A8370 A52C0008 */ sh $t4, 8($t1)
-.L800A8374:
-/* B1F514 800A8374 8D0E0000 */ lw $t6, ($t0)
-/* B1F518 800A8378 2508000C */ addiu $t0, $t0, 0xc
-/* B1F51C 800A837C 25AD000C */ addiu $t5, $t5, 0xc
-/* B1F520 800A8380 ADAEFFF4 */ sw $t6, -0xc($t5)
-/* B1F524 800A8384 8D0FFFF8 */ lw $t7, -8($t0)
-/* B1F528 800A8388 ADAFFFF8 */ sw $t7, -8($t5)
-/* B1F52C 800A838C 8D0EFFFC */ lw $t6, -4($t0)
-/* B1F530 800A8390 1518FFF8 */ bne $t0, $t8, .L800A8374
-/* B1F534 800A8394 ADAEFFFC */ sw $t6, -4($t5)
-/* B1F538 800A8398 3C198013 */ lui $t9, %hi(D_8012A66C) # $t9, 0x8013
-/* B1F53C 800A839C 9739A66C */ lhu $t9, %lo(D_8012A66C)($t9)
-/* B1F540 800A83A0 3C018016 */ lui $at, %hi(gSaveContext+0x1352) # $at, 0x8016
-/* B1F544 800A83A4 240AF8D0 */ li $t2, -1840
-/* B1F548 800A83A8 A439F9B2 */ sh $t9, %lo(gSaveContext+0x1352)($at)
-/* B1F54C 800A83AC A44A134A */ sh $t2, 0x134a($v0)
-/* B1F550 800A83B0 240C1579 */ li $t4, 5497
-/* B1F554 800A83B4 94480EF8 */ lhu $t0, 0xef8($v0)
-/* B1F558 800A83B8 944F0ED4 */ lhu $t7, 0xed4($v0)
-/* B1F55C 800A83BC 94590EE4 */ lhu $t9, 0xee4($v0)
-/* B1F560 800A83C0 944A0EEC */ lhu $t2, 0xeec($v0)
-/* B1F564 800A83C4 A44C134E */ sh $t4, 0x134e($v0)
-/* B1F568 800A83C8 8C4C0004 */ lw $t4, 4($v0)
-/* B1F56C 800A83CC 24090051 */ li $t1, 81
-/* B1F570 800A83D0 240B0048 */ li $t3, 72
-/* B1F574 800A83D4 A4491348 */ sh $t1, 0x1348($v0)
-/* B1F578 800A83D8 A44B134C */ sh $t3, 0x134c($v0)
-/* B1F57C 800A83DC 24189527 */ li $t8, -27353
-/* B1F580 800A83E0 350D5009 */ ori $t5, $t0, 0x5009
-/* B1F584 800A83E4 35EE123F */ ori $t6, $t7, 0x123f
-/* B1F588 800A83E8 37290001 */ ori $t1, $t9, 1
-/* B1F58C 800A83EC 354B0010 */ ori $t3, $t2, 0x10
-/* B1F590 800A83F0 A4581350 */ sh $t8, 0x1350($v0)
-/* B1F594 800A83F4 A44D0EF8 */ sh $t5, 0xef8($v0)
-/* B1F598 800A83F8 A44E0ED4 */ sh $t6, 0xed4($v0)
-/* B1F59C 800A83FC A4490EE4 */ sh $t1, 0xee4($v0)
-/* B1F5A0 800A8400 11800003 */ beqz $t4, .L800A8410
-/* B1F5A4 800A8404 A44B0EEC */ sh $t3, 0xeec($v0)
-/* B1F5A8 800A8408 10000002 */ b .L800A8414
-/* B1F5AC 800A840C 24030005 */ li $v1, 5
-.L800A8410:
-/* B1F5B0 800A8410 24030011 */ li $v1, 17
-.L800A8414:
-/* B1F5B4 800A8414 24010005 */ li $at, 5
-/* B1F5B8 800A8418 14610012 */ bne $v1, $at, .L800A8464
-/* B1F5BC 800A841C 2418003B */ li $t8, 59
-/* B1F5C0 800A8420 A0580068 */ sb $t8, 0x68($v0)
-/* B1F5C4 800A8424 00002025 */ move $a0, $zero
-/* B1F5C8 800A8428 0C025E80 */ jal Inventory_ChangeEquipment
-/* B1F5CC 800A842C 24050001 */ li $a1, 1
-/* B1F5D0 800A8430 3C028016 */ lui $v0, %hi(gSaveContext) # $v0, 0x8016
-/* B1F5D4 800A8434 2442E660 */ addiu $v0, %lo(gSaveContext) # addiu $v0, $v0, -0x19a0
-/* B1F5D8 800A8438 8C481354 */ lw $t0, 0x1354($v0)
-/* B1F5DC 800A843C 240100FF */ li $at, 255
-/* B1F5E0 800A8440 24030006 */ li $v1, 6
-/* B1F5E4 800A8444 15010007 */ bne $t0, $at, .L800A8464
-/* B1F5E8 800A8448 24040001 */ li $a0, 1
-/* B1F5EC 800A844C A0430069 */ sb $v1, 0x69($v0)
-/* B1F5F0 800A8450 A043006C */ sb $v1, 0x6c($v0)
-/* B1F5F4 800A8454 0C025E80 */ jal Inventory_ChangeEquipment
-/* B1F5F8 800A8458 24050001 */ li $a1, 1
-/* B1F5FC 800A845C 3C028016 */ lui $v0, %hi(gSaveContext) # $v0, 0x8016
-/* B1F600 800A8460 2442E660 */ addiu $v0, %lo(gSaveContext) # addiu $v0, $v0, -0x19a0
-.L800A8464:
-/* B1F604 800A8464 8FBF0014 */ lw $ra, 0x14($sp)
-/* B1F608 800A8468 240D00CD */ li $t5, 205
-/* B1F60C 800A846C 3C0F4000 */ lui $t7, 0x4000
-/* B1F610 800A8470 AC4D0000 */ sw $t5, ($v0)
-/* B1F614 800A8474 A0400032 */ sb $zero, 0x32($v0)
-/* B1F618 800A8478 AC4F0164 */ sw $t7, 0x164($v0)
-/* B1F61C 800A847C 03E00008 */ jr $ra
-/* B1F620 800A8480 27BD0018 */ addiu $sp, $sp, 0x18
-
diff --git a/asm/non_matchings/code/z_sram/func_800A88D4.s b/asm/non_matchings/code/z_sram/func_800A88D4.s
deleted file mode 100644
index ecf6d1de1..000000000
--- a/asm/non_matchings/code/z_sram/func_800A88D4.s
+++ /dev/null
@@ -1,91 +0,0 @@
-glabel func_800A88D4
-/* B1FA74 800A88D4 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B1FA78 800A88D8 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B1FA7C 800A88DC 27BDFFE0 */ addiu $sp, $sp, -0x20
-/* B1FA80 800A88E0 AFA40020 */ sw $a0, 0x20($sp)
-/* B1FA84 800A88E4 AFBF0014 */ sw $ra, 0x14($sp)
-/* B1FA88 800A88E8 A4A01352 */ sh $zero, 0x1352($a1)
-/* B1FA8C 800A88EC 00A01825 */ move $v1, $a1
-/* B1FA90 800A88F0 00002025 */ move $a0, $zero
-/* B1FA94 800A88F4 00001025 */ move $v0, $zero
-/* B1FA98 800A88F8 00004025 */ move $t0, $zero
-/* B1FA9C 800A88FC 24090020 */ li $t1, 32
-.L800A8900:
-/* B1FAA0 800A8900 24420001 */ addiu $v0, $v0, 1
-/* B1FAA4 800A8904 3042FFFF */ andi $v0, $v0, 0xffff
-/* B1FAA8 800A8908 15220002 */ bne $t1, $v0, .L800A8914
-/* B1FAAC 800A890C 25080001 */ addiu $t0, $t0, 1
-/* B1FAB0 800A8910 00001025 */ move $v0, $zero
-.L800A8914:
-/* B1FAB4 800A8914 946E0000 */ lhu $t6, ($v1)
-/* B1FAB8 800A8918 3108FFFF */ andi $t0, $t0, 0xffff
-/* B1FABC 800A891C 2D0109AA */ sltiu $at, $t0, 0x9aa
-/* B1FAC0 800A8920 008E2021 */ addu $a0, $a0, $t6
-/* B1FAC4 800A8924 3084FFFF */ andi $a0, $a0, 0xffff
-/* B1FAC8 800A8928 1420FFF5 */ bnez $at, .L800A8900
-/* B1FACC 800A892C 24630002 */ addiu $v1, $v1, 2
-/* B1FAD0 800A8930 A4A41352 */ sh $a0, 0x1352($a1)
-/* B1FAD4 800A8934 00A01825 */ move $v1, $a1
-/* B1FAD8 800A8938 00002025 */ move $a0, $zero
-/* B1FADC 800A893C 00004025 */ move $t0, $zero
-.L800A8940:
-/* B1FAE0 800A8940 24420001 */ addiu $v0, $v0, 1
-/* B1FAE4 800A8944 3042FFFF */ andi $v0, $v0, 0xffff
-/* B1FAE8 800A8948 15220002 */ bne $t1, $v0, .L800A8954
-/* B1FAEC 800A894C 25080001 */ addiu $t0, $t0, 1
-/* B1FAF0 800A8950 00001025 */ move $v0, $zero
-.L800A8954:
-/* B1FAF4 800A8954 946F0000 */ lhu $t7, ($v1)
-/* B1FAF8 800A8958 3108FFFF */ andi $t0, $t0, 0xffff
-/* B1FAFC 800A895C 2D0109AA */ sltiu $at, $t0, 0x9aa
-/* B1FB00 800A8960 008F2021 */ addu $a0, $a0, $t7
-/* B1FB04 800A8964 3084FFFF */ andi $a0, $a0, 0xffff
-/* B1FB08 800A8968 1420FFF5 */ bnez $at, .L800A8940
-/* B1FB0C 800A896C 24630002 */ addiu $v1, $v1, 2
-/* B1FB10 800A8970 8CB81354 */ lw $t8, 0x1354($a1)
-/* B1FB14 800A8974 3C088013 */ lui $t0, %hi(D_8012A4E0)
-/* B1FB18 800A8978 3C010800 */ lui $at, 0x800
-/* B1FB1C 800A897C 0018C840 */ sll $t9, $t8, 1
-/* B1FB20 800A8980 01194021 */ addu $t0, $t0, $t9
-/* B1FB24 800A8984 9508A4E0 */ lhu $t0, %lo(D_8012A4E0)($t0)
-/* B1FB28 800A8988 24061450 */ li $a2, 5200
-/* B1FB2C 800A898C 24070001 */ li $a3, 1
-/* B1FB30 800A8990 A7A2001A */ sh $v0, 0x1a($sp)
-/* B1FB34 800A8994 0C02A7A8 */ jal Sram_ReadWrite
-/* B1FB38 800A8998 01012021 */ addu $a0, $t0, $at
-/* B1FB3C 800A899C 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B1FB40 800A89A0 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B1FB44 800A89A4 97A2001A */ lhu $v0, 0x1a($sp)
-/* B1FB48 800A89A8 24090020 */ li $t1, 32
-/* B1FB4C 800A89AC 00A01825 */ move $v1, $a1
-/* B1FB50 800A89B0 00002025 */ move $a0, $zero
-/* B1FB54 800A89B4 00004025 */ move $t0, $zero
-.L800A89B8:
-/* B1FB58 800A89B8 24420001 */ addiu $v0, $v0, 1
-/* B1FB5C 800A89BC 3042FFFF */ andi $v0, $v0, 0xffff
-/* B1FB60 800A89C0 15220002 */ bne $t1, $v0, .L800A89CC
-/* B1FB64 800A89C4 25080001 */ addiu $t0, $t0, 1
-/* B1FB68 800A89C8 00001025 */ move $v0, $zero
-.L800A89CC:
-/* B1FB6C 800A89CC 946A0000 */ lhu $t2, ($v1)
-/* B1FB70 800A89D0 3108FFFF */ andi $t0, $t0, 0xffff
-/* B1FB74 800A89D4 2D0109AA */ sltiu $at, $t0, 0x9aa
-/* B1FB78 800A89D8 008A2021 */ addu $a0, $a0, $t2
-/* B1FB7C 800A89DC 3084FFFF */ andi $a0, $a0, 0xffff
-/* B1FB80 800A89E0 1420FFF5 */ bnez $at, .L800A89B8
-/* B1FB84 800A89E4 24630002 */ addiu $v1, $v1, 2
-/* B1FB88 800A89E8 8CAB1354 */ lw $t3, 0x1354($a1)
-/* B1FB8C 800A89EC 3C088013 */ lui $t0, %hi(D_8012A4E6)
-/* B1FB90 800A89F0 3C010800 */ lui $at, 0x800
-/* B1FB94 800A89F4 000B6040 */ sll $t4, $t3, 1
-/* B1FB98 800A89F8 010C4021 */ addu $t0, $t0, $t4
-/* B1FB9C 800A89FC 9508A4E6 */ lhu $t0, %lo(D_8012A4E6)($t0)
-/* B1FBA0 800A8A00 24061450 */ li $a2, 5200
-/* B1FBA4 800A8A04 24070001 */ li $a3, 1
-/* B1FBA8 800A8A08 0C02A7A8 */ jal Sram_ReadWrite
-/* B1FBAC 800A8A0C 01012021 */ addu $a0, $t0, $at
-/* B1FBB0 800A8A10 8FBF0014 */ lw $ra, 0x14($sp)
-/* B1FBB4 800A8A14 27BD0020 */ addiu $sp, $sp, 0x20
-/* B1FBB8 800A8A18 03E00008 */ jr $ra
-/* B1FBBC 800A8A1C 00000000 */ nop
-
diff --git a/asm/non_matchings/code/z_sram/func_800A9258.s b/asm/non_matchings/code/z_sram/func_800A9258.s
deleted file mode 100644
index 36c8fa372..000000000
--- a/asm/non_matchings/code/z_sram/func_800A9258.s
+++ /dev/null
@@ -1,354 +0,0 @@
-.rdata
-glabel D_80140CDC
- .asciz "64DDフラグ=%d\n"
- # EUC-JP: 64DDフラグ | 64DD flag
- .balign 4
-
-glabel D_80140CF0
- .asciz "newf=%x,%x,%x,%x,%x,%x\n"
- .balign 4
-
-glabel D_80140D08
- .asciz "\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
- .balign 4
-
-glabel D_80140D58
- .asciz "%x "
- .balign 4
-
-glabel D_80140D5C
- .asciz "\n"
- .balign 4
-
-glabel D_80140D60
- .asciz "\nチェックサム=%x\n"
- # EUC-JP: チェックサム=%x | Checksum
- .balign 4
-
-glabel D_80140D74
- .asciz "I=%x no=%d\n"
- .balign 4
-
-glabel D_80140D80
- .asciz "I=%x no=%d\n"
- .balign 4
-
-glabel D_80140D8C
- .asciz "SAVE終了\n"
- # EUC-JP: SAVE終了 | SAVE end
- .balign 4
-
-glabel D_80140D9C
- .asciz "z_common_data.file_no = %d\n"
- .balign 4
-
-glabel D_80140DB8
- .asciz "SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, SAVE_64DD=%x\n"
- .balign 4
-
-glabel D_80140DF0
- .asciz "f_64dd[%d]=%d\n"
- .balign 4
-
-glabel D_80140E00
- .asciz "heart_status[%d]=%d\n"
- .balign 4
-
-glabel D_80140E18
- .asciz "now_life[%d]=%d\n"
- .balign 4
-
-.text
-glabel func_800A9258
-/* B203F8 800A9258 27BDFFB8 */ addiu $sp, $sp, -0x48
-/* B203FC 800A925C AFB60040 */ sw $s6, 0x40($sp)
-/* B20400 800A9260 3C160001 */ lui $s6, (0x00018000 >> 16) # lui $s6, 1
-/* B20404 800A9264 36D68000 */ ori $s6, (0x00018000 & 0xFFFF) # ori $s6, $s6, 0x8000
-/* B20408 800A9268 AFB1002C */ sw $s1, 0x2c($sp)
-/* B2040C 800A926C AFBF0044 */ sw $ra, 0x44($sp)
-/* B20410 800A9270 AFB5003C */ sw $s5, 0x3c($sp)
-/* B20414 800A9274 AFB40038 */ sw $s4, 0x38($sp)
-/* B20418 800A9278 AFB30034 */ sw $s3, 0x34($sp)
-/* B2041C 800A927C AFB20030 */ sw $s2, 0x30($sp)
-/* B20420 800A9280 AFB00028 */ sw $s0, 0x28($sp)
-/* B20424 800A9284 AFA5004C */ sw $a1, 0x4c($sp)
-/* B20428 800A9288 00968821 */ addu $s1, $a0, $s6
-/* B2042C 800A928C 862E4A38 */ lh $t6, 0x4a38($s1)
-/* B20430 800A9290 0080A825 */ move $s5, $a0
-/* B20434 800A9294 11C00005 */ beqz $t6, .L800A92AC
-/* B20438 800A9298 00000000 */ nop
-/* B2043C 800A929C 0C02A068 */ jal func_800A81A0
-/* B20440 800A92A0 00000000 */ nop
-/* B20444 800A92A4 10000003 */ b .L800A92B4
-/* B20448 800A92A8 00000000 */ nop
-.L800A92AC:
-/* B2044C 800A92AC 0C02A0B2 */ jal func_800A82C8
-/* B20450 800A92B0 00000000 */ nop
-.L800A92B4:
-/* B20454 800A92B4 3C148016 */ lui $s4, %hi(gSaveContext) # $s4, 0x8016
-/* B20458 800A92B8 2694E660 */ addiu $s4, %lo(gSaveContext) # addiu $s4, $s4, -0x19a0
-/* B2045C 800A92BC 240F00BB */ li $t7, 187
-/* B20460 800A92C0 24180001 */ li $t8, 1
-/* B20464 800A92C4 24196AAB */ li $t9, 27307
-/* B20468 800A92C8 3408FFF1 */ li $t0, 65521
-/* B2046C 800A92CC AE8F0000 */ sw $t7, ($s4)
-/* B20470 800A92D0 AE980004 */ sw $t8, 4($s4)
-/* B20474 800A92D4 A699000C */ sh $t9, 0xc($s4)
-/* B20478 800A92D8 AE880008 */ sw $t0, 8($s4)
-/* B2047C 800A92DC 86294A38 */ lh $t1, 0x4a38($s1)
-/* B20480 800A92E0 00008025 */ move $s0, $zero
-/* B20484 800A92E4 2402005A */ li $v0, 90
-/* B20488 800A92E8 15200002 */ bnez $t1, .L800A92F4
-/* B2048C 800A92EC 24190045 */ li $t9, 69
-/* B20490 800A92F0 AE800008 */ sw $zero, 8($s4)
-.L800A92F4:
-/* B20494 800A92F4 862A4A38 */ lh $t2, 0x4a38($s1)
-/* B20498 800A92F8 0290C021 */ addu $t8, $s4, $s0
-/* B2049C 800A92FC 000A58C0 */ sll $t3, $t2, 3
-/* B204A0 800A9300 02AB6021 */ addu $t4, $s5, $t3
-/* B204A4 800A9304 01906821 */ addu $t5, $t4, $s0
-/* B204A8 800A9308 26100001 */ addiu $s0, $s0, 1
-/* B204AC 800A930C 01B67021 */ addu $t6, $t5, $s6
-/* B204B0 800A9310 91CF49FC */ lbu $t7, 0x49fc($t6)
-/* B204B4 800A9314 3210FFFF */ andi $s0, $s0, 0xffff
-/* B204B8 800A9318 2A010008 */ slti $at, $s0, 8
-/* B204BC 800A931C 1420FFF5 */ bnez $at, .L800A92F4
-/* B204C0 800A9320 A30F0024 */ sb $t7, 0x24($t8)
-/* B204C4 800A9324 2408004C */ li $t0, 76
-/* B204C8 800A9328 24090044 */ li $t1, 68
-/* B204CC 800A932C 240A0041 */ li $t2, 65
-/* B204D0 800A9330 A282001C */ sb $v0, 0x1c($s4)
-/* B204D4 800A9334 A299001D */ sb $t9, 0x1d($s4)
-/* B204D8 800A9338 A288001E */ sb $t0, 0x1e($s4)
-/* B204DC 800A933C A289001F */ sb $t1, 0x1f($s4)
-/* B204E0 800A9340 A28A0020 */ sb $t2, 0x20($s4)
-/* B204E4 800A9344 A2820021 */ sb $v0, 0x21($s4)
-/* B204E8 800A9348 922B49F4 */ lbu $t3, 0x49f4($s1)
-/* B204EC 800A934C 3C048014 */ lui $a0, %hi(D_80140CDC) # $a0, 0x8014
-/* B204F0 800A9350 24840CDC */ addiu $a0, %lo(D_80140CDC) # addiu $a0, $a0, 0xcdc
-/* B204F4 800A9354 A68B002C */ sh $t3, 0x2c($s4)
-/* B204F8 800A9358 0C00084C */ jal osSyncPrintf
-/* B204FC 800A935C 922549F4 */ lbu $a1, 0x49f4($s1)
-/* B20500 800A9360 928C001F */ lbu $t4, 0x1f($s4)
-/* B20504 800A9364 928D0020 */ lbu $t5, 0x20($s4)
-/* B20508 800A9368 928E0021 */ lbu $t6, 0x21($s4)
-/* B2050C 800A936C 3C048014 */ lui $a0, %hi(D_80140CF0) # $a0, 0x8014
-/* B20510 800A9370 24840CF0 */ addiu $a0, %lo(D_80140CF0) # addiu $a0, $a0, 0xcf0
-/* B20514 800A9374 9285001C */ lbu $a1, 0x1c($s4)
-/* B20518 800A9378 9286001D */ lbu $a2, 0x1d($s4)
-/* B2051C 800A937C 9287001E */ lbu $a3, 0x1e($s4)
-/* B20520 800A9380 AFAC0010 */ sw $t4, 0x10($sp)
-/* B20524 800A9384 AFAD0014 */ sw $t5, 0x14($sp)
-/* B20528 800A9388 0C00084C */ jal osSyncPrintf
-/* B2052C 800A938C AFAE0018 */ sw $t6, 0x18($sp)
-/* B20530 800A9390 3C048014 */ lui $a0, %hi(D_80140D08) # $a0, 0x8014
-/* B20534 800A9394 0C00084C */ jal osSyncPrintf
-/* B20538 800A9398 24840D08 */ addiu $a0, %lo(D_80140D08) # addiu $a0, $a0, 0xd08
-/* B2053C 800A939C 02808825 */ move $s1, $s4
-/* B20540 800A93A0 00009025 */ move $s2, $zero
-/* B20544 800A93A4 00009825 */ move $s3, $zero
-/* B20548 800A93A8 00008025 */ move $s0, $zero
-.L800A93AC:
-/* B2054C 800A93AC 3C048014 */ lui $a0, %hi(D_80140D58) # $a0, 0x8014
-/* B20550 800A93B0 24840D58 */ addiu $a0, %lo(D_80140D58) # addiu $a0, $a0, 0xd58
-/* B20554 800A93B4 0C00084C */ jal osSyncPrintf
-/* B20558 800A93B8 96250000 */ lhu $a1, ($s1)
-/* B2055C 800A93BC 962F0000 */ lhu $t7, ($s1)
-/* B20560 800A93C0 26520001 */ addiu $s2, $s2, 1
-/* B20564 800A93C4 3252FFFF */ andi $s2, $s2, 0xffff
-/* B20568 800A93C8 24010020 */ li $at, 32
-/* B2056C 800A93CC 026F9821 */ addu $s3, $s3, $t7
-/* B20570 800A93D0 3273FFFF */ andi $s3, $s3, 0xffff
-/* B20574 800A93D4 16410005 */ bne $s2, $at, .L800A93EC
-/* B20578 800A93D8 26310002 */ addiu $s1, $s1, 2
-/* B2057C 800A93DC 3C048014 */ lui $a0, %hi(D_80140D5C) # $a0, 0x8014
-/* B20580 800A93E0 0C00084C */ jal osSyncPrintf
-/* B20584 800A93E4 24840D5C */ addiu $a0, %lo(D_80140D5C) # addiu $a0, $a0, 0xd5c
-/* B20588 800A93E8 00009025 */ move $s2, $zero
-.L800A93EC:
-/* B2058C 800A93EC 26100001 */ addiu $s0, $s0, 1
-/* B20590 800A93F0 3210FFFF */ andi $s0, $s0, 0xffff
-/* B20594 800A93F4 2E0109AA */ sltiu $at, $s0, 0x9aa
-/* B20598 800A93F8 1420FFEC */ bnez $at, .L800A93AC
-/* B2059C 800A93FC 00000000 */ nop
-/* B205A0 800A9400 3C048014 */ lui $a0, %hi(D_80140D60) # $a0, 0x8014
-/* B205A4 800A9404 A6931352 */ sh $s3, 0x1352($s4)
-/* B205A8 800A9408 24840D60 */ addiu $a0, %lo(D_80140D60) # addiu $a0, $a0, 0xd60
-/* B205AC 800A940C 0C00084C */ jal osSyncPrintf
-/* B205B0 800A9410 3265FFFF */ andi $a1, $s3, 0xffff
-/* B205B4 800A9414 8E861354 */ lw $a2, 0x1354($s4)
-/* B205B8 800A9418 3C138013 */ lui $s3, %hi(D_8012A4E0) # $s3, 0x8013
-/* B205BC 800A941C 2673A4E0 */ addiu $s3, %lo(D_8012A4E0) # addiu $s3, $s3, -0x5b20
-/* B205C0 800A9420 0006C040 */ sll $t8, $a2, 1
-/* B205C4 800A9424 0278C821 */ addu $t9, $s3, $t8
-/* B205C8 800A9428 97300000 */ lhu $s0, ($t9)
-/* B205CC 800A942C 3C048014 */ lui $a0, %hi(D_80140D74) # $a0, 0x8014
-/* B205D0 800A9430 24840D74 */ addiu $a0, %lo(D_80140D74) # addiu $a0, $a0, 0xd74
-/* B205D4 800A9434 0C00084C */ jal osSyncPrintf
-/* B205D8 800A9438 02002825 */ move $a1, $s0
-/* B205DC 800A943C 8FA8004C */ lw $t0, 0x4c($sp)
-/* B205E0 800A9440 02802825 */ move $a1, $s4
-/* B205E4 800A9444 24061354 */ li $a2, 4948
-/* B205E8 800A9448 8D090000 */ lw $t1, ($t0)
-/* B205EC 800A944C 0C01A508 */ jal MemCopy
-/* B205F0 800A9450 01302021 */ addu $a0, $t1, $s0
-/* B205F4 800A9454 8E911354 */ lw $s1, 0x1354($s4)
-/* B205F8 800A9458 3C048014 */ lui $a0, %hi(D_80140D80) # $a0, 0x8014
-/* B205FC 800A945C 24840D80 */ addiu $a0, %lo(D_80140D80) # addiu $a0, $a0, 0xd80
-/* B20600 800A9460 00115040 */ sll $t2, $s1, 1
-/* B20604 800A9464 026A5821 */ addu $t3, $s3, $t2
-/* B20608 800A9468 95700006 */ lhu $s0, 6($t3)
-/* B2060C 800A946C 26260003 */ addiu $a2, $s1, 3
-/* B20610 800A9470 0C00084C */ jal osSyncPrintf
-/* B20614 800A9474 02002825 */ move $a1, $s0
-/* B20618 800A9478 8FAC004C */ lw $t4, 0x4c($sp)
-/* B2061C 800A947C 02802825 */ move $a1, $s4
-/* B20620 800A9480 24061354 */ li $a2, 4948
-/* B20624 800A9484 8D8D0000 */ lw $t5, ($t4)
-/* B20628 800A9488 0C01A508 */ jal MemCopy
-/* B2062C 800A948C 01B02021 */ addu $a0, $t5, $s0
-/* B20630 800A9490 8FAE004C */ lw $t6, 0x4c($sp)
-/* B20634 800A9494 3C040800 */ lui $a0, 0x800
-/* B20638 800A9498 34068000 */ li $a2, 32768
-/* B2063C 800A949C 24070001 */ li $a3, 1
-/* B20640 800A94A0 0C02A7A8 */ jal Sram_ReadWrite
-/* B20644 800A94A4 8DC50000 */ lw $a1, ($t6)
-/* B20648 800A94A8 3C048014 */ lui $a0, %hi(D_80140D8C) # $a0, 0x8014
-/* B2064C 800A94AC 0C00084C */ jal osSyncPrintf
-/* B20650 800A94B0 24840D8C */ addiu $a0, %lo(D_80140D8C) # addiu $a0, $a0, 0xd8c
-/* B20654 800A94B4 3C048014 */ lui $a0, %hi(D_80140D9C) # $a0, 0x8014
-/* B20658 800A94B8 24840D9C */ addiu $a0, %lo(D_80140D9C) # addiu $a0, $a0, 0xd9c
-/* B2065C 800A94BC 0C00084C */ jal osSyncPrintf
-/* B20660 800A94C0 8E851354 */ lw $a1, 0x1354($s4)
-/* B20664 800A94C4 3C048014 */ lui $a0, %hi(D_80140DB8) # $a0, 0x8014
-/* B20668 800A94C8 240F00A4 */ li $t7, 164
-/* B2066C 800A94CC 2418002C */ li $t8, 44
-/* B20670 800A94D0 AFB80014 */ sw $t8, 0x14($sp)
-/* B20674 800A94D4 AFAF0010 */ sw $t7, 0x10($sp)
-/* B20678 800A94D8 24840DB8 */ addiu $a0, %lo(D_80140DB8) # addiu $a0, $a0, 0xdb8
-/* B2067C 800A94DC 24050022 */ li $a1, 34
-/* B20680 800A94E0 24060024 */ li $a2, 36
-/* B20684 800A94E4 0C00084C */ jal osSyncPrintf
-/* B20688 800A94E8 2407002E */ li $a3, 46
-/* B2068C 800A94EC 8E821354 */ lw $v0, 0x1354($s4)
-/* B20690 800A94F0 8FA8004C */ lw $t0, 0x4c($sp)
-/* B20694 800A94F4 3C010001 */ lui $at, (0x0001C9F6 >> 16) # lui $at, 1
-/* B20698 800A94F8 00021040 */ sll $v0, $v0, 1
-/* B2069C 800A94FC 0262C821 */ addu $t9, $s3, $v0
-/* B206A0 800A9500 97320000 */ lhu $s2, ($t9)
-/* B206A4 800A9504 8D090000 */ lw $t1, ($t0)
-/* B206A8 800A9508 02A22021 */ addu $a0, $s5, $v0
-/* B206AC 800A950C 3421C9F6 */ ori $at, (0x0001C9F6 & 0xFFFF) # ori $at, $at, 0xc9f6
-/* B206B0 800A9510 01322821 */ addu $a1, $t1, $s2
-/* B206B4 800A9514 24A50022 */ addiu $a1, $a1, 0x22
-/* B206B8 800A9518 00812021 */ addu $a0, $a0, $at
-/* B206BC 800A951C 0C01A508 */ jal MemCopy
-/* B206C0 800A9520 24060002 */ li $a2, 2
-/* B206C4 800A9524 8FAC004C */ lw $t4, 0x4c($sp)
-/* B206C8 800A9528 8E8A1354 */ lw $t2, 0x1354($s4)
-/* B206CC 800A952C 3C010001 */ lui $at, (0x0001C9FC >> 16) # lui $at, 1
-/* B206D0 800A9530 8D8D0000 */ lw $t5, ($t4)
-/* B206D4 800A9534 000A58C0 */ sll $t3, $t2, 3
-/* B206D8 800A9538 02AB2021 */ addu $a0, $s5, $t3
-/* B206DC 800A953C 3421C9FC */ ori $at, (0x0001C9FC & 0xFFFF) # ori $at, $at, 0xc9fc
-/* B206E0 800A9540 01B22821 */ addu $a1, $t5, $s2
-/* B206E4 800A9544 24A50024 */ addiu $a1, $a1, 0x24
-/* B206E8 800A9548 00812021 */ addu $a0, $a0, $at
-/* B206EC 800A954C 0C01A508 */ jal MemCopy
-/* B206F0 800A9550 24060008 */ li $a2, 8
-/* B206F4 800A9554 8FB8004C */ lw $t8, 0x4c($sp)
-/* B206F8 800A9558 8E8E1354 */ lw $t6, 0x1354($s4)
-/* B206FC 800A955C 3C010001 */ lui $at, (0x0001CA14 >> 16) # lui $at, 1
-/* B20700 800A9560 8F190000 */ lw $t9, ($t8)
-/* B20704 800A9564 000E7840 */ sll $t7, $t6, 1
-/* B20708 800A9568 02AF2021 */ addu $a0, $s5, $t7
-/* B2070C 800A956C 3421CA14 */ ori $at, (0x0001CA14 & 0xFFFF) # ori $at, $at, 0xca14
-/* B20710 800A9570 03322821 */ addu $a1, $t9, $s2
-/* B20714 800A9574 24A5002E */ addiu $a1, $a1, 0x2e
-/* B20718 800A9578 00812021 */ addu $a0, $a0, $at
-/* B2071C 800A957C 0C01A508 */ jal MemCopy
-/* B20720 800A9580 24060002 */ li $a2, 2
-/* B20724 800A9584 8FAA004C */ lw $t2, 0x4c($sp)
-/* B20728 800A9588 8E881354 */ lw $t0, 0x1354($s4)
-/* B2072C 800A958C 3C010001 */ lui $at, (0x0001CA1C >> 16) # lui $at, 1
-/* B20730 800A9590 8D4B0000 */ lw $t3, ($t2)
-/* B20734 800A9594 00084880 */ sll $t1, $t0, 2
-/* B20738 800A9598 02A92021 */ addu $a0, $s5, $t1
-/* B2073C 800A959C 3421CA1C */ ori $at, (0x0001CA1C & 0xFFFF) # ori $at, $at, 0xca1c
-/* B20740 800A95A0 01722821 */ addu $a1, $t3, $s2
-/* B20744 800A95A4 24A500A4 */ addiu $a1, $a1, 0xa4
-/* B20748 800A95A8 00812021 */ addu $a0, $a0, $at
-/* B2074C 800A95AC 0C01A508 */ jal MemCopy
-/* B20750 800A95B0 24060004 */ li $a2, 4
-/* B20754 800A95B4 8FAE004C */ lw $t6, 0x4c($sp)
-/* B20758 800A95B8 8E8C1354 */ lw $t4, 0x1354($s4)
-/* B2075C 800A95BC 3C010001 */ lui $at, (0x0001CA28 >> 16) # lui $at, 1
-/* B20760 800A95C0 8DCF0000 */ lw $t7, ($t6)
-/* B20764 800A95C4 000C6840 */ sll $t5, $t4, 1
-/* B20768 800A95C8 02AD2021 */ addu $a0, $s5, $t5
-/* B2076C 800A95CC 3421CA28 */ ori $at, (0x0001CA28 & 0xFFFF) # ori $at, $at, 0xca28
-/* B20770 800A95D0 01F22821 */ addu $a1, $t7, $s2
-/* B20774 800A95D4 24A5002C */ addiu $a1, $a1, 0x2c
-/* B20778 800A95D8 00812021 */ addu $a0, $a0, $at
-/* B2077C 800A95DC 0C01A508 */ jal MemCopy
-/* B20780 800A95E0 24060002 */ li $a2, 2
-/* B20784 800A95E4 8FB9004C */ lw $t9, 0x4c($sp)
-/* B20788 800A95E8 8E981354 */ lw $t8, 0x1354($s4)
-/* B2078C 800A95EC 3C010001 */ lui $at, (0x0001CA2E >> 16) # lui $at, 1
-/* B20790 800A95F0 8F280000 */ lw $t0, ($t9)
-/* B20794 800A95F4 3421CA2E */ ori $at, (0x0001CA2E & 0xFFFF) # ori $at, $at, 0xca2e
-/* B20798 800A95F8 02B82021 */ addu $a0, $s5, $t8
-/* B2079C 800A95FC 01122821 */ addu $a1, $t0, $s2
-/* B207A0 800A9600 24A500CF */ addiu $a1, $a1, 0xcf
-/* B207A4 800A9604 00812021 */ addu $a0, $a0, $at
-/* B207A8 800A9608 0C01A508 */ jal MemCopy
-/* B207AC 800A960C 24060001 */ li $a2, 1
-/* B207B0 800A9610 8FAB004C */ lw $t3, 0x4c($sp)
-/* B207B4 800A9614 8E891354 */ lw $t1, 0x1354($s4)
-/* B207B8 800A9618 3C010001 */ lui $at, (0x0001CA32 >> 16) # lui $at, 1
-/* B207BC 800A961C 8D6C0000 */ lw $t4, ($t3)
-/* B207C0 800A9620 00095040 */ sll $t2, $t1, 1
-/* B207C4 800A9624 02AA2021 */ addu $a0, $s5, $t2
-/* B207C8 800A9628 3421CA32 */ ori $at, (0x0001CA32 & 0xFFFF) # ori $at, $at, 0xca32
-/* B207CC 800A962C 01922821 */ addu $a1, $t4, $s2
-/* B207D0 800A9630 24A50030 */ addiu $a1, $a1, 0x30
-/* B207D4 800A9634 00812021 */ addu $a0, $a0, $at
-/* B207D8 800A9638 0C01A508 */ jal MemCopy
-/* B207DC 800A963C 24060002 */ li $a2, 2
-/* B207E0 800A9640 8E911354 */ lw $s1, 0x1354($s4)
-/* B207E4 800A9644 3C048014 */ lui $a0, %hi(D_80140DF0) # $a0, 0x8014
-/* B207E8 800A9648 24840DF0 */ addiu $a0, %lo(D_80140DF0) # addiu $a0, $a0, 0xdf0
-/* B207EC 800A964C 00116840 */ sll $t5, $s1, 1
-/* B207F0 800A9650 02AD7021 */ addu $t6, $s5, $t5
-/* B207F4 800A9654 01D67821 */ addu $t7, $t6, $s6
-/* B207F8 800A9658 85E64A28 */ lh $a2, 0x4a28($t7)
-/* B207FC 800A965C 0C00084C */ jal osSyncPrintf
-/* B20800 800A9660 02202825 */ move $a1, $s1
-/* B20804 800A9664 8E911354 */ lw $s1, 0x1354($s4)
-/* B20808 800A9668 3C048014 */ lui $a0, %hi(D_80140E00) # $a0, 0x8014
-/* B2080C 800A966C 24840E00 */ addiu $a0, %lo(D_80140E00) # addiu $a0, $a0, 0xe00
-/* B20810 800A9670 02B1C021 */ addu $t8, $s5, $s1
-/* B20814 800A9674 0316C821 */ addu $t9, $t8, $s6
-/* B20818 800A9678 83264A2E */ lb $a2, 0x4a2e($t9)
-/* B2081C 800A967C 0C00084C */ jal osSyncPrintf
-/* B20820 800A9680 02202825 */ move $a1, $s1
-/* B20824 800A9684 8E911354 */ lw $s1, 0x1354($s4)
-/* B20828 800A9688 3C048014 */ lui $a0, %hi(D_80140E18) # $a0, 0x8014
-/* B2082C 800A968C 24840E18 */ addiu $a0, %lo(D_80140E18) # addiu $a0, $a0, 0xe18
-/* B20830 800A9690 00114040 */ sll $t0, $s1, 1
-/* B20834 800A9694 02A84821 */ addu $t1, $s5, $t0
-/* B20838 800A9698 01365021 */ addu $t2, $t1, $s6
-/* B2083C 800A969C 95464A32 */ lhu $a2, 0x4a32($t2)
-/* B20840 800A96A0 0C00084C */ jal osSyncPrintf
-/* B20844 800A96A4 02202825 */ move $a1, $s1
-/* B20848 800A96A8 8FBF0044 */ lw $ra, 0x44($sp)
-/* B2084C 800A96AC 8FB00028 */ lw $s0, 0x28($sp)
-/* B20850 800A96B0 8FB1002C */ lw $s1, 0x2c($sp)
-/* B20854 800A96B4 8FB20030 */ lw $s2, 0x30($sp)
-/* B20858 800A96B8 8FB30034 */ lw $s3, 0x34($sp)
-/* B2085C 800A96BC 8FB40038 */ lw $s4, 0x38($sp)
-/* B20860 800A96C0 8FB5003C */ lw $s5, 0x3c($sp)
-/* B20864 800A96C4 8FB60040 */ lw $s6, 0x40($sp)
-/* B20868 800A96C8 03E00008 */ jr $ra
-/* B2086C 800A96CC 27BD0048 */ addiu $sp, $sp, 0x48
-
diff --git a/asm/non_matchings/code/z_sram/func_800A96D0.s b/asm/non_matchings/code/z_sram/func_800A96D0.s
deleted file mode 100644
index 2a1eb49a2..000000000
--- a/asm/non_matchings/code/z_sram/func_800A96D0.s
+++ /dev/null
@@ -1,81 +0,0 @@
-.rdata
-glabel D_80140E2C
- .asciz "CLEAR終了\n"
- # EUC-JP: CLEAR終了 | Clear End
- .balign 4
-
-.text
-glabel func_800A96D0
-/* B20870 800A96D0 27BDFFD8 */ addiu $sp, $sp, -0x28
-/* B20874 800A96D4 AFBF001C */ sw $ra, 0x1c($sp)
-/* B20878 800A96D8 AFB00018 */ sw $s0, 0x18($sp)
-/* B2087C 800A96DC AFA40028 */ sw $a0, 0x28($sp)
-/* B20880 800A96E0 0C02A068 */ jal func_800A81A0
-/* B20884 800A96E4 AFA5002C */ sw $a1, 0x2c($sp)
-/* B20888 800A96E8 8FA20028 */ lw $v0, 0x28($sp)
-/* B2088C 800A96EC 3C010001 */ lui $at, (0x00018000 >> 16) # lui $at, 1
-/* B20890 800A96F0 34218000 */ ori $at, (0x00018000 & 0xFFFF) # ori $at, $at, 0x8000
-/* B20894 800A96F4 00411021 */ addu $v0, $v0, $at
-/* B20898 800A96F8 844E4A46 */ lh $t6, 0x4a46($v0)
-/* B2089C 800A96FC 8FB8002C */ lw $t8, 0x2c($sp)
-/* B208A0 800A9700 3C108013 */ lui $s0, %hi(D_8012A4E0)
-/* B208A4 800A9704 000E7840 */ sll $t7, $t6, 1
-/* B208A8 800A9708 020F8021 */ addu $s0, $s0, $t7
-/* B208AC 800A970C 9610A4E0 */ lhu $s0, %lo(D_8012A4E0)($s0)
-/* B208B0 800A9710 8F190000 */ lw $t9, ($t8)
-/* B208B4 800A9714 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B208B8 800A9718 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B208BC 800A971C AFA20020 */ sw $v0, 0x20($sp)
-/* B208C0 800A9720 24061354 */ li $a2, 4948
-/* B208C4 800A9724 0C01A508 */ jal MemCopy
-/* B208C8 800A9728 03302021 */ addu $a0, $t9, $s0
-/* B208CC 800A972C 3C010800 */ lui $at, 0x800
-/* B208D0 800A9730 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B208D4 800A9734 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B208D8 800A9738 02012021 */ addu $a0, $s0, $at
-/* B208DC 800A973C 24061450 */ li $a2, 5200
-/* B208E0 800A9740 0C02A7A8 */ jal Sram_ReadWrite
-/* B208E4 800A9744 24070001 */ li $a3, 1
-/* B208E8 800A9748 8FA90020 */ lw $t1, 0x20($sp)
-/* B208EC 800A974C 8FAC002C */ lw $t4, 0x2c($sp)
-/* B208F0 800A9750 8FA80028 */ lw $t0, 0x28($sp)
-/* B208F4 800A9754 852A4A46 */ lh $t2, 0x4a46($t1)
-/* B208F8 800A9758 8D8D0000 */ lw $t5, ($t4)
-/* B208FC 800A975C 3C010001 */ lui $at, (0x0001CA28 >> 16) # lui $at, 1
-/* B20900 800A9760 000A5840 */ sll $t3, $t2, 1
-/* B20904 800A9764 3421CA28 */ ori $at, (0x0001CA28 & 0xFFFF) # ori $at, $at, 0xca28
-/* B20908 800A9768 010B2021 */ addu $a0, $t0, $t3
-/* B2090C 800A976C 01B02821 */ addu $a1, $t5, $s0
-/* B20910 800A9770 24A5002C */ addiu $a1, $a1, 0x2c
-/* B20914 800A9774 00812021 */ addu $a0, $a0, $at
-/* B20918 800A9778 0C01A508 */ jal MemCopy
-/* B2091C 800A977C 24060002 */ li $a2, 2
-/* B20920 800A9780 8FAE0020 */ lw $t6, 0x20($sp)
-/* B20924 800A9784 8FB9002C */ lw $t9, 0x2c($sp)
-/* B20928 800A9788 3C108013 */ lui $s0, %hi(D_8012A4E6)
-/* B2092C 800A978C 85CF4A46 */ lh $t7, 0x4a46($t6)
-/* B20930 800A9790 8F290000 */ lw $t1, ($t9)
-/* B20934 800A9794 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B20938 800A9798 000FC040 */ sll $t8, $t7, 1
-/* B2093C 800A979C 02188021 */ addu $s0, $s0, $t8
-/* B20940 800A97A0 9610A4E6 */ lhu $s0, %lo(D_8012A4E6)($s0)
-/* B20944 800A97A4 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B20948 800A97A8 24061354 */ li $a2, 4948
-/* B2094C 800A97AC 0C01A508 */ jal MemCopy
-/* B20950 800A97B0 01302021 */ addu $a0, $t1, $s0
-/* B20954 800A97B4 3C010800 */ lui $at, 0x800
-/* B20958 800A97B8 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B2095C 800A97BC 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B20960 800A97C0 02012021 */ addu $a0, $s0, $at
-/* B20964 800A97C4 24061450 */ li $a2, 5200
-/* B20968 800A97C8 0C02A7A8 */ jal Sram_ReadWrite
-/* B2096C 800A97CC 24070001 */ li $a3, 1
-/* B20970 800A97D0 3C048014 */ lui $a0, %hi(D_80140E2C) # $a0, 0x8014
-/* B20974 800A97D4 0C00084C */ jal osSyncPrintf
-/* B20978 800A97D8 24840E2C */ addiu $a0, %lo(D_80140E2C) # addiu $a0, $a0, 0xe2c
-/* B2097C 800A97DC 8FBF001C */ lw $ra, 0x1c($sp)
-/* B20980 800A97E0 8FB00018 */ lw $s0, 0x18($sp)
-/* B20984 800A97E4 27BD0028 */ addiu $sp, $sp, 0x28
-/* B20988 800A97E8 03E00008 */ jr $ra
-/* B2098C 800A97EC 00000000 */ nop
-
diff --git a/asm/non_matchings/code/z_sram/func_800A97F0.s b/asm/non_matchings/code/z_sram/func_800A97F0.s
deleted file mode 100644
index 0f759c92c..000000000
--- a/asm/non_matchings/code/z_sram/func_800A97F0.s
+++ /dev/null
@@ -1,193 +0,0 @@
-.rdata
-glabel D_80140E3C
- .asciz "READ=%d(%x) COPY=%d(%x)\n"
- # EUC-JP: READ=%d(%x) COPY=%d
- .balign 4
-
-glabel D_80140E60
- .asciz "f_64dd[%d]=%d\n"
- .balign 4
-
-glabel D_80140E70
- .asciz "heart_status[%d]=%d\n"
- .balign 4
-
-glabel D_80140E88
- .asciz "COPY終了\n"
- # EUC-JP: COPY終了 | Copy end
- .balign 4
-
-.text
-glabel func_800A97F0
-/* B20990 800A97F0 27BDFFC8 */ addiu $sp, $sp, -0x38
-/* B20994 800A97F4 AFB3002C */ sw $s3, 0x2c($sp)
-/* B20998 800A97F8 3C010001 */ lui $at, (0x00018000 >> 16) # lui $at, 1
-/* B2099C 800A97FC 00809825 */ move $s3, $a0
-/* B209A0 800A9800 AFB20028 */ sw $s2, 0x28($sp)
-/* B209A4 800A9804 AFB10024 */ sw $s1, 0x24($sp)
-/* B209A8 800A9808 34218000 */ ori $at, (0x00018000 & 0xFFFF) # ori $at, $at, 0x8000
-/* B209AC 800A980C AFBF0034 */ sw $ra, 0x34($sp)
-/* B209B0 800A9810 AFB40030 */ sw $s4, 0x30($sp)
-/* B209B4 800A9814 AFB00020 */ sw $s0, 0x20($sp)
-/* B209B8 800A9818 02618821 */ addu $s1, $s3, $at
-/* B209BC 800A981C 86274A5E */ lh $a3, 0x4a5e($s1)
-/* B209C0 800A9820 00A09025 */ move $s2, $a1
-/* B209C4 800A9824 86254A46 */ lh $a1, 0x4a46($s1)
-/* B209C8 800A9828 3C148013 */ lui $s4, %hi(D_8012A4E0) # $s4, 0x8013
-/* B209CC 800A982C 2694A4E0 */ addiu $s4, %lo(D_8012A4E0) # addiu $s4, $s4, -0x5b20
-/* B209D0 800A9830 0007C040 */ sll $t8, $a3, 1
-/* B209D4 800A9834 0298C821 */ addu $t9, $s4, $t8
-/* B209D8 800A9838 00057040 */ sll $t6, $a1, 1
-/* B209DC 800A983C 97280000 */ lhu $t0, ($t9)
-/* B209E0 800A9840 028E7821 */ addu $t7, $s4, $t6
-/* B209E4 800A9844 95E60000 */ lhu $a2, ($t7)
-/* B209E8 800A9848 3C048014 */ lui $a0, %hi(D_80140E3C) # $a0, 0x8014
-/* B209EC 800A984C 24840E3C */ addiu $a0, %lo(D_80140E3C) # addiu $a0, $a0, 0xe3c
-/* B209F0 800A9850 0C00084C */ jal osSyncPrintf
-/* B209F4 800A9854 AFA80010 */ sw $t0, 0x10($sp)
-/* B209F8 800A9858 86294A46 */ lh $t1, 0x4a46($s1)
-/* B209FC 800A985C 8E4C0000 */ lw $t4, ($s2)
-/* B20A00 800A9860 3C048016 */ lui $a0, %hi(gSaveContext) # $a0, 0x8016
-/* B20A04 800A9864 00095040 */ sll $t2, $t1, 1
-/* B20A08 800A9868 028A5821 */ addu $t3, $s4, $t2
-/* B20A0C 800A986C 95700000 */ lhu $s0, ($t3)
-/* B20A10 800A9870 2484E660 */ addiu $a0, %lo(gSaveContext) # addiu $a0, $a0, -0x19a0
-/* B20A14 800A9874 24061354 */ li $a2, 4948
-/* B20A18 800A9878 0C01A508 */ jal MemCopy
-/* B20A1C 800A987C 01902821 */ addu $a1, $t4, $s0
-/* B20A20 800A9880 862D4A5E */ lh $t5, 0x4a5e($s1)
-/* B20A24 800A9884 8E580000 */ lw $t8, ($s2)
-/* B20A28 800A9888 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B20A2C 800A988C 000D7040 */ sll $t6, $t5, 1
-/* B20A30 800A9890 028E7821 */ addu $t7, $s4, $t6
-/* B20A34 800A9894 95F00000 */ lhu $s0, ($t7)
-/* B20A38 800A9898 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B20A3C 800A989C 24061354 */ li $a2, 4948
-/* B20A40 800A98A0 0C01A508 */ jal MemCopy
-/* B20A44 800A98A4 03102021 */ addu $a0, $t8, $s0
-/* B20A48 800A98A8 86394A5E */ lh $t9, 0x4a5e($s1)
-/* B20A4C 800A98AC 8E4A0000 */ lw $t2, ($s2)
-/* B20A50 800A98B0 3C058016 */ lui $a1, %hi(gSaveContext) # $a1, 0x8016
-/* B20A54 800A98B4 00194040 */ sll $t0, $t9, 1
-/* B20A58 800A98B8 02884821 */ addu $t1, $s4, $t0
-/* B20A5C 800A98BC 95300006 */ lhu $s0, 6($t1)
-/* B20A60 800A98C0 24A5E660 */ addiu $a1, %lo(gSaveContext) # addiu $a1, $a1, -0x19a0
-/* B20A64 800A98C4 24061354 */ li $a2, 4948
-/* B20A68 800A98C8 0C01A508 */ jal MemCopy
-/* B20A6C 800A98CC 01502021 */ addu $a0, $t2, $s0
-/* B20A70 800A98D0 3C040800 */ lui $a0, 0x800
-/* B20A74 800A98D4 8E450000 */ lw $a1, ($s2)
-/* B20A78 800A98D8 34068000 */ li $a2, 32768
-/* B20A7C 800A98DC 0C02A7A8 */ jal Sram_ReadWrite
-/* B20A80 800A98E0 24070001 */ li $a3, 1
-/* B20A84 800A98E4 86224A5E */ lh $v0, 0x4a5e($s1)
-/* B20A88 800A98E8 8E4C0000 */ lw $t4, ($s2)
-/* B20A8C 800A98EC 3C010001 */ lui $at, (0x0001C9F6 >> 16) # lui $at, 1
-/* B20A90 800A98F0 00021040 */ sll $v0, $v0, 1
-/* B20A94 800A98F4 02825821 */ addu $t3, $s4, $v0
-/* B20A98 800A98F8 95700000 */ lhu $s0, ($t3)
-/* B20A9C 800A98FC 02622021 */ addu $a0, $s3, $v0
-/* B20AA0 800A9900 3421C9F6 */ ori $at, (0x0001C9F6 & 0xFFFF) # ori $at, $at, 0xc9f6
-/* B20AA4 800A9904 01902821 */ addu $a1, $t4, $s0
-/* B20AA8 800A9908 24A50022 */ addiu $a1, $a1, 0x22
-/* B20AAC 800A990C 00812021 */ addu $a0, $a0, $at
-/* B20AB0 800A9910 0C01A508 */ jal MemCopy
-/* B20AB4 800A9914 24060002 */ li $a2, 2
-/* B20AB8 800A9918 862D4A5E */ lh $t5, 0x4a5e($s1)
-/* B20ABC 800A991C 8E4F0000 */ lw $t7, ($s2)
-/* B20AC0 800A9920 3C010001 */ lui $at, (0x0001C9FC >> 16) # lui $at, 1
-/* B20AC4 800A9924 000D70C0 */ sll $t6, $t5, 3
-/* B20AC8 800A9928 026E2021 */ addu $a0, $s3, $t6
-/* B20ACC 800A992C 3421C9FC */ ori $at, (0x0001C9FC & 0xFFFF) # ori $at, $at, 0xc9fc
-/* B20AD0 800A9930 01F02821 */ addu $a1, $t7, $s0
-/* B20AD4 800A9934 24A50024 */ addiu $a1, $a1, 0x24
-/* B20AD8 800A9938 00812021 */ addu $a0, $a0, $at
-/* B20ADC 800A993C 0C01A508 */ jal MemCopy
-/* B20AE0 800A9940 24060008 */ li $a2, 8
-/* B20AE4 800A9944 86384A5E */ lh $t8, 0x4a5e($s1)
-/* B20AE8 800A9948 8E480000 */ lw $t0, ($s2)
-/* B20AEC 800A994C 3C010001 */ lui $at, (0x0001CA14 >> 16) # lui $at, 1
-/* B20AF0 800A9950 0018C840 */ sll $t9, $t8, 1
-/* B20AF4 800A9954 02792021 */ addu $a0, $s3, $t9
-/* B20AF8 800A9958 3421CA14 */ ori $at, (0x0001CA14 & 0xFFFF) # ori $at, $at, 0xca14
-/* B20AFC 800A995C 01102821 */ addu $a1, $t0, $s0
-/* B20B00 800A9960 24A5002E */ addiu $a1, $a1, 0x2e
-/* B20B04 800A9964 00812021 */ addu $a0, $a0, $at
-/* B20B08 800A9968 0C01A508 */ jal MemCopy
-/* B20B0C 800A996C 24060002 */ li $a2, 2
-/* B20B10 800A9970 86294A5E */ lh $t1, 0x4a5e($s1)
-/* B20B14 800A9974 8E4B0000 */ lw $t3, ($s2)
-/* B20B18 800A9978 3C010001 */ lui $at, (0x0001CA1C >> 16) # lui $at, 1
-/* B20B1C 800A997C 00095080 */ sll $t2, $t1, 2
-/* B20B20 800A9980 026A2021 */ addu $a0, $s3, $t2
-/* B20B24 800A9984 3421CA1C */ ori $at, (0x0001CA1C & 0xFFFF) # ori $at, $at, 0xca1c
-/* B20B28 800A9988 01702821 */ addu $a1, $t3, $s0
-/* B20B2C 800A998C 24A500A4 */ addiu $a1, $a1, 0xa4
-/* B20B30 800A9990 00812021 */ addu $a0, $a0, $at
-/* B20B34 800A9994 0C01A508 */ jal MemCopy
-/* B20B38 800A9998 24060004 */ li $a2, 4
-/* B20B3C 800A999C 862C4A5E */ lh $t4, 0x4a5e($s1)
-/* B20B40 800A99A0 8E4E0000 */ lw $t6, ($s2)
-/* B20B44 800A99A4 3C010001 */ lui $at, (0x0001CA28 >> 16) # lui $at, 1
-/* B20B48 800A99A8 000C6840 */ sll $t5, $t4, 1
-/* B20B4C 800A99AC 026D2021 */ addu $a0, $s3, $t5
-/* B20B50 800A99B0 3421CA28 */ ori $at, (0x0001CA28 & 0xFFFF) # ori $at, $at, 0xca28
-/* B20B54 800A99B4 01D02821 */ addu $a1, $t6, $s0
-/* B20B58 800A99B8 24A5002C */ addiu $a1, $a1, 0x2c
-/* B20B5C 800A99BC 00812021 */ addu $a0, $a0, $at
-/* B20B60 800A99C0 0C01A508 */ jal MemCopy
-/* B20B64 800A99C4 24060002 */ li $a2, 2
-/* B20B68 800A99C8 862F4A5E */ lh $t7, 0x4a5e($s1)
-/* B20B6C 800A99CC 8E580000 */ lw $t8, ($s2)
-/* B20B70 800A99D0 3C010001 */ lui $at, (0x0001CA2E >> 16) # lui $at, 1
-/* B20B74 800A99D4 3421CA2E */ ori $at, (0x0001CA2E & 0xFFFF) # ori $at, $at, 0xca2e
-/* B20B78 800A99D8 026F2021 */ addu $a0, $s3, $t7
-/* B20B7C 800A99DC 03102821 */ addu $a1, $t8, $s0
-/* B20B80 800A99E0 24A500CF */ addiu $a1, $a1, 0xcf
-/* B20B84 800A99E4 00812021 */ addu $a0, $a0, $at
-/* B20B88 800A99E8 0C01A508 */ jal MemCopy
-/* B20B8C 800A99EC 24060001 */ li $a2, 1
-/* B20B90 800A99F0 86394A5E */ lh $t9, 0x4a5e($s1)
-/* B20B94 800A99F4 8E490000 */ lw $t1, ($s2)
-/* B20B98 800A99F8 3C010001 */ lui $at, (0x0001CA32 >> 16) # lui $at, 1
-/* B20B9C 800A99FC 00194040 */ sll $t0, $t9, 1
-/* B20BA0 800A9A00 02682021 */ addu $a0, $s3, $t0
-/* B20BA4 800A9A04 3421CA32 */ ori $at, (0x0001CA32 & 0xFFFF) # ori $at, $at, 0xca32
-/* B20BA8 800A9A08 01302821 */ addu $a1, $t1, $s0
-/* B20BAC 800A9A0C 24A50030 */ addiu $a1, $a1, 0x30
-/* B20BB0 800A9A10 00812021 */ addu $a0, $a0, $at
-/* B20BB4 800A9A14 0C01A508 */ jal MemCopy
-/* B20BB8 800A9A18 24060002 */ li $a2, 2
-/* B20BBC 800A9A1C 3C108016 */ lui $s0, %hi(gSaveContext+0x1354) # $s0, 0x8016
-/* B20BC0 800A9A20 8E10F9B4 */ lw $s0, %lo(gSaveContext+0x1354)($s0)
-/* B20BC4 800A9A24 3C060002 */ lui $a2, 2
-/* B20BC8 800A9A28 3C048014 */ lui $a0, %hi(D_80140E60) # $a0, 0x8014
-/* B20BCC 800A9A2C 00105040 */ sll $t2, $s0, 1
-/* B20BD0 800A9A30 026A5821 */ addu $t3, $s3, $t2
-/* B20BD4 800A9A34 00CB3021 */ addu $a2, $a2, $t3
-/* B20BD8 800A9A38 84C6CA28 */ lh $a2, -0x35d8($a2)
-/* B20BDC 800A9A3C 24840E60 */ addiu $a0, %lo(D_80140E60) # addiu $a0, $a0, 0xe60
-/* B20BE0 800A9A40 0C00084C */ jal osSyncPrintf
-/* B20BE4 800A9A44 02002825 */ move $a1, $s0
-/* B20BE8 800A9A48 3C108016 */ lui $s0, %hi(gSaveContext+0x1354) # $s0, 0x8016
-/* B20BEC 800A9A4C 8E10F9B4 */ lw $s0, %lo(gSaveContext+0x1354)($s0)
-/* B20BF0 800A9A50 3C060002 */ lui $a2, 2
-/* B20BF4 800A9A54 3C048014 */ lui $a0, %hi(D_80140E70) # $a0, 0x8014
-/* B20BF8 800A9A58 02706021 */ addu $t4, $s3, $s0
-/* B20BFC 800A9A5C 00CC3021 */ addu $a2, $a2, $t4
-/* B20C00 800A9A60 80C6CA2E */ lb $a2, -0x35d2($a2)
-/* B20C04 800A9A64 24840E70 */ addiu $a0, %lo(D_80140E70) # addiu $a0, $a0, 0xe70
-/* B20C08 800A9A68 0C00084C */ jal osSyncPrintf
-/* B20C0C 800A9A6C 02002825 */ move $a1, $s0
-/* B20C10 800A9A70 3C048014 */ lui $a0, %hi(D_80140E88) # $a0, 0x8014
-/* B20C14 800A9A74 0C00084C */ jal osSyncPrintf
-/* B20C18 800A9A78 24840E88 */ addiu $a0, %lo(D_80140E88) # addiu $a0, $a0, 0xe88
-/* B20C1C 800A9A7C 8FBF0034 */ lw $ra, 0x34($sp)
-/* B20C20 800A9A80 8FB00020 */ lw $s0, 0x20($sp)
-/* B20C24 800A9A84 8FB10024 */ lw $s1, 0x24($sp)
-/* B20C28 800A9A88 8FB20028 */ lw $s2, 0x28($sp)
-/* B20C2C 800A9A8C 8FB3002C */ lw $s3, 0x2c($sp)
-/* B20C30 800A9A90 8FB40030 */ lw $s4, 0x30($sp)
-/* B20C34 800A9A94 03E00008 */ jr $ra
-/* B20C38 800A9A98 27BD0038 */ addiu $sp, $sp, 0x38
-
diff --git a/asm/non_matchings/code/z_sram/func_800A9A9C.s b/asm/non_matchings/code/z_sram/func_800A9A9C.s
deleted file mode 100644
index e555be677..000000000
--- a/asm/non_matchings/code/z_sram/func_800A9A9C.s
+++ /dev/null
@@ -1,15 +0,0 @@
-glabel func_800A9A9C
-/* B20C3C 800A9A9C 27BDFFE8 */ addiu $sp, $sp, -0x18
-/* B20C40 800A9AA0 AFA40018 */ sw $a0, 0x18($sp)
-/* B20C44 800A9AA4 8FAE0018 */ lw $t6, 0x18($sp)
-/* B20C48 800A9AA8 AFBF0014 */ sw $ra, 0x14($sp)
-/* B20C4C 800A9AAC 3C040800 */ lui $a0, 0x800
-/* B20C50 800A9AB0 24060010 */ li $a2, 16
-/* B20C54 800A9AB4 24070001 */ li $a3, 1
-/* B20C58 800A9AB8 0C02A7A8 */ jal Sram_ReadWrite
-/* B20C5C 800A9ABC 8DC50000 */ lw $a1, ($t6)
-/* B20C60 800A9AC0 8FBF0014 */ lw $ra, 0x14($sp)
-/* B20C64 800A9AC4 27BD0018 */ addiu $sp, $sp, 0x18
-/* B20C68 800A9AC8 03E00008 */ jr $ra
-/* B20C6C 800A9ACC 00000000 */ nop
-
diff --git a/asm/non_matchings/code/z_sram/func_800A9AD0.s b/asm/non_matchings/code/z_sram/func_800A9AD0.s
deleted file mode 100644
index 376a42dc7..000000000
--- a/asm/non_matchings/code/z_sram/func_800A9AD0.s
+++ /dev/null
@@ -1,177 +0,0 @@
-.rdata
-glabel D_80140E98
- .asciz "sram_initialize( Game *game, Sram *sram )\n"
- .balign 4
-
-glabel D_80140EC4
- .asciz "SRAM破壊!!!!!!\n"
- # EUC-JP: SRAM破壊!!!!!! | SRAM destruction! ! ! ! ! !
- .balign 4
-
-glabel D_80140EE0
- .asciz "SRAM破壊!!!!!!\n"
- # EUC-JP: SRAM破壊!!!!!! | SRAM destruction! ! ! ! ! !
- .balign 4
-
-glabel D_80140EFC
- .asciz "GOOD!GOOD! サイズ=%d + %d = %d\n"
- # EUC-JP: GOOD!GOOD! サイズ=%d + %d = %d | GOOD! GOOD! Size =% d +% d =% d
- .balign 4
-
-glabel D_80140F28
- .asciz "\x1b[34m"
- .balign 4
-
-glabel D_80140F30
- .asciz "Na_SetSoundOutputMode = %d\n"
- .balign 4
-
-glabel D_80140F4C
- .asciz "Na_SetSoundOutputMode = %d\n"
- .balign 4
-
-glabel D_80140F68
- .asciz "Na_SetSoundOutputMode = %d\n"
- .balign 4
-
-glabel D_80140F84
- .asciz "\x1b[m"
- .balign 4
-
-.text
-glabel func_800A9AD0
-/* B20C70 800A9AD0 27BDFFD0 */ addiu $sp, $sp, -0x30
-/* B20C74 800A9AD4 AFA40030 */ sw $a0, 0x30($sp)
-/* B20C78 800A9AD8 AFBF002C */ sw $ra, 0x2c($sp)
-/* B20C7C 800A9ADC AFB1001C */ sw $s1, 0x1c($sp)
-/* B20C80 800A9AE0 3C048014 */ lui $a0, %hi(D_80140E98) # $a0, 0x8014
-/* B20C84 800A9AE4 00A08825 */ move $s1, $a1
-/* B20C88 800A9AE8 AFB40028 */ sw $s4, 0x28($sp)
-/* B20C8C 800A9AEC AFB30024 */ sw $s3, 0x24($sp)
-/* B20C90 800A9AF0 AFB20020 */ sw $s2, 0x20($sp)
-/* B20C94 800A9AF4 AFB00018 */ sw $s0, 0x18($sp)
-/* B20C98 800A9AF8 0C00084C */ jal osSyncPrintf
-/* B20C9C 800A9AFC 24840E98 */ addiu $a0, %lo(D_80140E98) # addiu $a0, $a0, 0xe98
-/* B20CA0 800A9B00 3C040800 */ lui $a0, 0x800
-/* B20CA4 800A9B04 8E250000 */ lw $a1, ($s1)
-/* B20CA8 800A9B08 34068000 */ li $a2, 32768
-/* B20CAC 800A9B0C 0C02A7A8 */ jal Sram_ReadWrite
-/* B20CB0 800A9B10 00003825 */ move $a3, $zero
-/* B20CB4 800A9B14 3C148014 */ lui $s4, %hi(D_80140EC4) # $s4, 0x8014
-/* B20CB8 800A9B18 3C138016 */ lui $s3, %hi(gSaveContext) # $s3, 0x8016
-/* B20CBC 800A9B1C 3C128013 */ lui $s2, %hi(D_8012A4EC) # $s2, 0x8013
-/* B20CC0 800A9B20 2652A4EC */ addiu $s2, %lo(D_8012A4EC) # addiu $s2, $s2, -0x5b14
-/* B20CC4 800A9B24 2673E660 */ addiu $s3, %lo(gSaveContext) # addiu $s3, $s3, -0x19a0
-/* B20CC8 800A9B28 26940EC4 */ addiu $s4, %lo(D_80140EC4) # addiu $s4, $s4, 0xec4
-/* B20CCC 800A9B2C 00008025 */ move $s0, $zero
-/* B20CD0 800A9B30 8E230000 */ lw $v1, ($s1)
-/* B20CD4 800A9B34 00001025 */ move $v0, $zero
-.L800A9B38:
-/* B20CD8 800A9B38 02427021 */ addu $t6, $s2, $v0
-/* B20CDC 800A9B3C 0062C021 */ addu $t8, $v1, $v0
-/* B20CE0 800A9B40 93190003 */ lbu $t9, 3($t8)
-/* B20CE4 800A9B44 91CF0003 */ lbu $t7, 3($t6)
-/* B20CE8 800A9B48 51F90011 */ beql $t7, $t9, .L800A9B90
-/* B20CEC 800A9B4C 26100001 */ addiu $s0, $s0, 1
-/* B20CF0 800A9B50 0C00084C */ jal osSyncPrintf
-/* B20CF4 800A9B54 02802025 */ move $a0, $s4
-/* B20CF8 800A9B58 8E280000 */ lw $t0, ($s1)
-/* B20CFC 800A9B5C 02402825 */ move $a1, $s2
-/* B20D00 800A9B60 2406000C */ li $a2, 12
-/* B20D04 800A9B64 91090002 */ lbu $t1, 2($t0)
-/* B20D08 800A9B68 A2691409 */ sb $t1, 0x1409($s3)
-/* B20D0C 800A9B6C 0C01A508 */ jal MemCopy
-/* B20D10 800A9B70 8E240000 */ lw $a0, ($s1)
-/* B20D14 800A9B74 926A1409 */ lbu $t2, 0x1409($s3)
-/* B20D18 800A9B78 8E2B0000 */ lw $t3, ($s1)
-/* B20D1C 800A9B7C 02202025 */ move $a0, $s1
-/* B20D20 800A9B80 0C02A6A7 */ jal func_800A9A9C
-/* B20D24 800A9B84 A16A0002 */ sb $t2, 2($t3)
-/* B20D28 800A9B88 8E230000 */ lw $v1, ($s1)
-/* B20D2C 800A9B8C 26100001 */ addiu $s0, $s0, 1
-.L800A9B90:
-/* B20D30 800A9B90 3210FFFF */ andi $s0, $s0, 0xffff
-/* B20D34 800A9B94 2E010009 */ sltiu $at, $s0, 9
-/* B20D38 800A9B98 1420FFE7 */ bnez $at, .L800A9B38
-/* B20D3C 800A9B9C 02001025 */ move $v0, $s0
-/* B20D40 800A9BA0 906C0000 */ lbu $t4, ($v1)
-/* B20D44 800A9BA4 318D0003 */ andi $t5, $t4, 3
-/* B20D48 800A9BA8 A26D140A */ sb $t5, 0x140a($s3)
-/* B20D4C 800A9BAC 8E2E0000 */ lw $t6, ($s1)
-/* B20D50 800A9BB0 91D80001 */ lbu $t8, 1($t6)
-/* B20D54 800A9BB4 330F0001 */ andi $t7, $t8, 1
-/* B20D58 800A9BB8 A26F140C */ sb $t7, 0x140c($s3)
-/* B20D5C 800A9BBC 8E390000 */ lw $t9, ($s1)
-/* B20D60 800A9BC0 93280002 */ lbu $t0, 2($t9)
-/* B20D64 800A9BC4 310900FF */ andi $t1, $t0, 0xff
-/* B20D68 800A9BC8 29210003 */ slti $at, $t1, 3
-/* B20D6C 800A9BCC 14200006 */ bnez $at, .L800A9BE8
-/* B20D70 800A9BD0 A2681409 */ sb $t0, 0x1409($s3)
-/* B20D74 800A9BD4 A2601409 */ sb $zero, 0x1409($s3)
-/* B20D78 800A9BD8 8E2B0000 */ lw $t3, ($s1)
-/* B20D7C 800A9BDC 02202025 */ move $a0, $s1
-/* B20D80 800A9BE0 0C02A6A7 */ jal func_800A9A9C
-/* B20D84 800A9BE4 A1600002 */ sb $zero, 2($t3)
-.L800A9BE8:
-/* B20D88 800A9BE8 8FAC0030 */ lw $t4, 0x30($sp)
-/* B20D8C 800A9BEC 34058000 */ li $a1, 32768
-/* B20D90 800A9BF0 958D0044 */ lhu $t5, 0x44($t4)
-/* B20D94 800A9BF4 31AE0100 */ andi $t6, $t5, 0x100
-/* B20D98 800A9BF8 11C00014 */ beqz $t6, .L800A9C4C
-/* B20D9C 800A9BFC 00000000 */ nop
-/* B20DA0 800A9C00 0C001114 */ jal bzero
-/* B20DA4 800A9C04 8E240000 */ lw $a0, ($s1)
-/* B20DA8 800A9C08 00008025 */ move $s0, $zero
-/* B20DAC 800A9C0C 8E380000 */ lw $t8, ($s1)
-.L800A9C10:
-/* B20DB0 800A9C10 03107821 */ addu $t7, $t8, $s0
-/* B20DB4 800A9C14 A1F00000 */ sb $s0, ($t7)
-/* B20DB8 800A9C18 26100001 */ addiu $s0, $s0, 1
-/* B20DBC 800A9C1C 3210FFFF */ andi $s0, $s0, 0xffff
-/* B20DC0 800A9C20 2E0109AA */ sltiu $at, $s0, 0x9aa
-/* B20DC4 800A9C24 5420FFFA */ bnezl $at, .L800A9C10
-/* B20DC8 800A9C28 8E380000 */ lw $t8, ($s1)
-/* B20DCC 800A9C2C 3C040800 */ lui $a0, 0x800
-/* B20DD0 800A9C30 8E250000 */ lw $a1, ($s1)
-/* B20DD4 800A9C34 34068000 */ li $a2, 32768
-/* B20DD8 800A9C38 0C02A7A8 */ jal Sram_ReadWrite
-/* B20DDC 800A9C3C 24070001 */ li $a3, 1
-/* B20DE0 800A9C40 3C048014 */ lui $a0, %hi(D_80140EE0) # $a0, 0x8014
-/* B20DE4 800A9C44 0C00084C */ jal osSyncPrintf
-/* B20DE8 800A9C48 24840EE0 */ addiu $a0, %lo(D_80140EE0) # addiu $a0, $a0, 0xee0
-.L800A9C4C:
-/* B20DEC 800A9C4C 3C048014 */ lui $a0, %hi(D_80140EFC) # $a0, 0x8014
-/* B20DF0 800A9C50 24840EFC */ addiu $a0, %lo(D_80140EFC) # addiu $a0, $a0, 0xefc
-/* B20DF4 800A9C54 24051338 */ li $a1, 4920
-/* B20DF8 800A9C58 24060004 */ li $a2, 4
-/* B20DFC 800A9C5C 0C00084C */ jal osSyncPrintf
-/* B20E00 800A9C60 2407133C */ li $a3, 4924
-/* B20E04 800A9C64 3C048014 */ lui $a0, %hi(D_80140F28) # $a0, 0x8014
-/* B20E08 800A9C68 0C00084C */ jal osSyncPrintf
-/* B20E0C 800A9C6C 24840F28 */ addiu $a0, %lo(D_80140F28) # addiu $a0, $a0, 0xf28
-/* B20E10 800A9C70 3C048014 */ lui $a0, %hi(D_80140F30) # $a0, 0x8014
-/* B20E14 800A9C74 24840F30 */ addiu $a0, %lo(D_80140F30) # addiu $a0, $a0, 0xf30
-/* B20E18 800A9C78 0C00084C */ jal osSyncPrintf
-/* B20E1C 800A9C7C 9265140A */ lbu $a1, 0x140a($s3)
-/* B20E20 800A9C80 3C048014 */ lui $a0, %hi(D_80140F4C) # $a0, 0x8014
-/* B20E24 800A9C84 24840F4C */ addiu $a0, %lo(D_80140F4C) # addiu $a0, $a0, 0xf4c
-/* B20E28 800A9C88 0C00084C */ jal osSyncPrintf
-/* B20E2C 800A9C8C 9265140A */ lbu $a1, 0x140a($s3)
-/* B20E30 800A9C90 3C048014 */ lui $a0, %hi(D_80140F68) # $a0, 0x8014
-/* B20E34 800A9C94 24840F68 */ addiu $a0, %lo(D_80140F68) # addiu $a0, $a0, 0xf68
-/* B20E38 800A9C98 0C00084C */ jal osSyncPrintf
-/* B20E3C 800A9C9C 9265140A */ lbu $a1, 0x140a($s3)
-/* B20E40 800A9CA0 3C048014 */ lui $a0, %hi(D_80140F84) # $a0, 0x8014
-/* B20E44 800A9CA4 0C00084C */ jal osSyncPrintf
-/* B20E48 800A9CA8 24840F84 */ addiu $a0, %lo(D_80140F84) # addiu $a0, $a0, 0xf84
-/* B20E4C 800A9CAC 0C03D9C0 */ jal func_800F6700
-/* B20E50 800A9CB0 8264140A */ lb $a0, 0x140a($s3)
-/* B20E54 800A9CB4 8FBF002C */ lw $ra, 0x2c($sp)
-/* B20E58 800A9CB8 8FB00018 */ lw $s0, 0x18($sp)
-/* B20E5C 800A9CBC 8FB1001C */ lw $s1, 0x1c($sp)
-/* B20E60 800A9CC0 8FB20020 */ lw $s2, 0x20($sp)
-/* B20E64 800A9CC4 8FB30024 */ lw $s3, 0x24($sp)
-/* B20E68 800A9CC8 8FB40028 */ lw $s4, 0x28($sp)
-/* B20E6C 800A9CCC 03E00008 */ jr $ra
-/* B20E70 800A9CD0 27BD0030 */ addiu $sp, $sp, 0x30
-
diff --git a/asm/non_matchings/code/z_sram/func_800A9CD4.s b/asm/non_matchings/code/z_sram/func_800A9CD4.s
deleted file mode 100644
index 62a8d501d..000000000
--- a/asm/non_matchings/code/z_sram/func_800A9CD4.s
+++ /dev/null
@@ -1,38 +0,0 @@
-.rdata
-glabel D_80140F88
- .asciz "../z_sram.c"
- .balign 4
-
-glabel D_80140F94
- .asciz "sram->read_buff != NULL"
- .balign 4
-
-glabel D_80140FAC
- .asciz "../z_sram.c"
- .balign 4
-
-.text
-glabel func_800A9CD4
-/* B20E74 800A9CD4 27BDFFE8 */ addiu $sp, $sp, -0x18
-/* B20E78 800A9CD8 AFBF0014 */ sw $ra, 0x14($sp)
-/* B20E7C 800A9CDC AFA5001C */ sw $a1, 0x1c($sp)
-/* B20E80 800A9CE0 3C068014 */ lui $a2, %hi(D_80140F88) # $a2, 0x8014
-/* B20E84 800A9CE4 24C60F88 */ addiu $a2, %lo(D_80140F88) # addiu $a2, $a2, 0xf88
-/* B20E88 800A9CE8 34058000 */ li $a1, 32768
-/* B20E8C 800A9CEC 0C031521 */ jal GameState_Alloc
-/* B20E90 800A9CF0 2407050E */ li $a3, 1294
-/* B20E94 800A9CF4 8FAE001C */ lw $t6, 0x1c($sp)
-/* B20E98 800A9CF8 3C048014 */ lui $a0, %hi(D_80140F94) # $a0, 0x8014
-/* B20E9C 800A9CFC 14400006 */ bnez $v0, .L800A9D18
-/* B20EA0 800A9D00 ADC20000 */ sw $v0, ($t6)
-/* B20EA4 800A9D04 3C058014 */ lui $a1, %hi(D_80140FAC) # $a1, 0x8014
-/* B20EA8 800A9D08 24A50FAC */ addiu $a1, %lo(D_80140FAC) # addiu $a1, $a1, 0xfac
-/* B20EAC 800A9D0C 24840F94 */ addiu $a0, %lo(D_80140F94) # addiu $a0, $a0, 0xf94
-/* B20EB0 800A9D10 0C0007FC */ jal __assert
-/* B20EB4 800A9D14 2406050F */ li $a2, 1295
-.L800A9D18:
-/* B20EB8 800A9D18 8FBF0014 */ lw $ra, 0x14($sp)
-/* B20EBC 800A9D1C 27BD0018 */ addiu $sp, $sp, 0x18
-/* B20EC0 800A9D20 03E00008 */ jr $ra
-/* B20EC4 800A9D24 00000000 */ nop
-
diff --git a/asm/non_matchings/code/z_sram/func_800A9D28.s b/asm/non_matchings/code/z_sram/func_800A9D28.s
deleted file mode 100644
index 81710cf63..000000000
--- a/asm/non_matchings/code/z_sram/func_800A9D28.s
+++ /dev/null
@@ -1,4 +0,0 @@
-glabel func_800A9D28
-/* B20EC8 800A9D28 AFA40000 */ sw $a0, ($sp)
-/* B20ECC 800A9D2C 03E00008 */ jr $ra
-/* B20ED0 800A9D30 AFA50004 */ sw $a1, 4($sp)
diff --git a/asm/non_matchings/overlays/actors/ovl_kaleido_scope/KaleidoScope_Update.s b/asm/non_matchings/overlays/actors/ovl_kaleido_scope/KaleidoScope_Update.s
index a5a054ea5..68a4744b0 100644
--- a/asm/non_matchings/overlays/actors/ovl_kaleido_scope/KaleidoScope_Update.s
+++ b/asm/non_matchings/overlays/actors/ovl_kaleido_scope/KaleidoScope_Update.s
@@ -1881,7 +1881,7 @@ glabel L80828198
/* 14A40 80828260 3C098016 */ lui $t1, %hi(gSaveContext)
/* 14A44 80828264 2529E660 */ addiu $t1, %lo(gSaveContext)
/* 14A48 80828268 26241F74 */ addiu $a0, $s1, 0x1F74 ## $a0 = 00001F74
-/* 14A4C 8082826C 0C02A235 */ jal func_800A88D4
+/* 14A4C 8082826C 0C02A235 */ jal Sram_WriteSave
/* 14A50 80828270 A52E0066 */ sh $t6, 0x0066($t1) ## 8015E6C6
/* 14A54 80828274 240F0004 */ addiu $t7, $zero, 0x0004 ## $t7 = 00000004
/* 14A58 80828278 A60F01EC */ sh $t7, 0x01EC($s0) ## 000001EC
@@ -2950,7 +2950,7 @@ glabel L808290DC
/* 1596C 8082918C 3C098016 */ lui $t1, %hi(gSaveContext)
/* 15970 80829190 2529E660 */ addiu $t1, %lo(gSaveContext)
/* 15974 80829194 26241F74 */ addiu $a0, $s1, 0x1F74 ## $a0 = 8082CB0C
-/* 15978 80829198 0C02A235 */ jal func_800A88D4
+/* 15978 80829198 0C02A235 */ jal Sram_WriteSave
/* 1597C 8082919C A5390066 */ sh $t9, 0x0066($t1) ## 8015E6C6
/* 15980 808291A0 240E000F */ addiu $t6, $zero, 0x000F ## $t6 = 0000000F
/* 15984 808291A4 A60E01D4 */ sh $t6, 0x01D4($s0) ## 000001D4
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80803ED8.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80803ED8.s
index 8c67c265c..741b035c2 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80803ED8.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80803ED8.s
@@ -56,9 +56,9 @@ glabel func_80803ED8
.L80803FA4:
/* 00264 80803FA4 11A00044 */ beq $t5, $zero, .L808040B8
/* 00268 80803FA8 00037040 */ sll $t6, $v1, 1
-/* 0026C 80803FAC 3C0F8013 */ lui $t7, %hi(D_8012A4E0)
+/* 0026C 80803FAC 3C0F8013 */ lui $t7, %hi(gSramSlotOffsets)
/* 00270 80803FB0 01EE7821 */ addu $t7, $t7, $t6
-/* 00274 80803FB4 95EFA4E0 */ lhu $t7, %lo(D_8012A4E0)($t7)
+/* 00274 80803FB4 95EFA4E0 */ lhu $t7, %lo(gSramSlotOffsets)($t7)
/* 00278 80803FB8 8E1801E0 */ lw $t8, 0x01E0($s0) ## 000001E0
/* 0027C 80803FBC 2404005A */ addiu $a0, $zero, 0x005A ## $a0 = 0000005A
/* 00280 80803FC0 3C078013 */ lui $a3, %hi(D_801333E0)
@@ -185,9 +185,9 @@ glabel func_80803ED8
.L80804180:
/* 00440 80804180 1123002C */ beq $t1, $v1, .L80804234
/* 00444 80804184 00035040 */ sll $t2, $v1, 1
-/* 00448 80804188 3C0B8013 */ lui $t3, %hi(D_8012A4E0)
+/* 00448 80804188 3C0B8013 */ lui $t3, %hi(gSramSlotOffsets)
/* 0044C 8080418C 016A5821 */ addu $t3, $t3, $t2
-/* 00450 80804190 956BA4E0 */ lhu $t3, %lo(D_8012A4E0)($t3)
+/* 00450 80804190 956BA4E0 */ lhu $t3, %lo(gSramSlotOffsets)($t3)
/* 00454 80804194 8E0C01E0 */ lw $t4, 0x01E0($s0) ## 000001E0
/* 00458 80804198 2404005A */ addiu $a0, $zero, 0x005A ## $a0 = 0000005A
/* 0045C 8080419C 016C1021 */ addu $v0, $t3, $t4
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808044A0.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808044A0.s
index 832318c89..2b42ca9af 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808044A0.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808044A0.s
@@ -53,9 +53,9 @@ glabel func_808044A0
.L80804560:
/* 00820 80804560 11800044 */ beq $t4, $zero, .L80804674
/* 00824 80804564 00036840 */ sll $t5, $v1, 1
-/* 00828 80804568 3C0E8013 */ lui $t6, %hi(D_8012A4E0)
+/* 00828 80804568 3C0E8013 */ lui $t6, %hi(gSramSlotOffsets)
/* 0082C 8080456C 01CD7021 */ addu $t6, $t6, $t5
-/* 00830 80804570 95CEA4E0 */ lhu $t6, %lo(D_8012A4E0)($t6)
+/* 00830 80804570 95CEA4E0 */ lhu $t6, %lo(gSramSlotOffsets)($t6)
/* 00834 80804574 8E0F01E0 */ lw $t7, 0x01E0($s0) ## 000001E0
/* 00838 80804578 2404005A */ addiu $a0, $zero, 0x005A ## $a0 = 0000005A
/* 0083C 8080457C 3C078013 */ lui $a3, %hi(D_801333E0)
@@ -202,9 +202,9 @@ glabel func_808044A0
.L8080478C:
/* 00A4C 8080478C 1123002D */ beq $t1, $v1, .L80804844
/* 00A50 80804790 00036040 */ sll $t4, $v1, 1
-/* 00A54 80804794 3C0D8013 */ lui $t5, %hi(D_8012A4E0)
+/* 00A54 80804794 3C0D8013 */ lui $t5, %hi(gSramSlotOffsets)
/* 00A58 80804798 01AC6821 */ addu $t5, $t5, $t4
-/* 00A5C 8080479C 95ADA4E0 */ lhu $t5, %lo(D_8012A4E0)($t5)
+/* 00A5C 8080479C 95ADA4E0 */ lhu $t5, %lo(gSramSlotOffsets)($t5)
/* 00A60 808047A0 8E0E01E0 */ lw $t6, 0x01E0($s0) ## 000001E0
/* 00A64 808047A4 2404005A */ addiu $a0, $zero, 0x005A ## $a0 = 0000005A
/* 00A68 808047A8 01AE1021 */ addu $v0, $t5, $t6
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804A50.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804A50.s
index 1b1237774..82cef2e20 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804A50.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804A50.s
@@ -11,12 +11,12 @@ glabel func_80804A50
/* 00D34 80804A74 844E4A6E */ lh $t6, 0x4A6E($v0) ## 00004A6E
/* 00D38 80804A78 84584A70 */ lh $t8, 0x4A70($v0) ## 00004A70
/* 00D3C 80804A7C 3C148081 */ lui $s4, %hi(D_808124A4) ## $s4 = 80810000
-/* 00D40 80804A80 3C0D8013 */ lui $t5, %hi(D_8012A4E0)
+/* 00D40 80804A80 3C0D8013 */ lui $t5, %hi(gSramSlotOffsets)
/* 00D44 80804A84 25CFFFE1 */ addiu $t7, $t6, 0xFFE1 ## $t7 = FFFFFFE1
/* 00D48 80804A88 2719001F */ addiu $t9, $t8, 0x001F ## $t9 = 0000001F
/* 00D4C 80804A8C A44F4A6E */ sh $t7, 0x4A6E($v0) ## 00004A6E
/* 00D50 80804A90 A4594A70 */ sh $t9, 0x4A70($v0) ## 00004A70
-/* 00D54 80804A94 25ADA4E0 */ addiu $t5, %lo(D_8012A4E0)
+/* 00D54 80804A94 25ADA4E0 */ addiu $t5, %lo(gSramSlotOffsets)
/* 00D58 80804A98 269424A4 */ addiu $s4, $s4, %lo(D_808124A4) ## $s4 = 808124A4
/* 00D5C 80804A9C 24100045 */ addiu $s0, $zero, 0x0045 ## $s0 = 00000045
/* 00D60 80804AA0 2411004C */ addiu $s1, $zero, 0x004C ## $s1 = 0000004C
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804CD0.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804CD0.s
index 6d672ba36..31e6fcbf5 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804CD0.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804CD0.s
@@ -53,7 +53,7 @@ glabel func_80804CD0
/* 0104C 80804D8C 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 01050 80804D90 260501E0 */ addiu $a1, $s0, 0x01E0 ## $a1 = 000001E0
/* 01054 80804D94 AFA30028 */ sw $v1, 0x0028($sp)
-/* 01058 80804D98 0C02A5FC */ jal func_800A97F0
+/* 01058 80804D98 0C02A5FC */ jal Sram_CopySave
/* 0105C 80804D9C A7AE0032 */ sh $t6, 0x0032($sp)
/* 01060 80804DA0 97AF0032 */ lhu $t7, 0x0032($sp)
/* 01064 80804DA4 8FA30028 */ lw $v1, 0x0028($sp)
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804ED8.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804ED8.s
index 502517ea8..6ed9e9b76 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804ED8.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80804ED8.s
@@ -13,12 +13,12 @@ glabel func_80804ED8
/* 011C4 80804F04 25CFFFE1 */ addiu $t7, $t6, 0xFFE1 ## $t7 = FFFFFFE1
/* 011C8 80804F08 844E4A96 */ lh $t6, 0x4A96($v0) ## 00004A96
/* 011CC 80804F0C A44F4A6E */ sh $t7, 0x4A6E($v0) ## 00004A6E
-/* 011D0 80804F10 3C0C8013 */ lui $t4, %hi(D_8012A4E0)
+/* 011D0 80804F10 3C0C8013 */ lui $t4, %hi(gSramSlotOffsets)
/* 011D4 80804F14 2719001F */ addiu $t9, $t8, 0x001F ## $t9 = 0000001F
/* 011D8 80804F18 25CFFFE7 */ addiu $t7, $t6, 0xFFE7 ## $t7 = FFFFFFE7
/* 011DC 80804F1C A4594A70 */ sh $t9, 0x4A70($v0) ## 00004A70
/* 011E0 80804F20 A44F4A96 */ sh $t7, 0x4A96($v0) ## 00004A96
-/* 011E4 80804F24 258CA4E0 */ addiu $t4, %lo(D_8012A4E0)
+/* 011E4 80804F24 258CA4E0 */ addiu $t4, %lo(gSramSlotOffsets)
/* 011E8 80804F28 2673248C */ addiu $s3, $s3, %lo(D_8081248C) ## $s3 = 8081248C
/* 011EC 80804F2C 2410004C */ addiu $s0, $zero, 0x004C ## $s0 = 0000004C
/* 011F0 80804F30 24110044 */ addiu $s1, $zero, 0x0044 ## $s1 = 00000044
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805524.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805524.s
index fcaa27bff..6a7ebb429 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805524.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805524.s
@@ -51,8 +51,8 @@ glabel func_80805524
.L808055D0:
/* 01890 808055D0 5420FFE0 */ bnel $at, $zero, .L80805554
/* 01894 808055D4 00067040 */ sll $t6, $a2, 1
-/* 01898 808055D8 3C0C8013 */ lui $t4, %hi(D_8012A4E0)
-/* 0189C 808055DC 258CA4E0 */ addiu $t4, %lo(D_8012A4E0)
+/* 01898 808055D8 3C0C8013 */ lui $t4, %hi(gSramSlotOffsets)
+/* 0189C 808055DC 258CA4E0 */ addiu $t4, %lo(gSramSlotOffsets)
/* 018A0 808055E0 00003025 */ or $a2, $zero, $zero ## $a2 = 00000000
/* 018A4 808055E4 24120041 */ addiu $s2, $zero, 0x0041 ## $s2 = 00000041
/* 018A8 808055E8 24110044 */ addiu $s1, $zero, 0x0044 ## $s1 = 00000044
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805B2C.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805B2C.s
index 72baf0983..f53b63148 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805B2C.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805B2C.s
@@ -57,9 +57,9 @@ glabel func_80805B2C
.L80805BFC:
/* 01EBC 80805BFC 11C00045 */ beq $t6, $zero, .L80805D14
/* 01EC0 80805C00 00037840 */ sll $t7, $v1, 1
-/* 01EC4 80805C04 3C188013 */ lui $t8, %hi(D_8012A4E0)
+/* 01EC4 80805C04 3C188013 */ lui $t8, %hi(gSramSlotOffsets)
/* 01EC8 80805C08 030FC021 */ addu $t8, $t8, $t7
-/* 01ECC 80805C0C 9718A4E0 */ lhu $t8, %lo(D_8012A4E0)($t8)
+/* 01ECC 80805C0C 9718A4E0 */ lhu $t8, %lo(gSramSlotOffsets)($t8)
/* 01ED0 80805C10 8E1901E0 */ lw $t9, 0x01E0($s0) ## 000001E0
/* 01ED4 80805C14 2404005A */ addiu $a0, $zero, 0x005A ## $a0 = 0000005A
/* 01ED8 80805C18 3C078013 */ lui $a3, %hi(D_801333E0)
@@ -188,9 +188,9 @@ glabel func_80805B2C
/* 0209C 80805DDC 1123002E */ beq $t1, $v1, .L80805E98
/* 020A0 80805DE0 2418FFFF */ addiu $t8, $zero, 0xFFFF ## $t8 = FFFFFFFF
/* 020A4 80805DE4 00036040 */ sll $t4, $v1, 1
-/* 020A8 80805DE8 3C0D8013 */ lui $t5, %hi(D_8012A4E0)
+/* 020A8 80805DE8 3C0D8013 */ lui $t5, %hi(gSramSlotOffsets)
/* 020AC 80805DEC 01AC6821 */ addu $t5, $t5, $t4
-/* 020B0 80805DF0 95ADA4E0 */ lhu $t5, %lo(D_8012A4E0)($t5)
+/* 020B0 80805DF0 95ADA4E0 */ lhu $t5, %lo(gSramSlotOffsets)($t5)
/* 020B4 80805DF4 8E0E01E0 */ lw $t6, 0x01E0($s0) ## 000001E0
/* 020B8 80805DF8 2404005A */ addiu $a0, $zero, 0x005A ## $a0 = 0000005A
/* 020BC 80805DFC 01AE1021 */ addu $v0, $t5, $t6
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805EB8.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805EB8.s
index 18b6214be..c88191d8c 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805EB8.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80805EB8.s
@@ -5,8 +5,8 @@ glabel func_80805EB8
/* 02184 80805EC4 AFB10008 */ sw $s1, 0x0008($sp)
/* 02188 80805EC8 AFB00004 */ sw $s0, 0x0004($sp)
/* 0218C 80805ECC 34228000 */ ori $v0, $at, 0x8000 ## $v0 = 00018000
-/* 02190 80805ED0 3C0C8013 */ lui $t4, %hi(D_8012A4E0)
-/* 02194 80805ED4 258CA4E0 */ addiu $t4, %lo(D_8012A4E0)
+/* 02190 80805ED0 3C0C8013 */ lui $t4, %hi(gSramSlotOffsets)
+/* 02194 80805ED4 258CA4E0 */ addiu $t4, %lo(gSramSlotOffsets)
/* 02198 80805ED8 00821821 */ addu $v1, $a0, $v0
/* 0219C 80805EDC 2410004C */ addiu $s0, $zero, 0x004C ## $s0 = 0000004C
/* 021A0 80805EE0 24110044 */ addiu $s1, $zero, 0x0044 ## $s1 = 00000044
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808064F4.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808064F4.s
index 82655e50e..b2d791e75 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808064F4.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808064F4.s
@@ -26,7 +26,7 @@ glabel func_808064F4
.L80806550:
/* 02810 80806550 84584A50 */ lh $t8, 0x4A50($v0) ## 00004A50
/* 02814 80806554 240C0045 */ addiu $t4, $zero, 0x0045 ## $t4 = 00000045
-/* 02818 80806558 3C0B8013 */ lui $t3, %hi(D_8012A4E0)
+/* 02818 80806558 3C0B8013 */ lui $t3, %hi(gSramSlotOffsets)
/* 0281C 8080655C 00D8001A */ div $zero, $a2, $t8
/* 02820 80806560 17000002 */ bne $t8, $zero, .L8080656C
/* 02824 80806564 00000000 */ nop
@@ -52,7 +52,7 @@ glabel func_808064F4
/* 02868 808065A8 A4EE4A52 */ sh $t6, 0x4A52($a3) ## 00004A52
.L808065AC:
/* 0286C 808065AC 00003025 */ or $a2, $zero, $zero ## $a2 = 00000000
-/* 02870 808065B0 256BA4E0 */ addiu $t3, %lo(D_8012A4E0)
+/* 02870 808065B0 256BA4E0 */ addiu $t3, %lo(gSramSlotOffsets)
/* 02874 808065B4 240A005A */ addiu $t2, $zero, 0x005A ## $t2 = 0000005A
/* 02878 808065B8 844F4A38 */ lh $t7, 0x4A38($v0) ## 00004A38
.L808065BC:
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80806710.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80806710.s
index 02c2b387b..59bd22d3b 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80806710.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80806710.s
@@ -61,7 +61,7 @@ glabel func_80806710
/* 02AB4 808067F4 55C0003B */ bnel $t6, $zero, .L808068E4
/* 02AB8 808067F8 8FBF001C */ lw $ra, 0x001C($sp)
/* 02ABC 808067FC AFA20020 */ sw $v0, 0x0020($sp)
-/* 02AC0 80806800 0C02A5B4 */ jal func_800A96D0
+/* 02AC0 80806800 0C02A5B4 */ jal Sram_EraseSave
/* 02AC4 80806804 AFA40030 */ sw $a0, 0x0030($sp)
/* 02AC8 80806808 8FA20020 */ lw $v0, 0x0020($sp)
/* 02ACC 8080680C 8FA40030 */ lw $a0, 0x0030($sp)
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808069B4.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808069B4.s
index 3fa7ec1c1..18111f9d5 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808069B4.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808069B4.s
@@ -48,8 +48,8 @@ glabel func_808069B4
.L80806A54:
/* 02D14 80806A54 5420FFE0 */ bnel $at, $zero, .L808069D8
/* 02D18 80806A58 00067040 */ sll $t6, $a2, 1
-/* 02D1C 80806A5C 3C0B8013 */ lui $t3, %hi(D_8012A4E0)
-/* 02D20 80806A60 256BA4E0 */ addiu $t3, %lo(D_8012A4E0)
+/* 02D1C 80806A5C 3C0B8013 */ lui $t3, %hi(gSramSlotOffsets)
+/* 02D20 80806A60 256BA4E0 */ addiu $t3, %lo(gSramSlotOffsets)
/* 02D24 80806A64 00003025 */ or $a2, $zero, $zero ## $a2 = 00000000
/* 02D28 80806A68 248501E0 */ addiu $a1, $a0, 0x01E0 ## $a1 = 000001E0
/* 02D2C 80806A6C 24110041 */ addiu $s1, $zero, 0x0041 ## $s1 = 00000041
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80808000.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80808000.s
index 258570778..ab86dc796 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80808000.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80808000.s
@@ -896,7 +896,7 @@ glabel func_80808000
/* 05000 80808D40 260501E0 */ addiu $a1, $s0, 0x01E0 ## $a1 = 000001E0
/* 05004 80808D44 AC2EF9B4 */ sw $t6, %lo(gSaveContext+0x1354)($at)
/* 05008 80808D48 9718E66C */ lhu $t8, %lo(gSaveContext+0xc)($t8)
-/* 0500C 80808D4C 0C02A496 */ jal func_800A9258
+/* 0500C 80808D4C 0C02A496 */ jal Sram_InitSave
/* 05010 80808D50 A7B800DE */ sh $t8, 0x00DE($sp)
/* 05014 80808D54 97AD00DE */ lhu $t5, 0x00DE($sp)
/* 05018 80808D58 3C018016 */ lui $at, %hi(gSaveContext+0xc)
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080969C.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080969C.s
index 5e7207ce1..5d1b0bcfe 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080969C.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080969C.s
@@ -41,7 +41,7 @@ glabel func_8080969C
/* 059F4 80809734 0C00084C */ jal osSyncPrintf
/* 059F8 80809738 AFA20028 */ sw $v0, 0x0028($sp)
-/* 059FC 8080973C 0C02A6A7 */ jal func_800A9A9C
+/* 059FC 8080973C 0C02A6A7 */ jal Sram_Write16Bytes
/* 05A00 80809740 8FA40028 */ lw $a0, 0x0028($sp)
/* 05A04 80809744 3C048081 */ lui $a0, %hi(D_80812BC0) ## $a0 = 80810000
/* 05A08 80809748 0C00084C */ jal osSyncPrintf
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B1A8.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B1A8.s
index 5b11ef924..71606ae96 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B1A8.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B1A8.s
@@ -22,7 +22,7 @@ glabel func_8080B1A8
/* 074B8 8080B1F8 AFA60018 */ sw $a2, 0x0018($sp)
/* 074BC 8080B1FC 8FA40018 */ lw $a0, 0x0018($sp)
-/* 074C0 8080B200 0C02A288 */ jal func_800A8A20
+/* 074C0 8080B200 0C02A288 */ jal Sram_VerifyAndLoadAllSaves
/* 074C4 8080B204 248501E0 */ addiu $a1, $a0, 0x01E0 ## $a1 = 000001E0
/* 074C8 8080B208 3C048081 */ lui $a0, %hi(D_80812D1C) ## $a0 = 80810000
/* 074CC 8080B20C 0C00084C */ jal osSyncPrintf
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B22C.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B22C.s
index 722a4e2bf..24b4bc2fc 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B22C.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B22C.s
@@ -18,9 +18,9 @@ glabel func_8080B22C
/* 0752C 8080B26C A4794A6E */ sh $t9, 0x4A6E($v1) ## 00004A6E
/* 07530 8080B270 8D4E0000 */ lw $t6, 0x0000($t2) ## 8015FA90
/* 07534 8080B274 00240821 */ addu $at, $at, $a0
-/* 07538 8080B278 3C0C8013 */ lui $t4, %hi(D_8012A4E0)
+/* 07538 8080B278 3C0C8013 */ lui $t4, %hi(gSramSlotOffsets)
/* 0753C 8080B27C 85D80F18 */ lh $t8, 0x0F18($t6) ## 00000F18
-/* 07540 8080B280 258CA4E0 */ addiu $t4, %lo(D_8012A4E0)
+/* 07540 8080B280 258CA4E0 */ addiu $t4, %lo(gSramSlotOffsets)
/* 07544 8080B284 2410004C */ addiu $s0, $zero, 0x004C ## $s0 = 0000004C
/* 07548 8080B288 01F8C821 */ addu $t9, $t7, $t8
/* 0754C 8080B28C A439CA72 */ sh $t9, -0x358E($at) ## 0001CA72
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B52C.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B52C.s
index 8e36f8dc4..0bffa1ac0 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B52C.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080B52C.s
@@ -19,8 +19,8 @@ glabel func_8080B52C
/* 0782C 8080B56C 34218000 */ ori $at, $at, 0x8000 ## $at = 00018000
/* 07830 8080B570 02011821 */ addu $v1, $s0, $at
/* 07834 8080B574 84654A38 */ lh $a1, 0x4A38($v1) ## 00004A38
-/* 07838 8080B578 3C098013 */ lui $t1, %hi(D_8012A4E0)
-/* 0783C 8080B57C 2529A4E0 */ addiu $t1, %lo(D_8012A4E0)
+/* 07838 8080B578 3C098013 */ lui $t1, %hi(gSramSlotOffsets)
+/* 0783C 8080B57C 2529A4E0 */ addiu $t1, %lo(gSramSlotOffsets)
/* 07840 8080B580 28A10003 */ slti $at, $a1, 0x0003
/* 07844 8080B584 102000A5 */ beq $at, $zero, .L8080B81C
/* 07848 8080B588 260801E0 */ addiu $t0, $s0, 0x01E0 ## $t0 = 000001E0
@@ -47,9 +47,9 @@ glabel func_8080B52C
/* 07898 8080B5D8 AFAF001C */ sw $t7, 0x001C($sp)
/* 0789C 8080B5DC 8FA30030 */ lw $v1, 0x0030($sp)
/* 078A0 8080B5E0 8FA80034 */ lw $t0, 0x0034($sp)
-/* 078A4 8080B5E4 3C098013 */ lui $t1, %hi(D_8012A4E0)
+/* 078A4 8080B5E4 3C098013 */ lui $t1, %hi(gSramSlotOffsets)
/* 078A8 8080B5E8 84644A38 */ lh $a0, 0x4A38($v1) ## 00004A38
-/* 078AC 8080B5EC 2529A4E0 */ addiu $t1, %lo(D_8012A4E0)
+/* 078AC 8080B5EC 2529A4E0 */ addiu $t1, %lo(gSramSlotOffsets)
/* 078B0 8080B5F0 8D0D0000 */ lw $t5, 0x0000($t0) ## 00000000
/* 078B4 8080B5F4 00042040 */ sll $a0, $a0, 1
/* 078B8 8080B5F8 0124C021 */ addu $t8, $t1, $a0
@@ -343,10 +343,10 @@ glabel func_8080B52C
.L8080BA30:
/* 07CF0 8080BA30 84664A38 */ lh $a2, 0x4A38($v1) ## 00004A38
/* 07CF4 8080BA34 24020003 */ addiu $v0, $zero, 0x0003 ## $v0 = 00000003
-/* 07CF8 8080BA38 3C098013 */ lui $t1, %hi(D_8012A4E0)
+/* 07CF8 8080BA38 3C098013 */ lui $t1, %hi(gSramSlotOffsets)
/* 07CFC 8080BA3C 1446009B */ bne $v0, $a2, .L8080BCAC
/* 07D00 8080BA40 24010004 */ addiu $at, $zero, 0x0004 ## $at = 00000004
-/* 07D04 8080BA44 2529A4E0 */ addiu $t1, %lo(D_8012A4E0)
+/* 07D04 8080BA44 2529A4E0 */ addiu $t1, %lo(gSramSlotOffsets)
/* 07D08 8080BA48 952E0000 */ lhu $t6, 0x0000($t1) ## 8012A4E0
/* 07D0C 8080BA4C 8E0401E0 */ lw $a0, 0x01E0($s0) ## 000001E0
/* 07D10 8080BA50 2405005A */ addiu $a1, $zero, 0x005A ## $a1 = 0000005A
@@ -510,8 +510,8 @@ glabel func_8080B52C
.L8080BCAC:
/* 07F6C 8080BCAC 14C10056 */ bne $a2, $at, .L8080BE08
/* 07F70 8080BCB0 2418FFFF */ addiu $t8, $zero, 0xFFFF ## $t8 = FFFFFFFF
-/* 07F74 8080BCB4 3C098013 */ lui $t1, %hi(D_8012A4E0)
-/* 07F78 8080BCB8 2529A4E0 */ addiu $t1, %lo(D_8012A4E0)
+/* 07F74 8080BCB4 3C098013 */ lui $t1, %hi(gSramSlotOffsets)
+/* 07F78 8080BCB8 2529A4E0 */ addiu $t1, %lo(gSramSlotOffsets)
/* 07F7C 8080BCBC 95390000 */ lhu $t9, 0x0000($t1) ## 8012A4E0
/* 07F80 8080BCC0 8E0401E0 */ lw $a0, 0x01E0($s0) ## 000001E0
/* 07F84 8080BCC4 2405005A */ addiu $a1, $zero, 0x005A ## $a1 = 0000005A
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080BFE4.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080BFE4.s
index 52fdd899b..eb4c00d7c 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080BFE4.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080BFE4.s
@@ -19,7 +19,7 @@ glabel func_8080BFE4
/* 082E8 8080C028 A1200002 */ sb $zero, %lo(D_80000002)($t1)
/* 082EC 8080C02C 8E050000 */ lw $a1, 0x0000($s0) ## 000001E0
/* 082F0 8080C030 24060003 */ addiu $a2, $zero, 0x0003 ## $a2 = 00000003
-/* 082F4 8080C034 0C02A7A8 */ jal Sram_ReadWrite
+/* 082F4 8080C034 0C02A7A8 */ jal SsSram_ReadWrite
/* 082F8 8080C038 24070001 */ addiu $a3, $zero, 0x0001 ## $a3 = 00000001
/* 082FC 8080C03C 8E020000 */ lw $v0, 0x0000($s0) ## 000001E0
/* 08300 8080C040 3C048081 */ lui $a0, %hi(D_80812D4C) ## $a0 = 80810000
@@ -34,7 +34,7 @@ glabel func_8080BFE4
/* 08320 8080C060 3C040800 */ lui $a0, 0x0800 ## $a0 = 08000000
/* 08324 8080C064 8E050000 */ lw $a1, 0x0000($s0) ## 000001E0
/* 08328 8080C068 34068000 */ ori $a2, $zero, 0x8000 ## $a2 = 00008000
-/* 0832C 8080C06C 0C02A7A8 */ jal Sram_ReadWrite
+/* 0832C 8080C06C 0C02A7A8 */ jal SsSram_ReadWrite
/* 08330 8080C070 00003825 */ or $a3, $zero, $zero ## $a3 = 00000000
/* 08334 8080C074 8E020000 */ lw $v0, 0x0000($s0) ## 000001E0
/* 08338 8080C078 3C048081 */ lui $a0, %hi(D_80812D6C) ## $a0 = 80810000
@@ -66,7 +66,7 @@ glabel func_8080BFE4
/* 08398 8080C0D8 A1CD0002 */ sb $t5, 0x0002($t6) ## 00000002
/* 0839C 8080C0DC A1ED0002 */ sb $t5, 0x0002($t7) ## 80000002
/* 083A0 8080C0E0 8E050000 */ lw $a1, 0x0000($s0) ## 000001E0
-/* 083A4 8080C0E4 0C02A7A8 */ jal Sram_ReadWrite
+/* 083A4 8080C0E4 0C02A7A8 */ jal SsSram_ReadWrite
/* 083A8 8080C0E8 24070001 */ addiu $a3, $zero, 0x0001 ## $a3 = 00000001
/* 083AC 8080C0EC 8E020000 */ lw $v0, 0x0000($s0) ## 000001E0
/* 083B0 8080C0F0 3C048081 */ lui $a0, %hi(D_80812D88) ## $a0 = 80810000
@@ -81,7 +81,7 @@ glabel func_8080BFE4
/* 083D0 8080C110 3C040800 */ lui $a0, 0x0800 ## $a0 = 08000000
/* 083D4 8080C114 8E050000 */ lw $a1, 0x0000($s0) ## 000001E0
/* 083D8 8080C118 34068000 */ ori $a2, $zero, 0x8000 ## $a2 = 00008000
-/* 083DC 8080C11C 0C02A7A8 */ jal Sram_ReadWrite
+/* 083DC 8080C11C 0C02A7A8 */ jal SsSram_ReadWrite
/* 083E0 8080C120 00003825 */ or $a3, $zero, $zero ## $a3 = 00000000
/* 083E4 8080C124 8E020000 */ lw $v0, 0x0000($s0) ## 000001E0
/* 083E8 8080C128 3C048081 */ lui $a0, %hi(D_80812DA8) ## $a0 = 80810000
@@ -110,7 +110,7 @@ glabel func_8080BFE4
/* 0843C 8080C17C A18A0002 */ sb $t2, %lo(D_80000002)($t4)
/* 08440 8080C180 8E050000 */ lw $a1, 0x0000($s0) ## 000001E0
/* 08444 8080C184 24060003 */ addiu $a2, $zero, 0x0003 ## $a2 = 00000003
-/* 08448 8080C188 0C02A7A8 */ jal Sram_ReadWrite
+/* 08448 8080C188 0C02A7A8 */ jal SsSram_ReadWrite
/* 0844C 8080C18C 24070001 */ addiu $a3, $zero, 0x0001 ## $a3 = 00000001
/* 08450 8080C190 8E020000 */ lw $v0, 0x0000($s0) ## 000001E0
/* 08454 8080C194 3C048081 */ lui $a0, %hi(D_80812DC4) ## $a0 = 80810000
@@ -125,7 +125,7 @@ glabel func_8080BFE4
/* 08474 8080C1B4 3C040800 */ lui $a0, 0x0800 ## $a0 = 08000000
/* 08478 8080C1B8 8E050000 */ lw $a1, 0x0000($s0) ## 000001E0
/* 0847C 8080C1BC 34068000 */ ori $a2, $zero, 0x8000 ## $a2 = 00008000
-/* 08480 8080C1C0 0C02A7A8 */ jal Sram_ReadWrite
+/* 08480 8080C1C0 0C02A7A8 */ jal SsSram_ReadWrite
/* 08484 8080C1C4 00003825 */ or $a3, $zero, $zero ## $a3 = 00000000
/* 08488 8080C1C8 8E020000 */ lw $v0, 0x0000($s0) ## 000001E0
/* 0848C 8080C1CC 3C048081 */ lui $a0, %hi(D_80812DE4) ## $a0 = 80810000
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080C60C.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080C60C.s
index 2758ce499..64c47e0bb 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080C60C.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080C60C.s
@@ -591,9 +591,9 @@ glabel func_8080C60C
.L8080CF1C:
/* 091DC 8080CF1C 8FB80034 */ lw $t8, 0x0034($sp)
/* 091E0 8080CF20 000D1840 */ sll $v1, $t5, 1
-/* 091E4 8080CF24 3C0F8013 */ lui $t7, %hi(D_8012A4E0)
+/* 091E4 8080CF24 3C0F8013 */ lui $t7, %hi(gSramSlotOffsets)
/* 091E8 8080CF28 01E37821 */ addu $t7, $t7, $v1
-/* 091EC 8080CF2C 95EFA4E0 */ lhu $t7, %lo(D_8012A4E0)($t7)
+/* 091EC 8080CF2C 95EFA4E0 */ lhu $t7, %lo(gSramSlotOffsets)($t7)
/* 091F0 8080CF30 8F190000 */ lw $t9, 0x0000($t8) ## 00000000
/* 091F4 8080CF34 2401005A */ addiu $at, $zero, 0x005A ## $at = 0000005A
/* 091F8 8080CF38 01F91021 */ addu $v0, $t7, $t9
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080FE2C.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080FE2C.s
index 5377a0d49..04098c854 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080FE2C.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_8080FE2C.s
@@ -4,8 +4,8 @@ glabel func_8080FE2C
/* 0C0F4 8080FE34 AFB1000C */ sw $s1, 0x000C($sp)
/* 0C0F8 8080FE38 AFB00008 */ sw $s0, 0x0008($sp)
/* 0C0FC 8080FE3C 34298000 */ ori $t1, $at, 0x8000 ## $t1 = 00018000
-/* 0C100 8080FE40 3C0B8013 */ lui $t3, %hi(D_8012A4E0)
-/* 0C104 8080FE44 256BA4E0 */ addiu $t3, %lo(D_8012A4E0)
+/* 0C100 8080FE40 3C0B8013 */ lui $t3, %hi(gSramSlotOffsets)
+/* 0C104 8080FE44 256BA4E0 */ addiu $t3, %lo(gSramSlotOffsets)
/* 0C108 8080FE48 00893021 */ addu $a2, $a0, $t1
/* 0C10C 8080FE4C 24100044 */ addiu $s0, $zero, 0x0044 ## $s0 = 00000044
/* 0C110 8080FE50 24110041 */ addiu $s1, $zero, 0x0041 ## $s1 = 00000041
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80810440.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80810440.s
index 3d9c410d8..665b5c22d 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80810440.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_80810440.s
@@ -9,7 +9,7 @@ glabel func_80810440
/* 0C71C 8081045C AFB00004 */ sw $s0, 0x0004($sp)
/* 0C720 80810460 008B1021 */ addu $v0, $a0, $t3
/* 0C724 80810464 844E4A38 */ lh $t6, 0x4A38($v0) ## 00004A38
-/* 0C728 80810468 3C108013 */ lui $s0, %hi(D_8012A4E0)
+/* 0C728 80810468 3C108013 */ lui $s0, %hi(gSramSlotOffsets)
/* 0C72C 8081046C 24110045 */ addiu $s1, $zero, 0x0045 ## $s1 = 00000045
/* 0C730 80810470 000E7840 */ sll $t7, $t6, 1
/* 0C734 80810474 008FC021 */ addu $t8, $a0, $t7
@@ -25,7 +25,7 @@ glabel func_80810440
/* 0C758 80810498 00053023 */ subu $a2, $zero, $a1
.L8081049C:
/* 0C75C 8081049C 84594A50 */ lh $t9, 0x4A50($v0) ## 00004A50
-/* 0C760 808104A0 2610A4E0 */ addiu $s0, %lo(D_8012A4E0)
+/* 0C760 808104A0 2610A4E0 */ addiu $s0, %lo(gSramSlotOffsets)
/* 0C764 808104A4 240D005A */ addiu $t5, $zero, 0x005A ## $t5 = 0000005A
/* 0C768 808104A8 00D9001A */ div $zero, $a2, $t9
/* 0C76C 808104AC 00003812 */ mflo $a3
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808106F4.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808106F4.s
index d9976e2dd..555edea9c 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808106F4.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808106F4.s
@@ -25,7 +25,7 @@ glabel func_808106F4
/* 0CA0C 8081074C 3C018016 */ lui $at, %hi(gSaveContext+0x1354)
/* 0CA10 80810750 260401E0 */ addiu $a0, $s0, 0x01E0 ## $a0 = 000001E0
/* 0CA14 80810754 84584A38 */ lh $t8, 0x4A38($v0) ## 00004A38
-/* 0CA18 80810758 0C02A121 */ jal func_800A8484
+/* 0CA18 80810758 0C02A121 */ jal Sram_OpenSave
/* 0CA1C 8081075C AC38F9B4 */ sw $t8, %lo(gSaveContext+0x1354)($at)
/* 0CA20 80810760 3C028016 */ lui $v0, %hi(gSaveContext)
/* 0CA24 80810764 2442E660 */ addiu $v0, %lo(gSaveContext)
@@ -55,7 +55,7 @@ glabel func_808106F4
/* 0CA7C 808107BC 3C018016 */ lui $at, %hi(gSaveContext+0x1354)
/* 0CA80 808107C0 260401E0 */ addiu $a0, $s0, 0x01E0 ## $a0 = 000001E0
/* 0CA84 808107C4 844A4A38 */ lh $t2, 0x4A38($v0) ## 00004A38
-/* 0CA88 808107C8 0C02A121 */ jal func_800A8484
+/* 0CA88 808107C8 0C02A121 */ jal Sram_OpenSave
/* 0CA8C 808107CC AC2AF9B4 */ sw $t2, %lo(gSaveContext+0x1354)($at)
/* 0CA90 808107D0 3C028016 */ lui $v0, %hi(gSaveContext)
/* 0CA94 808107D4 2442E660 */ addiu $v0, %lo(gSaveContext)
diff --git a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808113A8.s b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808113A8.s
index 1a8cc5b76..74d1da57d 100644
--- a/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808113A8.s
+++ b/asm/non_matchings/overlays/gamestates/ovl_file_choose/func_808113A8.s
@@ -6,7 +6,7 @@ glabel func_808113A8
/* 0D678 808113B8 AFBF0024 */ sw $ra, 0x0024($sp)
/* 0D67C 808113BC 261201E0 */ addiu $s2, $s0, 0x01E0 ## $s2 = 000001E0
/* 0D680 808113C0 AFB1001C */ sw $s1, 0x001C($sp)
-/* 0D684 808113C4 0C02A735 */ jal func_800A9CD4
+/* 0D684 808113C4 0C02A735 */ jal Sram_Alloc
/* 0D688 808113C8 02402825 */ or $a1, $s2, $zero ## $a1 = 000001E0
/* 0D68C 808113CC 3C028016 */ lui $v0, %hi(gGameInfo)
/* 0D690 808113D0 2442FA90 */ addiu $v0, %lo(gGameInfo)
@@ -392,7 +392,7 @@ glabel func_808113A8
/* 0DC80 808119C0 8E450000 */ lw $a1, 0x0000($s2) ## 000001E0
/* 0DC84 808119C4 3C040800 */ lui $a0, 0x0800 ## $a0 = 08000000
/* 0DC88 808119C8 34068000 */ ori $a2, $zero, 0x8000 ## $a2 = 00008000
-/* 0DC8C 808119CC 0C02A7A8 */ jal Sram_ReadWrite
+/* 0DC8C 808119CC 0C02A7A8 */ jal SsSram_ReadWrite
/* 0DC90 808119D0 00003825 */ or $a3, $zero, $zero ## $a3 = 00000000
/* 0DC94 808119D4 8E4F0000 */ lw $t7, 0x0000($s2) ## 000001E0
/* 0DC98 808119D8 3C018016 */ lui $at, %hi(gSaveContext+0x1409)
diff --git a/data/code_800EC960.data.s b/data/code_800EC960.data.s
index 243e2b9fb..8b594008d 100644
--- a/data/code_800EC960.data.s
+++ b/data/code_800EC960.data.s
@@ -294,10 +294,10 @@ glabel D_80131884
glabel D_8013188C
.incbin "baserom.z64", 0xBA8A2C, 0x358
-glabel D_80131BE4
+glabel gScarecrowCustomSongPtr
.word D_80131884
-glabel D_80131BE8
+glabel gScarecrowSpawnSongPtr
.word D_80131700
glabel D_80131BEC
diff --git a/data/z_sram.data.s b/data/z_sram.data.s
deleted file mode 100644
index 3b45c9934..000000000
--- a/data/z_sram.data.s
+++ /dev/null
@@ -1,46 +0,0 @@
-.include "macro.inc"
-
-# assembler directives
-.set noat # allow manual use of $at
-.set noreorder # don't insert nops after branches
-.set gp=64 # allow use of 64-bit general purpose registers
-
-.section .data
-
-.balign 16
-
-glabel D_8012A4E0
- .incbin "baserom.z64", 0xBA1680, 0x6
-
-glabel D_8012A4E6
- .incbin "baserom.z64", 0xBA1686, 0x6
-
-glabel D_8012A4EC
- .incbin "baserom.z64", 0xBA168C, 0xC
-
-glabel D_8012A4F8
- .incbin "baserom.z64", 0xBA1698, 0x4C
-
-glabel D_8012A544
- .incbin "baserom.z64", 0xBA16E4, 0xC
-
-glabel D_8012A550
- .incbin "baserom.z64", 0xBA16F0, 0x60
-
-glabel D_8012A5B0
- .incbin "baserom.z64", 0xBA1750, 0x4
-
-glabel D_8012A5B4
- .incbin "baserom.z64", 0xBA1754, 0x4C
-
-glabel D_8012A600
- .incbin "baserom.z64", 0xBA17A0, 0xC
-
-glabel D_8012A60C
- .incbin "baserom.z64", 0xBA17AC, 0x60
-
-glabel D_8012A66C
- .incbin "baserom.z64", 0xBA180C, 0x4
-
-glabel D_8012A670
- .incbin "baserom.z64", 0xBA1810, 0x20
diff --git a/include/functions.h b/include/functions.h
index 92792bc78..212e03cf4 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -1397,14 +1397,21 @@ void SkinMatrix_SetScaleRotateYRPTranslate(MtxF* mf, f32 scaleX, f32 scaleY, f32
f32 dx, f32 dy, f32 dz);
Mtx* SkinMatrix_MtxFToNewMtx(GraphicsContext* gfxCtx, MtxF* src);
void func_800A7EC0(MtxF* mf, s16 a, f32 x, f32 y, f32 z);
-// ? func_800A81A0(?);
-// ? func_800A82C8(?);
-// ? func_800A9A9C(?);
-// ? func_800A9D28(?);
-void func_800A9D40(u32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8 handlePageSize, u8 handleRelDuration,
- u8 handlePulse, u32 handleSpeed);
-void func_800A9E14(UNK_PTR dramAddr, size_t size, UNK_TYPE arg2);
-void Sram_ReadWrite(UNK_TYPE arg0, UNK_PTR dramAddr, size_t size, UNK_TYPE arg3);
+void Sram_InitNewSave(void);
+void Sram_InitDebugSave(void);
+void Sram_OpenSave(SramContext* sramCtx);
+void Sram_WriteSave(s32 unused);
+void Sram_VerifyAndLoadAllSaves(FileChooseContext* fileChoose, SramContext* sramCtx);
+void Sram_InitSave(FileChooseContext* fileChoose, SramContext* sramCtx);
+void Sram_EraseSave(FileChooseContext* fileChoose, SramContext* sramCtx);
+void Sram_CopySave(FileChooseContext* fileChoose, SramContext* sramCtx);
+void Sram_Write16Bytes(SramContext* sramCtx);
+void Sram_InitSram(GameState* gameState, SramContext* sramCtx);
+void Sram_Alloc(GameState* gameState, SramContext* sramCtx);
+void Sram_Init(GlobalContext* globalCtx, SramContext* sramCtx);
+void SsSram_Init(u32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8 handlePageSize, u8 handleRelDuration, u8 handlePulse, u32 handleSpeed);
+void SsSram_Dma(void* dramAddr, size_t size, s32 direction);
+void SsSram_ReadWrite(u32 addr, void* dramAddr, size_t size, s32 direction);
void func_800A9F30(PadMgr*, s32);
void func_800A9F6C(f32, u8, u8, u8);
void func_800AA000(f32, u8, u8, u8);
@@ -2284,7 +2291,7 @@ void func_800F6584(UNK_TYPE);
void func_800F6584(UNK_TYPE);
// ? func_800F66C0(?);
void func_800F66DC(s8);
-// ? func_800F6700(?);
+void func_800F6700(s8 outputMode);
void func_800F67A0(u8);
// ? func_800F6828(?);
void func_800F68BC(s8);
diff --git a/include/macros.h b/include/macros.h
index 8ebfb26fb..d61729e57 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -30,19 +30,19 @@
#define LINK_AGE_IN_YEARS (LINK_IS_CHILD ? YEARS_CHILD : YEARS_ADULT)
#define SLOT(item) gItemSlots[item]
-#define INV_CONTENT(item) gSaveContext.items[SLOT(item)]
-#define AMMO(item) gSaveContext.ammo[SLOT(item)]
+#define INV_CONTENT(item) gSaveContext.inventory.items[SLOT(item)]
+#define AMMO(item) gSaveContext.inventory.ammo[SLOT(item)]
#define BEANS_BOUGHT AMMO(ITEM_BEAN + 1)
-#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
+#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.inventory.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
#define CUR_EQUIP_VALUE(equip) ((s32)(gSaveContext.equips.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
-#define CHECK_OWNED_EQUIP(equip, value) ((gBitFlags[value] << gEquipShifts[equip]) & gSaveContext.equipment)
+#define CHECK_OWNED_EQUIP(equip, value) ((gBitFlags[value] << gEquipShifts[equip]) & gSaveContext.inventory.equipment)
-#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
+#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
-#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.questItems)
+#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.inventory.questItems)
#define B_BTN_ITEM ((gSaveContext.buttonStatus[0] == ITEM_NONE) \
? ITEM_NONE \
diff --git a/include/variables.h b/include/variables.h
index 135d5c2e7..7c13c6474 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -439,16 +439,7 @@ extern RomFile gObjectTable[402];
extern EntranceInfo gEntranceTable[1556];
extern Scene gSceneTable[110];
//extern ? D_8012A4A0;
-//extern ? D_8012A4E0;
-//extern ? D_8012A4EC;
-//extern ? D_8012A4F8;
-//extern ? D_8012A544;
-//extern ? D_8012A550;
-//extern ? D_8012A5B0;
-//extern ? D_8012A5B4;
-//extern ? D_8012A600;
-//extern ? D_8012A60C;
-//extern ? D_8012A66C;
+extern u16 gSramSlotOffsets[2][3];
//extern ? D_8012A690;
//extern ? D_8012A69C;
//extern ? D_8012A6A4;
@@ -704,8 +695,8 @@ extern s32 D_80130514;
//extern ? D_80131880;
//extern ? D_80131884;
//extern ? D_8013188C;
-//extern ? D_80131BE4;
-//extern ? D_80131BE8;
+extern u8* gScarecrowCustomSongPtr;
+extern u8* gScarecrowSpawnSongPtr;
//extern ? D_80131BEC;
//extern ? D_80131BF0;
//extern ? D_80131C00;
diff --git a/include/z64.h b/include/z64.h
index bd7cb633a..303fe24a9 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -3,6 +3,7 @@
#include "ultra64.h"
#include "ultra64/gs2dex.h"
+#include "z64save.h"
#include "z64light.h"
#include "z64actor.h"
#include "z64player.h"
@@ -56,178 +57,6 @@ typedef struct {
} GameInfo; // size = 0x15D4
typedef struct {
- /* 0x00 */ u8 buttonItems[4];
- /* 0x04 */ u8 cButtonSlots[3];
- /* 0x08 */ u16 equipment;
-} ItemEquips; // size = 0x0A
-
-typedef struct {
- /* 0x00 */ u32 chest;
- /* 0x04 */ u32 swch;
- /* 0x08 */ u32 clear;
- /* 0x0C */ u32 collect;
- /* 0x10 */ u32 unk;
- /* 0x14 */ u32 rooms;
- /* 0x18 */ u32 floors;
-} SaveSceneFlags; // size = 0x1C
-
-typedef struct {
- /* 0x00 */ s16 scene;
- /* 0x02 */ Vec3s pos;
- /* 0x08 */ s16 angle;
-} HorseData; // size = 0x0A
-
-typedef struct {
- /* 0x00 */ Vec3f pos;
- /* 0x0C */ s16 yaw;
- /* 0x0E */ s16 playerParams;
- /* 0x10 */ s16 entranceIndex;
- /* 0x12 */ u8 roomIndex;
- /* 0x13 */ s8 data;
- /* 0x14 */ u32 tempSwchFlags;
- /* 0x18 */ u32 tempCollectFlags;
-} RespawnData; // size = 0x1C
-
-typedef enum {
- /* 0x00 */ RESPAWN_MODE_DOWN, /* Normal Void Outs */
- /* 0x01 */ RESPAWN_MODE_RETURN, /* Grotto Returnpoints */
- /* 0x02 */ RESPAWN_MODE_TOP /* Farore's Wind */
-} RespawnMode;
-
-typedef enum {
- /* 0x00 */ BTN_ENABLED,
- /* 0xFF */ BTN_DISABLED = 0xFF
-} ButtonStatus;
-
-// Save Context (dbg ram start: 8015E660)
-typedef struct {
- /* 0x0000 */ s32 entranceIndex;
- /* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child
- /* 0x0008 */ s32 cutsceneIndex;
- /* 0x000C */ u16 dayTime; // "zelda_time"
- /* 0x0010 */ s32 nightFlag;
- /* 0x0014 */ s32 unk_14;
- /* 0x0018 */ s32 unk_18;
- /* 0x001C */ char newf[6]; // string "ZELDAZ"
- /* 0x0022 */ s16 deaths;
- /* 0x0024 */ char playerName[8];
- /* 0x002C */ s16 n64ddFlag;
- /* 0x002E */ s16 healthCapacity; // "max_life"
- /* 0x0030 */ s16 health; // "now_life"
- /* 0x0032 */ s8 magicLevel;
- /* 0x0033 */ s8 magic;
- /* 0x0034 */ s16 rupees;
- /* 0x0036 */ u16 swordHealth;
- /* 0x0038 */ u16 naviTimer;
- /* 0x003A */ u8 magicAcquired;
- /* 0x003B */ char unk_3B[0x0001];
- /* 0x003C */ u8 doubleMagic;
- /* 0x003D */ u8 doubleDefense;
- /* 0x003E */ u8 bgsFlag;
- /* 0x0040 */ ItemEquips childEquips;
- /* 0x004A */ ItemEquips adultEquips;
- /* 0x0054 */ char unk_54[0x0014];
- /* 0x0068 */ ItemEquips equips;
- /* 0x0072 */ char unk_72[0x0002];
- /* 0x0074 */ u8 items[24];
- /* 0x008C */ s8 ammo[16];
- /* 0x009C */ u16 equipment;
- /* 0x00A0 */ u32 upgrades;
- /* 0x00A4 */ u32 questItems;
- /* 0x00A8 */ u8 dungeonItems[20];
- /* 0x00BC */ s8 dungeonKeys[19];
- /* 0x00CF */ s8 defenseHearts;
- /* 0x00D0 */ s16 gsTokens;
- /* 0x00D4 */ SaveSceneFlags sceneFlags[124];
- struct {
- /* 0x0E64 */ Vec3i pos;
- /* 0x0E70 */ s32 yaw;
- /* 0x0E74 */ s32 playerParams;
- /* 0x0E78 */ s32 entranceIndex;
- /* 0x0E7C */ s32 roomIndex;
- /* 0x0E80 */ s32 set;
- /* 0x0E84 */ s32 tempSwchFlags;
- /* 0x0E88 */ s32 tempCollectFlags;
- } fw;
- /* 0x0E8C */ char unk_E8C[0x0010];
- /* 0x0E9C */ s32 gsFlags[6];
- /* 0x0EB4 */ char unk_EB4[0x0010];
- /* 0x0EC4 */ s32 unk_EC4;
- /* 0x0EC8 */ char unk_EC8[0x000C];
- /* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf"
- /* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf"
- /* 0x0EF8 */ u16 infTable[30]; // "inf_table"
- /* 0x0F34 */ char unk_F34[0x0004];
- /* 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
- /* 0x0F3C */ char unk_F3C[0x0389];
- /* 0x12C5 */ u8 unk_12C5;
- /* 0x12C6 */ char unk_12C6[0x0082];
- /* 0x1348 */ HorseData horseData;
- /* 0x1352 */ u16 checksum; // "check_sum"
- /* 0x1354 */ s32 fileNum; // "file_no"
- /* 0x1358 */ char unk_1358[0x0004];
- /* 0x135C */ s32 gameMode;
- /* 0x1360 */ s32 sceneSetupIndex;
- /* 0x1364 */ s32 respawnFlag; // "restart_flag"
- /* 0x1368 */ RespawnData respawn[3]; // "restart_data"
- /* 0x13BC */ f32 unk_13BC;
- /* 0x13C0 */ u16 unk_13C0;
- /* 0x13C2 */ char unk_13C2[0x0001];
- /* 0x13C3 */ u8 unk_13C3;
- /* 0x13C4 */ s16 dogParams;
- /* 0x13C6 */ u8 textTriggerFlags;
- /* 0x13C7 */ u8 unk_13C7;
- /* 0x13C8 */ s16 nayrusLoveTimer;
- /* 0x13CA */ char unk_13CA[0x0002];
- /* 0x13CC */ s16 rupeeAccumulator;
- /* 0x13CE */ s16 timer1State;
- /* 0x13D0 */ s16 timer1Value;
- /* 0x13D2 */ s16 timer2State;
- /* 0x13D4 */ s16 timer2Value;
- /* 0x13D6 */ s16 timerX[2];
- /* 0x13DA */ s16 timerY[2];
- /* 0x13DE */ char unk_13DE[0x0002];
- /* 0x13E0 */ u8 seqIndex;
- /* 0x13E1 */ u8 nightSeqIndex;
- /* 0x13E2 */ u8 buttonStatus[5];
- /* 0x13E7 */ u8 unk_13E7;
- /* 0x13E8 */ u16 unk_13E8; // alpha type?
- /* 0x13EA */ u16 unk_13EA; // also alpha type?
- /* 0x13EC */ u16 unk_13EC; // alpha type counter?
- /* 0x13EE */ u16 unk_13EE; // previous alpha type?
- /* 0x13F0 */ s16 unk_13F0;
- /* 0x13F2 */ s16 unk_13F2;
- /* 0x13F4 */ s16 unk_13F4;
- /* 0x13F6 */ s16 unk_13F6;
- /* 0x13F8 */ s16 unk_13F8;
- /* 0x13FA */ u16 eventInf[4]; // "event_inf"
- /* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index
- /* 0x1404 */ u16 minigameState;
- /* 0x1406 */ u16 minigameScore; // "yabusame_total"
- /* 0x1408 */ char unk_1408[0x0001];
- /* 0x1409 */ u8 language;
- /* 0x140A */ u8 audioSetting;
- /* 0x140B */ char unk_140B[0x0001];
- /* 0x140C */ u8 zTargetingSetting; // 0: Switch; 1: Hold
- /* 0x140E */ u16 unk_140E; // bgm related
- /* 0x1410 */ u8 unk_1410;
- /* 0x1411 */ u8 unk_1411;
- /* 0x1412 */ u16 nextCutsceneIndex;
- /* 0x1414 */ u8 cutsceneTrigger;
- /* 0x1415 */ u8 chamberCutsceneNum;
- /* 0x1416 */ u16 nextDayTime; // "next_zelda_time"
- /* 0x1418 */ u8 fadeDuration;
- /* 0x1419 */ u8 unk_1419; // transition related
- /* 0x141A */ u16 environmentTime;
- /* 0x141C */ u8 dogIsLost;
- /* 0x141D */ u8 nextTransition;
- /* 0x141E */ char unk_141E[0x0002];
- /* 0x1420 */ s16 worldMapArea;
- /* 0x1422 */ s16 unk_1422; // day time related
- /* 0x1424 */ s16 healthAccumulator;
-} SaveContext; // size = 0x1428
-
-typedef struct {
/* 0x00000 */ u16 headMagic; // 1234
/* 0x00008 */ Gfx polyOpaBuffer[0x17E0];
/* 0x0BF08 */ Gfx polyXluBuffer[0x800];
@@ -266,12 +95,12 @@ typedef struct {
typedef struct OSScTask {
/* 0x00 */ struct OSScTask* next;
- /* 0x04 */ u32 state;
- /* 0x08 */ u32 flags;
- /* 0x0C */ CfbInfo* framebuffer;
- /* 0x10 */ OSTask list;
- /* 0x50 */ OSMesgQueue* msgQ;
- /* 0x54 */ OSMesg msg;
+ /* 0x04 */ u32 state;
+ /* 0x08 */ u32 flags;
+ /* 0x0C */ CfbInfo* framebuffer;
+ /* 0x10 */ OSTask list;
+ /* 0x50 */ OSMesgQueue* msgQ;
+ /* 0x54 */ OSMesg msg;
} OSScTask;
typedef struct GraphicsContext {
@@ -657,10 +486,6 @@ typedef struct {
} SoundSource; // size = 0x1C
typedef struct {
- /* 0x00 */ char unk_0[0x4];
-} SubGlobalContext1F74; // size = 0x4
-
-typedef struct {
/* 0x000 */ char unk_00[0x128];
/* 0x128 */ void* staticSegments[3];
/* 0x134 */ Gfx* dpList;
@@ -1030,8 +855,7 @@ typedef struct {
/* 0x1C4 */ Collider* colOc[COLLISION_CHECK_OC_MAX];
/* 0x28C */ s32 colOcLineCount;
/* 0x290 */ OcLine* colOcLine[COLLISION_CHECK_OC_LINE_MAX];
-
-} CollisionCheckContext; // size = 0x29C SubGlobalContext11E60
+} CollisionCheckContext; // size = 0x29C
typedef struct ListAlloc {
/* 0x00 */ struct ListAlloc* prev;
@@ -1104,8 +928,10 @@ typedef struct {
} EntranceEntry;
typedef struct {
- /* 0x00 */ void* read_buff;
-} Sram; // size = 0x4
+ /* 0x00 */ u8* readBuff;
+} SramContext; // size = 0x4
+
+#define SRAM_SIZE 0x8000
typedef struct GameAllocEntry {
/* 0x00 */ struct GameAllocEntry* next;
@@ -1141,7 +967,7 @@ typedef struct {
/* 0x0000 */ GameState state;
/* 0x00A4 */ void* staticSegment;
/* 0x00A8 */ View view;
- /* 0x01D0 */ Sram sram;
+ /* 0x01D0 */ SramContext sramCtx;
/* 0x01D4 */ u16 unk_1D4; // not used in mq dbg (some sort of timer that doesn't seem to affect anything)
/* 0x01D6 */ s16 coverAlpha;
/* 0x01D8 */ s16 addAlpha; // not used in mq dbg
@@ -1221,7 +1047,7 @@ typedef struct GlobalContext {
/* 0x01C24 */ ActorContext actorCtx;
/* 0x01D64 */ CutsceneContext csCtx; // "demo_play"
/* 0x01DB4 */ SoundSource soundSources[16];
- /* 0x01F74 */ SubGlobalContext1F74 sub_1F74;
+ /* 0x01F74 */ SramContext sramCtx;
/* 0x01F78 */ SkyboxContext skyboxCtx;
/* 0x020C8 */ char unk_20C8[0x10];
/* 0x020D8 */ MessageContext msgCtx; // "message"
@@ -1291,6 +1117,95 @@ typedef struct {
/* 0x00A8 */ View view;
} OpeningContext; // size = 0x1D0
+typedef struct {
+ /* 0x00000 */ GameState state;
+ /* 0x000A4 */ Vtx* allocVtx1;
+ /* 0x000A8 */ void* staticSegment;
+ /* 0x000AC */ void* parameterSegment;
+ /* 0x000B0 */ char unk_B0[0x8];
+ /* 0x000B8 */ View view;
+ /* 0x001E0 */ SramContext sramCtx;
+ /* 0x001E4 */ char unk_1E4[0x4];
+ /* 0x001E8 */ SkyboxContext skyboxCtx;
+ /* 0x00338 */ char unk_338[0x10];
+ /* 0x00348 */ MessageContext msgCtx;
+ /* 0x0E760 */ char kanfont[0xE188];
+ /* 0x1C8E8 */ EnvironmentContext envCtx;
+ /* 0x1C9E4 */ char unk_1C9E4[0x4];
+ /* 0x1C9E8 */ Vtx* allocVtx2;
+ /* 0x1C9EC */ Vtx* allocVtx3;
+ /* 0x1C9F0 */ Vtx* allocVtx4;
+ /* 0x1C9F4 */ u8 n64ddFlag;
+ /* 0x1C9F6 */ u16 deaths[3];
+ /* 0x1C9FC */ u8 fileNames[3][8];
+ /* 0x1CA14 */ u16 healthCapacities[3];
+ /* 0x1CA1C */ u32 questItems[3];
+ /* 0x1CA28 */ s16 n64ddFlags[3];
+ /* 0x1CA2E */ s8 heartStatus[3];
+ /* 0x1CA32 */ u16 nowLife[3];
+ /* 0x1CA38 */ s16 btnIdx;
+ /* 0x1CA3A */ u16 yesNoButtonIdx;
+ /* 0x1CA3C */ s16 menuIdx;
+ /* 0x1CA3E */ s16 fileSelectStateIdx;
+ /* 0x1CA40 */ s16 unkActionIndex;
+ /* 0x1CA42 */ u16 nextFileSelectStateIdx;
+ /* 0x1CA44 */ s16 openFileStateIdx;
+ /* 0x1CA46 */ s16 selectedFileIdx;
+ /* 0x1CA48 */ char unk_1CA48[0x2];
+ /* 0x1CA4A */ u16 fileNamesY[3];
+ /* 0x1CA50 */ u16 actionTimer;
+ /* 0x1CA52 */ u16 buttonsY[6];
+ /* 0x1CA5E */ s16 copyDestFileIdx;
+ /* 0x1CA60 */ u16 fileWarningTexIdx;
+ /* 0x1CA62 */ u16 warningFileIdx;
+ /* 0x1CA64 */ u16 titleTexIdx;
+ /* 0x1CA66 */ u16 nextTitleTexIdx;
+ /* 0x1CA68 */ s16 windowR;
+ /* 0x1CA6A */ s16 windowG;
+ /* 0x1CA6C */ s16 windowB;
+ /* 0x1CA6E */ u16 selectFileTitleA;
+ /* 0x1CA70 */ u16 openFileTitleA;
+ /* 0x1CA72 */ u16 windowA;
+ /* 0x1CA74 */ u16 fileButtonsA[3];
+ /* 0x1CA7A */ u16 fileNameBoxesA[3];
+ /* 0x1CA80 */ u16 fileNamesA[3];
+ /* 0x1CA86 */ u16 metalJointsA[3];
+ /* 0x1CA8C */ u16 fileInfoA;
+ /* 0x1CA8E */ u16 targetFileInfoBoxA;
+ /* 0x1CA90 */ u16 unkFileInfoBoxA;
+ /* 0x1CA92 */ u16 copyButtonA;
+ /* 0x1CA94 */ u16 eraseButtonA;
+ /* 0x1CA96 */ u16 yesBiuttonA;
+ /* 0x1CA98 */ u16 quitButtonA;
+ /* 0x1CA9A */ u16 optionButtonA;
+ /* 0x1CA9C */ u16 newFileNameBoxA;
+ /* 0x1CA9E */ u16 decideCancelTextA;
+ /* 0x1CAA0 */ u16 fileEmptyTextA;
+ /* 0x1CAA2 */ u16 highlightColorR;
+ /* 0x1CAA4 */ u16 highlightColorG;
+ /* 0x1CAA6 */ u16 highlightColorB;
+ /* 0x1CAA8 */ u16 highlightColorA;
+ /* 0x1CAAA */ u16 highlightColorAIncrease;
+ /* 0x1CAAC */ char unk_1CAAC[0x6];
+ /* 0x1CAB2 */ u16 stickXTimer;
+ /* 0x1CAB4 */ u16 stickYTimer;
+ /* 0x1CAB6 */ u16 idxXOff;
+ /* 0x1CAB8 */ u16 idxYOff;
+ /* 0x1CABA */ s16 stickX;
+ /* 0x1CABC */ s16 stickY;
+ /* 0x1CABE */ u16 newFileNameBoxX;
+ /* 0x1CAC0 */ u16 windowX;
+ /* 0x1CAC4 */ f32 windowRotX;
+ /* 0x1CAC8 */ u16 kbdButtonIdx;
+ /* 0x1CACA */ u16 unk_1CACA;
+ /* 0x1CACC */ u16 kbdCharBoxA;
+ /* 0x1CACE */ s16 kbdCharIdx;
+ /* 0x1CAD0 */ s16 kbdCharX;
+ /* 0x1CAD2 */ s16 kbdCharY;
+ /* 0x1CAD4 */ s16 newFileNameCharCount;
+ /* 0x1CAD6 */ u16 unk_1CAD6[3];
+} FileChooseContext; // size = 0x1CADC
+
typedef enum {
DPM_UNK = 0,
DPM_PLAYER = 1,
diff --git a/include/z64save.h b/include/z64save.h
new file mode 100644
index 000000000..7ef1cba0e
--- /dev/null
+++ b/include/z64save.h
@@ -0,0 +1,190 @@
+#ifndef _Z64SAVE_H_
+#define _Z64SAVE_H_
+
+#include "ultra64.h"
+#include "z64math.h"
+
+typedef struct {
+ /* 0x00 */ u8 buttonItems[4];
+ /* 0x04 */ u8 cButtonSlots[3];
+ /* 0x08 */ u16 equipment;
+} ItemEquips; // size = 0x0A
+
+typedef struct {
+ /* 0x00 */ u8 items[24];
+ /* 0x18 */ s8 ammo[16];
+ /* 0x28 */ u16 equipment;
+ /* 0x2C */ u32 upgrades;
+ /* 0x30 */ u32 questItems;
+ /* 0x34 */ u8 dungeonItems[20];
+ /* 0x48 */ s8 dungeonKeys[19];
+ /* 0x5B */ s8 defenseHearts;
+ /* 0x5C */ s16 gsTokens;
+} Inventory; // size = 0x5E
+
+typedef struct {
+ /* 0x00 */ u32 chest;
+ /* 0x04 */ u32 swch;
+ /* 0x08 */ u32 clear;
+ /* 0x0C */ u32 collect;
+ /* 0x10 */ u32 unk;
+ /* 0x14 */ u32 rooms;
+ /* 0x18 */ u32 floors;
+} SavedSceneFlags; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ s16 scene;
+ /* 0x02 */ Vec3s pos;
+ /* 0x08 */ s16 angle;
+} HorseData; // size = 0x0A
+
+typedef struct {
+ /* 0x00 */ Vec3f pos;
+ /* 0x0C */ s16 yaw;
+ /* 0x0E */ s16 playerParams;
+ /* 0x10 */ s16 entranceIndex;
+ /* 0x12 */ u8 roomIndex;
+ /* 0x13 */ s8 data;
+ /* 0x14 */ u32 tempSwchFlags;
+ /* 0x18 */ u32 tempCollectFlags;
+} RespawnData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Vec3i pos;
+ /* 0x0C */ s32 yaw;
+ /* 0x10 */ s32 playerParams;
+ /* 0x14 */ s32 entranceIndex;
+ /* 0x18 */ s32 roomIndex;
+ /* 0x1C */ s32 set;
+ /* 0x20 */ s32 tempSwchFlags;
+ /* 0x24 */ s32 tempCollectFlags;
+} FaroresWindData; // size = 0x28
+
+typedef struct {
+ /* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory"
+ /* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child
+ /* 0x0008 */ s32 cutsceneIndex;
+ /* 0x000C */ u16 dayTime; // "zelda_time"
+ /* 0x0010 */ s32 nightFlag;
+ /* 0x0014 */ s32 numDays;
+ /* 0x0018 */ s32 unk_18; // increments with numDays, gets reset by goron for bgs and one other use
+ /* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information"
+ /* 0x0022 */ s16 deaths;
+ /* 0x0024 */ char playerName[8];
+ /* 0x002C */ s16 n64ddFlag;
+ /* 0x002E */ s16 healthCapacity; // "max_life"
+ /* 0x0030 */ s16 health; // "now_life"
+ /* 0x0032 */ s8 magicLevel;
+ /* 0x0033 */ s8 magic;
+ /* 0x0034 */ s16 rupees;
+ /* 0x0036 */ u16 swordHealth;
+ /* 0x0038 */ u16 naviTimer;
+ /* 0x003A */ u8 magicAcquired;
+ /* 0x003B */ char unk_3B[0x01];
+ /* 0x003C */ u8 doubleMagic;
+ /* 0x003D */ u8 doubleDefense;
+ /* 0x003E */ u8 bgsFlag;
+ /* 0x003F */ u8 ocarinaGameReward;
+ /* 0x0040 */ ItemEquips childEquips;
+ /* 0x004A */ ItemEquips adultEquips;
+ /* 0x0054 */ u32 unk_54; // this may be incorrect, currently used for alignement
+ /* 0x0058 */ char unk_58[0x0E];
+ /* 0x0066 */ s16 savedSceneNum;
+ /* 0x0068 */ ItemEquips equips;
+ /* 0x0074 */ Inventory inventory;
+ /* 0x00D4 */ SavedSceneFlags sceneFlags[124];
+ /* 0x0E64 */ FaroresWindData fw;
+ /* 0x0E8C */ char unk_E8C[0x10];
+ /* 0x0E9C */ s32 gsFlags[6];
+ /* 0x0EB4 */ char unk_EB4[0x10];
+ /* 0x0EC4 */ s32 horseRaceRecord;
+ /* 0x0EC8 */ char unk_EC8[0x0C];
+ /* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf"
+ /* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf"
+ /* 0x0EF8 */ u16 infTable[30]; // "inf_table"
+ /* 0x0F34 */ char unk_F34[0x04];
+ /* 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
+ /* 0x0F3C */ char unk_F3C[0x4];
+ /* 0x0F40 */ u8 scarecrowCustomSongSet;
+ /* 0x0F41 */ u8 scarecrowCustomSong[0x360];
+ /* 0x12A1 */ char unk_12A1[0x24];
+ /* 0x12C5 */ u8 scarecrowSpawnSongSet;
+ /* 0x12C6 */ u8 scarecrowSpawnSong[0x80];
+ /* 0x1346 */ char unk_1346[0x02];
+ /* 0x1348 */ HorseData horseData;
+ /* 0x1352 */ u16 checksum; // "check_sum"
+ /* 0x1354 */ s32 fileNum; // "file_no"
+ /* 0x1358 */ char unk_1358[0x0004];
+ /* 0x135C */ s32 gameMode;
+ /* 0x1360 */ s32 sceneSetupIndex;
+ /* 0x1364 */ s32 respawnFlag; // "restart_flag"
+ /* 0x1368 */ RespawnData respawn[3]; // "restart_data"
+ /* 0x13BC */ f32 entranceSpeed;
+ /* 0x13C0 */ u16 entranceSound;
+ /* 0x13C2 */ char unk_13C2[0x0001];
+ /* 0x13C3 */ u8 unk_13C3;
+ /* 0x13C4 */ s16 dogParams;
+ /* 0x13C6 */ u8 textTriggerFlags;
+ /* 0x13C7 */ u8 showTitleCard;
+ /* 0x13C8 */ s16 nayrusLoveTimer;
+ /* 0x13CA */ char unk_13CA[0x0002];
+ /* 0x13CC */ s16 rupeeAccumulator;
+ /* 0x13CE */ s16 timer1State;
+ /* 0x13D0 */ s16 timer1Value;
+ /* 0x13D2 */ s16 timer2State;
+ /* 0x13D4 */ s16 timer2Value;
+ /* 0x13D6 */ s16 timerX[2];
+ /* 0x13DA */ s16 timerY[2];
+ /* 0x13DE */ char unk_13DE[0x0002];
+ /* 0x13E0 */ u8 seqIndex;
+ /* 0x13E1 */ u8 nightSeqIndex;
+ /* 0x13E2 */ u8 buttonStatus[5];
+ /* 0x13E7 */ u8 unk_13E7; // alpha related
+ /* 0x13E8 */ u16 unk_13E8; // alpha type?
+ /* 0x13EA */ u16 unk_13EA; // also alpha type?
+ /* 0x13EC */ u16 unk_13EC; // alpha type counter?
+ /* 0x13EE */ u16 unk_13EE; // previous alpha type?
+ /* 0x13F0 */ s16 unk_13F0; // magic related
+ /* 0x13F2 */ s16 unk_13F2; // magic related
+ /* 0x13F4 */ s16 unk_13F4; // magic related
+ /* 0x13F6 */ s16 unk_13F6; // magic related
+ /* 0x13F8 */ s16 unk_13F8; // magic related
+ /* 0x13FA */ u16 eventInf[4]; // "event_inf"
+ /* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index
+ /* 0x1404 */ u16 minigameState;
+ /* 0x1406 */ u16 minigameScore; // "yabusame_total"
+ /* 0x1408 */ char unk_1408[0x0001];
+ /* 0x1409 */ u8 language;
+ /* 0x140A */ u8 audioSetting;
+ /* 0x140B */ char unk_140B[0x0001];
+ /* 0x140C */ u8 zTargetSetting; // 0: Switch; 1: Hold
+ /* 0x140E */ u16 unk_140E; // bgm related
+ /* 0x1410 */ u8 unk_1410; // transition related
+ /* 0x1411 */ char unk_1411[0x0001];
+ /* 0x1412 */ u16 nextCutsceneIndex;
+ /* 0x1414 */ u8 cutsceneTrigger;
+ /* 0x1415 */ u8 chamberCutsceneNum;
+ /* 0x1416 */ u16 nextDayTime; // "next_zelda_time"
+ /* 0x1418 */ u8 fadeDuration;
+ /* 0x1419 */ u8 unk_1419; // transition related
+ /* 0x141A */ u16 environmentTime;
+ /* 0x141C */ u8 dogIsLost;
+ /* 0x141D */ u8 nextTransition;
+ /* 0x141E */ char unk_141E[0x0002];
+ /* 0x1420 */ s16 worldMapArea;
+ /* 0x1422 */ s16 unk_1422; // day time related
+ /* 0x1424 */ s16 healthAccumulator;
+} SaveContext; // size = 0x1428
+
+typedef enum {
+ /* 0x00 */ RESPAWN_MODE_DOWN, /* Normal Void Outs */
+ /* 0x01 */ RESPAWN_MODE_RETURN, /* Grotto Returnpoints */
+ /* 0x02 */ RESPAWN_MODE_TOP /* Farore's Wind */
+} RespawnMode;
+
+typedef enum {
+ /* 0x00 */ BTN_ENABLED,
+ /* 0xFF */ BTN_DISABLED = 0xFF
+} ButtonStatus;
+
+#endif
diff --git a/spec b/spec
index 58a3aa5f1..9f197ebd2 100644
--- a/spec
+++ b/spec
@@ -346,8 +346,7 @@ beginseg
include "build/src/code/z_skin_awb.o"
include "build/src/code/z_skin_matrix.o"
include "build/src/code/z_sram.o"
- include "build/data/z_sram.data.o"
- include "build/src/code/code_800A9D40.o"
+ include "build/src/code/z_ss_sram.o"
include "build/src/code/code_800A9F30.o"
include "build/data/z_text.data.o"
include "build/src/code/z_view.o"
diff --git a/src/code/code_80097A00.c b/src/code/code_80097A00.c
index b61559de6..457fe72ce 100644
--- a/src/code/code_80097A00.c
+++ b/src/code/code_80097A00.c
@@ -85,7 +85,7 @@ u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) {
sp26 >>= gEquipShifts[equipment];
gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
- gSaveContext.equipment ^= gBitFlags[sp26 - 1] << gEquipShifts[equipment];
+ gSaveContext.inventory.equipment ^= gBitFlags[sp26 - 1] << gEquipShifts[equipment];
if (equipment == EQUIP_TUNIC) {
gSaveContext.equips.equipment |= 0x0100;
@@ -104,6 +104,6 @@ u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) {
}
void Inventory_ChangeUpgrade(s16 upgrade, s16 value) {
- gSaveContext.upgrades &= gUpgradeNegMasks[upgrade];
- gSaveContext.upgrades |= value << gUpgradeShifts[upgrade];
+ gSaveContext.inventory.upgrades &= gUpgradeNegMasks[upgrade];
+ gSaveContext.inventory.upgrades |= value << gUpgradeShifts[upgrade];
}
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index b9638879b..4c90d800a 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -1949,10 +1949,10 @@ void func_800304B0(GlobalContext* globalCtx) {
// Actor_InitContext
void func_800304DC(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEntry* actorEntry) {
ActorOverlay* overlayEntry;
- SaveSceneFlags* saveSceneFlags;
+ SavedSceneFlags* savedSceneFlags;
s32 i;
- saveSceneFlags = &gSaveContext.sceneFlags[globalCtx->sceneNum];
+ savedSceneFlags = &gSaveContext.sceneFlags[globalCtx->sceneNum];
bzero(actorCtx, sizeof(*actorCtx));
@@ -1967,10 +1967,10 @@ void func_800304DC(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEntry*
overlayEntry++;
}
- actorCtx->flags.chest = saveSceneFlags->chest;
- actorCtx->flags.swch = saveSceneFlags->swch;
- actorCtx->flags.clear = saveSceneFlags->clear;
- actorCtx->flags.collect = saveSceneFlags->collect;
+ actorCtx->flags.chest = savedSceneFlags->chest;
+ actorCtx->flags.swch = savedSceneFlags->swch;
+ actorCtx->flags.clear = savedSceneFlags->clear;
+ actorCtx->flags.collect = savedSceneFlags->collect;
func_8002CDE4(globalCtx, &actorCtx->titleCtx);
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 9210fe1d1..4c4401617 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -2009,7 +2009,7 @@ void Cutscene_HandleEntranceTriggers(GlobalContext* globalCtx) {
Flags_SetEventChkInf(entranceCutscene->flag);
Cutscene_SetSegment(globalCtx, entranceCutscene->segAddr);
gSaveContext.cutsceneTrigger = 2;
- gSaveContext.unk_13C7 = 0;
+ gSaveContext.showTitleCard = false;
break;
}
}
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index d3552c419..6db1527b1 100644
--- a/src/code/z_elf_message.c
+++ b/src/code/z_elf_message.c
@@ -22,8 +22,8 @@ u32 ElfMessage_CheckCondition(ElfMessage* msg) {
flag = 1 << (msg->byte1 & 0x0F);
return ((msg->byte0 & 1) == 1) == ((flag & gSaveContext.eventChkInf[(msg->byte1 & 0xF0) >> 4]) != 0);
case 2:
- return ((msg->byte0 & 1) == 1) ==
- ((gSaveContext.dungeonItems[gSaveContext.mapIndex] & gBitFlags[msg->byte1 - ITEM_KEY_BOSS]) != 0);
+ return ((msg->byte0 & 1) == 1) == ((gSaveContext.inventory.dungeonItems[gSaveContext.mapIndex] &
+ gBitFlags[msg->byte1 - ITEM_KEY_BOSS]) != 0);
case 4:
return ((msg->byte0 & 1) == 1) == (msg->byte3 == INV_CONTENT(msg->byte1));
case 6:
@@ -33,7 +33,7 @@ u32 ElfMessage_CheckCondition(ElfMessage* msg) {
case 0x10:
return ((msg->byte0 & 1) == 1) ==
(((gBitFlags[msg->byte3 - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]) &
- gSaveContext.equipment) != 0);
+ gSaveContext.inventory.equipment) != 0);
case 0x20:
return ((msg->byte0 & 1) == 1) ==
((CHECK_QUEST_ITEM(msg->byte3 - ITEM_SONG_MINUET + QUEST_SONG_MINUET)) != 0);
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 70b8e2c31..016743503 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -77,7 +77,7 @@ void func_800775D8() {
}
s32 func_800775E4() {
- return gSaveContext.unk_14;
+ return gSaveContext.numDays;
}
void func_800775F0(u16 arg0) {
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index 64fe2e53e..63c535008 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -204,7 +204,7 @@ void Health_Draw(GlobalContext* globalCtx) {
f32 sp144 = interfaceCtx->unk_22A * 0.1f;
s32 curCombineModeSet = 0;
u8* curBgImgLoaded = NULL;
- s32 ddHeartCountMinusOne = gSaveContext.defenseHearts - 1;
+ s32 ddHeartCountMinusOne = gSaveContext.inventory.defenseHearts - 1;
OPEN_DISPS(gfxCtx, "../z_lifemeter.c", 353);
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index c409d0cf8..68e68e0f3 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -46,7 +46,7 @@ void Map_SetFloorPalettesData(GlobalContext* globalCtx, s16 floor) {
interfaceCtx->unk_140[i + 16] = 0;
}
- if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
+ if (gSaveContext.inventory.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
interfaceCtx->unk_140[30] = 0;
interfaceCtx->unk_140[31] = 1;
}
@@ -383,7 +383,7 @@ void Minimap_Draw(GlobalContext* globalCtx) {
gDPSetCombineLERP(oGfxCtx->overlay.p++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0,
PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0);
- if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
+ if (gSaveContext.inventory.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
gDPSetPrimColor(oGfxCtx->overlay.p++, 0, 0, 100, 255, 255, interfaceCtx->minimapAlpha);
gDPLoadTextureBlock_4b(oGfxCtx->overlay.p++, interfaceCtx->mapSegment, G_IM_FMT_I, 96, 85, 0,
@@ -395,7 +395,7 @@ void Minimap_Draw(GlobalContext* globalCtx) {
0, 0, 1024, 1024);
}
- if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_COMPASS]) {
+ if (gSaveContext.inventory.dungeonItems[mapIndex] & gBitFlags[DUNGEON_COMPASS]) {
Minimap_DrawCompassIcons(globalCtx); // Draw icons for the player spawn and current position
func_80094520(globalCtx->state.gfxCtx);
MapMark_DrawConditionally(globalCtx);
@@ -525,7 +525,7 @@ void Map_Update(GlobalContext* globalCtx) {
case SCENE_HAKADANCH:
case SCENE_ICE_DOUKUTO:
interfaceCtx->unk_140[30] = 0;
- if (gSaveContext.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
+ if (gSaveContext.inventory.dungeonItems[mapIndex] & gBitFlags[DUNGEON_MAP]) {
interfaceCtx->unk_140[31] = 1;
} else {
interfaceCtx->unk_140[31] = 0;
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 97ef34dc4..87b078704 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -636,7 +636,7 @@ void func_80083108(GlobalContext* globalCtx) {
Interface_LoadItemIcon1(globalCtx, 0);
} else {
- if (gSaveContext.items[SLOT_BOW] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[SLOT_BOW] == ITEM_NONE) {
gSaveContext.equips.buttonItems[0] = ITEM_NONE;
} else {
Interface_LoadItemIcon1(globalCtx, 0);
@@ -752,7 +752,7 @@ void func_80083108(GlobalContext* globalCtx) {
if (player->stateFlags1 & 0x00800000) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) &&
(gSaveContext.equips.buttonItems[0] != ITEM_BOW)) {
- if (gSaveContext.items[SLOT_BOW] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[SLOT_BOW] == ITEM_NONE) {
gSaveContext.equips.buttonItems[0] = ITEM_NONE;
} else {
gSaveContext.equips.buttonItems[0] = ITEM_BOW;
@@ -1154,7 +1154,7 @@ void Inventory_SwapAgeEquipment(void) {
if (gSaveContext.adultEquips.buttonItems[0] == ITEM_NONE) {
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
- if (gSaveContext.items[SLOT_NUT] != ITEM_NONE) {
+ if (gSaveContext.inventory.items[SLOT_NUT] != ITEM_NONE) {
gSaveContext.equips.buttonItems[1] = ITEM_NUT;
gSaveContext.equips.cButtonSlots[0] = SLOT_NUT;
} else {
@@ -1162,7 +1162,7 @@ void Inventory_SwapAgeEquipment(void) {
}
gSaveContext.equips.buttonItems[2] = ITEM_BOMB;
- gSaveContext.equips.buttonItems[3] = gSaveContext.items[SLOT_OCARINA];
+ gSaveContext.equips.buttonItems[3] = gSaveContext.inventory.items[SLOT_OCARINA];
gSaveContext.equips.cButtonSlots[1] = SLOT_BOMB;
gSaveContext.equips.cButtonSlots[2] = SLOT_OCARINA;
gSaveContext.equips.equipment = 0x1122;
@@ -1179,7 +1179,8 @@ void Inventory_SwapAgeEquipment(void) {
((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
(gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.equips.cButtonSlots[i - 1]);
- gSaveContext.equips.buttonItems[i] = gSaveContext.items[gSaveContext.equips.cButtonSlots[i - 1]];
+ gSaveContext.equips.buttonItems[i] =
+ gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[i - 1]];
}
}
@@ -1209,7 +1210,8 @@ void Inventory_SwapAgeEquipment(void) {
((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
(gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.equips.cButtonSlots[i - 1]);
- gSaveContext.equips.buttonItems[i] = gSaveContext.items[gSaveContext.equips.cButtonSlots[i - 1]];
+ gSaveContext.equips.buttonItems[i] =
+ gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[i - 1]];
}
}
@@ -1222,7 +1224,7 @@ void Inventory_SwapAgeEquipment(void) {
temp = gEquipMasks[EQUIP_SHIELD] & gSaveContext.equips.equipment;
if (temp != 0) {
temp >>= gEquipShifts[EQUIP_SHIELD];
- if (!(gBitFlags[temp + 3] & gSaveContext.equipment)) {
+ if (!(gBitFlags[temp + 3] & gSaveContext.inventory.equipment)) {
gSaveContext.equips.equipment &= gEquipNegMasks[EQUIP_SHIELD];
}
}
@@ -1238,10 +1240,10 @@ void Interface_InitHorsebackArchery(GlobalContext* globalCtx) {
}
void func_800849EC(GlobalContext* globalCtx) {
- gSaveContext.equipment |= gBitFlags[2] << gEquipShifts[EQUIP_SWORD];
- gSaveContext.equipment ^= 8 << gEquipShifts[EQUIP_SWORD];
+ gSaveContext.inventory.equipment |= gBitFlags[2] << gEquipShifts[EQUIP_SWORD];
+ gSaveContext.inventory.equipment ^= 8 << gEquipShifts[EQUIP_SWORD];
- if (gBitFlags[3] & gSaveContext.equipment) {
+ if (gBitFlags[3] & gSaveContext.inventory.equipment) {
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KNIFE;
} else {
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS;
@@ -1318,15 +1320,15 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("item_get_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.items[slot]);
+ osSyncPrintf("item_get_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.inventory.items[slot]);
osSyncPrintf(VT_RST);
if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) {
- gSaveContext.questItems |= gBitFlags[item - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST];
+ gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST];
osSyncPrintf(VT_FGCOL(YELLOW));
// Translates to: "Seals = %x"
- osSyncPrintf("封印 = %x\n", gSaveContext.questItems);
+ osSyncPrintf("封印 = %x\n", gSaveContext.inventory.questItems);
osSyncPrintf(VT_RST);
if (item == ITEM_MEDALLION_WATER) {
@@ -1335,53 +1337,53 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_SONG_MINUET) && (item <= ITEM_SONG_STORMS)) {
- gSaveContext.questItems |= gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET];
+ gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET];
osSyncPrintf(VT_FGCOL(YELLOW));
// Translates to: "Musical scores = %x"
- osSyncPrintf("楽譜 = %x\n", gSaveContext.questItems);
+ osSyncPrintf("楽譜 = %x\n", gSaveContext.inventory.questItems);
// Translates to: "Musical scores = %x (%x) (%x)"
- osSyncPrintf("楽譜 = %x (%x) (%x)\n", gSaveContext.questItems,
+ osSyncPrintf("楽譜 = %x (%x) (%x)\n", gSaveContext.inventory.questItems,
gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET], gBitFlags[item - ITEM_SONG_MINUET]);
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if ((item >= ITEM_KOKIRI_EMERALD) && (item <= ITEM_ZORA_SAPPHIRE)) {
- gSaveContext.questItems |= gBitFlags[item - ITEM_KOKIRI_EMERALD + QUEST_KOKIRI_EMERALD];
+ gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_KOKIRI_EMERALD + QUEST_KOKIRI_EMERALD];
osSyncPrintf(VT_FGCOL(YELLOW));
// Translates to: "Spiritual Stones = %x"
- osSyncPrintf("精霊石 = %x\n", gSaveContext.questItems);
+ osSyncPrintf("精霊石 = %x\n", gSaveContext.inventory.questItems);
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if ((item == ITEM_STONE_OF_AGONY) || (item == ITEM_GERUDO_CARD)) {
- gSaveContext.questItems |= gBitFlags[item - ITEM_STONE_OF_AGONY + QUEST_STONE_OF_AGONY];
+ gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_STONE_OF_AGONY + QUEST_STONE_OF_AGONY];
osSyncPrintf(VT_FGCOL(YELLOW));
// Translates to: "Items = %x"
- osSyncPrintf("アイテム = %x\n", gSaveContext.questItems);
+ osSyncPrintf("アイテム = %x\n", gSaveContext.inventory.questItems);
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if (item == ITEM_SKULL_TOKEN) {
- gSaveContext.questItems |= gBitFlags[item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN];
- gSaveContext.gsTokens++;
+ gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN];
+ gSaveContext.inventory.gsTokens++;
osSyncPrintf(VT_FGCOL(YELLOW));
// Translates to: "N Coins = %x(%d)"
- osSyncPrintf("Nコイン = %x(%d)\n", gSaveContext.questItems, gSaveContext.gsTokens);
+ osSyncPrintf("Nコイン = %x(%d)\n", gSaveContext.inventory.questItems, gSaveContext.inventory.gsTokens);
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if ((item >= ITEM_SWORD_KOKIRI) && (item <= ITEM_SWORD_BGS)) {
- gSaveContext.equipment |= gBitFlags[item - ITEM_SWORD_KOKIRI] << gEquipShifts[EQUIP_SWORD];
+ gSaveContext.inventory.equipment |= gBitFlags[item - ITEM_SWORD_KOKIRI] << gEquipShifts[EQUIP_SWORD];
if (item == ITEM_SWORD_BGS) {
gSaveContext.swordHealth = 8;
if (ALL_EQUIP_VALUE(EQUIP_SWORD) == 0xF) {
- gSaveContext.equipment ^= 8 << gEquipShifts[EQUIP_SWORD];
+ gSaveContext.inventory.equipment ^= 8 << gEquipShifts[EQUIP_SWORD];
if (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KNIFE) {
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS;
Interface_LoadItemIcon1(globalCtx, 0);
@@ -1396,23 +1398,23 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_SHIELD_DEKU) && (item <= ITEM_SHIELD_MIRROR)) {
- gSaveContext.equipment |= (gBitFlags[item - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_SHIELD]);
+ gSaveContext.inventory.equipment |= (gBitFlags[item - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_SHIELD]);
return ITEM_NONE;
} else if ((item >= ITEM_TUNIC_KOKIRI) && (item <= ITEM_TUNIC_ZORA)) {
- gSaveContext.equipment |= (gBitFlags[item - ITEM_TUNIC_KOKIRI] << gEquipShifts[EQUIP_TUNIC]);
+ gSaveContext.inventory.equipment |= (gBitFlags[item - ITEM_TUNIC_KOKIRI] << gEquipShifts[EQUIP_TUNIC]);
return ITEM_NONE;
} else if ((item >= ITEM_BOOTS_KOKIRI) && (item <= ITEM_BOOTS_HOVER)) {
- gSaveContext.equipment |= (gBitFlags[item - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]);
+ gSaveContext.inventory.equipment |= (gBitFlags[item - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]);
return ITEM_NONE;
} else if ((item == ITEM_KEY_BOSS) || (item == ITEM_COMPASS) || (item == ITEM_DUNGEON_MAP)) {
- gSaveContext.dungeonItems[gSaveContext.mapIndex] |= gBitFlags[item - ITEM_KEY_BOSS];
+ gSaveContext.inventory.dungeonItems[gSaveContext.mapIndex] |= gBitFlags[item - ITEM_KEY_BOSS];
return ITEM_NONE;
} else if (item == ITEM_KEY_SMALL) {
- if (gSaveContext.dungeonKeys[gSaveContext.mapIndex] < 0) {
- gSaveContext.dungeonKeys[gSaveContext.mapIndex] = 1;
+ if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] < 0) {
+ gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] = 1;
return ITEM_NONE;
} else {
- gSaveContext.dungeonKeys[gSaveContext.mapIndex]++;
+ gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]++;
return ITEM_NONE;
}
} else if ((item == ITEM_QUIVER_30) || (item == ITEM_BOW)) {
@@ -1485,28 +1487,28 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
Inventory_ChangeUpgrade(UPG_WALLET, 2);
return ITEM_NONE;
} else if (item == ITEM_STICK_UPGRADE_20) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_STICK) = ITEM_STICK;
}
Inventory_ChangeUpgrade(UPG_STICKS, 2);
AMMO(ITEM_STICK) = CAPACITY(UPG_STICKS, 2);
return ITEM_NONE;
} else if (item == ITEM_STICK_UPGRADE_30) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_STICK) = ITEM_STICK;
}
Inventory_ChangeUpgrade(UPG_STICKS, 3);
AMMO(ITEM_STICK) = CAPACITY(UPG_STICKS, 3);
return ITEM_NONE;
} else if (item == ITEM_NUT_UPGRADE_30) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_NUT) = ITEM_NUT;
}
Inventory_ChangeUpgrade(UPG_NUTS, 2);
AMMO(ITEM_NUT) = CAPACITY(UPG_NUTS, 2);
return ITEM_NONE;
} else if (item == ITEM_NUT_UPGRADE_40) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_NUT) = ITEM_NUT;
}
Inventory_ChangeUpgrade(UPG_NUTS, 3);
@@ -1522,7 +1524,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
return ITEM_NONE;
} else if (item == ITEM_STICK) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_STICKS, 1);
AMMO(ITEM_STICK) = 1;
} else {
@@ -1532,7 +1534,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
}
} else if ((item == ITEM_STICKS_5) || (item == ITEM_STICKS_10)) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_STICKS, 1);
AMMO(ITEM_STICK) = sAmmoRefillCounts[item - ITEM_STICKS_5];
} else {
@@ -1543,7 +1545,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
item = ITEM_STICK;
} else if (item == ITEM_NUT) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_NUTS, 1);
AMMO(ITEM_NUT) = ITEM_NUT;
} else {
@@ -1553,7 +1555,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
}
} else if ((item == ITEM_NUTS_5) || (item == ITEM_NUTS_10)) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_NUTS, 1);
AMMO(ITEM_NUT) += sAmmoRefillCounts[item - ITEM_NUTS_5];
// Translates to: "Deku Nuts %d(%d)=%d BS_count=%d"
@@ -1583,7 +1585,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
return ITEM_NONE;
} else if (item == ITEM_BOMBCHU) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
AMMO(ITEM_BOMBCHU) = 10;
return ITEM_NONE;
@@ -1595,7 +1597,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
return ITEM_NONE;
}
} else if ((item == ITEM_BOMBCHUS_5) || (item == ITEM_BOMBCHUS_20)) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
AMMO(ITEM_BOMBCHU) += sAmmoRefillCounts[item - ITEM_BOMBCHUS_5 + 8];
return ITEM_NONE;
@@ -1660,7 +1662,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
return ITEM_NONE;
} else if (item == ITEM_BEAN) {
- if (gSaveContext.items[slot] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(item) = item;
AMMO(ITEM_BEAN) = 1;
BEANS_BOUGHT = 1;
@@ -1670,7 +1672,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
return ITEM_NONE;
} else if ((item == ITEM_HEART_PIECE_2) || (item == ITEM_HEART_PIECE)) {
- gSaveContext.questItems += 1 << (QUEST_HEART_PIECE + 4);
+ gSaveContext.inventory.questItems += 1 << (QUEST_HEART_PIECE + 4);
return ITEM_NONE;
} else if (item == ITEM_HEART_CONTAINER) {
gSaveContext.healthCapacity += 0x10;
@@ -1712,8 +1714,8 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
return ITEM_NONE;
} else if (item == ITEM_BOTTLE) {
for (i = 0; i < 4; i++) {
- if (gSaveContext.items[SLOT(item) + i] == ITEM_NONE) {
- gSaveContext.items[SLOT(item) + i] = item;
+ if (gSaveContext.inventory.items[SLOT(item) + i] == ITEM_NONE) {
+ gSaveContext.inventory.items[SLOT(item) + i] = item;
return ITEM_NONE;
}
}
@@ -1727,7 +1729,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
for (i = 0; i < 4; i++) {
- if (gSaveContext.items[bottleSlot + i] == ITEM_BOTTLE) {
+ if (gSaveContext.inventory.items[bottleSlot + i] == ITEM_BOTTLE) {
// Translates to: "Item_Pt(1)=%d Item_Pt(2)=%d Item_Pt(3)=%d Empty Bottle=%d Content=%d"
osSyncPrintf("Item_Pt(1)=%d Item_Pt(2)=%d Item_Pt(3)=%d 空瓶=%d 中味=%d\n",
gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
@@ -1747,14 +1749,14 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
gSaveContext.buttonStatus[3] = BTN_ENABLED;
}
- gSaveContext.items[bottleSlot + i] = item;
+ gSaveContext.inventory.items[bottleSlot + i] = item;
return ITEM_NONE;
}
}
} else {
for (i = 0; i < 4; i++) {
- if (gSaveContext.items[bottleSlot + i] == ITEM_NONE) {
- gSaveContext.items[bottleSlot + i] = item;
+ if (gSaveContext.inventory.items[bottleSlot + i] == ITEM_NONE) {
+ gSaveContext.inventory.items[bottleSlot + i] = item;
return ITEM_NONE;
}
}
@@ -1784,7 +1786,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
return ITEM_NONE;
}
- oldItem = gSaveContext.items[slot];
+ oldItem = gSaveContext.inventory.items[slot];
osSyncPrintf("Item_Register(%d)=%d %d\n", slot, item, oldItem);
INV_CONTENT(item) = item;
@@ -1805,7 +1807,7 @@ u8 Item_CheckObtainability(u8 item) {
}
osSyncPrintf(VT_FGCOL(GREEN));
- osSyncPrintf("item_get_non_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.items[slot]);
+ osSyncPrintf("item_get_non_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.inventory.items[slot]);
osSyncPrintf(VT_RST);
if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) {
@@ -1815,25 +1817,26 @@ u8 Item_CheckObtainability(u8 item) {
} else if ((item >= ITEM_SWORD_KOKIRI) && (item <= ITEM_SWORD_BGS)) {
if (item == ITEM_SWORD_BGS) {
return ITEM_NONE;
- } else if ((gBitFlags[item - ITEM_SWORD_KOKIRI] << gEquipShifts[EQUIP_SWORD]) & gSaveContext.equipment) {
+ } else if ((gBitFlags[item - ITEM_SWORD_KOKIRI] << gEquipShifts[EQUIP_SWORD]) &
+ gSaveContext.inventory.equipment) {
return item;
} else {
return ITEM_NONE;
}
} else if ((item >= ITEM_SHIELD_DEKU) && (item <= ITEM_SHIELD_MIRROR)) {
- if ((gBitFlags[item - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_SHIELD]) & gSaveContext.equipment) {
+ if ((gBitFlags[item - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_SHIELD]) & gSaveContext.inventory.equipment) {
return item;
} else {
return ITEM_NONE;
}
} else if ((item >= ITEM_TUNIC_KOKIRI) && (item <= ITEM_TUNIC_ZORA)) {
- if ((gBitFlags[item - ITEM_TUNIC_KOKIRI] << gEquipShifts[EQUIP_TUNIC]) & gSaveContext.equipment) {
+ if ((gBitFlags[item - ITEM_TUNIC_KOKIRI] << gEquipShifts[EQUIP_TUNIC]) & gSaveContext.inventory.equipment) {
return item;
} else {
return ITEM_NONE;
}
} else if ((item >= ITEM_BOOTS_KOKIRI) && (item <= ITEM_BOOTS_HOVER)) {
- if ((gBitFlags[item - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]) & gSaveContext.equipment) {
+ if ((gBitFlags[item - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]) & gSaveContext.inventory.equipment) {
return item;
} else {
return ITEM_NONE;
@@ -1904,13 +1907,13 @@ u8 Item_CheckObtainability(u8 item) {
}
for (i = 0; i < 4; i++) {
- if (gSaveContext.items[bottleSlot + i] == ITEM_BOTTLE) {
+ if (gSaveContext.inventory.items[bottleSlot + i] == ITEM_BOTTLE) {
return ITEM_NONE;
}
}
} else {
for (i = 0; i < 4; i++) {
- if (gSaveContext.items[bottleSlot + i] == ITEM_NONE) {
+ if (gSaveContext.inventory.items[bottleSlot + i] == ITEM_NONE) {
return ITEM_NONE;
}
}
@@ -1919,7 +1922,7 @@ u8 Item_CheckObtainability(u8 item) {
return ITEM_NONE;
}
- return gSaveContext.items[slot];
+ return gSaveContext.inventory.items[slot];
}
void Inventory_DeleteItem(u16 item, u16 invSlot) {
@@ -1929,9 +1932,9 @@ void Inventory_DeleteItem(u16 item, u16 invSlot) {
BEANS_BOUGHT = 0;
}
- gSaveContext.items[invSlot] = ITEM_NONE;
+ gSaveContext.inventory.items[invSlot] = ITEM_NONE;
- osSyncPrintf("\nItem_Register(%d)\n", invSlot, gSaveContext.items[invSlot]);
+ osSyncPrintf("\nItem_Register(%d)\n", invSlot, gSaveContext.inventory.items[invSlot]);
for (i = 1; i < 4; i++) {
if (gSaveContext.equips.buttonItems[i] == item) {
@@ -1944,9 +1947,9 @@ void Inventory_DeleteItem(u16 item, u16 invSlot) {
s32 Inventory_ReplaceItem(GlobalContext* globalCtx, u16 oldItem, u16 newItem) {
s16 i;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.items); i++) {
- if (gSaveContext.items[i] == oldItem) {
- gSaveContext.items[i] = newItem;
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.inventory.items); i++) {
+ if (gSaveContext.inventory.items[i] == oldItem) {
+ gSaveContext.inventory.items[i] = newItem;
// Translates to: "Item Purge (%d)"
osSyncPrintf("アイテム消去(%d)\n", i);
for (i = 1; i < 4; i++) {
@@ -1964,7 +1967,7 @@ s32 Inventory_ReplaceItem(GlobalContext* globalCtx, u16 oldItem, u16 newItem) {
}
s32 Inventory_HasEmptyBottle(void) {
- u8* items = gSaveContext.items;
+ u8* items = gSaveContext.inventory.items;
if (items[SLOT_BOTTLE_1] == ITEM_BOTTLE) {
return 1;
@@ -1980,7 +1983,7 @@ s32 Inventory_HasEmptyBottle(void) {
}
s32 Inventory_HasSpecificBottle(u8 bottleItem) {
- u8* items = gSaveContext.items;
+ u8* items = gSaveContext.inventory.items;
if (items[SLOT_BOTTLE_1] == bottleItem) {
return 1;
@@ -1998,15 +2001,15 @@ s32 Inventory_HasSpecificBottle(u8 bottleItem) {
void Inventory_UpdateBottleItem(GlobalContext* globalCtx, u8 item, u8 button) {
osSyncPrintf("item_no=%x, c_no=%x, Pt=%x Item_Register=%x\n", item, button,
gSaveContext.equips.cButtonSlots[button - 1],
- gSaveContext.items[gSaveContext.equips.cButtonSlots[button - 1]]);
+ gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]]);
// Special case to only empty half of a Lon Lon Milk Bottle
- if ((gSaveContext.items[gSaveContext.equips.cButtonSlots[button - 1]] == ITEM_MILK_BOTTLE) &&
+ if ((gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] == ITEM_MILK_BOTTLE) &&
(item == ITEM_BOTTLE)) {
item = ITEM_MILK_HALF;
}
- gSaveContext.items[gSaveContext.equips.cButtonSlots[button - 1]] = item;
+ gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item;
gSaveContext.equips.buttonItems[button] = item;
Interface_LoadItemIcon1(globalCtx, button);
@@ -2023,7 +2026,7 @@ s32 Inventory_ConsumeFairy(GlobalContext* globalCtx) {
bottleSlot = SLOT(ITEM_FAIRY);
for (i = 0; i < 4; i++) {
- if (gSaveContext.items[bottleSlot + i] == ITEM_FAIRY) {
+ if (gSaveContext.inventory.items[bottleSlot + i] == ITEM_FAIRY) {
for (j = 1; j < 4; j++) {
if (gSaveContext.equips.buttonItems[j] == ITEM_FAIRY) {
gSaveContext.equips.buttonItems[j] = ITEM_BOTTLE;
@@ -2035,7 +2038,7 @@ s32 Inventory_ConsumeFairy(GlobalContext* globalCtx) {
}
// Translates to: "Fairy Usage=%d"
osSyncPrintf("妖精使用=%d\n", bottleSlot);
- gSaveContext.items[bottleSlot + i] = ITEM_BOTTLE;
+ gSaveContext.inventory.items[bottleSlot + i] = ITEM_BOTTLE;
return 1;
}
}
@@ -3124,7 +3127,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
case SCENE_GANON_SONOGO:
case SCENE_GANONTIKA_SONOGO:
case SCENE_TAKARAYA:
- if (gSaveContext.dungeonKeys[gSaveContext.mapIndex] >= 0) {
+ if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] >= 0) {
// Small Key Icon
gDPPipeSync(oGfxCtx->overlay.p++);
gDPSetPrimColor(oGfxCtx->overlay.p++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha);
@@ -3139,7 +3142,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
interfaceCtx->counterDigits[2] = 0;
- interfaceCtx->counterDigits[3] = gSaveContext.dungeonKeys[gSaveContext.mapIndex];
+ interfaceCtx->counterDigits[3] = gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex];
while (interfaceCtx->counterDigits[3] >= 10) {
interfaceCtx->counterDigits[2]++;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 29cad2538..370005456 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -234,7 +234,7 @@ void Gameplay_Init(GlobalContext* globalCtx) {
globalCtx->cameraPtrs[0]->uid = 0;
globalCtx->activeCamera = 0;
func_8005AC48(&globalCtx->mainCamera, 0xFF);
- func_800A9D28(globalCtx, &globalCtx->sub_1F74);
+ Sram_Init(globalCtx, &globalCtx->sramCtx);
func_80112098(globalCtx);
func_80110F68(globalCtx);
func_80110450(globalCtx);
@@ -317,7 +317,7 @@ void Gameplay_Init(GlobalContext* globalCtx) {
if (gSaveContext.nextDayTime != 0xFFFF) {
if (gSaveContext.nextDayTime == 0x8001) {
- gSaveContext.unk_14++;
+ gSaveContext.numDays++;
gSaveContext.unk_18++;
gSaveContext.dogIsLost = true;
if (Inventory_ReplaceItem(globalCtx, ITEM_WEIRD_EGG, ITEM_CHICKEN) ||
@@ -1724,12 +1724,12 @@ s16 func_800C09D8(GlobalContext* globalCtx, s16 camId, s16 arg2) {
}
void Gameplay_SaveSceneFlags(GlobalContext* globalCtx) {
- SaveSceneFlags* sceneFlags = &gSaveContext.sceneFlags[globalCtx->sceneNum];
+ SavedSceneFlags* savedSceneFlags = &gSaveContext.sceneFlags[globalCtx->sceneNum];
- sceneFlags->chest = globalCtx->actorCtx.flags.chest;
- sceneFlags->swch = globalCtx->actorCtx.flags.swch;
- sceneFlags->clear = globalCtx->actorCtx.flags.clear;
- sceneFlags->collect = globalCtx->actorCtx.flags.collect;
+ savedSceneFlags->chest = globalCtx->actorCtx.flags.chest;
+ savedSceneFlags->swch = globalCtx->actorCtx.flags.swch;
+ savedSceneFlags->clear = globalCtx->actorCtx.flags.clear;
+ savedSceneFlags->collect = globalCtx->actorCtx.flags.collect;
}
void Gameplay_SetRespawnData(GlobalContext* globalCtx, s32 respawnMode, s16 entranceIndex, s32 roomIndex,
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index 06517245f..1145bd9b3 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -1,25 +1,905 @@
#include "global.h"
+#include "vt.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A81A0.s")
+// these are the main substructs of save context.
+// we are going to hold off on splitting save context until later on,
+// so these temporary structs will live here for now.
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A82C8.s")
+typedef struct {
+ /* 0x00 */ char newf[6]; // string "ZELDAZ"
+ /* 0x06 */ s16 deaths;
+ /* 0x08 */ char playerName[8];
+ /* 0x10 */ s16 n64ddFlag;
+ /* 0x12 */ s16 healthCapacity; // "max_life"
+ /* 0x14 */ s16 health; // "now_life"
+ /* 0x16 */ s8 magicLevel;
+ /* 0x17 */ s8 magic;
+ /* 0x18 */ s16 rupees;
+ /* 0x1A */ u16 swordHealth;
+ /* 0x1C */ u16 naviTimer;
+ /* 0x1E */ u8 magicAcquired;
+ /* 0x1F */ u8 unk_1F;
+ /* 0x20 */ u8 doubleMagic;
+ /* 0x21 */ u8 doubleDefense;
+ /* 0x22 */ u8 bgsFlag;
+ /* 0x23 */ u8 ocarinaGameReward;
+ /* 0x24 */ ItemEquips childEquips;
+ /* 0x2E */ ItemEquips adultEquips;
+ /* 0x38 */ u32 unk_38; // this may be incorrect, currently used for alignement
+ /* 0x3C */ char unk_3C[0x0E];
+ /* 0x4A */ s16 savedSceneNum;
+} SavePlayerData; // size = 0x4C
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A8484.s")
+typedef struct {
+ /* 0x0000 */ SavePlayerData playerData; // "S_Private" substruct name
+ /* 0x004C */ ItemEquips equips;
+ /* 0x0058 */ Inventory inventory;
+ /* 0x00B8 */ SavedSceneFlags sceneFlags[124];
+ /* 0x0E48 */ FaroresWindData fw;
+ /* 0x0E70 */ char unk_E70[0x10];
+ /* 0x0E80 */ s32 gsFlags[6];
+ /* 0x0E98 */ char unk_E98[0x10];
+ /* 0x0EA8 */ s32 horseRaceRecord;
+ /* 0x0EAC */ char unk_EAC[0x0C];
+ /* 0x0EB8 */ u16 eventChkInf[14]; // "event_chk_inf"
+ /* 0x0ED4 */ u16 itemGetInf[4]; // "item_get_inf"
+ /* 0x0EDC */ u16 infTable[30]; // "inf_table"
+ /* 0x0F18 */ char unk_F18[0x04];
+ /* 0x0F1C */ u32 worldMapAreaData; // "area_arrival"
+ /* 0x0F20 */ char unk_F20[0x4];
+ /* 0x0F24 */ u8 scarecrowCustomSongSet;
+ /* 0x0F25 */ u8 scarecrowCustomSong[0x360];
+ /* 0x1285 */ char unk_1285[0x24];
+ /* 0x12A9 */ u8 scarecrowSpawnSongSet;
+ /* 0x12AA */ u8 scarecrowSpawnSong[0x80];
+ /* 0x132A */ char unk_132A[0x02];
+ /* 0x132C */ HorseData horseData;
+ /* 0x1336 */ u16 checksum; // "check_sum"
+} SaveInfo; // size = 0x1338
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A88D4.s")
+typedef struct {
+ /* 0x00 */ s32 entranceIndex;
+ /* 0x04 */ s32 linkAge; // 0: Adult; 1: Child
+ /* 0x08 */ s32 cutsceneIndex;
+ /* 0x0C */ u16 dayTime; // "zelda_time"
+ /* 0x10 */ s32 nightFlag;
+ /* 0x14 */ s32 numDays;
+ /* 0x18 */ s32 unk_18; // increments with numDays, gets reset by goron for bgs and one other use
+ /* 0x1C */ SaveInfo info; // "information"
+} Save; // size = 0x1354
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A8A20.s")
+#define SAVE_PLAYER_DATA (*((SavePlayerData*)&gSaveContext.newf))
+#define SAVE_INFO (*((SaveInfo*)&gSaveContext.newf))
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A9258.s")
+#define SLOT_SIZE (sizeof(SaveContext) + 0x28)
+#define CHECKSUM_SIZE (sizeof(Save) / 2)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A96D0.s")
+#define DEATHS OFFSETOF(SaveContext, deaths)
+#define NAME OFFSETOF(SaveContext, playerName)
+#define N64DD OFFSETOF(SaveContext, n64ddFlag)
+#define HEALTH_CAP OFFSETOF(SaveContext, healthCapacity)
+#define QUEST OFFSETOF(SaveContext, inventory.questItems)
+#define DEFENSE OFFSETOF(SaveContext, inventory.defenseHearts)
+#define HEALTH OFFSETOF(SaveContext, health)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A97F0.s")
+#define SLOT_OFFSET(idx) (SLOT_SIZE * idx + 0x20)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A9A9C.s")
+u16 gSramSlotOffsets[][3] = {
+ {
+ SLOT_OFFSET(0),
+ SLOT_OFFSET(1),
+ SLOT_OFFSET(2),
+ },
+ {
+ SLOT_OFFSET(3),
+ SLOT_OFFSET(4),
+ SLOT_OFFSET(5),
+ },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A9AD0.s")
+char sZeldaMagic[] = { '\0', '\0', '\0', '\x98', '\x09', '\x10', '\x21', 'Z', 'E', 'L', 'D', 'A' };
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A9CD4.s")
+SavePlayerData sNewSavePlayerData = {
+ { '\0', '\0', '\0', '\0', '\0', '\0' }, // newf
+ 0, // deaths
+ { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName
+ 0, // n64ddFlag
+ 0x30, // healthCapacity
+ 0x30, // heartStatus
+ 0, // magicLevel
+ 0x30, // magic
+ 0, // rupees
+ 0, // swordHealth
+ 0, // naviTimer
+ 0, // magicAcquired
+ 0, // unk_1F
+ 0, // doubleMagic
+ 0, // doubleDefense
+ 0, // bgsFlag
+ 0, // ocarinaGameReward
+ {
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
+ 0, // equipment
+ }, // childEquips
+ {
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
+ 0, // equipment
+ }, // adultEquips
+ 0, // unk_38
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // unk_3C
+ 0x34, // savedSceneNum
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/func_800A9D28.s")
+ItemEquips sNewSaveEquips = {
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
+ 0x1100, // equipment
+};
+
+Inventory sNewSaveInventory = {
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, // items
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // ammo
+ 0x1100, // equipment
+ 0, // upgrades
+ 0, // questItems
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // dungeonItems
+ {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ }, // dungeonKeys
+ 0, // defenseHearts
+ 0, // gsTokens
+};
+
+u16 sNewSaveChecksum = 0;
+
+/**
+ * Initialize new save.
+ * This save has an empty inventory with 3 hearts and single magic.
+ */
+void Sram_InitNewSave(void) {
+ SaveContext* temp = &gSaveContext;
+
+ bzero(&SAVE_INFO, sizeof(SaveInfo));
+ gSaveContext.numDays = 0;
+ gSaveContext.unk_18 = 0;
+
+ SAVE_PLAYER_DATA = sNewSavePlayerData;
+ gSaveContext.equips = sNewSaveEquips;
+ gSaveContext.inventory = sNewSaveInventory;
+
+ temp->checksum = sNewSaveChecksum;
+ gSaveContext.horseData.scene = SCENE_SPOT00;
+ gSaveContext.horseData.pos.x = -1840;
+ gSaveContext.horseData.pos.y = 72;
+ gSaveContext.horseData.pos.z = 5497;
+ gSaveContext.horseData.angle = -0x6AD9;
+ gSaveContext.magicLevel = 0;
+ gSaveContext.infTable[29] = 1;
+ gSaveContext.sceneFlags[5].swch = 0x40000000;
+}
+
+SavePlayerData sDebugSavePlayerData = {
+ { 'Z', 'E', 'L', 'D', 'A', 'Z' }, // newf
+ 0, // deaths
+ { 0x15, 0x12, 0x17, 0x14, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName ( "LINK" )
+ 0, // n64ddFlag
+ 0xE0, // healthCapacity
+ 0xE0, // health
+ 0, // magicLevel
+ 0x30, // magic
+ 150, // rupees
+ 8, // swordHealth
+ 0, // naviTimer
+ 1, // magicAcquired
+ 0, // unk_1F
+ 0, // doubleMagic
+ 0, // doubleDefense
+ 0, // bgsFlag
+ 0, // ocarinaGameReward
+ {
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
+ 0, // equipment
+ }, // childEquips
+ {
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
+ 0, // equipment
+ }, // adultEquips
+ 0, // unk_38
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // unk_3C
+ 0x51, // savedSceneNum
+};
+
+ItemEquips sDebugSaveEquips = {
+ { ITEM_SWORD_MASTER, ITEM_BOW, ITEM_BOMB, ITEM_OCARINA_FAIRY }, // buttonItems
+ { SLOT_BOW, SLOT_BOMB, SLOT_OCARINA }, // cButtonSlots
+ 0x1122, // equipment
+};
+
+Inventory sDebugSaveInventory = {
+ { ITEM_STICK, ITEM_NUT, ITEM_BOMB, ITEM_BOW, ITEM_ARROW_FIRE, ITEM_DINS_FIRE,
+ ITEM_SLINGSHOT, ITEM_OCARINA_FAIRY, ITEM_BOMBCHU, ITEM_HOOKSHOT, ITEM_ARROW_ICE, ITEM_FARORES_WIND,
+ ITEM_BOOMERANG, ITEM_LENS, ITEM_BEAN, ITEM_HAMMER, ITEM_ARROW_LIGHT, ITEM_NAYRUS_LOVE,
+ ITEM_BOTTLE, ITEM_POTION_RED, ITEM_POTION_GREEN, ITEM_POTION_BLUE, ITEM_POCKET_EGG, ITEM_WEIRD_EGG }, // items
+ { 50, 50, 10, 30, 1, 1, 30, 1, 50, 1, 1, 1, 1, 1, 1, 1 }, // ammo
+ 0x7777, // equipment
+ 0x125249, // upgrades
+ 0x1E3FFFF, // questItems
+ { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // dungeonItems
+ { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }, // dungeonKeys
+ 0, // defenseHearts
+ 0, // gsTokens
+};
+
+u16 sDebugSaveChecksum = 0;
+
+/**
+ * Initialize debug save. This is also used on the Title Screen
+ * This save has a mostly full inventory with 10 hearts and single magic.
+ *
+ * Some noteable flags that are set:
+ * Showed Mido sword/shield, met Deku Tree, Deku Tree mouth opened,
+ * used blue warp in Gohmas room, Zelda fled castle, light arrow cutscene watched,
+ * and set water level in Water Temple to lowest level.
+ */
+void Sram_InitDebugSave(void) {
+ SaveContext* temp = &gSaveContext;
+
+ bzero(&SAVE_INFO, sizeof(SaveInfo));
+ gSaveContext.numDays = 0;
+ gSaveContext.unk_18 = 0;
+
+ SAVE_PLAYER_DATA = sDebugSavePlayerData;
+ gSaveContext.equips = sDebugSaveEquips;
+ gSaveContext.inventory = sDebugSaveInventory;
+
+ temp->checksum = sDebugSaveChecksum;
+ gSaveContext.horseData.scene = SCENE_SPOT00;
+ gSaveContext.horseData.pos.x = -1840;
+ gSaveContext.horseData.pos.y = 72;
+ gSaveContext.horseData.pos.z = 5497;
+ gSaveContext.horseData.angle = -0x6AD9;
+ gSaveContext.infTable[0] |= 0x5009;
+ gSaveContext.eventChkInf[0] |= 0x123F;
+ gSaveContext.eventChkInf[8] |= 1;
+ gSaveContext.eventChkInf[12] |= 0x10;
+
+ if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
+ gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI;
+ Inventory_ChangeEquipment(EQUIP_SWORD, 1);
+ if (gSaveContext.fileNum == 0xFF) {
+ gSaveContext.equips.buttonItems[1] = ITEM_SLINGSHOT;
+ gSaveContext.equips.cButtonSlots[0] = SLOT_SLINGSHOT;
+ Inventory_ChangeEquipment(EQUIP_SHIELD, 1);
+ }
+ }
+
+ gSaveContext.entranceIndex = 0xCD;
+ gSaveContext.magicLevel = 0;
+ gSaveContext.sceneFlags[5].swch = 0x40000000;
+}
+
+/**
+ * Copy save currently on the buffer to Save Context and complete various tasks to open the save.
+ * This includes:
+ * - Set proper entrance depending on where the game was saved
+ * - If health is less than 3 hearts, give 3 hearts
+ * - If either scarecrow song is set, copy them from save context to the proper location
+ * - Handle a case where the player saved and quit after zelda cutscene but didnt get the song
+ * - Give and equip master sword if player is adult and doesnt have kokiri sword (bug?)
+ * - Revert any trade items that spoil
+ */
+#ifdef NON_MATCHING
+// regalloc differences at the end
+void Sram_OpenSave(SramContext* sramCtx) {
+ static s16 dungeonEntrances[] = {
+ 0x0000, 0x0004, 0x0028, 0x0169, 0x0165, 0x0010, 0x0082, 0x0037,
+ 0x0098, 0x0088, 0x041B, 0x0008, 0x0486, 0x0467, 0x0179, 0x056C,
+ };
+ u16 i;
+ u16 j;
+ u8* ptr;
+
+ osSyncPrintf("個人File作成\n"); // Create personal file
+ i = gSramSlotOffsets[0][gSaveContext.fileNum];
+ osSyncPrintf("ぽいんと=%x(%d)\n", i, gSaveContext.fileNum); // Point=
+
+ MemCopy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
+
+ osSyncPrintf(VT_FGCOL(YELLOW));
+ osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.savedSceneNum,
+ ((void)0, gSaveContext.entranceIndex));
+
+ switch (gSaveContext.savedSceneNum) {
+ case SCENE_YDAN:
+ case SCENE_DDAN:
+ case SCENE_BDAN:
+ case SCENE_BMORI1:
+ case SCENE_HIDAN:
+ case SCENE_MIZUSIN:
+ case SCENE_JYASINZOU:
+ case SCENE_HAKADAN:
+ case SCENE_HAKADANCH:
+ case SCENE_ICE_DOUKUTO:
+ case SCENE_GANON:
+ case SCENE_MEN:
+ case SCENE_GERUDOWAY:
+ case SCENE_GANONTIKA:
+ gSaveContext.entranceIndex = dungeonEntrances[gSaveContext.savedSceneNum];
+ break;
+ case SCENE_YDAN_BOSS:
+ gSaveContext.entranceIndex = 0;
+ break;
+ case SCENE_DDAN_BOSS:
+ gSaveContext.entranceIndex = 4;
+ break;
+ case SCENE_BDAN_BOSS:
+ gSaveContext.entranceIndex = 0x28;
+ break;
+ case SCENE_MORIBOSSROOM:
+ gSaveContext.entranceIndex = 0x169;
+ break;
+ case SCENE_FIRE_BS:
+ gSaveContext.entranceIndex = 0x165;
+ break;
+ case SCENE_MIZUSIN_BS:
+ gSaveContext.entranceIndex = 0x10;
+ break;
+ case SCENE_JYASINBOSS:
+ gSaveContext.entranceIndex = 0x82;
+ break;
+ case SCENE_HAKADAN_BS:
+ gSaveContext.entranceIndex = 0x37;
+ break;
+ case SCENE_GANON_SONOGO:
+ case SCENE_GANONTIKA_SONOGO:
+ case SCENE_GANON_BOSS:
+ case SCENE_GANON_FINAL:
+ case SCENE_GANON_DEMO:
+ gSaveContext.entranceIndex = 0x41B;
+ break;
+
+ default:
+ if (gSaveContext.savedSceneNum != SCENE_LINK_HOME) {
+ gSaveContext.entranceIndex = (LINK_AGE_IN_YEARS == YEARS_CHILD) ? 0xBB : 0x5F4;
+ } else {
+ gSaveContext.entranceIndex = 0xBB;
+ }
+ break;
+ }
+
+ osSyncPrintf("scene_no = %d\n", gSaveContext.entranceIndex);
+ osSyncPrintf(VT_RST);
+
+ if (gSaveContext.health < 0x30) {
+ gSaveContext.health = 0x30;
+ }
+
+ if (gSaveContext.scarecrowCustomSongSet) {
+ osSyncPrintf(VT_FGCOL(BLUE));
+ osSyncPrintf("\n====================================================================\n");
+
+ MemCopy(gScarecrowCustomSongPtr, &gSaveContext.scarecrowCustomSong, 0x360);
+
+ ptr = gScarecrowCustomSongPtr;
+ for (i = 0; i < 0x360; i++, ptr++) {
+ osSyncPrintf("%d, ", *ptr);
+ }
+
+ osSyncPrintf("\n====================================================================\n");
+ osSyncPrintf(VT_RST);
+ }
+
+ if (gSaveContext.scarecrowSpawnSongSet) {
+ osSyncPrintf(VT_FGCOL(GREEN));
+ osSyncPrintf("\n====================================================================\n");
+
+ MemCopy(gScarecrowSpawnSongPtr, &gSaveContext.scarecrowSpawnSong, 0x80);
+
+ ptr = gScarecrowSpawnSongPtr;
+ for (i = 0; i < 0x80; i++, ptr++) {
+ osSyncPrintf("%d, ", *ptr);
+ }
+
+ osSyncPrintf("\n====================================================================\n");
+ osSyncPrintf(VT_RST);
+ }
+
+ // if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
+ if ((gSaveContext.eventChkInf[4] & 1) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
+ gSaveContext.eventChkInf[4] &= ~1;
+ INV_CONTENT(ITEM_LETTER_ZELDA) = ITEM_CHICKEN;
+
+ for (i = 1; i < 4; i++) {
+ if (gSaveContext.equips.buttonItems[i] == ITEM_LETTER_ZELDA) {
+ gSaveContext.equips.buttonItems[i] = ITEM_CHICKEN;
+ }
+ }
+ }
+
+ // check for owning kokiri sword.. to restore master sword? bug or debug feature?
+ if (LINK_AGE_IN_YEARS == YEARS_ADULT && !CHECK_OWNED_EQUIP(EQUIP_SWORD, 1)) {
+ gSaveContext.inventory.equipment |= gBitFlags[1] << gEquipShifts[EQUIP_SWORD];
+ gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
+ gSaveContext.equips.equipment &= ~0xF;
+ gSaveContext.equips.equipment |= 2;
+ }
+
+ for (i = 0; i < ARRAY_COUNT(gSpoilingItems); i++) {
+ if (INV_CONTENT(ITEM_TRADE_ADULT) == gSpoilingItems[i]) {
+ INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
+
+ for (j = 1; j < 4; j++) {
+ if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) {
+ gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i];
+ }
+ }
+ }
+ }
+
+ gSaveContext.magicLevel = 0;
+}
+#else
+s16 dungeonEntrances[] = {
+ 0x0000, 0x0004, 0x0028, 0x0169, 0x0165, 0x0010, 0x0082, 0x0037,
+ 0x0098, 0x0088, 0x041B, 0x0008, 0x0486, 0x0467, 0x0179, 0x056C,
+};
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/Sram_OpenSave.s")
+#endif
+
+/**
+ * Write the contents of the Save Context to a main and backup slot in SRAM.
+ * Note: The whole Save Context is written even though only the `save` substruct is read back later
+ */
+void Sram_WriteSave(s32 unused) {
+ u16 offset;
+ u16 checksum;
+ u16 j;
+ u16* ptr;
+
+ gSaveContext.checksum = 0;
+
+ ptr = (u16*)&gSaveContext;
+ checksum = 0;
+ j = 0;
+
+ for (offset = 0; offset < CHECKSUM_SIZE; offset++) {
+ if (++j == 0x20U) {
+ j = 0;
+ }
+ checksum += *ptr++;
+ }
+
+ gSaveContext.checksum = checksum;
+
+ ptr = (u16*)&gSaveContext;
+ checksum = 0;
+
+ for (offset = 0; offset < CHECKSUM_SIZE; offset++) {
+ if (++j == 0x20U) {
+ j = 0;
+ }
+ checksum += *ptr++;
+ }
+
+ offset = gSramSlotOffsets[0][gSaveContext.fileNum];
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
+
+ ptr = (u16*)&gSaveContext;
+ checksum = 0;
+
+ for (offset = 0; offset < CHECKSUM_SIZE; offset++) {
+ if (++j == 0x20U) {
+ j = 0;
+ }
+ checksum += *ptr++;
+ }
+
+ offset = gSramSlotOffsets[1][gSaveContext.fileNum];
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
+}
+
+/**
+ * For all 3 slots, verify that the checksum is correct. If corrupted, attempt to load a backup save.
+ * If backup is also corrupted, default to a new save (or debug save for slot 0 on debug rom).
+ *
+ * After verifying all 3 saves, pass relevant data to File Select to be displayed.
+ */
+#ifdef NON_MATCHING
+// There's a problem with how "offset" is loaded
+void Sram_VerifyAndLoadAllSaves(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
+ u16 slotNum; // 0x72
+ u16 oldChecksum;
+ u16 newChecksum;
+ u16 dayTime; // 0x66
+ // u16* offPtr;
+ s32 offset;
+ u16 i;
+ u16 j;
+ u16* ptr;
+
+ osSyncPrintf("SRAM START─LOAD\n");
+ bzero(sramCtx->readBuff, SRAM_SIZE);
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
+
+ dayTime = gSaveContext.dayTime;
+
+ for (slotNum = 0; slotNum < 3; slotNum++) {
+ offset = gSramSlotOffsets[0][slotNum];
+ osSyncPrintf("ぽいんと=%x(%d) SAVE_MAX=%d\n", offset, gSaveContext.fileNum, sizeof(Save));
+ MemCopy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
+
+ oldChecksum = gSaveContext.checksum;
+ gSaveContext.checksum = 0;
+ osSyncPrintf("\n============= S(%d) =============\n", slotNum);
+
+ // j = 0;
+ newChecksum = 0;
+ ptr = (u16*)&gSaveContext;
+ for (i = 0; i < CHECKSUM_SIZE; i++) {
+ j += 2;
+ newChecksum += *ptr++;
+ }
+
+ // SAVE checksum calculation
+ osSyncPrintf("\nSAVEチェックサム計算 j=%x mmm=%x ", newChecksum, oldChecksum);
+
+ if (oldChecksum != newChecksum) {
+ // checksum didnt match, try backup save
+ osSyncPrintf("ERROR!!! = %x(%d)\n", offset, slotNum);
+ offset = gSramSlotOffsets[1][slotNum];
+ MemCopy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
+
+ oldChecksum = gSaveContext.checksum;
+ gSaveContext.checksum = 0;
+ osSyncPrintf("================= BACK─UP ========================\n");
+
+ newChecksum = 0;
+ ptr = (u16*)&gSaveContext;
+ for (i = 0; i < CHECKSUM_SIZE; i++) {
+ j += 2;
+ newChecksum += *ptr++;
+ }
+ // (B) SAVE checksum calculation
+ osSyncPrintf("\n(B)SAVEチェックサム計算 j=%x mmm=%x ", newChecksum, oldChecksum);
+
+ if (oldChecksum != newChecksum) {
+ // backup save didnt work, make new save
+ // offPtr = &gSramSlotOffsets[1][slotNum];
+ osSyncPrintf("ERROR!!! = %x(%d+3)\n", offset, slotNum);
+ bzero(&gSaveContext.entranceIndex, sizeof(gSaveContext.entranceIndex));
+ bzero(&gSaveContext.linkAge, sizeof(gSaveContext.linkAge));
+ bzero(&gSaveContext.cutsceneIndex, sizeof(gSaveContext.cutsceneIndex));
+ bzero(&gSaveContext.dayTime, sizeof(gSaveContext.dayTime));
+ bzero(&gSaveContext.nightFlag, sizeof(gSaveContext.nightFlag));
+ bzero(&gSaveContext.numDays, sizeof(gSaveContext.numDays));
+ bzero(&gSaveContext.unk_18, sizeof(gSaveContext.unk_18));
+
+ if (slotNum == 0) {
+ Sram_InitDebugSave();
+ gSaveContext.newf[0] = 'Z';
+ gSaveContext.newf[1] = 'E';
+ gSaveContext.newf[2] = 'L';
+ gSaveContext.newf[3] = 'D';
+ gSaveContext.newf[4] = 'A';
+ gSaveContext.newf[5] = 'Z';
+ osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1],
+ gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4],
+ gSaveContext.newf[5]);
+ } else {
+ Sram_InitNewSave();
+ }
+
+ osSyncPrintf("\n--------------------------------------------------------------\n");
+
+ j = 0;
+ newChecksum = 0;
+ ptr = (u16*)&gSaveContext;
+ for (i = 0; i < CHECKSUM_SIZE; i++) {
+ osSyncPrintf("%x ", *ptr);
+ if (++j == 0x20) {
+ osSyncPrintf("\n");
+ j = 0;
+ }
+ newChecksum += *ptr++;
+ }
+
+ gSaveContext.checksum = newChecksum;
+ osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.checksum, newChecksum);
+
+ offset = gSramSlotOffsets[1][slotNum];
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
+
+ osSyncPrintf("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1],
+ gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]);
+ osSyncPrintf("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", offset, slotNum, gSaveContext.checksum,
+ newChecksum);
+ }
+
+ offset = gSramSlotOffsets[0][slotNum];
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
+
+ osSyncPrintf("ぽいんと=%x(%d) check_sum=%x(%x)\n", offset, slotNum, gSaveContext.checksum, newChecksum);
+ } else {
+ // SAVE data OK! ! ! !
+ osSyncPrintf("\nSAVEデータ OK!!!!\n");
+ }
+ }
+
+ bzero(sramCtx->readBuff, SRAM_SIZE);
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
+ gSaveContext.dayTime = dayTime;
+
+ osSyncPrintf("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
+ DEFENSE);
+
+ MemCopy(&fileChooseCtx->deaths[0], sramCtx->readBuff + SLOT_OFFSET(0) + DEATHS, sizeof(fileChooseCtx->deaths[0]));
+ MemCopy(&fileChooseCtx->deaths[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEATHS, sizeof(fileChooseCtx->deaths[0]));
+ MemCopy(&fileChooseCtx->deaths[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEATHS, sizeof(fileChooseCtx->deaths[0]));
+
+ MemCopy(&fileChooseCtx->fileNames[0], sramCtx->readBuff + SLOT_OFFSET(0) + NAME,
+ sizeof(fileChooseCtx->fileNames[0]));
+ MemCopy(&fileChooseCtx->fileNames[1], sramCtx->readBuff + SLOT_OFFSET(1) + NAME,
+ sizeof(fileChooseCtx->fileNames[0]));
+ MemCopy(&fileChooseCtx->fileNames[2], sramCtx->readBuff + SLOT_OFFSET(2) + NAME,
+ sizeof(fileChooseCtx->fileNames[0]));
+
+ MemCopy(&fileChooseCtx->healthCapacities[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH_CAP,
+ sizeof(fileChooseCtx->healthCapacities[0]));
+ MemCopy(&fileChooseCtx->healthCapacities[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH_CAP,
+ sizeof(fileChooseCtx->healthCapacities[0]));
+ MemCopy(&fileChooseCtx->healthCapacities[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH_CAP,
+ sizeof(fileChooseCtx->healthCapacities[0]));
+
+ MemCopy(&fileChooseCtx->questItems[0], sramCtx->readBuff + SLOT_OFFSET(0) + QUEST,
+ sizeof(fileChooseCtx->questItems[0]));
+ MemCopy(&fileChooseCtx->questItems[1], sramCtx->readBuff + SLOT_OFFSET(1) + QUEST,
+ sizeof(fileChooseCtx->questItems[0]));
+ MemCopy(&fileChooseCtx->questItems[2], sramCtx->readBuff + SLOT_OFFSET(2) + QUEST,
+ sizeof(fileChooseCtx->questItems[0]));
+
+ MemCopy(&fileChooseCtx->n64ddFlags[0], sramCtx->readBuff + SLOT_OFFSET(0) + N64DD,
+ sizeof(fileChooseCtx->n64ddFlags[0]));
+ MemCopy(&fileChooseCtx->n64ddFlags[1], sramCtx->readBuff + SLOT_OFFSET(1) + N64DD,
+ sizeof(fileChooseCtx->n64ddFlags[0]));
+ MemCopy(&fileChooseCtx->n64ddFlags[2], sramCtx->readBuff + SLOT_OFFSET(2) + N64DD,
+ sizeof(fileChooseCtx->n64ddFlags[0]));
+
+ MemCopy(&fileChooseCtx->heartStatus[0], sramCtx->readBuff + SLOT_OFFSET(0) + DEFENSE,
+ sizeof(fileChooseCtx->heartStatus[0]));
+ MemCopy(&fileChooseCtx->heartStatus[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEFENSE,
+ sizeof(fileChooseCtx->heartStatus[0]));
+ MemCopy(&fileChooseCtx->heartStatus[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEFENSE,
+ sizeof(fileChooseCtx->heartStatus[0]));
+
+ MemCopy(&fileChooseCtx->nowLife[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH, sizeof(fileChooseCtx->nowLife[0]));
+ MemCopy(&fileChooseCtx->nowLife[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH, sizeof(fileChooseCtx->nowLife[0]));
+ MemCopy(&fileChooseCtx->nowLife[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH, sizeof(fileChooseCtx->nowLife[0]));
+
+ osSyncPrintf("f_64dd=%d, %d, %d\n", fileChooseCtx->n64ddFlags[0], fileChooseCtx->n64ddFlags[1],
+ fileChooseCtx->n64ddFlags[2]);
+ osSyncPrintf("heart_status=%d, %d, %d\n", fileChooseCtx->heartStatus[0], fileChooseCtx->heartStatus[1],
+ fileChooseCtx->heartStatus[2]);
+ osSyncPrintf("now_life=%d, %d, %d\n", fileChooseCtx->nowLife[0], fileChooseCtx->nowLife[1],
+ fileChooseCtx->nowLife[2]);
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram/Sram_VerifyAndLoadAllSaves.s")
+#endif
+
+void Sram_InitSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
+ u16 offset;
+ u16 j;
+ u16* ptr;
+ u16 checksum;
+
+ if (fileChooseCtx->btnIdx != 0) {
+ Sram_InitNewSave();
+ } else {
+ Sram_InitDebugSave();
+ }
+
+ gSaveContext.entranceIndex = 0xBB;
+ gSaveContext.linkAge = 1;
+ gSaveContext.dayTime = 0x6AAB;
+ gSaveContext.cutsceneIndex = 0xFFF1;
+
+ if (fileChooseCtx->btnIdx == 0) {
+ gSaveContext.cutsceneIndex = 0;
+ }
+
+ for (offset = 0; offset < 8; offset++) {
+ gSaveContext.playerName[offset] = fileChooseCtx->fileNames[fileChooseCtx->btnIdx][offset];
+ }
+
+ gSaveContext.newf[0] = 'Z';
+ gSaveContext.newf[1] = 'E';
+ gSaveContext.newf[2] = 'L';
+ gSaveContext.newf[3] = 'D';
+ gSaveContext.newf[4] = 'A';
+ gSaveContext.newf[5] = 'Z';
+
+ gSaveContext.n64ddFlag = fileChooseCtx->n64ddFlag;
+ osSyncPrintf("64DDフラグ=%d\n", fileChooseCtx->n64ddFlag);
+ osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1], gSaveContext.newf[2],
+ gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]);
+ osSyncPrintf("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
+
+ ptr = (u16*)&gSaveContext;
+ j = 0;
+ checksum = 0;
+
+ for (offset = 0; offset < CHECKSUM_SIZE; offset++) {
+ osSyncPrintf("%x ", *ptr);
+ checksum += *ptr++;
+ if (++j == 0x20u) {
+ osSyncPrintf("\n");
+ j = 0;
+ }
+ }
+
+ gSaveContext.checksum = checksum;
+ osSyncPrintf("\nチェックサム=%x\n", gSaveContext.checksum); // Checksum = %x
+
+ offset = gSramSlotOffsets[0][gSaveContext.fileNum];
+ osSyncPrintf("I=%x no=%d\n", offset, gSaveContext.fileNum);
+ MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
+
+ offset = gSramSlotOffsets[1][gSaveContext.fileNum];
+ osSyncPrintf("I=%x no=%d\n", offset, gSaveContext.fileNum + 3);
+ MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
+
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_WRITE);
+
+ // SAVE end
+ osSyncPrintf("SAVE終了\n");
+ osSyncPrintf("z_common_data.file_no = %d\n", gSaveContext.fileNum);
+ osSyncPrintf("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, SAVE_64DD=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD);
+
+ j = gSramSlotOffsets[0][gSaveContext.fileNum];
+
+ MemCopy(&fileChooseCtx->deaths[gSaveContext.fileNum], sramCtx->readBuff + j + DEATHS,
+ sizeof(fileChooseCtx->deaths[0]));
+ MemCopy(&fileChooseCtx->fileNames[gSaveContext.fileNum], sramCtx->readBuff + j + NAME,
+ sizeof(fileChooseCtx->fileNames[0]));
+ MemCopy(&fileChooseCtx->healthCapacities[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH_CAP,
+ sizeof(fileChooseCtx->healthCapacities[0]));
+ MemCopy(&fileChooseCtx->questItems[gSaveContext.fileNum], sramCtx->readBuff + j + QUEST,
+ sizeof(fileChooseCtx->questItems[0]));
+ MemCopy(&fileChooseCtx->n64ddFlags[gSaveContext.fileNum], sramCtx->readBuff + j + N64DD,
+ sizeof(fileChooseCtx->n64ddFlags[0]));
+ MemCopy(&fileChooseCtx->heartStatus[gSaveContext.fileNum], sramCtx->readBuff + j + DEFENSE,
+ sizeof(fileChooseCtx->heartStatus[0]));
+ MemCopy(&fileChooseCtx->nowLife[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH,
+ sizeof(fileChooseCtx->nowLife[0]));
+
+ osSyncPrintf("f_64dd[%d]=%d\n", gSaveContext.fileNum, fileChooseCtx->n64ddFlags[gSaveContext.fileNum]);
+ osSyncPrintf("heart_status[%d]=%d\n", gSaveContext.fileNum, fileChooseCtx->heartStatus[gSaveContext.fileNum]);
+ osSyncPrintf("now_life[%d]=%d\n", gSaveContext.fileNum, fileChooseCtx->nowLife[gSaveContext.fileNum]);
+}
+
+void Sram_EraseSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
+ s32 offset;
+
+ Sram_InitNewSave();
+
+ offset = gSramSlotOffsets[0][fileChooseCtx->selectedFileIdx];
+ MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
+
+ MemCopy(&fileChooseCtx->n64ddFlags[fileChooseCtx->selectedFileIdx], sramCtx->readBuff + offset + N64DD,
+ sizeof(fileChooseCtx->n64ddFlags[0]));
+
+ offset = gSramSlotOffsets[1][fileChooseCtx->selectedFileIdx];
+ MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
+
+ osSyncPrintf("CLEAR終了\n");
+}
+
+void Sram_CopySave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
+ s32 offset;
+
+ osSyncPrintf("READ=%d(%x) COPY=%d(%x)\n", fileChooseCtx->selectedFileIdx,
+ gSramSlotOffsets[0][fileChooseCtx->selectedFileIdx], fileChooseCtx->copyDestFileIdx,
+ gSramSlotOffsets[0][fileChooseCtx->copyDestFileIdx]);
+
+ offset = gSramSlotOffsets[0][fileChooseCtx->selectedFileIdx];
+ MemCopy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
+
+ offset = gSramSlotOffsets[0][fileChooseCtx->copyDestFileIdx];
+ MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
+
+ offset = gSramSlotOffsets[1][fileChooseCtx->copyDestFileIdx];
+ MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
+
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_WRITE);
+
+ offset = gSramSlotOffsets[0][fileChooseCtx->copyDestFileIdx];
+
+ MemCopy(&fileChooseCtx->deaths[fileChooseCtx->copyDestFileIdx], sramCtx->readBuff + offset + DEATHS,
+ sizeof(fileChooseCtx->deaths[0]));
+ MemCopy(&fileChooseCtx->fileNames[fileChooseCtx->copyDestFileIdx], sramCtx->readBuff + offset + NAME,
+ sizeof(fileChooseCtx->fileNames[0]));
+ MemCopy(&fileChooseCtx->healthCapacities[fileChooseCtx->copyDestFileIdx], sramCtx->readBuff + offset + HEALTH_CAP,
+ sizeof(fileChooseCtx->healthCapacities[0]));
+ MemCopy(&fileChooseCtx->questItems[fileChooseCtx->copyDestFileIdx], sramCtx->readBuff + offset + QUEST,
+ sizeof(fileChooseCtx->questItems[0]));
+ MemCopy(&fileChooseCtx->n64ddFlags[fileChooseCtx->copyDestFileIdx], sramCtx->readBuff + offset + N64DD,
+ sizeof(fileChooseCtx->n64ddFlags[0]));
+ MemCopy(&fileChooseCtx->heartStatus[fileChooseCtx->copyDestFileIdx], sramCtx->readBuff + offset + DEFENSE,
+ sizeof(fileChooseCtx->heartStatus[0]));
+ MemCopy(&fileChooseCtx->nowLife[fileChooseCtx->copyDestFileIdx], (sramCtx->readBuff + offset) + HEALTH,
+ sizeof(fileChooseCtx->nowLife[0]));
+
+ osSyncPrintf("f_64dd[%d]=%d\n", gSaveContext.fileNum, fileChooseCtx->n64ddFlags[gSaveContext.fileNum]);
+ osSyncPrintf("heart_status[%d]=%d\n", gSaveContext.fileNum, fileChooseCtx->heartStatus[gSaveContext.fileNum]);
+ osSyncPrintf("COPY終了\n"); // Copy end
+}
+
+void Sram_Write16Bytes(SramContext* sramCtx) {
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, 0x10, OS_WRITE);
+}
+
+void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
+ u16 i;
+
+ osSyncPrintf("sram_initialize( Game *game, Sram *sram )\n");
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
+
+ for (i = 0; i < ARRAY_COUNTU(sZeldaMagic) - 3; i++) {
+ if (sZeldaMagic[i + 3] != sramCtx->readBuff[i + 3]) {
+ // SRAM destruction! ! ! ! ! !
+ osSyncPrintf("SRAM破壊!!!!!!\n");
+ gSaveContext.language = sramCtx->readBuff[2];
+ MemCopy(sramCtx->readBuff, sZeldaMagic, sizeof(sZeldaMagic));
+ sramCtx->readBuff[2] = gSaveContext.language;
+ Sram_Write16Bytes(sramCtx);
+ }
+ }
+
+ gSaveContext.audioSetting = sramCtx->readBuff[0] & 3;
+ gSaveContext.zTargetSetting = sramCtx->readBuff[1] & 1;
+ gSaveContext.language = sramCtx->readBuff[2];
+
+ if (gSaveContext.language > 2) {
+ gSaveContext.language = 0;
+ sramCtx->readBuff[2] = gSaveContext.language;
+ Sram_Write16Bytes(sramCtx);
+ }
+
+ if (CHECK_BTN_ANY(gameState->input[2].cur.button, BTN_DRIGHT)) {
+ bzero(sramCtx->readBuff, SRAM_SIZE);
+ for (i = 0; i < CHECKSUM_SIZE; i++) {
+ sramCtx->readBuff[i] = i;
+ }
+ SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_WRITE);
+ // SRAM destruction! ! ! ! ! !
+ osSyncPrintf("SRAM破壊!!!!!!\n");
+ }
+
+ // GOOD! GOOD! Size =% d +% d =% d
+ osSyncPrintf("GOOD!GOOD! サイズ=%d + %d = %d\n", sizeof(SaveInfo), 4, sizeof(SaveInfo) + 4);
+ osSyncPrintf(VT_FGCOL(BLUE));
+ osSyncPrintf("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
+ osSyncPrintf("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
+ osSyncPrintf("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
+ osSyncPrintf(VT_RST);
+ func_800F6700(gSaveContext.audioSetting);
+}
+
+void Sram_Alloc(GameState* gameState, SramContext* sramCtx) {
+ sramCtx->readBuff = GameState_Alloc(gameState, SRAM_SIZE, "../z_sram.c", 1294);
+
+ if (!(sramCtx->readBuff != NULL)) {
+ __assert("sram->read_buff != NULL", "../z_sram.c", 1295);
+ }
+}
+
+void Sram_Init(GlobalContext* globalCtx, SramContext* sramCtx) {
+}
diff --git a/src/code/z_ss_sram.c b/src/code/z_ss_sram.c
new file mode 100644
index 000000000..6f929678c
--- /dev/null
+++ b/src/code/z_ss_sram.c
@@ -0,0 +1,53 @@
+#include "ultra64.h"
+#include "global.h"
+
+typedef struct {
+ /* 0x00 */ OSPiHandle piHandle;
+ /* 0x74 */ OSIoMesg ioMesg;
+ /* 0x8C */ OSMesgQueue mesgQ;
+} SsSramContext; // size = 0xA4
+
+SsSramContext sSsSramContext = { 0 };
+
+void SsSram_Init(u32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8 handlePageSize, u8 handleRelDuration,
+ u8 handlePulse, u32 handleSpeed) {
+ u32 intDisabled;
+ OSPiHandle* handle = &sSsSramContext.piHandle;
+
+ if ((u32)OS_PHYSICAL_TO_K1(addr) != (*handle).baseAddress) {
+ sSsSramContext.piHandle.type = handleType;
+ (*handle).baseAddress = OS_PHYSICAL_TO_K1(addr);
+ sSsSramContext.piHandle.latency = handleLatency;
+ sSsSramContext.piHandle.pulse = handlePulse;
+ sSsSramContext.piHandle.pageSize = handlePageSize;
+ sSsSramContext.piHandle.relDuration = handleRelDuration;
+ sSsSramContext.piHandle.domain = handleDomain;
+ sSsSramContext.piHandle.speed = handleSpeed;
+ bzero(&sSsSramContext.piHandle.transferInfo, sizeof(__OSTranxInfo));
+ intDisabled = __osDisableInt();
+ sSsSramContext.piHandle.next = __osPiTable;
+ __osPiTable = &sSsSramContext.piHandle;
+ __osRestoreInt(intDisabled);
+ sSsSramContext.ioMesg.hdr.pri = 0;
+ sSsSramContext.ioMesg.hdr.retQueue = &sSsSramContext.mesgQ;
+ sSsSramContext.ioMesg.devAddr = addr;
+ }
+}
+
+void SsSram_Dma(void* dramAddr, size_t size, s32 direction) {
+ OSMesg mesg;
+
+ osCreateMesgQueue(&sSsSramContext.mesgQ, &mesg, 1);
+ sSsSramContext.ioMesg.dramAddr = dramAddr;
+ sSsSramContext.ioMesg.size = size;
+ osWritebackDCache(dramAddr, size);
+ osEPiStartDma(&sSsSramContext.piHandle, &sSsSramContext.ioMesg, direction);
+ osRecvMesg(&sSsSramContext.mesgQ, &mesg, OS_MESG_BLOCK);
+ osInvalDCache(dramAddr, size);
+}
+
+void SsSram_ReadWrite(u32 addr, void* dramAddr, size_t size, s32 direction) {
+ osSyncPrintf("ssSRAMReadWrite:%08x %08x %08x %d\n", addr, dramAddr, size, direction);
+ SsSram_Init(addr, DEVICE_TYPE_SRAM, 1, 5, 0xD, 2, 0xC, 0);
+ SsSram_Dma(dramAddr, size, direction);
+}
diff --git a/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c b/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c
index a24114dd0..ec4d23211 100644
--- a/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c
+++ b/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c
@@ -104,7 +104,7 @@ s32 func_80994750(DoorGerudo* this, GlobalContext* globalCtx) {
void func_8099485C(DoorGerudo* this, GlobalContext* globalCtx) {
if (this->unk_164 != 0) {
this->actionFunc = func_8099496C;
- gSaveContext.dungeonKeys[gSaveContext.mapIndex] -= 1;
+ gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1;
Flags_SetSwitch(globalCtx, this->dyna.actor.params & 0x3F);
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
} else {
@@ -113,7 +113,7 @@ void func_8099485C(DoorGerudo* this, GlobalContext* globalCtx) {
if (direction != 0) {
Player* player = PLAYER;
- if (gSaveContext.dungeonKeys[gSaveContext.mapIndex] <= 0) {
+ if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) {
player->naviMessageId = -0x203;
} else if (!Flags_GetCollectible(globalCtx, (this->dyna.actor.params >> 8) & 0x1F)) {
player->naviMessageId = -0x225;
diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
index d4af67f4a..d8b52903a 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
@@ -426,7 +426,7 @@ s32 func_80A3AEBC(GlobalContext* globalCtx, EnGirlA* this) {
}
s32 func_80A3AF30(GlobalContext* globalCtx, EnGirlA* this) {
- if ((gBitFlags[2] & gSaveContext.equipment) && !(gBitFlags[3] & gSaveContext.equipment)) {
+ if ((gBitFlags[2] & gSaveContext.inventory.equipment) && !(gBitFlags[3] & gSaveContext.inventory.equipment)) {
return 2;
}
if (gSaveContext.rupees < this->unk_1C8) {
@@ -439,7 +439,7 @@ s32 func_80A3AF30(GlobalContext* globalCtx, EnGirlA* this) {
}
s32 func_80A3AFC4(GlobalContext* globalCtx, EnGirlA* this) {
- if (gBitFlags[5] & gSaveContext.equipment) {
+ if (gBitFlags[5] & gSaveContext.inventory.equipment) {
return 2;
}
if (gSaveContext.rupees < this->unk_1C8) {
@@ -452,7 +452,7 @@ s32 func_80A3AFC4(GlobalContext* globalCtx, EnGirlA* this) {
}
s32 func_80A3B040(GlobalContext* globalCtx, EnGirlA* this) {
- if (gBitFlags[4] & gSaveContext.equipment) {
+ if (gBitFlags[4] & gSaveContext.inventory.equipment) {
return 2;
}
if (gSaveContext.rupees < this->unk_1C8) {
@@ -468,7 +468,7 @@ s32 func_80A3B0BC(GlobalContext* globalCtx, EnGirlA* this) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
return 2;
}
- if (gBitFlags[9] & gSaveContext.equipment) {
+ if (gBitFlags[9] & gSaveContext.inventory.equipment) {
return 2;
}
if (gSaveContext.rupees < this->unk_1C8) {
@@ -484,7 +484,7 @@ s32 func_80A3B160(GlobalContext* globalCtx, EnGirlA* this) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
return 2;
}
- if (gBitFlags[10] & gSaveContext.equipment) {
+ if (gBitFlags[10] & gSaveContext.inventory.equipment) {
return 2;
}
if (gSaveContext.rupees < this->unk_1C8) {
diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
index aa9ce8a1a..4e8d84a60 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -234,7 +234,7 @@ void EnIshi_DropCollectible(EnIshi* this, GlobalContext* globalCtx) {
if (dropParams >= 0xD) {
dropParams = 0;
}
-
+
Item_DropCollectibleRandom(globalCtx, NULL, &this->actor.posRot.pos, dropParams << 4);
}
}
diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
index 718959413..2a72df2b1 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
@@ -169,13 +169,13 @@ void func_80A8F660(EnKakasi* this, GlobalContext* globalCtx) {
this->unk_196 = 6;
if (LINK_IS_CHILD) {
this->unk_194 = false;
- if (gSaveContext.unk_F3C[4] != 0) {
+ if (gSaveContext.scarecrowCustomSongSet) {
this->actor.textId = 0x407A;
this->unk_196 = 5;
}
} else {
this->unk_194 = true;
- if (gSaveContext.unk_F3C[4] != 0) {
+ if (gSaveContext.scarecrowCustomSongSet) {
this->actor.textId = 0x4079;
this->unk_196 = 5;
}
@@ -335,7 +335,7 @@ void EnKakasi_Draw(Actor* thisx, GlobalContext* globalCtx) {
if (BREG(3) != 0) {
osSyncPrintf("\n\n");
// flag!
- osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.unk_F3C[4]);
+ osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.scarecrowCustomSongSet);
}
func_80093D18(globalCtx->state.gfxCtx);
SkelAnime_DrawSV(globalCtx, this->skelanime.skeleton, this->skelanime.limbDrawTbl, this->skelanime.dListCount, NULL,
diff --git a/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c b/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c
index b3cb061f5..be25f5f20 100644
--- a/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c
+++ b/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c
@@ -205,7 +205,8 @@ void EnKakasi2_Update(Actor* thisx, GlobalContext* globalCtx) {
}
if (BREG(0) != 0) {
if (BREG(5) != 0) {
- osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ this->actor.player_distance ☆☆☆☆☆ %f\n" VT_RST, this->actor.xzDistFromLink);
+ osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ this->actor.player_distance ☆☆☆☆☆ %f\n" VT_RST,
+ this->actor.xzDistFromLink);
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ this->hosei.x ☆☆☆☆☆ %f\n" VT_RST, this->maxSpawnDistance.x);
osSyncPrintf("\n\n");
}
diff --git a/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c b/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c
index b0e0acea6..2ad430e02 100644
--- a/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c
+++ b/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c
@@ -179,14 +179,14 @@ void func_80A91284(EnKakasi3* this, GlobalContext* globalCtx) {
if (LINK_IS_CHILD) {
this->unk_194 = false;
- if (gSaveContext.unk_12C5 != 0) {
+ if (gSaveContext.scarecrowSpawnSongSet) {
this->actor.textId = 0x40A0;
this->dialogState = 5;
this->unk_1A8 = 1;
}
} else {
this->unk_194 = true;
- if (gSaveContext.unk_12C5 != 0) {
+ if (gSaveContext.scarecrowSpawnSongSet) {
if (this->unk_195) {
this->actor.textId = 0x40A2;
} else {
@@ -238,7 +238,7 @@ void func_80A91348(EnKakasi3* this, GlobalContext* globalCtx) {
if (this->actor.xzDistFromLink < 80.0f) {
player->stateFlags2 |= 0x800000;
}
- } else if (gSaveContext.unk_12C5 != 0 && !this->unk_195) {
+ } else if (gSaveContext.scarecrowSpawnSongSet && !this->unk_195) {
if (player->stateFlags2 & 0x1000000) {
this->camId = func_800800F8(globalCtx, 0x8D4, -0x63, &this->actor, 0);
@@ -341,7 +341,7 @@ void func_80A918E4(EnKakasi3* this, GlobalContext* globalCtx) {
}
if ((globalCtx->msgCtx.unk_E3EE == 4 || (globalCtx->msgCtx.unk_E3EE >= 5 && globalCtx->msgCtx.unk_E3EE < 11)) &&
globalCtx->msgCtx.msgMode == 0) {
-
+
func_8010B680(globalCtx, 0x40A6, NULL);
this->dialogState = 5;
func_800803F0(globalCtx, this->camId);
@@ -405,7 +405,7 @@ void EnKakasi3_Update(Actor* thisx, GlobalContext* globalCtx) {
if (BREG(2) != 0) {
osSyncPrintf("\n\n");
// flag!
- osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.unk_12C5);
+ osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.scarecrowSpawnSongSet);
}
this->unk_198++;
diff --git a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
index 2b9998f89..2423df653 100644
--- a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
+++ b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
@@ -83,13 +83,13 @@ u16 func_80AA2AA0(GlobalContext* globalCtx, Actor* thisx) {
if (gSaveContext.timer1Value >= 0xD3) {
return 0x208E;
}
- if ((gSaveContext.unk_EC4 == 0) || (gSaveContext.unk_EC4 >= 0xB4)) {
- gSaveContext.unk_EC4 = 0xB4;
+ if ((gSaveContext.horseRaceRecord == 0) || (gSaveContext.horseRaceRecord >= 0xB4)) {
+ gSaveContext.horseRaceRecord = 0xB4;
gSaveContext.timer1Value = *timer1ValuePtr;
}
if (!(gSaveContext.eventChkInf[1] & 0x4000) && (gSaveContext.timer1Value < 0x32)) {
return 0x208F;
- } else if (gSaveContext.timer1Value < gSaveContext.unk_EC4) {
+ } else if (gSaveContext.timer1Value < gSaveContext.horseRaceRecord) {
return 0x2012;
} else {
return 0x2004;
@@ -126,7 +126,7 @@ s16 func_80AA2BD4(GlobalContext* globalCtx, Actor* thisx) {
if (globalCtx->msgCtx.choiceIndex == 0) {
if (gSaveContext.eventChkInf[1] & 0x4000) {
func_8010B720(globalCtx, 0x2091);
- } else if (gSaveContext.unk_EC4 == 0) {
+ } else if (gSaveContext.horseRaceRecord == 0) {
func_8010B720(globalCtx, 0x2092);
} else {
func_8010B720(globalCtx, 0x2090);
@@ -144,8 +144,8 @@ s16 func_80AA2BD4(GlobalContext* globalCtx, Actor* thisx) {
gSaveContext.eventChkInf[1] |= 0x4000;
case 0x2004:
case 0x2012:
- if (gSaveContext.unk_EC4 > gSaveContext.timer1Value) {
- gSaveContext.unk_EC4 = gSaveContext.timer1Value;
+ if (gSaveContext.horseRaceRecord > gSaveContext.timer1Value) {
+ gSaveContext.horseRaceRecord = gSaveContext.timer1Value;
}
case 0x208E:
gSaveContext.eventInf[0] &= ~0x400;
diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
index e6afa9516..bcecb5aff 100644
--- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
+++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
@@ -117,7 +117,7 @@ void func_80ABEF2C(EnOkarinaTag* this, GlobalContext* globalCtx) {
if ((this->switchFlag >= 0) && (Flags_GetSwitch(globalCtx, this->switchFlag))) {
this->actor.flags &= ~1;
} else {
- if ((this->unk_152 != 6) || (gSaveContext.unk_12C5 != 0)) {
+ if ((this->unk_152 != 6) || (gSaveContext.scarecrowSpawnSongSet)) {
if (player->stateFlags2 & 0x1000000) {
// "North! ! ! ! !"
osSyncPrintf(VT_FGCOL(RED) "☆☆☆☆☆ 北!!!!! ☆☆☆☆☆ %f\n" VT_RST, this->actor.xzDistFromLink);
@@ -189,7 +189,7 @@ void func_80ABF28C(EnOkarinaTag* this, GlobalContext* globalCtx) {
Player* player = PLAYER;
this->unk_15A++;
- if ((this->unk_152 != 6) || (gSaveContext.unk_12C5 != 0)) {
+ if ((this->unk_152 != 6) || (gSaveContext.scarecrowSpawnSongSet)) {
if ((this->switchFlag >= 0) && Flags_GetSwitch(globalCtx, this->switchFlag)) {
this->actor.flags &= ~1;
} else if (((this->unk_150 != 4) || !(gSaveContext.eventChkInf[4] & 0x800)) &&
diff --git a/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c b/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c
index 9792a5c0a..9d3437026 100644
--- a/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c
+++ b/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c
@@ -229,12 +229,11 @@ void func_80AE5270(EnReeba* this, GlobalContext* globalCtx) {
this->actionfunc = func_80AE5688;
return;
}
-
+
if (this->unk_274 == 0) {
Audio_PlayActorSound2(&this->actor, NA_SE_EN_RIVA_MOVE);
this->unk_274 = 10;
}
-
}
void func_80AE538C(EnReeba* this, GlobalContext* globalCtx) {
diff --git a/src/overlays/actors/ovl_En_Rl/z_en_rl.c b/src/overlays/actors/ovl_En_Rl/z_en_rl.c
index 78ea321bb..f72590aab 100644
--- a/src/overlays/actors/ovl_En_Rl/z_en_rl.c
+++ b/src/overlays/actors/ovl_En_Rl/z_en_rl.c
@@ -396,4 +396,4 @@ const ActorInit En_Rl_InitVars = {
(ActorFunc)EnRl_Destroy,
(ActorFunc)EnRl_Update,
(ActorFunc)EnRl_Draw,
-}; \ No newline at end of file
+};
diff --git a/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c b/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c
index e07be9274..552133f83 100644
--- a/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c
+++ b/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c
@@ -57,7 +57,7 @@ void EnTakaraMan_Init(Actor* thisx, GlobalContext* globalCtx) {
osSyncPrintf(VT_FGCOL(PURPLE) "☆☆☆☆☆ ばぅん! ☆☆☆☆☆ %x\n" VT_RST,
globalCtx->actorCtx.flags.chest); // "Bun! %x" (needs a better translation)
globalCtx->actorCtx.flags.chest = 0;
- gSaveContext.dungeonKeys[gSaveContext.mapIndex] = -1;
+ gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] = -1;
SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_06004FE0, &D_06000498, this->limbDrawTbl, this->transitionDrawTbl,
10);
thisx->posRot2.pos = thisx->posRot.pos;
diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
index daa7d7477..ca2271722 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -268,10 +268,8 @@ void ObjSyokudai_Draw(Actor* thisx, GlobalContext* globalCtx) {
gDPSetEnvColor(oGfxCtx->polyXlu.p++, 255, 0, 0, 0);
Matrix_Translate(0.0f, 52.0f, 0.0f, MTXMODE_APPLY);
- Matrix_RotateY(
- (s16)(func_8005A9F4(ACTIVE_CAM) - this->actor.shape.rot.y + 0x8000) *
- (M_PI / 0x8000),
- MTXMODE_APPLY);
+ Matrix_RotateY((s16)(func_8005A9F4(ACTIVE_CAM) - this->actor.shape.rot.y + 0x8000) * (M_PI / 0x8000),
+ MTXMODE_APPLY);
Matrix_Scale(flameScale, flameScale, flameScale, MTXMODE_APPLY);
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_obj_syokudai.c", 745),
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 03931dd03..c68642e50 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -3056,7 +3056,7 @@ void func_80836BEC(Player* this, GlobalContext* globalCtx) {
actorToTarget = &PLAYER->actor;
}
- holdTarget = (gSaveContext.zTargetingSetting != 0) || (this->actor.type != ACTORTYPE_PLAYER);
+ holdTarget = (gSaveContext.zTargetSetting != 0) || (this->actor.type != ACTORTYPE_PLAYER);
this->stateFlags1 |= 0x8000;
if ((actorToTarget != NULL) && !(actorToTarget->flags & 0x8000000)) {
@@ -4042,9 +4042,9 @@ s32 func_80839034(GlobalContext* globalCtx, Player* this, CollisionPoly* arg2, u
}
if (linearVel > R_RUN_SPEED_LIMIT / 100.0f) {
- gSaveContext.unk_13BC = R_RUN_SPEED_LIMIT / 100.0f;
+ gSaveContext.entranceSpeed = R_RUN_SPEED_LIMIT / 100.0f;
} else {
- gSaveContext.unk_13BC = linearVel;
+ gSaveContext.entranceSpeed = linearVel;
}
if (D_808535F4 != 0) {
@@ -4273,8 +4273,8 @@ s32 func_80839800(Player* this, GlobalContext* globalCtx) {
func_8003C890(&globalCtx->colCtx, &sp58, &sp4C);
if (func_80839034(globalCtx, this, sp58, 50)) {
- gSaveContext.unk_13BC = 2.0f;
- gSaveContext.unk_13C0 = NA_SE_OC_DOOR_OPEN;
+ gSaveContext.entranceSpeed = 2.0f;
+ gSaveContext.entranceSound = NA_SE_OC_DOOR_OPEN;
}
} else {
func_8005AD40(Gameplay_GetCamera(globalCtx, 0), doorActor,
@@ -5356,18 +5356,18 @@ void func_8083CA20(GlobalContext* globalCtx, Player* this) {
void func_8083CA54(GlobalContext* globalCtx, Player* this) {
this->linearVelocity = 2.0f;
- gSaveContext.unk_13BC = 2.0f;
+ gSaveContext.entranceSpeed = 2.0f;
if (func_8083C910(globalCtx, this, 120.0f)) {
this->unk_850 = -15;
}
}
void func_8083CA9C(GlobalContext* globalCtx, Player* this) {
- if (gSaveContext.unk_13BC < 0.1f) {
- gSaveContext.unk_13BC = 0.1f;
+ if (gSaveContext.entranceSpeed < 0.1f) {
+ gSaveContext.entranceSpeed = 0.1f;
}
- this->linearVelocity = gSaveContext.unk_13BC;
+ this->linearVelocity = gSaveContext.entranceSpeed;
if (func_8083C910(globalCtx, this, 800.0f)) {
this->unk_850 = -80 / this->linearVelocity;
@@ -8676,7 +8676,7 @@ void func_80845CA4(Player* this, GlobalContext* globalCtx) {
sp30 = 20;
if (this->stateFlags1 & 1) {
- sp34 = gSaveContext.unk_13BC;
+ sp34 = gSaveContext.entranceSpeed;
if (D_808535F4 != 0) {
this->unk_450.x = (Math_Sins(D_808535FC) * 400.0f) + this->actor.posRot.pos.x;
@@ -8685,7 +8685,7 @@ void func_80845CA4(Player* this, GlobalContext* globalCtx) {
} else if (this->unk_850 < 0) {
this->unk_850++;
- sp34 = gSaveContext.unk_13BC;
+ sp34 = gSaveContext.entranceSpeed;
sp30 = -1;
}
@@ -9071,7 +9071,7 @@ void Player_Init(Actor* thisx, GlobalContext* globalCtx) {
s32 sp4C;
s32 initMode;
s16 params;
- u16 unk_13C0;
+ u16 entranceSound;
globalCtx->unk_11E5C = globalCtx->bombchuBowlingAmmo = 0;
@@ -9125,7 +9125,7 @@ void Player_Init(Actor* thisx, GlobalContext* globalCtx) {
}
if ((sp50 == 0) || (sp50 < -1)) {
- if ((scene->titleFile.vromStart != scene->titleFile.vromEnd) && (gSaveContext.unk_13C7 != 0) &&
+ if ((scene->titleFile.vromStart != scene->titleFile.vromEnd) && (gSaveContext.showTitleCard) &&
(gSaveContext.sceneSetupIndex < 4) &&
(gEntranceTable[gSaveContext.entranceIndex + gSaveContext.sceneSetupIndex].field & 0x4000) &&
((globalCtx->sceneNum != SCENE_DDAN) || (gSaveContext.eventChkInf[11] & 1)) &&
@@ -9133,7 +9133,7 @@ void Player_Init(Actor* thisx, GlobalContext* globalCtx) {
TitleCard_InitPlaceName(globalCtx, &globalCtx->actorCtx.titleCtx, this->giObjectSegment, 0xA0, 0x78, 0x90,
0x18, 0x14);
}
- gSaveContext.unk_13C7 = 1;
+ gSaveContext.showTitleCard = true;
}
if (sp50 == 2) {
@@ -9177,10 +9177,10 @@ void Player_Init(Actor* thisx, GlobalContext* globalCtx) {
this->stateFlags3 &= ~0x40;
}
- if (gSaveContext.unk_13C0 != 0) {
- unk_13C0 = gSaveContext.unk_13C0;
- Audio_PlayActorSound2(&this->actor, unk_13C0);
- gSaveContext.unk_13C0 = 0;
+ if (gSaveContext.entranceSound != 0) {
+ entranceSound = gSaveContext.entranceSound;
+ Audio_PlayActorSound2(&this->actor, entranceSound);
+ gSaveContext.entranceSound = 0;
}
Map_SavePlayerInitialInfo(globalCtx);
@@ -11818,7 +11818,8 @@ s32 func_8084DFF4(GlobalContext* globalCtx, Player* this) {
Audio_PlaySoundGeneral(NA_SE_SY_GET_BOXITEM, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
} else {
if ((this->getItemId == GI_HEART_CONTAINER_2) || (this->getItemId == GI_HEART_CONTAINER) ||
- ((this->getItemId == GI_HEART_PIECE) && ((gSaveContext.questItems & 0xF0000000) == 0x40000000))) {
+ ((this->getItemId == GI_HEART_PIECE) &&
+ ((gSaveContext.inventory.questItems & 0xF0000000) == 0x40000000))) {
temp1 = 0x924;
} else {
temp1 = temp2 = (this->getItemId == GI_HEART_PIECE) ? 0x39 : 0x922;
diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c
index 149b1e2b7..9fe700d05 100644
--- a/src/overlays/gamestates/ovl_opening/z_opening.c
+++ b/src/overlays/gamestates/ovl_opening/z_opening.c
@@ -10,7 +10,7 @@ void Opening_SetupTitleScreen(OpeningContext* this) {
gSaveContext.gameMode = 1;
this->state.running = false;
gSaveContext.linkAge = 0;
- func_800A82C8();
+ Sram_InitDebugSave();
gSaveContext.cutsceneIndex = 0xFFF3;
gSaveContext.sceneSetupIndex = 7;
SET_NEXT_GAMESTATE(&this->state, Gameplay_Init, GlobalContext);
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index 309139e03..f858abf0f 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -19,7 +19,7 @@ void Select_LoadGame(SelectContext* this, s32 entranceIndex) {
osSyncPrintf("\n\n\nFILE_NO=%x\n\n\n", gSaveContext.fileNum);
osSyncPrintf(VT_RST);
if (gSaveContext.fileNum == 0xFF) {
- func_800A82C8();
+ Sram_InitDebugSave();
gSaveContext.unk_13F6 = gSaveContext.magic;
gSaveContext.magic = 0;
gSaveContext.unk_13F4 = 0;
@@ -37,7 +37,7 @@ void Select_LoadGame(SelectContext* this, s32 entranceIndex) {
gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = -1;
gSaveContext.seqIndex = 0xFF;
gSaveContext.nightSeqIndex = 0xFF;
- gSaveContext.unk_13C7 = 1;
+ gSaveContext.showTitleCard = true;
D_8011FB30 = 0;
this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, Gameplay_Init, GlobalContext);
diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c
index ee1408768..72ce3e69a 100644
--- a/src/overlays/gamestates/ovl_title/z_title.c
+++ b/src/overlays/gamestates/ovl_title/z_title.c
@@ -155,7 +155,7 @@ void Title_Main(TitleContext* this) {
}
void Title_Destroy(TitleContext* this) {
- func_800A9AD0(this, &this->sram);
+ Sram_InitSram(this, &this->sramCtx);
}
void Title_Init(TitleContext* this) {
@@ -175,7 +175,7 @@ void Title_Init(TitleContext* this) {
this->state.destroy = Title_Destroy;
this->exit = false;
gSaveContext.fileNum = 0xFF;
- func_800A9CD4(&this->state, &this->sram);
+ Sram_Alloc(&this->state, &this->sramCtx);
this->ult = 0;
this->unk_1D4 = 0x14;
this->coverAlpha = 255;