mirror of https://github.com/zeldaret/tmc.git
finish main.c
This commit is contained in:
parent
b9e07c1202
commit
ced13c2c8d
2
Makefile
2
Makefile
|
@ -38,7 +38,7 @@ MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
|
|||
ASFLAGS := -mcpu=arm7tdmi --defsym $(GAME_VERSION)=1 --defsym REVISION=$(REVISION) --defsym $(GAME_LANGUAGE)=1
|
||||
|
||||
CC1 := tools/agbcc/bin/agbcc
|
||||
override CFLAGS += -Wimplicit -Wparentheses -Werror -O2
|
||||
override CFLAGS += -Wimplicit -Wparentheses -Werror -Wno-multichar -O2
|
||||
# -fhex-asm
|
||||
|
||||
ifeq ($(DINFO),1)
|
||||
|
|
|
@ -1,369 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_080560B8
|
||||
sub_080560B8: @ 0x080560B8
|
||||
push {r4, lr}
|
||||
bl sub_08056134
|
||||
cmp r0, #0
|
||||
bne _080560F8
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x12
|
||||
bl sub_0807CF30
|
||||
adds r1, r0, #0
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
cmp r1, r0
|
||||
blt _080560E4
|
||||
cmp r1, #0
|
||||
ble _080560E4
|
||||
cmp r1, #1
|
||||
bne _080560E4
|
||||
bl sub_08056134
|
||||
cmp r0, #0
|
||||
bne _080560F8
|
||||
_080560E4:
|
||||
ldr r0, _08056128 @ =gUnk_08100CD4
|
||||
movs r4, #0x80
|
||||
lsls r4, r4, #0x12
|
||||
adds r1, r4, #0
|
||||
movs r2, #0x10
|
||||
bl _DmaCopy
|
||||
adds r0, r4, #0
|
||||
bl sub_0807CF10
|
||||
_080560F8:
|
||||
ldr r2, _0805612C @ =gUnk_02000010
|
||||
ldr r1, [r2]
|
||||
ldr r0, _08056130 @ =0x4D435A33
|
||||
eors r1, r0
|
||||
rsbs r0, r1, #0
|
||||
orrs r0, r1
|
||||
lsrs r0, r0, #0x1f
|
||||
ldrb r1, [r2, #4]
|
||||
cmp r1, #0
|
||||
beq _08056112
|
||||
cmp r1, #0xc1
|
||||
beq _08056112
|
||||
movs r0, #1
|
||||
_08056112:
|
||||
cmp r0, #0
|
||||
beq _08056124
|
||||
ldr r4, _0805612C @ =gUnk_02000010
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x20
|
||||
bl _DmaZero
|
||||
ldr r0, _08056130 @ =0x4D435A33
|
||||
str r0, [r4]
|
||||
_08056124:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08056128: .4byte gUnk_08100CD4
|
||||
_0805612C: .4byte gUnk_02000010
|
||||
_08056130: .4byte 0x4D435A33
|
||||
|
||||
thumb_func_start sub_08056134
|
||||
sub_08056134: @ 0x08056134
|
||||
push {lr}
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #0x12
|
||||
ldr r1, [r2]
|
||||
ldr r0, _08056164 @ =0x4D435A33
|
||||
cmp r1, r0
|
||||
bne _08056160
|
||||
ldrb r0, [r2, #4]
|
||||
cmp r0, #2
|
||||
bhi _08056160
|
||||
ldrb r0, [r2, #5]
|
||||
cmp r0, #2
|
||||
bhi _08056160
|
||||
ldrb r0, [r2, #6]
|
||||
cmp r0, #2
|
||||
bhi _08056160
|
||||
ldrb r0, [r2, #7]
|
||||
cmp r0, #1
|
||||
bne _08056160
|
||||
ldrb r0, [r2, #0xe]
|
||||
cmp r0, #0
|
||||
beq _08056168
|
||||
_08056160:
|
||||
movs r0, #0
|
||||
b _0805616A
|
||||
.align 2, 0
|
||||
_08056164: .4byte 0x4D435A33
|
||||
_08056168:
|
||||
movs r0, #1
|
||||
_0805616A:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0805616C
|
||||
sub_0805616C: @ 0x0805616C
|
||||
push {lr}
|
||||
ldr r0, _080561E8 @ =0x80040000
|
||||
bl PlaySFX
|
||||
ldr r0, _080561EC @ =gScreen
|
||||
adds r3, r0, #0
|
||||
adds r3, #0x6c
|
||||
ldrb r2, [r3]
|
||||
adds r0, #0x6d
|
||||
movs r1, #0
|
||||
strb r2, [r0]
|
||||
strb r1, [r3]
|
||||
ldr r1, _080561F0 @ =0x040000B0
|
||||
ldrh r2, [r1, #0xa]
|
||||
ldr r0, _080561F4 @ =0x0000C5FF
|
||||
ands r0, r2
|
||||
strh r0, [r1, #0xa]
|
||||
ldrh r2, [r1, #0xa]
|
||||
ldr r0, _080561F8 @ =0x00007FFF
|
||||
ands r0, r2
|
||||
strh r0, [r1, #0xa]
|
||||
ldrh r0, [r1, #0xa]
|
||||
ldr r0, [r1, #8]
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #0x18
|
||||
cmp r0, #0
|
||||
bge _080561AA
|
||||
_080561A2:
|
||||
ldr r0, [r1, #8]
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080561A2
|
||||
_080561AA:
|
||||
ldr r2, _080561FC @ =0x040000BC
|
||||
ldr r0, [r2, #8]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x18
|
||||
cmp r0, #0
|
||||
bge _080561BE
|
||||
_080561B6:
|
||||
ldr r0, [r2, #8]
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080561B6
|
||||
_080561BE:
|
||||
ldr r2, _08056200 @ =0x040000C8
|
||||
ldr r0, [r2, #8]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x18
|
||||
cmp r0, #0
|
||||
bge _080561D2
|
||||
_080561CA:
|
||||
ldr r0, [r2, #8]
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080561CA
|
||||
_080561D2:
|
||||
ldr r2, _08056204 @ =0x040000D4
|
||||
ldr r0, [r2, #8]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x18
|
||||
cmp r0, #0
|
||||
bge _080561E6
|
||||
_080561DE:
|
||||
ldr r0, [r2, #8]
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080561DE
|
||||
_080561E6:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080561E8: .4byte 0x80040000
|
||||
_080561EC: .4byte gScreen
|
||||
_080561F0: .4byte 0x040000B0
|
||||
_080561F4: .4byte 0x0000C5FF
|
||||
_080561F8: .4byte 0x00007FFF
|
||||
_080561FC: .4byte 0x040000BC
|
||||
_08056200: .4byte 0x040000C8
|
||||
_08056204: .4byte 0x040000D4
|
||||
|
||||
thumb_func_start sub_08056208
|
||||
sub_08056208: @ 0x08056208
|
||||
push {lr}
|
||||
ldr r0, _08056224 @ =0x80060000
|
||||
bl PlaySFX
|
||||
ldr r0, _08056228 @ =gScreen
|
||||
adds r3, r0, #0
|
||||
adds r3, #0x6d
|
||||
ldrb r2, [r3]
|
||||
adds r0, #0x6c
|
||||
movs r1, #0
|
||||
strb r2, [r0]
|
||||
strb r1, [r3]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08056224: .4byte 0x80060000
|
||||
_08056228: .4byte gScreen
|
||||
|
||||
thumb_func_start sub_0805622C
|
||||
sub_0805622C: @ 0x0805622C
|
||||
ldr r3, _08056248 @ =gScreen
|
||||
str r0, [r3, #0x70]
|
||||
str r1, [r3, #0x74]
|
||||
str r2, [r3, #0x78]
|
||||
adds r3, #0x6c
|
||||
movs r2, #1
|
||||
movs r0, #1
|
||||
strb r0, [r3]
|
||||
ldr r1, _0805624C @ =gUnk_03003DE4
|
||||
ldrb r0, [r1]
|
||||
eors r0, r2
|
||||
strb r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08056248: .4byte gScreen
|
||||
_0805624C: .4byte gUnk_03003DE4
|
||||
|
||||
thumb_func_start sub_08056250
|
||||
sub_08056250: @ 0x08056250
|
||||
ldr r0, _0805625C @ =gScreen
|
||||
adds r0, #0x6c
|
||||
movs r1, #0
|
||||
strb r1, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0805625C: .4byte gScreen
|
||||
|
||||
thumb_func_start sub_08056260
|
||||
sub_08056260: @ 0x08056260
|
||||
push {r4, r5, r6, lr}
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6}
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x13
|
||||
movs r0, #0x80
|
||||
strh r0, [r1]
|
||||
ldr r1, _080562B8 @ =0x04000132
|
||||
ldr r2, _080562BC @ =0x00008304
|
||||
adds r0, r2, #0
|
||||
strh r0, [r1]
|
||||
ldr r6, _080562C0 @ =0x04000208
|
||||
movs r0, #0
|
||||
mov r8, r0
|
||||
strh r0, [r6]
|
||||
ldr r5, _080562C4 @ =0x04000200
|
||||
ldrh r4, [r5]
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #6
|
||||
adds r0, r1, #0
|
||||
strh r0, [r5]
|
||||
movs r2, #1
|
||||
mov sb, r2
|
||||
strh r2, [r6]
|
||||
bl SoundBiasReset
|
||||
svc #3
|
||||
bl SoundBiasSet
|
||||
mov r0, r8
|
||||
strh r0, [r6]
|
||||
strh r4, [r5]
|
||||
mov r1, sb
|
||||
strh r1, [r6]
|
||||
ldr r0, _080562C8 @ =gUnk_03001000
|
||||
ldrb r1, [r0, #1]
|
||||
mov r2, r8
|
||||
strb r2, [r0, #1]
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_080562B8: .4byte 0x04000132
|
||||
_080562BC: .4byte 0x00008304
|
||||
_080562C0: .4byte 0x04000208
|
||||
_080562C4: .4byte 0x04000200
|
||||
_080562C8: .4byte gUnk_03001000
|
||||
|
||||
thumb_func_start sub_080562CC
|
||||
sub_080562CC: @ 0x080562CC
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r6, _080562FC @ =gRoomControls
|
||||
movs r4, #0xa
|
||||
ldrsh r5, [r6, r4]
|
||||
ldrh r4, [r6, #6]
|
||||
subs r5, r5, r4
|
||||
subs r5, r5, r0
|
||||
adds r5, #0xf0
|
||||
movs r4, #0xc
|
||||
ldrsh r0, [r6, r4]
|
||||
ldrh r4, [r6, #8]
|
||||
subs r0, r0, r4
|
||||
subs r0, r0, r1
|
||||
adds r0, #0xa0
|
||||
adds r2, #0xf0
|
||||
adds r3, #0xa0
|
||||
movs r1, #0
|
||||
cmp r5, r2
|
||||
bhs _080562F8
|
||||
cmp r0, r3
|
||||
bhs _080562F8
|
||||
movs r1, #1
|
||||
_080562F8:
|
||||
adds r0, r1, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_080562FC: .4byte gRoomControls
|
||||
|
||||
thumb_func_start sub_08056300
|
||||
sub_08056300: @ 0x08056300
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
b _0805631C
|
||||
_08056306:
|
||||
ldrh r0, [r4, #2]
|
||||
ldrh r1, [r4, #4]
|
||||
ldrh r2, [r4, #6]
|
||||
ldrh r3, [r4, #8]
|
||||
bl sub_080562CC
|
||||
cmp r0, #0
|
||||
beq _0805631A
|
||||
ldrh r0, [r4]
|
||||
b _08056324
|
||||
_0805631A:
|
||||
adds r4, #0xa
|
||||
_0805631C:
|
||||
ldrh r0, [r4]
|
||||
cmp r0, #0xff
|
||||
bne _08056306
|
||||
movs r0, #0xff
|
||||
_08056324:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start NulledItem
|
||||
NulledItem: @ 0x08056328
|
||||
push {lr}
|
||||
bl DeleteThisEntity
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08056330
|
||||
sub_08056330: @ 0x08056330
|
||||
push {lr}
|
||||
bl DeleteThisEntity
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08056338
|
||||
sub_08056338: @ 0x08056338
|
||||
push {lr}
|
||||
movs r2, #1
|
||||
rsbs r2, r2, #0
|
||||
ldr r0, _08056358 @ =gTextBox
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08056354
|
||||
ldr r1, _0805635C @ =gUnk_02000040
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #3
|
||||
bne _08056354
|
||||
ldrb r2, [r1, #1]
|
||||
_08056354:
|
||||
adds r0, r2, #0
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08056358: .4byte gTextBox
|
||||
_0805635C: .4byte gUnk_02000040
|
|
@ -0,0 +1,66 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, lr}
|
||||
bl sub_08056134
|
||||
cmp r0, #0
|
||||
bne _080560F8
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x12
|
||||
bl sub_0807CF30
|
||||
adds r1, r0, #0
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
cmp r1, r0
|
||||
blt _080560E4
|
||||
cmp r1, #0
|
||||
ble _080560E4
|
||||
cmp r1, #1
|
||||
bne _080560E4
|
||||
bl sub_08056134
|
||||
cmp r0, #0
|
||||
bne _080560F8
|
||||
_080560E4:
|
||||
ldr r0, _08056128 @ =sDefaultSettings
|
||||
movs r4, #0x80
|
||||
lsls r4, r4, #0x12
|
||||
adds r1, r4, #0
|
||||
movs r2, #0x10
|
||||
bl _DmaCopy
|
||||
adds r0, r4, #0
|
||||
bl sub_0807CF10
|
||||
_080560F8:
|
||||
ldr r2, _0805612C @ =gUnk_02000010
|
||||
ldr r1, [r2]
|
||||
ldr r0, _08056130 @ =0x4D435A33
|
||||
eors r1, r0
|
||||
rsbs r0, r1, #0
|
||||
orrs r0, r1
|
||||
lsrs r0, r0, #0x1f
|
||||
ldrb r1, [r2, #4]
|
||||
cmp r1, #0
|
||||
beq _08056112
|
||||
cmp r1, #0xc1
|
||||
beq _08056112
|
||||
movs r0, #1
|
||||
_08056112:
|
||||
cmp r0, #0
|
||||
beq _08056124
|
||||
ldr r4, _0805612C @ =gUnk_02000010
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x20
|
||||
bl _DmaZero
|
||||
ldr r0, _08056130 @ =0x4D435A33
|
||||
str r0, [r4]
|
||||
_08056124:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08056128: .4byte sDefaultSettings
|
||||
_0805612C: .4byte gUnk_02000010
|
||||
_08056130: .4byte 0x4D435A33
|
||||
.syntax divided
|
|
@ -1,8 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08100CD4:: @ 08100CD4
|
||||
.incbin "baserom.gba", 0x100CD4, 0x0000010
|
|
@ -321,4 +321,6 @@ extern void sub_08008790(Entity*, u32);
|
|||
extern u32 CheckIsDungeon();
|
||||
extern void sub_0804ACF8();
|
||||
extern void sub_08073904(Entity*);
|
||||
extern u32 sub_08056134(void);
|
||||
extern u32 sub_0807CF30(void*);
|
||||
#endif
|
||||
|
|
|
@ -167,6 +167,12 @@
|
|||
#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
|
||||
#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
|
||||
|
||||
#define DmaWait(DmaNo) \
|
||||
{ \
|
||||
vu32 *(DmaCntp) = (vu32 *)REG_ADDR_DMA##DmaNo; \
|
||||
while (DmaCntp[2] & (DMA_ENABLE << 16)) ; \
|
||||
}
|
||||
|
||||
#define IntrEnable(flags) \
|
||||
{ \
|
||||
u16 imeTemp; \
|
||||
|
|
|
@ -11,6 +11,18 @@
|
|||
#define RESET_REGS 0x80
|
||||
#define RESET_ALL 0xFF
|
||||
|
||||
#define SystemCall(x) { asm("svc " #x); }
|
||||
|
||||
extern void SoundBiasReset();
|
||||
extern void SoundBiasSet();
|
||||
|
||||
#define Stop() \
|
||||
{ \
|
||||
SoundBiasReset(); \
|
||||
SystemCall(3); \
|
||||
SoundBiasSet(); \
|
||||
}
|
||||
|
||||
void SoftReset(u32 resetFlags);
|
||||
|
||||
void RegisterRamReset(u32 resetFlags);
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#define min(a, b) ((a) < (b) ? (a) : (b))
|
||||
#define max(a, b) ((a) >= (b) ? (a) : (b))
|
||||
|
||||
#define BOOLCAST(x) ((-x | x) >> 31)
|
||||
#define static_assert(cond) extern char assertion[(cond) ? 1 : -1]
|
||||
|
||||
#if NON_MATCHING
|
||||
|
|
|
@ -23,6 +23,13 @@ enum {
|
|||
SCREEN_DEBUG_TEXT,
|
||||
};
|
||||
|
||||
#define GAME_LANGUAGE GAME_LANGUAGE_EN
|
||||
#define SIGNATURE 'MCZ3'
|
||||
#define GAME_LANGUAGE_EN 1
|
||||
#define MAX_MSG_SPEED 3
|
||||
#define MAX_SAVE_FILES 3
|
||||
#define MAX_BRIGHTNESS 3
|
||||
|
||||
typedef struct {
|
||||
u8 interruptFlag;
|
||||
u8 field_0x1;
|
||||
|
|
|
@ -72,6 +72,11 @@ typedef struct {
|
|||
/*0x08*/ BgSettings bg;
|
||||
/*0x20*/ BgAffSettings affine;
|
||||
/*0x38*/ BgControls controls;
|
||||
/*0x6c*/ u8 _6c;
|
||||
/*0x6d*/ u8 _6d;
|
||||
/*0x70*/ u32 _70;
|
||||
/*0x74*/ u32 _74;
|
||||
/*0x78*/ u32 _78;
|
||||
} Screen;
|
||||
|
||||
extern BgControls gBgControls;
|
||||
|
|
|
@ -6,12 +6,16 @@
|
|||
#include "player.h"
|
||||
|
||||
typedef struct {
|
||||
char header[4];
|
||||
int signature;
|
||||
u8 saveFileId;
|
||||
u8 messageSpeed;
|
||||
u8 brightnessPref;
|
||||
u8 gameLanguage;
|
||||
u8 _8[6];
|
||||
u8 _e;
|
||||
} struct_02000000;
|
||||
#define gUnk_02000000 ((struct_02000000*)(0x2000000))
|
||||
// extern struct_02000000 gUnk_02000000;
|
||||
|
||||
typedef struct {
|
||||
u8 unk_00;
|
||||
|
@ -30,11 +34,8 @@ typedef struct {
|
|||
u16 field_0xa;
|
||||
} struct_0807D1C4;
|
||||
|
||||
#define gUnk_02000000 ((struct_02000000*)(0x2000000))
|
||||
// extern struct_02000000 gUnk_02000000;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x4];
|
||||
s32 signature;
|
||||
u8 field_0x4;
|
||||
u8 listenForKeyPresses;
|
||||
} struct_02000010;
|
||||
|
|
|
@ -465,8 +465,7 @@ SECTIONS {
|
|||
src/code_0805436C.o(.text);
|
||||
asm/code_0805436C.o(.text);
|
||||
src/sub_08055E08.o(.text);
|
||||
src/mainLoop.o(.text);
|
||||
asm/code_08055FF4.o(.text);
|
||||
src/main.o(.text);
|
||||
src/textbox.o(.text);
|
||||
asm/code_08056418.o(.text);
|
||||
src/manager/manager1.o(.text);
|
||||
|
@ -993,8 +992,7 @@ SECTIONS {
|
|||
data/data_080D3D94.o(.rodata);
|
||||
data/entity_headers.o(.rodata);
|
||||
data/data_080D5360.o(.rodata);
|
||||
src/mainLoop.o(.rodata);
|
||||
data/data_08100CD4.o(.rodata);
|
||||
src/main.o(.rodata);
|
||||
data/tileset_headers.o(.rodata);
|
||||
data/metatile_headers.o(.rodata);
|
||||
data/map_headers.o(.rodata);
|
||||
|
|
|
@ -42,7 +42,7 @@ u32 sub_0807CDE8(u32 arg0) {
|
|||
temp = 1;
|
||||
break;
|
||||
case 2:
|
||||
temp = sub_0807CF10((u8*)gUnk_02000000->header);
|
||||
temp = sub_0807CF10((u8*)&gUnk_02000000->signature);
|
||||
break;
|
||||
}
|
||||
gMenu.field_0xa = temp;
|
||||
|
|
|
@ -337,7 +337,7 @@ bool32 sub_0802C0E8(Entity* this) {
|
|||
u32 ret = FALSE;
|
||||
if (!sub_0806FC24(TILE(x, y), 9)) {
|
||||
u32 tmp = sub_080AE4CC(ent, x, y, 0);
|
||||
ret = (-tmp | tmp) >> 0x1f;
|
||||
ret = BOOLCAST(tmp);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
#include "global.h"
|
||||
#include "functions.h"
|
||||
#include "structures.h"
|
||||
#include "main.h"
|
||||
#include "screen.h"
|
||||
#include "random.h"
|
||||
#include "readKeyInput.h"
|
||||
|
||||
extern u8 gUnk_03003DE4;
|
||||
|
||||
extern void sub_0804FF84(u32);
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern void VBlankInterruptWait(void);
|
||||
|
@ -137,3 +141,128 @@ void DoSoftReset(void) {
|
|||
DisableInterruptsAndDMA();
|
||||
SoftReset(RESET_ALL & ~(RESET_EWRAM | RESET_SIO_REGS));
|
||||
}
|
||||
|
||||
const int sDefaultSettings[] = { SIGNATURE, '\1\1\1\0', 'KNIL', '\0\0\0\0' };
|
||||
|
||||
// single misplaced ldr
|
||||
NONMATCH("asm/non_matching/sub_080560B8.inc", void sub_080560B8(void)) {
|
||||
u32 temp;
|
||||
u32 b;
|
||||
|
||||
if (!sub_08056134()) {
|
||||
switch ((s32)sub_0807CF30((void*)0x2000000)) {
|
||||
case 1:
|
||||
if (sub_08056134())
|
||||
break;
|
||||
case 0:
|
||||
case -1:
|
||||
default:
|
||||
_DmaCopy(&sDefaultSettings, (void*)0x2000000, 16);
|
||||
sub_0807CF10((u8*)0x2000000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
temp = gUnk_02000010.signature ^ SIGNATURE;
|
||||
b = BOOLCAST(temp);
|
||||
|
||||
if ((gUnk_02000010.field_0x4 != 0) && (gUnk_02000010.field_0x4 != 0xc1)) {
|
||||
b = 1;
|
||||
}
|
||||
if (b != 0) {
|
||||
_DmaZero((u8*)&gUnk_02000010.signature, 0x20);
|
||||
gUnk_02000010.signature = SIGNATURE;
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
u32 sub_08056134(void) {
|
||||
if ((gUnk_02000000->signature != SIGNATURE) || (gUnk_02000000->saveFileId >= MAX_SAVE_FILES) ||
|
||||
(gUnk_02000000->messageSpeed >= MAX_MSG_SPEED) || (gUnk_02000000->brightnessPref >= MAX_BRIGHTNESS) ||
|
||||
(gUnk_02000000->gameLanguage != GAME_LANGUAGE) || (gUnk_02000000->_e != 0))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_0805616C() {
|
||||
PlaySFX(0x80040000);
|
||||
gScreen._6d = gScreen._6c;
|
||||
gScreen._6c = 0;
|
||||
|
||||
DmaStop(0);
|
||||
|
||||
DmaWait(0);
|
||||
DmaWait(1);
|
||||
DmaWait(2);
|
||||
DmaWait(3);
|
||||
}
|
||||
|
||||
void sub_08056208() {
|
||||
PlaySFX(0x80060000);
|
||||
gScreen._6c = gScreen._6d;
|
||||
gScreen._6d = 0;
|
||||
}
|
||||
|
||||
void sub_0805622C(u32 a1, u32 a2, u32 a3) {
|
||||
gScreen._70 = a1;
|
||||
gScreen._74 = a2;
|
||||
gScreen._78 = a3;
|
||||
gScreen._6c = 1;
|
||||
gUnk_03003DE4 ^= 1;
|
||||
}
|
||||
|
||||
void sub_08056250() {
|
||||
gScreen._6c = 0;
|
||||
}
|
||||
|
||||
void sub_08056260(void) {
|
||||
u32 temp;
|
||||
Main* temp2;
|
||||
|
||||
REG_DISPCNT = 0x80;
|
||||
REG_KEYCNT = 0x8304;
|
||||
REG_IME = 0;
|
||||
temp = REG_IE;
|
||||
REG_IE = 0x3000;
|
||||
REG_IME = 1;
|
||||
Stop();
|
||||
REG_IME = 0;
|
||||
REG_IE = temp;
|
||||
REG_IME = 1;
|
||||
temp2 = &gUnk_03001000;
|
||||
asm("ldrb r1, [r0, #0x1]");
|
||||
temp2->field_0x1 = 0;
|
||||
}
|
||||
|
||||
// Convert in-game AABB to screen coordinates and check if it's within the viewport
|
||||
u32 sub_080562CC(u32 x0, u32 y0, u32 x1, u32 y1) {
|
||||
u32 result;
|
||||
u32 x = ((gRoomControls.roomScrollX - gRoomControls.roomOriginX) - x0 + DISPLAY_WIDTH);
|
||||
u32 y = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) - y0 + DISPLAY_HEIGHT);
|
||||
u32 a = x1 + DISPLAY_WIDTH;
|
||||
u32 b = y1 + DISPLAY_HEIGHT;
|
||||
if ((x < a) && (y < b))
|
||||
result = TRUE;
|
||||
else
|
||||
result = FALSE;
|
||||
return result;
|
||||
}
|
||||
|
||||
// Iterate over array of AABBs and check if any fit on screen
|
||||
u16 sub_08056300(u16* arr) {
|
||||
u16* i;
|
||||
for (i = arr; *i != 0xff; i += 5) {
|
||||
if (sub_080562CC(i[1], i[2], i[3], i[4]) != 0)
|
||||
return *i;
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void NulledItem() {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_08056330() {
|
||||
DeleteThisEntity();
|
||||
}
|
|
@ -159,5 +159,5 @@ void sub_08063504(Entity* this, u32* param_2) {
|
|||
u32 uVar1;
|
||||
|
||||
uVar1 = sub_080544DC(gUnk_0810C88C[this->entityType.parameter]);
|
||||
param_2[5] = (-uVar1 | uVar1) >> 0x1F;
|
||||
param_2[5] = BOOLCAST(uVar1);
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@ void sub_080601D4(Entity* this) {
|
|||
uVar2 = 2;
|
||||
} else {
|
||||
temp = CheckKinstoneFused(0x17);
|
||||
uVar2 = (-temp | temp) >> 0x1f;
|
||||
uVar2 = BOOLCAST(temp);
|
||||
}
|
||||
TextboxNoOverlap(gUnk_0810A354[uVar2], this);
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ void sub_0806021C(Entity* this) {
|
|||
|
||||
// jabber nut
|
||||
uVar1 = GetInventoryValue(0x5B);
|
||||
uVar2 = (-uVar1 | uVar1) >> 0x1f;
|
||||
uVar2 = BOOLCAST(uVar1);
|
||||
|
||||
// earth element
|
||||
if (GetInventoryValue(0x40)) {
|
||||
|
|
|
@ -64,7 +64,7 @@ void sub_080693D0(Entity* this) {
|
|||
sub_0807DD94(this, 0);
|
||||
if (this->animIndex == 8) {
|
||||
u32 var0 = this->field_0x82.HWORD & 0xF;
|
||||
bool32 createFx65 = ((-var0) | var0) >> 0x1F; // = !var0
|
||||
bool32 createFx65 = BOOLCAST(var0); // = !var0
|
||||
|
||||
if (this->frames.all == 1) {
|
||||
this->frames.all = 0;
|
||||
|
|
|
@ -114,7 +114,7 @@ u32 sub_080696BC(Entity* this) {
|
|||
}
|
||||
|
||||
temp = CheckGlobalFlag(0x3e);
|
||||
uVar1 = (-temp | temp) >> 0x1f;
|
||||
uVar1 = BOOLCAST(temp);
|
||||
|
||||
if (CheckGlobalFlag(0x3f)) {
|
||||
uVar1 = 2;
|
||||
|
|
|
@ -68,7 +68,7 @@ void sub_08063D44(Entity* this) {
|
|||
|
||||
temp = this->entityType.subtype;
|
||||
temp ^= 0x15;
|
||||
idx = ((-temp | temp) >> 0x1f) * 4;
|
||||
idx = BOOLCAST(temp) * 4;
|
||||
if (!LoadExtraSpriteData(this, &gUnk_0810F524[idx]))
|
||||
return;
|
||||
|
||||
|
@ -132,7 +132,7 @@ void sub_08063E90(Entity* this) {
|
|||
|
||||
temp = this->entityType.subtype;
|
||||
temp ^= 0x15;
|
||||
idx = ((-temp | temp) >> 0x1f) * 4;
|
||||
idx = BOOLCAST(temp) * 4;
|
||||
if (!LoadExtraSpriteData(this, &gUnk_0810F524[idx]))
|
||||
return;
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ void sub_080670B4(Entity* this) {
|
|||
uVar2 = 0;
|
||||
if (GetInventoryValue(0x11) == 0) {
|
||||
uVar1 = CheckGlobalFlag(TABIDACHI);
|
||||
uVar2 = (-uVar1 | uVar1) >> 0x1f;
|
||||
uVar2 = BOOLCAST(uVar1);
|
||||
}
|
||||
TextboxNoOverlap(gUnk_08110C0C[uVar2], this);
|
||||
}
|
||||
|
|
|
@ -299,7 +299,7 @@ void sub_0806B098(Entity* this) {
|
|||
idx = 1;
|
||||
if (CheckGlobalFlag(0x29)) {
|
||||
f = CheckGlobalFlag(0x2a);
|
||||
idx = (-f | f) >> 0x1f;
|
||||
idx = BOOLCAST(f);
|
||||
}
|
||||
}
|
||||
TextboxNoOverlap(gUnk_08112C50[(this->entityType.parameter - 7) * 3 + idx], this);
|
||||
|
|
|
@ -60,7 +60,7 @@ void sub_0809EABC(Entity* this) {
|
|||
u32 f;
|
||||
|
||||
f = CheckFlags(this->field_0x86.HWORD);
|
||||
anySet = (-f | f) >> 0x1F;
|
||||
anySet = BOOLCAST(f);
|
||||
if (this->frameIndex != anySet) {
|
||||
this->frameIndex = anySet;
|
||||
}
|
||||
|
|
|
@ -4489,7 +4489,7 @@ void sub_0804E3C4() {
|
|||
u32 index;
|
||||
u32 tmp;
|
||||
tmp = CheckGlobalFlag(LV4_CLEAR);
|
||||
index = (-tmp | tmp) >> 0x1F;
|
||||
index = BOOLCAST(tmp);
|
||||
if (CheckGlobalFlag(LV5_CLEAR)) {
|
||||
index = 2;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "room.h"
|
||||
#include "entity.h"
|
||||
#include "textbox.h"
|
||||
#include "structures.h"
|
||||
|
||||
void _DmaZero();
|
||||
void ShowTextbox();
|
||||
|
@ -10,31 +11,31 @@ void TextboxAtPosition();
|
|||
extern u32 gUnk_02022780;
|
||||
extern u32 gUnk_02036A40;
|
||||
extern u32 gUnk_02036A38;
|
||||
extern u32 gUnk_02000040;
|
||||
|
||||
void sub_08056360(void)
|
||||
s32 sub_08056338(void) {
|
||||
s32 result;
|
||||
|
||||
{
|
||||
if ((gTextBox.doTextBox & 127) != 0) {
|
||||
gTextBox.doTextBox = 136;
|
||||
}
|
||||
return;
|
||||
result = -1;
|
||||
if (((gTextBox.doTextBox & 0x7f) == 0) && (gUnk_02000040.unk_00 == 3))
|
||||
result = gUnk_02000040.unk_01;
|
||||
return result;
|
||||
}
|
||||
|
||||
void TextboxNoOverlapFollow(u32 index)
|
||||
void sub_08056360(void) {
|
||||
if ((gTextBox.doTextBox & 0x7f) != 0) {
|
||||
gTextBox.doTextBox = 0x80 | 0x8;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
void TextboxNoOverlapFollow(u32 index) {
|
||||
if (gRoomControls.cameraTarget != NULL) {
|
||||
TextboxNoOverlap(index, gRoomControls.cameraTarget);
|
||||
} else {
|
||||
ShowTextbox(index);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void TextboxNoOverlap(u32 index, Entity* ent)
|
||||
|
||||
{
|
||||
void TextboxNoOverlap(u32 index, Entity* ent) {
|
||||
s16 y;
|
||||
s16 h;
|
||||
|
||||
|
@ -43,22 +44,19 @@ void TextboxNoOverlap(u32 index, Entity* ent)
|
|||
y = ent->y.HALF.HI;
|
||||
h = ent->height.HALF.HI;
|
||||
|
||||
if (88 < ((y + h) - gRoomControls.roomScrollY)) {
|
||||
if (((y + h) - gRoomControls.roomScrollY) > 0x58) {
|
||||
gTextBox.textWindowPosY = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_080563C8(u32 param_1, u32 param_2) {
|
||||
TextboxAtPosition(param_1, 1, param_2);
|
||||
return;
|
||||
}
|
||||
|
||||
void TextboxAtPosition(u32 index, u32 x, u32 y) {
|
||||
ShowTextbox(index);
|
||||
gTextBox.textWindowPosX = x;
|
||||
gTextBox.textWindowPosY = y;
|
||||
return;
|
||||
}
|
||||
|
||||
void ShowTextbox(u32 index, u32 param_2, u32* dest) {
|
||||
|
@ -70,15 +68,12 @@ void ShowTextbox(u32 index, u32 param_2, u32* dest) {
|
|||
gTextBox.textWindowPosX = 1;
|
||||
gTextBox.textWindowPosY = 12;
|
||||
gTextBox.doTextBox = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_08056418(void) {
|
||||
|
||||
_DmaZero(&gTextBox, 32);
|
||||
_DmaZero(&gUnk_02022780, 168);
|
||||
_DmaZero(&gUnk_02036A40, 8);
|
||||
_DmaZero(&gUnk_02036A38, 8);
|
||||
_DmaZero(&gUnk_02000040, 4);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
{
|
||||
"folders" : [ { "path" : ".." } ], "settings" : {
|
||||
"files.associations" : {
|
||||
"algorithm" : "cpp", "ios" : "c"
|
||||
"algorithm": "cpp",
|
||||
"ios": "c",
|
||||
"functions.h": "c"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue