Merge pull request #19 from PikalaxALT/menews_jisan

Menews jisan
This commit is contained in:
Marcus Huderle
2018-10-08 17:19:57 -05:00
committed by GitHub
9 changed files with 244 additions and 335 deletions
-326
View File
@@ -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.
+1 -7
View File
@@ -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
+4
View File
@@ -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
+1
View File
@@ -69,5 +69,6 @@
#define WIN_RANGE(a, b) (((a) << 8) | (b))
#define NAKED __attribute__((naked))
#define UNUSED __attribute__((unused))
#endif // GUARD_GBA_DEFINES
+21 -1
View File
@@ -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];
+8
View File
@@ -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
+7
View File
@@ -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
+3 -1
View File
@@ -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
+199
View File
@@ -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;
}
}