mirror of https://github.com/zeldaret/tmc.git
tile entity functions
This commit is contained in:
parent
630ace80fe
commit
d3fa739c94
|
@ -1,352 +0,0 @@
|
||||||
.include "asm/macros.inc"
|
|
||||||
.text
|
|
||||||
.syntax unified
|
|
||||||
|
|
||||||
thumb_func_start GetCurrentRoomProperty
|
|
||||||
GetCurrentRoomProperty: @ 0x0804B128
|
|
||||||
push {lr}
|
|
||||||
adds r2, r0, #0
|
|
||||||
ldr r0, _0804B138 @ =gCurrentRoomProperties
|
|
||||||
ldr r1, [r0]
|
|
||||||
cmp r1, #0
|
|
||||||
bne _0804B13C
|
|
||||||
movs r0, #0
|
|
||||||
b _0804B166
|
|
||||||
.align 2, 0
|
|
||||||
_0804B138: .4byte gCurrentRoomProperties
|
|
||||||
_0804B13C:
|
|
||||||
cmp r2, #0x7f
|
|
||||||
bls _0804B150
|
|
||||||
ldr r0, _0804B14C @ =gRoomVars
|
|
||||||
movs r1, #7
|
|
||||||
ands r1, r2
|
|
||||||
lsls r1, r1, #2
|
|
||||||
adds r0, #0x8c
|
|
||||||
b _0804B162
|
|
||||||
.align 2, 0
|
|
||||||
_0804B14C: .4byte gRoomVars
|
|
||||||
_0804B150:
|
|
||||||
cmp r2, #7
|
|
||||||
bls _0804B15C
|
|
||||||
lsls r0, r2, #2
|
|
||||||
adds r0, r0, r1
|
|
||||||
ldr r0, [r0]
|
|
||||||
b _0804B166
|
|
||||||
_0804B15C:
|
|
||||||
ldr r0, _0804B168 @ =gRoomVars
|
|
||||||
lsls r1, r2, #2
|
|
||||||
adds r0, #0x6c
|
|
||||||
_0804B162:
|
|
||||||
adds r1, r1, r0
|
|
||||||
ldr r0, [r1]
|
|
||||||
_0804B166:
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0804B168: .4byte gRoomVars
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B16C
|
|
||||||
sub_0804B16C: @ 0x0804B16C
|
|
||||||
push {r4, lr}
|
|
||||||
ldr r4, _0804B1A4 @ =gUnk_02017660
|
|
||||||
_0804B170:
|
|
||||||
ldrh r0, [r4, #4]
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B198
|
|
||||||
ldrb r0, [r4, #1]
|
|
||||||
bl CheckLocalFlag
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B198
|
|
||||||
ldrh r3, [r4, #4]
|
|
||||||
ldrb r1, [r4, #6]
|
|
||||||
movs r0, #1
|
|
||||||
ands r0, r1
|
|
||||||
movs r2, #1
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B190
|
|
||||||
movs r2, #2
|
|
||||||
_0804B190:
|
|
||||||
movs r0, #0x74
|
|
||||||
adds r1, r3, #0
|
|
||||||
bl SetTileType
|
|
||||||
_0804B198:
|
|
||||||
adds r4, #8
|
|
||||||
ldr r0, _0804B1A8 @ =gPaletteBuffer
|
|
||||||
cmp r4, r0
|
|
||||||
blo _0804B170
|
|
||||||
pop {r4, pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0804B1A4: .4byte gUnk_02017660
|
|
||||||
_0804B1A8: .4byte gPaletteBuffer
|
|
||||||
|
|
||||||
thumb_func_start LoadRoomTileEntities
|
|
||||||
LoadRoomTileEntities: @ 0x0804B1AC
|
|
||||||
push {r4, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
cmp r4, #0
|
|
||||||
beq _0804B25A
|
|
||||||
b _0804B254
|
|
||||||
_0804B1B6:
|
|
||||||
ldrb r0, [r4]
|
|
||||||
subs r0, #1
|
|
||||||
cmp r0, #0xc
|
|
||||||
bhi _0804B252
|
|
||||||
lsls r0, r0, #2
|
|
||||||
ldr r1, _0804B1C8 @ =_0804B1CC
|
|
||||||
adds r0, r0, r1
|
|
||||||
ldr r0, [r0]
|
|
||||||
mov pc, r0
|
|
||||||
.align 2, 0
|
|
||||||
_0804B1C8: .4byte _0804B1CC
|
|
||||||
_0804B1CC: @ jump table
|
|
||||||
.4byte _0804B200 @ case 0
|
|
||||||
.4byte _0804B208 @ case 1
|
|
||||||
.4byte _0804B252 @ case 2
|
|
||||||
.4byte _0804B210 @ case 3
|
|
||||||
.4byte _0804B252 @ case 4
|
|
||||||
.4byte _0804B252 @ case 5
|
|
||||||
.4byte _0804B218 @ case 6
|
|
||||||
.4byte _0804B252 @ case 7
|
|
||||||
.4byte _0804B22C @ case 8
|
|
||||||
.4byte _0804B234 @ case 9
|
|
||||||
.4byte _0804B23C @ case 10
|
|
||||||
.4byte _0804B244 @ case 11
|
|
||||||
.4byte _0804B24C @ case 12
|
|
||||||
_0804B200:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B290
|
|
||||||
b _0804B252
|
|
||||||
_0804B208:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B29C
|
|
||||||
b _0804B252
|
|
||||||
_0804B210:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B300
|
|
||||||
b _0804B252
|
|
||||||
_0804B218:
|
|
||||||
ldr r0, _0804B224 @ =gArea
|
|
||||||
ldr r1, _0804B228 @ =0x00000864
|
|
||||||
adds r0, r0, r1
|
|
||||||
ldrb r1, [r4, #3]
|
|
||||||
str r1, [r0]
|
|
||||||
b _0804B252
|
|
||||||
.align 2, 0
|
|
||||||
_0804B224: .4byte gArea
|
|
||||||
_0804B228: .4byte 0x00000864
|
|
||||||
_0804B22C:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B334
|
|
||||||
b _0804B252
|
|
||||||
_0804B234:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B340
|
|
||||||
b _0804B252
|
|
||||||
_0804B23C:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B260
|
|
||||||
b _0804B252
|
|
||||||
_0804B244:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0804B27C
|
|
||||||
b _0804B252
|
|
||||||
_0804B24C:
|
|
||||||
ldr r1, _0804B25C @ =gRoomVars
|
|
||||||
ldrb r0, [r4, #3]
|
|
||||||
strb r0, [r1, #9]
|
|
||||||
_0804B252:
|
|
||||||
adds r4, #8
|
|
||||||
_0804B254:
|
|
||||||
ldrb r0, [r4]
|
|
||||||
cmp r0, #0
|
|
||||||
bne _0804B1B6
|
|
||||||
_0804B25A:
|
|
||||||
pop {r4, pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0804B25C: .4byte gRoomVars
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B260
|
|
||||||
sub_0804B260: @ 0x0804B260
|
|
||||||
push {lr}
|
|
||||||
ldrb r0, [r0, #1]
|
|
||||||
lsls r0, r0, #5
|
|
||||||
ldr r1, _0804B274 @ =gUnk_080015BC
|
|
||||||
adds r0, r0, r1
|
|
||||||
ldr r1, _0804B278 @ =gUnk_02034398
|
|
||||||
movs r2, #0x20
|
|
||||||
bl MemCopy
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0804B274: .4byte gUnk_080015BC
|
|
||||||
_0804B278: .4byte gUnk_02034398
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B27C
|
|
||||||
sub_0804B27C: @ 0x0804B27C
|
|
||||||
push {lr}
|
|
||||||
ldr r1, _0804B28C @ =gArea
|
|
||||||
ldrb r0, [r0, #1]
|
|
||||||
strb r0, [r1, #1]
|
|
||||||
bl sub_08054524
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0804B28C: .4byte gArea
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B290
|
|
||||||
sub_0804B290: @ 0x0804B290
|
|
||||||
push {lr}
|
|
||||||
ldrb r0, [r0, #1]
|
|
||||||
bl SetLocalFlag
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B29C
|
|
||||||
sub_0804B29C: @ 0x0804B29C
|
|
||||||
push {r4, lr}
|
|
||||||
adds r2, r0, #0
|
|
||||||
ldr r4, _0804B2EC @ =gUnk_02017660
|
|
||||||
movs r1, #0
|
|
||||||
_0804B2A4:
|
|
||||||
ldrh r0, [r4, #4]
|
|
||||||
cmp r0, #0
|
|
||||||
bne _0804B2F4
|
|
||||||
adds r0, r2, #0
|
|
||||||
adds r1, r4, #0
|
|
||||||
movs r2, #8
|
|
||||||
bl MemCopy
|
|
||||||
ldrb r1, [r4, #6]
|
|
||||||
movs r0, #1
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B2FC
|
|
||||||
ldr r0, _0804B2F0 @ =gRoomControls
|
|
||||||
ldrb r1, [r0, #0xf]
|
|
||||||
movs r0, #2
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B2FC
|
|
||||||
ldrb r0, [r4, #1]
|
|
||||||
bl CheckLocalFlag
|
|
||||||
cmp r0, #0
|
|
||||||
bne _0804B2FC
|
|
||||||
ldrb r1, [r4, #1]
|
|
||||||
movs r0, #0x52
|
|
||||||
movs r2, #0
|
|
||||||
bl CreateObject
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B2FC
|
|
||||||
ldrh r1, [r4, #4]
|
|
||||||
bl sub_0806F704
|
|
||||||
b _0804B2FC
|
|
||||||
.align 2, 0
|
|
||||||
_0804B2EC: .4byte gUnk_02017660
|
|
||||||
_0804B2F0: .4byte gRoomControls
|
|
||||||
_0804B2F4:
|
|
||||||
adds r1, #1
|
|
||||||
adds r4, #8
|
|
||||||
cmp r1, #7
|
|
||||||
bls _0804B2A4
|
|
||||||
_0804B2FC:
|
|
||||||
pop {r4, pc}
|
|
||||||
.align 2, 0
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B300
|
|
||||||
sub_0804B300: @ 0x0804B300
|
|
||||||
push {r4, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
bl GetEmptyManager
|
|
||||||
adds r1, r0, #0
|
|
||||||
cmp r1, #0
|
|
||||||
beq _0804B332
|
|
||||||
movs r0, #9
|
|
||||||
strb r0, [r1, #8]
|
|
||||||
movs r0, #0x24
|
|
||||||
strb r0, [r1, #9]
|
|
||||||
ldrh r0, [r4, #4]
|
|
||||||
strh r0, [r1, #0x38]
|
|
||||||
ldrh r0, [r4, #6]
|
|
||||||
strh r0, [r1, #0x3a]
|
|
||||||
ldrb r0, [r4, #2]
|
|
||||||
adds r2, r1, #0
|
|
||||||
adds r2, #0x35
|
|
||||||
strb r0, [r2]
|
|
||||||
ldrb r0, [r4, #1]
|
|
||||||
strh r0, [r1, #0x3e]
|
|
||||||
adds r0, r1, #0
|
|
||||||
movs r1, #6
|
|
||||||
bl AppendEntityToList
|
|
||||||
_0804B332:
|
|
||||||
pop {r4, pc}
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B334
|
|
||||||
sub_0804B334: @ 0x0804B334
|
|
||||||
push {lr}
|
|
||||||
ldrb r0, [r0, #3]
|
|
||||||
movs r1, #1
|
|
||||||
bl sub_0805BB00
|
|
||||||
pop {pc}
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B340
|
|
||||||
sub_0804B340: @ 0x0804B340
|
|
||||||
push {r4, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
ldrh r0, [r4, #2]
|
|
||||||
bl CheckLocalFlag
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0804B35A
|
|
||||||
ldrh r0, [r4, #6]
|
|
||||||
ldrh r1, [r4, #4]
|
|
||||||
ldrb r2, [r4, #1]
|
|
||||||
bl SetTileType
|
|
||||||
b _0804B380
|
|
||||||
_0804B35A:
|
|
||||||
ldr r1, _0804B384 @ =gRoomVars
|
|
||||||
ldrb r0, [r1, #1]
|
|
||||||
cmp r0, #0
|
|
||||||
bne _0804B380
|
|
||||||
movs r0, #1
|
|
||||||
strb r0, [r1, #1]
|
|
||||||
bl GetEmptyManager
|
|
||||||
adds r1, r0, #0
|
|
||||||
cmp r1, #0
|
|
||||||
beq _0804B380
|
|
||||||
movs r0, #9
|
|
||||||
strb r0, [r1, #8]
|
|
||||||
movs r0, #0x2a
|
|
||||||
strb r0, [r1, #9]
|
|
||||||
adds r0, r1, #0
|
|
||||||
movs r1, #6
|
|
||||||
bl AppendEntityToList
|
|
||||||
_0804B380:
|
|
||||||
pop {r4, pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0804B384: .4byte gRoomVars
|
|
||||||
|
|
||||||
thumb_func_start sub_0804B388
|
|
||||||
sub_0804B388: @ 0x0804B388
|
|
||||||
push {r4, r5, lr}
|
|
||||||
adds r5, r0, #0
|
|
||||||
adds r4, r1, #0
|
|
||||||
movs r0, #0x34
|
|
||||||
cmp r4, #1
|
|
||||||
bne _0804B396
|
|
||||||
movs r0, #0x26
|
|
||||||
_0804B396:
|
|
||||||
adds r1, r5, #0
|
|
||||||
adds r2, r4, #0
|
|
||||||
bl SetTileType
|
|
||||||
movs r0, #0xf
|
|
||||||
movs r1, #2
|
|
||||||
movs r2, #0
|
|
||||||
bl CreateObject
|
|
||||||
adds r1, r0, #0
|
|
||||||
cmp r1, #0
|
|
||||||
beq _0804B3BA
|
|
||||||
adds r0, #0x38
|
|
||||||
strb r4, [r0]
|
|
||||||
adds r0, r1, #0
|
|
||||||
adds r1, r5, #0
|
|
||||||
bl sub_0806F704
|
|
||||||
_0804B3BA:
|
|
||||||
movs r0, #1
|
|
||||||
rsbs r0, r0, #0
|
|
||||||
bl sub_080526F8
|
|
||||||
pop {r4, r5, pc}
|
|
|
@ -107,7 +107,6 @@ extern void sub_080AD9B0(void);
|
||||||
extern void sub_080AD918(void);
|
extern void sub_080AD918(void);
|
||||||
extern void sub_0801E104(void);
|
extern void sub_0801E104(void);
|
||||||
extern void sub_080A57F4(void);
|
extern void sub_080A57F4(void);
|
||||||
extern void sub_0804B29C(void*);
|
|
||||||
extern void sub_08030118(u32);
|
extern void sub_08030118(u32);
|
||||||
extern void sub_080575C8(u32);
|
extern void sub_080575C8(u32);
|
||||||
extern void sub_08057688(void);
|
extern void sub_08057688(void);
|
||||||
|
@ -295,4 +294,6 @@ extern void sub_0801855C(void);
|
||||||
extern u32 sub_0807CAEC(u32);
|
extern u32 sub_0807CAEC(u32);
|
||||||
extern void sub_0807CAC8(u32);
|
extern void sub_0807CAC8(u32);
|
||||||
extern void LoadObjPalette(Entity*, u32);
|
extern void LoadObjPalette(Entity*, u32);
|
||||||
|
|
||||||
|
void sub_0804B3C4(void*);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -149,6 +149,18 @@ extern struct {
|
||||||
|
|
||||||
extern DiggingCaveEntrance* diggingCaveEntrances[];
|
extern DiggingCaveEntrance* diggingCaveEntrances[];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Manager manager;
|
||||||
|
u8 field_0x20[0x15];
|
||||||
|
u8 field_0x35;
|
||||||
|
u8 field_0x36;
|
||||||
|
u8 field_0x37;
|
||||||
|
s16 x;
|
||||||
|
u16 y;
|
||||||
|
u16 tile;
|
||||||
|
u16 field_0x3e;
|
||||||
|
} Manager24;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 unk_00;
|
u8 unk_00;
|
||||||
u8 unk_01;
|
u8 unk_01;
|
||||||
|
|
|
@ -74,7 +74,8 @@ typedef struct {
|
||||||
u8 filler4[48];
|
u8 filler4[48];
|
||||||
u8 filler5[28];
|
u8 filler5[28];
|
||||||
u32 animFlags;
|
u32 animFlags;
|
||||||
void* field_0x6c[24];
|
void* field_0x6c[8];
|
||||||
|
void* field_0x8c[16];
|
||||||
} RoomVars;
|
} RoomVars;
|
||||||
static_assert(sizeof(RoomVars) == 0xCC);
|
static_assert(sizeof(RoomVars) == 0xCC);
|
||||||
extern RoomVars gRoomVars;
|
extern RoomVars gRoomVars;
|
||||||
|
|
|
@ -481,11 +481,8 @@ SECTIONS {
|
||||||
src/createEnemy.o(.text);
|
src/createEnemy.o(.text);
|
||||||
src/code_0804AA84.o(.text);
|
src/code_0804AA84.o(.text);
|
||||||
asm/code_0804AA84.o(.text);
|
asm/code_0804AA84.o(.text);
|
||||||
src/loadRoom.o(.text);
|
|
||||||
asm/code_0804B058.o(.text);
|
|
||||||
src/room.o(.text);
|
src/room.o(.text);
|
||||||
src/code_0804B9F8.o(.text);
|
src/roomInit.o(.text);
|
||||||
src/sub_08050008.o(.text);
|
|
||||||
src/fade.o(.text);
|
src/fade.o(.text);
|
||||||
asm/code_08050038.o(.text);
|
asm/code_08050038.o(.text);
|
||||||
src/fileScreen.o(.text);
|
src/fileScreen.o(.text);
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
#include "global.h"
|
|
||||||
#include "utils.h"
|
|
||||||
#include "fileScreen.h"
|
|
||||||
|
|
||||||
extern u16 gPaletteBuffer[];
|
|
||||||
extern u32 gUsedPalettes;
|
|
||||||
|
|
||||||
// function pointer to overlay (0x03005e98) in ram calls rom function MakeFadeBuff256
|
|
||||||
extern u32 gMakeFadeBuff256;
|
|
||||||
typedef void (*fptrMakeFadeBuff256)(u8*, u8*, u16, u8);
|
|
||||||
|
|
||||||
void FadeMain() {
|
|
||||||
fptrMakeFadeBuff256 func;
|
|
||||||
u32 usedPalettesTmp, palIdx;
|
|
||||||
|
|
||||||
struct_020354C0* ptrUnk = gUnk_020354C0;
|
|
||||||
usedPalettesTmp = gUsedPalettes;
|
|
||||||
gUsedPalettes = 0;
|
|
||||||
palIdx = 0;
|
|
||||||
|
|
||||||
while (usedPalettesTmp != 0) {
|
|
||||||
if ((usedPalettesTmp & 1) == 1) {
|
|
||||||
func = (fptrMakeFadeBuff256)&gMakeFadeBuff256;
|
|
||||||
func(&((u8*)gPaletteBuffer)[palIdx], &PAL_RAM[palIdx], ptrUnk->unk2, ptrUnk->unk1);
|
|
||||||
}
|
|
||||||
palIdx += 0x20;
|
|
||||||
|
|
||||||
ptrUnk++;
|
|
||||||
usedPalettesTmp /= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804FFE4() {
|
|
||||||
MemClear(&gFadeControl, sizeof(gFadeControl));
|
|
||||||
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
|
||||||
gFadeControl.mask = 0xffffffff;
|
|
||||||
}
|
|
53
src/fade.c
53
src/fade.c
|
@ -1,6 +1,7 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 field_0x0;
|
u8 field_0x0;
|
||||||
|
@ -11,10 +12,52 @@ typedef struct {
|
||||||
extern struct_03000000 gUnk_03000000;
|
extern struct_03000000 gUnk_03000000;
|
||||||
|
|
||||||
extern u32 gUsedPalettes;
|
extern u32 gUsedPalettes;
|
||||||
|
extern u16 gPaletteBuffer[];
|
||||||
|
|
||||||
|
// function pointer to overlay (0x03005e98) in ram calls rom function MakeFadeBuff256
|
||||||
|
extern u32 gMakeFadeBuff256;
|
||||||
|
typedef void (*fptrMakeFadeBuff256)(u8*, u8*, u16, u8);
|
||||||
|
|
||||||
|
void sub_0804FF84(u32 arg0) {
|
||||||
|
gSaveHeader->brightnessPref = arg0;
|
||||||
|
gUsedPalettes = 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FadeMain() {
|
||||||
|
fptrMakeFadeBuff256 func;
|
||||||
|
u32 usedPalettesTmp, palIdx;
|
||||||
|
|
||||||
|
struct_020354C0* ptrUnk = gUnk_020354C0;
|
||||||
|
usedPalettesTmp = gUsedPalettes;
|
||||||
|
gUsedPalettes = 0;
|
||||||
|
palIdx = 0;
|
||||||
|
|
||||||
|
while (usedPalettesTmp != 0) {
|
||||||
|
if ((usedPalettesTmp & 1) == 1) {
|
||||||
|
func = (fptrMakeFadeBuff256)&gMakeFadeBuff256;
|
||||||
|
func(&((u8*)gPaletteBuffer)[palIdx], &PAL_RAM[palIdx], ptrUnk->unk2, ptrUnk->unk1);
|
||||||
|
}
|
||||||
|
palIdx += 0x20;
|
||||||
|
|
||||||
|
ptrUnk++;
|
||||||
|
usedPalettesTmp /= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_0804FFE4() {
|
||||||
|
MemClear(&gFadeControl, sizeof(gFadeControl));
|
||||||
|
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
||||||
|
gFadeControl.mask = 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_08050008() {
|
||||||
|
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
||||||
|
gFadeControl.mask = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
void sub_08050024() {
|
void sub_08050024() {
|
||||||
sub_0801E104();
|
sub_0801E104();
|
||||||
DoFade(5, 0x80 << 1);
|
DoFade(5, 256);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_08050038(u32 arg0) {
|
void sub_08050038(u32 arg0) {
|
||||||
|
@ -31,22 +74,22 @@ void DoFade(u32 fadeType, u32 fadeSpeed) {
|
||||||
gFadeControl.active = 1;
|
gFadeControl.active = 1;
|
||||||
gFadeControl.fadeDuration = 0x100;
|
gFadeControl.fadeDuration = 0x100;
|
||||||
gFadeControl.field_0xe = 0;
|
gFadeControl.field_0xe = 0;
|
||||||
if ((gFadeControl.fadeType & 2) != 0) {
|
if (gFadeControl.fadeType & 2) {
|
||||||
gFadeControl.field_0x2 = 0xf8;
|
gFadeControl.field_0x2 = 0xf8;
|
||||||
} else {
|
} else {
|
||||||
gFadeControl.field_0x2 = 0;
|
gFadeControl.field_0x2 = 0;
|
||||||
}
|
}
|
||||||
if ((fadeType & 8) != 0) {
|
if (fadeType & 8) {
|
||||||
gUnk_03000000.spritesOffset = 1;
|
gUnk_03000000.spritesOffset = 1;
|
||||||
gScreen.bg1.control |= BGCNT_MOSAIC;
|
gScreen.bg1.control |= BGCNT_MOSAIC;
|
||||||
gScreen.bg2.control |= BGCNT_MOSAIC;
|
gScreen.bg2.control |= BGCNT_MOSAIC;
|
||||||
gScreen.bg3.control |= BGCNT_MOSAIC;
|
gScreen.bg3.control |= BGCNT_MOSAIC;
|
||||||
}
|
}
|
||||||
if ((fadeType & 0x10) != 0) {
|
if (fadeType & 0x10) {
|
||||||
sub_0801E1B8(gFadeControl.field_0x16, gFadeControl.field_0x18);
|
sub_0801E1B8(gFadeControl.field_0x16, gFadeControl.field_0x18);
|
||||||
sub_0801E1EC(gFadeControl.field_0x12, gFadeControl.field_0x14, gFadeControl.field_0x10);
|
sub_0801E1EC(gFadeControl.field_0x12, gFadeControl.field_0x14, gFadeControl.field_0x10);
|
||||||
if ((fadeType & 1) == 0) {
|
if ((fadeType & 1) == 0) {
|
||||||
gFadeControl.fadeType &= 0xfffb;
|
gFadeControl.fadeType &= ~4;
|
||||||
sub_08050008();
|
sub_08050008();
|
||||||
gUsedPalettes = 0xffffffff;
|
gUsedPalettes = 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
222
src/loadRoom.c
222
src/loadRoom.c
|
@ -1,222 +0,0 @@
|
||||||
#include "global.h"
|
|
||||||
#include "area.h"
|
|
||||||
#include "room.h"
|
|
||||||
#include "flags.h"
|
|
||||||
#include "functions.h"
|
|
||||||
#include "utils.h"
|
|
||||||
|
|
||||||
extern void sub_0804B058(EntityData* dat);
|
|
||||||
extern void sub_0801AC98();
|
|
||||||
extern u32 sub_08049D1C(u32);
|
|
||||||
extern Entity* LoadRoomEntity(EntityData*);
|
|
||||||
extern void* GetRoomProperty(u32, u32, u32);
|
|
||||||
|
|
||||||
extern void** gCurrentRoomProperties;
|
|
||||||
extern void*** gAreaTable[];
|
|
||||||
extern u8 gUnk_081091E4[];
|
|
||||||
|
|
||||||
extern void sub_080186EC();
|
|
||||||
extern void sub_0804B16C();
|
|
||||||
extern void sub_080A7C7C(void);
|
|
||||||
extern Entity* GetEmptyEntityByKind(u32 kind);
|
|
||||||
|
|
||||||
void RegisterRoomEntity(Entity*, EntityData*);
|
|
||||||
void sub_0804AF0C(Entity*, EntityData*);
|
|
||||||
void sub_0804AFB0(void** properties);
|
|
||||||
|
|
||||||
void LoadRoomEntityList(EntityData* listPtr) {
|
|
||||||
if (listPtr != NULL) {
|
|
||||||
while (listPtr->kind != 0xFF) {
|
|
||||||
LoadRoomEntity(listPtr++);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NONMATCH("asm/loadRoomEntity.s", Entity* LoadRoomEntity(EntityData* dat)) {
|
|
||||||
int kind;
|
|
||||||
Entity* v4;
|
|
||||||
Entity* v5;
|
|
||||||
|
|
||||||
kind = dat->kind & 0xF;
|
|
||||||
if ((dat->flags & 0xF0) == 0x50 && DeepFindEntityByID(kind, dat->id))
|
|
||||||
return NULL;
|
|
||||||
v4 = GetEmptyEntityByKind(kind);
|
|
||||||
v5 = v4;
|
|
||||||
if (v4 != NULL) {
|
|
||||||
v4->kind = kind;
|
|
||||||
v4->id = dat->id;
|
|
||||||
v4->type = dat->type;
|
|
||||||
RegisterRoomEntity(v4, dat);
|
|
||||||
if ((dat->flags & 0xF0) != 16) {
|
|
||||||
v5->type2 = dat->type2;
|
|
||||||
v5->actionDelay = (dat->type2 & 0xFF00) >> 8;
|
|
||||||
if (kind == 9)
|
|
||||||
return v5;
|
|
||||||
sub_0804AF0C(v5, dat);
|
|
||||||
if (!v5->next)
|
|
||||||
return v5;
|
|
||||||
if ((dat->kind & 0x10) == 0) {
|
|
||||||
if ((dat->kind & 0x20) != 0) {
|
|
||||||
v5->collisionLayer = 2;
|
|
||||||
return v5;
|
|
||||||
}
|
|
||||||
if ((gRoomControls.unk6 & 2) == 0) {
|
|
||||||
sub_08016A30(v5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
v5->collisionLayer = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return v5;
|
|
||||||
}
|
|
||||||
END_NONMATCH
|
|
||||||
|
|
||||||
void RegisterRoomEntity(Entity* ent, EntityData* dat) {
|
|
||||||
u32 list;
|
|
||||||
u32 kind;
|
|
||||||
void* offset;
|
|
||||||
|
|
||||||
list = dat->flags & 0xF;
|
|
||||||
kind = dat->kind & 0xF;
|
|
||||||
if (ent->prev == NULL) {
|
|
||||||
if (list == 0xF) {
|
|
||||||
AppendEntityToList(ent, gUnk_081091E4[kind]);
|
|
||||||
} else if (list == 8) {
|
|
||||||
AppendEntityToList(ent, 8);
|
|
||||||
} else {
|
|
||||||
AppendEntityToList(ent, list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
offset = &ent->field_0x78;
|
|
||||||
if (kind == MANAGER)
|
|
||||||
offset = &ent->y;
|
|
||||||
MemCopy(dat, offset, sizeof(EntityData));
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804AF0C(Entity* ent, EntityData* dat) {
|
|
||||||
switch (dat->flags & 0xf0) {
|
|
||||||
case 0x0:
|
|
||||||
ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX;
|
|
||||||
ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY;
|
|
||||||
break;
|
|
||||||
case 0x20:
|
|
||||||
ent->field_0x6c.HALF.HI |= 0x20;
|
|
||||||
ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX;
|
|
||||||
ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY;
|
|
||||||
break;
|
|
||||||
case 0x40:
|
|
||||||
ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX;
|
|
||||||
ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY;
|
|
||||||
if (!StartCutscene(ent, (u16*)dat->spritePtr))
|
|
||||||
DeleteEntity(ent);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804AF90(void) {
|
|
||||||
sub_0804AFB0(gArea.pCurrentRoomInfo->properties);
|
|
||||||
sub_080A7C7C();
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804AFB0(void** properties) {
|
|
||||||
u32 i;
|
|
||||||
|
|
||||||
gCurrentRoomProperties = properties;
|
|
||||||
for (i = 0; i < 8; ++i) {
|
|
||||||
gRoomVars.field_0x6c[i] = gCurrentRoomProperties[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 sub_0804AFDC() {
|
|
||||||
u32 result;
|
|
||||||
u32 (*func)();
|
|
||||||
|
|
||||||
result = 1;
|
|
||||||
func = (u32(*)())GetCurrentRoomProperty(6);
|
|
||||||
if (func != NULL)
|
|
||||||
result = func();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804AFF4(void) {
|
|
||||||
void (*func)();
|
|
||||||
|
|
||||||
sub_080186EC();
|
|
||||||
func = (void (*)())GetCurrentRoomProperty(5);
|
|
||||||
if (func) {
|
|
||||||
func();
|
|
||||||
}
|
|
||||||
func = (void (*)())GetCurrentRoomProperty(7);
|
|
||||||
if (func) {
|
|
||||||
func();
|
|
||||||
}
|
|
||||||
sub_0804B16C();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadRoom(void) {
|
|
||||||
LoadRoomEntityList(GetCurrentRoomProperty(1));
|
|
||||||
LoadRoomEntityList(GetCurrentRoomProperty(0));
|
|
||||||
|
|
||||||
if (CheckGlobalFlag(TABIDACHI))
|
|
||||||
sub_0804B058(GetCurrentRoomProperty(2));
|
|
||||||
|
|
||||||
LoadRoomTileEntities(GetCurrentRoomProperty(3));
|
|
||||||
sub_0801AC98();
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804B058(EntityData* dat) {
|
|
||||||
Entity* ent;
|
|
||||||
u32 uVar2;
|
|
||||||
|
|
||||||
if ((dat != NULL) && dat->kind != 0xff) {
|
|
||||||
uVar2 = 0;
|
|
||||||
do {
|
|
||||||
if ((uVar2 < 0x20) && ((dat->kind & 0xF) == 3)) {
|
|
||||||
if (sub_08049D1C(uVar2) != 0) {
|
|
||||||
ent = LoadRoomEntity(dat);
|
|
||||||
if ((ent != NULL) && (ent->kind == 3)) {
|
|
||||||
ent->field_0x6c.HALF.LO = uVar2 | 0x80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LoadRoomEntity(dat);
|
|
||||||
}
|
|
||||||
uVar2++;
|
|
||||||
dat++;
|
|
||||||
} while (dat->kind != 0xff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804B0B0(u32 arg0, u32 arg1) {
|
|
||||||
LoadRoomEntityList(GetRoomProperty(arg0, arg1, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetCurrentRoomPropertyList(u32 area, u32 room) {
|
|
||||||
gCurrentRoomProperties = NULL;
|
|
||||||
if (gAreaTable[area] != NULL) {
|
|
||||||
gCurrentRoomProperties = gAreaTable[area][room];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sub_0804B0E8(u32 arg0, u32 arg1) {
|
|
||||||
void (*func)();
|
|
||||||
|
|
||||||
// init function at index 4 of room data
|
|
||||||
|
|
||||||
func = (void (*)())GetRoomProperty(arg0, arg1, 4);
|
|
||||||
if (func != NULL) {
|
|
||||||
func();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void* GetRoomProperty(u32 area, u32 room, u32 property) {
|
|
||||||
void** temp;
|
|
||||||
temp = NULL;
|
|
||||||
if (gAreaTable[area] != NULL) {
|
|
||||||
temp = gAreaTable[area][room];
|
|
||||||
if (temp != NULL) {
|
|
||||||
temp = temp[property];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return temp;
|
|
||||||
}
|
|
|
@ -6,18 +6,6 @@
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "area.h"
|
#include "area.h"
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
Manager manager;
|
|
||||||
u8 field_0x20[0x15];
|
|
||||||
u8 field_0x35;
|
|
||||||
u8 field_0x36;
|
|
||||||
u8 field_0x37;
|
|
||||||
s16 x;
|
|
||||||
u16 y;
|
|
||||||
u16 tile;
|
|
||||||
u16 field_0x3e;
|
|
||||||
} Manager24;
|
|
||||||
|
|
||||||
extern void (*const gUnk_08108CDC[])(Manager24*);
|
extern void (*const gUnk_08108CDC[])(Manager24*);
|
||||||
|
|
||||||
u32 sub_0805BFC4(u32, u32);
|
u32 sub_0805BFC4(u32, u32);
|
||||||
|
|
7050
src/room.c
7050
src/room.c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,8 +0,0 @@
|
||||||
#include "global.h"
|
|
||||||
#include "utils.h"
|
|
||||||
#include "structures.h"
|
|
||||||
|
|
||||||
void sub_08050008() {
|
|
||||||
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
|
||||||
gFadeControl.mask = 0xFFFFFFFF;
|
|
||||||
}
|
|
Loading…
Reference in New Issue