through ov53_021E6E7C

This commit is contained in:
PikalaxALT
2024-09-01 13:36:36 -04:00
parent 50c3b7f1fa
commit d2dd452bb3
3 changed files with 194 additions and 453 deletions

View File

@@ -21,457 +21,13 @@
.extern ov53_021E6908
.extern ov53_021E6928
.extern ov53_021E6988
thumb_func_start ov53_021E6B9C
ov53_021E6B9C: ; 0x021E6B9C
push {r3, r4}
mov r2, #0x1f
add r4, r0, #0
asr r3, r0, #5
and r4, r2
and r3, r2
asr r0, r0, #0xa
add r4, r4, r1
add r3, r3, r1
add r0, r0, r1
cmp r4, #0x1f
ble _021E6BB8
add r4, r2, #0
b _021E6BBE
_021E6BB8:
cmp r4, #0
bge _021E6BBE
mov r4, #0
_021E6BBE:
cmp r3, #0x1f
ble _021E6BC6
mov r3, #0x1f
b _021E6BCC
_021E6BC6:
cmp r3, #0
bge _021E6BCC
mov r3, #0
_021E6BCC:
cmp r0, #0x1f
ble _021E6BD4
mov r0, #0x1f
b _021E6BDA
_021E6BD4:
cmp r0, #0
bge _021E6BDA
mov r0, #0
_021E6BDA:
lsl r1, r0, #0xa
lsl r0, r3, #5
orr r0, r1
orr r0, r4
lsl r0, r0, #0x10
lsr r0, r0, #0x10
pop {r3, r4}
bx lr
.balign 4, 0
thumb_func_end ov53_021E6B9C
thumb_func_start ov53_021E6BEC
ov53_021E6BEC: ; 0x021E6BEC
push {r3, r4, r5, r6, lr}
sub sp, #4
add r5, r0, #0
ldr r0, _021E6C9C ; =0x00000163
add r6, r1, #0
ldrb r0, [r5, r0]
mov r4, #0
mov r1, #1
cmp r0, #0
beq _021E6C06
cmp r0, #1
beq _021E6C06
add r1, r4, #0
_021E6C06:
cmp r1, #0
bne _021E6C0E
bl GF_AssertFail
_021E6C0E:
cmp r6, #0
bne _021E6C2E
mov r0, #0x5a
lsl r0, r0, #2
ldr r2, [r5, r0]
add r1, r2, #1
str r1, [r5, r0]
mov r0, #0xa
mul r0, r2
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bl GF_SinDeg
lsl r0, r0, #3
asr r4, r0, #0xc
b _021E6C36
_021E6C2E:
mov r0, #0x5a
mov r1, #0
lsl r0, r0, #2
str r1, [r5, r0]
_021E6C36:
ldr r0, _021E6CA0 ; =0x00000136
lsl r1, r4, #0x18
ldrh r0, [r5, r0]
asr r1, r1, #0x18
bl ov53_021E6B9C
add r1, sp, #0
strh r0, [r1]
ldr r0, _021E6CA4 ; =0x00001CFF
mov r1, #0
bl ov53_021E6B9C
add r1, sp, #0
strh r0, [r1, #2]
ldr r3, _021E6C9C ; =0x00000163
mov r0, #6
ldrb r3, [r5, r3]
add r1, sp, #0
mov r2, #4
lsl r4, r3, #2
ldr r3, _021E6CA8 ; =ov53_021E8508
ldr r3, [r3, r4]
lsl r3, r3, #0x11
lsr r3, r3, #0x10
bl BG_LoadPlttData
ldr r0, _021E6CA0 ; =0x00000136
add r1, sp, #0
ldrh r2, [r5, r0]
add r0, #0x2d
strh r2, [r1]
ldr r2, _021E6CAC ; =0x0000739B
strh r2, [r1, #2]
ldrb r0, [r5, r0]
cmp r0, #0
bne _021E6C82
mov r3, #1
b _021E6C84
_021E6C82:
mov r3, #0
_021E6C84:
lsl r4, r3, #2
ldr r3, _021E6CA8 ; =ov53_021E8508
mov r0, #6
ldr r3, [r3, r4]
add r1, sp, #0
lsl r3, r3, #0x11
mov r2, #4
lsr r3, r3, #0x10
bl BG_LoadPlttData
add sp, #4
pop {r3, r4, r5, r6, pc}
.balign 4, 0
_021E6C9C: .word 0x00000163
_021E6CA0: .word 0x00000136
_021E6CA4: .word 0x00001CFF
_021E6CA8: .word ov53_021E8508
_021E6CAC: .word 0x0000739B
thumb_func_end ov53_021E6BEC
thumb_func_start ov53_021E6CB0
ov53_021E6CB0: ; 0x021E6CB0
push {r3, lr}
ldr r1, _021E6CD8 ; =0x00000136
mov r2, #4
ldrh r1, [r0, r1]
add r0, sp, #0
mov r3, #0x18
strh r1, [r0]
ldr r1, _021E6CDC ; =0x0000739B
strh r1, [r0, #2]
mov r0, #6
add r1, sp, #0
bl BG_LoadPlttData
mov r0, #6
add r1, sp, #0
mov r2, #4
mov r3, #0x1c
bl BG_LoadPlttData
pop {r3, pc}
.balign 4, 0
_021E6CD8: .word 0x00000136
_021E6CDC: .word 0x0000739B
thumb_func_end ov53_021E6CB0
thumb_func_start ov53_021E6CE0
ov53_021E6CE0: ; 0x021E6CE0
push {r3, r4, r5, r6, lr}
sub sp, #0xc
ldr r3, _021E6DD8 ; =ov53_021E8530
add r5, r0, #0
mov r4, #0
add r2, sp, #0
mov r1, #0xc
_021E6CEE:
ldrb r0, [r3]
add r3, r3, #1
strb r0, [r2]
add r2, r2, #1
sub r1, r1, #1
bne _021E6CEE
ldr r0, _021E6DDC ; =gSystem + 0x40
ldrh r0, [r0, #0x24]
cmp r0, #0
beq _021E6D38
add r0, sp, #0
bl TouchscreenHitbox_FindRectAtTouchNew
add r6, r0, #0
mov r0, #0
mvn r0, r0
cmp r6, r0
beq _021E6DD0
ldr r0, _021E6DE0 ; =0x00000163
mov r1, #1
strb r6, [r5, r0]
add r2, r0, #3
strb r1, [r5, r2]
mov r2, #2
add r0, r0, #2
strb r2, [r5, r0]
add r0, r5, #0
bl ov53_021E6BEC
ldr r0, _021E6DE4 ; =SEQ_SE_DP_SELECT
bl PlaySE
mov r0, #0x5f
lsl r0, r0, #2
str r6, [r5, r0]
mov r4, #1
b _021E6DD0
_021E6D38:
ldr r0, _021E6DE8 ; =0x00000162
ldrb r0, [r5, r0]
cmp r0, #0
bne _021E6D5E
ldr r0, _021E6DEC ; =gSystem
ldr r1, [r0, #0x48]
mov r0, #0x31
tst r0, r1
beq _021E6DD0
ldr r0, _021E6DE4 ; =SEQ_SE_DP_SELECT
bl PlaySE
ldr r0, _021E6DE8 ; =0x00000162
mov r1, #1
strb r1, [r5, r0]
add r0, r5, #0
bl ov53_021E6BEC
b _021E6DD0
_021E6D5E:
add r0, r5, #0
mov r1, #0
bl ov53_021E6BEC
ldr r0, _021E6DEC ; =gSystem
mov r1, #0x20
ldr r0, [r0, #0x48]
tst r1, r0
beq _021E6D84
ldr r0, _021E6DE0 ; =0x00000163
ldrb r1, [r5, r0]
cmp r1, #0
beq _021E6DD0
sub r1, r1, #1
strb r1, [r5, r0]
ldr r0, _021E6DE4 ; =SEQ_SE_DP_SELECT
bl PlaySE
b _021E6DD0
_021E6D84:
mov r1, #0x10
tst r1, r0
beq _021E6DA4
ldr r0, _021E6DE0 ; =0x00000163
sub r1, r0, #2
ldrb r1, [r5, r1]
ldrb r2, [r5, r0]
sub r1, r1, #1
cmp r2, r1
beq _021E6DD0
add r1, r2, #1
strb r1, [r5, r0]
ldr r0, _021E6DE4 ; =SEQ_SE_DP_SELECT
bl PlaySE
b _021E6DD0
_021E6DA4:
mov r1, #1
tst r0, r1
beq _021E6DD0
ldr r0, _021E6DE8 ; =0x00000162
mov r2, #0
strb r2, [r5, r0]
add r2, r0, #4
strb r1, [r5, r2]
mov r2, #2
add r0, r0, #3
strb r2, [r5, r0]
add r0, r5, #0
bl ov53_021E6BEC
ldr r0, _021E6DE4 ; =SEQ_SE_DP_SELECT
bl PlaySE
ldr r0, _021E6DE0 ; =0x00000163
mov r4, #1
ldrb r1, [r5, r0]
add r0, #0x19
str r1, [r5, r0]
_021E6DD0:
add r0, r4, #0
add sp, #0xc
pop {r3, r4, r5, r6, pc}
nop
_021E6DD8: .word ov53_021E8530
_021E6DDC: .word gSystem + 0x40
_021E6DE0: .word 0x00000163
_021E6DE4: .word SEQ_SE_DP_SELECT
_021E6DE8: .word 0x00000162
_021E6DEC: .word gSystem
thumb_func_end ov53_021E6CE0
thumb_func_start ov53_021E6DF0
ov53_021E6DF0: ; 0x021E6DF0
mov r1, #5
mov r2, #0
lsl r1, r1, #6
str r2, [r0, r1]
add r1, r1, #4
str r2, [r0, r1]
bx lr
.balign 4, 0
thumb_func_end ov53_021E6DF0
thumb_func_start ov53_021E6E00
ov53_021E6E00: ; 0x021E6E00
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x40
mov r1, #0x51
add r2, r0, #0
lsl r1, r1, #2
ldr r0, [r2, r1]
mov r7, #0
cmp r0, #0
beq _021E6E16
sub r0, r0, #1
b _021E6E22
_021E6E16:
sub r0, r1, #4
ldr r0, [r2, r0]
add r3, r0, #1
sub r0, r1, #4
str r3, [r2, r0]
mov r0, #8
_021E6E22:
mov r3, #0x4d
lsl r3, r3, #2
str r0, [r2, r1]
ldrh r0, [r2, r3]
cmp r0, #0
bne _021E6E34
ldr r6, _021E6E74 ; =ov53_021E859C
add r5, sp, #0x28
b _021E6E38
_021E6E34:
ldr r6, _021E6E78 ; =ov53_021E85B4
add r5, sp, #0x10
_021E6E38:
add r4, r5, #0
ldmia r6!, {r0, r1}
stmia r5!, {r0, r1}
ldmia r6!, {r0, r1}
stmia r5!, {r0, r1}
ldmia r6!, {r0, r1}
add r3, #0xc
stmia r5!, {r0, r1}
ldr r0, [r2, r3]
lsl r0, r0, #2
ldr r1, [r4, r0]
cmp r1, #0xff
bne _021E6E56
mov r7, #1
b _021E6E6C
_021E6E56:
mov r0, #0
str r0, [sp]
str r0, [sp, #4]
str r0, [sp, #8]
ldr r0, [r2]
mov r3, #1
str r0, [sp, #0xc]
ldr r2, [r2, #0x18]
mov r0, #0x78
bl GfGfxLoader_LoadCharData
_021E6E6C:
add r0, r7, #0
add sp, #0x40
pop {r3, r4, r5, r6, r7, pc}
nop
_021E6E74: .word ov53_021E859C
_021E6E78: .word ov53_021E85B4
thumb_func_end ov53_021E6E00
thumb_func_start ov53_021E6E7C
ov53_021E6E7C: ; 0x021E6E7C
push {r3, r4, lr}
sub sp, #0x1c
add r0, sp, #0xc
add r1, sp, #0
mov r4, #msg_0219_00001
bl GF_RTC_CopyDateTime
ldr r0, [sp]
ldr r3, [sp, #4]
mov r1, #0x64
add r2, r0, #0
mul r2, r1
add r0, r3, r2
lsl r1, r1, #2
cmp r0, r1
blo _021E6EA2
ldr r1, _021E6EE4 ; =0x00000423
cmp r0, r1
bls _021E6EDC
_021E6EA2:
ldr r1, _021E6EE8 ; =0x0000044C
cmp r0, r1
blo _021E6EB2
ldr r1, _021E6EEC ; =0x00000617
cmp r0, r1
bhi _021E6EB2
mov r4, #msg_0219_00002
b _021E6EDC
_021E6EB2:
mov r1, #0x19
lsl r1, r1, #6
cmp r0, r1
blo _021E6EC4
ldr r1, _021E6EF0 ; =0x00000743
cmp r0, r1
bhi _021E6EC4
mov r4, #msg_0219_00003
b _021E6EDC
_021E6EC4:
ldr r1, _021E6EF4 ; =0x0000076C
cmp r0, r1
blo _021E6ED4
ldr r1, _021E6EF8 ; =0x00000937
cmp r0, r1
bhi _021E6ED4
mov r4, #msg_0219_00004
b _021E6EDC
_021E6ED4:
ldr r1, _021E6EFC ; =0x00000167
cmp r0, r1
bhi _021E6EDC
mov r4, #msg_0219_00005
_021E6EDC:
add r0, r4, #0
add sp, #0x1c
pop {r3, r4, pc}
nop
_021E6EE4: .word 0x00000423
_021E6EE8: .word 0x0000044C
_021E6EEC: .word 0x00000617
_021E6EF0: .word 0x00000743
_021E6EF4: .word 0x0000076C
_021E6EF8: .word 0x00000937
_021E6EFC: .word 0x00000167
thumb_func_end ov53_021E6E7C
.extern ov53_021E6B9C
.extern ov53_021E6BEC
.extern ov53_021E6CB0
.extern ov53_021E6CE0
.extern ov53_021E6DF0
.extern ov53_021E6E00
.extern ov53_021E6E7C
thumb_func_start ov53_021E6F00
ov53_021E6F00: ; 0x021E6F00

13
scripts/palconv.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/env bash
# palconv
if [ $# -ne 1 ]; then
echo -e "usage: $(basename "$0") RGBHEX" 1>&2
exit 1
fi
if ! [[ $1 =~ ^(0x[0-9a-fA-F]+|[0-9]+)$ ]]; then
echo -e "error: could not interpret color as base 10 or 16 integer" 1>&2
exit 1
fi
printf "RGB(%d, %d, %d)\n" $((($1)&31)) $((($1>>5)&31)) $((($1>>10)&31))

View File

@@ -3,11 +3,13 @@
#include "global.h"
#include "msgdata/msg.naix"
#include "msgdata/msg/msg_0219.h"
#include "font.h"
#include "gf_gfx_loader.h"
#include "launch_application.h"
#include "main.h"
#include "math_util.h"
#include "overlay_36.h"
#include "overlay_manager.h"
#include "player_data.h"
@@ -69,9 +71,11 @@ typedef struct OaksSpeechData {
u16 unk_136;
u8 filler_138[0x4];
int unk_13C;
u8 filler_140[0x20];
int unk_140;
int unk_144;
u8 filler_148[0x18];
OakSpeechData_Sub160 unk_160;
u8 filler_168[4];
int unk_168;
int unk_16C;
u8 filler_170[0x8];
OaksSpeechData_Sub178 *unk_178;
@@ -99,6 +103,13 @@ void ov53_021E6824(OaksSpeechData *data, int a1);
void ov53_021E6908(OakSpeechData_Sub160 *dest, int a1);
void ov53_021E6928(OaksSpeechData *data, int a1);
int ov53_021E6988(OaksSpeechData *data, int a1);
u16 ov53_021E6B9C(u16 a0, s8 a1);
void ov53_021E6BEC(OaksSpeechData *data, int a1);
void ov53_021E6CB0(OaksSpeechData *data);
BOOL ov53_021E6CE0(OaksSpeechData *data);
void ov53_021E6DF0(OaksSpeechData *data);
BOOL ov53_021E6E00(OaksSpeechData *data);
int ov53_021E6E7C(OaksSpeechData *data);
BOOL ov53_021E6F9C(OaksSpeechData *data);
void ov53_021E7ECC(OaksSpeechData *data);
void ov53_021E7F24(OaksSpeechData *data);
@@ -111,6 +122,7 @@ extern const WindowTemplate ov53_021E8500;
extern const int ov53_021E86B0[][4];
extern const WindowTemplate ov53_021E8680[][3];
extern const int ov53_021E8604[][3];
extern const int ov53_021E8508[];
// note: this is an artifact from -ipa file
extern const u32 ov53_021E84F8[];
@@ -854,3 +866,163 @@ int ov53_021E6988(OaksSpeechData *data, int a1) {
return ret;
}
u16 ov53_021E6B9C(u16 a0, s8 a1) {
int r = a0 & 0x1F;
int g = (a0 >> 5) & 0x1F;
int b = (a0 >> 10);
r += a1;
g += a1;
b += a1;
if (r > 31) {
r = 31;
} else if (r < 0) {
r = 0;
}
if (g > 31) {
g = 31;
} else if (g < 0) {
g = 0;
}
if (b > 31) {
b = 31;
} else if (b < 0) {
b = 0;
}
return (b << 10) | (g << 5) | r;
}
void ov53_021E6BEC(OaksSpeechData *data, int a1) {
int r4 = 0;
u16 sp0[2];
GF_ASSERT(data->unk_160.unk_3 == 0 || data->unk_160.unk_3 == 1);
if (a1 == 0) {
r4 = (GF_SinDeg((data->unk_168++) * 10) * 8) >> FX32_SHIFT;
} else {
data->unk_168 = 0;
}
sp0[0] = ov53_021E6B9C(data->unk_136, r4);
sp0[1] = ov53_021E6B9C(RGB(31, 7, 7), 0);
BG_LoadPlttData(6, sp0, 4, ov53_021E8508[data->unk_160.unk_3] * 2);
sp0[0] = data->unk_136;
sp0[1] = RGB(27, 28, 28);
BG_LoadPlttData(6, sp0, 4, ov53_021E8508[!data->unk_160.unk_3] * 2);
}
void ov53_021E6CB0(OaksSpeechData *data) {
u16 sp0[2];
sp0[0] = data->unk_136;
sp0[1] = RGB(27, 28, 28);
BG_LoadPlttData(6, sp0, 4, 0x18);
BG_LoadPlttData(6, sp0, 4, 0x1C);
}
BOOL ov53_021E6CE0(OaksSpeechData *data) {
BOOL ret = FALSE;
int r6;
extern const TouchscreenHitbox ov53_021E8530[3];
TouchscreenHitbox sp0[3];
ARRAY_ASSIGN(sp0, ov53_021E8530);
if (gSystem.touchNew) {
r6 = TouchscreenHitbox_FindRectAtTouchNew(sp0);
if (r6 != -1) {
data->unk_160.unk_3 = r6;
data->unk_160.unk_6 = 1;
data->unk_160.unk_5 = 2;
ov53_021E6BEC(data, 1);
PlaySE(SEQ_SE_DP_SELECT);
data->unk_17C = r6;
ret = TRUE;
}
} else if (!data->unk_160.unk_2) {
if (gSystem.newKeys & (PAD_BUTTON_A | PAD_KEY_LEFT | PAD_KEY_RIGHT)) {
PlaySE(SEQ_SE_DP_SELECT);
data->unk_160.unk_2 = 1;
ov53_021E6BEC(data, 1);
}
} else {
ov53_021E6BEC(data, 0);
if (gSystem.newKeys & PAD_KEY_LEFT) {
if (data->unk_160.unk_3 != 0) {
--data->unk_160.unk_3;
PlaySE(SEQ_SE_DP_SELECT);
}
} else if (gSystem.newKeys & PAD_KEY_RIGHT) {
if (data->unk_160.unk_3 != data->unk_160.unk_1 - 1) {
++data->unk_160.unk_3;
PlaySE(SEQ_SE_DP_SELECT);
}
} else if (gSystem.newKeys & PAD_BUTTON_A) {
data->unk_160.unk_2 = 0;
data->unk_160.unk_6 = 1;
data->unk_160.unk_5 = 2;
ov53_021E6BEC(data, 1);
PlaySE(SEQ_SE_DP_SELECT);
ret = TRUE;
data->unk_17C = data->unk_160.unk_3;
}
}
return ret;
}
void ov53_021E6DF0(OaksSpeechData *data) {
data->unk_140 = 0;
data->unk_144 = 0;
}
BOOL ov53_021E6E00(OaksSpeechData *data) {
BOOL ret = FALSE;
int r1;
if (data->unk_144 != 0) {
--data->unk_144;
} else {
++data->unk_140;
data->unk_144 = 8;
}
if (data->playerGender == PLAYER_GENDER_MALE) {
extern const int ov53_021E859C[6];
int sp28[6];
ARRAY_ASSIGN(sp28, ov53_021E859C);
r1 = sp28[data->unk_140];
} else {
extern const int ov53_021E85B4[6];
int sp10[6];
ARRAY_ASSIGN(sp10, ov53_021E85B4);
r1 = sp10[data->unk_140];
}
if (r1 == 0xFF) {
ret = TRUE;
} else {
GfGfxLoader_LoadCharData(NARC_a_1_2_0, r1, data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, FALSE, data->heapId);
}
return ret;
}
int ov53_021E6E7C(OaksSpeechData *data) {
RTCDate date;
RTCTime time;
int ret = msg_0219_00001;
GF_RTC_CopyDateTime(&date, &time);
u32 time_hhmm = time.minute + time.hour * 100;
if (time_hhmm >= 400 && time_hhmm <= 1059) {
ret = msg_0219_00001;
} else if (time_hhmm >= 1100 && time_hhmm <= 1559) {
ret = msg_0219_00002;
} else if (time_hhmm >= 1600 && time_hhmm <= 1859) {
ret = msg_0219_00003;
} else if (time_hhmm >= 1900 && time_hhmm <= 2359) {
ret = msg_0219_00004;
} else if (time_hhmm >= 0 && time_hhmm <= 359) {
ret = msg_0219_00005;
}
return ret;
}