Merge pull request #290 from Kermalis/other-menus
Some checks failed
GithubCI / build (push) Has been cancelled

Other menus & SpriteOAM memes
This commit is contained in:
Seth Barberee
2024-12-06 07:19:39 -08:00
committed by GitHub
62 changed files with 812 additions and 827 deletions

View File

@@ -5,6 +5,7 @@
.text
@ SpriteOAM memes. Same as sub_8013F84 except instead of a 0x60 it's a 0x80
thumb_func_start sub_8013E54
sub_8013E54:
push {r4-r6,lr}
@@ -152,6 +153,7 @@ _08013F7C: .4byte 0x00003fff
_08013F80: .4byte 0x00000fff
thumb_func_end sub_8013E54
@ SpriteOAM memes https://decomp.me/scratch/GROyH
thumb_func_start sub_8013F84
sub_8013F84:
push {r4-r6,lr}

View File

@@ -253,7 +253,7 @@ _080992CC: .4byte gUnknown_203B49C
_080992D0: .4byte gUnknown_203B49D
_080992D4: .4byte gUnknown_20398C4
_080992D8: .4byte gUnknown_2039950
_080992DC: .4byte gUnknown_20398D8
_080992DC: .4byte gUnknown_20398C8 + 0x10
thumb_func_end sub_809927C
thumb_func_start sub_80992E0

View File

@@ -279,7 +279,7 @@ _0800177A:
bx r1
thumb_func_end GetScriptVarValue
@ https://decomp.me/scratch/xF3HH
@ https://decomp.me/scratch/5F0gW [100% - DizzyEggg]
thumb_func_start GetScriptVarArrayValue
GetScriptVarArrayValue:
push {r4,r5,lr}

View File

@@ -5,6 +5,8 @@
.text
@ https://decomp.me/scratch/QRjxB - more up to date but incomplete
@ https://decomp.me/scratch/aOcQq - more complete but using outdated definitions
thumb_func_start HandleAction
HandleAction:
push {r4-r7,lr}

View File

@@ -1,272 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8037810
sub_8037810:
push {r4-r6,lr}
ldr r6, _080378FC
ldr r0, [r6]
movs r5, 0xDE
lsls r5, 1
adds r0, r5
movs r1, 0
movs r2, 0x8
bl MemoryFill8
ldr r0, [r6]
movs r4, 0xE2
lsls r4, 1
adds r0, r4
movs r1, 0
movs r2, 0x8
bl MemoryFill8
ldr r0, [r6]
adds r5, r0, r5
movs r1, 0
movs r2, 0
str r1, [r5]
str r2, [r5, 0x4]
adds r4, r0, r4
str r1, [r4]
str r2, [r4, 0x4]
movs r2, 0xE6
lsls r2, 1
adds r0, r2
movs r1, 0
movs r2, 0x30
bl MemoryFill8
ldr r0, [r6]
movs r3, 0xFE
lsls r3, 1
adds r0, r3
movs r1, 0
movs r2, 0x30
bl MemoryFill8
ldr r0, [r6]
movs r1, 0x8B
lsls r1, 2
adds r0, r1
movs r1, 0
movs r2, 0x30
bl MemoryFill8
ldr r0, [r6]
movs r2, 0x97
lsls r2, 2
adds r0, r2
movs r1, 0
movs r2, 0x30
bl MemoryFill8
ldr r0, [r6]
movs r3, 0xA3
lsls r3, 2
adds r0, r3
movs r1, 0
movs r2, 0x30
bl MemoryFill8
ldr r0, [r6]
movs r1, 0xC5
lsls r1, 2
adds r0, r1
movs r1, 0
movs r2, 0x30
bl MemoryFill8
ldr r0, [r6]
movs r2, 0xAF
lsls r2, 2
adds r0, r2
movs r1, 0
movs r2, 0x58
bl MemoryFill8
ldr r0, [r6]
movs r3, 0xD1
lsls r3, 2
adds r0, r3
movs r1, 0
movs r2, 0x58
bl MemoryFill8
ldr r0, [r6]
movs r1, 0xE7
lsls r1, 2
adds r0, r1
movs r1, 0
movs r2, 0xB4
bl MemoryFill8
ldr r0, [r6]
movs r2, 0x8A
lsls r2, 3
adds r0, r2
movs r1, 0
movs r2, 0xB4
bl MemoryFill8
ldr r2, [r6]
movs r3, 0xB1
lsls r3, 2
adds r0, r2, r3
movs r1, 0
strh r1, [r0]
adds r3, 0x88
adds r0, r2, r3
strh r1, [r0]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080378FC: .4byte sUnknown_203B35C
thumb_func_end sub_8037810
thumb_func_start sub_8037900
sub_8037900:
push {r4,lr}
sub sp, 0x10
ldr r4, _08037928
ldr r0, [r4]
movs r1, 0xAE
lsls r1, 1
adds r0, r1
movs r1, 0
bl sub_8035CC0
ldr r0, [r4]
ldr r0, [r0]
cmp r0, 0xA
bls _0803791E
b _08037A14
_0803791E:
lsls r0, 2
ldr r1, _0803792C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08037928: .4byte sUnknown_203B35C
_0803792C: .4byte _08037930
.align 2, 0
_08037930:
.4byte _0803795C
.4byte _0803795C
.4byte _0803797C
.4byte _0803797C
.4byte _0803799C
.4byte _0803799C
.4byte _080379BC
.4byte _080379BC
.4byte _08037A14
.4byte _080379F0
.4byte _080379F0
_0803795C:
ldr r0, _08037970
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x1C
movs r2, 0xAE
lsls r2, 1
adds r1, r2
ldr r3, _08037974
ldr r2, _08037978
b _080379CE
.align 2, 0
_08037970: .4byte sUnknown_203B35C
_08037974: .4byte sUnknown_80E6554
_08037978: .4byte sUnknown_80E656C
_0803797C:
ldr r0, _08037990
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x1C
movs r2, 0xAE
lsls r2, 1
adds r1, r2
ldr r3, _08037994
ldr r2, _08037998
b _080379CE
.align 2, 0
_08037990: .4byte sUnknown_203B35C
_08037994: .4byte sUnknown_80E6554
_08037998: .4byte sUnknown_80E65D8
_0803799C:
ldr r0, _080379B0
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x1C
movs r2, 0xAE
lsls r2, 1
adds r1, r2
ldr r3, _080379B4
ldr r2, _080379B8
b _080379CE
.align 2, 0
_080379B0: .4byte sUnknown_203B35C
_080379B4: .4byte sUnknown_80E6554
_080379B8: .4byte sUnknown_80E661C
_080379BC:
ldr r0, _080379E4
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x1C
movs r2, 0xAE
lsls r2, 1
adds r1, r2
ldr r3, _080379E8
ldr r2, _080379EC
_080379CE:
str r2, [sp]
movs r4, 0
str r4, [sp, 0x4]
movs r2, 0x6
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
b _08037A14
.align 2, 0
_080379E4: .4byte sUnknown_203B35C
_080379E8: .4byte sUnknown_80E6554
_080379EC: .4byte sUnknown_80E665C
_080379F0:
ldr r0, _08037A38
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x1C
movs r2, 0xAE
lsls r2, 1
adds r1, r2
ldr r3, _08037A3C
ldr r2, _08037A40
str r2, [sp]
movs r4, 0
str r4, [sp, 0x4]
movs r2, 0x6
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
_08037A14:
ldr r4, _08037A38
ldr r0, [r4]
adds r0, 0x1C
movs r1, 0
movs r2, 0x1
bl sub_8035CF4
bl sub_80373C4
ldr r0, [r4]
adds r0, 0x1C
bl sub_80130A8
add sp, 0x10
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08037A38: .4byte sUnknown_203B35C
_08037A3C: .4byte sUnknown_80E6554
_08037A40: .4byte sUnknown_80E667C
thumb_func_end sub_8037900
thumb_func_start nullsub_202
nullsub_202:
bx lr
thumb_func_end nullsub_202
.align 2, 0

View File

@@ -1,242 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8037A48
sub_8037A48:
push {r4-r6,lr}
sub sp, 0x28
movs r6, 0x1
movs r0, 0
mov r1, sp
movs r2, 0x14
bl sub_800D670
add r4, sp, 0x14
movs r0, 0x1
adds r1, r4, 0
movs r2, 0x14
bl sub_800D670
ldr r1, _08037AAC
movs r3, 0x8
adds r2, r1, 0
adds r0, r2, 0x4
_08037A6C:
str r3, [r0]
subs r0, 0x4
cmp r0, r1
bge _08037A6C
ldr r0, [sp, 0x10]
str r0, [r2]
ldr r0, [r4, 0x10]
str r0, [r2, 0x4]
ldr r5, _08037AB0
mov r0, sp
adds r1, r5, 0
bl strcmp
cmp r0, 0
beq _08037A8C
movs r0, 0x1
_08037A8C:
lsls r0, 24
cmp r0, 0
bne _08037AA6
adds r0, r4, 0
adds r1, r5, 0
bl strcmp
cmp r0, 0
beq _08037AA0
movs r0, 0x1
_08037AA0:
lsls r0, 24
cmp r0, 0
beq _08037AB4
_08037AA6:
movs r0, 0
b _08037B1E
.align 2, 0
_08037AAC: .4byte gUnknown_202EC40
_08037AB0: .4byte gUnknown_80E6E50
_08037AB4:
ldr r1, [sp, 0x10]
cmp r1, 0
bne _08037AC0
ldr r0, [r4, 0x10]
cmp r0, 0x1
beq _08037B1C
_08037AC0:
cmp r1, 0x1
bne _08037ACA
ldr r0, [r4, 0x10]
cmp r0, 0
beq _08037B1C
_08037ACA:
cmp r1, 0x2
bne _08037AD4
ldr r0, [r4, 0x10]
cmp r0, 0x3
beq _08037B1C
_08037AD4:
cmp r1, 0x3
bne _08037ADE
ldr r0, [r4, 0x10]
cmp r0, 0x2
beq _08037B1C
_08037ADE:
cmp r1, 0x9
bne _08037AE8
ldr r0, [r4, 0x10]
cmp r0, 0xA
beq _08037B1C
_08037AE8:
cmp r1, 0xA
bne _08037AF2
ldr r0, [r4, 0x10]
cmp r0, 0x9
beq _08037B1C
_08037AF2:
cmp r1, 0x4
bne _08037AFC
ldr r0, [r4, 0x10]
cmp r0, 0x5
beq _08037B1C
_08037AFC:
cmp r1, 0x5
bne _08037B06
ldr r0, [r4, 0x10]
cmp r0, 0x4
beq _08037B1C
_08037B06:
cmp r1, 0x6
bne _08037B10
ldr r0, [r4, 0x10]
cmp r0, 0x7
beq _08037B1C
_08037B10:
cmp r1, 0x7
bne _08037B1A
ldr r0, [r4, 0x10]
cmp r0, 0x6
beq _08037B1C
_08037B1A:
movs r6, 0
_08037B1C:
adds r0, r6, 0
_08037B1E:
add sp, 0x28
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_8037A48
thumb_func_start sub_8037B28
sub_8037B28:
push {r4,r5,lr}
sub sp, 0x14
adds r4, r0, 0
movs r5, 0
bl sub_800D414
ldr r0, _08037B58
str r5, [r0]
ldr r5, _08037B5C
mov r0, sp
movs r1, 0
movs r2, 0x14
bl MemoryFill8
mov r0, sp
adds r1, r5, 0
bl strcpy
str r4, [sp, 0x10]
mov r0, sp
movs r1, 0x14
bl sub_800D59C
b _08037B7A
.align 2, 0
_08037B58: .4byte gUnknown_202EC38
_08037B5C: .4byte gUnknown_80E6E50
_08037B60:
cmp r5, 0x3
beq _08037BCC
cmp r5, 0x4
beq _08037BD8
cmp r5, 0x5
beq _08037BF0
ldr r2, _08037BC0
ldr r1, [r2]
ldr r0, _08037BC4
cmp r1, r0
bgt _08037BE4
adds r0, r1, 0x1
str r0, [r2]
_08037B7A:
movs r4, 0
_08037B7C:
bl sub_80373C4
bl sub_8012AE8
cmp r0, 0x3
bgt _08037B8C
cmp r0, 0x2
bge _08037BF0
_08037B8C:
adds r4, 0x1
cmp r4, 0
ble _08037B7C
bl sub_800D33C
adds r5, r0, 0
bl sub_800D570
cmp r5, 0x2
bne _08037B60
bl sub_800D600
lsls r0, 24
cmp r0, 0
beq _08037BFC
bl sub_8037A48
lsls r0, 24
cmp r0, 0
bne _08037BC8
movs r4, 0x4
bl sub_800D520
bl sub_800D510
b _08037C06
.align 2, 0
_08037BC0: .4byte gUnknown_202EC38
_08037BC4: .4byte 0x00000707
_08037BC8:
movs r4, 0
b _08037C06
_08037BCC:
bl sub_800D520
bl sub_800D510
movs r0, 0x2
b _08037C08
_08037BD8:
bl sub_800D520
bl sub_800D510
movs r0, 0x3
b _08037C08
_08037BE4:
bl sub_800D520
bl sub_800D510
movs r0, 0xF
b _08037C08
_08037BF0:
bl sub_800D520
bl sub_800D510
movs r0, 0x1
b _08037C08
_08037BFC:
movs r4, 0x5
bl sub_800D520
bl sub_800D510
_08037C06:
adds r0, r4, 0
_08037C08:
add sp, 0x14
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8037B28
.align 2,0

View File

