summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman971 <romanlasnier@hotmail.com>2020-03-31 10:02:59 +0200
committerRoman971 <romanlasnier@hotmail.com>2020-03-31 10:02:59 +0200
commite99b2af35a97d3427a288656089695d2fee7fbb2 (patch)
tree2ef05a2270c50316d5e718c7ef429e1c92554cf2
parentf5ffe8687d1add25f9884b7f90999d3db92cf5f2 (diff)
parent9884655260688617339d1591271ff087fa5df5d8 (diff)
Merge branch 'master' into z_rcp
-rw-r--r--asm/non_matchings/code/z_elf_message/ElfMessage_CheckCondition.s (renamed from asm/non_matchings/code/z_elf_message/func_8006BBC0.s)2
-rw-r--r--asm/non_matchings/code/z_elf_message/func_8006BE88.s44
-rw-r--r--asm/non_matchings/code/z_elf_message/func_8006BF1C.s144
-rw-r--r--asm/non_matchings/code/z_elf_message/func_8006C0FC.s145
-rw-r--r--asm/non_matchings/code/z_elf_message/func_8006C2B0.s32
-rw-r--r--asm/non_matchings/code/z_elf_message/func_8006C318.s18
-rw-r--r--asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05040.s2
-rw-r--r--asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05188.s2
-rw-r--r--asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05208.s2
-rw-r--r--asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A053F0.s4
-rw-r--r--data/z_elf_message.data.s14
-rw-r--r--include/functions.h6
-rw-r--r--include/variables.h2
-rw-r--r--include/z64.h9
-rw-r--r--include/z64scene.h2
-rw-r--r--spec1
-rw-r--r--src/code/z_elf_message.c170
-rw-r--r--src/code/z_play.c2
-rw-r--r--src/code/z_scene.c4
19 files changed, 184 insertions, 421 deletions
diff --git a/asm/non_matchings/code/z_elf_message/func_8006BBC0.s b/asm/non_matchings/code/z_elf_message/ElfMessage_CheckCondition.s
index 7759b7b1e..28f549982 100644
--- a/asm/non_matchings/code/z_elf_message/func_8006BBC0.s
+++ b/asm/non_matchings/code/z_elf_message/ElfMessage_CheckCondition.s
@@ -91,7 +91,7 @@ glabel jtbl_8013B8C8
.word L8006BE10
.text
-glabel func_8006BBC0
+glabel ElfMessage_CheckCondition
/* AE2D60 8006BBC0 27BDFFE8 */ addiu $sp, $sp, -0x18
/* AE2D64 8006BBC4 AFBF0014 */ sw $ra, 0x14($sp)
/* AE2D68 8006BBC8 90850000 */ lbu $a1, ($a0)
diff --git a/asm/non_matchings/code/z_elf_message/func_8006BE88.s b/asm/non_matchings/code/z_elf_message/func_8006BE88.s
deleted file mode 100644
index 0915b36fb..000000000
--- a/asm/non_matchings/code/z_elf_message/func_8006BE88.s
+++ /dev/null
@@ -1,44 +0,0 @@
-glabel func_8006BE88
-/* AE3028 8006BE88 27BDFFD8 */ addiu $sp, $sp, -0x28
-/* AE302C 8006BE8C AFBF0024 */ sw $ra, 0x24($sp)
-/* AE3030 8006BE90 AFB20020 */ sw $s2, 0x20($sp)
-/* AE3034 8006BE94 AFB1001C */ sw $s1, 0x1c($sp)
-/* AE3038 8006BE98 AFB00018 */ sw $s0, 0x18($sp)
-/* AE303C 8006BE9C 8C850000 */ lw $a1, ($a0)
-/* AE3040 8006BEA0 24120020 */ li $s2, 32
-/* AE3044 8006BEA4 00808025 */ move $s0, $a0
-/* AE3048 8006BEA8 90AE0000 */ lbu $t6, ($a1)
-/* AE304C 8006BEAC 24110001 */ li $s1, 1
-/* AE3050 8006BEB0 31CF00E0 */ andi $t7, $t6, 0xe0
-/* AE3054 8006BEB4 164F000D */ bne $s2, $t7, .L8006BEEC
-/* AE3058 8006BEB8 00000000 */ nop
-.L8006BEBC:
-/* AE305C 8006BEBC 0C01AEF0 */ jal func_8006BBC0
-/* AE3060 8006BEC0 00A02025 */ move $a0, $a1
-/* AE3064 8006BEC4 54400003 */ bnezl $v0, .L8006BED4
-/* AE3068 8006BEC8 8E180000 */ lw $t8, ($s0)
-/* AE306C 8006BECC 00008825 */ move $s1, $zero
-/* AE3070 8006BED0 8E180000 */ lw $t8, ($s0)
-.L8006BED4:
-/* AE3074 8006BED4 27050004 */ addiu $a1, $t8, 4
-/* AE3078 8006BED8 AE050000 */ sw $a1, ($s0)
-/* AE307C 8006BEDC 90A80000 */ lbu $t0, ($a1)
-/* AE3080 8006BEE0 310900E0 */ andi $t1, $t0, 0xe0
-/* AE3084 8006BEE4 1249FFF5 */ beq $s2, $t1, .L8006BEBC
-/* AE3088 8006BEE8 00000000 */ nop
-.L8006BEEC:
-/* AE308C 8006BEEC 12200005 */ beqz $s1, .L8006BF04
-/* AE3090 8006BEF0 00001025 */ move $v0, $zero
-/* AE3094 8006BEF4 0C01AEF0 */ jal func_8006BBC0
-/* AE3098 8006BEF8 00A02025 */ move $a0, $a1
-/* AE309C 8006BEFC 10000002 */ b .L8006BF08
-/* AE30A0 8006BF00 8FBF0024 */ lw $ra, 0x24($sp)
-.L8006BF04:
-/* AE30A4 8006BF04 8FBF0024 */ lw $ra, 0x24($sp)
-.L8006BF08:
-/* AE30A8 8006BF08 8FB00018 */ lw $s0, 0x18($sp)
-/* AE30AC 8006BF0C 8FB1001C */ lw $s1, 0x1c($sp)
-/* AE30B0 8006BF10 8FB20020 */ lw $s2, 0x20($sp)
-/* AE30B4 8006BF14 03E00008 */ jr $ra
-/* AE30B8 8006BF18 27BD0028 */ addiu $sp, $sp, 0x28
-
diff --git a/asm/non_matchings/code/z_elf_message/func_8006BF1C.s b/asm/non_matchings/code/z_elf_message/func_8006BF1C.s
deleted file mode 100644
index 3f686b48d..000000000
--- a/asm/non_matchings/code/z_elf_message/func_8006BF1C.s
+++ /dev/null
@@ -1,144 +0,0 @@
-glabel func_8006BF1C
-/* AE30BC 8006BF1C 27BDFF90 */ addiu $sp, $sp, -0x70
-/* AE30C0 8006BF20 AFB30020 */ sw $s3, 0x20($sp)
-/* AE30C4 8006BF24 AFB2001C */ sw $s2, 0x1c($sp)
-/* AE30C8 8006BF28 AFB10018 */ sw $s1, 0x18($sp)
-/* AE30CC 8006BF2C AFBF0024 */ sw $ra, 0x24($sp)
-/* AE30D0 8006BF30 AFB00014 */ sw $s0, 0x14($sp)
-/* AE30D4 8006BF34 00808825 */ move $s1, $a0
-/* AE30D8 8006BF38 8C900000 */ lw $s0, ($a0)
-/* AE30DC 8006BF3C 00009025 */ move $s2, $zero
-/* AE30E0 8006BF40 00009825 */ move $s3, $zero
-/* AE30E4 8006BF44 27A30044 */ addiu $v1, $sp, 0x44
-.L8006BF48:
-/* AE30E8 8006BF48 02002025 */ move $a0, $s0
-/* AE30EC 8006BF4C 0C01AEF0 */ jal func_8006BBC0
-/* AE30F0 8006BF50 AFA30030 */ sw $v1, 0x30($sp)
-/* AE30F4 8006BF54 8FA30030 */ lw $v1, 0x30($sp)
-/* AE30F8 8006BF58 24010040 */ li $at, 64
-/* AE30FC 8006BF5C 02429021 */ addu $s2, $s2, $v0
-/* AE3100 8006BF60 AC620000 */ sw $v0, ($v1)
-/* AE3104 8006BF64 920E0004 */ lbu $t6, 4($s0)
-/* AE3108 8006BF68 26730001 */ addiu $s3, $s3, 1
-/* AE310C 8006BF6C 26100004 */ addiu $s0, $s0, 4
-/* AE3110 8006BF70 31CF00E0 */ andi $t7, $t6, 0xe0
-/* AE3114 8006BF74 11E1FFF4 */ beq $t7, $at, .L8006BF48
-/* AE3118 8006BF78 24630004 */ addiu $v1, $v1, 4
-/* AE311C 8006BF7C 56400004 */ bnezl $s2, .L8006BF90
-/* AE3120 8006BF80 44922000 */ mtc1 $s2, $f4
-/* AE3124 8006BF84 10000056 */ b .L8006C0E0
-/* AE3128 8006BF88 00001025 */ move $v0, $zero
-/* AE312C 8006BF8C 44922000 */ mtc1 $s2, $f4
-.L8006BF90:
-/* AE3130 8006BF90 0C00CFBE */ jal Math_Rand_ZeroFloat
-/* AE3134 8006BF94 46802320 */ cvt.s.w $f12, $f4
-/* AE3138 8006BF98 4600018D */ trunc.w.s $f6, $f0
-/* AE313C 8006BF9C 00009025 */ move $s2, $zero
-/* AE3140 8006BFA0 32650003 */ andi $a1, $s3, 3
-/* AE3144 8006BFA4 44023000 */ mfc1 $v0, $f6
-/* AE3148 8006BFA8 5A60004D */ blezl $s3, .L8006C0E0
-/* AE314C 8006BFAC 00001025 */ move $v0, $zero
-/* AE3150 8006BFB0 10A00014 */ beqz $a1, .L8006C004
-/* AE3154 8006BFB4 00A02025 */ move $a0, $a1
-/* AE3158 8006BFB8 0000C880 */ sll $t9, $zero, 2
-/* AE315C 8006BFBC 27A80044 */ addiu $t0, $sp, 0x44
-/* AE3160 8006BFC0 03281821 */ addu $v1, $t9, $t0
-.L8006BFC4:
-/* AE3164 8006BFC4 8C690000 */ lw $t1, ($v1)
-/* AE3168 8006BFC8 51200008 */ beql $t1, $zero, .L8006BFEC
-/* AE316C 8006BFCC 8E2A0000 */ lw $t2, ($s1)
-/* AE3170 8006BFD0 18400003 */ blez $v0, .L8006BFE0
-/* AE3174 8006BFD4 00000000 */ nop
-/* AE3178 8006BFD8 10000003 */ b .L8006BFE8
-/* AE317C 8006BFDC 2442FFFF */ addiu $v0, $v0, -1
-.L8006BFE0:
-/* AE3180 8006BFE0 1000003F */ b .L8006C0E0
-/* AE3184 8006BFE4 24020001 */ li $v0, 1
-.L8006BFE8:
-/* AE3188 8006BFE8 8E2A0000 */ lw $t2, ($s1)
-.L8006BFEC:
-/* AE318C 8006BFEC 26520001 */ addiu $s2, $s2, 1
-/* AE3190 8006BFF0 24630004 */ addiu $v1, $v1, 4
-/* AE3194 8006BFF4 254B0004 */ addiu $t3, $t2, 4
-/* AE3198 8006BFF8 1492FFF2 */ bne $a0, $s2, .L8006BFC4
-/* AE319C 8006BFFC AE2B0000 */ sw $t3, ($s1)
-/* AE31A0 8006C000 12530036 */ beq $s2, $s3, .L8006C0DC
-.L8006C004:
-/* AE31A4 8006C004 00126080 */ sll $t4, $s2, 2
-/* AE31A8 8006C008 27AD0044 */ addiu $t5, $sp, 0x44
-/* AE31AC 8006C00C 018D1821 */ addu $v1, $t4, $t5
-.L8006C010:
-/* AE31B0 8006C010 8C6E0000 */ lw $t6, ($v1)
-/* AE31B4 8006C014 51C00008 */ beql $t6, $zero, .L8006C038
-/* AE31B8 8006C018 8E2F0000 */ lw $t7, ($s1)
-/* AE31BC 8006C01C 18400003 */ blez $v0, .L8006C02C
-/* AE31C0 8006C020 00000000 */ nop
-/* AE31C4 8006C024 10000003 */ b .L8006C034
-/* AE31C8 8006C028 2442FFFF */ addiu $v0, $v0, -1
-.L8006C02C:
-/* AE31CC 8006C02C 1000002C */ b .L8006C0E0
-/* AE31D0 8006C030 24020001 */ li $v0, 1
-.L8006C034:
-/* AE31D4 8006C034 8E2F0000 */ lw $t7, ($s1)
-.L8006C038:
-/* AE31D8 8006C038 25F80004 */ addiu $t8, $t7, 4
-/* AE31DC 8006C03C AE380000 */ sw $t8, ($s1)
-/* AE31E0 8006C040 8C790004 */ lw $t9, 4($v1)
-/* AE31E4 8006C044 53200008 */ beql $t9, $zero, .L8006C068
-/* AE31E8 8006C048 8E280000 */ lw $t0, ($s1)
-/* AE31EC 8006C04C 18400003 */ blez $v0, .L8006C05C
-/* AE31F0 8006C050 00000000 */ nop
-/* AE31F4 8006C054 10000003 */ b .L8006C064
-/* AE31F8 8006C058 2442FFFF */ addiu $v0, $v0, -1
-.L8006C05C:
-/* AE31FC 8006C05C 10000020 */ b .L8006C0E0
-/* AE3200 8006C060 24020001 */ li $v0, 1
-.L8006C064:
-/* AE3204 8006C064 8E280000 */ lw $t0, ($s1)
-.L8006C068:
-/* AE3208 8006C068 25090004 */ addiu $t1, $t0, 4
-/* AE320C 8006C06C AE290000 */ sw $t1, ($s1)
-/* AE3210 8006C070 8C6A0008 */ lw $t2, 8($v1)
-/* AE3214 8006C074 51400008 */ beql $t2, $zero, .L8006C098
-/* AE3218 8006C078 8E2B0000 */ lw $t3, ($s1)
-/* AE321C 8006C07C 18400003 */ blez $v0, .L8006C08C
-/* AE3220 8006C080 00000000 */ nop
-/* AE3224 8006C084 10000003 */ b .L8006C094
-/* AE3228 8006C088 2442FFFF */ addiu $v0, $v0, -1
-.L8006C08C:
-/* AE322C 8006C08C 10000014 */ b .L8006C0E0
-/* AE3230 8006C090 24020001 */ li $v0, 1
-.L8006C094:
-/* AE3234 8006C094 8E2B0000 */ lw $t3, ($s1)
-.L8006C098:
-/* AE3238 8006C098 256C0004 */ addiu $t4, $t3, 4
-/* AE323C 8006C09C AE2C0000 */ sw $t4, ($s1)
-/* AE3240 8006C0A0 8C6D000C */ lw $t5, 0xc($v1)
-/* AE3244 8006C0A4 51A00008 */ beql $t5, $zero, .L8006C0C8
-/* AE3248 8006C0A8 8E2E0000 */ lw $t6, ($s1)
-/* AE324C 8006C0AC 18400003 */ blez $v0, .L8006C0BC
-/* AE3250 8006C0B0 00000000 */ nop
-/* AE3254 8006C0B4 10000003 */ b .L8006C0C4
-/* AE3258 8006C0B8 2442FFFF */ addiu $v0, $v0, -1
-.L8006C0BC:
-/* AE325C 8006C0BC 10000008 */ b .L8006C0E0
-/* AE3260 8006C0C0 24020001 */ li $v0, 1
-.L8006C0C4:
-/* AE3264 8006C0C4 8E2E0000 */ lw $t6, ($s1)
-.L8006C0C8:
-/* AE3268 8006C0C8 26520004 */ addiu $s2, $s2, 4
-/* AE326C 8006C0CC 24630010 */ addiu $v1, $v1, 0x10
-/* AE3270 8006C0D0 25CF0004 */ addiu $t7, $t6, 4
-/* AE3274 8006C0D4 1653FFCE */ bne $s2, $s3, .L8006C010
-/* AE3278 8006C0D8 AE2F0000 */ sw $t7, ($s1)
-.L8006C0DC:
-/* AE327C 8006C0DC 00001025 */ move $v0, $zero
-.L8006C0E0:
-/* AE3280 8006C0E0 8FBF0024 */ lw $ra, 0x24($sp)
-/* AE3284 8006C0E4 8FB00014 */ lw $s0, 0x14($sp)
-/* AE3288 8006C0E8 8FB10018 */ lw $s1, 0x18($sp)
-/* AE328C 8006C0EC 8FB2001C */ lw $s2, 0x1c($sp)
-/* AE3290 8006C0F0 8FB30020 */ lw $s3, 0x20($sp)
-/* AE3294 8006C0F4 03E00008 */ jr $ra
-/* AE3298 8006C0F8 27BD0070 */ addiu $sp, $sp, 0x70
-
diff --git a/asm/non_matchings/code/z_elf_message/func_8006C0FC.s b/asm/non_matchings/code/z_elf_message/func_8006C0FC.s
deleted file mode 100644
index 8fb62237d..000000000
--- a/asm/non_matchings/code/z_elf_message/func_8006C0FC.s
+++ /dev/null
@@ -1,145 +0,0 @@
-.rdata
-glabel D_8013B87C
- .asciz "../z_elf_message.c"
- .balign 4
-
-glabel D_8013B890
- .asciz "\"企画外 条件\" = %s\n"
- # EUC-JP: 企画外 条件 | Unplanned conditions
- .balign 4
-
-glabel D_8013B8A4
- .asciz "企画外 条件"
- # EUC-JP: 企画外 条件 | Unplanned conditions
- .balign 4
-
-glabel D_8013B8B0
- .asciz "0"
- .balign 4
-
-glabel D_8013B8B4
- .asciz "../z_elf_message.c"
- .balign 4
-
-.text
-glabel func_8006C0FC
-/* AE329C 8006C0FC 27BDFFC0 */ addiu $sp, $sp, -0x40
-/* AE32A0 8006C100 AFBE0038 */ sw $fp, 0x38($sp)
-/* AE32A4 8006C104 AFB70034 */ sw $s7, 0x34($sp)
-/* AE32A8 8006C108 AFB60030 */ sw $s6, 0x30($sp)
-/* AE32AC 8006C10C AFB5002C */ sw $s5, 0x2c($sp)
-/* AE32B0 8006C110 AFB40028 */ sw $s4, 0x28($sp)
-/* AE32B4 8006C114 AFB30024 */ sw $s3, 0x24($sp)
-/* AE32B8 8006C118 AFB20020 */ sw $s2, 0x20($sp)
-/* AE32BC 8006C11C AFB1001C */ sw $s1, 0x1c($sp)
-/* AE32C0 8006C120 AFB00018 */ sw $s0, 0x18($sp)
-/* AE32C4 8006C124 3C158014 */ lui $s5, %hi(D_8013B87C) # $s5, 0x8014
-/* AE32C8 8006C128 3C168014 */ lui $s6, %hi(D_8013B890) # $s6, 0x8014
-/* AE32CC 8006C12C 3C178014 */ lui $s7, %hi(D_8013B8A4) # $s7, 0x8014
-/* AE32D0 8006C130 3C1E8014 */ lui $fp, %hi(D_8013B8B0) # $fp, 0x8014
-/* AE32D4 8006C134 AFBF003C */ sw $ra, 0x3c($sp)
-/* AE32D8 8006C138 AFA40040 */ sw $a0, 0x40($sp)
-/* AE32DC 8006C13C 27DEB8B0 */ addiu $fp, %lo(D_8013B8B0) # addiu $fp, $fp, -0x4750
-/* AE32E0 8006C140 26F7B8A4 */ addiu $s7, %lo(D_8013B8A4) # addiu $s7, $s7, -0x475c
-/* AE32E4 8006C144 26D6B890 */ addiu $s6, %lo(D_8013B890) # addiu $s6, $s6, -0x4770
-/* AE32E8 8006C148 26B5B87C */ addiu $s5, %lo(D_8013B87C) # addiu $s5, $s5, -0x4784
-/* AE32EC 8006C14C 27B00040 */ addiu $s0, $sp, 0x40
-/* AE32F0 8006C150 24110020 */ li $s1, 32
-/* AE32F4 8006C154 24120040 */ li $s2, 64
-/* AE32F8 8006C158 24130060 */ li $s3, 96
-/* AE32FC 8006C15C 241400E0 */ li $s4, 224
-.L8006C160:
-/* AE3300 8006C160 8FAE0040 */ lw $t6, 0x40($sp)
-/* AE3304 8006C164 91C20000 */ lbu $v0, ($t6)
-/* AE3308 8006C168 304200E0 */ andi $v0, $v0, 0xe0
-/* AE330C 8006C16C 1040000B */ beqz $v0, .L8006C19C
-/* AE3310 8006C170 00000000 */ nop
-/* AE3314 8006C174 10510012 */ beq $v0, $s1, .L8006C1C0
-/* AE3318 8006C178 00000000 */ nop
-/* AE331C 8006C17C 10520019 */ beq $v0, $s2, .L8006C1E4
-/* AE3320 8006C180 00000000 */ nop
-/* AE3324 8006C184 10530020 */ beq $v0, $s3, .L8006C208
-/* AE3328 8006C188 02A02025 */ move $a0, $s5
-/* AE332C 8006C18C 5054002A */ beql $v0, $s4, .L8006C238
-/* AE3330 8006C190 8FAE0040 */ lw $t6, 0x40($sp)
-/* AE3334 8006C194 1000002C */ b .L8006C248
-/* AE3338 8006C198 00000000 */ nop
-.L8006C19C:
-/* AE333C 8006C19C 0C01AEF0 */ jal func_8006BBC0
-/* AE3340 8006C1A0 8FA40040 */ lw $a0, 0x40($sp)
-/* AE3344 8006C1A4 50400033 */ beql $v0, $zero, .L8006C274
-/* AE3348 8006C1A8 8FAF0040 */ lw $t7, 0x40($sp)
-/* AE334C 8006C1AC 8FAF0040 */ lw $t7, 0x40($sp)
-/* AE3350 8006C1B0 91E20002 */ lbu $v0, 2($t7)
-/* AE3354 8006C1B4 34420100 */ ori $v0, $v0, 0x100
-/* AE3358 8006C1B8 10000031 */ b .L8006C280
-/* AE335C 8006C1BC 3042FFFF */ andi $v0, $v0, 0xffff
-.L8006C1C0:
-/* AE3360 8006C1C0 0C01AFA2 */ jal func_8006BE88
-/* AE3364 8006C1C4 02002025 */ move $a0, $s0
-/* AE3368 8006C1C8 5040002A */ beql $v0, $zero, .L8006C274
-/* AE336C 8006C1CC 8FAF0040 */ lw $t7, 0x40($sp)
-/* AE3370 8006C1D0 8FB80040 */ lw $t8, 0x40($sp)
-/* AE3374 8006C1D4 93020002 */ lbu $v0, 2($t8)
-/* AE3378 8006C1D8 34420100 */ ori $v0, $v0, 0x100
-/* AE337C 8006C1DC 10000028 */ b .L8006C280
-/* AE3380 8006C1E0 3042FFFF */ andi $v0, $v0, 0xffff
-.L8006C1E4:
-/* AE3384 8006C1E4 0C01AFC7 */ jal func_8006BF1C
-/* AE3388 8006C1E8 02002025 */ move $a0, $s0
-/* AE338C 8006C1EC 50400021 */ beql $v0, $zero, .L8006C274
-/* AE3390 8006C1F0 8FAF0040 */ lw $t7, 0x40($sp)
-/* AE3394 8006C1F4 8FB90040 */ lw $t9, 0x40($sp)
-/* AE3398 8006C1F8 93220002 */ lbu $v0, 2($t9)
-/* AE339C 8006C1FC 34420100 */ ori $v0, $v0, 0x100
-/* AE33A0 8006C200 1000001F */ b .L8006C280
-/* AE33A4 8006C204 3042FFFF */ andi $v0, $v0, 0xffff
-.L8006C208:
-/* AE33A8 8006C208 0C01AEF0 */ jal func_8006BBC0
-/* AE33AC 8006C20C 8FA40040 */ lw $a0, 0x40($sp)
-/* AE33B0 8006C210 10400017 */ beqz $v0, .L8006C270
-/* AE33B4 8006C214 8FA80040 */ lw $t0, 0x40($sp)
-/* AE33B8 8006C218 910A0002 */ lbu $t2, 2($t0)
-/* AE33BC 8006C21C 000A5880 */ sll $t3, $t2, 2
-/* AE33C0 8006C220 010B6021 */ addu $t4, $t0, $t3
-/* AE33C4 8006C224 AFAC0040 */ sw $t4, 0x40($sp)
-/* AE33C8 8006C228 258DFFFC */ addiu $t5, $t4, -4
-/* AE33CC 8006C22C 10000010 */ b .L8006C270
-/* AE33D0 8006C230 AFAD0040 */ sw $t5, 0x40($sp)
-/* AE33D4 8006C234 8FAE0040 */ lw $t6, 0x40($sp)
-.L8006C238:
-/* AE33D8 8006C238 91C20002 */ lbu $v0, 2($t6)
-/* AE33DC 8006C23C 34420100 */ ori $v0, $v0, 0x100
-/* AE33E0 8006C240 1000000F */ b .L8006C280
-/* AE33E4 8006C244 3042FFFF */ andi $v0, $v0, 0xffff
-.L8006C248:
-/* AE33E8 8006C248 0C000B84 */ jal LogUtils_LogThreadId
-/* AE33EC 8006C24C 24050119 */ li $a1, 281
-/* AE33F0 8006C250 02C02025 */ move $a0, $s6
-/* AE33F4 8006C254 0C00084C */ jal osSyncPrintf
-/* AE33F8 8006C258 02E02825 */ move $a1, $s7
-/* AE33FC 8006C25C 3C058014 */ lui $a1, %hi(D_8013B8B4) # $a1, 0x8014
-/* AE3400 8006C260 24A5B8B4 */ addiu $a1, %lo(D_8013B8B4) # addiu $a1, $a1, -0x474c
-/* AE3404 8006C264 03C02025 */ move $a0, $fp
-/* AE3408 8006C268 0C0007FC */ jal __assert
-/* AE340C 8006C26C 2406011A */ li $a2, 282
-.L8006C270:
-/* AE3410 8006C270 8FAF0040 */ lw $t7, 0x40($sp)
-.L8006C274:
-/* AE3414 8006C274 25F80004 */ addiu $t8, $t7, 4
-/* AE3418 8006C278 1000FFB9 */ b .L8006C160
-/* AE341C 8006C27C AFB80040 */ sw $t8, 0x40($sp)
-.L8006C280:
-/* AE3420 8006C280 8FBF003C */ lw $ra, 0x3c($sp)
-/* AE3424 8006C284 8FB00018 */ lw $s0, 0x18($sp)
-/* AE3428 8006C288 8FB1001C */ lw $s1, 0x1c($sp)
-/* AE342C 8006C28C 8FB20020 */ lw $s2, 0x20($sp)
-/* AE3430 8006C290 8FB30024 */ lw $s3, 0x24($sp)
-/* AE3434 8006C294 8FB40028 */ lw $s4, 0x28($sp)
-/* AE3438 8006C298 8FB5002C */ lw $s5, 0x2c($sp)
-/* AE343C 8006C29C 8FB60030 */ lw $s6, 0x30($sp)
-/* AE3440 8006C2A0 8FB70034 */ lw $s7, 0x34($sp)
-/* AE3444 8006C2A4 8FBE0038 */ lw $fp, 0x38($sp)
-/* AE3448 8006C2A8 03E00008 */ jr $ra
-/* AE344C 8006C2AC 27BD0040 */ addiu $sp, $sp, 0x40
-
diff --git a/asm/non_matchings/code/z_elf_message/func_8006C2B0.s b/asm/non_matchings/code/z_elf_message/func_8006C2B0.s
deleted file mode 100644
index 578fa29f2..000000000
--- a/asm/non_matchings/code/z_elf_message/func_8006C2B0.s
+++ /dev/null
@@ -1,32 +0,0 @@
-glabel func_8006C2B0
-/* AE3450 8006C2B0 3C0E8016 */ lui $t6, %hi(gSaveContext+4) # $t6, 0x8016
-/* AE3454 8006C2B4 8DCEE664 */ lw $t6, %lo(gSaveContext+4)($t6)
-/* AE3458 8006C2B8 27BDFFE0 */ addiu $sp, $sp, -0x20
-/* AE345C 8006C2BC AFBF001C */ sw $ra, 0x1c($sp)
-/* AE3460 8006C2C0 11C0000D */ beqz $t6, .L8006C2F8
-/* AE3464 8006C2C4 8C851C44 */ lw $a1, 0x1c44($a0)
-/* AE3468 8006C2C8 3C014448 */ li $at, 0x44480000 # 0.000000
-/* AE346C 8006C2CC 44812000 */ mtc1 $at, $f4
-/* AE3470 8006C2D0 24060146 */ li $a2, 326
-/* AE3474 8006C2D4 24070004 */ li $a3, 4
-/* AE3478 8006C2D8 0C00D4FD */ jal Actor_FindNearby
-/* AE347C 8006C2DC E7A40010 */ swc1 $f4, 0x10($sp)
-/* AE3480 8006C2E0 14400003 */ bnez $v0, .L8006C2F0
-/* AE3484 8006C2E4 3C048012 */ lui $a0, %hi(D_8011F3A0) # $a0, 0x8012
-/* AE3488 8006C2E8 10000005 */ b .L8006C300
-/* AE348C 8006C2EC 2484F3A0 */ addiu $a0, %lo(D_8011F3A0) # addiu $a0, $a0, -0xc60
-.L8006C2F0:
-/* AE3490 8006C2F0 10000005 */ b .L8006C308
-/* AE3494 8006C2F4 24020160 */ li $v0, 352
-.L8006C2F8:
-/* AE3498 8006C2F8 3C048012 */ lui $a0, %hi(D_8011F3D4) # $a0, 0x8012
-/* AE349C 8006C2FC 2484F3D4 */ addiu $a0, %lo(D_8011F3D4) # addiu $a0, $a0, -0xc2c
-.L8006C300:
-/* AE34A0 8006C300 0C01B03F */ jal func_8006C0FC
-/* AE34A4 8006C304 00000000 */ nop
-.L8006C308:
-/* AE34A8 8006C308 8FBF001C */ lw $ra, 0x1c($sp)
-/* AE34AC 8006C30C 27BD0020 */ addiu $sp, $sp, 0x20
-/* AE34B0 8006C310 03E00008 */ jr $ra
-/* AE34B4 8006C314 00000000 */ nop
-
diff --git a/asm/non_matchings/code/z_elf_message/func_8006C318.s b/asm/non_matchings/code/z_elf_message/func_8006C318.s
deleted file mode 100644
index 8b96baa55..000000000
--- a/asm/non_matchings/code/z_elf_message/func_8006C318.s
+++ /dev/null
@@ -1,18 +0,0 @@
-glabel func_8006C318
-/* AE34B8 8006C318 27BDFFE8 */ addiu $sp, $sp, -0x18
-/* AE34BC 8006C31C 3C050001 */ lui $a1, 1
-/* AE34C0 8006C320 AFBF0014 */ sw $ra, 0x14($sp)
-/* AE34C4 8006C324 00A42821 */ addu $a1, $a1, $a0
-/* AE34C8 8006C328 8CA51E0C */ lw $a1, 0x1e0c($a1)
-/* AE34CC 8006C32C 14A00003 */ bnez $a1, .L8006C33C
-/* AE34D0 8006C330 00000000 */ nop
-/* AE34D4 8006C334 10000003 */ b .L8006C344
-/* AE34D8 8006C338 00001025 */ move $v0, $zero
-.L8006C33C:
-/* AE34DC 8006C33C 0C01B03F */ jal func_8006C0FC
-/* AE34E0 8006C340 00A02025 */ move $a0, $a1
-.L8006C344:
-/* AE34E4 8006C344 8FBF0014 */ lw $ra, 0x14($sp)
-/* AE34E8 8006C348 27BD0018 */ addiu $sp, $sp, 0x18
-/* AE34EC 8006C34C 03E00008 */ jr $ra
-/* AE34F0 8006C350 00000000 */ nop
diff --git a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05040.s b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05040.s
index 3ff5a00df..98cad4d3c 100644
--- a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05040.s
+++ b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05040.s
@@ -25,7 +25,7 @@ glabel func_80A05040
/* 0346C 80A0509C 10000016 */ beq $zero, $zero, .L80A050F8
/* 03470 80A050A0 02202025 */ or $a0, $s1, $zero ## $a0 = 00000000
.L80A050A4:
-/* 03474 80A050A4 0C01B0AC */ jal func_8006C2B0
+/* 03474 80A050A4 0C01B0AC */ jal ElfMessage_GetSariaText
/* 03478 80A050A8 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 0347C 80A050AC 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 03480 80A050B0 0C042DC8 */ jal func_8010B720
diff --git a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05188.s b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05188.s
index 43fb33508..9be1706cc 100644
--- a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05188.s
+++ b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05188.s
@@ -14,7 +14,7 @@ glabel func_80A05188
/* 03588 80A051B8 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 0358C 80A051BC 5040000B */ beql $v0, $zero, .L80A051EC
/* 03590 80A051C0 8FA40020 */ lw $a0, 0x0020($sp)
-/* 03594 80A051C4 0C01B0AC */ jal func_8006C2B0
+/* 03594 80A051C4 0C01B0AC */ jal ElfMessage_GetSariaText
/* 03598 80A051C8 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 0359C 80A051CC 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 035A0 80A051D0 0C042DC8 */ jal func_8010B720
diff --git a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05208.s b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05208.s
index 3591cf30b..71cbb064c 100644
--- a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05208.s
+++ b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A05208.s
@@ -25,7 +25,7 @@ glabel func_80A05208
/* 03634 80A05264 1000001C */ beq $zero, $zero, .L80A052D8
/* 03638 80A05268 02202025 */ or $a0, $s1, $zero ## $a0 = 00000000
.L80A0526C:
-/* 0363C 80A0526C 0C01B0C6 */ jal func_8006C318
+/* 0363C 80A0526C 0C01B0C6 */ jal ElfMessage_GetCUpText
/* 03640 80A05270 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 03644 80A05274 10400006 */ beq $v0, $zero, .L80A05290
/* 03648 80A05278 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
diff --git a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A053F0.s b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A053F0.s
index 79339d955..35c9df909 100644
--- a/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A053F0.s
+++ b/asm/non_matchings/overlays/actors/ovl_En_Elf/func_80A053F0.s
@@ -26,7 +26,7 @@ glabel func_80A053F0
/* 0381C 80A0544C 51000012 */ beql $t0, $zero, .L80A05498
/* 03820 80A05450 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
.L80A05454:
-/* 03824 80A05454 0C01B0C6 */ jal func_8006C318
+/* 03824 80A05454 0C01B0C6 */ jal ElfMessage_GetCUpText
/* 03828 80A05458 8FA4003C */ lw $a0, 0x003C($sp)
/* 0382C 80A0545C 8FA3002C */ lw $v1, 0x002C($sp)
/* 03830 80A05460 2401015F */ addiu $at, $zero, 0x015F ## $at = 0000015F
@@ -60,7 +60,7 @@ glabel func_80A053F0
/* 03894 80A054C4 8E0D002C */ lw $t5, 0x002C($s0) ## 0000002C
/* 03898 80A054C8 AE0C003C */ sw $t4, 0x003C($s0) ## 0000003C
/* 0389C 80A054CC AE0D0040 */ sw $t5, 0x0040($s0) ## 00000040
-/* 038A0 80A054D0 0C01B0C6 */ jal func_8006C318
+/* 038A0 80A054D0 0C01B0C6 */ jal ElfMessage_GetCUpText
/* 038A4 80A054D4 8FA4003C */ lw $a0, 0x003C($sp)
/* 038A8 80A054D8 960E010E */ lhu $t6, 0x010E($s0) ## 0000010E
/* 038AC 80A054DC 3C0C80A0 */ lui $t4, %hi(func_80A052F4) ## $t4 = 80A00000
diff --git a/data/z_elf_message.data.s b/data/z_elf_message.data.s
deleted file mode 100644
index 6d6ef86d2..000000000
--- a/data/z_elf_message.data.s
+++ /dev/null
@@ -1,14 +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 purposee registers
-
-.section .data
-
-glabel D_8011F3A0
- .incbin "baserom.z64", 0xB96540, 0x34
-
-glabel D_8011F3D4
- .incbin "baserom.z64", 0xB96574, 0x1C
diff --git a/include/functions.h b/include/functions.h
index 3875c325b..c3f956093 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -796,10 +796,8 @@ void func_800694A0(GlobalContext* globalCtx, s16 drawId);
// ? func_8006BA00(?);
// ? func_8006BA30(?);
void Audio_PlaySoundAtPosition(GlobalContext* globalCtx, Vec3f* pos2, s32 radius, u16 sfxId);
-// ? func_8006BBC0(?);
-// ? func_8006BE88(?);
-// ? func_8006BF1C(?);
-// ? func_8006C0FC(?);
+u16 ElfMessage_GetSariaText(GlobalContext* globalCtx);
+u16 ElfMessage_GetCUpText(GlobalContext* globalCtx);
u16 Text_GetFaceReaction(GlobalContext* globalCtx, u32 reactionSet);
// ? func_8006C3A0(?);
// ? func_8006C3D0(?);
diff --git a/include/variables.h b/include/variables.h
index bb8fa11b1..511f738f7 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -263,8 +263,6 @@ extern s32 D_8011D3AC;
extern s16 D_8011E0B0;
extern Color_RGBA8 D_8011E0B4[];
//extern ? D_8011E0D4;
-//extern ? D_8011F3A0;
-//extern ? D_8011F3D4;
//extern ? D_8011F830;
//extern ? D_8011F860;
//extern ? D_8011F890;
diff --git a/include/z64.h b/include/z64.h
index 5129f16a7..130367772 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -803,6 +803,13 @@ typedef struct
/* 0x00A8 */ View view;
} SampleContext;
+typedef struct {
+ /* 0x00 */ u8 byte0;
+ /* 0x01 */ u8 byte1;
+ /* 0x02 */ u8 byte2;
+ /* 0x03 */ u8 byte3;
+} ElfMessage; // size = 0x4
+
// Global Context (dbg ram start: 80212020)
typedef struct GlobalContext {
/* 0x00000 */ GameState state;
@@ -904,7 +911,7 @@ typedef struct GlobalContext {
/* 0x11E00 */ EntranceEntry* setupEntranceList;
/* 0x11E04 */ UNK_PTR setupExitList;
/* 0x11E08 */ Path* setupPathList;
- /* 0x11E0C */ UNK_PTR naviMsgSegment;
+ /* 0x11E0C */ ElfMessage* cUpElfMsgs;
/* 0x11E10 */ char unk_11E10[0x4];
/* 0x11E14 */ u8 skyboxId;
/* 0x11E15 */ s8 sceneLoadFlag; // "fade_direction"
diff --git a/include/z64scene.h b/include/z64scene.h
index 28db2047e..c80839587 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -66,7 +66,7 @@ typedef struct {
typedef struct {
/* 0x00 */ u8 code;
- /* 0x01 */ u8 naviMsgNum;
+ /* 0x01 */ u8 cUpElfMsgNum;
/* 0x04 */ u32 keepObjectId;
} SCmdSpecialFiles;
diff --git a/spec b/spec
index 1a7c0b421..8adfa49f1 100644
--- a/spec
+++ b/spec
@@ -314,7 +314,6 @@ beginseg
include "build/src/code/z_draw.o"
include "build/asm/code_8006BA00.o"
include "build/src/code/z_elf_message.o"
- include "build/data/z_elf_message.data.o"
include "build/src/code/z_face_reaction.o"
include "build/src/code/code_8006C3A0.o"
include "build/src/code/code_8006C510.o"
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index dabceae8c..3828c6823 100644
--- a/src/code/z_elf_message.c
+++ b/src/code/z_elf_message.c
@@ -1,14 +1,172 @@
#include <ultra64.h>
#include <global.h>
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/func_8006BBC0.s")
+// TODO: use macros to define elf messages once the format is fully documented
+ElfMessage sChildSariaMsgs[] = {
+ { 0x66, 0x00, 0x03, 0x00 }, { 0x00, 0x37, 0x61, 0x00 }, { 0xE0, 0x00, 0x64, 0x00 }, { 0x00, 0x25, 0x62, 0x00 },
+ { 0x00, 0x37, 0x63, 0x00 }, { 0x00, 0x43, 0x65, 0x00 }, { 0x06, 0x30, 0x66, 0x66 }, { 0x06, 0x30, 0x66, 0x67 },
+ { 0x06, 0x30, 0x66, 0x68 }, { 0x06, 0x20, 0x67, 0x65 }, { 0x06, 0x30, 0x68, 0x69 }, { 0x06, 0x30, 0x68, 0x6A },
+ { 0xE0, 0x00, 0x69, 0x00 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/func_8006BE88.s")
+ElfMessage sAdultSariaMsgs[] = {
+ { 0x06, 0x30, 0x6A, 0x66 }, { 0x06, 0x30, 0x6B, 0x67 }, { 0x06, 0x30, 0x6B, 0x68 },
+ { 0x06, 0x30, 0x6C, 0x69 }, { 0x06, 0x30, 0x6C, 0x6A }, { 0xE0, 0x00, 0x6D, 0x00 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/func_8006BF1C.s")
+#ifdef NON_MATCHING
+// minor ordering and regalloc differences
+u32 ElfMessage_CheckCondition(ElfMessage* msg) {
+ u16 temp;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/func_8006C0FC.s")
+ switch (msg->byte0 & 0x1E) {
+ case 0:
+ temp = 1 << (msg->byte1 & 0x0F);
+ return ((msg->byte0 & 1) == 1) == !!(gSaveContext.event_chk_inf[(msg->byte1 & 0xF0) >> 4] & temp);
+ case 2:
+ return ((msg->byte0 & 1) == 1) ==
+ !!(gBitFlags[msg->byte1 - ITEM_KEY_BOSS] & gSaveContext.dungeon_items[gSaveContext.dungeon_index]);
+ case 4:
+ return ((msg->byte0 & 1) == 1) == (msg->byte3 == INV_CONTENT(msg->byte1));
+ case 6:
+ switch (msg->byte1 & 0xF0) {
+ case 0x00:
+ return ((msg->byte0 & 1) == 1) == ((msg->byte1 & 0x0F) == CUR_UPG_VALUE(UPG_STRENGTH));
+ case 0x10:
+ return ((msg->byte0 & 1) == 1) ==
+ !!((gBitFlags[msg->byte3 - ITEM_BOOTS_KOKIRI] << gEquipShifts[EQUIP_BOOTS]) &
+ gSaveContext.equipment);
+ case 0x20:
+ return ((msg->byte0 & 1) == 1) ==
+ !!(gBitFlags[msg->byte3 - ITEM_SONG_MINUET + 6] & gSaveContext.quest_items);
+ case 0x30:
+ return ((msg->byte0 & 1) == 1) ==
+ !!(gBitFlags[msg->byte3 - ITEM_MEDALLION_FOREST] & gSaveContext.quest_items);
+ case 0x40:
+ return ((msg->byte0 & 1) == 1) == !!gSaveContext.magic_acquired;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/func_8006C2B0.s")
+ LogUtils_LogThreadId("../z_elf_message.c", 156);
+ osSyncPrintf("\"企画外 条件\" = %s\n", "企画外 条件"); // "Unplanned conditions"
+ __assert("0", "../z_elf_message.c", 157);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/func_8006C318.s")
+ return false;
+}
+#else
+u32 ElfMessage_CheckCondition(ElfMessage* msg);
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_elf_message/ElfMessage_CheckCondition.s")
+#endif
+
+u32 func_8006BE88(ElfMessage** msgp) {
+ u32 temp = true;
+
+ while (((*msgp)->byte0 & 0xE0) == 0x20) {
+ if (!ElfMessage_CheckCondition(*msgp)) {
+ temp = false;
+ }
+ *msgp += 1;
+ }
+
+ if (temp) {
+ return ElfMessage_CheckCondition(*msgp);
+ } else {
+ return false;
+ }
+}
+
+u32 func_8006BF1C(ElfMessage** msgp) {
+ ElfMessage* msg;
+ u32 sp44[10];
+ s32 temp1;
+ s32 temp2;
+ s32 temp3;
+
+ msg = *msgp;
+ temp1 = 0;
+ temp2 = 0;
+ do {
+ sp44[temp2] = ElfMessage_CheckCondition(msg);
+ temp1 += sp44[temp2];
+ temp2++;
+ msg++;
+ } while ((msg->byte0 & 0xE0) == 0x40);
+
+ if (temp1 == 0) {
+ return false;
+ }
+
+ temp3 = Math_Rand_ZeroFloat(temp1);
+ for (temp1 = 0; temp1 < temp2; temp1++) {
+ if (sp44[temp1]) {
+ if (temp3 > 0) {
+ temp3--;
+ } else {
+ return true;
+ }
+ }
+ *msgp += 1;
+ }
+
+ return false;
+}
+
+u16 ElfMessage_GetTextFromMsgs(ElfMessage* msg) {
+ while (true) {
+ switch (msg->byte0 & 0xE0) {
+ case 0x00:
+ if (ElfMessage_CheckCondition(msg)) {
+ return msg->byte2 | 0x100;
+ }
+ break;
+ case 0x20:
+ if (func_8006BE88(&msg)) {
+ return msg->byte2 | 0x100;
+ }
+ break;
+ case 0x40:
+ if (func_8006BF1C(&msg)) {
+ return msg->byte2 | 0x100;
+ }
+ break;
+ case 0x60:
+ if (ElfMessage_CheckCondition(msg)) {
+ msg += msg->byte2;
+ msg--;
+ }
+ break;
+ case 0xE0:
+ return msg->byte2 | 0x100;
+ default:
+ LogUtils_LogThreadId("../z_elf_message.c", 281);
+ osSyncPrintf("\"企画外 条件\" = %s\n", "企画外 条件"); // "Unplanned conditions"
+ __assert("0", "../z_elf_message.c", 282);
+ }
+ msg++;
+ }
+}
+
+u16 ElfMessage_GetSariaText(GlobalContext* globalCtx) {
+ Player* player = PLAYER;
+ ElfMessage* msgs;
+
+ if (LINK_IS_CHILD) {
+ if (Actor_FindNearby(globalCtx, &player->actor, ACTOR_EN_SA, 4, 800.0f) == NULL) {
+ msgs = sChildSariaMsgs;
+ } else {
+ return 0x0160; // Special text about Saria preferring to talk to you face-to-face
+ }
+ } else {
+ msgs = sAdultSariaMsgs;
+ }
+
+ return ElfMessage_GetTextFromMsgs(msgs);
+}
+
+u16 ElfMessage_GetCUpText(GlobalContext* globalCtx) {
+ if (globalCtx->cUpElfMsgs == NULL) {
+ return 0;
+ } else {
+ return ElfMessage_GetTextFromMsgs(globalCtx->cUpElfMsgs);
+ }
+}
diff --git a/src/code/z_play.c b/src/code/z_play.c
index cf3ffb0e9..99d454e6f 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -58,7 +58,7 @@ void func_800BFF0C(GlobalContext* globalCtx, s32 a1) {
globalCtx->unk_11DFC = NULL;
globalCtx->setupEntranceList = NULL;
globalCtx->setupExitList = NULL;
- globalCtx->naviMsgSegment = NULL;
+ globalCtx->cUpElfMsgs = NULL;
globalCtx->setupPathList = NULL;
globalCtx->nbSetupActors = 0;
Object_InitBank(globalCtx, &globalCtx->objectCtx);
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 3a7121b04..6ad51d2ee 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -260,8 +260,8 @@ void func_8009883C(GlobalContext* globalCtx, SceneCmd* cmd) {
gSegments[5] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[globalCtx->objectCtx.subKeepIndex].segment);
}
- if (cmd->specialFiles.naviMsgNum != 0) {
- globalCtx->naviMsgSegment = func_800BFE5C(globalCtx, &sNaviMsgFiles[cmd->specialFiles.naviMsgNum - 1]);
+ if (cmd->specialFiles.cUpElfMsgNum != 0) {
+ globalCtx->cUpElfMsgs = func_800BFE5C(globalCtx, &sNaviMsgFiles[cmd->specialFiles.cUpElfMsgNum - 1]);
}
}