mirror of
https://github.com/zeldaret/tmc
synced 2026-08-03 00:46:50 -04:00
Match several scroll functions
This commit is contained in:
+103
-4
@@ -51,6 +51,8 @@ u32 sub_08080278();
|
||||
void sub_08080C80(u32*);
|
||||
void sub_08080368();
|
||||
void sub_08080B60(u8*);
|
||||
bool32 sub_08080794(const Transition* transition, u32 param_2, u32 param_3, u32 param_4);
|
||||
bool32 sub_08080808(const Transition* transition, u32 param_2, u32 param_3, u32 param_4);
|
||||
|
||||
extern u8 gMapDataTopSpecial[];
|
||||
|
||||
@@ -357,13 +359,110 @@ void ClearTilemaps(void) {
|
||||
MemClear(&gMapDataTopSpecial, 0x8000);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/scroll/sub_080806BC.inc", bool32 sub_080806BC(u32 a, u32 b, u32 c, u32 d))
|
||||
bool32 sub_080806BC(u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
|
||||
static bool32 (*const gUnk_0811E7AC[])(const Transition*, u32, u32, u32) = {
|
||||
sub_08080794,
|
||||
sub_08080808,
|
||||
sub_08080794,
|
||||
sub_08080808,
|
||||
};
|
||||
u32 uVar1;
|
||||
int iVar2;
|
||||
const Transition* puVar3;
|
||||
|
||||
ASM_FUNC("asm/non_matching/scroll/sub_08080734.inc", void sub_08080734())
|
||||
puVar3 = (gArea.pCurrentRoomInfo->exits);
|
||||
while (*(u16*)puVar3 != 0xffff) {
|
||||
u32 uVar3 = *(u16*)puVar3;
|
||||
if ((((1 << uVar3) & param_4) != 0) && (gUnk_0811E7AC[uVar3](puVar3, param_1, param_2, param_3))) {
|
||||
DoExitTransition((const ScreenTransitionData*)puVar3);
|
||||
return 1;
|
||||
}
|
||||
puVar3++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/scroll/sub_08080794.inc", void sub_08080794())
|
||||
const Transition* sub_08080734(u32 param_1, u32 param_2) {
|
||||
u32 warpType;
|
||||
int iVar2;
|
||||
u32 uVar4;
|
||||
const Transition* puVar3;
|
||||
|
||||
ASM_FUNC("asm/non_matching/scroll/sub_08080808.inc", void sub_08080808())
|
||||
puVar3 = (gArea.pCurrentRoomInfo->exits);
|
||||
uVar4 = 10;
|
||||
while (*(u16*)puVar3 != 0xffff) {
|
||||
if ((((1 << *(u16*)puVar3) & uVar4) != 0) && (sub_08080808(puVar3, param_1, param_2, 0))) {
|
||||
return puVar3;
|
||||
}
|
||||
puVar3++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool32 sub_08080794(const Transition* transition, u32 param_2, u32 param_3, u32 param_4) {
|
||||
u32 bVar1;
|
||||
|
||||
switch (param_4) {
|
||||
default:
|
||||
return 0;
|
||||
case 0:
|
||||
if (gRoomControls.width >> 1 < param_2) {
|
||||
bVar1 = 2;
|
||||
} else {
|
||||
bVar1 = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (gRoomControls.height >> 1 < param_3) {
|
||||
bVar1 = 8;
|
||||
} else {
|
||||
bVar1 = 4;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (gRoomControls.width >> 1 < param_2) {
|
||||
bVar1 = 0x20;
|
||||
} else {
|
||||
bVar1 = 0x10;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (gRoomControls.height >> 1 < param_3) {
|
||||
bVar1 = 0x80;
|
||||
} else {
|
||||
bVar1 = 0x40;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ((transition->shape & bVar1) != 0) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool32 sub_08080808(const Transition* param_1, u32 param_2, u32 param_3, u32 param_4) {
|
||||
static const u8 gUnk_0811E7BC[] = { 6, 6, 6, 14, 14, 6, 22, 6 };
|
||||
const u8* ptr;
|
||||
u32 temp;
|
||||
u32 temp2;
|
||||
u32 temp3;
|
||||
u32 temp4;
|
||||
ptr = &gUnk_0811E7BC[param_1->shape * 2];
|
||||
temp = ptr[0];
|
||||
temp2 = param_2 - param_1->startX;
|
||||
if ((temp2 + temp <= ptr[0] * 2)) {
|
||||
temp3 = ptr[1];
|
||||
temp4 = param_3 - param_1->startY;
|
||||
if (temp4 + temp3 <= ptr[1] * 2) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void DoExitTransition(const ScreenTransitionData* data) {
|
||||
PlayerRoomStatus* status;
|
||||
|
||||
Reference in New Issue
Block a user