summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/menews_jisan.s326
-rw-r--r--data/data_84827AC.s8
-rw-r--r--include/event_data.h4
-rw-r--r--include/gba/defines.h1
-rw-r--r--include/global.h22
-rw-r--r--include/menews_jisan.h8
-rw-r--r--include/mevent.h7
-rw-r--r--ld_script.txt4
-rw-r--r--src/menews_jisan.c199
9 files changed, 244 insertions, 335 deletions
diff --git a/asm/menews_jisan.s b/asm/menews_jisan.s
deleted file mode 100644
index abd5e44f4..000000000
--- a/asm/menews_jisan.s
+++ /dev/null
@@ -1,326 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8146C30
-sub_8146C30: @ 8146C30
- push {r4,r5,lr}
- adds r4, r0, 0
- bl sub_8143D94
- adds r5, r0, 0
- movs r0, 0x3
- adds r1, r4, 0
- ands r1, r0
- ldrb r2, [r5]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5]
- cmp r4, 0x2
- bhi _08146C56
- cmp r4, 0x1
- bcs _08146C5C
- b _08146C80
-_08146C56:
- cmp r4, 0x3
- beq _08146C6E
- b _08146C80
-_08146C5C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- bl __umodsi3
- adds r0, 0x10
- b _08146C7E
-_08146C6E:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- bl __umodsi3
- adds r0, 0x1
-_08146C7E:
- strb r0, [r5, 0x1]
-_08146C80:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8146C30
-
- thumb_func_start sub_8146C88
-sub_8146C88: @ 8146C88
- push {lr}
- bl sub_8143D94
- movs r1, 0
- strb r1, [r0]
- strb r1, [r0, 0x1]
- ldr r0, _08146CA0 @ =0x00004028
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_08146CA0: .4byte 0x00004028
- thumb_func_end sub_8146C88
-
- thumb_func_start sub_8146CA4
-sub_8146CA4: @ 8146CA4
- push {r4,lr}
- ldr r0, _08146CE0 @ =0x00004028
- bl sub_806E454
- adds r4, r0, 0
- bl sub_8143D94
- adds r2, r0, 0
- ldr r0, [r2]
- lsls r0, 24
- lsrs r0, 29
- cmp r0, 0x4
- bls _08146CD8
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- ldr r1, _08146CE4 @ =0x01f30000
- cmp r0, r1
- bls _08146CD8
- ldrb r0, [r2]
- movs r1, 0x1F
- ands r1, r0
- strb r1, [r2]
- movs r0, 0
- strh r0, [r4]
-_08146CD8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08146CE0: .4byte 0x00004028
-_08146CE4: .4byte 0x01f30000
- thumb_func_end sub_8146CA4
-
- thumb_func_start sub_8146CE8
-sub_8146CE8: @ 8146CE8
- push {r4-r6,lr}
- ldr r6, _08146D08 @ =gUnknown_20370D0
- bl sub_8143D94
- adds r4, r0, 0
- bl sub_806E2BC
- cmp r0, 0
- beq _08146D02
- bl sub_8143E1C
- cmp r0, 0
- bne _08146D0C
-_08146D02:
- movs r0, 0
- b _08146D6E
- .align 2, 0
-_08146D08: .4byte gUnknown_20370D0
-_08146D0C:
- adds r0, r4, 0
- bl sub_8146E0C
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x6
- bhi _08146D6C
- lsls r0, r5, 2
- ldr r1, _08146D24 @ =_08146D28
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08146D24: .4byte _08146D28
- .align 2, 0
-_08146D28:
- .4byte _08146D6C
- .4byte _08146D44
- .4byte _08146D44
- .4byte _08146D6C
- .4byte _08146D4E
- .4byte _08146D5E
- .4byte _08146D6C
-_08146D44:
- adds r0, r4, 0
- bl sub_8146D74
- strh r0, [r6]
- b _08146D6C
-_08146D4E:
- adds r0, r4, 0
- bl sub_8146D74
- strh r0, [r6]
- adds r0, r4, 0
- bl sub_8146DA0
- b _08146D6C
-_08146D5E:
- adds r0, r4, 0
- bl sub_8146D74
- strh r0, [r6]
- adds r0, r4, 0
- bl sub_8146D94
-_08146D6C:
- adds r0, r5, 0
-_08146D6E:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8146CE8
-
- thumb_func_start sub_8146D74
-sub_8146D74: @ 8146D74
- push {r4,lr}
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldrb r4, [r0, 0x1]
- adds r4, 0x84
- movs r1, 0
- strb r1, [r0, 0x1]
- bl sub_8146DD8
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8146D74
-
- thumb_func_start sub_8146D94
-sub_8146D94: @ 8146D94
- ldrb r2, [r0]
- movs r1, 0x1D
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- bx lr
- thumb_func_end sub_8146D94
-
- thumb_func_start sub_8146DA0
-sub_8146DA0: @ 8146DA0
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, [r3]
- lsls r0, 27
- lsrs r0, 29
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 2
- ldrb r1, [r3]
- movs r4, 0x1D
- negs r4, r4
- adds r2, r4, 0
- ands r2, r1
- orrs r2, r0
- strb r2, [r3]
- ldr r0, [r3]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0x4
- bls _08146DD2
- ands r2, r4
- movs r0, 0x10
- orrs r2, r0
- strb r2, [r3]
-_08146DD2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8146DA0
-
- thumb_func_start sub_8146DD8
-sub_8146DD8: @ 8146DD8
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, [r3]
- lsls r0, 24
- lsrs r0, 29
- adds r0, 0x1
- lsls r0, 5
- ldrb r1, [r3]
- movs r4, 0x1F
- adds r2, r4, 0
- ands r2, r1
- orrs r2, r0
- strb r2, [r3]
- ldr r0, [r3]
- lsls r0, 24
- lsrs r0, 29
- cmp r0, 0x5
- bls _08146E04
- ands r2, r4
- movs r0, 0xA0
- orrs r2, r0
- strb r2, [r3]
-_08146E04:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8146DD8
-
- thumb_func_start sub_8146E0C
-sub_8146E0C: @ 8146E0C
- push {lr}
- adds r2, r0, 0
- ldrb r1, [r2]
- movs r0, 0xE0
- ands r0, r1
- cmp r0, 0xA0
- bne _08146E1E
- movs r0, 0x6
- b _08146E66
-_08146E1E:
- ldr r1, [r2]
- lsls r0, r1, 30
- lsrs r0, 30
- cmp r0, 0x1
- beq _08146E40
- cmp r0, 0x1
- bgt _08146E32
- cmp r0, 0
- beq _08146E3C
- b _08146E58
-_08146E32:
- cmp r0, 0x2
- beq _08146E44
- cmp r0, 0x3
- beq _08146E48
- b _08146E58
-_08146E3C:
- movs r0, 0x3
- b _08146E66
-_08146E40:
- movs r0, 0x1
- b _08146E66
-_08146E44:
- movs r0, 0x2
- b _08146E66
-_08146E48:
- lsls r0, r1, 27
- lsrs r0, 29
- cmp r0, 0x2
- bhi _08146E54
- movs r0, 0x4
- b _08146E66
-_08146E54:
- movs r0, 0x5
- b _08146E66
-_08146E58:
- ldr r0, _08146E6C @ =gUnknown_8468C5C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c"
- ldr r1, _08146E70 @ =0x0000017f
- ldr r2, _08146E74 @ =gUnknown_8468C94 "0"
- movs r3, 0x1
- bl AGBAssert
- movs r0, 0
-_08146E66:
- pop {r1}
- bx r1
- .align 2, 0
-_08146E6C: .4byte gUnknown_8468C5C
-_08146E70: .4byte 0x0000017f
-_08146E74: .4byte gUnknown_8468C94
- thumb_func_end sub_8146E0C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_84827AC.s b/data/data_84827AC.s
index 2c69a76d7..565a6adf2 100644
--- a/data/data_84827AC.s
+++ b/data/data_84827AC.s
@@ -5014,13 +5014,7 @@ gUnknown_8468B6C:: @ 8468B6C
gUnknown_8468BCC:: @ 8468BCC
.incbin "baserom.gba", 0x468BCC, 0x90
- .align 2
-gUnknown_8468C5C:: @ 8468C5C
- .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c"
-
- .align 2
-gUnknown_8468C94:: @ 8468C94
- .asciz "0"
+ .section .rodata.8468C98
.align 2
gUnknown_8468C98:: @ 8468C98
diff --git a/include/event_data.h b/include/event_data.h
index f829d3b87..f28ed4f75 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -29,6 +29,8 @@ u8 *GetFlagPointer(u16 id);
u8 FlagSet(u16 id);
u8 FlagClear(u16 id);
bool8 FlagGet(u16 id);
+u16 * sub_806E454(u16 id);
+bool32 sub_806E2BC(void);
extern u16 gSpecialVar_0x8000;
extern u16 gSpecialVar_0x8001;
@@ -49,4 +51,6 @@ extern u16 gSpecialVar_MonBoxId;
extern u16 gSpecialVar_MonBoxPos;
extern u16 gSpecialVar_0x8014;
+extern u16 gUnknown_20370D0;
+
#endif // GUARD_EVENT_DATA_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index fe81770e3..a0ef506dd 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -69,5 +69,6 @@
#define WIN_RANGE(a, b) (((a) << 8) | (b))
#define NAKED __attribute__((naked))
+#define UNUSED __attribute__((unused))
#endif // GUARD_GBA_DEFINES
diff --git a/include/global.h b/include/global.h
index 75911b9f2..11a79ebe8 100644
--- a/include/global.h
+++ b/include/global.h
@@ -466,6 +466,14 @@ struct RecordMixingDayCareMail
bool16 holdsItem[DAYCARE_MON_COUNT];
};
+struct MysteryEventStruct
+{
+ u8 unk_0_0:2;
+ u8 unk_0_2:3;
+ u8 unk_0_5:3;
+ u8 unk_1;
+};
+
#define MAP_OBJECTS_COUNT 16
#define BERRY_TREES_COUNT 128
#define FLAGS_COUNT 300
@@ -476,7 +484,19 @@ struct SaveBlock1
{
/*0x0000*/ u8 filler[0x4];
/*0x0004*/ struct WarpData location;
- /*0x000C*/ u8 fillerC[0x3610];
+ /*0x0C*/ struct WarpData warp1;
+ /*0x14*/ struct WarpData warp2;
+ /*0x1C*/ struct WarpData lastHealLocation;
+ /*0x24*/ struct WarpData warp4;
+ /*0x002C*/ u8 filler2C[0x60C];
+ /*0x638*/ u8 trainerRematchStepCounter;
+ u8 filler_639;
+ /*0x63a*/ u8 trainerRematches[100];
+ /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT];
+ /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64];
+ /*0x0EE0*/ u8 fillerEE0[0x2580];
+ /*0x3460*/ struct MysteryEventStruct unk_3460;
+ /*0x3464*/ u8 filler_3464[0x1b8];
/*0x361C*/ struct RamScript ramScript;
/*0x3A08*/ u8 filler3A08[0x44];
/*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH];
diff --git a/include/menews_jisan.h b/include/menews_jisan.h
new file mode 100644
index 000000000..8dc1d0a99
--- /dev/null
+++ b/include/menews_jisan.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_MENEWS_JISAN_H
+#define GUARD_MENEWS_JISAN_H
+
+void sub_8146C30(u32 a0);
+void sub_8146C88(void);
+void sub_8146CA4(void);
+
+#endif //GUARD_MENEWS_JISAN_H
diff --git a/include/mevent.h b/include/mevent.h
new file mode 100644
index 000000000..a611a98a8
--- /dev/null
+++ b/include/mevent.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_MEVENT_H
+#define GUARD_MEVENT_H
+
+struct MysteryEventStruct * sub_8143D94(void);
+bool32 sub_8143E1C(void);
+
+#endif //GUARD_MEVENT_H
diff --git a/ld_script.txt b/ld_script.txt
index bc27ac048..70084ef0e 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -249,7 +249,7 @@ SECTIONS {
asm/mevent.o(.text);
asm/mevent_server.o(.text);
asm/mevent_8145654.o(.text);
- asm/menews_jisan.o(.text);
+ src/menews_jisan.o(.text);
asm/seagallop.o(.text);
asm/unk_8147500.o(.text);
asm/unk_8147AA8.o(.text);
@@ -369,6 +369,8 @@ SECTIONS {
data/data.o(.rodata);
src/battle_ai_script_commands.o(.rodata);
data/data_84827AC.o(.rodata);
+ src/menews_jisan.o(.rodata);
+ data/data_84827AC.o(.rodata.8468C98);
src/m4a_tables.o(.rodata);
data/sound_data.o(.rodata);
} =0
diff --git a/src/menews_jisan.c b/src/menews_jisan.c
new file mode 100644
index 000000000..7dfcee939
--- /dev/null
+++ b/src/menews_jisan.c
@@ -0,0 +1,199 @@
+#include "global.h"
+#include "mevent.h"
+#include "random.h"
+#include "event_data.h"
+#include "menews_jisan.h"
+
+static u32 sub_8146D74(struct MysteryEventStruct *);
+static void sub_8146DD8(struct MysteryEventStruct *);
+static u32 sub_8146E0C(struct MysteryEventStruct *);
+static void sub_8146DA0(struct MysteryEventStruct *);
+static void sub_8146D94(struct MysteryEventStruct *);
+
+#ifdef NONMATCHING
+void sub_8146C30(u32 a0)
+{
+ struct MysteryEventStruct *r5 = sub_8143D94();
+
+ r5->unk_0_0 = a0;
+ asm_comment("The switch logic does not match. Specifically, the \"bhi\" is replaced with a \"bls\" and the comparisons with 1 and 3 are swapped chronologically.");
+ switch (a0)
+ {
+ case 0:
+ r5->unk_1 = (Random() % 15) + 16;
+ break;
+ case 1:
+ break;
+ case 2:
+ break;
+ case 3:
+ r5->unk_1 = (Random() % 15) + 1;
+ break;
+ }
+}
+#else
+NAKED
+void sub_8146C30(u32 a0)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tadds r4, r0, 0\n"
+ "\tbl sub_8143D94\n"
+ "\tadds r5, r0, 0\n"
+ "\tmovs r0, 0x3\n"
+ "\tadds r1, r4, 0\n"
+ "\tands r1, r0\n"
+ "\tldrb r2, [r5]\n"
+ "\tmovs r0, 0x4\n"
+ "\tnegs r0, r0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r5]\n"
+ "\tcmp r4, 0x2\n"
+ "\tbhi _08146C56\n"
+ "\tcmp r4, 0x1\n"
+ "\tbcs _08146C5C\n"
+ "\tb _08146C80\n"
+ "_08146C56:\n"
+ "\tcmp r4, 0x3\n"
+ "\tbeq _08146C6E\n"
+ "\tb _08146C80\n"
+ "_08146C5C:\n"
+ "\tbl Random\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r1, 0xF\n"
+ "\tbl __umodsi3\n"
+ "\tadds r0, 0x10\n"
+ "\tb _08146C7E\n"
+ "_08146C6E:\n"
+ "\tbl Random\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r1, 0xF\n"
+ "\tbl __umodsi3\n"
+ "\tadds r0, 0x1\n"
+ "_08146C7E:\n"
+ "\tstrb r0, [r5, 0x1]\n"
+ "_08146C80:\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
+
+void sub_8146C88(void)
+{
+ struct MysteryEventStruct *r5 = sub_8143D94();
+
+ r5->unk_0_0 = 0;
+ r5->unk_0_2 = 0;
+ r5->unk_0_5 = 0;
+ r5->unk_1 = 0;
+ VarSet(0x4028, 0);
+}
+
+void sub_8146CA4(void)
+{
+ u16 *r4 = sub_806E454(0x4028);
+ struct MysteryEventStruct *r2 = sub_8143D94();
+ struct MysteryEventStruct r0 = *r2;
+
+ if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3)
+ {
+ r2->unk_0_5 = 0;
+ *r4 = 0;
+ }
+}
+
+u16 sub_8146CE8(void)
+{
+ u16 *r6 = &gUnknown_20370D0;
+ struct MysteryEventStruct *r4 = sub_8143D94();
+ u16 r5;
+
+ if (!sub_806E2BC() || !sub_8143E1C())
+ return 0;
+
+ r5 = sub_8146E0C(r4);
+
+ switch (r5)
+ {
+ case 0:
+ break;
+ case 1:
+ *r6 = sub_8146D74(r4);
+ break;
+ case 2:
+ *r6 = sub_8146D74(r4);
+ break;
+ case 3:
+ break;
+ case 4:
+ *r6 = sub_8146D74(r4);
+ sub_8146DA0(r4);
+ break;
+ case 5:
+ *r6 = sub_8146D74(r4);
+ sub_8146D94(r4);
+ break;
+ case 6:
+ break;
+ }
+
+ return r5;
+}
+
+static u32 sub_8146D74(struct MysteryEventStruct *a0)
+{
+ u32 r4;
+
+ a0->unk_0_0 = 0;
+ r4 = a0->unk_1 + 0x84;
+ a0->unk_1 = 0;
+ sub_8146DD8(a0);
+ return r4;
+}
+
+static void sub_8146D94(struct MysteryEventStruct *a0)
+{
+ a0->unk_0_2 = 0;
+}
+
+static void sub_8146DA0(struct MysteryEventStruct *a0)
+{
+ a0->unk_0_2++;
+ if ((u8)a0->unk_0_2 > 4)
+ a0->unk_0_2 = 4;
+}
+
+static void sub_8146DD8(struct MysteryEventStruct *a0)
+{
+ a0->unk_0_5++;
+ if ((u8)a0->unk_0_5 > 5)
+ a0->unk_0_5 = 5;
+}
+
+static u32 sub_8146E0C(struct MysteryEventStruct *a0)
+{
+ struct MysteryEventStruct r0;
+ if ((u8)a0->unk_0_5 == 5)
+ return 6;
+
+ r0 = *a0;
+ switch (r0.unk_0_0)
+ {
+ case 0:
+ return 3;
+ case 1:
+ return 1;
+ case 2:
+ return 2;
+ case 3:
+ if ((u8)r0.unk_0_2 < 3)
+ return 4;
+ return 5;
+ default:
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383);
+ return 0;
+ }
+}