This commit is contained in:
red031000
2024-05-10 10:24:49 +01:00
parent 410108e4a1
commit a5cdb5e2b8
10 changed files with 94 additions and 143 deletions

View File

@@ -4,119 +4,11 @@
.extern UNK_020F6364
.extern sub_02057EE0
.extern sub_02057F18
.extern sub_0205815C
.extern sub_0205818C
.text
thumb_func_start MapObjectManager_GetFirstObjectAndIndexWithFlag
MapObjectManager_GetFirstObjectAndIndexWithFlag: ; 0x020580F4
push {r3-r7, lr}
add r5, r2, #0x0
add r4, r0, #0x0
str r1, [sp, #0x0]
add r6, r3, #0x0
bl MapObjectManager_GetObjectCount
add r7, r0, #0x0
ldr r0, [r5, #0x0]
cmp r0, r7
blt _0205810E
mov r0, #0x0
pop {r3-r7, pc}
_0205810E:
add r0, r4, #0x0
bl MapObjectManager_GetConstObjects
mov r1, #0x4a
ldr r2, [r5, #0x0]
lsl r1, r1, #0x2
mul r1, r2
add r4, r0, r1
_0205811E:
ldr r0, [r5, #0x0]
add r1, r6, #0x0
add r0, r0, #0x1
str r0, [r5, #0x0]
add r0, r4, #0x0
bl MapObject_GetFlagsBits
cmp r6, r0
bne _02058138
ldr r0, [sp, #0x0]
str r4, [r0, #0x0]
mov r0, #0x1
pop {r3-r7, pc}
_02058138:
mov r0, #0x4a
lsl r0, r0, #0x2
add r4, r4, r0
ldr r0, [r5, #0x0]
cmp r0, r7
blt _0205811E
mov r0, #0x0
pop {r3-r7, pc}
thumb_func_start sub_02058148
sub_02058148: ; 0x02058148
push {r4, lr}
add r4, r0, #0x0
mov r1, #0x4
bl MapObject_SetFlagsBits
add r0, r4, #0x0
bl sub_0205815C
pop {r4, pc}
.balign 4
thumb_func_start sub_0205815C
sub_0205815C: ; 0x0205815C
ldr r3, _02058164 ; =MapObject_ClearFlagsBits
ldr r1, _02058168 ; =0x05108000
bx r3
nop
_02058164: .word MapObject_ClearFlagsBits
_02058168: .word 0x05108000
thumb_func_start sub_0205816C
sub_0205816C: ; 0x0205816C
bx lr
.balign 4
thumb_func_start FieldSystem_ResolveObjectSpriteID
FieldSystem_ResolveObjectSpriteID: ; 0x02058170
push {r3, lr}
cmp r1, #0x65
blt _02058186
cmp r1, #0x75
bgt _02058186
sub r1, #0x65
lsl r1, r1, #0x10
lsr r1, r1, #0x10
bl sub_02039504
add r1, r0, #0x0
_02058186:
add r0, r1, #0x0
pop {r3, pc}
.balign 4
thumb_func_start sub_0205818C
sub_0205818C: ; 0x0205818C
push {r4, lr}
mov r1, #0x1
lsl r1, r1, #0xc
add r4, r0, #0x0
bl MapObject_GetFlagsBits
cmp r0, #0x0
beq _020581A2
add r0, r4, #0x0
bl sub_02059D1C
_020581A2:
pop {r4, pc}
thumb_func_start sub_020581A4
sub_020581A4: ; 0x020581A4
push {r4, lr}
add r4, r0, #0x0
bl sub_02057EE0
add r0, r4, #0x0
bl sub_02058EE8
pop {r4, pc}
thumb_func_start sub_020581B4
sub_020581B4: ; 0x020581B4
push {r4, lr}

View File

@@ -1982,8 +1982,8 @@ _020394FE:
pop {r4, pc}
.balign 4
thumb_func_start sub_02039504
sub_02039504: ; 0x02039504
thumb_func_start FieldSystem_VarGetObjectEventGraphicsId
FieldSystem_VarGetObjectEventGraphicsId: ; 0x02039504
push {r3-r5, lr}
add r4, r1, #0x0
add r5, r0, #0x0

View File

@@ -210,7 +210,7 @@ sub_0204B490: ; 0x0204B490
add r1, sp, #0x0
add r2, sp, #0x4
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x1
bne _0204B4F8
mov r6, #0x0
@@ -240,7 +240,7 @@ _0204B4E8:
add r1, sp, #0x0
add r2, sp, #0x4
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x1
beq _0204B4B6
_0204B4F8:

View File

@@ -271,7 +271,7 @@ sub_020552A4: ; 0x020552A4
add r2, sp, #0x4
mov r3, #0x1
add r5, r0, #0x0
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x0
beq _020552DE
add r4, sp, #0x0
@@ -286,7 +286,7 @@ _020552C4:
add r1, r4, #0x0
add r2, r6, #0x0
add r3, r7, #0x0
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x0
bne _020552C4
_020552DE:

View File

@@ -175,7 +175,7 @@ sub_0205C6BC: ; 0x0205C6BC
add r1, sp, #0x4
add r2, sp, #0xc
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x0
beq _0205C734
_0205C6DE:
@@ -216,7 +216,7 @@ _0205C724:
add r1, sp, #0x4
add r2, sp, #0xc
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x0
bne _0205C6DE
_0205C734:
@@ -599,7 +599,7 @@ sub_0205C9F0: ; 0x0205C9F0
add r1, sp, #0x0
add r2, sp, #0x4
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x0
beq _0205CA40
add r7, sp, #0x0
@@ -623,7 +623,7 @@ _0205CA30:
add r1, r7, #0x0
add r2, sp, #0x4
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x0
bne _0205CA10
_0205CA40:

View File

@@ -441,7 +441,7 @@ _0205E810:
add r1, sp, #0x4
add r2, sp, #0x8
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x1
bne _0205E84C
_0205E81E:
@@ -463,7 +463,7 @@ _0205E83C:
add r1, sp, #0x4
add r2, sp, #0x8
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x1
beq _0205E81E
_0205E84C:
@@ -492,7 +492,7 @@ sub_0205E854: ; 0x0205E854
add r1, sp, #0x4
add r2, sp, #0x8
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x1
bne _0205E8C6
_0205E886:
@@ -523,7 +523,7 @@ _0205E8B6:
add r1, sp, #0x4
add r2, sp, #0x8
mov r3, #0x1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #0x1
beq _0205E886
_0205E8C6:

View File

@@ -2680,7 +2680,7 @@
.extern sub_02039460
.extern GetVarPointer
.extern FieldSystem_VarGet
.extern sub_02039504
.extern FieldSystem_VarGetObjectEventGraphicsId
.extern FieldSystem_FlagCheck
.extern FieldSystem_FlagSet
.extern FlagClear
@@ -4001,7 +4001,7 @@
.extern MapObject_CreateFromMultipleObjectEvents
.extern MapObjectManager_GetFirstActiveObjectByID
.extern MapObjectManager_GetFirstActiveObjectWithMovement
.extern MapObjectManager_GetFirstObjectAndIndexWithFlag
.extern MapObjectManager_GetNextObjectWithFlagFromIndex
.extern sub_0205829C
.extern sub_020582A8
.extern sub_020582F8

View File

@@ -1585,7 +1585,7 @@ ov05_021F2B10: ; 0x021F2B10
add r2, sp, #4
mov r3, #1
add r7, r0, #0
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #1
bne _021F2B6A
_021F2B2E:
@@ -1615,7 +1615,7 @@ _021F2B5A:
add r1, sp, #0
add r2, sp, #4
mov r3, #1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #1
beq _021F2B2E
_021F2B6A:
@@ -1636,7 +1636,7 @@ ov05_021F2B70: ; 0x021F2B70
add r2, sp, #4
mov r3, #1
add r7, r0, #0
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #1
bne _021F2BEE
_021F2B8E:
@@ -1682,7 +1682,7 @@ _021F2BDE:
add r1, sp, #0
add r2, sp, #4
mov r3, #1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #1
beq _021F2B8E
_021F2BEE:
@@ -1705,7 +1705,7 @@ ov05_021F2BF8: ; 0x021F2BF8
add r2, sp, #4
mov r3, #1
add r7, r0, #0
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #1
bne _021F2C74
_021F2C16:
@@ -1750,7 +1750,7 @@ _021F2C64:
add r1, sp, #0
add r2, sp, #4
mov r3, #1
bl MapObjectManager_GetFirstObjectAndIndexWithFlag
bl MapObjectManager_GetNextObjectWithFlagFromIndex
cmp r0, #1
beq _021F2C16
_021F2C74:

View File

@@ -24,8 +24,12 @@ static void sub_02057E90(LocalMapObject *object, MapObjectManager *manager);
static void MapObject_Clear(LocalMapObject *object);
static u32 sub_02057F90(LocalMapObject *object, u32 flagId, u32 objectEventCount, ObjectEvent *objectEvents);
static LocalMapObject *MapObjectManager_GetFirstObjectWithID(MapObjectManager *manager, u32 objectId, u32 flagId);
extern BOOL MapObjectManager_GetFirstObjectAndIndexWithFlag(MapObjectManager *manager, LocalMapObject **object, s32 *index, MapObjectFlagBits bits);
static void sub_02058148(LocalMapObject *object);
/*static*/ void sub_0205815C(LocalMapObject *object);
static void MapObject_NoOp(LocalMapObject *object);
static u32 FieldSystem_ResolveObjectSpriteID(FieldSystem *fieldSystem, s32 spriteId);
/*static*/ void sub_0205818C(LocalMapObject *object);
static void sub_020581A4(LocalMapObject *object);
extern void MapObjectManager_SetFieldSystemPtr(MapObjectManager *manager, FieldSystem *fieldSystem);
extern void MapObjectManager_SetObjectCount(MapObjectManager *manager, u32 objectCount);
@@ -46,7 +50,6 @@ extern void sub_02058258(LocalMapObject *object, u32 mapNo, ObjectEvent *objectE
extern FieldSystem *MapObjectManager_GetFieldSystemPtr(MapObjectManager *manager);
extern void sub_02057E90(LocalMapObject *object, MapObjectManager *manager);
extern void sub_0205844C(LocalMapObject *object, u32 mapNo);
extern void sub_020581A4(LocalMapObject *object);
extern void sub_020581B4(LocalMapObject *object);
extern void MapObject_SetFlagsBits(LocalMapObject *object, MapObjectFlagBits bits);
extern MapObjectManager *MapObjectManager_GetMapObjectManager(MapObjectManager *manager);
@@ -68,7 +71,6 @@ extern u32 ObjectEvent_GetFlagID(ObjectEvent *objectEvent);
extern ObjectEvent *ObjectEvent_GetById(u32 id, u32 objectEventCount, ObjectEvent *events);
extern u8 FieldSystem_FlagCheck(FieldSystem *fieldSystem, u16 flag);
extern void MapObject_SetSpriteID(LocalMapObject *object, u32 sprite);
extern void sub_02058148(LocalMapObject *object);
extern void MapObject_ClearFlagsBits(LocalMapObject *object, MapObjectFlagBits bits);
extern BOOL sub_02058934(LocalMapObject *object);
extern MapObjectManager *MapObject_GetManager(LocalMapObject *object);
@@ -92,7 +94,6 @@ extern void sub_020586AC(LocalMapObject *object, LocalMapObject_UnkCallback call
extern void sub_020586C0(LocalMapObject *object, LocalMapObject_UnkCallback callback);
extern void sub_020586D4(LocalMapObject *object, LocalMapObject_UnkCallback callback);
extern void sub_020586C8(LocalMapObject *object);
extern void sub_0205816C(LocalMapObject *object);
extern BOOL MapObject_CheckFlag14(LocalMapObject *object);
extern void sub_020586DC(LocalMapObject *object);
extern void sub_02057AEC(MapObjectManager *manager, LocalMapObject *object);
@@ -145,7 +146,6 @@ extern void MapObject_SetPositionVec(LocalMapObject *object, VecFx32 *coords);
extern void MapObject_SetManager(LocalMapObject *object, MapObjectManager *manager);
extern void MapObject_ClearHeldMovement(LocalMapObject *object);
extern void sub_0205866C(LocalMapObject *object);
extern void sub_0205815C(LocalMapObject *object);
extern void MapObject_GetPositionVec(LocalMapObject *object, VecFx32 *position);
extern void MapObject_SetPreviousX(LocalMapObject *object, u32 previousX);
extern void MapObject_SetPreviousHeight(LocalMapObject *object, u32 previousHeight);
@@ -157,7 +157,6 @@ extern void sub_0205832C(SysTask *task, LocalMapObject *object);
extern u32 MapObjectManager_GetPriority(MapObjectManager *manager);
extern void sub_02058554(LocalMapObject *object, SysTask *task);
extern u16 ObjectEvent_GetSpriteID(ObjectEvent *objectEvent);
extern u32 FieldSystem_ResolveObjectSpriteID(FieldSystem *fieldSystem, u16 spriteId);
extern u16 ObjectEvent_GetMovement(ObjectEvent *objectEvent);
extern u16 ObjectEvent_GetType(ObjectEvent *objectEvent);
extern u16 ObjectEvent_GetScript(ObjectEvent *objectEvent);
@@ -189,6 +188,9 @@ extern void sub_020586C0(LocalMapObject *object, LocalMapObject_UnkCallback call
extern LocalMapObject_UnkCallback sub_02058D48(UnkLMOCallbackStruct2 *callbackStruct);
extern void sub_020586D4(LocalMapObject *object, LocalMapObject_UnkCallback callback);
extern const LocalMapObject *MapObjectManager_GetConstObjects(MapObjectManager *manager);
extern u16 FieldSystem_VarGetObjectEventGraphicsId(FieldSystem *fieldSystem, u16 spriteId);
extern u32 sub_02059D1C(LocalMapObject *object);
extern void sub_02058EE8(LocalMapObject *object);
MapObjectManager *MapObjectManager_Init(FieldSystem *fieldSystem, u32 objectCount, u32 priority) {
MapObjectManager *ret = MapObjectManager_New(objectCount);
@@ -383,7 +385,7 @@ void sub_02057750(MapObjectManager *manager) {
do {
if (MapObject_GetFlagsBits(objects, MAPOBJECTFLAG_ACTIVE) != 0 && MapObject_GetFlagsBits(objects, MAPOBJECTFLAG_UNK14) != 0) {
sub_020586C8(objects);
sub_0205816C(objects);
MapObject_NoOp(objects);
}
i++;
@@ -418,7 +420,7 @@ void FieldSystem_SyncMapObjectsToSaveEx(FieldSystem *fieldSystem, MapObjectManag
s32 index = 0;
LocalMapObject *object;
while (MapObjectManager_GetFirstObjectAndIndexWithFlag(manager, &object, &index, MAPOBJECTFLAG_ACTIVE)) { //MapObjectManager_GetNextActiveObject? this is an iterator however
while (MapObjectManager_GetNextObjectWithFlagFromIndex(manager, &object, &index, MAPOBJECTFLAG_ACTIVE)) { //MapObjectManager_GetNextActiveObject? this is an iterator however
SavedMapObject_InitFromLocalMapObject(fieldSystem, object, savedObjects);
count--;
@@ -611,7 +613,7 @@ static LocalMapObject *sub_02057C98(MapObjectManager *manager, u32 id, u32 mapNo
s32 index = 0;
LocalMapObject *object;
while (MapObjectManager_GetFirstObjectAndIndexWithFlag(manager, &object, &index, MAPOBJECTFLAG_ACTIVE) == TRUE) {
while (MapObjectManager_GetNextObjectWithFlagFromIndex(manager, &object, &index, MAPOBJECTFLAG_ACTIVE) == TRUE) {
if (MapObject_CheckFlag25(object) == TRUE && MapObject_GetID(object) == id && sub_02058750(object) == mapNo) {
return object;
}
@@ -738,7 +740,7 @@ static LocalMapObject *MapObjectManager_GetFirstObjectWithID(MapObjectManager *m
s32 index = 0;
LocalMapObject *object;
while (MapObjectManager_GetFirstObjectAndIndexWithFlag(manager, &object, &index, MAPOBJECTFLAG_ACTIVE) == TRUE) {
while (MapObjectManager_GetNextObjectWithFlagFromIndex(manager, &object, &index, MAPOBJECTFLAG_ACTIVE) == TRUE) {
if (MapObject_GetID(object) == objectId && sub_02058450(object) == flagId) {
return object;
}
@@ -781,3 +783,59 @@ LocalMapObject *MapObjectManager_GetFirstActiveObjectWithMovement(MapObjectManag
return NULL;
}
BOOL MapObjectManager_GetNextObjectWithFlagFromIndex(MapObjectManager *manager, LocalMapObject **objectDest, s32 *index, MapObjectFlagBits flag) {
s32 count = MapObjectManager_GetObjectCount(manager);
if (*index >= count) {
return FALSE;
}
LocalMapObject *objects = (LocalMapObject *)MapObjectManager_GetConstObjects(manager);
LocalMapObject *object = objects + *index;
do {
(*index)++;
if (flag == (MapObjectFlagBits)MapObject_GetFlagsBits(object, flag)) {
*objectDest = object;
return TRUE;
}
object++;
} while (*index < count);
return FALSE;
}
static void sub_02058148(LocalMapObject *object) {
MapObject_SetFlagsBits(object, MAPOBJECTFLAG_UNK2);
sub_0205815C(object);
}
/*static*/ void sub_0205815C(LocalMapObject *object) {
MapObject_ClearFlagsBits(object, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK26 | MAPOBJECTFLAG_UNK24 |
MAPOBJECTFLAG_UNK20 | MAPOBJECTFLAG_UNK15));
}
static void MapObject_NoOp(LocalMapObject *object) {
// NoOp
}
static u32 FieldSystem_ResolveObjectSpriteID(FieldSystem *fieldSystem, s32 spriteId) {
//BUG: index out of range, should be < not <=
//TODO: check these with sprite constants, these should be variable sprites but this starts at 101 not 100
if (spriteId >= 101 && spriteId <= 117) {
spriteId = FieldSystem_VarGetObjectEventGraphicsId(fieldSystem, (u16)(spriteId - 101));
}
return spriteId;
}
/*static*/ void sub_0205818C(LocalMapObject *object) {
if (MapObject_GetFlagsBits(object, MAPOBJECTFLAG_UNK12) != 0) {
sub_02059D1C(object);
}
}
static void sub_020581A4(LocalMapObject *object) {
sub_02057EE0(object);
sub_02058EE8(object);
}

View File

@@ -126,5 +126,6 @@ void MapObjectManager_RestoreFromSave(MapObjectManager *manager, SavedMapObject
void MapObject_CreateFromMultipleObjectEvents(MapObjectManager *manager, u32 mapNo, u32 objectEventCount, ObjectEvent *objectEvents);
LocalMapObject *MapObjectManager_GetFirstActiveObjectByID(MapObjectManager *manager, u32 id);
LocalMapObject *MapObjectManager_GetFirstActiveObjectWithMovement(MapObjectManager *manager, u32 movement);
BOOL MapObjectManager_GetNextObjectWithFlagFromIndex(MapObjectManager *manager, LocalMapObject **objectDest, s32 *index, MapObjectFlagBits flag);
#endif //POKEDIAMOND_MAP_OBJECT_H