@@ -1012,7 +1012,14 @@ gUnknown_80B7DF8:
.global gVectorDirections
gVectorDirections: @ 80B7E3C
.4byte 0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1
.4byte 0, 1 @N
.4byte 1, 1 @NE
.4byte 1, 0 @E
.4byte 1, -1 @SE
.4byte 0, -1 @S
.4byte -1, -1 @SW
.4byte -1, 0 @W
.4byte -1, 1 @NW
@ ???
.string "pksdir0\0"

View File

@@ -1,7 +1,7 @@
#ifndef GUARD_CODE_800DAC0_H
#define GUARD_CODE_800DAC0_H
#include "ground_sprite.h"
#include "structs/sprite_oam.h"
#include "structs/str_position.h"
typedef struct unkStruct_80416E0

View File

@@ -8,10 +8,6 @@ void sub_80993C0(bool8);
void sub_80993D8(void);
void sub_80993E4(void);
// UNUSED
void sub_80993F0(void);
// ------
void sub_8099648(void);
void nullsub_103(void);
void sub_809965C(void);

View File

@@ -3,8 +3,9 @@
#include "structs/str_position.h"
typedef struct ScriptCommand {
// size: 0x10
// size: 0x10
typedef struct ScriptCommand
{
/* 0x0 */ u8 op;
/* 0x1 */ u8 argByte;
/* 0x2 */ s16 argShort;
@@ -13,49 +14,45 @@ typedef struct ScriptCommand {
/* 0xC */ const u8* argPtr;
} ScriptCommand;
// size: 0xC
typedef struct ScriptInfoSmall
{
// size: 0xC (3 padding)
/* 0x0 */ const ScriptCommand *ptr;
/* 0x4 */ s16 state;
/* 0x6 */ s16 group;
/* 0x8 */ s8 sector;
} ScriptInfoSmall;
// size: 0xC
typedef struct ScriptInfo
{
// size: 0xC (1 padding)
/* 0x0 */ const ScriptCommand *ptr;
/* 0x4 */ const ScriptCommand *ptr2;
/* 0x8 */ s16 group;
/* 0xA */ s8 sector;
} ScriptInfo;
// size: 0x4
typedef union ScriptUnion1632 {
s32 raw;
s16 arr[2];
} ScriptUnion1632;
// size: 0x60
typedef struct ScriptData
{
// size: 0x60
/* 0x00 */ s16 state;
/* 0x02 */ s16 savedState;
/* 0x04 */ ScriptInfo script;
// padding
/* 0x10 */ ScriptInfo savedScript;
// padding
/* 0x1C */ const ScriptCommand *curPtr;
/* 0x20 */ u8 curScriptOp;
// padding
/* 0x22 */ u16 unk22;
/* 0x22 */ s16 unk22;
/* 0x24 */ u16 unk24;
/* 0x26 */ s8 unk26;
// padding
/* 0x28 */ s16 branchDiscriminant;
/* 0x2A */ s16 unk2A;
/* 0x2C */ u16 unk2C;
// padding
/* 0x2C */ s16 unk2C;
/* 0x30 */ s32 unk30;
/* 0x34 */ PixelPos pos1;
/* 0x3C */ PixelPos pos2;
@@ -63,7 +60,6 @@ typedef struct ScriptData
/* 0x48 */ s32 unk48;
/* 0x4C */ u8 unk4C;
/* 0x4D */ u8 unk4D;
// padding
// ultimately accessed as ldrb, doesn't work as array of u32-sized structs, needs union
/* 0x50 */ union {
u8 buf[16];
@@ -71,11 +67,10 @@ typedef struct ScriptData
} localVars;
} ScriptData;
// size: 0x54
typedef struct CallbackData
{
// size: 0x54
/* 0x00 */ u16 maybeId;
// padding
// All callbacks take the parentObject as first parameter
/* 0x04 */ s16 (*getIndex)(void*); // id related
/* 0x08 */ void (*getSize)(void*, PixelPos *out);
@@ -87,28 +82,27 @@ typedef struct CallbackData
/* 0x20 */ void (*setPositionBounds)(void*, PixelPos *from, PixelPos *to);
/* 0x24 */ bool8 (*moveReal)(void*, PixelPos*);
/* 0x28 */ void (*setPosHeight)(void*, u32 height);
/* 0x2C */ void (*setDirection)(void*, s8 dir); // direction must be signed char!
/* 0x2C */ s32 (*setDirection)(void*, s8 dir); // direction must be signed char!
/* 0x30 */ void (*setEventIndex)(void*, u16);
/* 0x34 */ void (*livesOnlyNullsub)(void*, u16);
/* 0x38 */ void (*func38)(void*, s16, u32);
/* 0x3C */ void (*setFlags)(void*, u32 bits);
/* 0x40 */ void (*clearFlags)(void*, u32 bits);
/* 0x44 */ void (*func44_livesOnlySpriteRelated)(void*, u32);
/* 0x48 */ void (*moveRelative)(void*, PixelPos*);
/* 0x48 */ s32 (*moveRelative)(void*, PixelPos*);
/* 0x4C */ bool8 (*func4C_spriteRelatedCheck)(void*);
/* 0x50 */ bool8 (*func50_spriteRelated)(void*);
} CallbackData;
// size: 0xE4
typedef struct Action
{
// size: 0xE4
/* 0x00 */ const struct CallbackData *callbacks;
/* 0x04 */ void *parentObject; // struct GroundObject *
/* 0x08 */ s16 unk8[2]; // id?
/* 0x0C */ ScriptUnion1632 unkC;
/* 0x10 */ s16 group;
/* 0x12 */ s8 sector;
// padding
/* 0x14 */ const ScriptCommand *predefinedScripts[4];
/* 0x24 */ ScriptData scriptData;
/* 0x84 */ ScriptData scriptData2;
@@ -203,7 +197,7 @@ void InitScriptData(ScriptData *a0);
u8 GroundScriptCheckLockCondition(Action *param_1, s16 param_2);
void InitAction2(Action *action);
void GetFunctionScript(Action *param_1, ScriptInfoSmall *script, s16 index);
bool8 GroundScriptLockCond(Action *param_1, s16 index, u32 param_3);
bool8 GroundScriptLockCond(Action *param_1, s16 index, s32 param_3);
bool8 ActionResetScriptData(Action *param_1, const DebugLocation *unused);
bool8 GroundScript_ExecutePP(Action *, s32 *, ScriptInfoSmall *, const DebugLocation *unused);
const ScriptCommand *FindLabel(Action *action, s32 r1);

View File

@@ -1,17 +1,6 @@
#ifndef GUARD_GROUND_SPRITE_H
#define GUARD_GROUND_SPRITE_H
// size: 0xC
typedef struct unkStruct_2039DB0
{
u16 unk0;
s16 unk2;
u16 unk4;
u16 unk6;
u16 unk8;
u16 unkA;
} unkStruct_2039DB0;
// size: 0xC
typedef struct unkStruct_3001B7C_sub0
{

View File

@@ -7,10 +7,7 @@
// size: 0x8
typedef struct unkStruct_8035D94
{
union {
u8 itemIndex_u8;
u32 itemIndex_u32;
} itemIndex;
u8 itemIndex;
s32 numItems;
} unkStruct_8035D94;

View File

@@ -3,17 +3,11 @@
void InitHeap(void);
void MemoryClear8(u8 *dest, s32 size);
void MemoryClear8(void *dest, s32 size);
void MemoryClear16(u16 *dest, s32 size);
void MemoryClear32(u32 *dest, s32 size);
void MemoryFill8(u8 *dest, u8 value, s32 size);
void MemoryFill8(void *dest, u8 value, s32 size);
void MemoryFill16(u16 *dest, u16 value, s32 size);
void MemoryFill32(u32 *dest, u32 value, s32 size);
void MemoryCopy8(u8 *dest, u8 *src, s32 size);
void MemoryCopy16(u16 *dest, u16 *src, s32 size);
void MemoryCopy32(u32 *dest, u32 *src, s32 size);
void MemoryCopy8(u8 *dest, u8 *src, s32 size);
void MemoryCopy16(u16 *dest, u16 *src, s32 size);
void MemoryCopy8(void *dest, void *src, s32 size);
void MemoryCopy32(u32 *dest, u32 *src, s32 size);
void *MemoryAlloc(s32 size, s32 group);

View File

@@ -1,12 +1,12 @@
#ifndef GUARD_OTHER_MENUS1_H
#define GUARD_OTHER_MENUS1_H
#include "structs/menu.h"
#include "structs/sprite_oam.h"
#include "structs/str_text.h"
#include "code_8094F88.h"
#include "main_menu1.h"
#include "structs/menu.h"
#include "pokemon.h"
#include "sprite_oam.h"
#include "structs/str_text.h"
// size: 0x504
typedef struct unkStruct_203B35C
@@ -28,8 +28,8 @@ typedef struct unkStruct_203B35C
PokemonStruct1 unk2BC;
unkStruct_203B480 unk314;
PokemonStruct1 unk344;
u8 unk39C[180];
u8 unk450[180];
u8 unk39C[0xB4]; // unkStruct_803B344?
u8 unk450[0xB4]; // unkStruct_803B344?
} unkStruct_203B35C;
void sub_8036FDC(s32);

View File

@@ -1,7 +1,8 @@
#ifndef GUARD_OTHER_MENUS2_H
#define GUARD_OTHER_MENUS2_H
u32 sub_8037C10(bool8);
s32 sub_8037B28(s32);
s32 sub_8037C10(bool8);
s32 sub_8037D64(u32 mode, void *, void *);
s32 sub_80381F4(u32 mode, void *, void *);

View File

@@ -2,9 +2,8 @@
#define GUARD_SPRITE_H
#include "structs/axdata.h"
#include "ground_sprite.h"
#include "structs/sprite_oam.h"
#include "structs/str_position.h"
#include "sprite_oam.h"
// size: 0x8
typedef struct UnkSpriteLink

View File

@@ -194,13 +194,8 @@ typedef struct Moves
// size: 0x208
typedef struct EntityInfo
{
// This has different purposes for Pokémon, items, and traps.
// Pokemon: MovementFlag
// Items: ItemFlag
// Traps: TrapType
/* 0x0 */ u16 flags;
/* 0x2 */ s16 id; // Pokémon species or item ID.
// Everything from here on only applies to Pokémon.
/* 0x0 */ u16 flags; // MovementFlag
/* 0x2 */ s16 id; // Pokémon species.
/* 0x4 */ s16 apparentID; // Shows a different Pokémon when using Transform.
/* 0x6 */ bool8 isNotTeamMember;
/* 0x7 */ bool8 isTeamLeader;

View File

@@ -1,7 +1,7 @@
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
#include "sprite_oam.h"
#include "structs/sprite_oam.h"
#include "structs/str_text.h"
#include "structs/str_position.h"
@@ -25,11 +25,11 @@ typedef struct MenuInputStruct
s32 unk0;
u16 unk4;
s16 unk6;
DungeonPos unk8; // Maybe DungeonPos
DungeonPos unk8;
s16 unkC; // Maybe DungeonPos
s16 unkE;
u32 unk10;
DungeonPos unk14; // Maybe DungeonPos
DungeonPos unk14;
/* 0x18 */ s16 menuIndex;
s16 unk1A;
s16 unk1C;

View File

@@ -1,6 +1,18 @@
#ifndef GUARD_SPRITE_OAM_H
#define GUARD_SPRITE_OAM_H
// size: 0xC
// This is probably used for blue/gold rescue team to convert from GBA OAM to their platform's OAM in AddSprite()
typedef struct unkStruct_2039DB0
{
u16 unk0; // SpriteOAM attrib1 mask
s16 unk2; // SpriteOAM attrib2 mask
u16 unk4; // SpriteOAM attrib3 mask
u16 unk6; // SpriteOAM attrib1 value
u16 unk8; // SpriteOAM attrib2 value
u16 unkA; // SpriteOAM attrib3 value
} unkStruct_2039DB0;
// size: 0x8. Similar to struct OamData but unk6 is not copied to OAM
typedef struct SpriteOAM
{
@@ -10,7 +22,7 @@ typedef struct SpriteOAM
/* 0x2 */ u16 attrib2;
// tileNum:10 priority:2 paletteNum:4
/* 0x4 */ u16 attrib3;
// unk6_0:1 unk6_1:1 unk6_2:2? unk6_4:12
// unk6_0:1 unk6_1:1 unk6_2:1 unk6_3:1 unk6_4:12
u16 unk6;
} SpriteOAM;
@@ -86,6 +98,18 @@ typedef struct SpriteOAM
#define SPRITEOAM_SHIFT_UNK6_1 1
#define SPRITEOAM_MASK_UNK6_1 (SPRITEOAM_MAX_UNK6_1 << SPRITEOAM_SHIFT_UNK6_1) // ~ 0xFFFD
#define SPRITEOAM_MAX_UNK6_2 1
#define SPRITEOAM_SHIFT_UNK6_2 2
#define SPRITEOAM_MASK_UNK6_2 (SPRITEOAM_MAX_UNK6_2 << SPRITEOAM_SHIFT_UNK6_2) // ~ 0xFFFB
/* Not seen yet
#define SPRITEOAM_MAX_UNK6_3 1
#define SPRITEOAM_SHIFT_UNK6_3 3
#define SPRITEOAM_MASK_UNK6_3 (SPRITEOAM_MAX_UNK6_3 << SPRITEOAM_SHIFT_UNK6_3) // ~ 0xFFF7
*/
// Seems to be the "working" Y coord. Gets copied to attrib1's Y coord in `AddSprite()`.
// kermalis is too lazy to rename it atm since we're still figuring things out
#define SPRITEOAM_MAX_UNK6_4 0xFFF
#define SPRITEOAM_SHIFT_UNK6_4 4
#define SPRITEOAM_MASK_UNK6_4 (SPRITEOAM_MAX_UNK6_4 << SPRITEOAM_SHIFT_UNK6_4) // ~ 0xF

View File

@@ -0,0 +1,293 @@
#ifndef GUARD_SPRITE_OAM_TEMP_H
#define GUARD_SPRITE_OAM_TEMP_H
#include "sprite_oam.h"
// This file is here for temporary decomp notes about SpriteOAM. It can be deleted later when we figure it out.
// SpriteOAM initialization is handled by inlines. Potentially has inlines for other scenarios [for example: AddSprite()]
// There is lots of testing done and evidence that it most likely is not handled by macros.
// Some funcs (such as sub_8039174) can be fakematched with "{} while(0);" contexts and a temp var. Note that it's not a "do {} while(0)" but just a "{} while(0)".
// However, that does not work for most funcs, and does not produce some of the register preloading we get with inlines.
// Also, the inlines I (kermalis) have tested with DO produce the behavior we see in all of the funcs. It just doesn't match 100% yet.
// Most of the special work seems to be done on the first two u16 of SpriteOAM.
// They are usually loaded/stored separately from the second half of the struct.
// There doesn't seem to be a logical reason for SpriteOAM to be split into two substructs, but the evidence points to it.
// AddSprite() still hasn't been matched (I'm writing this Dec 4 2024), because it suggests SpriteOAM is actually two separate substructs.
// "volatile u32/u16" was the first thing we tried, but it produces horrible asm and doesn't make sense for Chunsoft to have used it in this context.
// The main breakthrough came from producing 99% similar asm through attrib1/attrib2 being a substruct.
// Proposed struct definition:
typedef struct SpriteOAM2_Sub1
{
u16 attrib1;
u16 attrib2;
} SpriteOAM2_Sub1;
typedef struct SpriteOAM2_Sub2
{
u16 attrib3;
u16 unk6;
} SpriteOAM2_Sub2;
typedef struct SpriteOAM2
{
SpriteOAM2_Sub1 unk0;
SpriteOAM2_Sub2 unk2;
} SpriteOAM2;
// (It's called SpriteOAM2 temporarily to avoid conflicts with the current one)
// There seem to be 3 ways of handling SpriteOAM that I have found so far.
// #1 - When a SpriteOAM is initialized on the stack, certain inlines set its fields. This produces heavily inefficient asm but that's what they did.
// #2 - When a SpriteOAM is initialized from ram, it uses different inlines that produce way better asm. They're still known to be inlines because of the register preloading.
// #3 - Sometimes neither of the above 2's inlines are used for attrib1. It appears to be a third set of inlines (didn't attempt yet, feel free to).
// For type #3, way more testing needs to be done.
// The thing is, in all 3 scenarios, an identical order of operations is usually applied.
// The asm being nearly identical each time also makes it unlikely to be done manually without some macros or inlines.
// And this is why we haven't "real" matched many (any?) SpriteOAM funcs in the years this decomp has existed.
// Here are some helpful decomp.me links with examples.
// Type #1 - Main func (sub_8013F84) - Initializes a SpriteOAM on the stack [https://decomp.me/scratch/KYLmA]
// Type #2 - Complex fast init func (sub_8052FB8) - Loop func that initializes many SpriteOAM from ram [https://decomp.me/scratch/RX3cp]
// Type #3 - Fast init func (sub_8039174) - Initializes a SpriteOAM from ram [https://decomp.me/scratch/4qs37]
// Type #1 attrib1 inlines:
static inline void SetAttrib1(SpriteOAM2_Sub1 *sub, u32 attrib1)
{
SpriteOAM2_Sub1 nSub = *sub;
nSub.attrib1 = attrib1;
*sub = nSub;
// The only issue with this is the fact that the "ldr" happens before the "0xFFFF0000" mask is loaded.
// The only way we have gotten the mask to load before the "ldr" is with something like this:
// *sub = (SpriteOAM2_Sub){ value, sub->attrib2 };
// However, that produces bad asm. So the solution is to somehow make it a one liner like the above, while still loading from the entire "*sub" somehow.
// This func can also be changed to simply return a SpriteOAM2_Sub1 instead of replacing the value.
// BTW, making a "{} while(0)" macro for this actually folds the constants together unlike this... which is more efficient asm. Not what we want for matching lol.
// Matching this will be a huge deal!
}
static inline void SetAffineMode1(SpriteOAM2 *s, u32 mode1)
{
u32 valueM = mode1 & SPRITEOAM_MAX_AFFINEMODE1;
u32 value = valueM << SPRITEOAM_SHIFT_AFFINEMODE1;
SetAttrib1(&s->unk0, s->unk0.attrib1 & (u16)~SPRITEOAM_MASK_AFFINEMODE1);
SetAttrib1(&s->unk0, s->unk0.attrib1 | value);
}
static inline void SetAffineMode2(SpriteOAM2 *s, u32 mode2)
{
u32 valueM = mode2 & SPRITEOAM_MAX_AFFINEMODE2;
u32 value = valueM << SPRITEOAM_SHIFT_AFFINEMODE2;
SetAttrib1(&s->unk0, s->unk0.attrib1 & (u16)~SPRITEOAM_MASK_AFFINEMODE2);
SetAttrib1(&s->unk0, s->unk0.attrib1 | value);
}
static inline void SetObjMode(SpriteOAM2 *s, u32 mode)
{
u32 valueM = mode & SPRITEOAM_MAX_OBJMODE;
u32 value = valueM << SPRITEOAM_SHIFT_OBJMODE;
SetAttrib1(&s->unk0, s->unk0.attrib1 & (u16)~SPRITEOAM_MASK_OBJMODE);
SetAttrib1(&s->unk0, s->unk0.attrib1 | value);
}
static inline void SetMosaic(SpriteOAM2 *s, u32 mosaic)
{
u32 valueM = mosaic & SPRITEOAM_MAX_MOSAIC;
u32 value = valueM << SPRITEOAM_SHIFT_MOSAIC;
SetAttrib1(&s->unk0, s->unk0.attrib1 & (u16)~SPRITEOAM_MASK_MOSAIC);
SetAttrib1(&s->unk0, s->unk0.attrib1 | value);
}
static inline void SetBPP(SpriteOAM2 *s, u32 bpp)
{
u32 valueM = bpp & SPRITEOAM_MAX_BPP;
u32 value = valueM << SPRITEOAM_SHIFT_BPP;
SetAttrib1(&s->unk0, s->unk0.attrib1 & (u16)~SPRITEOAM_MASK_BPP);
SetAttrib1(&s->unk0, s->unk0.attrib1 | value);
}
static inline void SetShape(SpriteOAM2 *s, u32 shape)
{
u32 valueM = shape & SPRITEOAM_MAX_SHAPE;
u32 value = valueM << SPRITEOAM_SHIFT_SHAPE;
SetAttrib1(&s->unk0, s->unk0.attrib1 & (u16)~SPRITEOAM_MASK_SHAPE);
SetAttrib1(&s->unk0, s->unk0.attrib1 | value);
}
// Type #2 attrib1 inlines:
static inline void FastSetAffineMode1(SpriteOAM2 *s, u32 mode1)
{
u32 value;
value = mode1 & SPRITEOAM_MAX_AFFINEMODE1;
s->unk0.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
s->unk0.attrib1 |= value << SPRITEOAM_SHIFT_AFFINEMODE1;
}
static inline void FastSetAffineMode2(SpriteOAM2 *s, u32 mode2)
{
u32 value;
value = mode2 & SPRITEOAM_MAX_AFFINEMODE2;
s->unk0.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
s->unk0.attrib1 |= value << SPRITEOAM_SHIFT_AFFINEMODE2;
}
static inline void FastSetObjMode(SpriteOAM2 *s, u32 mode)
{
u32 value;
value = mode & SPRITEOAM_MAX_OBJMODE;
s->unk0.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
s->unk0.attrib1 |= value << SPRITEOAM_SHIFT_OBJMODE;
}
static inline void FastSetMosaic(SpriteOAM2 *s, u32 mosaic)
{
u32 value;
value = mosaic & SPRITEOAM_MAX_MOSAIC;
s->unk0.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
s->unk0.attrib1 |= value << SPRITEOAM_SHIFT_MOSAIC;
}
static inline void FastSetBPP(SpriteOAM2 *s, u32 bpp)
{
u32 value;
value = bpp & SPRITEOAM_MAX_BPP;
s->unk0.attrib1 &= ~SPRITEOAM_MASK_BPP;
s->unk0.attrib1 |= value << SPRITEOAM_SHIFT_BPP;
}
static inline void FastSetShape(SpriteOAM2 *s, u32 shape)
{
u32 value;
value = shape & SPRITEOAM_MAX_SHAPE;
s->unk0.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
s->unk0.attrib1 |= value << SPRITEOAM_SHIFT_SHAPE;
}
// attrib2 inlines:
// These pretty much match in every scenario.
// Trying to macro-ify or make a sub-inline will remove some register preloading we rely on.
static inline void SetX(SpriteOAM2 *s, u32 x)
{
u32 value;
u32 valueS;
value = x & SPRITEOAM_MAX_X;
valueS = value << SPRITEOAM_SHIFT_X;
s->unk0.attrib2 &= ~SPRITEOAM_MASK_X;
s->unk0.attrib2 |= valueS;
}
static inline void SetMatrixNum(SpriteOAM2 *s, u32 matNum)
{
u32 value;
u32 valueS;
value = matNum & SPRITEOAM_MAX_MATRIXNUM;
valueS = value << SPRITEOAM_SHIFT_MATRIXNUM;
s->unk0.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
s->unk0.attrib2 |= valueS;
}
static inline void SetSize(SpriteOAM2 *s, u32 size)
{
u32 value;
u32 valueS;
value = size & SPRITEOAM_MAX_SIZE;
valueS = value << SPRITEOAM_SHIFT_SIZE;
s->unk0.attrib2 &= ~SPRITEOAM_MASK_SIZE;
s->unk0.attrib2 |= valueS;
}
// attrib3 inline:
// For some reason this one is all combined. Also matches pretty much every time.
// It's possible the attrib1 ones are also combined like this, but not the attrib2 ones since they're called out of order or not at all.
// And just like the attrib2 inlines, attempting to macro or inline further results in removed preloading.
static inline void SetAttrib3(SpriteOAM2 *s, u32 tileNum, u32 prio, u32 palNum)
{
u32 value;
u32 valueS;
value = tileNum & SPRITEOAM_MAX_TILENUM;
valueS = value << SPRITEOAM_SHIFT_TILENUM;
s->unk2.attrib3 &= ~SPRITEOAM_MASK_TILENUM;
s->unk2.attrib3 |= valueS;
value = prio & SPRITEOAM_MAX_PRIORITY;
valueS = value << SPRITEOAM_SHIFT_PRIORITY;
s->unk2.attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
s->unk2.attrib3 |= valueS;
value = palNum & SPRITEOAM_MAX_PALETTENUM;
valueS = value << SPRITEOAM_SHIFT_PALETTENUM;
s->unk2.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
s->unk2.attrib3 |= valueS;
}
// unk6 inlines:
// Basically same situation as attrib2 inlines. Can't be altered past this or combined, and matches like this.
static inline void SetUnk6_0(SpriteOAM2 *s, u32 part0)
{
u32 value;
u32 valueS;
value = part0 & SPRITEOAM_MAX_UNK6_0;
valueS = value << SPRITEOAM_SHIFT_UNK6_0;
s->unk2.unk6 &= ~SPRITEOAM_MASK_UNK6_0;
s->unk2.unk6 |= valueS;
}
static inline void SetUnk6_1(SpriteOAM2 *s, u32 part1)
{
u32 value;
u32 valueS;
value = part1 & SPRITEOAM_MAX_UNK6_1;
valueS = value << SPRITEOAM_SHIFT_UNK6_1;
s->unk2.unk6 &= ~SPRITEOAM_MASK_UNK6_1;
s->unk2.unk6 |= valueS;
}
static inline void SetUnk6_2(SpriteOAM2 *s, u32 part2)
{
u32 value;
u32 valueS;
value = part2 & SPRITEOAM_MAX_UNK6_2;
valueS = value << SPRITEOAM_SHIFT_UNK6_2;
s->unk2.unk6 &= ~SPRITEOAM_MASK_UNK6_2;
s->unk2.unk6 |= valueS;
}
// Not seen yet
/*static inline void SetUnk6_3(SpriteOAM2 *s, u32 part3)
{
u32 value;
u32 valueS;
value = part3 & SPRITEOAM_MAX_UNK6_3;
valueS = value << SPRITEOAM_SHIFT_UNK6_3;
s->unk2.unk6 &= ~SPRITEOAM_MASK_UNK6_3;
s->unk2.unk6 |= valueS;
}*/
static inline void SetUnk6_4(SpriteOAM2 *s, u32 part4)
{
u32 value;
u32 valueS;
value = part4 & SPRITEOAM_MAX_UNK6_4;
valueS = value << SPRITEOAM_SHIFT_UNK6_4;
s->unk2.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
s->unk2.unk6 |= valueS;
}
#endif // GUARD_SPRITE_OAM_TEMP_H

View File

@@ -44,7 +44,6 @@ typedef struct UnkTextStruct2_sub
} unk0;
} UnkTextStruct2_sub;
typedef struct UnkTextStruct2_sub2
{
u8 f0;

View File

@@ -177,8 +177,6 @@ SECTIONS {
src/main_menu2.o(.text);
src/trade_items_menu.o(.text);
src/other_menus1.o(.text);
asm/other_menus1.o(.text);
asm/other_menus2.o(.text);
src/other_menus2.o(.text);
src/adventure_log_menu.o(.text);
src/unk_menu_203B360.o(.text);

View File

@@ -46,7 +46,7 @@ void sub_800DAC0(u32 fileSelection)
sub_800DB7C();
}
gUnknown_203B0CC = MemoryAlloc(sizeof(struct unkStruct_203B0CC), 0xb);
MemoryClear8((u8 *)gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC));
MemoryClear8(gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC));
gUnknown_203B0CC->fileSelection = fileSelection;
for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++)
{

View File

@@ -37,7 +37,7 @@ void sub_800ED38(s32 r0)
if(gUnknown_203B0D0 == 0)
{
gUnknown_203B0D0 = MemoryAlloc(sizeof(struct unkStruct_203B0D0), 0xB);
MemoryClear8((u8 *)gUnknown_203B0D0, sizeof(struct unkStruct_203B0D0));
MemoryClear8(gUnknown_203B0D0, sizeof(struct unkStruct_203B0D0));
}
gUnknown_203B0D0->unk0 = r0;
}

