field_map_obj.c up to and including FieldObjectIsTrainerAndCloseToPlayer

This commit is contained in:
PikalaxALT
2017-05-21 00:18:31 -04:00
parent 1c753367fd
commit 101bc4a4e5
2 changed files with 41 additions and 90 deletions
-90
View File
@@ -6,96 +6,6 @@
.text
thumb_func_start sub_805CA08
sub_805CA08: @ 805CA08
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
bl FieldObjectExecRegularAnim
lsls r0, 24
cmp r0, 0
beq _0805CA26
ldrb r0, [r4]
movs r1, 0x3
negs r1, r1
ands r1, r0
strb r1, [r4]
movs r0, 0x1
strh r0, [r5, 0x30]
_0805CA26:
movs r0, 0
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_805CA08
thumb_func_start FieldObjectIsTrainerAndCloseToPlayer
FieldObjectIsTrainerAndCloseToPlayer: @ 805CA30
push {r4-r7,lr}
sub sp, 0x4
adds r5, r0, 0
movs r0, 0x80
bl TestPlayerAvatarFlags
lsls r0, 24
cmp r0, 0
beq _0805CA9C
ldrb r0, [r5, 0x7]
cmp r0, 0x1
beq _0805CA4C
cmp r0, 0x3
bne _0805CA9C
_0805CA4C:
mov r7, sp
adds r7, 0x2
mov r0, sp
adds r1, r7, 0
bl PlayerGetDestCoords
ldrh r2, [r5, 0x10]
ldrh r4, [r5, 0x12]
ldrb r1, [r5, 0x1D]
subs r3, r2, r1
subs r0, r4, r1
lsls r0, 16
lsrs r5, r0, 16
adds r2, r1, r2
lsls r2, 16
lsrs r2, 16
adds r1, r4
lsls r1, 16
lsrs r6, r1, 16
mov r0, sp
lsls r3, 16
asrs r3, 16
movs r1, 0
ldrsh r4, [r0, r1]
cmp r3, r4
bgt _0805CA9C
lsls r0, r2, 16
asrs r0, 16
cmp r0, r4
blt _0805CA9C
lsls r0, r5, 16
asrs r0, 16
movs r2, 0
ldrsh r1, [r7, r2]
cmp r0, r1
bgt _0805CA9C
lsls r0, r6, 16
asrs r0, 16
cmp r0, r1
bge _0805CAA0
_0805CA9C:
movs r0, 0
b _0805CAA2
_0805CAA0:
movs r0, 0x1
_0805CAA2:
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end FieldObjectIsTrainerAndCloseToPlayer
thumb_func_start sub_805CAAC
sub_805CAAC: @ 805CAAC
push {r4,lr}
+41
View File
@@ -1601,3 +1601,44 @@ u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
u8 sub_805CA08(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite) != 0)
{
mapObject->mapobj_bit_1 = 0;
sprite->data1 = 1;
}
return 0;
}
u8 FieldObjectIsTrainerAndCloseToPlayer(struct MapObject *mapObject)
{
s16 x;
s16 y;
s16 objx;
s16 objy;
s16 minx;
s16 maxx;
s16 miny;
s16 maxy;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) == 0)
{
return 0;
}
if (mapObject->trainerType != 1 && mapObject->trainerType != 3)
{
return 0;
}
PlayerGetDestCoords(&x, &y);
objx = mapObject->coords2.x;
objy = mapObject->coords2.y;
minx = objx - mapObject->trainerRange_berryTreeId;
miny = objy - mapObject->trainerRange_berryTreeId;
maxx = objx + mapObject->trainerRange_berryTreeId;
maxy = objy + mapObject->trainerRange_berryTreeId;
if (minx > x || maxx < x || miny > y || maxy < y)
{
return 0;
}
return 1;
}