Fix fakematch and match nonmatching.

This commit is contained in:
ultima-soul 2020-03-15 08:12:39 -07:00
parent 96b7836d48
commit dd24bd3116
3 changed files with 14 additions and 174 deletions

View File

@ -15,7 +15,7 @@ extern struct BackupMapLayout gBackupMapLayout;
extern const struct MapLayout Route1_Layout;
u32 MapGridGetMetatileIdAt(int, int);
u32 MapGridGetMetatileBehaviorAt(int, int);
u32 MapGridGetMetatileBehaviorAt(s16, s16);
u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y);
void MapGridSetMetatileIdAt(int, int, u16);
void MapGridSetMetatileEntryAt(int, int, u16);

View File

@ -7432,7 +7432,7 @@ static void sub_8067A10(struct ObjectEvent *objectEvent, struct Sprite *sprite)
x2 = graphicsInfo->width + (s16)x;
y2 = graphicsInfo->height + (s16)y;
if (*((u16 *)(&gSaveBlock1Ptr->location.mapGroup)) == 1025 && objectEvent->localId == 1)
if (gSaveBlock1Ptr->location.mapGroup == 1 && gSaveBlock1Ptr->location.mapNum == 4 && objectEvent->localId == 1)
{
var = 65504;
}
@ -7693,18 +7693,18 @@ static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *objEvent, u32 *
}
}
#ifdef NONMATCHING
static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
{
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
// ceil div by tile width?
s16 width;
s16 height;
s16 width = 1;
s16 height = 2;
s16 i;
s16 j;
u8 result;
u8 b;
s16 one;
#define RETURN_REFLECTION_TYPE_AT(x, y) \
b = MapGridGetMetatileBehaviorAt(x, y); \
@ -7712,182 +7712,22 @@ static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
if (result != 0) \
return result;
for (i = 0, height = 1; i < height && height < 2;)
for (i = 0, one = 1; i < height; i++)
{
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x, (u16) (objEvent->currentCoords.y + 1 + i))
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x, (u16) (objEvent->previousCoords.y + 1 + i))
for (j = 1; j < width && width < 2; j++)
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x, objEvent->currentCoords.y + one + i)
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x, objEvent->previousCoords.y + one + i)
for (j = 1; j < width; j++)
{
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x + j, objEvent->currentCoords.y + 1 + i)
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x - j, objEvent->currentCoords.y + 1 + i)
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x + j, objEvent->previousCoords.y + 1 + i)
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x - j, objEvent->previousCoords.y + 1 + i)
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x + j, objEvent->currentCoords.y + one + i)
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x - j, objEvent->currentCoords.y + one + i)
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x + j, objEvent->previousCoords.y + one + i)
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x - j, objEvent->previousCoords.y + one + i)
}
}
return 0;
#undef RETURN_REFLECTION_TYPE_AT
}
#else
NAKED
static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
{
asm_unified("\n\
push {r4-r7,lr} \n\
mov r7, r10 \n\
mov r6, r9 \n\
mov r5, r8 \n\
push {r5-r7} \n\
adds r5, r0, 0 \n\
ldrb r0, [r5, 0x5] \n\
bl GetObjectEventGraphicsInfo \n\
movs r4, 0 \n\
movs r0, 0x1 \n\
mov r10, r0 \n\
_08067FA0: \n\
movs r1, 0x10 \n\
ldrsh r0, [r5, r1] \n\
ldrh r1, [r5, 0x12] \n\
add r1, r10 \n\
lsls r4, 16 \n\
asrs r6, r4, 16 \n\
adds r1, r6, r1 \n\
lsls r1, 16 \n\
asrs r1, 16 \n\
bl MapGridGetMetatileBehaviorAt \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
bl GetReflectionTypeByMetatileBehavior \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
mov r9, r4 \n\
cmp r0, 0 \n\
bne _080680BA \n\
movs r3, 0x14 \n\
ldrsh r0, [r5, r3] \n\
ldrh r1, [r5, 0x16] \n\
add r1, r10 \n\
adds r1, r6, r1 \n\
lsls r1, 16 \n\
asrs r1, 16 \n\
bl MapGridGetMetatileBehaviorAt \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
bl GetReflectionTypeByMetatileBehavior \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
cmp r0, 0 \n\
bne _080680BA \n\
movs r2, 0x1 \n\
lsls r0, r2, 16 \n\
asrs r1, r0, 16 \n\
mov r8, r0 \n\
cmp r2, r1 \n\
bge _080680A8 \n\
movs r0, 0x80 \n\
lsls r0, 9 \n\
asrs r7, r0, 16 \n\
_08067FFC: \n\
ldrh r0, [r5, 0x10] \n\
lsls r1, r2, 16 \n\
asrs r4, r1, 16 \n\
adds r0, r4, r0 \n\
lsls r0, 16 \n\
asrs r0, 16 \n\
ldrh r1, [r5, 0x12] \n\
adds r1, r7, r1 \n\
adds r1, r6, r1 \n\
lsls r1, 16 \n\
asrs r1, 16 \n\
bl MapGridGetMetatileBehaviorAt \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
bl GetReflectionTypeByMetatileBehavior \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
cmp r0, 0 \n\
bne _080680BA \n\
ldrh r0, [r5, 0x10] \n\
subs r0, r4 \n\
lsls r0, 16 \n\
asrs r0, 16 \n\
ldrh r1, [r5, 0x12] \n\
adds r1, r7, r1 \n\
adds r1, r6, r1 \n\
lsls r1, 16 \n\
asrs r1, 16 \n\
bl MapGridGetMetatileBehaviorAt \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
bl GetReflectionTypeByMetatileBehavior \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
cmp r0, 0 \n\
bne _080680BA \n\
ldrh r0, [r5, 0x14] \n\
adds r0, r4, r0 \n\
lsls r0, 16 \n\
asrs r0, 16 \n\
ldrh r1, [r5, 0x16] \n\
adds r1, r7, r1 \n\
adds r1, r6, r1 \n\
lsls r1, 16 \n\
asrs r1, 16 \n\
bl MapGridGetMetatileBehaviorAt \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
bl GetReflectionTypeByMetatileBehavior \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
cmp r0, 0 \n\
bne _080680BA \n\
ldrh r0, [r5, 0x14] \n\
subs r0, r4 \n\
lsls r0, 16 \n\
asrs r0, 16 \n\
ldrh r1, [r5, 0x16] \n\
adds r1, r7, r1 \n\
adds r1, r6, r1 \n\
lsls r1, 16 \n\
asrs r1, 16 \n\
bl MapGridGetMetatileBehaviorAt \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
bl GetReflectionTypeByMetatileBehavior \n\
lsls r0, 24 \n\
lsrs r0, 24 \n\
cmp r0, 0 \n\
bne _080680BA \n\
adds r0, r4, 0x1 \n\
lsls r0, 16 \n\
lsrs r2, r0, 16 \n\
asrs r0, 16 \n\
mov r3, r8 \n\
asrs r1, r3, 16 \n\
cmp r0, r1 \n\
blt _08067FFC \n\
_080680A8: \n\
movs r0, 0x80 \n\
lsls r0, 9 \n\
add r0, r9 \n\
lsrs r4, r0, 16 \n\
asrs r0, 16 \n\
cmp r0, 0x2 \n\
bge _080680B8 \n\
b _08067FA0 \n\
_080680B8: \n\
movs r0, 0 \n\
_080680BA: \n\
pop {r3-r5} \n\
mov r8, r3 \n\
mov r9, r4 \n\
mov r10, r5 \n\
pop {r4-r7} \n\
pop {r1} \n\
bx r1 \n\
");
}
#endif
static u8 GetReflectionTypeByMetatileBehavior(u32 behavior)
{

View File

@ -460,7 +460,7 @@ u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr)
return GetBehaviorByMetatileIdAndMapLayout(gMapHeader.mapLayout, metatileId, attr);
}
u32 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
u32 MapGridGetMetatileBehaviorAt(s16 x, s16 y)
{
return MapGridGetMetatileAttributeAt(x, y, 0);
}