View File

@@ -46,14 +46,14 @@ void DeletePokemonDungeonSprite(s32 id)
{
DungeonPokemonSprite *dSprite;
if(gDungeonPokemonSprites == NULL)
if (gDungeonPokemonSprites == NULL)
return;
dSprite = GetDungeonPokemonSprite(id);
if(dSprite == NULL)
if (dSprite == NULL)
return;
MemoryClear8((u8 *)dSprite, sizeof(DungeonPokemonSprite));
MemoryClear8(dSprite, sizeof(DungeonPokemonSprite));
}
void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos,

View File

@@ -1,6 +1,6 @@
#include "global.h"
#include "code_8012A18_1.h"
#include "sprite_oam.h"
#include "structs/sprite_oam.h"
#include "text_util.h"
#include "text.h"

View File

@@ -410,9 +410,9 @@ void sub_803EDF0(void)
gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
gUnknown_202EDDC.attrib3 |= palNum;
gUnknown_202EDDC.unk6 &= 0xFFFE;
gUnknown_202EDDC.unk6 &= 0xFFFD;
gUnknown_202EDDC.unk6 &= 0xFFFB;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_0;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_1;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_2;
AddSprite(&gUnknown_202EDDC, 0x100, NULL, NULL);
}

View File

@@ -625,9 +625,9 @@ struct UnkStruct_8106AE8
extern const struct UnkStruct_8106AE8 gUnknown_8106AE8[];
#ifdef NONMATCHING
// Not even close in terms of matching, but functionally equivalent. Sprite OAM memes break the stack here.
// Sprite OAM memes. https://decomp.me/scratch/Jm4oC
// Creates arrow sprites which are used when in rotate or diagonal modes.
static void TryCreateModeArrows(Entity *leader) // https://decomp.me/scratch/gFX1S
static void TryCreateModeArrows(Entity *leader)
{
UnkDungeonGlobal_unk181E8_sub *unkPtr = &gDungeon->unk181e8;

View File

@@ -2310,7 +2310,7 @@ void sub_806C51C(Entity *entity)
finalYSprite = ySprite + spriteStructPtr->y;
finalYSprite &= SPRITEOAM_MAX_UNK6_4;
finalYSprite <<= SPRITEOAM_SHIFT_UNK6_4;
spriteStructPtr->sprite.unk6 &= 0xF;
spriteStructPtr->sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
spriteStructPtr->sprite.unk6 |= finalYSprite;
AddSprite(&spriteStructPtr->sprite, 0, NULL, NULL);

View File

@@ -19,7 +19,7 @@ bool8 sub_8083568(s32 inX, s32 inY, u8 index)
finalYSprite = y + gUnknown_202ED28[0][index].y;
finalYSprite &= SPRITEOAM_MAX_UNK6_4;
finalYSprite <<= SPRITEOAM_SHIFT_UNK6_4;
gUnknown_202ED28[0][index].sprite.unk6 &= 0xF;
gUnknown_202ED28[0][index].sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
gUnknown_202ED28[0][index].sprite.unk6 |= finalYSprite;
AddSprite(&gUnknown_202ED28[0][index].sprite, 0, NULL, NULL);

View File

@@ -60,8 +60,8 @@ void sub_8095118(void)
s32 index;
unkStruct_203B480 *unused;
MemoryFill8((u8*)gUnknown_203B480,0, 0x20 * sizeof(unkStruct_203B480));
MemoryFill8((u8*)gUnknown_203B484,0, sizeof(unkStruct_203B484));
MemoryFill8(gUnknown_203B480, 0, 0x20 * sizeof(unkStruct_203B480));
MemoryFill8(gUnknown_203B484, 0, sizeof(unkStruct_203B484));
for(index = 0; index < 0x20; index++){
// NOTE: we use a temp variable here to force the match
@@ -138,7 +138,7 @@ void DeleteMailAtIndex(u8 index)
{
unkStruct_203B480 *unused;
MemoryFill8((u8*)&gUnknown_203B480[index],0,sizeof(unkStruct_203B480));
MemoryFill8(&gUnknown_203B480[index], 0, sizeof(unkStruct_203B480));
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].mailType = 0;
unused = &gUnknown_203B480[index];

View File

@@ -62,7 +62,7 @@ void sub_80993E4(void) {
*/
void sub_8099648(void);
NAKED void sub_80993F0(void)
UNUSED static NAKED void sub_80993F0(void)
{
asm_unified(" .text\n"
" push {r4-r7,lr}\n"

View File

@@ -245,7 +245,7 @@ void sub_809D220(s32 r0, s32 r1, s32 r2)
gUnknown_20399E8.unk4 = r1;
}
bool32 sub_809D234(void)
bool8 sub_809D234(void)
{
return gUnknown_20399E8.unk8 != 0;
}
@@ -392,7 +392,7 @@ extern s16 gUnknown_2039A34;
extern u8 gAnyScriptLocked;
extern u8 gScriptLocks[];
extern u8 gScriptLockConds[];
extern u32 gUnlockBranchLabels[];
extern s32 gUnlockBranchLabels[];
void sub_809D4B0(void)
{

View File

@@ -6,7 +6,7 @@ static const UnkTextStruct2 sUnknown_80E653C = {
0, 0,
NULL
};
const UnkTextStruct2 sUnknown_80E6554 = { // TODO: MAKE STATIC WHEN other_menus1.s IS DED
static const UnkTextStruct2 sUnknown_80E6554 = {
0, 0, 0, 0,
3,
3, 8,
@@ -15,35 +15,35 @@ const UnkTextStruct2 sUnknown_80E6554 = { // TODO: MAKE STATIC WHEN other_menus1
NULL
};
const MenuItem sUnknown_80E656C[] = { // TODO: MAKE STATIC WHEN other_menus1.s IS DED
static const MenuItem sUnknown_80E656C[] = {
{_("{CENTER_ALIGN}{COLOR RED}Caution!{RESET} "), 5},
{_("{CENTER_ALIGN}Item transmitting!"), 5},
{_("{CENTER_ALIGN}Don't turn the power off!"), 5},
{NULL, 3},
};
const MenuItem sUnknown_80E65D8[] = { // TODO: MAKE STATIC WHEN other_menus1.s IS DED
static const MenuItem sUnknown_80E65D8[] = {
{_("{CENTER_ALIGN}{COLOR RED}Caution!{RESET} "), 5},
{_("{CENTER_ALIGN}Thank-You Mail in transmission!"), 5},
{_("{CENTER_ALIGN}Don't turn the power off!"), 5},
{NULL, 3},
};
const MenuItem sUnknown_80E661C[] = { // TODO: MAKE STATIC WHEN other_menus1.s IS DED
static const MenuItem sUnknown_80E661C[] = {
{_("{CENTER_ALIGN}{COLOR RED}Caution!{RESET} "), 5},
{_("{CENTER_ALIGN}A-OK Mail in transmission!"), 5},
{_("{CENTER_ALIGN}Don't turn the power off!"), 5},
{NULL, 3},
};
const MenuItem sUnknown_80E665C[] = { // TODO: MAKE STATIC WHEN other_menus1.s IS DED
static const MenuItem sUnknown_80E665C[] = {
{_("{CENTER_ALIGN}{COLOR RED}Caution!{RESET} "), 5},
{_("{CENTER_ALIGN}Thank-You Mail in transmission!"), 5},
{_("{CENTER_ALIGN}Don't turn the power off!"), 5},
{NULL, 3},
};
const MenuItem sUnknown_80E667C[] = { // TODO: MAKE STATIC WHEN other_menus1.s IS DED
static const MenuItem sUnknown_80E667C[] = {
{_("{CENTER_ALIGN}{COLOR RED}Caution!{RESET} "), 5},
{_("{CENTER_ALIGN}Wonder Mail in transmission!"), 5},
{_("{CENTER_ALIGN}Don't turn the power off!"), 5},

View File

@@ -1,7 +1,6 @@
ALIGNED(4) const u8 gUnknown_80E6E50[] = _("CHUNSOFT"); // TODO: MAKE STATIC WHEN other_menus2.s IS DED
ALIGNED(4) static const u8 sChunsoft[] = _("CHUNSOFT");
// TODO: These belongs to files after
ALIGNED(4) static const u8 fill1[] = _("pksdir0");
ALIGNED(4) static const u8 fill2[] = _("pksdir0");
ALIGNED(4) static const u8 fill3[] = _("pksdir0");
ALIGNED(4) static const u8 fill4[] = _("pksdir0");
// TODO: These belong to files after. Two of the .c files were stripped away? They were before unk_menu_203B360.c
ALIGNED(4) static const u8 fill1[] = _("pksdir0"); // adventure_log_menu.c
ALIGNED(4) static const u8 fill2[] = _("pksdir0"); // ?.c
ALIGNED(4) static const u8 fill3[] = _("pksdir0"); // ?.c

View File

@@ -43,7 +43,7 @@ void CreateDebugMenu(void)
if (sDebugMenu == NULL) {
sDebugMenu = MemoryAlloc(sizeof(struct DebugMenu), 8);
MemoryFill8((u8 *)sDebugMenu, 0, sizeof(struct DebugMenu));
MemoryFill8(sDebugMenu, 0, sizeof(struct DebugMenu));
}
for (i = 0; i < 4; i++)

View File

@@ -794,7 +794,7 @@ void sub_8052FB8(const u8 *str)
sUnknown_202F1F0.attrib3 |= palNum;
unk6 = 0x78 << SPRITEOAM_SHIFT_UNK6_4;
sUnknown_202F1F0.unk6 &= mask;
sUnknown_202F1F0.unk6 &= mask; // ~SPRITEOAM_MASK_UNK6_4
sUnknown_202F1F0.unk6 |= unk6;
sUnknown_202F1F0.attrib2 &= ~SPRITEOAM_MASK_X;
@@ -1101,13 +1101,13 @@ static void CreateMessageLogArrow(bool8 upArrow, s32 y)
sMessageLogArrowSpriteOAM.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
sMessageLogArrowSpriteOAM.attrib2 |= matrixNum;
mask = 0xF;
yMask = 0xFFF;
mask = 0xF; // ~SPRITEOAM_MASK_UNK6_4
yMask = SPRITEOAM_MAX_UNK6_4;
ySprite = (yMask & (unkStr->unk2 * 8 + y)) << 4;
sMessageLogArrowSpriteOAM.unk6 &= mask;
sMessageLogArrowSpriteOAM.unk6 |= ySprite;
xSprite = 0x1FF & ((unkStr->unk0 * 8) + 92);
xSprite = SPRITEOAM_MAX_X & ((unkStr->unk0 * 8) + 92);
sMessageLogArrowSpriteOAM.attrib2 &= ~SPRITEOAM_MASK_X;
sMessageLogArrowSpriteOAM.attrib2 |= xSprite;

View File

@@ -305,7 +305,6 @@ extern void sub_8031E10(void);
extern u8 sub_800D588(void);
extern u32 sub_8023CE8(void);
extern bool8 sub_8031D70(u32 mailIndex, s32);
extern s32 sub_8037B28(u32);
extern u32 GetDungeonTeamRankPts(DungeonLocation *, u32);
extern void sprintfStatic(char *buffer, const char *text, ...);
@@ -318,7 +317,7 @@ u32 CreateFriendRescueMenu(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
gUnknown_203B33C = MemoryAlloc(sizeof(WonderMailStruct_203B33C), 8);
MemoryFill8((u8 *) gUnknown_203B33C, 0, sizeof(WonderMailStruct_203B33C));
MemoryFill8(gUnknown_203B33C, 0, sizeof(WonderMailStruct_203B33C));
gUnknown_203B33C->unk530 = 0;
gUnknown_203B33C->unk218 = -1;
gUnknown_203B33C->speciesNum = -1;
@@ -953,13 +952,13 @@ void sub_8032828(void)
#endif //NONMATCHING
switch (gUnknown_203B33C->unk40) {
case 0x3:
MemoryFill8((u8*)&gUnknown_203B33C->unk48, 0, sizeof(unkStruct_203B480));
MemoryFill8((u8*)&gUnknown_203B33C->unk78, 0, sizeof(unkStruct_203B480));
MemoryFill8(&gUnknown_203B33C->unk48, 0, sizeof(unkStruct_203B480));
MemoryFill8(&gUnknown_203B33C->unk78, 0, sizeof(unkStruct_203B480));
gUnknown_203B33C->status = sub_8037D64(gUnknown_203B33C->unk40, &gUnknown_203B33C->unk48, &gUnknown_203B33C->unk78);
break;
case 0x2:
MemoryFill8((u8*)&gUnknown_203B33C->unk48, 0, sizeof(unkStruct_203B480));
MemoryFill8((u8*)&gUnknown_203B33C->unk78, 0, sizeof(unkStruct_203B480));
MemoryFill8(&gUnknown_203B33C->unk48, 0, sizeof(unkStruct_203B480));
MemoryFill8(&gUnknown_203B33C->unk78, 0, sizeof(unkStruct_203B480));
#ifdef NONMATCHING
// Regswaps
gUnknown_203B33C->unk48 = *GetMailatIndex(gUnknown_203B33C->unk218);
@@ -972,13 +971,13 @@ void sub_8032828(void)
gUnknown_203B33C->status = sub_8037D64(gUnknown_203B33C->unk40, &gUnknown_203B33C->unk48, &gUnknown_203B33C->unk78);
break;
case 0x5:
MemoryFill8((u8*)&gUnknown_203B33C->unkA8, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8((u8*)&gUnknown_203B33C->unk130, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8(&gUnknown_203B33C->unkA8, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8(&gUnknown_203B33C->unk130, 0, sizeof(WonderMailStruct_203B2C0_sub));
gUnknown_203B33C->status = sub_8037D64(gUnknown_203B33C->unk40, &gUnknown_203B33C->unkA8, &gUnknown_203B33C->unk130);
break;
case 0x4:
MemoryFill8((u8*)&gUnknown_203B33C->unkA8, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8((u8*)&gUnknown_203B33C->unk130, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8(&gUnknown_203B33C->unkA8, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8(&gUnknown_203B33C->unk130, 0, sizeof(WonderMailStruct_203B2C0_sub));
gUnknown_203B33C->unkA8.pokemon.speciesNum = 0;
gUnknown_203B33C->unk130.pokemon.speciesNum = 0;
gUnknown_203B33C->unkA8.mail = *GetMailatIndex(gUnknown_203B33C->unk218);
@@ -1092,13 +1091,13 @@ void sub_8032828(void)
if (gUnknown_203B33C->status == 0) {
switch (gUnknown_203B33C->unk40) {
case 0x6:
MemoryFill8((u8*)&gUnknown_203B33C->unk1B8, 0, 0x30);
MemoryFill8(&gUnknown_203B33C->unk1B8, 0, 0x30);
gUnknown_203B33C->unk1B8 = *GetMailatIndex(gUnknown_203B33C->unk218);
gUnknown_203B33C->status = sub_8037D64(gUnknown_203B33C->unk40, &gUnknown_203B33C->unk1B8, &gUnknown_203B33C->unk1E8);
break;
case 0x7:
MemoryFill8((u8*)&gUnknown_203B33C->unk1B8, 0, 0x30);
MemoryFill8((u8*)&gUnknown_203B33C->unk1E8, 0, 0x30);
MemoryFill8(&gUnknown_203B33C->unk1B8, 0, 0x30);
MemoryFill8(&gUnknown_203B33C->unk1E8, 0, 0x30);
gUnknown_203B33C->status = sub_8037D64(gUnknown_203B33C->unk40, &gUnknown_203B33C->unk1B8, &gUnknown_203B33C->unk1E8);
break;
}
@@ -1653,7 +1652,7 @@ void sub_8033DBC(void)
unkStruct_203B480 *mail2;
return_var = sub_80154F0();
MemoryFill8((u8 *)&mail, 0, sizeof(unkStruct_203B480));
MemoryFill8(&mail, 0, sizeof(unkStruct_203B480));
switch(return_var)
{
case 3:
@@ -1703,7 +1702,7 @@ void sub_8033DBC(void)
sub_80951FC(&mail);
mail2 = GetMailatIndex(GetMailIndex(1, mail.unk10.unk10));
mail2->mailType = 7;
MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(unkStruct_203B484));
MemoryFill8(gUnknown_203B484, 0, sizeof(unkStruct_203B484));
SetFriendRescueMenuState(0x40);
break;
case 24:
@@ -2268,7 +2267,7 @@ void sub_8034848(void)
s32 temp;
if(sub_80144A4(&temp) == 0)
{
MemoryFill8((u8 *)&gUnknown_203B33C->item, 0 , sizeof(Item));
MemoryFill8(&gUnknown_203B33C->item, 0 , sizeof(Item));
gUnknown_203B33C->item.id = ITEM_NOTHING;
gUnknown_203B33C->item.quantity = 1;
gUnknown_203B33C->item.flags = 0;
@@ -2298,7 +2297,7 @@ void sub_80348C4(void)
s32 temp;
if(sub_80144A4(&temp) == 0)
{
MemoryFill8((u8 *)&gUnknown_203B33C->item, 0 , sizeof(Item));
MemoryFill8(&gUnknown_203B33C->item, 0 , sizeof(Item));
gUnknown_203B33C->item.id = ITEM_NOTHING;
gUnknown_203B33C->item.quantity = 1;
gUnknown_203B33C->item.flags = 0;
@@ -2549,7 +2548,7 @@ void sub_8034D74(void)
unkStruct_203B480 *mail2;
return_var = sub_80154F0();
MemoryFill8((u8 *)&mail, 0, sizeof(unkStruct_203B480));
MemoryFill8(&mail, 0, sizeof(unkStruct_203B480));
switch(return_var)
{
case 3:

View File

@@ -4,7 +4,7 @@
extern u8 gAnyScriptLocked;
extern u8 gScriptLocks[];
extern u32 gUnlockBranchLabels[];
extern s32 gUnlockBranchLabels[];
extern u8 gScriptLockConds[];
extern const DebugLocation gUnknown_8116588;
@@ -351,7 +351,7 @@ void GroundScriptLock(s16 index, s32 r1)
gAnyScriptLocked = 1;
}
bool8 GroundScriptLockCond(Action *param_1, s16 index, u32 param_3)
bool8 GroundScriptLockCond(Action *param_1, s16 index, s32 param_3)
{
s32 index_s32;

View File

@@ -16,6 +16,13 @@
#include "ground_main.h"
#include "code_80A26CC.h"
// Size: unknown
typedef struct UnkAction3D
{
u8 fill0[0x4C];
u8 unk4C[10];
} UnkAction3D;
void GroundMap_Select(s16);
void GroundMap_SelectDungeon(s16, DungeonLocation*, u8);
void GroundMap_ExecuteEnter(s16);
@@ -44,9 +51,9 @@ s16 GroundEffect_Add(s16 id, GroundEffectData*, s16 group, s8 sector);
// Beware of the declarations without specified arguments, returning u32 or s32, these were quickly hacked in to get the code to compile and link
// The return values are almost certainly NOT correct and will need to be rechecked when moving to header files
char sub_8002984(s32, u8);
u32 VecDirection8Radial();
u32 SizedDeltaDirection4();
u8 SizedDeltaDirection8(PixelPos*, PixelPos*, PixelPos*, PixelPos*);
s8 VecDirection8Radial(PixelPos*);
s8 SizedDeltaDirection4(PixelPos*, PixelPos*, PixelPos*, PixelPos*);
s8 SizedDeltaDirection8(PixelPos*, PixelPos*, PixelPos*, PixelPos*);
bool8 sub_8021700(s32);
bool8 sub_802FCF0(void);
@@ -59,7 +66,7 @@ void sub_80975A8(s16, bool8);
void sub_8098D1C(s32, u32, s32);
void sub_8098E18(s32, s32);
u32 sub_80999E8();
u32 sub_80999FC();
void sub_80999FC(s32);
u32 sub_8099A10();
u32 sub_8099A34();
u32 sub_8099A48();
@@ -104,7 +111,7 @@ void sub_80A87AC(s32, s32);
void sub_80A8BD8(s16, s32*);
u32 sub_80A8C2C();
u32 sub_80A8C98();
char *sub_80A8D54(s16);
UnkAction3D *sub_80A8D54(s16);
s16 sub_80A8FD8(s32, PixelPos*);
s16 sub_80A8F9C(s32, PixelPos*);
u32 sub_80A9050();
@@ -118,7 +125,7 @@ void DeleteGroundLives(void);
void DeleteGroundObjects(void);
void DeleteGroundEffects(void);
u32 sub_80A14E8(u32, u8, u32, u32);
s32 sub_80A14E8(Action *, u8, s32, s32);
s16 HandleAction(void *, DebugLocation *);
extern int gFormatArgs[10];
@@ -128,7 +135,7 @@ extern s16 gUnknown_2039A32;
extern s16 gUnknown_2039A34;
extern struct { const char *unk0; s32 unk4; } gChoices[9];
extern char gUnknown_2039D98[12];
extern u8 gUnknown_2039D98[12];
extern int gNumChoices;
extern PixelPos gUnknown_81164DC;
@@ -546,8 +553,8 @@ s32 ExecuteScriptCommand(Action *action) {
action->callbacks->getSize(action->parentObject, &pos2);
sub_80A8FD8(ret, &pos3);
sub_80A8F9C(ret, &pos4);
if ((tmp = (s8)SizedDeltaDirection8(&pos3, &pos4, &pos1, &pos2)) != -1 ||
(tmp = (s8)SizedDeltaDirection4(&pos1, &gUnknown_81164DC, &pos3, &gUnknown_81164DC)) != -1) {
if ((tmp = SizedDeltaDirection8(&pos3, &pos4, &pos1, &pos2)) != -1 ||
(tmp = SizedDeltaDirection4(&pos1, &gUnknown_81164DC, &pos3, &gUnknown_81164DC)) != -1) {
sub_80A9090(ret, tmp);
}
}
@@ -758,11 +765,11 @@ s32 ExecuteScriptCommand(Action *action) {
return 2;
}
case 0x3d: {
struct { u8 pad[0x4c]; u8 unk4C[10]; } *unk; // unknown struct
UnkAction3D *unk;
int i;
if ((s16)curCmd.arg1 != -1) {
unk = (void*)sub_80A8D54(curCmd.arg1);
if (unk) {
unk = sub_80A8D54(curCmd.arg1);
if (unk != NULL) {
for (i = 0; i < 10; i++) {
gUnknown_2039D98[i] = unk->unk4C[i];
}
@@ -1608,7 +1615,7 @@ s32 ExecuteScriptCommand(Action *action) {
GroundLink_GetPos((s16)curCmd.arg1, &pos2);
pos3.x = pos2.x - pos.x;
pos3.y = pos2.y - pos.y;
val = (s8)VecDirection8Radial(&pos3);
val = VecDirection8Radial(&pos3);
break;
}
case 0xc8: {
@@ -1619,9 +1626,9 @@ s32 ExecuteScriptCommand(Action *action) {
action->callbacks->getSize(action->parentObject, &pos2);
sub_80A8FD8(tmp, &pos3);
sub_80A8F9C(tmp, &pos4);
val = (s8)SizedDeltaDirection8(&pos1, &pos2, &pos3, &pos4);
val = SizedDeltaDirection8(&pos1, &pos2, &pos3, &pos4);
if (val == -1) {
val = (s8)SizedDeltaDirection4(&pos1, &gUnknown_81164DC, &pos3, &gUnknown_81164DC);
val = SizedDeltaDirection4(&pos1, &gUnknown_81164DC, &pos3, &gUnknown_81164DC);
}
} else {
val = -1;
@@ -1635,9 +1642,9 @@ s32 ExecuteScriptCommand(Action *action) {
action->callbacks->getHitboxCenter(action->parentObject, &pos1);
action->callbacks->getSize(action->parentObject, &pos2);
sub_80A8FD8(tmp, &pos3);
val = (s8)SizedDeltaDirection8(&pos1, &pos2, &pos3, &gUnknown_81164DC);
val = SizedDeltaDirection8(&pos1, &pos2, &pos3, &gUnknown_81164DC);
if (val == -1) {
val = (s8)SizedDeltaDirection4(&pos1, &gUnknown_81164DC, &pos3, &gUnknown_81164DC);
val = SizedDeltaDirection4(&pos1, &gUnknown_81164DC, &pos3, &gUnknown_81164DC);
}
} else {
val = -1;
@@ -1824,9 +1831,9 @@ s32 ExecuteScriptCommand(Action *action) {
}
}
UNUSED u32 sub_80A1440(u32 r0, u32 r1, u32 r2)
UNUSED u32 sub_80A1440(s32 r0, s32 r1, s32 r2)
{
return sub_80A14E8(0, r0, r1, r2);
return sub_80A14E8(NULL, r0, r1, r2);
}
UNUSED bool8 GroundScript_ExecuteTrigger(s16 r0)

View File

@@ -6,7 +6,6 @@
extern u8 gAnyScriptLocked;
extern u8 gScriptLocks[];
extern u32 gUnlockBranchLabels[];
extern u8 gScriptLockConds[];
extern u8 gUnknown_8116848[];

View File

@@ -154,8 +154,8 @@ void CreateLoadScreen(u32 currMenu)
int index;
if (gLoadScreen == NULL) {
gLoadScreen = MemoryAlloc(sizeof(struct LoadScreen),8);
MemoryFill8((u8 *)gLoadScreen,0,sizeof(struct LoadScreen));
gLoadScreen = MemoryAlloc(sizeof(struct LoadScreen), 8);
MemoryFill8(gLoadScreen, 0, sizeof(struct LoadScreen));
}
gLoadScreen->currMenu = currMenu;
for(index = 0; index < 4; index++){

View File

@@ -45,7 +45,7 @@ void InitMainMenu(void)
{
if (sMainMenu == NULL) {
sMainMenu = MemoryAlloc(sizeof(MainMenu1Work), 8);
MemoryFill8((u8 *)sMainMenu, 0, sizeof(MainMenu1Work));
MemoryFill8(sMainMenu, 0, sizeof(MainMenu1Work));
}
sMainMenu->currMenu = MENU_NO_SCREEN_CHANGE;
@@ -368,7 +368,7 @@ unkStruct_8035D94 *sub_8035D94(void)
void sub_8035DA0(void)
{
sMainMenu->unk30.itemIndex.itemIndex_u8 = ITEM_NOTHING;
sMainMenu->unk30.itemIndex = ITEM_NOTHING;
sMainMenu->unk30.numItems = 0;
}

View File

@@ -28,7 +28,7 @@ void DrawMainMenu(void)
if (sUnknown_203B34C == NULL) {
sUnknown_203B34C = MemoryAlloc(sizeof(MainMenu2Work), 8);
MemoryFill8((u8 *)sUnknown_203B34C, 0, sizeof(MainMenu2Work));
MemoryFill8(sUnknown_203B34C, 0, sizeof(MainMenu2Work));
}
for (i = 0; i < 4; i++)

View File

@@ -78,69 +78,69 @@ void InitHeap(void)
InitHeapInternal();
}
void MemoryClear8(u8 *dest, s32 size)
void MemoryClear8(void *dest, s32 size)
{
while (size > 0)
{
u8 *cur = dest;
while (size > 0) {
size -= 1;
*dest++ = 0;
*cur++ = 0;
}
}
void MemoryClear16(u16 *dest, s32 size)
{
while (size > 0)
{
while (size > 0) {
size -= 2;
*dest++ = 0;
}
}
void MemoryClear32(u32 *dest, s32 size)
UNUSED static void MemoryClear32(u32 *dest, s32 size)
{
CpuClear(dest, size);
}
void MemoryFill8(u8 *dest, u8 value, s32 size)
void MemoryFill8(void *dest, u8 value, s32 size)
{
while (size > 0)
{
u8 *cur = dest;
while (size > 0) {
size -= 1;
*dest++ = value;
*cur++ = value;
}
}
void MemoryFill16(u16 *dest, u16 value, s32 size)
{
while (size > 0)
{
while (size > 0) {
size -= 2;
*dest++ = value;
}
}
void MemoryFill32(u32 *dest, u32 value, s32 size)
UNUSED static void MemoryFill32(u32 *dest, u32 value, s32 size)
{
while (size > 0)
{
while (size > 0) {
size -= 4;
*dest++ = value;
}
}
void MemoryCopy8(u8 *dest, u8 *src, s32 size)
void MemoryCopy8(void *dest, void *src, s32 size)
{
while (size > 0)
{
u8 *dCur = dest;
u8 *sCur = src;
while (size > 0) {
size -= 1;
*dest++ = *src++;
*dCur++ = *sCur++;
}
}
void MemoryCopy16(u16 *dest, u16 *src, s32 size)
UNUSED static void MemoryCopy16(u16 *dest, u16 *src, s32 size)
{
while (size > 0)
{
while (size > 0) {
size -= 2;
*dest++ = *src++;
}
@@ -148,8 +148,7 @@ void MemoryCopy16(u16 *dest, u16 *src, s32 size)
void MemoryCopy32(u32 *dest, u32 *src, s32 size)
{
while (size > 0)
{
while (size > 0) {
size -= 4;
*dest++ = *src++;
}
@@ -211,32 +210,23 @@ static u32 xxx_memory_attr_related(u32 r0)
{
u32 temp;
u32 return_var;
if(r0 == 0)
{
return 0;
}
if((r0 & 8) != 0)
{
return 4;
}
temp = r0 & 7;
if(temp == 7)
{
return_var = 1;;
}
else if(temp == 1)
{
if (r0 == 0)
return 0;
if (r0 & 8)
return 4;
temp = r0 & 7; // Doesn't match with switch statement
if (temp == 7)
return_var = 1;
else if (temp == 1)
return_var = 2;
}
else if(temp == 3)
{
else if (temp == 3)
return_var = 3;
}
else
{
return_var = 5;
}
return return_var;
}
@@ -610,4 +600,4 @@ UNUSED static void nullsub_141(void)
UNUSED static void nullsub_142(void)
{
}
}

View File

@@ -615,7 +615,7 @@ void AddMenuCursorSprite_(MenuInputStruct *a0, u8 *a1)
UpdateMenuCursorSpriteCoords(a0);
if (!(a0->unk24 & 8)) {
#ifdef NONMATCHING // SpriteOAM memes https://decomp.me/scratch/T9aXl TODO: Match like sub_8039174 with multiple vars and while(0)
#ifdef NONMATCHING // SpriteOAM memes https://decomp.me/scratch/T9aXl
u32 tmp, tmp2;
#else
register u32 tmp asm("r0"), tmp2 asm("r1");
@@ -687,12 +687,11 @@ void nullsub_34(MenuInputStructSub *a0, s32 a1)
{
}
// Maybe DungeonPos
static void sub_801332C(DungeonPos *a0)
{
SpriteOAM sp = {};
SpriteOAM* ptr;
#ifdef NONMATCHING // SpriteOAM memes https://decomp.me/scratch/zeLxS TODO: Match like sub_8039174 with multiple vars and while(0)
#ifdef NONMATCHING // SpriteOAM memes https://decomp.me/scratch/zeLxS
u32 r0, r1, r2;
#else
register u32 r0 asm("r0");
@@ -761,7 +760,7 @@ static void sub_801332C(DungeonPos *a0)
static void sub_8013470(MenuInputStruct *a0)
{
SpriteOAM sp = {};
#ifdef NONMATCHING // SpriteOAM memes https://decomp.me/scratch/70Ieb TODO: Match like sub_8039174 with multiple vars and while(0)
#ifdef NONMATCHING // SpriteOAM memes https://decomp.me/scratch/70Ieb
SpriteOAM *ptr;
u32 r0, r1, r5;
#else

View File

@@ -708,21 +708,21 @@ bool8 IsMoveEnabled(s32 index, Move *moves)
bool8 sub_8093318(s32 param_1, Move *moves)
{
Move dest_struct[MAX_MON_MOVES * 2];
MemoryCopy8((void *)dest_struct, (void *)moves, sizeof(Move) * MAX_MON_MOVES * 2);
MemoryCopy8(dest_struct, moves, sizeof(dest_struct));
return TryLinkMovesAfter(param_1, dest_struct);
}
bool8 sub_809333C(s32 param_1, Move *moves)
{
Move dest_struct[MAX_MON_MOVES * 2];
MemoryCopy8((void *)dest_struct, (void *)moves, sizeof(Move) * MAX_MON_MOVES * 2);
MemoryCopy8(dest_struct, moves, sizeof(dest_struct));
return UnlinkMovesAfter(param_1, dest_struct);
}
UNUSED static bool8 sub_8093360(s32 param_1, Move *moves)
{
Move dest_struct[MAX_MON_MOVES * 2];
MemoryCopy8((void *)dest_struct, (void *)moves, sizeof(Move) * MAX_MON_MOVES * 2);
MemoryCopy8(dest_struct, moves, sizeof(dest_struct));
return sub_80933D8(param_1, dest_struct);
}

View File

@@ -18,22 +18,17 @@
#include "sprite.h"
#include "text.h"
// TODO: MAKE STATIC WHEN other_menus1.s IS DED
EWRAM_DATA_2 unkStruct_203B35C *sUnknown_203B35C = {0};
static EWRAM_DATA_2 unkStruct_203B35C *sUnknown_203B35C = {0};
#include "data/other_menus1.h"
// other_menus1.s
extern void sub_8037810(void);
extern void sub_8037900(void);
// other_menus2.s
extern s32 sub_8037B28(u32);
static void sub_80371B8(void);
static void sub_8037400(void);
static void sub_80376CC(void);
static void sub_8037748(void);
static u32 sub_8037798(void);
static void sub_8037810(void);
static void sub_8037900(void);
void sub_8036FDC(s32 param_1)
{
@@ -46,7 +41,7 @@ void sub_8036FDC(s32 param_1)
if (sUnknown_203B35C == NULL) {
sUnknown_203B35C = MemoryAlloc(sizeof(unkStruct_203B35C), 8);
MemoryFill8((u8 *)sUnknown_203B35C, 0, sizeof(unkStruct_203B35C));
MemoryFill8(sUnknown_203B35C, 0, sizeof(unkStruct_203B35C));
}
sUnknown_203B35C->unk0 = param_1;
@@ -55,7 +50,7 @@ void sub_8036FDC(s32 param_1)
for (index1 = 0; index1 < 2; index1++) {
sUnknown_203B35C->unk1BC[index1].numItems = 0;
sUnknown_203B35C->unk1BC[index1].itemIndex.itemIndex_u8 = ITEM_NOTHING;
sUnknown_203B35C->unk1BC[index1].itemIndex = ITEM_NOTHING;
}
for (index2 = 0; index2 < 4; index2++)
@@ -102,7 +97,7 @@ UNUSED static u32 sub_80370F0(void)
sub_80371B8();
break;
case 2:
if (sUnknown_203B35C->unk0 < 2 && sUnknown_203B35C->linkStatus == COMMS_GOOD && !sub_8037C10(FALSE))
if (sUnknown_203B35C->unk0 < 2 && sUnknown_203B35C->linkStatus == COMMS_GOOD && sub_8037C10(FALSE) == 0)
return 41; // TODO: what screen is this?
if (!sub_80130A8(&sUnknown_203B35C->unk1C[0]))
@@ -131,7 +126,7 @@ static void sub_80371B8(void)
sub_8037400();
if (sUnknown_203B35C->unk0 < 2 && sUnknown_203B35C->linkStatus == COMMS_GOOD) {
if (sub_8037C10(FALSE)) {
if (sub_8037C10(FALSE) != 0) {
sub_80376CC();
sub_8035CC0(sUnknown_203B35C->unk15C, 0);
// Success!
@@ -204,8 +199,8 @@ static void sub_80371B8(void)
if (sUnknown_203B35C->linkStatus != COMMS_GOOD && sUnknown_203B35C->unk0 == 0) {
item = sub_8035D94();
if (item->itemIndex.itemIndex_u8 != ITEM_NOTHING && item->numItems != 0)
gTeamInventoryRef->teamStorage[item->itemIndex.itemIndex_u8] += item->numItems;
if (item->itemIndex != ITEM_NOTHING && item->numItems != 0)
gTeamInventoryRef->teamStorage[item->itemIndex] += item->numItems;
}
}
}
@@ -335,7 +330,7 @@ static void sub_8037400(void)
static void sub_80376CC(void)
{
#ifdef NONMATCHING // SpriteOAM memes. TODO: Match like sub_8039174 with multiple vars and while(0)
#ifdef NONMATCHING // SpriteOAM memes
u32 r0;
u32 r2;
#else
@@ -430,3 +425,71 @@ static u32 sub_8037798(void)
}
return nextMenu;
}
static void sub_8037810(void)
{
unkStruct_8035D94 blank = {0, 0};
MemoryFill8(&sUnknown_203B35C->unk1BC[0], 0, sizeof(unkStruct_8035D94));
MemoryFill8(&sUnknown_203B35C->unk1BC[1], 0, sizeof(unkStruct_8035D94));
sUnknown_203B35C->unk1BC[0] = blank;
sUnknown_203B35C->unk1BC[1] = blank;
MemoryFill8(&sUnknown_203B35C->unk1CC, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B35C->unk1FC, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B35C->unk22C, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B35C->unk25C, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B35C->unk28C, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B35C->unk314, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B35C->unk2BC, 0, sizeof(PokemonStruct1));
MemoryFill8(&sUnknown_203B35C->unk344, 0, sizeof(PokemonStruct1));
MemoryFill8(sUnknown_203B35C->unk39C, 0, 0xb4); // unkStruct_803B344?
MemoryFill8(sUnknown_203B35C->unk450, 0, 0xb4); // unkStruct_803B344?
sUnknown_203B35C->unk2BC.speciesNum = 0;
sUnknown_203B35C->unk344.speciesNum = 0;
}
void sub_8037900(void)
{
sub_8035CC0(sUnknown_203B35C->unk15C, 0);
switch (sUnknown_203B35C->unk0) {
case 0:
case 1: {
SetMenuItems(sUnknown_203B35C->unk1C, sUnknown_203B35C->unk15C, 0, &sUnknown_80E6554, sUnknown_80E656C, FALSE, 6, FALSE);
break;
}
case 2:
case 3: {
SetMenuItems(sUnknown_203B35C->unk1C, sUnknown_203B35C->unk15C, 0, &sUnknown_80E6554, sUnknown_80E65D8, FALSE, 6, FALSE);
break;
}
case 4:
case 5: {
SetMenuItems(sUnknown_203B35C->unk1C, sUnknown_203B35C->unk15C, 0, &sUnknown_80E6554, sUnknown_80E661C, FALSE, 6, FALSE);
break;
}
case 6:
case 7: {
SetMenuItems(sUnknown_203B35C->unk1C, sUnknown_203B35C->unk15C, 0, &sUnknown_80E6554, sUnknown_80E665C, FALSE, 6, FALSE);
break;
}
case 8: {
break;
}
case 9:
case 10: {
SetMenuItems(sUnknown_203B35C->unk1C, sUnknown_203B35C->unk15C, 0, &sUnknown_80E6554, sUnknown_80E667C, FALSE, 6, FALSE);
break;
}
}
sub_8035CF4(sUnknown_203B35C->unk1C, 0, TRUE);
sub_80373C4();
sub_80130A8(sUnknown_203B35C->unk1C);
}
UNUSED static void nullsub_202(void)
{
}

View File

@@ -11,10 +11,16 @@
#include "save.h"
#include "structs/str_dungeon.h"
typedef struct unkStruct_800D670
{
u8 buffer[16];
u32 unk10;
} unkStruct_800D670;
// rescue_password_menu.c
extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected
extern u32 gUnknown_202EC40[2];
extern s32 gUnknown_202EC40[2];
extern s32 gUnknown_202EC48;
extern struct UnkStruct_203B184 *gUnknown_203B184;
@@ -30,44 +36,199 @@ extern void sub_800D570(void);
extern u8 sub_800D588(void);
extern void sub_800D59C(s32 *, u32);
extern u8 sub_800D600(void);
extern void sub_800D670(u32, s32 *, u32);
extern void sub_800D670(s32 idx, void *dst, s32 size);
extern void sub_800D68C(u32);
u32 sub_8037C10(bool8 a0)
// Inline needed for 8-bit return cast
static inline bool8 IsNotChunsoft(unkStruct_800D670 *unk)
{
u32 ret;
return strcmp(unk->buffer, sChunsoft) != 0;
}
if (a0)
{
bool8 sub_8037A48(void)
{
bool8 found;
unkStruct_800D670 stack;
unkStruct_800D670 stack_1;
s32 i;
found = TRUE;
sub_800D670(0, &stack, sizeof(unkStruct_800D670));
sub_800D670(1, &stack_1, sizeof(unkStruct_800D670));
for (i = 0; i < 2; i++)
gUnknown_202EC40[i] = 8;
gUnknown_202EC40[0] = stack.unk10;
gUnknown_202EC40[1] = stack_1.unk10;
if (IsNotChunsoft(&stack) || IsNotChunsoft(&stack_1))
return FALSE;
if ((stack.unk10 == 0 && stack_1.unk10 == 1)
|| (stack.unk10 == 1 && stack_1.unk10 == 0)) {
//found = TRUE;
}
else if ((stack.unk10 == 2 && stack_1.unk10 == 3)
|| (stack.unk10 == 3 && stack_1.unk10 == 2)) {
//found = TRUE;
}
else if ((stack.unk10 == 9 && stack_1.unk10 == 10)
|| (stack.unk10 == 10 && stack_1.unk10 == 9)) {
//found = TRUE;
}
else if ((stack.unk10 == 4 && stack_1.unk10 == 5)
|| (stack.unk10 == 5 && stack_1.unk10 == 4)) {
//found = TRUE;
}
else if ((stack.unk10 == 6 && stack_1.unk10 == 7)
|| (stack.unk10 == 7 && stack_1.unk10 == 6)) {
//found = TRUE;
}
else {
found = FALSE;
}
return found;
}
// https://decomp.me/scratch/IJ9zV (inverted loop, try to match without gotos...)
NAKED s32 sub_8037B28(s32 mode)
{
asm_unified("push {r4,r5,lr}\n"
" sub sp, 0x14\n"
" adds r4, r0, 0\n"
" movs r5, 0\n"
" bl sub_800D414\n"
" ldr r0, _08037B58\n"
" str r5, [r0]\n"
" ldr r5, _08037B5C\n"
" mov r0, sp\n"
" movs r1, 0\n"
" movs r2, 0x14\n"
" bl MemoryFill8\n"
" mov r0, sp\n"
" adds r1, r5, 0\n"
" bl strcpy\n"
" str r4, [sp, 0x10]\n"
" mov r0, sp\n"
" movs r1, 0x14\n"
" bl sub_800D59C\n"
" b _08037B7A\n"
" .align 2, 0\n"
"_08037B58: .4byte gUnknown_202EC38\n"
"_08037B5C: .4byte sChunsoft\n"
"_08037B60:\n"
" cmp r5, 0x3\n"
" beq _08037BCC\n"
" cmp r5, 0x4\n"
" beq _08037BD8\n"
" cmp r5, 0x5\n"
" beq _08037BF0\n"
" ldr r2, _08037BC0\n"
" ldr r1, [r2]\n"
" ldr r0, _08037BC4\n"
" cmp r1, r0\n"
" bgt _08037BE4\n"
" adds r0, r1, 0x1\n"
" str r0, [r2]\n"
"_08037B7A:\n"
" movs r4, 0\n"
"_08037B7C:\n"
" bl sub_80373C4\n"
" bl sub_8012AE8\n"
" cmp r0, 0x3\n"
" bgt _08037B8C\n"
" cmp r0, 0x2\n"
" bge _08037BF0\n"
"_08037B8C:\n"
" adds r4, 0x1\n"
" cmp r4, 0\n"
" ble _08037B7C\n"
" bl sub_800D33C\n"
" adds r5, r0, 0\n"
" bl sub_800D570\n"
" cmp r5, 0x2\n"
" bne _08037B60\n"
" bl sub_800D600\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" beq _08037BFC\n"
" bl sub_8037A48\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" bne _08037BC8\n"
" movs r4, 0x4\n"
" bl sub_800D520\n"
" bl sub_800D510\n"
" b _08037C06\n"
" .align 2, 0\n"
"_08037BC0: .4byte gUnknown_202EC38\n"
"_08037BC4: .4byte 0x00000707\n"
"_08037BC8:\n"
" movs r4, 0\n"
" b _08037C06\n"
"_08037BCC:\n"
" bl sub_800D520\n"
" bl sub_800D510\n"
" movs r0, 0x2\n"
" b _08037C08\n"
"_08037BD8:\n"
" bl sub_800D520\n"
" bl sub_800D510\n"
" movs r0, 0x3\n"
" b _08037C08\n"
"_08037BE4:\n"
" bl sub_800D520\n"
" bl sub_800D510\n"
" movs r0, 0xF\n"
" b _08037C08\n"
"_08037BF0:\n"
" bl sub_800D520\n"
" bl sub_800D510\n"
" movs r0, 0x1\n"
" b _08037C08\n"
"_08037BFC:\n"
" movs r4, 0x5\n"
" bl sub_800D520\n"
" bl sub_800D510\n"
"_08037C06:\n"
" adds r0, r4, 0\n"
"_08037C08:\n"
" add sp, 0x14\n"
" pop {r4,r5}\n"
" pop {r1}\n"
" bx r1");
}
s32 sub_8037C10(bool8 a0)
{
s32 ret;
if (a0) {
if (sub_800D588())
{
ret = gUnknown_202EC40[0];
}
else
{
ret = gUnknown_202EC40[1];
}
}
else if (sub_800D588())
{
ret = gUnknown_202EC40[1];
}
else
{
ret = gUnknown_202EC40[0];
else {
if (sub_800D588())
ret = gUnknown_202EC40[1];
else
ret = gUnknown_202EC40[0];
}
return ret;
}
static void sub_8037C44(s32 mode, void *data)
{
s32 index;
s32 i;
for(index = 0; index < 2; index++)
{
sub_800D68C(index);
}
switch(mode) {
for (i = 0; i < 2; i++)
sub_800D68C(i);
switch (mode) {
case 0:
case 1:
sub_800D59C(data, sizeof(unkStruct_8035D94));
@@ -84,15 +245,14 @@ static void sub_8037C44(s32 mode, void *data)
break;
case 9:
case 10:
sub_800D59C(data, 0xb4);
sub_800D59C(data, 0xB4);
break;
}
}
static void sub_8037CC4(s32 mode, void *param_2, void *param_3)
{
switch(mode)
{
switch (mode) {
case 0:
case 1:
sub_800D670(0, param_2, sizeof(unkStruct_8035D94));
@@ -112,13 +272,13 @@ static void sub_8037CC4(s32 mode, void *param_2, void *param_3)
break;
case 9:
case 10:
sub_800D670(0, param_2, 180);
sub_800D670(1, param_3, 180);
sub_800D670(0, param_2, 0xB4);
sub_800D670(1, param_3, 0xB4);
break;
}
}
// TODO: same as sub_80381F4
// TODO: same as sub_80381F4. Try to fix this fakematch https://decomp.me/scratch/vkGqo
s32 sub_8037D64(u32 mode, void *param_2, void *param_3)
{
u32 iVar2;
@@ -171,8 +331,8 @@ static s32 sub_8037DF0(void)
s32 iStack_c;
linkStatus = COMMS_GOOD;
sub_800D670(0,&iStack_10,4);
sub_800D670(1,&iStack_c,4);
sub_800D670(0, &iStack_10, 4);
sub_800D670(1, &iStack_c, 4);
if ((iStack_10 != 0) || (iStack_c != 0)) {
linkStatus = (!sub_800D588()) ? iStack_c : iStack_10;
if (linkStatus == COMMS_GOOD) {
@@ -191,15 +351,15 @@ static void sub_8037E38(unkStruct_8035D94 *param_1,unkStruct_8035D94 *param_2)
r4 = sub_800D588() == 0 ? param_2 : param_1;
r3 = sub_800D588() == 0 ? param_1 : param_2;
if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) {
load = gTeamInventoryRef->teamStorage[r4->itemIndex.itemIndex_u8];
if (r4->itemIndex == r3->itemIndex) {
load = gTeamInventoryRef->teamStorage[r4->itemIndex];
load += r3->numItems;
gTeamInventoryRef->teamStorage[r4->itemIndex.itemIndex_u8] = load;
gTeamInventoryRef->teamStorage[r4->itemIndex] = load;
}
else {
load = gTeamInventoryRef->teamStorage[r3->itemIndex.itemIndex_u8];
load = gTeamInventoryRef->teamStorage[r3->itemIndex];
load += r3->numItems;
gTeamInventoryRef->teamStorage[r3->itemIndex.itemIndex_u8] = load;
gTeamInventoryRef->teamStorage[r3->itemIndex] = load;
}
}
@@ -246,7 +406,7 @@ static void sub_8037EBC(WonderMailStruct_203B2C0_sub *param_1, WonderMailStruct
}
else
{
MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(unkStruct_203B484));
MemoryFill8(gUnknown_203B484, 0, sizeof(unkStruct_203B484));
gUnknown_203B484->unk4.speciesNum = MONSTER_NONE;
}
}
@@ -303,8 +463,8 @@ static s32 sub_8038014(unkStruct_8035D94 *param_1,unkStruct_8035D94 *param_2)
r4 = sub_800D588() == 0 ? param_2 : param_1;
r3 = sub_800D588() == 0 ? param_1 : param_2;
if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) {
r2 = gTeamInventoryRef->teamStorage[r4->itemIndex.itemIndex_u8];
if (r4->itemIndex == r3->itemIndex) {
r2 = gTeamInventoryRef->teamStorage[r4->itemIndex];
r2 += r3->numItems;
if (r2 > 999) {
linkStatus = COMMS_NO_ROOM_STORAGE;
@@ -313,7 +473,7 @@ static s32 sub_8038014(unkStruct_8035D94 *param_1,unkStruct_8035D94 *param_2)
linkStatus = COMMS_GOOD;
}
else {
r2 = gTeamInventoryRef->teamStorage[r3->itemIndex.itemIndex_u8];
r2 = gTeamInventoryRef->teamStorage[r3->itemIndex];
r2 += r3->numItems;
if (r2 > 999) {
linkStatus = COMMS_NO_ROOM_STORAGE;
@@ -432,7 +592,7 @@ UNUSED static s32 sub_80381E8(u32 mode, void * param_2, void * param_3)
return sub_803815C(mode, param_2, param_3);
}
// TODO: clean this up
// TODO: clean this up... fix fakematch without gotos. see above funcs https://decomp.me/scratch/JGv2m
s32 sub_80381F4(u32 mode, void *param_2, void *param_3)
{
u32 iVar2;

View File

@@ -261,7 +261,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
if(gRescuePasswordMenu == NULL)
{
gRescuePasswordMenu = MemoryAlloc(sizeof(struct RescuePasswordMenu), 8);
MemoryFill8((u8 *)gRescuePasswordMenu, 0, sizeof(struct RescuePasswordMenu));
MemoryFill8(gRescuePasswordMenu, 0, sizeof(struct RescuePasswordMenu));
}
for(counter = 0; counter < 4; counter++)
@@ -295,7 +295,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
temp = GetMailatIndex(0x1F);
MemoryFill8((u8 *)temp, 0, sizeof(unkStruct_203B480));
MemoryFill8(temp, 0, sizeof(unkStruct_203B480));
temp->mailType = 2;
temp->item.id = ITEM_NOTHING;
sub_8031D70(0x1F, 0);
@@ -358,7 +358,7 @@ s32 UpdateRescuePasswordMenu(void)
case 3:
case 5:
iVar7 = sub_80154F0();
MemoryFill8((u8 *)&mail, 0, sizeof(unkStruct_203B480));
MemoryFill8(&mail, 0, sizeof(unkStruct_203B480));
switch(iVar7)
{
case 1:
@@ -425,7 +425,7 @@ s32 UpdateRescuePasswordMenu(void)
sub_80951FC(&mail);
mailPtr1 = GetMailatIndex(GetMailIndex(1, mail.unk10.unk10));
mailPtr1->mailType = WONDER_MAIL_TYPE_OKD;
MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(unkStruct_203B484));
MemoryFill8(&gUnknown_203B484, 0, sizeof(unkStruct_203B484));
break;
case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL:
nextMenu = PASSWORD_ENTRY_NOT_THANK_YOU_MAIL;

View File

@@ -405,7 +405,7 @@ u32 sub_8012240(void)
{
s32 status;
struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5);
MemoryFill8((u8 *)r5, 0xFF, 0x4);
MemoryFill8(r5, 0xFF, 0x4);
sub_8011830();
status = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct));
xxx_call_start_bg_music();

View File

@@ -127,7 +127,7 @@ void CreateSaveMenu(s32 currMenu)
if (sUnknown_203B364 == NULL) {
sUnknown_203B364 = MemoryAlloc(sizeof(SaveMenuWork),8);
MemoryFill8((u8 *)sUnknown_203B364,0,sizeof(SaveMenuWork));
MemoryFill8(sUnknown_203B364,0,sizeof(SaveMenuWork));
}
for(index = 0; index < 4; index++){
sUnknown_203B364->unk148[index] = gUnknown_80E6F20;
@@ -266,7 +266,7 @@ s32 UpdateSaveMenu(void)
void sub_8038830(void)
{
#ifdef NONMATCHING // SpriteOAM memes. TODO: Match like sub_8039174 with multiple vars and while(0)
#ifdef NONMATCHING // SpriteOAM memes
u32 r0;
u32 r2;
#else

View File

@@ -149,7 +149,7 @@ void ResetSprites(bool8 a0)
void sub_8004E8C(unkStruct_2039DB0 *a0)
{
a0->unk0 = 0xFFFF;
a0->unk2 = -1;
a0->unk2 = 0xFFFF;
a0->unk4 = 0xFFFF;
a0->unk6 = 0;
a0->unk8 = 0;
@@ -557,7 +557,7 @@ void AddSprite(SpriteOAM *a0, s32 a1, UnkSpriteMem *a2, unkStruct_2039DB0 *a3)
spr->unk6 = a0->unk6;
}
yPos = spr->unk6 / 16;
yPos = spr->unk6 >> SPRITEOAM_SHIFT_UNK6_4;
nullsub_3(yPos, 0);
yPos &= SPRITEOAM_MAX_Y;
spr->attrib1 &= ~SPRITEOAM_MASK_Y;

View File

@@ -516,21 +516,21 @@ void DrawDialogueBoxString(void)
sDialogueBoxArrowSprite.attrib3 |= palNum;
if (sUnknownTextFlags & 0x10) {
u32 var = 0x780;
sDialogueBoxArrowSprite.unk6 &= 0xF;
u32 var = (0x78 & SPRITEOAM_MAX_UNK6_4) << SPRITEOAM_SHIFT_UNK6_4;
sDialogueBoxArrowSprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
sDialogueBoxArrowSprite.unk6 |= var;
sDialogueBoxArrowSprite.attrib2 &= ~SPRITEOAM_MASK_X;
sDialogueBoxArrowSprite.attrib2 |= 0x70;
sDialogueBoxArrowSprite.attrib2 |= (0x70 & SPRITEOAM_MAX_X) << SPRITEOAM_SHIFT_X;
}
else {
s16 x;
u32 var = ((gUnknown_202E748.unkA + 1) & 0xFFF) << 4;
sDialogueBoxArrowSprite.unk6 &= 0xF;
u32 var = ((gUnknown_202E748.unkA + 1) & SPRITEOAM_MAX_UNK6_4) << SPRITEOAM_SHIFT_UNK6_4;
sDialogueBoxArrowSprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
sDialogueBoxArrowSprite.unk6 |= var;
x = gUnknown_202E748.unk8;
sDialogueBoxArrowSprite.attrib2 &= ~SPRITEOAM_MASK_X;
sDialogueBoxArrowSprite.attrib2 |= x & 0x1FF;
sDialogueBoxArrowSprite.attrib2 |= (x & SPRITEOAM_MAX_X) << SPRITEOAM_SHIFT_X;
}
AddSprite(&sDialogueBoxArrowSprite, 0x100, NULL, NULL);

View File

@@ -220,7 +220,6 @@ extern void sub_802A828();
extern void sub_802A850();
extern void sub_8031E10();
extern void SetThankYouMailMenuState(u32);
extern s32 sub_8037B28(u32);
extern u8 sub_800D588(void);
extern u32 GetDungeonTeamRankPts(DungeonLocation *, u32);
extern void sub_8031D70(u8, u32);
@@ -240,7 +239,7 @@ u32 CreateThankYouMailPelipper(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sUnknown_203B2C4 = MemoryAlloc(sizeof(WonderMailStruct_203B2C4), 8);
MemoryFill8((u8 *)sUnknown_203B2C4, 0, sizeof(WonderMailStruct_203B2C4));
MemoryFill8(sUnknown_203B2C4, 0, sizeof(WonderMailStruct_203B2C4));
CopyYellowMonsterNametoBuffer(gSpeakerNameBuffer, MONSTER_PELIPPER);
monName = GetMonSpecies(MONSTER_PELIPPER);
@@ -482,7 +481,7 @@ void DisplayThankYouMailCommsOutcome(void)
if (sub_80144A4(&auStack20) != 0) {
return;
}
MemoryFill8((u8 *)&sUnknown_203B2C4->unk41C, 0, sizeof(Item));
MemoryFill8(&sUnknown_203B2C4->unk41C, 0, sizeof(Item));
sUnknown_203B2C4->unk41C.id = ITEM_NOTHING;
sUnknown_203B2C4->unk41C.quantity = 1;
sUnknown_203B2C4->unk41C.flags = 0;
@@ -798,7 +797,7 @@ void HandleThankYouMailPasswordMenu(void)
unkStruct_203B480 mail1;
return_var = sub_80154F0();
MemoryFill8((u8 *)&mail1, 0, sizeof(unkStruct_203B480));
MemoryFill8(&mail1, 0, sizeof(unkStruct_203B480));
switch(return_var)
{
case 3:
@@ -1305,13 +1304,13 @@ void UpdateThankYouMailText(void)
switch(sUnknown_203B2C4->unk40)
{
case 6:
MemoryFill8((u8 *)&sUnknown_203B2C4->unk1B8,0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B2C4->unk1B8,0, sizeof(unkStruct_203B480));
sUnknown_203B2C4->unk1B8 = *GetMailatIndex(sUnknown_203B2C4->mailIndex);
sUnknown_203B2C4->linkError = sub_8037D64(sUnknown_203B2C4->unk40,&sUnknown_203B2C4->unk1B8,&sUnknown_203B2C4->unk1E8);
break;
case 7:
MemoryFill8((u8 *)&sUnknown_203B2C4->unk1B8,0, sizeof(unkStruct_203B480));
MemoryFill8((u8 *)&sUnknown_203B2C4->unk1E8,0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B2C4->unk1B8,0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B2C4->unk1E8,0, sizeof(unkStruct_203B480));
sUnknown_203B2C4->linkError = sub_8037D64(sUnknown_203B2C4->unk40,&sUnknown_203B2C4->unk1B8,&sUnknown_203B2C4->unk1E8);
break;
}

View File

@@ -20,8 +20,6 @@ static EWRAM_DATA_2 struct TradeItemsMenu *sTradeItemsMenu = {0};
#include "data/trade_items_menu.h"
extern s32 sub_8037B28(u32);
void sub_8036F74(void);
void sub_8036F30();
void TradeItem_AddItem();
@@ -51,7 +49,7 @@ s32 CreateTradeItemsMenu(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sTradeItemsMenu = MemoryAlloc(sizeof(struct TradeItemsMenu), 8);
MemoryFill8((u8 *)sTradeItemsMenu, 0, sizeof(struct TradeItemsMenu));
MemoryFill8(sTradeItemsMenu, 0, sizeof(struct TradeItemsMenu));
sub_8035C1C();
sub_8035DA0();
sTradeItemsMenu->fallbackState = 0x13;

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "globaldata.h"
#include "constants/main_menu.h"
#include "input.h"
#include "main_menu1.h"
@@ -64,7 +65,7 @@ void sub_80382E4(s32 currMenu)
if (sUnknown_203B360 == NULL) {
sUnknown_203B360 = MemoryAlloc(sizeof(unkStruct_203B360), 8);
MemoryFill8((u8 *)sUnknown_203B360, 0, sizeof(unkStruct_203B360));
MemoryFill8(sUnknown_203B360, 0, sizeof(unkStruct_203B360));
}
for(index = 0; index < 4; index++){
sUnknown_203B360->unk148[index] = gUnknown_80E6E7C;
@@ -126,7 +127,7 @@ u32 sub_80383D4(void)
void sub_8038440(void)
{
#ifdef NONMATCHING // SpriteOAM memes. TODO: Match like sub_8039174 with multiple vars and while(0)
#ifdef NONMATCHING // SpriteOAM memes
u32 r0;
u32 r2;
#else

View File

@@ -38,7 +38,6 @@ extern u32 sub_8031DCC();
extern void sub_8031E10();
extern void sub_8031E00();
extern void sub_8031E10(void);
extern s32 sub_8037B28(u32);
extern void sub_8031D70(u8, u32);
extern u32 sub_8023CE8(void);
extern void sub_8030F58(u32);
@@ -190,7 +189,7 @@ u32 sub_8027F88(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sUnknown_203B2C0 = MemoryAlloc(sizeof(WonderMailStruct_203B2C0), 8);
MemoryFill8((u8 *)sUnknown_203B2C0, 0, sizeof(WonderMailStruct_203B2C0));
MemoryFill8(sUnknown_203B2C0, 0, sizeof(WonderMailStruct_203B2C0));
sUnknown_203B2C0->unk53C = 0;
sUnknown_203B2C0->mailIndex = -1;
sUnknown_203B2C0->speciesNum = -1;
@@ -517,13 +516,13 @@ void sub_8028348(void)
switch(sUnknown_203B2C0->unk40)
{
case 3:
MemoryFill8((u8 *)&sUnknown_203B2C0->unk48, 0, sizeof(unkStruct_203B480));
MemoryFill8((u8 *)&sUnknown_203B2C0->unk78, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B2C0->unk48, 0, sizeof(unkStruct_203B480));
MemoryFill8(&sUnknown_203B2C0->unk78, 0, sizeof(unkStruct_203B480));
sUnknown_203B2C0->linkError = sub_8037D64(sUnknown_203B2C0->unk40, &sUnknown_203B2C0->unk48, &sUnknown_203B2C0->unk78);
break;
case 4:
MemoryFill8((u8 *)&sUnknown_203B2C0->unkA8, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8((u8 *)&sUnknown_203B2C0->unk130, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8(&sUnknown_203B2C0->unkA8, 0, sizeof(WonderMailStruct_203B2C0_sub));
MemoryFill8(&sUnknown_203B2C0->unk130, 0, sizeof(WonderMailStruct_203B2C0_sub));
sUnknown_203B2C0->unkA8.pokemon.speciesNum = 0;
sUnknown_203B2C0->unk130.pokemon.speciesNum = 0;
sUnknown_203B2C0->unkA8.mail = *GetMailatIndex(sUnknown_203B2C0->mailIndex);
@@ -1358,7 +1357,7 @@ void sub_80293F4(void)
unkStruct_203B480 mail;
return_var = sub_80154F0();
MemoryFill8((u8 *)&mail, 0, sizeof(unkStruct_203B480));
MemoryFill8(&mail, 0, sizeof(unkStruct_203B480));
switch(return_var)
{
case 3:

View File

@@ -81,7 +81,7 @@ s32 sub_802B2D4(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sUnknown_203B2C8 = MemoryAlloc(sizeof(struct unkStruct_203B2C8),8);
MemoryFill8((u8 *)sUnknown_203B2C8,0,sizeof(struct unkStruct_203B2C8));
MemoryFill8(sUnknown_203B2C8,0,sizeof(struct unkStruct_203B2C8));
sUnknown_203B2C8->unk1 = -1;
CopyYellowMonsterNametoBuffer(gSpeakerNameBuffer, MONSTER_PELIPPER);
faceFile = GetDialogueSpriteDataPtr(MONSTER_PELIPPER);

View File

@@ -104,7 +104,7 @@ bool8 sub_8030F58(u32 wonderMailType)
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
if (gUnknown_203B328 == NULL) {
gUnknown_203B328 = MemoryAlloc(sizeof(struct unkStruct_203B328),8);
MemoryFill8((u8 *)gUnknown_203B328,0,sizeof(struct unkStruct_203B328));
MemoryFill8(gUnknown_203B328,0,sizeof(struct unkStruct_203B328));
}
gUnknown_203B328->wonderMailType = wonderMailType;
file = GetDialogueSpriteDataPtr(MONSTER_PELIPPER);

View File

@@ -73,7 +73,6 @@ extern void SetWonderMailMainMenuState(u8);
extern void sub_8031E10(void);
extern u8 sub_800D588(void);
extern void sub_802EF48(void);
extern s32 sub_8037B28(u32);
void PrintWonderMailMainMenuError(u32);
void HandleWonderMailMainScreen(void);
@@ -99,7 +98,7 @@ bool8 CreateWonderMailMenu(void)
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
gUnknown_203B3E8 = MemoryAlloc(sizeof(struct unkStruct_203B3E8), 8);
MemoryFill8((u8 *)gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
MemoryFill8(gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
for(index = 0; index < PASSWORD_BUFFER_SIZE; index++){
gUnknown_203B3E8->PasswordEntryBuffer[index] = 0;
@@ -521,18 +520,18 @@ void WonderMailMainMenuCallback(void)
switch(gUnknown_203B3E8->unk24C)
{
case 9:
MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4);
MemoryFill8(&gUnknown_203B3E8->unk254,0,0xb4);
temp = sub_803B344(gUnknown_203B3E8->unk3BC);
if(temp->unk14 != NULL){
MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk14,temp->unk14,0x28);
MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk3C,temp->unk18,0x78);
MemoryCopy8(&gUnknown_203B3E8->unk254.unk14,temp->unk14,0x28);
MemoryCopy8(&gUnknown_203B3E8->unk254.unk3C,temp->unk18,0x78);
}
gUnknown_203B3E8->unk254.mail = temp->mail;
gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
break;
case 10:
MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4);
MemoryFill8((u8 *)&gUnknown_203B3E8->unk308,0,0xb4);
MemoryFill8(&gUnknown_203B3E8->unk254,0,0xb4);
MemoryFill8(&gUnknown_203B3E8->unk308,0,0xb4);
gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
break;
}

View File

@@ -308,11 +308,8 @@ gLevelCurrentData: /* 20384F0 (GetPokemonLevelData) */
.include "src/ground_main.o"
.space 0x2
gUnknown_20398C8: /* 20398C8 (sub_80991E0 - sub_8099220) */
.space 0x10
gUnknown_20398D8: /* 20398D8 (sub_809927C) */
.space 0x78
gUnknown_20398C8: /* 20398C8 (sub_80991E0 - sub_809927C) */
.space 0x88 /* This should be a "struct WonderMailStruct_203B2C0_sub", at least I think so due to its size. Kermalis */
gUnknown_2039950: /* 2039950 (xxx_script_related_8098468 - sub_809927C) */
.space 0x8