summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/tv.s188
-rw-r--r--src/tv.c96
2 files changed, 86 insertions, 198 deletions
diff --git a/asm/tv.s b/asm/tv.s
index fae7c55af..5839dfbef 100644
--- a/asm/tv.s
+++ b/asm/tv.s
@@ -890,194 +890,8 @@ _080BDEA2:
_080BDEA6:
pop {r0}
bx r0
- thumb_func_end sub_80BDE48
-
- thumb_func_start sub_80BDEAC
-sub_80BDEAC: @ 80BDEAC
- push {lr}
- adds r1, r0, 0
- movs r2, GAME_LANGUAGE
- ldrb r0, [r1]
- cmp r0, 0xFC
- bne _080BDEC0
- ldrb r0, [r1, 0x1]
- cmp r0, 0x15
- bne _080BDEC0
- movs r2, 0x1
-_080BDEC0:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80BDEAC
-
- thumb_func_start sub_80BDEC8
-sub_80BDEC8: @ 80BDEC8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- bl sub_80BEB20
- bl sub_80BE778
- ldr r5, _080BDEE8 @ =gUnknown_030042E0
- ldrh r0, [r5, 0x28]
- cmp r0, 0
- bne _080BDEEC
- bl sub_80BE074
- b _080BE012
- .align 2, 0
-_080BDEE8: .4byte gUnknown_030042E0
-_080BDEEC:
- bl sub_80BE028
- ldr r0, _080BDF98 @ =0x0000ffff
- bl sub_80BF77C
- lsls r0, 24
- cmp r0, 0
- beq _080BDEFE
- b _080BE012
-_080BDEFE:
- ldrh r1, [r5, 0x28]
- movs r0, 0xB
- muls r0, r1
- ldr r1, _080BDF9C @ =gSpeciesNames
- adds r0, r1
- adds r1, r5, 0
- adds r1, 0x2A
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- bne _080BDF16
- b _080BE012
-_080BDF16:
- ldr r0, _080BDFA0 @ =gSaveBlock1 + 0x2738
- bl sub_80BF74C
- ldr r1, _080BDFA4 @ =gUnknown_03005D38
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _080BE012
- movs r0, 0x15
- bl sub_80BF1B4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080BE012
- movs r2, 0
- adds r7, r5, 0
- adds r1, r7, 0
- adds r1, 0x36
-_080BDF42:
- adds r0, r2, r1
- ldrb r0, [r0]
- adds r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xA
- bls _080BDF42
- cmp r4, 0
- bne _080BDF64
- ldrb r1, [r7, 0x5]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080BE012
-_080BDF64:
- movs r4, 0
- ldr r0, _080BDFA4 @ =gUnknown_03005D38
- movs r1, 0
- ldrsb r1, [r0, r1]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080BDFA0 @ =gSaveBlock1 + 0x2738
- adds r5, r0, r1
- movs r0, 0x15
- strb r0, [r5]
- strb r4, [r5, 0x1]
- ldrb r1, [r7, 0x5]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080BDFAC
- movs r4, 0x1
- movs r0, 0x1
- adds r3, r5, 0
- adds r3, 0x13
- ldr r1, _080BDFA8 @ =gSaveBlock2
- mov r8, r1
- adds r6, r5, 0x4
- b _080BDFDE
- .align 2, 0
-_080BDF98: .4byte 0x0000ffff
-_080BDF9C: .4byte gSpeciesNames
-_080BDFA0: .4byte gSaveBlock1 + 0x2738
-_080BDFA4: .4byte gUnknown_03005D38
-_080BDFA8: .4byte gSaveBlock2
-_080BDFAC:
- movs r2, 0
- ldr r0, _080BE01C @ =gUnknown_02024C04
- mov r12, r0
- adds r3, r5, 0
- adds r3, 0x13
- ldr r1, _080BE020 @ =gSaveBlock2
- mov r8, r1
- adds r6, r5, 0x4
- adds r1, r7, 0
- adds r1, 0x36
-_080BDFC0:
- adds r0, r2, r1
- ldrb r0, [r0]
- adds r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xA
- bls _080BDFC0
- cmp r4, 0xFF
- bls _080BDFDA
- movs r4, 0xFF
-_080BDFDA:
- mov r1, r12
- ldrh r0, [r1]
-_080BDFDE:
- strb r4, [r5, 0x12]
- strb r0, [r5, 0xF]
- adds r0, r3, 0
- mov r1, r8
- bl StringCopy
- ldr r4, _080BE024 @ =gUnknown_0300430A
- adds r0, r6, 0
- adds r1, r4, 0
- bl StringCopy
- subs r4, 0x2A
- ldrh r0, [r4, 0x28]
- strh r0, [r5, 0x10]
- adds r0, r5, 0
- bl sub_80BE138
- movs r0, GAME_LANGUAGE
- strb r0, [r5, 0x2]
- adds r0, r6, 0
- bl sub_80BDEAC
- strb r0, [r5, 0x3]
- adds r0, r6, 0
- bl StripExtCtrlCodes
-_080BE012:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
.align 2, 0
-_080BE01C: .4byte gUnknown_02024C04
-_080BE020: .4byte gSaveBlock2
-_080BE024: .4byte gUnknown_0300430A
- thumb_func_end sub_80BDEC8
+ thumb_func_end sub_80BDE48
.section .text_80BE8EC
diff --git a/src/tv.c b/src/tv.c
index 47a1b6029..db71bafdb 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -26,14 +26,22 @@ struct UnkTvStruct
};
struct UnkBattleStruct {
- u8 pad00[6];
+ u16 var00;
+ u8 var02[3];
+ u8 var05_0:1;
+ u8 var05_1:1;
+ u8 var05_pad2:6;
u16 var06;
u8 pad08[24];
u16 var20;
u8 pad22[6];
u16 var28;
+ u8 var2a[11];
+ u8 var35;
+ u8 var36[11];
};
extern struct UnkBattleStruct gUnknown_030042E0;
+extern u8 gUnknown_0300430A[11];
struct OutbreakPokemon
{
@@ -123,6 +131,11 @@ void sub_80BF478(void);
void sub_80BF484(void);
void sub_80BF4BC(void);
+void sub_80BE028(void);
+void sub_80BE074(void);
+void sub_80BE778(void);
+void sub_80BEB20(void);
+
asm(".section .text_a");
s8 sub_80BF74C(TVShow tvShow[]);
@@ -131,6 +144,66 @@ void sub_80BEA88(void);
void sub_80BE138(TVShow *show);
void sub_80BE160(TVShow *show);
+extern u16 gUnknown_02024C04;
+
+u8 sub_80BDEAC(u8 *a0) {
+ u8 lang;
+ lang = GAME_LANGUAGE;
+ if (a0[0] == 0xFC && a0[1] == 0x15) {
+ lang = LANGUAGE_JAPANESE;
+ }
+ return lang;
+}
+
+void sub_80BDEC8(void) {
+ TVShow *show;
+ u8 i;
+ u16 total;
+ u16 item;
+ total = 0;
+ sub_80BEB20();
+ sub_80BE778();
+ if (gUnknown_030042E0.var28 == 0) {
+ sub_80BE074();
+ } else {
+ sub_80BE028();
+ if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gUnknown_030042E0.var28], gUnknown_030042E0.var2a) != 0) {
+ gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows.shows);
+ if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_CAUGHT) != 1) {
+ for (i=0; i<11; i++) {
+ total += gUnknown_030042E0.var36[i];
+ }
+ if (total != 0 || gUnknown_030042E0.var05_1 != 0) {
+ total = FALSE;
+ show = &gSaveBlock1.tvShows.shows[gUnknown_03005D38.var0];
+ show->pokemonToday.var00 = TVSHOW_POKEMON_TODAY_CAUGHT;
+ show->pokemonToday.var01 = total;
+ if (gUnknown_030042E0.var05_1 != 0) {
+ total = 1;
+ item = ITEM_MASTER_BALL;
+ } else {
+ for (i=0; i<11; i++) {
+ total += gUnknown_030042E0.var36[i];
+ }
+ if (total > 0xff) {
+ total = 0xff;
+ }
+ item = gUnknown_02024C04;
+ }
+ show->pokemonToday.var12 = total;
+ show->pokemonToday.ball = item;
+ StringCopy(show->pokemonToday.playerName, gSaveBlock2.playerName);
+ StringCopy(show->pokemonToday.nickname, gUnknown_030042E0.var2a);
+ show->pokemonToday.species = gUnknown_030042E0.var28;
+ sub_80BE138(show);
+ show->pokemonToday.language = GAME_LANGUAGE;
+ show->pokemonToday.language2 = sub_80BDEAC(show->pokemonToday.nickname);
+ StripExtCtrlCodes(show->pokemonToday.nickname);
+ }
+ }
+ }
+ }
+}
void sub_80BE028(void) {
TVShow *buffer;
@@ -149,27 +222,27 @@ void sub_80BE028(void) {
#ifdef NONMATCHING
void sub_80BE074(void) {
u8 i;
- u16 tot;
+ u16 total;
+ u8 flag;
TVShow *show;
if (sub_80BF77C(0xffff) == 0) {
- asm_comment("Here the registers for i and tot are assigned in the wrong order.");
- tot = 0;
- for (i=0; i<ARRAY_COUNT(gUnknown_03004316); i++) {
- tot += gUnknown_03004316[i];
+ for (i=0, total=0; i<ARRAY_COUNT(gUnknown_03004316); i++) {
+ total += gUnknown_03004316[i];
}
- if (tot > 0xff) {
- tot = 0xff;
+ if (total > 0xff) {
+ total = 0xff;
}
- if (tot > 2 && gUnknown_02024D26 == 1) {
+ if (total > 2 && gUnknown_02024D26 == 1) {
gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows.shows);
if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_FAILED) != 1) {
+ flag = FALSE;
show = &gSaveBlock1.tvShows.shows[gUnknown_03005D38.var0];
asm_comment("Here the wrong registers are used to hold the show ID and flag.");
show->pokemonTodayFailed.var00 = TVSHOW_POKEMON_TODAY_FAILED;
- show->pokemonTodayFailed.var01 = 0;
+ show->pokemonTodayFailed.var01 = flag;
show->pokemonTodayFailed.species = gUnknown_030042E0.var06;
show->pokemonTodayFailed.species2 = gUnknown_030042E0.var20;
- show->pokemonTodayFailed.var10 = tot;
+ show->pokemonTodayFailed.var10 = total;
show->pokemonTodayFailed.var11 = gUnknown_02024D26;
show->pokemonTodayFailed.var12 = gMapHeader.name;
StringCopy(show->pokemonTodayFailed.playerName, gSaveBlock2.playerName);
@@ -236,6 +309,7 @@ _080BE0A2:\n\
adds r4, r0\n\
lsls r4, 2\n\
adds r4, r6\n\
+ @ -- Here the compiler puts the status flag in the wrong register. --\n\
movs r1, 0\n\
movs r0, 0x17\n\
strb r0, [r4]\n\