mirror of https://github.com/zeldaret/tmc.git
move entity update functions
This commit is contained in:
parent
313cc336f2
commit
fddb4abd53
11
Makefile
11
Makefile
|
@ -110,9 +110,14 @@ else
|
||||||
NODEP := 1
|
NODEP := 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#$(C_BUILDDIR)/need_interworking_file_name.o: CFLAGS += -mthumb-interwork
|
interwork := $(C_BUILDDIR)/interrupts.o \
|
||||||
$(C_BUILDDIR)/interrupts.o: CFLAGS += -mthumb-interwork
|
$(C_BUILDDIR)/collision.o \
|
||||||
$(C_BUILDDIR)/collision.o: CFLAGS += -mthumb-interwork
|
$(C_BUILDDIR)/playerItem.o \
|
||||||
|
$(C_BUILDDIR)/object.o \
|
||||||
|
$(C_BUILDDIR)/manager.o \
|
||||||
|
$(C_BUILDDIR)/npc.o
|
||||||
|
|
||||||
|
$(interwork): CFLAGS += -mthumb-interwork
|
||||||
$(C_BUILDDIR)/gba/m4a.o: CFLAGS = -O2 -mthumb-interwork -Wimplicit -Wparentheses -Werror -Wno-multichar
|
$(C_BUILDDIR)/gba/m4a.o: CFLAGS = -O2 -mthumb-interwork -Wimplicit -Wparentheses -Werror -Wno-multichar
|
||||||
$(C_BUILDDIR)/eeprom.o: CFLAGS = -O1 -mthumb-interwork -Wimplicit -Wparentheses -Werror -Wno-multichar
|
$(C_BUILDDIR)/eeprom.o: CFLAGS = -O1 -mthumb-interwork -Wimplicit -Wparentheses -Werror -Wno-multichar
|
||||||
|
|
||||||
|
|
|
@ -4,34 +4,6 @@
|
||||||
.section .rodata
|
.section .rodata
|
||||||
.align 2
|
.align 2
|
||||||
|
|
||||||
gUnk_080B3740:: @ 080B3740
|
|
||||||
.incbin "baserom.gba", 0x0B3740, 0x0000004
|
|
||||||
|
|
||||||
gUnk_080B3744:: @ 080B3744
|
|
||||||
.4byte sub_08018308
|
|
||||||
.4byte CollisionNoOp
|
|
||||||
.4byte CollisionNoOp
|
|
||||||
.4byte CollisionGroundItem
|
|
||||||
.4byte sub_08017B58
|
|
||||||
.4byte sub_08017EB0
|
|
||||||
.4byte sub_08017F3C
|
|
||||||
.4byte sub_08017F40
|
|
||||||
.4byte sub_0801802C
|
|
||||||
.4byte sub_08017DD4
|
|
||||||
.4byte sub_080180E8
|
|
||||||
.4byte sub_08017BBC
|
|
||||||
.4byte sub_08017C40
|
|
||||||
.4byte sub_08017D6C
|
|
||||||
.4byte sub_08017D28
|
|
||||||
.4byte sub_08018168
|
|
||||||
.4byte sub_08018228
|
|
||||||
.4byte sub_08018250
|
|
||||||
.4byte sub_08018288
|
|
||||||
.4byte sub_080182A8
|
|
||||||
.4byte sub_08017B1C
|
|
||||||
.4byte sub_08017CBC
|
|
||||||
.4byte sub_08017E88
|
|
||||||
|
|
||||||
gUnk_080B37A0:: @ 080B37A0
|
gUnk_080B37A0:: @ 080B37A0
|
||||||
.ifdef EU
|
.ifdef EU
|
||||||
@ TODO only small differences
|
@ TODO only small differences
|
||||||
|
|
|
@ -209,23 +209,29 @@ enum {
|
||||||
#define Direction8FromAnimationState(expr) (((expr) << 2)
|
#define Direction8FromAnimationState(expr) (((expr) << 2)
|
||||||
|
|
||||||
Entity* GetEmptyEntity(void);
|
Entity* GetEmptyEntity(void);
|
||||||
extern Entity* CreateEnemy(u32 id, u32 type);
|
void DrawEntity(Entity*);
|
||||||
extern Entity* CreateNPC(u32 id, u32 type, u32 type2);
|
Entity* CreateEnemy(u32 id, u32 type);
|
||||||
extern Entity* CreateObject(u32 id, u32 type, u32 type2);
|
Entity* CreateNPC(u32 id, u32 type, u32 type2);
|
||||||
extern Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2);
|
Entity* CreateObject(u32 id, u32 type, u32 type2);
|
||||||
extern Entity* CreateFx(Entity* parent, u32 type, u32 type2);
|
Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2);
|
||||||
|
Entity* CreateFx(Entity* parent, u32 type, u32 type2);
|
||||||
|
|
||||||
extern void InitializeAnimation(Entity*, u32);
|
void InitializeAnimation(Entity*, u32);
|
||||||
extern void InitAnimationForceUpdate(Entity*, u32);
|
void InitAnimationForceUpdate(Entity*, u32);
|
||||||
extern void UpdateAnimationSingleFrame(Entity*);
|
void UpdateAnimationSingleFrame(Entity*);
|
||||||
extern void UpdateSpriteForCollisionLayer(Entity*);
|
void UpdateSpriteForCollisionLayer(Entity*);
|
||||||
extern void GetNextFrame(Entity*);
|
void GetNextFrame(Entity*);
|
||||||
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
||||||
extern void SetExtraSpriteFrame(Entity*, u32, u32);
|
void SetExtraSpriteFrame(Entity*, u32, u32);
|
||||||
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
||||||
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
||||||
|
|
||||||
extern u32 GetFacingDirection(Entity*, Entity*);
|
u32 GetFacingDirection(Entity*, Entity*);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if entity should sleep this frame.
|
||||||
|
*/
|
||||||
|
bool32 CheckDontUpdate(Entity* this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Delete the entity currently in execution.
|
* @brief Delete the entity currently in execution.
|
||||||
|
|
|
@ -173,6 +173,8 @@ typedef struct MusicPlayer {
|
||||||
extern const MusicPlayer gMusicPlayers[];
|
extern const MusicPlayer gMusicPlayers[];
|
||||||
extern const Song gSongTable[];
|
extern const Song gSongTable[];
|
||||||
|
|
||||||
|
void m4aSoundMain(void);
|
||||||
|
void m4aSoundVSync(void);
|
||||||
void m4aSoundInit(void);
|
void m4aSoundInit(void);
|
||||||
void m4aSongNumStart(u16 n);
|
void m4aSongNumStart(u16 n);
|
||||||
void m4aSongNumStartOrContinue(u16 n);
|
void m4aSongNumStartOrContinue(u16 n);
|
||||||
|
|
|
@ -11,29 +11,19 @@ typedef struct {
|
||||||
} LcdControls;
|
} LcdControls;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u16 bg0Control;
|
u16 control;
|
||||||
u16 bg0xOffset;
|
u16 xOffset;
|
||||||
u16 bg0yOffset;
|
u16 yOffset;
|
||||||
u16 bg0Updated;
|
u16 updated;
|
||||||
void* bg0Tilemap;
|
void* tilemap;
|
||||||
u16 bg1Control;
|
|
||||||
u16 bg1xOffset;
|
|
||||||
u16 bg1yOffset;
|
|
||||||
u16 bg1Updated;
|
|
||||||
void* bg1Tilemap;
|
|
||||||
} BgSettings;
|
} BgSettings;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u16 bg2Control;
|
u16 control;
|
||||||
u16 bg2xOffset;
|
s16 xOffset;
|
||||||
u16 bg2yOffset;
|
s16 yOffset;
|
||||||
u16 bg2Updated;
|
u16 updated;
|
||||||
void* bg2Tilemap;
|
void* tilemap;
|
||||||
u16 bg3Control;
|
|
||||||
s16 bg3xOffset;
|
|
||||||
s16 bg3yOffset;
|
|
||||||
u16 bg3Updated;
|
|
||||||
void* bg3Tilemap;
|
|
||||||
} BgAffSettings;
|
} BgAffSettings;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -67,8 +57,10 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/*0x00*/ LcdControls lcd;
|
/*0x00*/ LcdControls lcd;
|
||||||
/*0x08*/ BgSettings bg;
|
/*0x08*/ BgSettings bg0;
|
||||||
/*0x20*/ BgAffSettings affine;
|
/*0x14*/ BgSettings bg1;
|
||||||
|
/*0x20*/ BgAffSettings bg2;
|
||||||
|
/*0x2c*/ BgAffSettings bg3;
|
||||||
/*0x38*/ BgControls controls;
|
/*0x38*/ BgControls controls;
|
||||||
/*0x6c*/ u8 _6c;
|
/*0x6c*/ u8 _6c;
|
||||||
/*0x6d*/ u8 _6d;
|
/*0x6d*/ u8 _6d;
|
||||||
|
|
|
@ -332,6 +332,10 @@ SECTIONS {
|
||||||
|
|
||||||
/* C source compiled with interworking */
|
/* C source compiled with interworking */
|
||||||
src/interrupts.o(.text);
|
src/interrupts.o(.text);
|
||||||
|
src/playerItem.o(.text);
|
||||||
|
src/object.o(.text);
|
||||||
|
src/manager.o(.text);
|
||||||
|
src/npc.o(.text);
|
||||||
src/collision.o(.text);
|
src/collision.o(.text);
|
||||||
/* C source compiled without interworking */
|
/* C source compiled without interworking */
|
||||||
asm/code_08018500.o(.text);
|
asm/code_08018500.o(.text);
|
||||||
|
@ -972,10 +976,12 @@ SECTIONS {
|
||||||
asm/intr.o(.text);
|
asm/intr.o(.text);
|
||||||
/* data */
|
/* data */
|
||||||
data/data_080B2A70.o(.rodata);
|
data/data_080B2A70.o(.rodata);
|
||||||
|
src/interrupts.o(.rodata);
|
||||||
src/playerItem.o(.rodata);
|
src/playerItem.o(.rodata);
|
||||||
src/object.o(.rodata);
|
src/object.o(.rodata);
|
||||||
src/manager.o(.rodata);
|
src/manager.o(.rodata);
|
||||||
src/npc.o(.rodata);
|
src/npc.o(.rodata);
|
||||||
|
src/collision.o(.rodata);
|
||||||
data/data_080B3740.o(.rodata);
|
data/data_080B3740.o(.rodata);
|
||||||
data/const/playerItem/playerItem11.o(.rodata);
|
data/const/playerItem/playerItem11.o(.rodata);
|
||||||
data/const/playerItem/playerItemBow.o(.rodata);
|
data/const/playerItem/playerItemBow.o(.rodata);
|
||||||
|
|
|
@ -284,7 +284,7 @@ void sub_08017940(Entity* org, Entity* tgt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_080179EC(Entity* a1, Entity* a2) {
|
void sub_080179EC(Entity* a1, Entity* a2) {
|
||||||
u8* p = gUnk_080B3740;
|
const u8* p = (const u8[]){ FX_27, FX_32, FX_33, FX_34 };
|
||||||
u32 rand = Random();
|
u32 rand = Random();
|
||||||
Entity* e = CreateFx(a2, p[rand & 3], 0);
|
Entity* e = CreateFx(a2, p[rand & 3], 0);
|
||||||
if (e != NULL) {
|
if (e != NULL) {
|
||||||
|
@ -310,13 +310,44 @@ Entity* sub_08017A90(Entity* a1, Entity* parent) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CollisionNoOp(Entity* org, Entity* tgt, u32 direction) {
|
typedef s32 (*CollisionHandler)(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 CollisionNoOp(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 CollisionGroundItem(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017EB0(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017F3C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017F40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_0801802C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017DD4(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_080180E8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017D6C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017D28(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08018168(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08018228(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08018250(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08018288(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_080182A8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017CBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
s32 sub_08017E88(Entity* org, Entity* tgt, u32 direction, ColSettings* settings);
|
||||||
|
|
||||||
|
const CollisionHandler gUnk_080B3744[] = {
|
||||||
|
sub_08018308, CollisionNoOp, CollisionNoOp, CollisionGroundItem, sub_08017B58, sub_08017EB0,
|
||||||
|
sub_08017F3C, sub_08017F40, sub_0801802C, sub_08017DD4, sub_080180E8, sub_08017BBC,
|
||||||
|
sub_08017C40, sub_08017D6C, sub_08017D28, sub_08018168, sub_08018228, sub_08018250,
|
||||||
|
sub_08018288, sub_080182A8, sub_08017B1C, sub_08017CBC, sub_08017E88,
|
||||||
|
};
|
||||||
|
|
||||||
|
s32 CollisionNoOp(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// origin: player or sword
|
// origin: player or sword
|
||||||
// target: item
|
// target: item
|
||||||
s32 CollisionGroundItem(Entity* org, Entity* tgt, u32 direction) {
|
s32 CollisionGroundItem(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
COLLISION_OFF(tgt);
|
COLLISION_OFF(tgt);
|
||||||
tgt->bitfield = org->hurtType | 0x80;
|
tgt->bitfield = org->hurtType | 0x80;
|
||||||
if ((tgt->type == 0x5F || tgt->type == 0x60) && sub_08081420(tgt))
|
if ((tgt->type == 0x5F || tgt->type == 0x60) && sub_08081420(tgt))
|
||||||
|
@ -324,7 +355,7 @@ s32 CollisionGroundItem(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if ((gPlayerState.field_0x1d[1] & 0x60) != 0) {
|
if ((gPlayerState.field_0x1d[1] & 0x60) != 0) {
|
||||||
COLLISION_OFF(tgt);
|
COLLISION_OFF(tgt);
|
||||||
} else {
|
} else {
|
||||||
|
@ -335,7 +366,7 @@ s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if ((tgt->field_0x3a & 4) != 0) {
|
if ((tgt->field_0x3a & 4) != 0) {
|
||||||
if (tgt->field_0x1d) {
|
if (tgt->field_0x1d) {
|
||||||
s32 x = tgt->field_0x1d = tgt->field_0x1d - gPlayerState.field_0x1d[0];
|
s32 x = tgt->field_0x1d = tgt->field_0x1d - gPlayerState.field_0x1d[0];
|
||||||
|
@ -354,7 +385,7 @@ s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if ((gPlayerState.flags & (0x1 | 0x80 | 0x400 | 0x1000)) == 0) {
|
if ((gPlayerState.flags & (0x1 | 0x80 | 0x400 | 0x1000)) == 0) {
|
||||||
Entity* e = CreateObject(66, 1, 0);
|
Entity* e = CreateObject(66, 1, 0);
|
||||||
if (e != NULL) {
|
if (e != NULL) {
|
||||||
|
@ -373,7 +404,7 @@ s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if ((gPlayerState.flags & (0x1 | 0x80 | 0x800 | 0x1000)) == 0 && gPlayerState.playerAction == 0) {
|
if ((gPlayerState.flags & (0x1 | 0x80 | 0x800 | 0x1000)) == 0 && gPlayerState.playerAction == 0) {
|
||||||
if (org->action == 1 || org->action == 24) {
|
if (org->action == 1 || org->action == 24) {
|
||||||
tgt->damage = 4;
|
tgt->damage = 4;
|
||||||
|
@ -390,7 +421,8 @@ s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
NONMATCH("asm/non_matching/collision/sub_08017CBC.inc", s32 sub_08017CBC(Entity* org, Entity* tgt, u32 direction)) {
|
NONMATCH("asm/non_matching/collision/sub_08017CBC.inc",
|
||||||
|
s32 sub_08017CBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)) {
|
||||||
if (((-(((direction ^ 0x10) - 0xc) & 0x1f) + tgt->direction) & 0x1f) < 0x19) {
|
if (((-(((direction ^ 0x10) - 0xc) & 0x1f) + tgt->direction) & 0x1f) < 0x19) {
|
||||||
org->iframes = -12;
|
org->iframes = -12;
|
||||||
tgt->iframes = -12;
|
tgt->iframes = -12;
|
||||||
|
@ -407,7 +439,7 @@ NONMATCH("asm/non_matching/collision/sub_08017CBC.inc", s32 sub_08017CBC(Entity*
|
||||||
}
|
}
|
||||||
END_NONMATCH
|
END_NONMATCH
|
||||||
|
|
||||||
s32 sub_08017D28(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017D28(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
gPlayerState.field_0x1a[0] = 1;
|
gPlayerState.field_0x1a[0] = 1;
|
||||||
org->field_0x7a.HWORD = 600;
|
org->field_0x7a.HWORD = 600;
|
||||||
org->knockbackDuration = 12;
|
org->knockbackDuration = 12;
|
||||||
|
@ -418,7 +450,7 @@ s32 sub_08017D28(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017D6C(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017D6C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
u32 x;
|
u32 x;
|
||||||
u32 y;
|
u32 y;
|
||||||
ColSettings* p;
|
ColSettings* p;
|
||||||
|
@ -436,7 +468,7 @@ s32 sub_08017D6C(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return sub_08018308(org, tgt, direction, p);
|
return sub_08018308(org, tgt, direction, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sub_08017DD4(Entity* org, Entity* tgt, u32 direction) {
|
int sub_08017DD4(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
org->bitfield = 0;
|
org->bitfield = 0;
|
||||||
if (tgt->damage & 0x80)
|
if (tgt->damage & 0x80)
|
||||||
tgt->damage &= ~0x80;
|
tgt->damage &= ~0x80;
|
||||||
|
@ -459,7 +491,7 @@ int sub_08017DD4(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017E88(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017E88(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
org->knockbackDuration = 2;
|
org->knockbackDuration = 2;
|
||||||
org->field_0x46 = 640;
|
org->field_0x46 = 640;
|
||||||
if (tgt->iframes == 0)
|
if (tgt->iframes == 0)
|
||||||
|
@ -467,7 +499,7 @@ s32 sub_08017E88(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017EB0(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017EB0(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if (tgt->damage == 0)
|
if (tgt->damage == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (org == &gPlayerEntity) {
|
if (org == &gPlayerEntity) {
|
||||||
|
@ -489,14 +521,20 @@ s32 sub_08017EB0(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017F3C(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017F3C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08017F40(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08017F40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if (tgt->field_0x43 == 0) {
|
if (tgt->field_0x43 == 0) {
|
||||||
if (org == &gPlayerEntity) {
|
if (org == &gPlayerEntity) {
|
||||||
if (sub_08079F8C() && (gPlayerState.flags & 0x80) == 0 && !gPlayerState.swimState) {
|
if (sub_08079F8C() &&
|
||||||
|
#ifdef EU
|
||||||
|
(gPlayerState.flags & 0x81) == 0 &&
|
||||||
|
#else
|
||||||
|
(gPlayerState.flags & 0x80) == 0 &&
|
||||||
|
#endif
|
||||||
|
!gPlayerState.swimState) {
|
||||||
gPlayerState.field_0x1a[0] |= 0x80u;
|
gPlayerState.field_0x1a[0] |= 0x80u;
|
||||||
gPlayerState.field_0xa |= 0x80u;
|
gPlayerState.field_0xa |= 0x80u;
|
||||||
gPlayerState.flags |= 0x10u;
|
gPlayerState.flags |= 0x10u;
|
||||||
|
@ -525,7 +563,8 @@ s32 sub_08017F40(Entity* org, Entity* tgt, u32 direction) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// inverted branch
|
// inverted branch
|
||||||
NONMATCH("asm/non_matching/collision/sub_0801802C.inc", s32 sub_0801802C(Entity* org, Entity* tgt, u32 direction)) {
|
NONMATCH("asm/non_matching/collision/sub_0801802C.inc",
|
||||||
|
s32 sub_0801802C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)) {
|
||||||
int kind;
|
int kind;
|
||||||
ColSettings* p;
|
ColSettings* p;
|
||||||
u32 x;
|
u32 x;
|
||||||
|
@ -558,7 +597,7 @@ void sub_080180BC(Entity* org, Entity* tgt) {
|
||||||
tgt->subAction = -1;
|
tgt->subAction = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_080180E8(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_080180E8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
u32 v3;
|
u32 v3;
|
||||||
u32 x;
|
u32 x;
|
||||||
|
|
||||||
|
@ -577,10 +616,16 @@ s32 sub_080180E8(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return sub_08018308(org, tgt, v3, &gCollisionMtx[org->hurtType + x]);
|
return sub_08018308(org, tgt, v3, &gCollisionMtx[org->hurtType + x]);
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08018168(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08018168(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if (tgt->field_0x43 == 0) {
|
if (tgt->field_0x43 == 0) {
|
||||||
if (org == &gPlayerEntity) {
|
if (org == &gPlayerEntity) {
|
||||||
if (((sub_08079F8C() != 0) && ((gPlayerState.flags & 0x40080) == 0)) && (gPlayerState.swimState == 0)) {
|
if (((sub_08079F8C() != 0) &&
|
||||||
|
#ifdef EU
|
||||||
|
((gPlayerState.flags & 0x81) == 0)) &&
|
||||||
|
#else
|
||||||
|
((gPlayerState.flags & 0x40080) == 0)) &&
|
||||||
|
#endif
|
||||||
|
(gPlayerState.swimState == 0)) {
|
||||||
gPlayerState.field_0x1a[0] |= 0x80;
|
gPlayerState.field_0x1a[0] |= 0x80;
|
||||||
gPlayerState.field_0xa |= 0x80;
|
gPlayerState.field_0xa |= 0x80;
|
||||||
gPlayerState.flags |= 0x100;
|
gPlayerState.flags |= 0x100;
|
||||||
|
@ -602,13 +647,13 @@ s32 sub_08018168(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08018228(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08018228(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if (org == &gPlayerEntity && sub_08079F8C())
|
if (org == &gPlayerEntity && sub_08079F8C())
|
||||||
sub_08004484(tgt, org);
|
sub_08004484(tgt, org);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08018250(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08018250(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
org->iframes = -1;
|
org->iframes = -1;
|
||||||
if (org->direction == 0) {
|
if (org->direction == 0) {
|
||||||
tgt->iframes = 16;
|
tgt->iframes = 16;
|
||||||
|
@ -619,7 +664,7 @@ s32 sub_08018250(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_08018288(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_08018288(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if (org == &gPlayerEntity)
|
if (org == &gPlayerEntity)
|
||||||
sub_0807AFE8();
|
sub_0807AFE8();
|
||||||
else
|
else
|
||||||
|
@ -627,7 +672,7 @@ s32 sub_08018288(Entity* org, Entity* tgt, u32 direction) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sub_080182A8(Entity* org, Entity* tgt, u32 direction) {
|
s32 sub_080182A8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
|
||||||
if (tgt->field_0x43 == 0) {
|
if (tgt->field_0x43 == 0) {
|
||||||
if (org->iframes == 0)
|
if (org->iframes == 0)
|
||||||
org->iframes = -1;
|
org->iframes = -1;
|
||||||
|
|
|
@ -18,12 +18,12 @@ void sub_0805FA04(void) {
|
||||||
MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
|
MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||||
MemClear(&gBG3Buffer, sizeof(gBG3Buffer));
|
MemClear(&gBG3Buffer, sizeof(gBG3Buffer));
|
||||||
gScreen.lcd.displayControl = 0x940;
|
gScreen.lcd.displayControl = 0x940;
|
||||||
gScreen.bg.bg0xOffset = 0;
|
gScreen.bg0.xOffset = 0;
|
||||||
gScreen.bg.bg0yOffset = 0;
|
gScreen.bg0.yOffset = 0;
|
||||||
gScreen.affine.bg3xOffset = 0;
|
gScreen.bg3.xOffset = 0;
|
||||||
gScreen.affine.bg3yOffset = 0;
|
gScreen.bg3.yOffset = 0;
|
||||||
gScreen.affine.bg3Control = 0x1e0f;
|
gScreen.bg3.control = 0x1e0f;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
MessageInitialize();
|
MessageInitialize();
|
||||||
MemClear((void*)&gUnk_02032EC0, sizeof(UI));
|
MemClear((void*)&gUnk_02032EC0, sizeof(UI));
|
||||||
MemClear((void*)&gMenu, sizeof(Menu));
|
MemClear((void*)&gMenu, sizeof(Menu));
|
||||||
|
@ -48,11 +48,11 @@ void sub_0805FA98(void) {
|
||||||
case 0x200:
|
case 0x200:
|
||||||
gMenu.focusCoords[0] ^= 1;
|
gMenu.focusCoords[0] ^= 1;
|
||||||
if (gMenu.focusCoords[0] == 0) {
|
if (gMenu.focusCoords[0] == 0) {
|
||||||
gScreen.bg.bg0Control = 0x1f0c;
|
gScreen.bg0.control = 0x1f0c;
|
||||||
gScreen.affine.bg3Control = 0x1e0f;
|
gScreen.bg3.control = 0x1e0f;
|
||||||
} else {
|
} else {
|
||||||
gScreen.bg.bg0Control = 0x1f0f;
|
gScreen.bg0.control = 0x1f0f;
|
||||||
gScreen.affine.bg3Control = 0x1e0c;
|
gScreen.bg3.control = 0x1e0c;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x100:
|
case 0x100:
|
||||||
|
@ -87,7 +87,7 @@ void sub_0805FA98(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gMenu.focusCoords[1] = (gMenu.focusCoords[1] + 3) % 3;
|
gMenu.focusCoords[1] = (gMenu.focusCoords[1] + 3) % 3;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805FBC4() {
|
void sub_0805FBC4() {
|
||||||
|
|
|
@ -49,12 +49,12 @@ void sub_080A2E40(void) {
|
||||||
MemCopy(&gUnk_08A05751, &gBG1Buffer, 0x800);
|
MemCopy(&gUnk_08A05751, &gBG1Buffer, 0x800);
|
||||||
MemCopy(&gUnk_08A05751[0x800], &gBG2Buffer, 0x800);
|
MemCopy(&gUnk_08A05751[0x800], &gBG2Buffer, 0x800);
|
||||||
gScreen.lcd.displayControl = 0x1f00;
|
gScreen.lcd.displayControl = 0x1f00;
|
||||||
gScreen.bg.bg1Control = 0x1c81;
|
gScreen.bg1.control = 0x1c81;
|
||||||
gScreen.affine.bg2Control = 0x1d82;
|
gScreen.bg2.control = 0x1d82;
|
||||||
gScreen.affine.bg3Control = 0x1e0b;
|
gScreen.bg3.control = 0x1e0b;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
gScreen.affine.bg2Updated = 1;
|
gScreen.bg2.updated = 1;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
gScreen.controls.layerFXControl = 0x1044;
|
gScreen.controls.layerFXControl = 0x1044;
|
||||||
gScreen.controls.alphaBlend = 0xb04;
|
gScreen.controls.alphaBlend = 0xb04;
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,8 +62,8 @@ void sub_0802A2FC(Entity* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0802A334(Entity* this) {
|
void sub_0802A334(Entity* this) {
|
||||||
u32 x = (this->x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg.bg1xOffset) >> 3;
|
u32 x = (this->x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg1.xOffset) >> 3;
|
||||||
u32 y = (this->y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg.bg1yOffset) >> 3;
|
u32 y = (this->y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg1.yOffset) >> 3;
|
||||||
if (gBG3Buffer[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
|
if (gBG3Buffer[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
|
||||||
this->collisionLayer = 2;
|
this->collisionLayer = 2;
|
||||||
} else {
|
} else {
|
||||||
|
@ -73,8 +73,8 @@ void sub_0802A334(Entity* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0802A39C(Entity* this) {
|
void sub_0802A39C(Entity* this) {
|
||||||
u32 x = (gPlayerEntity.x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg.bg1xOffset) >> 3;
|
u32 x = (gPlayerEntity.x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg1.xOffset) >> 3;
|
||||||
u32 y = (gPlayerEntity.y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg.bg1yOffset - 10) >> 3;
|
u32 y = (gPlayerEntity.y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg1.yOffset - 10) >> 3;
|
||||||
if (gBG3Buffer[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
|
if (gBG3Buffer[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
|
||||||
COLLISION_OFF(this);
|
COLLISION_OFF(this);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -38,9 +38,9 @@ void DoFade(u32 fadeType, u32 fadeSpeed) {
|
||||||
}
|
}
|
||||||
if ((fadeType & 8) != 0) {
|
if ((fadeType & 8) != 0) {
|
||||||
gUnk_03000000.spritesOffset = 1;
|
gUnk_03000000.spritesOffset = 1;
|
||||||
gScreen.bg.bg1Control |= 0x40;
|
gScreen.bg1.control |= 0x40;
|
||||||
gScreen.affine.bg2Control |= 0x40;
|
gScreen.bg2.control |= 0x40;
|
||||||
gScreen.affine.bg3Control |= 0x40;
|
gScreen.bg3.control |= 0x40;
|
||||||
}
|
}
|
||||||
if ((fadeType & 0x10) != 0) {
|
if ((fadeType & 0x10) != 0) {
|
||||||
sub_0801E1B8(gFadeControl.field_0x16, gFadeControl.field_0x18);
|
sub_0801E1B8(gFadeControl.field_0x16, gFadeControl.field_0x18);
|
||||||
|
|
|
@ -109,19 +109,19 @@ void CreateDialogBox(u32 arg0, u32 arg1) {
|
||||||
if (sfx) {
|
if (sfx) {
|
||||||
SoundReq(sfx);
|
SoundReq(sfx);
|
||||||
}
|
}
|
||||||
gScreen.bg.bg0Updated = 1;
|
gScreen.bg0.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_08050384(void) {
|
void sub_08050384(void) {
|
||||||
RecoverUI(0, 0);
|
RecoverUI(0, 0);
|
||||||
MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
|
MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||||
gScreen.bg.bg0Updated = 1;
|
gScreen.bg0.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_080503A8(u32 gfxGroup) {
|
void sub_080503A8(u32 gfxGroup) {
|
||||||
LoadGfxGroup(gfxGroup);
|
LoadGfxGroup(gfxGroup);
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
gScreen.affine.bg2Updated = 1;
|
gScreen.bg2.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetFileSelectState(FileSelectState mode) {
|
void SetFileSelectState(FileSelectState mode) {
|
||||||
|
@ -162,12 +162,12 @@ void HandleChooseFileScreen(void) {
|
||||||
sScreenHandlers[gMain.funcIndex]();
|
sScreenHandlers[gMain.funcIndex]();
|
||||||
if (gUnk_02032EC0.lastState != gUnk_02032EC0.state) {
|
if (gUnk_02032EC0.lastState != gUnk_02032EC0.state) {
|
||||||
gUnk_02032EC0.lastState = gUnk_02032EC0.state;
|
gUnk_02032EC0.lastState = gUnk_02032EC0.state;
|
||||||
gScreen.bg.bg0xOffset = 0;
|
gScreen.bg0.xOffset = 0;
|
||||||
gScreen.bg.bg0yOffset = 0;
|
gScreen.bg0.yOffset = 0;
|
||||||
gScreen.bg.bg1xOffset = 0;
|
gScreen.bg1.xOffset = 0;
|
||||||
gScreen.bg.bg1yOffset = 0;
|
gScreen.bg1.yOffset = 0;
|
||||||
gScreen.affine.bg2xOffset = 0;
|
gScreen.bg2.xOffset = 0;
|
||||||
gScreen.affine.bg2yOffset = 0;
|
gScreen.bg2.yOffset = 0;
|
||||||
MemClear(&gChooseFileState, sizeof(gChooseFileState));
|
MemClear(&gChooseFileState, sizeof(gChooseFileState));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ static void HandleFileScreenEnter(void) {
|
||||||
sub_080A70AC(&gUnk_080FC8D0);
|
sub_080A70AC(&gUnk_080FC8D0);
|
||||||
HideButtonR();
|
HideButtonR();
|
||||||
gScreen.lcd.displayControl |= DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
|
gScreen.lcd.displayControl |= DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
|
||||||
gScreen.affine.bg3Control = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30);
|
gScreen.bg3.control = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30);
|
||||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
||||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
|
gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
|
||||||
gUnk_02024490.unk0 = 1;
|
gUnk_02024490.unk0 = 1;
|
||||||
|
@ -525,7 +525,7 @@ void sub_08050AFC(u32 idx) {
|
||||||
if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) {
|
if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) {
|
||||||
sub_08050B3C(&gBG1Buffer[0x14E]);
|
sub_08050B3C(&gBG1Buffer[0x14E]);
|
||||||
}
|
}
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -859,8 +859,8 @@ void sub_08051090(void) {
|
||||||
sub_08050790();
|
sub_08050790();
|
||||||
sub_0805070C();
|
sub_0805070C();
|
||||||
sub_08051458();
|
sub_08051458();
|
||||||
gScreen.bg.bg1yOffset = 0xff;
|
gScreen.bg1.yOffset = 0xff;
|
||||||
gScreen.affine.bg2yOffset = 0xff;
|
gScreen.bg2.yOffset = 0xff;
|
||||||
sub_080A7114(1);
|
sub_080A7114(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -248,7 +248,7 @@ NONMATCH("asm/non_matching/game/sub_08052418.inc", void sub_08052418(int param_1
|
||||||
// temp._0 = gBG1Buffer[gUnk_080FCAA4._8[param_1]][gUnk_080FCAA4._0[gSaveHeader->gameLanguage + i]] * 2;
|
// temp._0 = gBG1Buffer[gUnk_080FCAA4._8[param_1]][gUnk_080FCAA4._0[gSaveHeader->gameLanguage + i]] * 2;
|
||||||
temp._13 = ((temp._13 & 0xfe) | gUnk_080FCAA4._8[i + 1]) & 1;
|
temp._13 = ((temp._13 & 0xfe) | gUnk_080FCAA4._8[i + 1]) & 1;
|
||||||
sub_0805F46C(gUnk_080FCAA4._a[param_1], &temp);
|
sub_0805F46C(gUnk_080FCAA4._a[param_1], &temp);
|
||||||
gScreen.bg.bg1xOffset = 1;
|
gScreen.bg1.xOffset = 1;
|
||||||
}
|
}
|
||||||
END_NONMATCH
|
END_NONMATCH
|
||||||
|
|
||||||
|
|
162
src/interrupts.c
162
src/interrupts.c
|
@ -7,11 +7,11 @@
|
||||||
#include "textbox.h"
|
#include "textbox.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "manager.h"
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "npc.h"
|
#include "npc.h"
|
||||||
#include "effects.h"
|
#include "effects.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
#include "gba/m4a.h"
|
||||||
|
|
||||||
extern u8 gUnk_03003DE0;
|
extern u8 gUnk_03003DE0;
|
||||||
extern u8 gUnk_03000C30;
|
extern u8 gUnk_03000C30;
|
||||||
|
@ -22,18 +22,19 @@ extern u8 gUpdateVisibleTiles;
|
||||||
extern u8 gUnk_03003DF0[];
|
extern u8 gUnk_03003DF0[];
|
||||||
extern u8 gUnk_03003BE0;
|
extern u8 gUnk_03003BE0;
|
||||||
extern Entity* gUnk_03004040[3];
|
extern Entity* gUnk_03004040[3];
|
||||||
extern u8 gUnk_020342F8;
|
extern u16 gUnk_080B2CD8[];
|
||||||
|
extern u32 gUnk_03000FBC;
|
||||||
|
|
||||||
extern void sub_080ADD70();
|
extern void sub_080ADD70();
|
||||||
extern void sub_0801C25C();
|
extern void sub_0801C25C();
|
||||||
extern void UpdateDisplayControls();
|
extern void UpdateDisplayControls();
|
||||||
extern void LoadResources();
|
extern void LoadResources();
|
||||||
extern void FadeMain();
|
extern void FadeMain();
|
||||||
extern u32 CheckDontUpdate();
|
|
||||||
extern void HandlePlayerLife();
|
extern void HandlePlayerLife();
|
||||||
extern void DoPlayerAction();
|
extern void DoPlayerAction();
|
||||||
extern void sub_080171F0();
|
extern void sub_080171F0();
|
||||||
extern void sub_08078FB0();
|
extern void sub_08078FB0();
|
||||||
|
extern u32 CheckDontUpdate();
|
||||||
extern void DrawEntity();
|
extern void DrawEntity();
|
||||||
extern void sub_0807A050();
|
extern void sub_0807A050();
|
||||||
extern u32 sub_08079B24();
|
extern u32 sub_08079B24();
|
||||||
|
@ -44,43 +45,8 @@ extern void sub_08078180(void);
|
||||||
extern void sub_0807B0C8(void);
|
extern void sub_0807B0C8(void);
|
||||||
extern void sub_0807A8D8(Entity*);
|
extern void sub_0807A8D8(Entity*);
|
||||||
extern void sub_08077FEC(u32);
|
extern void sub_08077FEC(u32);
|
||||||
extern void ItemInit(Entity*);
|
|
||||||
extern void InitObject(Entity*);
|
|
||||||
extern u32 ReadBit(void*, u32);
|
|
||||||
extern void InitNPC(Entity*);
|
|
||||||
extern void m4aSoundMain();
|
|
||||||
extern void m4aSoundVSync();
|
|
||||||
|
|
||||||
typedef struct {
|
void gIntrMain(void);
|
||||||
u8 unk0;
|
|
||||||
u8 unk1;
|
|
||||||
u8 unk2;
|
|
||||||
u8 unk3;
|
|
||||||
u8 unk4;
|
|
||||||
u8 unk5;
|
|
||||||
u16 unk6;
|
|
||||||
} ItemFrame;
|
|
||||||
extern ItemFrame gUnk_08126DA8[];
|
|
||||||
extern ItemFrame* gUnk_08126ED8[3];
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
u16 unk0;
|
|
||||||
u16 unk1;
|
|
||||||
u16 x;
|
|
||||||
u16 y;
|
|
||||||
} NPCStruct;
|
|
||||||
extern NPCStruct gUnk_02031EC0[100];
|
|
||||||
|
|
||||||
// todo: merge with screen.h
|
|
||||||
typedef struct {
|
|
||||||
u16 dest;
|
|
||||||
u16 _2;
|
|
||||||
u16 _4;
|
|
||||||
u16 _6;
|
|
||||||
u8* src;
|
|
||||||
} DmaSettings;
|
|
||||||
|
|
||||||
extern u16 gDmaPresets[];
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
u8 update;
|
u8 update;
|
||||||
|
@ -95,18 +61,10 @@ struct {
|
||||||
u32 size;
|
u32 size;
|
||||||
} extern gUnk_02022730;
|
} extern gUnk_02022730;
|
||||||
|
|
||||||
void sub_08016CA8(DmaSettings* s);
|
void sub_08016CA8(BgSettings* bg);
|
||||||
void sub_08016BF8(void);
|
void sub_08016BF8(void);
|
||||||
void DispCtrlSet(void);
|
void DispCtrlSet(void);
|
||||||
|
|
||||||
extern u16 gUnk_080B2CD8[];
|
|
||||||
|
|
||||||
extern u32 gUnk_03000FBC;
|
|
||||||
|
|
||||||
void gIntrMain(void);
|
|
||||||
|
|
||||||
typedef void (*fp)(void);
|
|
||||||
|
|
||||||
void DummyIntr(void) {
|
void DummyIntr(void) {
|
||||||
/* .. */
|
/* .. */
|
||||||
}
|
}
|
||||||
|
@ -157,18 +115,18 @@ void UpdateDisplayControls(void) {
|
||||||
gUnk_03000000.update = 0;
|
gUnk_03000000.update = 0;
|
||||||
DmaCopy32(3, &gUnk_03000000.oam, 0x07000000, 0x400);
|
DmaCopy32(3, &gUnk_03000000.oam, 0x07000000, 0x400);
|
||||||
}
|
}
|
||||||
sub_08016CA8((DmaSettings*)&gScreen.bg.bg0Control);
|
sub_08016CA8(&gScreen.bg0);
|
||||||
sub_08016CA8((DmaSettings*)&gScreen.bg.bg1Control);
|
sub_08016CA8(&gScreen.bg1);
|
||||||
sub_08016CA8((DmaSettings*)&gScreen.affine.bg2Control);
|
sub_08016CA8((BgSettings*)&gScreen.bg2);
|
||||||
sub_08016CA8((DmaSettings*)&gScreen.affine.bg3Control);
|
sub_08016CA8((BgSettings*)&gScreen.bg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_08016CA8(DmaSettings* s) {
|
void sub_08016CA8(BgSettings* bg) {
|
||||||
if (s->_6 && s->src != 0) {
|
if (bg->updated && bg->tilemap != NULL) {
|
||||||
u32 dest;
|
u32 dest;
|
||||||
s->_6 = 0;
|
bg->updated = 0;
|
||||||
dest = s->dest;
|
dest = bg->control;
|
||||||
DmaCopy32(3, s->src, ((dest << 3) & 0xF800) + 0x06000000, gUnk_080B2CD8[dest >> 14]);
|
DmaCopy32(3, bg->tilemap, ((dest << 3) & 0xF800) + 0x06000000, gUnk_080B2CD8[dest >> 14]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,7 +280,7 @@ void HandlePlayerLife(Entity* this) {
|
||||||
} else if ((gSave.stats.effectTimer == 0) || --gSave.stats.effectTimer == 0) {
|
} else if ((gSave.stats.effectTimer == 0) || --gSave.stats.effectTimer == 0) {
|
||||||
gSave.stats.effect = 0;
|
gSave.stats.effect = 0;
|
||||||
} else if ((gSave.stats.effectTimer & 0x3f) == 0) {
|
} else if ((gSave.stats.effectTimer & 0x3f) == 0) {
|
||||||
CreateFx(this, FX_AURA_BASE + gSave.stats.effect, 0);
|
CreateFx(this, (FX_RED_AURA - 1) + gSave.stats.effect, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -373,91 +331,3 @@ void sub_080171F0(void) {
|
||||||
sub_08077FEC(gPlayerEntity.action);
|
sub_08077FEC(gPlayerEntity.action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemUpdate(Entity* this) {
|
|
||||||
if ((this->flags & ENT_DID_INIT) == 0 && this->action == 0 && this->subAction == 0)
|
|
||||||
ItemInit(this);
|
|
||||||
|
|
||||||
if (!CheckDontUpdate(this)) {
|
|
||||||
gPlayerItemFunctions[this->id](this);
|
|
||||||
this->bitfield &= ~0x80;
|
|
||||||
if (this->iframes != 0) {
|
|
||||||
if (this->iframes > 0)
|
|
||||||
this->iframes--;
|
|
||||||
else
|
|
||||||
this->iframes++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DrawEntity(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// tiny regalloc
|
|
||||||
NONMATCH("asm/non_matching/arm_proxy/ItemInit.inc", void ItemInit(Entity* this)) {
|
|
||||||
ItemFrame* entry;
|
|
||||||
|
|
||||||
entry = &gUnk_08126DA8[this->id];
|
|
||||||
if (entry->unk0 == 0xff) {
|
|
||||||
u32 temp = entry->unk2;
|
|
||||||
ItemFrame* temp2 = gUnk_08126ED8[entry->unk1];
|
|
||||||
entry = &temp2[this->field_0x68.HALF.LO - temp];
|
|
||||||
}
|
|
||||||
|
|
||||||
this->palette.raw = ((entry->unk0 & 0xf) << 4) | entry->unk0;
|
|
||||||
this->damage = entry->unk1;
|
|
||||||
this->hurtType = entry->unk3;
|
|
||||||
this->hitType = entry->unk4;
|
|
||||||
this->spriteIndex = entry->unk5;
|
|
||||||
if (entry->unk6 == 0)
|
|
||||||
this->spriteVramOffset = gPlayerEntity.spriteVramOffset;
|
|
||||||
else
|
|
||||||
this->spriteVramOffset = entry->unk6 & 0x3ff;
|
|
||||||
|
|
||||||
if (this->animationState == 0)
|
|
||||||
this->animationState = gPlayerEntity.animationState & 6;
|
|
||||||
|
|
||||||
this->collisionLayer = gPlayerEntity.collisionLayer;
|
|
||||||
this->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
|
|
||||||
this->spritePriority.b0 = gPlayerEntity.spritePriority.b0;
|
|
||||||
this->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
|
|
||||||
this->currentHealth = 1;
|
|
||||||
this->flags |= ENT_DID_INIT;
|
|
||||||
}
|
|
||||||
END_NONMATCH
|
|
||||||
|
|
||||||
void ObjectUpdate(Entity* this) {
|
|
||||||
if ((this->flags & ENT_DID_INIT) == 0 && this->action == 0)
|
|
||||||
InitObject(this);
|
|
||||||
if (this->iframes != 0)
|
|
||||||
this->iframes++;
|
|
||||||
if (!CheckDontUpdate(this)) {
|
|
||||||
gObjectFunctions[this->id](this);
|
|
||||||
this->bitfield &= ~0x80;
|
|
||||||
}
|
|
||||||
DrawEntity(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ManagerUpdate(Entity* this) {
|
|
||||||
if (!CheckDontUpdate(this))
|
|
||||||
gManagerFunctions[this->id](this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// regalloc
|
|
||||||
NONMATCH("asm/non_matching/arm_proxy/NPCUpdate.inc", void NPCUpdate(Entity* this)) {
|
|
||||||
if ((this->currentHealth & 0x7f) && !ReadBit(&gUnk_020342F8, this->currentHealth - 1))
|
|
||||||
DeleteThisEntity();
|
|
||||||
if (this->action == 0 && (this->flags & ENT_DID_INIT) == 0)
|
|
||||||
InitNPC(this);
|
|
||||||
if (!CheckDontUpdate(this))
|
|
||||||
gNPCFunctions[this->id][0](this);
|
|
||||||
if (this->next != NULL) {
|
|
||||||
if (gNPCFunctions[this->id][1] != NULL)
|
|
||||||
gNPCFunctions[this->id][1](this);
|
|
||||||
if ((this->currentHealth & 0x7f) != 0) {
|
|
||||||
u32 temp = this->currentHealth & 0x7f;
|
|
||||||
gUnk_02031EC0[temp * 2 - 2].x = this->x.HALF.HI - gRoomControls.roomOriginX;
|
|
||||||
gUnk_02031EC0[temp * 2 - 2].y = this->y.HALF.HI - gRoomControls.roomOriginY;
|
|
||||||
}
|
|
||||||
DrawEntity(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
END_NONMATCH
|
|
||||||
|
|
24
src/intro.c
24
src/intro.c
|
@ -101,7 +101,7 @@ static void HandleNintendoCapcomLogos(void) {
|
||||||
}
|
}
|
||||||
LoadPaletteGroup(paletteGroup);
|
LoadPaletteGroup(paletteGroup);
|
||||||
gScreen.lcd.displayControl |= DISPCNT_BG2_ON;
|
gScreen.lcd.displayControl |= DISPCNT_BG2_ON;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
DoFade(6, 8);
|
DoFade(6, 8);
|
||||||
advance = ADVANCE_NONE;
|
advance = ADVANCE_NONE;
|
||||||
#if defined(DEMO_USA)
|
#if defined(DEMO_USA)
|
||||||
|
@ -158,17 +158,17 @@ static void HandleTitlescreen(void) {
|
||||||
// Blend first and second layer
|
// Blend first and second layer
|
||||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
||||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 9);
|
gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 9);
|
||||||
gScreen.bg.bg1Control = 0x1c09;
|
gScreen.bg1.control = 0x1c09;
|
||||||
gScreen.affine.bg2Control = BGCNT_SCREENBASE(29) | BGCNT_PRIORITY(2);
|
gScreen.bg2.control = BGCNT_SCREENBASE(29) | BGCNT_PRIORITY(2);
|
||||||
gScreen.affine.bg3Control = BGCNT_SCREENBASE(30) | BGCNT_PRIORITY(3);
|
gScreen.bg3.control = BGCNT_SCREENBASE(30) | BGCNT_PRIORITY(3);
|
||||||
gScreen.lcd.displayControl |= DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
|
gScreen.lcd.displayControl |= DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
|
||||||
gScreen.bg.bg1yOffset = 0xff60;
|
gScreen.bg1.yOffset = 0xff60;
|
||||||
} else {
|
} else {
|
||||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND;
|
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND;
|
||||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 9);
|
gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 9);
|
||||||
gScreen.bg.bg0Control = BGCNT_SCREENBASE(29) | BGCNT_PRIORITY(2);
|
gScreen.bg0.control = BGCNT_SCREENBASE(29) | BGCNT_PRIORITY(2);
|
||||||
gScreen.bg.bg1Control = 0x1E03;
|
gScreen.bg1.control = 0x1E03;
|
||||||
gScreen.affine.bg2Control = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(2) | BGCNT_256COLOR |
|
gScreen.bg2.control = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(2) | BGCNT_256COLOR |
|
||||||
BGCNT_SCREENBASE(28) | BGCNT_WRAP | BGCNT_TXT512x256;
|
BGCNT_SCREENBASE(28) | BGCNT_WRAP | BGCNT_TXT512x256;
|
||||||
gScreen.lcd.displayControl |= DISPCNT_MODE_1;
|
gScreen.lcd.displayControl |= DISPCNT_MODE_1;
|
||||||
gScreen.lcd.displayControl |= DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
|
gScreen.lcd.displayControl |= DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
|
||||||
|
@ -278,13 +278,13 @@ static void HandleJapaneseTitlescreenAnimationIntro(void) {
|
||||||
case 0:
|
case 0:
|
||||||
if (!gFadeControl.active) {
|
if (!gFadeControl.active) {
|
||||||
if ((gIntroState.counter & 1) == 0) {
|
if ((gIntroState.counter & 1) == 0) {
|
||||||
gScreen.bg.bg1yOffset++;
|
gScreen.bg1.yOffset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetAdvanceState() == ADVANCE_KEY_PRESSED || gScreen.bg.bg1yOffset == 0) {
|
if (GetAdvanceState() == ADVANCE_KEY_PRESSED || gScreen.bg1.yOffset == 0) {
|
||||||
gIntroState.subState++;
|
gIntroState.subState++;
|
||||||
gScreen.bg.bg1yOffset = 0;
|
gScreen.bg1.yOffset = 0;
|
||||||
gScreen.bg.bg1Control = 0xc09;
|
gScreen.bg1.control = 0xc09;
|
||||||
gFadeControl.mask = 0x00000040;
|
gFadeControl.mask = 0x00000040;
|
||||||
DoFade(6, 0x10);
|
DoFade(6, 0x10);
|
||||||
SoundReq(SFX_F8);
|
SoundReq(SFX_F8);
|
||||||
|
|
|
@ -12,3 +12,8 @@ void (*const gManagerFunctions[])() = {
|
||||||
Manager31_Main, Manager32_Main, Manager33_Main, Manager34_Main, Manager35_Main, Manager36_Main, Manager37_Main,
|
Manager31_Main, Manager32_Main, Manager33_Main, Manager34_Main, Manager35_Main, Manager36_Main, Manager37_Main,
|
||||||
Manager38_Main, Manager39_Main
|
Manager38_Main, Manager39_Main
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void ManagerUpdate(Entity* this) {
|
||||||
|
if (!CheckDontUpdate(this))
|
||||||
|
gManagerFunctions[this->id](this);
|
||||||
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ void sub_080570B8(Entity* this) {
|
||||||
this->height.WORD = 0;
|
this->height.WORD = 0;
|
||||||
pbVar1 = ((u8*)&this->hVelocity + 1);
|
pbVar1 = ((u8*)&this->hVelocity + 1);
|
||||||
if (*pbVar1 == 3) {
|
if (*pbVar1 == 3) {
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
} else {
|
} else {
|
||||||
gUnk_08107C48[*pbVar1](this);
|
gUnk_08107C48[*pbVar1](this);
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ void sub_08057118(Entity* this) {
|
||||||
((u8*)&this->hVelocity)[1] = 0;
|
((u8*)&this->hVelocity)[1] = 0;
|
||||||
((u8*)&this->hVelocity)[2] = 0;
|
((u8*)&this->hVelocity)[2] = 0;
|
||||||
this->action = 1;
|
this->action = 1;
|
||||||
gScreen.affine.bg3Control = 0x1e04;
|
gScreen.bg3.control = 0x1e04;
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.controls.layerFXControl = 0x3648;
|
gScreen.controls.layerFXControl = 0x3648;
|
||||||
gScreen.controls.alphaBlend = 0x1000;
|
gScreen.controls.alphaBlend = 0x1000;
|
||||||
|
|
|
@ -97,8 +97,8 @@ void sub_08059690(Manager10* this) {
|
||||||
|
|
||||||
void sub_080596E0(Manager10* this) {
|
void sub_080596E0(Manager10* this) {
|
||||||
if ((gScreenTransition.frameCount & 7) == 0) {
|
if ((gScreenTransition.frameCount & 7) == 0) {
|
||||||
gScreen.bg.bg1xOffset += 8;
|
gScreen.bg1.xOffset += 8;
|
||||||
gScreen.bg.bg1xOffset &= 0x1F;
|
gScreen.bg1.xOffset &= 0x1F;
|
||||||
}
|
}
|
||||||
if (sub_0805986C()) {
|
if (sub_0805986C()) {
|
||||||
if (this->unk_21 == 0 && this->unk_22 != 2) {
|
if (this->unk_21 == 0 && this->unk_22 != 2) {
|
||||||
|
@ -142,7 +142,7 @@ void sub_080596E0(Manager10* this) {
|
||||||
LoadResourceAsync(gBG3Buffer, 0x600e800, 0x800);
|
LoadResourceAsync(gBG3Buffer, 0x600e800, 0x800);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
gUnk_0200B650 = &gScreen.bg.bg1Control;
|
gUnk_0200B650 = &gScreen.bg1.control;
|
||||||
gScreen.lcd.displayControl |= 0x200;
|
gScreen.lcd.displayControl |= 0x200;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -397,9 +397,9 @@ void sub_0805A8EC(Manager15* this) {
|
||||||
|
|
||||||
void sub_0805A94C(Manager15* this) {
|
void sub_0805A94C(Manager15* this) {
|
||||||
int tmp1, tmp2;
|
int tmp1, tmp2;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY - this->unk_26 + this->unk_36;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY - this->unk_26 + this->unk_36;
|
||||||
tmp1 = -gScreen.affine.bg3xOffset;
|
tmp1 = -gScreen.bg3.xOffset;
|
||||||
tmp2 = tmp1 + 0x100;
|
tmp2 = tmp1 + 0x100;
|
||||||
if (tmp1 < 0)
|
if (tmp1 < 0)
|
||||||
tmp1 = 0;
|
tmp1 = 0;
|
||||||
|
@ -410,7 +410,7 @@ void sub_0805A94C(Manager15* this) {
|
||||||
if (tmp2 > 0xF0)
|
if (tmp2 > 0xF0)
|
||||||
tmp2 = 0xF0;
|
tmp2 = 0xF0;
|
||||||
gScreen.controls.window1HorizontalDimensions = (tmp1 << 8 | tmp2);
|
gScreen.controls.window1HorizontalDimensions = (tmp1 << 8 | tmp2);
|
||||||
tmp1 = -gScreen.affine.bg3yOffset;
|
tmp1 = -gScreen.bg3.yOffset;
|
||||||
tmp2 = tmp1 + 0x100;
|
tmp2 = tmp1 + 0x100;
|
||||||
if (tmp1 < 0)
|
if (tmp1 < 0)
|
||||||
tmp1 = 0;
|
tmp1 = 0;
|
||||||
|
@ -426,8 +426,8 @@ void sub_0805A94C(Manager15* this) {
|
||||||
void sub_0805A9CC(Manager15* this) {
|
void sub_0805A9CC(Manager15* this) {
|
||||||
int tmp1, tmp2;
|
int tmp1, tmp2;
|
||||||
void* tmp3;
|
void* tmp3;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34;
|
||||||
tmp1 = -gScreen.affine.bg3xOffset;
|
tmp1 = -gScreen.bg3.xOffset;
|
||||||
tmp2 = tmp1 + 0x100;
|
tmp2 = tmp1 + 0x100;
|
||||||
if (tmp1 < 0)
|
if (tmp1 < 0)
|
||||||
tmp1 = 0;
|
tmp1 = 0;
|
||||||
|
@ -439,14 +439,14 @@ void sub_0805A9CC(Manager15* this) {
|
||||||
tmp2 = 0xF0;
|
tmp2 = 0xF0;
|
||||||
gScreen.controls.window1HorizontalDimensions = tmp1 << 8 | tmp2;
|
gScreen.controls.window1HorizontalDimensions = tmp1 << 8 | tmp2;
|
||||||
tmp1 = gRoomControls.roomScrollY - this->unk_26 + this->unk_36;
|
tmp1 = gRoomControls.roomScrollY - this->unk_26 + this->unk_36;
|
||||||
gScreen.affine.bg3yOffset = tmp1 & 0x3F;
|
gScreen.bg3.yOffset = tmp1 & 0x3F;
|
||||||
tmp3 = (&gBG3Buffer[((tmp1 / 0x40) << 8)]);
|
tmp3 = (&gBG3Buffer[((tmp1 / 0x40) << 8)]);
|
||||||
gScreen.affine.bg3Tilemap = (u32*)tmp3;
|
gScreen.bg3.tilemap = (u32*)tmp3;
|
||||||
gScreen.controls.window1VerticalDimensions = 0xa0;
|
gScreen.controls.window1VerticalDimensions = 0xa0;
|
||||||
if (this->unk_28 == tmp3)
|
if (this->unk_28 == tmp3)
|
||||||
return;
|
return;
|
||||||
this->unk_28 = tmp3;
|
this->unk_28 = tmp3;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct { u8 unk_00[0x20]; } gUnk_085A97A0[];
|
extern struct { u8 unk_00[0x20]; } gUnk_085A97A0[];
|
||||||
|
@ -483,11 +483,11 @@ void sub_0805AAF0(u32 unk0) {
|
||||||
sub_0805AADC(unk0);
|
sub_0805AADC(unk0);
|
||||||
gScreen.controls.layerFXControl = 0x3E48;
|
gScreen.controls.layerFXControl = 0x3E48;
|
||||||
gScreen.controls.alphaBlend = 0x1008;
|
gScreen.controls.alphaBlend = 0x1008;
|
||||||
gScreen.affine.bg3Control = 0x1E04;
|
gScreen.bg3.control = 0x1E04;
|
||||||
gScreen.affine.bg3Tilemap = &gBG3Buffer;
|
gScreen.bg3.tilemap = &gBG3Buffer;
|
||||||
gScreen.affine.bg3xOffset = 0;
|
gScreen.bg3.xOffset = 0;
|
||||||
gScreen.affine.bg3yOffset = 0;
|
gScreen.bg3.yOffset = 0;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
gScreen.controls.windowInsideControl = 0x3F3F;
|
gScreen.controls.windowInsideControl = 0x3F3F;
|
||||||
gScreen.controls.windowOutsideControl = 0x37;
|
gScreen.controls.windowOutsideControl = 0x37;
|
||||||
gScreen.controls.window1HorizontalDimensions = 0xF0;
|
gScreen.controls.window1HorizontalDimensions = 0xF0;
|
||||||
|
|
|
@ -40,19 +40,19 @@ void Manager18_Main(Manager18* this) {
|
||||||
}
|
}
|
||||||
gRoomControls.bg3OffsetX.WORD -= 0x2000;
|
gRoomControls.bg3OffsetX.WORD -= 0x2000;
|
||||||
gRoomControls.bg3OffsetY.WORD -= 0x1000;
|
gRoomControls.bg3OffsetY.WORD -= 0x1000;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805AEDC(Manager18* this) {
|
void sub_0805AEDC(Manager18* this) {
|
||||||
gScreen.affine.bg3Control = 0x1e05;
|
gScreen.bg3.control = 0x1e05;
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.controls.layerFXControl = 0x3648;
|
gScreen.controls.layerFXControl = 0x3648;
|
||||||
gScreen.controls.alphaBlend = (this != NULL) ? this->field_0x20 : 0x1000;
|
gScreen.controls.alphaBlend = (this != NULL) ? this->field_0x20 : 0x1000;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
if (this != NULL) {
|
if (this != NULL) {
|
||||||
Manager18_Main(this);
|
Manager18_Main(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,15 +23,15 @@ void Manager19_Main(Manager* this) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD - 0x2000;
|
gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD - 0x2000;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805AFFC(Manager* this) {
|
void sub_0805AFFC(Manager* this) {
|
||||||
gScreen.affine.bg3Control = 0x1e03;
|
gScreen.bg3.control = 0x1e03;
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,9 +199,9 @@ void sub_0805B2B0(Manager1A* this) {
|
||||||
}
|
}
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gRoomControls.bg3OffsetX.HALF.HI = gRoomControls.roomScrollX + this->unk_34 + tmp;
|
gRoomControls.bg3OffsetX.HALF.HI = gRoomControls.roomScrollX + this->unk_34 + tmp;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + this->unk_34 + tmp;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + this->unk_34 + tmp;
|
||||||
gRoomControls.bg3OffsetY.HALF.HI = gRoomControls.roomScrollY + this->unk_36 + tmp2;
|
gRoomControls.bg3OffsetY.HALF.HI = gRoomControls.roomScrollY + this->unk_36 + tmp2;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + this->unk_36 + tmp2;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + this->unk_36 + tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805B328(Manager1A* this) {
|
void sub_0805B328(Manager1A* this) {
|
||||||
|
@ -210,10 +210,10 @@ void sub_0805B328(Manager1A* this) {
|
||||||
return;
|
return;
|
||||||
tmp = &gUnk_08108764[this->manager.unk_0a];
|
tmp = &gUnk_08108764[this->manager.unk_0a];
|
||||||
LoadResourceAsync(&gGlobalGfxAndPalettes[tmp->unk_0c->unk_00], 0x0600F000, 0x800);
|
LoadResourceAsync(&gGlobalGfxAndPalettes[tmp->unk_0c->unk_00], 0x0600F000, 0x800);
|
||||||
gScreen.affine.bg3Control = 0x1E07;
|
gScreen.bg3.control = 0x1E07;
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
gScreen.controls.layerFXControl &= ~0x8;
|
gScreen.controls.layerFXControl &= ~0x8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,14 +46,14 @@ void Manager1B_Main(Manager1B* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805B448(Manager1B* this) {
|
void sub_0805B448(Manager1B* this) {
|
||||||
gScreen.affine.bg3xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2;
|
gScreen.bg3.xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2;
|
||||||
gScreen.affine.bg3yOffset = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1) + this->field_0x20;
|
gScreen.bg3.yOffset = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1) + this->field_0x20;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805B474(Manager1B* this) {
|
void sub_0805B474(Manager1B* this) {
|
||||||
s32 tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x60) / (gRoomControls.height - 0xa0);
|
s32 tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x60) / (gRoomControls.height - 0xa0);
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomOriginY + tmp;
|
gScreen.bg3.yOffset = gRoomControls.roomOriginY + tmp;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - ((gRoomControls.width - 0x100) / 2);
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX - ((gRoomControls.width - 0x100) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805B4B4(Manager1B* this) {
|
void sub_0805B4B4(Manager1B* this) {
|
||||||
|
@ -69,14 +69,14 @@ void sub_0805B4D0(u32 param_1) {
|
||||||
u32 uVar2;
|
u32 uVar2;
|
||||||
|
|
||||||
LoadGfxGroup(gUnk_08108C5C[param_1]);
|
LoadGfxGroup(gUnk_08108C5C[param_1]);
|
||||||
gScreen.affine.bg3Control = 0x1e07;
|
gScreen.bg3.control = 0x1e07;
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.affine.bg3xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2;
|
gScreen.bg3.xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2;
|
||||||
|
|
||||||
uVar2 = (gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1;
|
uVar2 = (gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1;
|
||||||
iVar1 = 0x100 - gRoomControls.height;
|
iVar1 = 0x100 - gRoomControls.height;
|
||||||
if (iVar1 < 0) {
|
if (iVar1 < 0) {
|
||||||
iVar1 = 0;
|
iVar1 = 0;
|
||||||
}
|
}
|
||||||
gScreen.affine.bg3yOffset = uVar2 + iVar1 + gUnk_08108C44[param_1];
|
gScreen.bg3.yOffset = uVar2 + iVar1 + gUnk_08108C44[param_1];
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,19 +14,19 @@ void sub_0805B5E0(Manager* this) {
|
||||||
this->action = 1;
|
this->action = 1;
|
||||||
|
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.affine.bg3Control = gUnk_08108C88[this->unk_0a];
|
gScreen.bg3.control = gUnk_08108C88[this->unk_0a];
|
||||||
gRoomControls.bg3OffsetY.WORD = 0;
|
gRoomControls.bg3OffsetY.WORD = 0;
|
||||||
gRoomControls.bg3OffsetX.WORD = 0;
|
gRoomControls.bg3OffsetX.WORD = 0;
|
||||||
|
|
||||||
switch (this->unk_0a) {
|
switch (this->unk_0a) {
|
||||||
case 0:
|
case 0:
|
||||||
default:
|
default:
|
||||||
gScreen.affine.bg3yOffset = 0;
|
gScreen.bg3.yOffset = 0;
|
||||||
gScreen.affine.bg3xOffset = 0;
|
gScreen.bg3.xOffset = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ void sub_0805B5E0(Manager* this) {
|
||||||
void sub_0805B638(Manager* this) {
|
void sub_0805B638(Manager* this) {
|
||||||
if (this->unk_0a == 1) {
|
if (this->unk_0a == 1) {
|
||||||
gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD + 0x2000;
|
gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD + 0x2000;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ extern u32 gUnk_0200B650;
|
||||||
void Manager2_Main(Manager2* this) {
|
void Manager2_Main(Manager2* this) {
|
||||||
if (this->manager.action == 0) {
|
if (this->manager.action == 0) {
|
||||||
this->manager.action = 1;
|
this->manager.action = 1;
|
||||||
gScreen.affine.bg3Updated = 0;
|
gScreen.bg3.updated = 0;
|
||||||
gScreen.bg.bg1Updated = 0;
|
gScreen.bg1.updated = 0;
|
||||||
sub_08052D74(this, sub_080576A0, 0);
|
sub_08052D74(this, sub_080576A0, 0);
|
||||||
}
|
}
|
||||||
sub_0805754C(this);
|
sub_0805754C(this);
|
||||||
|
@ -33,19 +33,19 @@ void sub_0805754C(Manager2* this) {
|
||||||
|
|
||||||
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
||||||
bgOffset += bgOffset >> 3;
|
bgOffset += bgOffset >> 3;
|
||||||
gScreen.affine.bg3yOffset = bgOffset & 0x3f;
|
gScreen.bg3.yOffset = bgOffset & 0x3f;
|
||||||
gScreen.affine.bg3Tilemap = gMapDataTopSpecial + (bgOffset / 0x40) * 0x200;
|
gScreen.bg3.tilemap = gMapDataTopSpecial + (bgOffset / 0x40) * 0x200;
|
||||||
if (this->field_0x38 != gScreen.affine.bg3Tilemap) {
|
if (this->field_0x38 != gScreen.bg3.tilemap) {
|
||||||
this->field_0x38 = gScreen.affine.bg3Tilemap;
|
this->field_0x38 = gScreen.bg3.tilemap;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
}
|
}
|
||||||
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
||||||
bgOffset += bgOffset >> 2;
|
bgOffset += bgOffset >> 2;
|
||||||
gScreen.bg.bg1yOffset = bgOffset & 0x3f;
|
gScreen.bg1.yOffset = bgOffset & 0x3f;
|
||||||
gScreen.bg.bg1Tilemap = gMapDataTopSpecial + 0x2000 + (bgOffset / 0x40) * 0x200;
|
gScreen.bg1.tilemap = gMapDataTopSpecial + 0x2000 + (bgOffset / 0x40) * 0x200;
|
||||||
if (this->field_0x3c != gScreen.bg.bg1Tilemap) {
|
if (this->field_0x3c != gScreen.bg1.tilemap) {
|
||||||
this->field_0x3c = gScreen.bg.bg1Tilemap;
|
this->field_0x3c = gScreen.bg1.tilemap;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,27 +59,27 @@ void sub_080575C8(u32 param) {
|
||||||
|
|
||||||
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
||||||
bgOffset += bgOffset >> 3;
|
bgOffset += bgOffset >> 3;
|
||||||
gScreen.affine.bg3yOffset = bgOffset & 0x3f;
|
gScreen.bg3.yOffset = bgOffset & 0x3f;
|
||||||
gScreen.affine.bg3xOffset = 0;
|
gScreen.bg3.xOffset = 0;
|
||||||
gScreen.affine.bg3Tilemap = &gMapDataTopSpecial[(bgOffset / 0x40) * 0x200];
|
gScreen.bg3.tilemap = &gMapDataTopSpecial[(bgOffset / 0x40) * 0x200];
|
||||||
gScreen.affine.bg3Control = 0x1d49;
|
gScreen.bg3.control = 0x1d49;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
|
|
||||||
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY);
|
||||||
bgOffset += bgOffset >> 2;
|
bgOffset += bgOffset >> 2;
|
||||||
gScreen.bg.bg1yOffset = bgOffset & 0x3f;
|
gScreen.bg1.yOffset = bgOffset & 0x3f;
|
||||||
gScreen.bg.bg1xOffset = 0;
|
gScreen.bg1.xOffset = 0;
|
||||||
gScreen.bg.bg1Tilemap = &gMapDataTopSpecial[0x2000 + (bgOffset / 0x40) * 0x200];
|
gScreen.bg1.tilemap = &gMapDataTopSpecial[0x2000 + (bgOffset / 0x40) * 0x200];
|
||||||
gScreen.bg.bg1Control = 0x1e49;
|
gScreen.bg1.control = 0x1e49;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
gScreen.controls.layerFXControl = 0x3c48;
|
gScreen.controls.layerFXControl = 0x3c48;
|
||||||
gScreen.controls.alphaBlend = 0x609;
|
gScreen.controls.alphaBlend = 0x609;
|
||||||
gScreen.lcd.displayControl |= 0xa00;
|
gScreen.lcd.displayControl |= 0xa00;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_08057688(void) {
|
void sub_08057688(void) {
|
||||||
gScreen.affine.bg3Control = 0x1d48;
|
gScreen.bg3.control = 0x1d48;
|
||||||
gScreen.bg.bg1Control = 0x1e48;
|
gScreen.bg1.control = 0x1e48;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_080576A0(Manager2* this) {
|
void sub_080576A0(Manager2* this) {
|
||||||
|
|
|
@ -25,16 +25,16 @@ void Manager2F_Main(Manager* this) {
|
||||||
} else {
|
} else {
|
||||||
gRoomControls.bg3OffsetX.WORD -= 0x4000;
|
gRoomControls.bg3OffsetX.WORD -= 0x4000;
|
||||||
gRoomControls.bg3OffsetY.WORD -= 0x2000;
|
gRoomControls.bg3OffsetY.WORD -= 0x2000;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805D470(Manager* this) {
|
void sub_0805D470(Manager* this) {
|
||||||
LoadGfxGroup(0x4c);
|
LoadGfxGroup(0x4c);
|
||||||
gScreen.affine.bg3Control = 0x1e07;
|
gScreen.bg3.control = 0x1e07;
|
||||||
gScreen.lcd.displayControl |= 0x800;
|
gScreen.lcd.displayControl |= 0x800;
|
||||||
gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
gScreen.bg3.xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI;
|
||||||
gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
gScreen.bg3.yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI;
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ void sub_0805D7DC(Manager32* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadGfxGroup(gUnk_08108D74[index]);
|
LoadGfxGroup(gUnk_08108D74[index]);
|
||||||
gScreen.affine.bg3Control = 0x1e04;
|
gScreen.bg3.control = 0x1e04;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0805D860(Manager32* this) {
|
void sub_0805D860(Manager32* this) {
|
||||||
|
@ -152,8 +152,8 @@ void sub_0805D9D8(Manager32* this) {
|
||||||
// TODO find out the actual type of the parent of this manager.
|
// TODO find out the actual type of the parent of this manager.
|
||||||
Manager* pMVar1 = this->manager.parent;
|
Manager* pMVar1 = this->manager.parent;
|
||||||
if (pMVar1 != NULL) {
|
if (pMVar1 != NULL) {
|
||||||
gScreen.affine.bg3xOffset = 0x80 - (*(s16*)&pMVar1[1].unk_0e - gRoomControls.roomScrollX);
|
gScreen.bg3.xOffset = 0x80 - (*(s16*)&pMVar1[1].unk_0e - gRoomControls.roomScrollX);
|
||||||
gScreen.affine.bg3yOffset = 0x8c - (*(s16*)(pMVar1[1].unk_11 + 1) - gRoomControls.roomScrollY);
|
gScreen.bg3.yOffset = 0x8c - (*(s16*)(pMVar1[1].unk_11 + 1) - gRoomControls.roomScrollY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ void sub_0805DA08(u32 x, u32 y, u32 param_3) {
|
||||||
u32 i;
|
u32 i;
|
||||||
struct BgAffineDstData* affineDstData = &gUnk_02017AA0[gUnk_03003DE4[0] * 0xa0];
|
struct BgAffineDstData* affineDstData = &gUnk_02017AA0[gUnk_03003DE4[0] * 0xa0];
|
||||||
for (i = 0; i < 0xa0; ++i, y += 0x17) {
|
for (i = 0; i < 0xa0; ++i, y += 0x17) {
|
||||||
affineDstData->pa = ((gSineTable[(param_3 + i + y) & 0xff] * x) >> 8) + gScreen.affine.bg3xOffset;
|
affineDstData->pa = ((gSineTable[(param_3 + i + y) & 0xff] * x) >> 8) + gScreen.bg3.xOffset;
|
||||||
affineDstData = (struct BgAffineDstData*)&affineDstData->pb;
|
affineDstData = (struct BgAffineDstData*)&affineDstData->pb;
|
||||||
}
|
}
|
||||||
sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4[0] * 0xa0], 0x400001c, 0xa2600001);
|
sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4[0] * 0xa0], 0x400001c, 0xa2600001);
|
||||||
|
|
|
@ -69,7 +69,7 @@ void sub_0805E18C(Manager39* this) {
|
||||||
|
|
||||||
void sub_0805E1D8(Manager39* this) {
|
void sub_0805E1D8(Manager39* this) {
|
||||||
MemClear(&gUnk_02034DF0, 0x80);
|
MemClear(&gUnk_02034DF0, 0x80);
|
||||||
gScreen.bg.bg0Updated = 1;
|
gScreen.bg0.updated = 1;
|
||||||
DeleteThisEntity();
|
DeleteThisEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,5 +89,5 @@ void sub_0805E1F8(u32 unk0, u32 unk1) {
|
||||||
if (!unk1)
|
if (!unk1)
|
||||||
tmp2 = gUnk_08108E30;
|
tmp2 = gUnk_08108E30;
|
||||||
sub_0805F46C(&tmp, tmp2);
|
sub_0805F46C(&tmp, tmp2);
|
||||||
gScreen.bg.bg0Updated = 1;
|
gScreen.bg0.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,8 +23,8 @@ void Manager8_Main(Manager8* this) {
|
||||||
sub_08057F20(this);
|
sub_08057F20(this);
|
||||||
if (!this->manager.action) {
|
if (!this->manager.action) {
|
||||||
this->manager.action = 1;
|
this->manager.action = 1;
|
||||||
gScreen.bg.bg1Updated = 0;
|
gScreen.bg1.updated = 0;
|
||||||
gScreen.affine.bg3Updated = 0;
|
gScreen.bg3.updated = 0;
|
||||||
sub_08052D74(this, sub_08057EFC, 0);
|
sub_08052D74(this, sub_08057EFC, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,25 +45,25 @@ void sub_08057F20(Manager8* this) {
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX;
|
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX;
|
||||||
tmp = tmp + (tmp >> 3) + ((0x400 - gRoomControls.width) / 2);
|
tmp = tmp + (tmp >> 3) + ((0x400 - gRoomControls.width) / 2);
|
||||||
gScreen.affine.bg3xOffset = tmp & 0xF;
|
gScreen.bg3.xOffset = tmp & 0xF;
|
||||||
gScreen.affine.bg3yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 2);
|
gScreen.bg3.yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 2);
|
||||||
gScreen.affine.bg3Tilemap = gBG3Buffer;
|
gScreen.bg3.tilemap = gBG3Buffer;
|
||||||
sub_08058004(tmp, gUnk_02006F00, gBG3Buffer);
|
sub_08058004(tmp, gUnk_02006F00, gBG3Buffer);
|
||||||
tmp = ((tmp >> 4) << 1);
|
tmp = ((tmp >> 4) << 1);
|
||||||
if (this->unk_38 != tmp) {
|
if (this->unk_38 != tmp) {
|
||||||
this->unk_38 = tmp;
|
this->unk_38 = tmp;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
}
|
}
|
||||||
tmp = (gRoomControls.roomScrollX - gRoomControls.roomOriginX);
|
tmp = (gRoomControls.roomScrollX - gRoomControls.roomOriginX);
|
||||||
tmp = tmp + (tmp >> 2) + ((0x400 - gRoomControls.width) / 2);
|
tmp = tmp + (tmp >> 2) + ((0x400 - gRoomControls.width) / 2);
|
||||||
gScreen.bg.bg1xOffset = tmp & 0xF;
|
gScreen.bg1.xOffset = tmp & 0xF;
|
||||||
gScreen.bg.bg1yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1);
|
gScreen.bg1.yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1);
|
||||||
gScreen.bg.bg1Tilemap = gBG3Buffer + 0x400;
|
gScreen.bg1.tilemap = gBG3Buffer + 0x400;
|
||||||
sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x400);
|
sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x400);
|
||||||
tmp = ((tmp >> 4) << 1);
|
tmp = ((tmp >> 4) << 1);
|
||||||
if (this->unk_3c != tmp) {
|
if (this->unk_3c != tmp) {
|
||||||
this->unk_3c = tmp;
|
this->unk_3c = tmp;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,19 +115,19 @@ void sub_080580B0(u32 unk1) {
|
||||||
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7
|
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7
|
||||||
tmp = tmp + (tmp >> 3) + (0x400 - gRoomControls.width) / 2;
|
tmp = tmp + (tmp >> 3) + (0x400 - gRoomControls.width) / 2;
|
||||||
sub_08058004(tmp, gUnk_02006F00, gBG3Buffer);
|
sub_08058004(tmp, gUnk_02006F00, gBG3Buffer);
|
||||||
gScreen.affine.bg3xOffset = tmp & 0xF;
|
gScreen.bg3.xOffset = tmp & 0xF;
|
||||||
gScreen.affine.bg3yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //?
|
gScreen.bg3.yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //?
|
||||||
gScreen.affine.bg3Control = 0x1D09;
|
gScreen.bg3.control = 0x1D09;
|
||||||
gScreen.affine.bg3Tilemap = gBG3Buffer;
|
gScreen.bg3.tilemap = gBG3Buffer;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7
|
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7
|
||||||
tmp = tmp + (tmp >> 2) + (0x400 - gRoomControls.width) / 2;
|
tmp = tmp + (tmp >> 2) + (0x400 - gRoomControls.width) / 2;
|
||||||
sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x400);
|
sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x400);
|
||||||
gScreen.bg.bg1xOffset = tmp & 0xF;
|
gScreen.bg1.xOffset = tmp & 0xF;
|
||||||
gScreen.bg.bg1yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //?
|
gScreen.bg1.yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //?
|
||||||
gScreen.bg.bg1Control = 0x1E09;
|
gScreen.bg1.control = 0x1E09;
|
||||||
gScreen.bg.bg1Tilemap = gBG3Buffer + 0x400;
|
gScreen.bg1.tilemap = gBG3Buffer + 0x400;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
gScreen.controls.layerFXControl = 0x3C48;
|
gScreen.controls.layerFXControl = 0x3C48;
|
||||||
gScreen.controls.alphaBlend = 0x609;
|
gScreen.controls.alphaBlend = 0x609;
|
||||||
gScreen.lcd.displayControl |= 0xa00;
|
gScreen.lcd.displayControl |= 0xa00;
|
||||||
|
|
|
@ -24,7 +24,7 @@ void Manager9_Main(Manager9* this) {
|
||||||
sub_08058210(this);
|
sub_08058210(this);
|
||||||
if (!this->manager.action) {
|
if (!this->manager.action) {
|
||||||
this->manager.action = 1;
|
this->manager.action = 1;
|
||||||
gScreen.bg.bg1Updated = 0;
|
gScreen.bg1.updated = 0;
|
||||||
sub_08052D74(this, sub_08058204, NULL);
|
sub_08052D74(this, sub_08058204, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ void sub_08058210(Manager9* this) {
|
||||||
return;
|
return;
|
||||||
this->unk_3c = tmp;
|
this->unk_3c = tmp;
|
||||||
sub_080582A0(tmp, gUnk_02006F00, gBG3Buffer);
|
sub_080582A0(tmp, gUnk_02006F00, gBG3Buffer);
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 sub_08058244(int i) {
|
u32 sub_08058244(int i) {
|
||||||
|
@ -48,9 +48,9 @@ u32 sub_08058244(int i) {
|
||||||
u32 tmp3;
|
u32 tmp3;
|
||||||
s32 tmp4;
|
s32 tmp4;
|
||||||
tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x20) / (gRoomControls.height - 0xa0);
|
tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x20) / (gRoomControls.height - 0xa0);
|
||||||
gScreen.bg.bg1yOffset = gRoomControls.roomOriginY + tmp;
|
gScreen.bg1.yOffset = gRoomControls.roomOriginY + tmp;
|
||||||
tmp = (((gRoomControls.roomScrollX - gRoomControls.roomOriginX) * gUnk_081081EC[i]) / (gRoomControls.width - 0xf0));
|
tmp = (((gRoomControls.roomScrollX - gRoomControls.roomOriginX) * gUnk_081081EC[i]) / (gRoomControls.width - 0xf0));
|
||||||
gScreen.bg.bg1xOffset = tmp & 0xf;
|
gScreen.bg1.xOffset = tmp & 0xf;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,8 +90,8 @@ void sub_08058324(u32 unk) {
|
||||||
LoadGfxGroup(unk + 0x36);
|
LoadGfxGroup(unk + 0x36);
|
||||||
sub_080582D0();
|
sub_080582D0();
|
||||||
sub_080582A0(sub_08058244(unk), gUnk_02006F00, gBG3Buffer);
|
sub_080582A0(sub_08058244(unk), gUnk_02006F00, gBG3Buffer);
|
||||||
gScreen.bg.bg1Control = 0x1D47;
|
gScreen.bg1.control = 0x1D47;
|
||||||
gScreen.bg.bg1Tilemap = gBG3Buffer;
|
gScreen.bg1.tilemap = gBG3Buffer;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
gScreen.lcd.displayControl |= 0x200;
|
gScreen.lcd.displayControl |= 0x200;
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,10 +287,10 @@ void sub_08058D34() {
|
||||||
tmp = gScreen.lcd.displayControl;
|
tmp = gScreen.lcd.displayControl;
|
||||||
tmp2 = 0;
|
tmp2 = 0;
|
||||||
gScreen.lcd.displayControl |= 1;
|
gScreen.lcd.displayControl |= 1;
|
||||||
gScreen.affine.bg2Control = 0xBC82;
|
gScreen.bg2.control = 0xBC82;
|
||||||
gScreen.bg.bg1Control = 0x5E86;
|
gScreen.bg1.control = 0x5E86;
|
||||||
gScreen.bg.bg1xOffset = 0;
|
gScreen.bg1.xOffset = 0;
|
||||||
gScreen.bg.bg1yOffset = tmp2;
|
gScreen.bg1.yOffset = tmp2;
|
||||||
gScreen.controls.layerFXControl = 0x3456;
|
gScreen.controls.layerFXControl = 0x3456;
|
||||||
gScreen.controls.alphaBlend = 0x909;
|
gScreen.controls.alphaBlend = 0x909;
|
||||||
gArea.musicIndex = gArea.pMusicIndex;
|
gArea.musicIndex = gArea.pMusicIndex;
|
||||||
|
|
34
src/npc.c
34
src/npc.c
|
@ -1,5 +1,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "entity.h"
|
#include "entity.h"
|
||||||
|
#include "room.h"
|
||||||
#include "npc.h"
|
#include "npc.h"
|
||||||
|
|
||||||
//clang-format off
|
//clang-format off
|
||||||
|
@ -135,3 +136,36 @@ void (*const gNPCFunctions[][3])(Entity* ent) = {
|
||||||
};
|
};
|
||||||
//clang-format on
|
//clang-format on
|
||||||
const u8 npc_unk[] = { 0x04, 0x05, 0x06, 0x06 };
|
const u8 npc_unk[] = { 0x04, 0x05, 0x06, 0x06 };
|
||||||
|
|
||||||
|
extern u8 gUnk_020342F8;
|
||||||
|
typedef struct {
|
||||||
|
u16 unk0;
|
||||||
|
u16 unk1;
|
||||||
|
u16 x;
|
||||||
|
u16 y;
|
||||||
|
} NPCStruct;
|
||||||
|
extern NPCStruct gUnk_02031EC0[100];
|
||||||
|
|
||||||
|
void InitNPC(Entity*);
|
||||||
|
u32 ReadBit(void*, u32);
|
||||||
|
|
||||||
|
// regalloc
|
||||||
|
NONMATCH("asm/non_matching/arm_proxy/NPCUpdate.inc", void NPCUpdate(Entity* this)) {
|
||||||
|
if ((this->currentHealth & 0x7f) && !ReadBit(&gUnk_020342F8, this->currentHealth - 1))
|
||||||
|
DeleteThisEntity();
|
||||||
|
if (this->action == 0 && (this->flags & ENT_DID_INIT) == 0)
|
||||||
|
InitNPC(this);
|
||||||
|
if (!CheckDontUpdate(this))
|
||||||
|
gNPCFunctions[this->id][0](this);
|
||||||
|
if (this->next != NULL) {
|
||||||
|
if (gNPCFunctions[this->id][1] != NULL)
|
||||||
|
gNPCFunctions[this->id][1](this);
|
||||||
|
if ((this->currentHealth & 0x7f) != 0) {
|
||||||
|
u32 temp = this->currentHealth & 0x7f;
|
||||||
|
gUnk_02031EC0[temp * 2 - 2].x = this->x.HALF.HI - gRoomControls.roomOriginX;
|
||||||
|
gUnk_02031EC0[temp * 2 - 2].y = this->y.HALF.HI - gRoomControls.roomOriginY;
|
||||||
|
}
|
||||||
|
DrawEntity(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END_NONMATCH
|
||||||
|
|
|
@ -96,9 +96,9 @@ void sub_0806D0B0(Entity* this) {
|
||||||
if (this != NULL) {
|
if (this != NULL) {
|
||||||
sub_0806D164(this);
|
sub_0806D164(this);
|
||||||
}
|
}
|
||||||
gScreen.bg.bg1Control = 0x1d47;
|
gScreen.bg1.control = 0x1d47;
|
||||||
gScreen.bg.bg1Tilemap = &gMapDataTopSpecial;
|
gScreen.bg1.tilemap = &gMapDataTopSpecial;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0806D0F8(void) {
|
void sub_0806D0F8(void) {
|
||||||
|
|
|
@ -32,6 +32,6 @@ void sub_0806EABC(Entity* this, u32 param) {
|
||||||
sub_08050384();
|
sub_08050384();
|
||||||
sub_08057044(param, &gUnk_020227E8, 0x202020);
|
sub_08057044(param, &gUnk_020227E8, 0x202020);
|
||||||
sub_0805F46C(0x3302, &gUnk_081146B8);
|
sub_0805F46C(0x3302, &gUnk_081146B8);
|
||||||
gScreen.bg.bg0Updated = 1;
|
gScreen.bg0.updated = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
15
src/object.c
15
src/object.c
|
@ -1,5 +1,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "entity.h"
|
#include "entity.h"
|
||||||
|
#include "manager.h"
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
|
|
||||||
void (*const gObjectFunctions[])(Entity*) = {
|
void (*const gObjectFunctions[])(Entity*) = {
|
||||||
|
@ -198,3 +199,17 @@ void (*const gObjectFunctions[])(Entity*) = {
|
||||||
[ENEMY_ITEM] = EnemyItem,
|
[ENEMY_ITEM] = EnemyItem,
|
||||||
[OBJECT_C1] = ObjectC1,
|
[OBJECT_C1] = ObjectC1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void InitObject(Entity*);
|
||||||
|
|
||||||
|
void ObjectUpdate(Entity* this) {
|
||||||
|
if ((this->flags & ENT_DID_INIT) == 0 && this->action == 0)
|
||||||
|
InitObject(this);
|
||||||
|
if (this->iframes != 0)
|
||||||
|
this->iframes++;
|
||||||
|
if (!CheckDontUpdate(this)) {
|
||||||
|
gObjectFunctions[this->id](this);
|
||||||
|
this->bitfield &= ~0x80;
|
||||||
|
}
|
||||||
|
DrawEntity(this);
|
||||||
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ extern void PlayerItem15();
|
||||||
extern void PlayerItemNulled2();
|
extern void PlayerItemNulled2();
|
||||||
|
|
||||||
void (*const gPlayerItemFunctions[])() = {
|
void (*const gPlayerItemFunctions[])() = {
|
||||||
|
|
||||||
DeleteEntity,
|
DeleteEntity,
|
||||||
PlayerItemSword,
|
PlayerItemSword,
|
||||||
PlayerItemBomb,
|
PlayerItemBomb,
|
||||||
|
@ -50,3 +49,67 @@ void (*const gPlayerItemFunctions[])() = {
|
||||||
PlayerItemNulled2,
|
PlayerItemNulled2,
|
||||||
PlayerItemCellOverwriteSet
|
PlayerItemCellOverwriteSet
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
u8 unk0;
|
||||||
|
u8 unk1;
|
||||||
|
u8 unk2;
|
||||||
|
u8 unk3;
|
||||||
|
u8 unk4;
|
||||||
|
u8 unk5;
|
||||||
|
u16 unk6;
|
||||||
|
} ItemFrame;
|
||||||
|
extern ItemFrame gUnk_08126DA8[];
|
||||||
|
extern ItemFrame* gUnk_08126ED8[3];
|
||||||
|
|
||||||
|
void ItemInit(Entity*);
|
||||||
|
|
||||||
|
void ItemUpdate(Entity* this) {
|
||||||
|
if ((this->flags & ENT_DID_INIT) == 0 && this->action == 0 && this->subAction == 0)
|
||||||
|
ItemInit(this);
|
||||||
|
|
||||||
|
if (!CheckDontUpdate(this)) {
|
||||||
|
gPlayerItemFunctions[this->id](this);
|
||||||
|
this->bitfield &= ~0x80;
|
||||||
|
if (this->iframes != 0) {
|
||||||
|
if (this->iframes > 0)
|
||||||
|
this->iframes--;
|
||||||
|
else
|
||||||
|
this->iframes++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DrawEntity(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// tiny regalloc
|
||||||
|
NONMATCH("asm/non_matching/arm_proxy/ItemInit.inc", void ItemInit(Entity* this)) {
|
||||||
|
ItemFrame* entry;
|
||||||
|
|
||||||
|
entry = &gUnk_08126DA8[this->id];
|
||||||
|
if (entry->unk0 == 0xff) {
|
||||||
|
u32 temp = entry->unk2;
|
||||||
|
ItemFrame* temp2 = gUnk_08126ED8[entry->unk1];
|
||||||
|
entry = &temp2[this->field_0x68.HALF.LO - temp];
|
||||||
|
}
|
||||||
|
|
||||||
|
this->palette.raw = ((entry->unk0 & 0xf) << 4) | entry->unk0;
|
||||||
|
this->damage = entry->unk1;
|
||||||
|
this->hurtType = entry->unk3;
|
||||||
|
this->hitType = entry->unk4;
|
||||||
|
this->spriteIndex = entry->unk5;
|
||||||
|
if (entry->unk6 == 0)
|
||||||
|
this->spriteVramOffset = gPlayerEntity.spriteVramOffset;
|
||||||
|
else
|
||||||
|
this->spriteVramOffset = entry->unk6 & 0x3ff;
|
||||||
|
|
||||||
|
if (this->animationState == 0)
|
||||||
|
this->animationState = gPlayerEntity.animationState & 6;
|
||||||
|
|
||||||
|
this->collisionLayer = gPlayerEntity.collisionLayer;
|
||||||
|
this->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
|
||||||
|
this->spritePriority.b0 = gPlayerEntity.spritePriority.b0;
|
||||||
|
this->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
|
||||||
|
this->currentHealth = 1;
|
||||||
|
this->flags |= ENT_DID_INIT;
|
||||||
|
}
|
||||||
|
END_NONMATCH
|
||||||
|
|
|
@ -46,12 +46,12 @@ void sub_080A3BD0(void) {
|
||||||
|
|
||||||
LoadGfxGroup(iVar1 + 0x76);
|
LoadGfxGroup(iVar1 + 0x76);
|
||||||
gScreen.lcd.displayControl |= 0x1e00;
|
gScreen.lcd.displayControl |= 0x1e00;
|
||||||
gScreen.bg.bg1Control = 0x1c01;
|
gScreen.bg1.control = 0x1c01;
|
||||||
gScreen.affine.bg2Control = 0x1d02;
|
gScreen.bg2.control = 0x1d02;
|
||||||
gScreen.affine.bg3Control = 0x1e0b;
|
gScreen.bg3.control = 0x1e0b;
|
||||||
gScreen.bg.bg1Updated = 1;
|
gScreen.bg1.updated = 1;
|
||||||
gScreen.affine.bg2Updated = 1;
|
gScreen.bg2.updated = 1;
|
||||||
gScreen.affine.bg3Updated = 1;
|
gScreen.bg3.updated = 1;
|
||||||
sub_080A4528();
|
sub_080A4528();
|
||||||
sub_080A4398();
|
sub_080A4398();
|
||||||
sub_0801E738(0);
|
sub_0801E738(0);
|
||||||
|
|
Loading…
Reference in New Issue