SpawnFieldObjectsInView
This commit is contained in:
@@ -5,141 +5,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start SpawnFieldObjectsInView
|
|
||||||
@ void SpawnFieldObjectsInView(u16 movingCameraOffsetX, u16 movingCameraOffsetY)
|
|
||||||
SpawnFieldObjectsInView: @ 808DF80
|
|
||||||
push {r4-r7,lr}
|
|
||||||
mov r7, r10
|
|
||||||
mov r6, r9
|
|
||||||
mov r5, r8
|
|
||||||
push {r5-r7}
|
|
||||||
sub sp, 0x10
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
lsls r1, 16
|
|
||||||
lsrs r1, 16
|
|
||||||
str r1, [sp, 0x8]
|
|
||||||
ldr r5, =gMapHeader
|
|
||||||
ldr r0, [r5, 0x4]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _0808E078
|
|
||||||
ldr r0, =gSaveBlock1Ptr
|
|
||||||
ldr r2, [r0]
|
|
||||||
ldrh r1, [r2]
|
|
||||||
subs r0, r1, 0x2
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
mov r8, r0
|
|
||||||
adds r1, 0x11
|
|
||||||
lsls r1, 16
|
|
||||||
lsrs r1, 16
|
|
||||||
str r1, [sp, 0xC]
|
|
||||||
ldrh r4, [r2, 0x2]
|
|
||||||
adds r0, r4, 0
|
|
||||||
adds r0, 0x10
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
mov r10, r0
|
|
||||||
bl InBattlePyramid
|
|
||||||
lsls r0, 24
|
|
||||||
cmp r0, 0
|
|
||||||
beq _0808DFE0
|
|
||||||
bl sub_81AAA40
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r6, r0, 24
|
|
||||||
b _0808DFF0
|
|
||||||
.pool
|
|
||||||
_0808DFE0:
|
|
||||||
bl InTrainerHill
|
|
||||||
cmp r0, 0
|
|
||||||
beq _0808DFEC
|
|
||||||
movs r6, 0x2
|
|
||||||
b _0808DFF0
|
|
||||||
_0808DFEC:
|
|
||||||
ldr r0, [r5, 0x4]
|
|
||||||
ldrb r6, [r0]
|
|
||||||
_0808DFF0:
|
|
||||||
movs r5, 0
|
|
||||||
cmp r5, r6
|
|
||||||
bcs _0808E078
|
|
||||||
lsls r0, r4, 16
|
|
||||||
asrs r0, 16
|
|
||||||
mov r9, r0
|
|
||||||
mov r1, r8
|
|
||||||
lsls r0, r1, 16
|
|
||||||
asrs r0, 16
|
|
||||||
mov r8, r0
|
|
||||||
_0808E004:
|
|
||||||
lsls r0, r5, 1
|
|
||||||
adds r0, r5
|
|
||||||
lsls r0, 3
|
|
||||||
movs r2, 0xC7
|
|
||||||
lsls r2, 4
|
|
||||||
adds r0, r2
|
|
||||||
ldr r3, =gSaveBlock1Ptr
|
|
||||||
ldr r1, [r3]
|
|
||||||
adds r4, r1, r0
|
|
||||||
ldrh r0, [r4, 0x4]
|
|
||||||
adds r0, 0x7
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r2, r0, 16
|
|
||||||
ldrh r0, [r4, 0x6]
|
|
||||||
adds r0, 0x7
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r1, r0, 16
|
|
||||||
cmp r9, r1
|
|
||||||
bgt _0808E06E
|
|
||||||
mov r7, r10
|
|
||||||
lsls r0, r7, 16
|
|
||||||
asrs r0, 16
|
|
||||||
cmp r0, r1
|
|
||||||
blt _0808E06E
|
|
||||||
lsls r0, r2, 16
|
|
||||||
asrs r1, r0, 16
|
|
||||||
cmp r8, r1
|
|
||||||
bgt _0808E06E
|
|
||||||
ldr r2, [sp, 0xC]
|
|
||||||
lsls r0, r2, 16
|
|
||||||
asrs r0, 16
|
|
||||||
cmp r0, r1
|
|
||||||
blt _0808E06E
|
|
||||||
ldrh r0, [r4, 0x14]
|
|
||||||
bl FlagGet
|
|
||||||
lsls r0, 24
|
|
||||||
cmp r0, 0
|
|
||||||
bne _0808E06E
|
|
||||||
ldr r3, =gSaveBlock1Ptr
|
|
||||||
ldr r0, [r3]
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
ldrb r2, [r0, 0x4]
|
|
||||||
ldr r7, [sp, 0x4]
|
|
||||||
lsls r3, r7, 16
|
|
||||||
ldr r7, [sp, 0x8]
|
|
||||||
lsls r0, r7, 16
|
|
||||||
asrs r0, 16
|
|
||||||
str r0, [sp]
|
|
||||||
adds r0, r4, 0
|
|
||||||
asrs r3, 16
|
|
||||||
bl SpawnFieldObject
|
|
||||||
_0808E06E:
|
|
||||||
adds r0, r5, 0x1
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r5, r0, 24
|
|
||||||
cmp r5, r6
|
|
||||||
bcc _0808E004
|
|
||||||
_0808E078:
|
|
||||||
add sp, 0x10
|
|
||||||
pop {r3-r5}
|
|
||||||
mov r8, r3
|
|
||||||
mov r9, r4
|
|
||||||
mov r10, r5
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end SpawnFieldObjectsInView
|
|
||||||
|
|
||||||
thumb_func_start RemoveFieldObjectsOutsideView
|
thumb_func_start RemoveFieldObjectsOutsideView
|
||||||
@ void RemoveFieldObjectsOutsideView()
|
@ void RemoveFieldObjectsOutsideView()
|
||||||
RemoveFieldObjectsOutsideView: @ 808E08C
|
RemoveFieldObjectsOutsideView: @ 808E08C
|
||||||
|
|||||||
@@ -695,3 +695,47 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
|
|||||||
}
|
}
|
||||||
return spriteId;
|
return spriteId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpawnFieldObjectsInView(s16 cameraX, s16 cameraY)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
s16 left;
|
||||||
|
s16 right;
|
||||||
|
s16 top;
|
||||||
|
s16 bottom;
|
||||||
|
u8 objectCount;
|
||||||
|
s16 npcX;
|
||||||
|
s16 npcY;
|
||||||
|
|
||||||
|
if (gMapHeader.events != NULL)
|
||||||
|
{
|
||||||
|
left = gSaveBlock1Ptr->pos.x - 2;
|
||||||
|
right = gSaveBlock1Ptr->pos.x + 17;
|
||||||
|
top = gSaveBlock1Ptr->pos.y;
|
||||||
|
bottom = gSaveBlock1Ptr->pos.y + 16;
|
||||||
|
|
||||||
|
if (InBattlePyramid())
|
||||||
|
{
|
||||||
|
objectCount = sub_81AAA40();
|
||||||
|
}
|
||||||
|
else if (InTrainerHill())
|
||||||
|
{
|
||||||
|
objectCount = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
objectCount = gMapHeader.events->mapObjectCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < objectCount; i++)
|
||||||
|
{
|
||||||
|
struct MapObjectTemplate *template = &gSaveBlock1Ptr->mapObjectTemplates[i];
|
||||||
|
npcX = template->x + 7;
|
||||||
|
npcY = template->y + 7;
|
||||||
|
|
||||||
|
if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX
|
||||||
|
&& !FlagGet(template->flagId))
|
||||||
|
SpawnFieldObject(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user