mirror of
https://github.com/zeldaret/tmc
synced 2026-07-10 15:13:59 -04:00
Decompile some functions
This commit is contained in:
@@ -255,10 +255,8 @@ bool32 sub_0801A458(LayerStruct* layer, u32 position, u32 collisionType) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4F8(void)) {
|
||||
u32 uVar1;
|
||||
u32 uVar3;
|
||||
|
||||
bool32 sub_0801A4F8(void) {
|
||||
u32 tmp;
|
||||
if ((gPlayerState.flags & PL_MINISH) != 0) {
|
||||
if (GetInventoryValue(ITEM_POWER_BRACELETS) != 1) {
|
||||
return FALSE;
|
||||
@@ -269,7 +267,8 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4
|
||||
if (gPlayerState.field_0xd != gPlayerEntity.direction) {
|
||||
return FALSE;
|
||||
}
|
||||
if ((gPlayerEntity.collisions & gUnk_080B44A0[(((gPlayerEntity.direction + 4) & 0x18) >> 2)]) == 0) {
|
||||
tmp = (((gPlayerEntity.direction + 4) & 0x18) >> 3);
|
||||
if ((gUnk_080B44A0[tmp] & gPlayerEntity.collisions) == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
@@ -282,7 +281,6 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570())
|
||||
|
||||
@@ -387,7 +385,7 @@ NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801AA58.inc",
|
||||
object->collisionLayer = this->collisionLayer;
|
||||
gPlayerState.pushedObject = 0xa0;
|
||||
gPlayerState.queued_action = 5;
|
||||
gPlayerState.flags |= 1;
|
||||
gPlayerState.flags |= PL_BUSY;
|
||||
this->x.HALF.LO = 0;
|
||||
this->y.HALF.LO = 0;
|
||||
this->direction = param_3;
|
||||
|
||||
+8
-2
@@ -21,7 +21,10 @@ Entity* sub_08049DF4(u32 arg0) {
|
||||
}
|
||||
|
||||
Entity* sub_08049E18(void) {
|
||||
if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189b75)) {
|
||||
if ((gPlayerState.field_0x3c[0] == 0) &&
|
||||
!(gPlayerState.flags &
|
||||
(PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_DISABLE_ITEMS | PL_FALLING | PL_FROZEN |
|
||||
PL_IN_MINECART | PL_PIT_IS_EXIT | PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_FLAGS2000000 | PL_CLIMBING))) {
|
||||
gUnk_020000B0 = &gPlayerEntity;
|
||||
return &gPlayerEntity;
|
||||
}
|
||||
@@ -29,7 +32,10 @@ Entity* sub_08049E18(void) {
|
||||
}
|
||||
|
||||
Entity* sub_08049E4C(void) {
|
||||
if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189bf5)) {
|
||||
if ((gPlayerState.field_0x3c[0] == 0) &&
|
||||
!(gPlayerState.flags & (PL_BUSY | PL_DROWNING | PL_CAPTURED | PL_USE_PORTAL | PL_HIDDEN | PL_MINISH |
|
||||
PL_DISABLE_ITEMS | PL_FALLING | PL_FROZEN | PL_IN_MINECART | PL_PIT_IS_EXIT |
|
||||
PL_MOLDWORM_CAPTURED | PL_IN_HOLE | PL_FLAGS2000000 | PL_CLIMBING))) {
|
||||
gUnk_020000B0 = &gPlayerEntity;
|
||||
return &gPlayerEntity;
|
||||
}
|
||||
|
||||
+36
-4
@@ -22,7 +22,7 @@ typedef struct {
|
||||
|
||||
extern u8 gUnk_03003DE0;
|
||||
extern u8 gzHeap[0x1000];
|
||||
extern u8 gUnk_0201AEE0[0x2000];
|
||||
extern u32 gUnk_0201AEE0[0x800];
|
||||
extern u8 gUnk_080CA11C[];
|
||||
|
||||
extern void (*gUnk_080C9CAC[])(void);
|
||||
@@ -67,6 +67,10 @@ extern u32 gUsedPalettes;
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern const GfxItem* gGfxGroups[];
|
||||
|
||||
extern const u32 gUnk_080C9460[];
|
||||
|
||||
void sub_0801E82C(void);
|
||||
|
||||
u32 DecToHex(u32 value) {
|
||||
u32 result;
|
||||
register u32 r1 asm("r1");
|
||||
@@ -382,8 +386,14 @@ u32 sub_0801DF10(DungeonLayout* lyt) {
|
||||
return offset;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/sub_0801DF28.inc", void sub_0801DF28(u32 a1, u32 a2, u32 a3));
|
||||
|
||||
void sub_0801DF28(u32 x, u32 y, s32 color) {
|
||||
u32* ptr;
|
||||
u32 tmp;
|
||||
ptr = &gUnk_0201AEE0[(((y >> 3) * 0x10 + (x >> 3)) * 8)];
|
||||
ptr = &ptr[(y & 7)];
|
||||
tmp = (color << ((x & 7) * 4));
|
||||
ptr[0] = (ptr[0] & gUnk_080C9460[x & 7]) | tmp;
|
||||
}
|
||||
u32 sub_0801DF60(u32 a1, u8* p) {
|
||||
return (p[a1 >> 2] >> (2 * (~a1 & 3))) & 3;
|
||||
}
|
||||
@@ -531,7 +541,29 @@ ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/sub_0801E6C8.inc", void sub_0801E6C8(u32 a1));
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/sub_0801E738.inc", void sub_0801E738(u32 a1));
|
||||
void sub_0801E738(u32 param_1) {
|
||||
s32 index;
|
||||
s32 tmp;
|
||||
|
||||
sub_0801E82C();
|
||||
if (param_1 - 0x65 < 0x11) {
|
||||
index = sub_0801E8B0(param_1);
|
||||
if (index < 0) {
|
||||
index = 0;
|
||||
while (gSave.unk118[index] != 0) {
|
||||
index++;
|
||||
}
|
||||
}
|
||||
if ((u32)index < 0x12) {
|
||||
gSave.unk118[index] = param_1;
|
||||
tmp = gSave.unk12B[index] + 1;
|
||||
if (tmp > 99) {
|
||||
tmp = 99;
|
||||
}
|
||||
gSave.unk12B[index] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801E798(u32 a1) {
|
||||
s32 idx = sub_0801E8B0(a1);
|
||||
|
||||
+1
-1
@@ -423,7 +423,7 @@ void sub_08049944(Enemy64Entity* this) {
|
||||
if (EntityWithinDistance(super, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x20)) {
|
||||
gPlayerState.field_0x14 = 1;
|
||||
if (gPlayerEntity.z.HALF.HI == 0) {
|
||||
gPlayerState.flags |= 2;
|
||||
gPlayerState.flags |= PL_FLAGS2;
|
||||
this->unk_7c |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -386,7 +386,7 @@ void sub_0803F6EC(GhiniEntity* this) {
|
||||
gPlayerEntity.iframes = -0x3c;
|
||||
gPlayerState.jump_status = 0x41;
|
||||
}
|
||||
gPlayerState.flags &= 0xffffffef;
|
||||
gPlayerState.flags &= ~PL_CAPTURED;
|
||||
}
|
||||
|
||||
void sub_0803F738(GhiniEntity* this) {
|
||||
|
||||
+115
-9
@@ -33,6 +33,7 @@
|
||||
#include "transitions.h"
|
||||
#include "roomid.h"
|
||||
#include "ui.h"
|
||||
#include "kinstone.h"
|
||||
|
||||
// Game task
|
||||
|
||||
@@ -234,9 +235,17 @@ extern const EntityData* gUnk_080FCFB8[];
|
||||
extern void (*const gUnk_080FD138[])(void);
|
||||
|
||||
extern const u16 gUnk_080FD964[];
|
||||
extern const u8 gUnk_080FCF04[];
|
||||
|
||||
extern void ClearBgAnimations(void);
|
||||
|
||||
void sub_08054974(s32, s32);
|
||||
void sub_080548E8(void);
|
||||
|
||||
extern void sub_0806F38C(void);
|
||||
|
||||
extern void sub_08018710(u32);
|
||||
|
||||
void GameTask(void) {
|
||||
static GameState* const sStates[] = {
|
||||
GameTask_Transition,
|
||||
@@ -1277,8 +1286,8 @@ bool32 CanDispEzloMessage(void) {
|
||||
gPauseMenuOptions.disabled || gUnk_0200AF00.unk_1)
|
||||
return 0;
|
||||
|
||||
if ((gPlayerState.flags & (PL_NO_CAP | 0x110)) || (gPlayerState.framestate_last > tmp) || gPlayerState.item ||
|
||||
gPlayerEntity.field_0x7a.HWORD)
|
||||
if ((gPlayerState.flags & (PL_NO_CAP | PL_CAPTURED | PL_DISABLE_ITEMS)) || (gPlayerState.framestate_last > tmp) ||
|
||||
gPlayerState.item || gPlayerEntity.field_0x7a.HWORD)
|
||||
return 0;
|
||||
|
||||
if ((gPlayerEntity.z.HALF.HI & 0x8000) && !gPlayerState.field_0xa)
|
||||
@@ -1885,9 +1894,43 @@ void sub_08053758(void) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800())
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053894.inc", void sub_08053894())
|
||||
void sub_08053894(void) {
|
||||
u32 tmp;
|
||||
if (gFadeControl.active == 0) {
|
||||
gMenu.transitionTimer--;
|
||||
if (gMenu.field_0xa != 0) {
|
||||
gMenu.field_0xa--;
|
||||
} else {
|
||||
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
|
||||
tmp = ++gMenu.storyPanelIndex << 0x18;
|
||||
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - ((tmp) >> 0x19));
|
||||
}
|
||||
}
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
gMenu.overlayType++;
|
||||
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053904.inc", void sub_08053904())
|
||||
void sub_08053904(void) {
|
||||
u32 tmp;
|
||||
if (gFadeControl.active == 0) {
|
||||
gMenu.transitionTimer--;
|
||||
if (gMenu.field_0xa != 0) {
|
||||
gMenu.field_0xa--;
|
||||
} else {
|
||||
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
|
||||
tmp = ++gMenu.storyPanelIndex << 0x18;
|
||||
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - (tmp >> 0x19));
|
||||
}
|
||||
}
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
gMenu.overlayType++;
|
||||
SetFade(FADE_IN_OUT | FADE_INSTANT, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053974(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
@@ -2043,7 +2086,21 @@ void sub_08053CAC(void) {
|
||||
gUnk_080FCFA4[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053CC8.inc", void sub_08053CC8())
|
||||
void sub_08053CC8(void) {
|
||||
const u8* ptr;
|
||||
ptr = gUnk_080FCF04 + gMenu.field_0x3 * 0x10;
|
||||
gMenu.field_0xc = (void*)&ptr[8];
|
||||
LoadRoomEntityList(*(EntityData**)(&ptr[0]));
|
||||
LoadRoomEntityList(GetRoomProperty(ptr[4], ptr[5], 1));
|
||||
LoadRoomEntityList(GetRoomProperty(ptr[4], ptr[5], 2));
|
||||
gMenu.overlayType = 1;
|
||||
gScreen.lcd.displayControl &= 0xfeff;
|
||||
gUpdateVisibleTiles = 1;
|
||||
SetFade(FADE_INSTANT, 0x10);
|
||||
if (ptr[5] == 0x1d) {
|
||||
gMenu.field_0xa = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053D34(void) {
|
||||
if (gMenu.field_0xa != 0) {
|
||||
@@ -2581,7 +2638,21 @@ void Subtask_WorldEvent(void) {
|
||||
#endif
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_0805488C.inc", void sub_0805488C())
|
||||
void sub_0805488C(void) {
|
||||
const struct_080FE320* ptr = &gUnk_080FE320[gUI.field_0x3];
|
||||
gMenu.field_0x0 = ptr->evt_type;
|
||||
gMenu.field_0x3 = ptr->entity_idx;
|
||||
gMenu.field_0x4 = gUI.field_0x3;
|
||||
gMenu.field_0xc = (u8*)ptr;
|
||||
gMenu.menuType++;
|
||||
gMenu.overlayType = 0;
|
||||
gMenu.transitionTimer = 300;
|
||||
DispReset(0);
|
||||
sub_08054974(gUI.field_0x3, 1);
|
||||
sub_0806F364();
|
||||
ClearRoomFlag(0xff);
|
||||
sub_080548E8();
|
||||
}
|
||||
|
||||
void sub_080548E8(void) {
|
||||
gUnk_080FE2AC[gMenu.field_0x0]();
|
||||
@@ -2594,12 +2665,47 @@ void sub_080548E8(void) {
|
||||
UpdateScrollVram();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08054920.inc", void sub_08054920())
|
||||
void sub_08054920(void) {
|
||||
MessageInitialize();
|
||||
sub_0806F38C();
|
||||
if (gUnk_080C9CBC[gFuseInfo._3]._5[1] != 0) {
|
||||
MenuFadeIn(10, gUI.field_0x3);
|
||||
} else {
|
||||
gUI.nextToLoad = 3;
|
||||
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 0x10);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08054968(void) {
|
||||
gMenu.menuType = 2;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08054974.inc", void sub_08054974())
|
||||
void sub_08054974(s32 param_1, s32 param_2) {
|
||||
struct_080FE320* ptr = &gUnk_080FE320[param_1];
|
||||
SetCurrentRoomPropertyList(ptr->_2, ptr->_3);
|
||||
gRoomControls.area = ptr->_2;
|
||||
gRoomControls.room = ptr->_3;
|
||||
LoadGfxGroups();
|
||||
gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.area);
|
||||
if (param_2 != 0) {
|
||||
LoadAuxiliaryRoom(ptr->_2, ptr->_3);
|
||||
} else {
|
||||
sub_08052FF4(ptr->_2, ptr->_3);
|
||||
InitializeCamera();
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
gScreen.lcd.displayControl &= 0x1fff;
|
||||
gRoomControls.scroll_x = gRoomControls.origin_x + ptr->_4;
|
||||
gRoomControls.scroll_y = gRoomControls.origin_y + ptr->_6;
|
||||
if (ptr->_2 == 2) {
|
||||
TryLoadPrologueHyruleTown();
|
||||
}
|
||||
sub_08018710(gUI.field_0x3);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08054A14.inc", void sub_08054A14())
|
||||
void sub_08054A14(s32 param_1) {
|
||||
struct_080FE320* ptr = &gUnk_080FE320[param_1];
|
||||
if (ptr->_11 < 0xe) {
|
||||
SetLocalFlagByBank(gLocalFlagBanks[ptr->_11], ptr->flag);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -236,7 +236,7 @@ static void HandlePlayerLife(Entity* this) {
|
||||
if ((gPlayerEntity.contactFlags & 0x80) && (gPlayerEntity.iframes > 0))
|
||||
SoundReq(SFX_86);
|
||||
|
||||
gPlayerState.flags &= ~(0x2000000 | PL_FALLING);
|
||||
gPlayerState.flags &= ~(PL_FALLING | PL_FLAGS2000000);
|
||||
if (gPlayerState.flags & PL_BURNING)
|
||||
ResetPlayerItem();
|
||||
if ((gPlayerState.flags & PL_CLONING) && gPlayerState.chargeState.action == 0)
|
||||
|
||||
@@ -95,7 +95,33 @@ void sub_08076488(ItemBehavior* this, u32 idx) {
|
||||
gPlayerState.framestate = PL_STATE_HOLD;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/itemTryPickupObject/sub_08076518.inc", void sub_08076518(ItemBehavior* this, u32 idx))
|
||||
void sub_08076518(ItemBehavior* this, u32 index) {
|
||||
if (PlayerTryDropObject(this, index)) {
|
||||
gPlayerState.framestate = 4;
|
||||
if ((gPlayerState.jump_status & 0x80) == 0 && gPlayerState.field_0x1f[0] == 0) {
|
||||
if (gPlayerEntity.knockbackDuration != 0) {
|
||||
PlayerCancelHoldItem(this, index);
|
||||
} else {
|
||||
if ((gPlayerState.field_0x92 & 0x8018) != 0) {
|
||||
sub_0806F948(&gPlayerEntity);
|
||||
gPlayerState.heldObject = 5;
|
||||
this->field_0x18->subAction = 2;
|
||||
this->field_0x18->direction = (gPlayerEntity.animationState & 0xe) << 2;
|
||||
this->field_0x18 = NULL;
|
||||
this->stateID++;
|
||||
this->field_0xf = 0x0f;
|
||||
if ((gPlayerState.flags & PL_NO_CAP) != 0) {
|
||||
sub_08077DF4(this, 0x930);
|
||||
} else {
|
||||
sub_08077DF4(this, 0x344);
|
||||
}
|
||||
gPlayerState.field_0xa |= 8 >> index;
|
||||
gPlayerState.keepFacing |= 8 >> index;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080765E0(ItemBehavior* this, u32 idx) {
|
||||
if (PlayerTryDropObject(this, idx) != 0) {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
extern u32 sub_08000E44(u32);
|
||||
extern void sub_080A3B74(void);
|
||||
extern s32 sub_080A3B48(void);
|
||||
extern u32 sub_080A3B48(void);
|
||||
extern void sub_0805ECEC(u32, u32, u32, u32);
|
||||
extern void sub_0801E6C8(u32);
|
||||
extern void sub_0801E798(u32);
|
||||
@@ -65,7 +65,15 @@ Subtask KinstoneMenu_Type3;
|
||||
Subtask KinstoneMenu_Type4;
|
||||
Subtask KinstoneMenu_Type5;
|
||||
|
||||
ASM_FUNC("asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc", s32 sub_080A3B48(void))
|
||||
u32 sub_080A3B48(void) {
|
||||
u32 index;
|
||||
for (index = 0; index <= 0x12; index++) {
|
||||
if (gSave.unk12B[index] == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
void sub_080A3B74(void) {
|
||||
gKinstoneMenu.unk2f = 0;
|
||||
|
||||
+36
-2
@@ -20,6 +20,12 @@ void sub_08069888(Entity* this);
|
||||
|
||||
extern u16 gUnk_08111C50[];
|
||||
|
||||
extern const s16 gUnk_08111C5C[];
|
||||
extern const u8 gUnk_08111C74[];
|
||||
|
||||
extern const s16 gUnk_08111C84[];
|
||||
extern const u8 gUnk_08111C8C[];
|
||||
|
||||
void Gorman(Entity* this) {
|
||||
if ((this->flags & ENT_SCRIPTED) != 0) {
|
||||
sub_08069838(this);
|
||||
@@ -98,9 +104,37 @@ void sub_08069888(Entity* this) {
|
||||
MessageNoOverlap(gUnk_08111C50[index], this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/gorman/sub_0806991C.inc", void sub_0806991C(Entity* this, ScriptExecutionContext* context))
|
||||
void sub_0806991C(Entity* this, ScriptExecutionContext* context) {
|
||||
u32 tmp;
|
||||
const s16* ptr;
|
||||
this->field_0x68.HALF.LO = (Random() & 0x1f) + 0x3c;
|
||||
ptr = &gUnk_08111C5C[*(s8*)&this->field_0x68.HALF.HI * 2];
|
||||
context->x.HALF.HI = gRoomControls.origin_x + ptr[0];
|
||||
context->y.HALF.HI = gRoomControls.origin_y + ptr[1];
|
||||
context->unk_19 = 8;
|
||||
context->postScriptActions |= 2;
|
||||
context->condition = 0;
|
||||
tmp = sub_080045DA(context->x.HALF.HI - this->x.HALF.HI, context->y.HALF.HI - this->y.HALF.HI);
|
||||
this->direction = tmp;
|
||||
this->animationState = (this->animationState & 0x80) | gUnk_08111C74[(tmp << 0x18) >> 0x1c];
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/gorman/sub_080699AC.inc", void sub_080699AC(Entity* this, ScriptExecutionContext* context))
|
||||
void sub_080699AC(Entity* this, ScriptExecutionContext* context) {
|
||||
u32 tmp;
|
||||
const s16* ptr;
|
||||
this->field_0x68.HALF.LO = (Random() & 0x1f) + 0x3c;
|
||||
ptr = &gUnk_08111C84[*(s8*)&this->field_0x68.HALF.HI * 2];
|
||||
context->x.HALF.HI = gRoomControls.origin_x + ptr[0];
|
||||
context->y.HALF.HI = gRoomControls.origin_y + ptr[1];
|
||||
context->unk_19 = 8;
|
||||
context->postScriptActions |= 2;
|
||||
context->condition = 0;
|
||||
tmp = sub_080045DA(context->x.HALF.HI - this->x.HALF.HI, context->y.HALF.HI - this->y.HALF.HI);
|
||||
this->direction = tmp;
|
||||
this->animationState = (this->animationState & 0x80) | gUnk_08111C8C[(tmp << 0x18) >> 0x1c];
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_08069A3C(Entity* this) {
|
||||
this->field_0x68.HALF.HI = gUnk_08111C9C[(Random() & 1) + (s8)this->field_0x68.HALF.HI * 2];
|
||||
|
||||
+26
-1
@@ -1,9 +1,12 @@
|
||||
#include "entity.h"
|
||||
#include "sound.h"
|
||||
#include "script.h"
|
||||
#include "npc.h"
|
||||
|
||||
extern SpriteLoadData gUnk_0810C48C;
|
||||
|
||||
extern void sub_0806FF10(Entity* this, u32 param_2, u32 param_3);
|
||||
|
||||
void MinishEzlo(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
if (LoadExtraSpriteData(this, &gUnk_0810C48C) == 0) {
|
||||
@@ -27,7 +30,29 @@ void MinishEzlo(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/minishEzlo/MinishEzlo_Head.inc", void MinishEzlo_Head(Entity* this))
|
||||
void MinishEzlo_Head(Entity* this) {
|
||||
u32 uVar1;
|
||||
u32 uVar2;
|
||||
u32 uVar3;
|
||||
if ((this->frameSpriteSettings & 4) != 0) {
|
||||
uVar2 = 1;
|
||||
uVar1 = 0;
|
||||
} else {
|
||||
uVar2 = 0;
|
||||
uVar1 = 1;
|
||||
}
|
||||
|
||||
if ((this->frameSpriteSettings & 8) != 0) {
|
||||
uVar3 = 0x16;
|
||||
} else {
|
||||
uVar3 = 0x11c;
|
||||
}
|
||||
SetExtraSpriteFrame(this, uVar2, (this->frame & 0xffffff7f) - 1);
|
||||
SetExtraSpriteFrame(this, uVar1, this->frameIndex);
|
||||
sub_0806FF10(this, uVar1, uVar3);
|
||||
SetSpriteSubEntryOffsetData1(this, uVar1, uVar2);
|
||||
sub_0807000C(this);
|
||||
}
|
||||
|
||||
void sub_0806305C(Entity* this) {
|
||||
this->spritePriority.b1 = 0;
|
||||
|
||||
@@ -277,7 +277,7 @@ void Beanstalk_Action1Type7(BeanstalkEntity* this) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
if (gPlayerState.floor_type == 0x1e) {
|
||||
if (gPlayerState.floor_type == SURFACE_LADDER) {
|
||||
if (EntityInRectRadius(super, &gPlayerEntity, 0, 8)) {
|
||||
if ((super->animIndex == (super->type2 - 1) * 3 + 1) && (super->timer == 0)) {
|
||||
super->timer = 1;
|
||||
@@ -339,7 +339,7 @@ void Beanstalk_Action1Type9(BeanstalkEntity* this) {
|
||||
}
|
||||
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
|
||||
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
|
||||
if (gPlayerState.floor_type == 0x1e) {
|
||||
if (gPlayerState.floor_type == SURFACE_LADDER) {
|
||||
super->spritePriority.b0 = 0;
|
||||
if (sub_080B1A0C(super, 0, -0x18) != 0x4014) {
|
||||
SetTile(0x4014, COORD_TO_TILE_OFFSET(super, 0, 0x18), 1);
|
||||
|
||||
@@ -59,7 +59,7 @@ void LadderUp(Entity* this) {
|
||||
default:
|
||||
if (this->type2 == 0) {
|
||||
if (gPlayerEntity.y.HALF.HI < this->y.HALF.HI) {
|
||||
if (gPlayerState.floor_type != 0x1e && (GetTileTypeByEntity(this) == 0x4017)) {
|
||||
if (gPlayerState.floor_type != SURFACE_LADDER && (GetTileTypeByEntity(this) == 0x4017)) {
|
||||
SetTile(0x4023, COORD_TO_TILE(this), this->collisionLayer);
|
||||
RestorePrevTileEntity(COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer);
|
||||
}
|
||||
|
||||
@@ -57,8 +57,9 @@ void sub_0808DDE8(Object42Entity* this) {
|
||||
if (sub_0807953C()) {
|
||||
super->subtimer++;
|
||||
}
|
||||
if (((0x1e < super->subtimer) || ((gPlayerState.flags & 0x1810) != 0)) || (this->unk_6c == 0)) {
|
||||
gPlayerState.flags &= 0xfffffbff;
|
||||
if (((0x1e < super->subtimer) || ((gPlayerState.flags & (PL_CAPTURED | PL_FROZEN | PL_IN_MINECART)) != 0)) ||
|
||||
(this->unk_6c == 0)) {
|
||||
gPlayerState.flags &= ~PL_BURNING;
|
||||
DeleteThisEntity();
|
||||
}
|
||||
player = &gPlayerEntity;
|
||||
@@ -68,7 +69,7 @@ void sub_0808DDE8(Object42Entity* this) {
|
||||
super->collisionLayer = gPlayerEntity.collisionLayer;
|
||||
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
|
||||
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
|
||||
if ((gPlayerState.flags & 0x400) != 0) {
|
||||
if ((gPlayerState.flags & PL_BURNING) != 0) {
|
||||
GetNextFrame(super);
|
||||
} else {
|
||||
DeleteThisEntity();
|
||||
|
||||
@@ -41,7 +41,7 @@ void Object70_Action1(Entity* this) {
|
||||
|
||||
if (this->type == 0) {
|
||||
if (gPlayerEntity.z.WORD == 0) {
|
||||
if ((((gPlayerState.dash_state & 0x40) == 0) && (gPlayerState.floor_type == 0x11)) &&
|
||||
if ((((gPlayerState.dash_state & 0x40) == 0) && (gPlayerState.floor_type == SURFACE_SWAMP)) &&
|
||||
((gPlayerEntity.action == 1 || ((gPlayerEntity.action == 0x18 || (gPlayerEntity.action == 4)))))) {
|
||||
goto _080974FA;
|
||||
} else {
|
||||
|
||||
@@ -137,7 +137,7 @@ void Object96_Action2(Entity* this, const struct_gUnk_08123FB0* param_2) {
|
||||
void Object96_Action3(Entity* this, const struct_gUnk_08123FB0* param_2) {
|
||||
u8 type;
|
||||
|
||||
if (gPlayerState.flags & 0x80) {
|
||||
if (gPlayerState.flags & PL_MINISH) {
|
||||
sub_0800445C(this);
|
||||
} else {
|
||||
if (IsCollidingPlayer(this)) {
|
||||
|
||||
@@ -191,7 +191,7 @@ bool32 sub_0808FC5C(PushableFurnitureEntity* this) {
|
||||
} else {
|
||||
super->timer = 0x18;
|
||||
}
|
||||
if ((gPlayerState.flags & 0x80) == 0) {
|
||||
if ((gPlayerState.flags & PL_MINISH) == 0) {
|
||||
super->timer += 0x10;
|
||||
}
|
||||
sub_0808FF50(this);
|
||||
@@ -213,7 +213,7 @@ void sub_0808FD44(PushableFurnitureEntity* this, u32 param_2) {
|
||||
} else {
|
||||
tmp = this->unk_70;
|
||||
}
|
||||
if ((gPlayerState.flags & 0x80) != 0) {
|
||||
if ((gPlayerState.flags & PL_MINISH) != 0) {
|
||||
super->speed = 0x40;
|
||||
super->timer = 0x20;
|
||||
} else {
|
||||
@@ -222,7 +222,7 @@ void sub_0808FD44(PushableFurnitureEntity* this, u32 param_2) {
|
||||
}
|
||||
} else {
|
||||
tmp = this->unk_7c;
|
||||
if ((gPlayerState.flags & 0x80) != 0) {
|
||||
if ((gPlayerState.flags & PL_MINISH) != 0) {
|
||||
super->speed = 0x40;
|
||||
super->timer = 0x40;
|
||||
} else {
|
||||
@@ -271,7 +271,7 @@ void sub_0808FDE8(PushableFurnitureEntity* this) {
|
||||
bool32 sub_0808FECC(PushableFurnitureEntity* this) {
|
||||
bool32 result = TRUE;
|
||||
|
||||
if (!((gPlayerState.flags & 0x80) == 0 && (gPlayerEntity.action == 6) && (gPlayerEntity.animationState == 0) &&
|
||||
if (!((gPlayerState.flags & PL_MINISH) == 0 && (gPlayerEntity.action == 6) && (gPlayerEntity.animationState == 0) &&
|
||||
(gPlayerEntity.y.HALF.HI - super->y.HALF.HI < 0x14) && (super->x.HALF.HI + 0xc > gPlayerEntity.x.HALF.HI) &&
|
||||
(super->x.HALF.HI - 12 < gPlayerEntity.x.HALF.HI))) {
|
||||
result = FALSE;
|
||||
|
||||
@@ -98,7 +98,7 @@ void sub_080A78B8(PlayerItemSwordEntity* this, Entity* param_2) {
|
||||
super->knockbackDirection = 0;
|
||||
super->iframes = 0;
|
||||
}
|
||||
if ((gPlayerState.flags & 0x8000000) != 0) {
|
||||
if ((gPlayerState.flags & PL_SWORD_THRUST) != 0) {
|
||||
gPlayerState.sword_state |= 0x80;
|
||||
} else if (gPlayerState.sword_state != 0) {
|
||||
switch (super->contactFlags & 0x7f) {
|
||||
|
||||
+197
-12
@@ -51,7 +51,7 @@ void* sub_08077C54(ItemBehavior*);
|
||||
u32 sub_08079FD4(Entity*, u32);
|
||||
void LoadRoomGfx(void);
|
||||
u32 sub_0807A094(u32);
|
||||
u32 GetSurfaceCalcType(Entity*, u32, u32);
|
||||
u32 GetSurfaceCalcType(Entity*, s32, s32);
|
||||
void sub_0807AAF8(Entity*, u32);
|
||||
|
||||
extern struct_0811BE48 gUnk_0811BE48[];
|
||||
@@ -78,6 +78,20 @@ bool32 sub_0807BF88(u32, u32, RoomResInfo*);
|
||||
|
||||
void sub_0807BFD0(void);
|
||||
|
||||
void ForceSetPlayerState(u32 framestate);
|
||||
struct_03003DF8* sub_080784E4(void);
|
||||
|
||||
extern const u16 gUnk_0811C0F8[];
|
||||
|
||||
u32 sub_08079778(void);
|
||||
u32 sub_0807A500(void);
|
||||
|
||||
extern const u16 gUnk_0811C108[];
|
||||
|
||||
extern const u16 gUnk_0811C110[];
|
||||
|
||||
extern const u16 gUnk_08007CAC[];
|
||||
|
||||
void sub_08077698(PlayerEntity* this) {
|
||||
ItemBehavior* puVar2;
|
||||
u32 idx;
|
||||
@@ -140,7 +154,7 @@ NONMATCH("asm/non_matching/playerUtils/sub_080777A0.inc", bool32 sub_080777A0(vo
|
||||
return TRUE;
|
||||
}
|
||||
} else if ((((gUnk_0200AF00.unk_2c == 0xc) && (gPlayerState.field_0x1c == 0)) &&
|
||||
(gPlayerState.floor_type != 0x11)) &&
|
||||
(gPlayerState.floor_type != SURFACE_SWAMP)) &&
|
||||
((((gPlayerState.field_0x90 & 0xf00) != 0 &&
|
||||
((gPlayerState.flags & (PL_BURNING | PL_ROLLING)) == 0)) &&
|
||||
((gPlayerState.jump_status == 0 && (gPlayerState.field_0x3[1] == 0)))))) {
|
||||
@@ -209,7 +223,7 @@ ItemBehavior* sub_0807794C(u32 param_1) {
|
||||
(((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (6 < param_1)))) ||
|
||||
((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (6 < param_1)) ||
|
||||
(((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[param_1].unk6[2] == 0)))))) ||
|
||||
((gPlayerState.floor_type == 0x11 && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) {
|
||||
((gPlayerState.floor_type == SURFACE_SWAMP && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) {
|
||||
return NULL;
|
||||
} else {
|
||||
u32 tmp = gUnk_0811BE48[param_1].unk0[2];
|
||||
@@ -701,14 +715,103 @@ void ForceSetPlayerState(u32 framestate) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_08078180.inc", void sub_08078180())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080782C0.inc", u32 sub_080782C0())
|
||||
bool32 sub_080782C0(void) {
|
||||
u8 tmp;
|
||||
Entity* entity;
|
||||
|
||||
if (gPlayerState.framestate == 0) {
|
||||
tmp = gPlayerState.framestate_last;
|
||||
} else {
|
||||
tmp = gPlayerState.framestate;
|
||||
}
|
||||
switch (tmp) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 0xc:
|
||||
case 0x12:
|
||||
case 0x15:
|
||||
case 0x16:
|
||||
return FALSE;
|
||||
}
|
||||
if ((gPlayerState.field_0x27[0] | gPlayerState.swim_state) != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
if (gPlayerState.floor_type == SURFACE_PIT) {
|
||||
if (gPlayerState.field_0x14 == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
if (CanDispEzloMessage()) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
if ((gPlayerState.flags & PL_DRUGGED) != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
if (CanDispEzloMessage()) {
|
||||
return TRUE;
|
||||
}
|
||||
entity = sub_080784E4()->entity;
|
||||
if (entity == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
if (gPlayerState.heldObject != 0) {
|
||||
if (gPlayerState.heldObject != 4) {
|
||||
return FALSE;
|
||||
}
|
||||
if ((gNewPlayerEntity.unk_74)->child->kind != OBJECT || (gNewPlayerEntity.unk_74)->child->id != SHOP_ITEM) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
if (((gPlayerState.field_0x92 & 0x1000) != 0) && ((u8)(gUnk_03003DF0.unk_4[3] - 1) < 100)) {
|
||||
sub_0801E738(0);
|
||||
if (gSave.unk12B[0] != 0) {
|
||||
gUnk_03003DF0.unk_2 = gUnk_03003DF0.unk_4[3];
|
||||
*(u8*)(*(int*)(gUnk_03003DF0.unk_4 + 8) + 0x39) = 2;
|
||||
gPlayerState.queued_action = 7;
|
||||
} else {
|
||||
CreateEzloHint(0xb65, 0);
|
||||
}
|
||||
ForceSetPlayerState(0x13);
|
||||
return TRUE;
|
||||
}
|
||||
if ((gPlayerState.field_0x92 & 0x88) == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
switch (gUnk_03003DF0.unk_4[1]) {
|
||||
default:
|
||||
case 0:
|
||||
return TRUE;
|
||||
case 1:
|
||||
case 6:
|
||||
case 9:
|
||||
case 0xa:
|
||||
gPlayerState.queued_action = 7;
|
||||
ForceSetPlayerState(0x13);
|
||||
case 3:
|
||||
case 5:
|
||||
case 7:
|
||||
entity->interactType = 1;
|
||||
gUnk_03003DF0.unk_2 = 0;
|
||||
return TRUE;
|
||||
case 8:
|
||||
if (gRoomVars.shopItemType == 0) {
|
||||
entity->interactType = 1;
|
||||
gRoomVars.shopItemType = entity->type;
|
||||
gRoomVars.shopItemType2 = entity->type2;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_080784C8(void) {
|
||||
MemClear(&gUnk_03003DF0, 0x188);
|
||||
gUnk_03003DF0.unk_4 = (u8*)gUnk_0811C000;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080784E4.inc", void sub_080784E4())
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080784E4.inc", struct_03003DF8* sub_080784E4(void))
|
||||
|
||||
void sub_08078778(Entity* ent) {
|
||||
sub_0807887C(ent, 1, 0);
|
||||
@@ -927,7 +1030,7 @@ void ClearPlayerState(void) {
|
||||
gPlayerState.field_0xd = 0;
|
||||
gPlayerState.field_0xe = 0;
|
||||
gPlayerState.field_0x11 = 0;
|
||||
gPlayerState.floor_type = 0;
|
||||
gPlayerState.floor_type = SURFACE_NORMAL;
|
||||
gPlayerState.floor_type_last = 0;
|
||||
gPlayerState.field_0x14 = 0;
|
||||
gPlayerState.sword_state = 0;
|
||||
@@ -1129,7 +1232,24 @@ void sub_080792BC(s32 speed, u32 direction, u32 field_0x38) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080792D8.inc", void sub_080792D8())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080793E4.inc", bool32 sub_080793E4(u32 a))
|
||||
bool32 sub_080793E4(u32 param_1) {
|
||||
u32 tmp;
|
||||
if (gPlayerState.swim_state == 0) {
|
||||
tmp = gUnk_0811C0F8[gPlayerEntity.animationState >> 1];
|
||||
} else {
|
||||
tmp = gUnk_0811C0F8[gPlayerEntity.direction >> 2];
|
||||
}
|
||||
if (sub_08079778() && ((gPlayerState.field_0x90 & tmp) != 0)) {
|
||||
if (param_1 != 0) {
|
||||
if (!sub_080B1BA4(sub_0807A500(), gPlayerEntity.collisionLayer, param_1)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/RespawnPlayer.inc", void RespawnPlayer())
|
||||
|
||||
@@ -1181,15 +1301,59 @@ void sub_08079744(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_08079778.inc", void sub_08079778())
|
||||
bool32 sub_08079778(void) {
|
||||
u32 tmp;
|
||||
if (gPlayerState.swim_state == 0) {
|
||||
tmp = gUnk_0811C108[gPlayerEntity.animationState >> 1];
|
||||
} else {
|
||||
tmp = gUnk_0811C108[gPlayerEntity.direction >> 2];
|
||||
}
|
||||
return tmp == (gPlayerEntity.collisions & tmp);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080797C4.inc", u32 sub_080797C4(void))
|
||||
u32 sub_080797C4(void) {
|
||||
u32 tmp = gUnk_0811C110[gPlayerEntity.direction >> 3];
|
||||
return tmp == (gPlayerEntity.collisions & tmp);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_080797EC.inc", void sub_080797EC())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/ResolvePlayerAnimation.inc", void ResolvePlayerAnimation())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_08079B24.inc", u32 sub_08079B24())
|
||||
bool32 sub_08079B24(void) {
|
||||
if ((gPlayerEntity.action != PLAYER_MINISHDIE) && (gPlayerEntity.health == 0)) {
|
||||
gPlayerState.flags &= ~PL_PARACHUTE;
|
||||
gPlayerEntity.knockbackDuration = gPlayerEntity.health;
|
||||
if (gPlayerState.field_0x7 == 0) {
|
||||
if (gPlayerState.swim_state != 0) {
|
||||
RespawnPlayer();
|
||||
} else {
|
||||
if ((gPlayerState.field_0x14 == 0) && ((gPlayerState.flags & PL_IN_MINECART) == 0)) {
|
||||
if (gPlayerEntity.z.HALF.HI < 0) {
|
||||
if (gPlayerEntity.zVelocity > 0) {
|
||||
gPlayerEntity.zVelocity = 0;
|
||||
}
|
||||
if ((gPlayerState.jump_status & 0x41) == 0) {
|
||||
gPlayerState.jump_status = 0x41;
|
||||
gPlayerEntity.direction = 0xff;
|
||||
gPlayerState.field_0xd = 0xff;
|
||||
return TRUE;
|
||||
} else {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
if (((gPlayerState.flags & PL_FLAGS2) == 0) && (sub_08079D48() == 0)) {
|
||||
gPlayerState.field_0xa |= 0x10;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
gPlayerEntity.flags &= ~ENT_COLLIDE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_08079BD8(Entity* this) {
|
||||
this->x = gPlayerEntity.x;
|
||||
@@ -1337,7 +1501,28 @@ void UpdateFloorType(void) {
|
||||
gUnk_0811C120[gPlayerState.floor_type](&gPlayerEntity);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/GetSurfaceCalcType.inc", u32 GetSurfaceCalcType(Entity* a, u32 b, u32 c))
|
||||
u32 GetSurfaceCalcType(Entity* param_1, s32 x, s32 y) {
|
||||
u32 position = TILE(param_1->x.HALF.HI + (u32)x, param_1->y.HALF.HI + y);
|
||||
u32 tileType = GetTileTypeByPos(param_1->x.HALF.HI + x, param_1->y.HALF.HI + y, gPlayerEntity.collisionLayer);
|
||||
if (tileType != gPlayerState.field_0x22[1]) {
|
||||
gPlayerState.field_0x37 = 0;
|
||||
}
|
||||
if ((tileType != gPlayerState.field_0x22[1]) || (position != gPlayerState.field_0x22[0])) {
|
||||
gPlayerState.field_0x22[0] = position;
|
||||
gPlayerState.field_0x22[1] = tileType;
|
||||
gPlayerState.field_0x11 = 0;
|
||||
}
|
||||
|
||||
if (gPlayerState.field_0x11 != 0xff) {
|
||||
gPlayerState.field_0x11++;
|
||||
}
|
||||
if (gPlayerState.field_0x37 != 0xff) {
|
||||
gPlayerState.field_0x37++;
|
||||
}
|
||||
gPlayerState.floor_type_last = gPlayerState.floor_type;
|
||||
tileType = GetRelativeCollisionTile(param_1, x, y);
|
||||
return sub_08007DD6(tileType, (u16*)gUnk_08007CAC);
|
||||
}
|
||||
|
||||
void EnablePlayerDraw(Entity* this) {
|
||||
this->type2 = 0;
|
||||
@@ -1358,7 +1543,7 @@ bool32 sub_0807A2B8(void) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A2F8.inc", u32 sub_0807A2F8(u32 a1))
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A500.inc", void sub_0807A500())
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A500.inc", u32 sub_0807A500())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807A5B8.inc", void sub_0807A5B8(u32 a))
|
||||
|
||||
|
||||
@@ -188,7 +188,35 @@ END_NONMATCH
|
||||
|
||||
ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this))
|
||||
|
||||
ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC760.inc", void sub_080AC760(Entity* this))
|
||||
void sub_080AC760(Entity* param_1) {
|
||||
s32 tmp;
|
||||
Entity* entity1;
|
||||
Entity* entity2;
|
||||
|
||||
entity1 = param_1->child;
|
||||
tmp = (entity1->direction - param_1->direction) & 0xff;
|
||||
if (((tmp + 8) & 0xff) > 0x10) {
|
||||
if (tmp > 0x80) {
|
||||
entity1->direction = param_1->direction - 8;
|
||||
} else {
|
||||
entity1->direction = param_1->direction + 8;
|
||||
}
|
||||
}
|
||||
entity2 = entity1->child;
|
||||
if (entity2->child == NULL) {
|
||||
entity2->direction = param_1->parent->animationState ^ 0x80;
|
||||
} else {
|
||||
tmp = (entity2->direction - entity1->direction) & 0xff;
|
||||
if (((tmp + 8) & 0xff) <= 0x10) {
|
||||
return;
|
||||
}
|
||||
if (tmp > 0x80) {
|
||||
entity2->direction = entity1->direction - 8;
|
||||
} else {
|
||||
entity2->direction = entity1->direction + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) {
|
||||
// TODO regalloc
|
||||
|
||||
+26
-1
@@ -54,6 +54,8 @@ void sub_08080B60(u8*);
|
||||
|
||||
extern u8 gMapDataTopSpecial[];
|
||||
|
||||
extern const void (*const gUnk_0811E7C4[])(int);
|
||||
|
||||
void UpdateScroll(void) {
|
||||
static void (*const gUnk_0811E768[])(RoomControls*) = {
|
||||
sub_0807FC64, sub_0807FC7C, sub_0807FDB0, NULL, sub_0807FEF0, sub_0807FF54,
|
||||
@@ -363,7 +365,30 @@ ASM_FUNC("asm/non_matching/scroll/sub_08080794.inc", void sub_08080794())
|
||||
|
||||
ASM_FUNC("asm/non_matching/scroll/sub_08080808.inc", void sub_08080808())
|
||||
|
||||
ASM_FUNC("asm/non_matching/scroll/DoExitTransition.inc", void DoExitTransition(const ScreenTransitionData* data))
|
||||
void DoExitTransition(const ScreenTransitionData* data) {
|
||||
PlayerRoomStatus* status;
|
||||
gRoomTransition.transitioningOut = 1;
|
||||
status = &gRoomTransition.player_status;
|
||||
if ((u16)data->playerXPos <= 0x3ff) {
|
||||
status->start_pos_x = data->playerXPos;
|
||||
} else {
|
||||
status->start_pos_x = (gRoomControls.camera_target)->x.HALF.HI | 0x8000;
|
||||
}
|
||||
if ((u16)data->playerYPos <= 0x3ff) {
|
||||
status->start_pos_y = data->playerYPos;
|
||||
} else {
|
||||
status->start_pos_y = (gRoomControls.camera_target)->y.HALF.HI | 0x8000;
|
||||
}
|
||||
status->area_next = data->area;
|
||||
status->room_next = data->room;
|
||||
status->layer = data->playerLayer;
|
||||
status->spawn_type = data->field_0xe;
|
||||
status->start_anim = data->playerState;
|
||||
if (data->transitionSFX != SFX_NONE) {
|
||||
SoundReq(data->transitionSFX);
|
||||
}
|
||||
gUnk_0811E7C4[data->type](data->field_0xa);
|
||||
}
|
||||
|
||||
void sub_080808D8(void) {
|
||||
gRoomTransition.type = TRANSITION_DEFAULT;
|
||||
|
||||
+3
-3
@@ -364,7 +364,7 @@ void sub_080A5B34(void) {
|
||||
}
|
||||
if (bVar1) {
|
||||
if (uVar3 == 0) {
|
||||
SetFade(7, 0x20);
|
||||
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 0x20);
|
||||
gMenu.transitionTimer = 0x3c;
|
||||
SetMenuType(2);
|
||||
} else {
|
||||
@@ -698,7 +698,7 @@ void sub_080A6378(void) {
|
||||
if ((gGenericMenu.unk2c & 0x20) == 0) {
|
||||
gOamCmd.x = gRoomTransition.player_status.overworld_map_x * 0xa0 / 0xf90 + 0x28;
|
||||
gOamCmd.y = (gRoomTransition.player_status.overworld_map_y << 7) / 0xc60 + 0xc;
|
||||
if ((gPlayerState.flags & 8) != 0) {
|
||||
if ((gPlayerState.flags & PL_NO_CAP) != 0) {
|
||||
frameIndex = 0x5a;
|
||||
} else {
|
||||
frameIndex = 0x59;
|
||||
@@ -773,7 +773,7 @@ void sub_080A6534(void) {
|
||||
gGenericMenu.unk10.h[0] = 0;
|
||||
gMenu.transitionTimer = 0x3c;
|
||||
SetMenuType(1);
|
||||
SetFade(4, 8);
|
||||
SetFade(FADE_INSTANT, 8);
|
||||
}
|
||||
|
||||
void sub_080A65AC(void) {
|
||||
|
||||
Reference in New Issue
Block a user