diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rom4.c | 211 |
1 files changed, 106 insertions, 105 deletions
diff --git a/src/rom4.c b/src/rom4.c index 9b4abd5e5..e23e5d2fc 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -60,9 +60,12 @@ struct UnkStruct_8054FF8 u16 field_C; }; -struct UnkMapObjStruct +struct LinkPlayerMapObject { - u8 a, b, c, d; + u8 active; + u8 linkPlayerId; + u8 mapObjId; + u8 mode; }; struct UCoords32 @@ -77,7 +80,7 @@ extern struct WarpData gUnknown_02029808; extern struct UnkPlayerStruct gUnknown_02029810; extern u16 gUnknown_02029814; extern bool8 gUnknown_02029816; -extern struct UnkMapObjStruct gUnknown_02029818[]; +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; extern u8 gUnknown_0202E85C; extern u8 gUnknown_0202E85D; @@ -89,7 +92,7 @@ extern u8 gUnknown_03000588; extern u16 word_3004858; extern void (*gUnknown_0300485C)(void); extern u8 gUnknown_03004860; -extern u8 gUnknown_03004864; +extern u8 gFieldLinkPlayerCount; extern struct UnkTVStruct gUnknown_03004870; @@ -119,9 +122,9 @@ extern u8 gUnknown_081A4508[]; extern struct UCoords32 gUnknown_0821664C[]; -extern u8 (*gUnknown_082166A0[])(struct UnkMapObjStruct *, struct MapObject *, u8); -extern u8 (*gUnknown_082166AC[])(struct UnkMapObjStruct *, struct MapObject *, u8); -extern void (*gUnknown_082166D8[])(struct UnkMapObjStruct *, struct MapObject *); +extern u8 (*gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8); +extern u8 (*gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8); +extern void (*gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *); extern struct MapData * const gMapAttributes[]; extern struct MapHeader * const * const gMapGroups[]; @@ -229,19 +232,19 @@ void sub_8055824(void); void sub_8055840(u8 *); void sub_805585C(void); bool32 sub_8055870(void); -void sub_8055980(u8, s16, s16, u8); -void sub_8055A2C(struct MapObject *, s16, s16); +void SpawnLinkPlayerMapObject(u8, s16, s16, u8); +void InitLinkPlayerMapObjectPos(struct MapObject *, s16, s16); void sub_80555B0(int, int, struct UnkStruct_8054FF8 *); u8 sub_8055AE8(u8); void sub_8055B08(u8, u16 *, u16 *); u8 sub_8055B30(u8); u8 sub_8055B50(u8); -u8 sub_8055B9C(s16, s16); +u8 GetLinkPlayerIdAt(s16, s16); void sub_8055BFC(u8, u8); u8 npc_something3(u8, u8); -u8 npc_080587EC(u8, u8, s16, s16); -void sub_8055E5C(u8); -void sub_8055ED8(struct Sprite *); +u8 LinkPlayerDetectCollision(u8, u8, s16, s16); +void CreateLinkPlayerSprite(u8); +void SpriteCB_LinkPlayer(struct Sprite *); void sub_8056C50(u16, u16); void sub_8052F5C(void) @@ -1831,10 +1834,10 @@ void sub_8054EC8(void) sav1_camera_get_focus_coords(&x, &y); x -= gUnknown_03004860; - for (i = 0; i < gUnknown_03004864; i++) + for (i = 0; i < gFieldLinkPlayerCount; i++) { - sub_8055980(i, i + x, y, gLinkPlayers[i].gender); - sub_8055E5C(i); + SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender); + CreateLinkPlayerSprite(i); } sub_8055340(word_3002910); @@ -1843,8 +1846,8 @@ void sub_8054EC8(void) void sub_8054F48(void) { u16 i; - for (i = 0; i < gUnknown_03004864; i++) - sub_8055E5C(i); + for (i = 0; i < gFieldLinkPlayerCount; i++) + CreateLinkPlayerSprite(i); } void sub_8054F70(void) @@ -1857,7 +1860,7 @@ void sub_8054F70(void) bool32 sub_8054F88(u16 a1) { int i; - int count = gUnknown_03004864; + int count = gFieldLinkPlayerCount; for (i = 0; i < count; i++) if (gUnknown_03000580[i] != a1) @@ -1868,7 +1871,7 @@ bool32 sub_8054F88(u16 a1) bool32 sub_8054FC0(u16 a1) { int i; - int count = gUnknown_03004864; + int count = gFieldLinkPlayerCount; for (i = 0; i < count; i++) if (gUnknown_03000580[i] == a1) @@ -2141,9 +2144,9 @@ u16 sub_8055468(u32 a1) return 17; } -u16 sub_805546C(u32 a1) +u16 sub_805546C(u32 linkPlayerId) { - if (gUnknown_03000580[a1] == 0x82 && (gMain.newKeys & B_BUTTON)) + if (gUnknown_03000580[linkPlayerId] == 0x82 && (gMain.newKeys & B_BUTTON)) { sub_80543DC(sub_8055468); return 29; @@ -2215,20 +2218,18 @@ u16 sub_805559C(void) return 0; } -void sub_80555B0(int a1, int a2, struct UnkStruct_8054FF8 *a3) +void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3) { s16 x, y; - u8 val; - a3->a = a1; - a3->b = (a1 == a2) ? 1 : 0; - a3->c = gUnknown_02029818[a1].d; - val = a1; - a3->d = sub_8055B30(val); - sub_8055B08(val, &x, &y); + a3->a = linkPlayerId; + a3->b = (linkPlayerId == a2) ? 1 : 0; + a3->c = gLinkPlayerMapObjects[linkPlayerId].mode; + a3->d = sub_8055B30(linkPlayerId); + sub_8055B08(linkPlayerId, &x, &y); a3->sub.x = x; a3->sub.y = y; - a3->sub.field_8 = sub_8055B50(val); + a3->sub.field_8 = sub_8055B50(linkPlayerId); a3->field_C = MapGridGetMetatileBehaviorAt(x, y); } @@ -2271,8 +2272,7 @@ bool32 sub_8055660(struct UnkStruct_8054FF8 *a1) u8 *sub_805568C(struct UnkStruct_8054FF8 *a1) { struct UnkStruct_8054FF8_Substruct unkStruct; - u8 v5; - register int v6 asm("r2"); + u8 linkPlayerId; if (a1->c && a1->c != 2) return 0; @@ -2281,14 +2281,15 @@ u8 *sub_805568C(struct UnkStruct_8054FF8 *a1) unkStruct.x += gUnknown_0821664C[a1->d].x; unkStruct.y += gUnknown_0821664C[a1->d].y; unkStruct.field_8 = 0; - v5 = sub_8055B9C(unkStruct.x, unkStruct.y); - v6 = v5; + linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y); - if (v5 != 4) + if (linkPlayerId != 4) { - if (!a1->b || gUnknown_03000580[v5] != 0x80) + if (!a1->b) + return gUnknown_081A4495; + if (gUnknown_03000580[linkPlayerId] != 0x80) return gUnknown_081A4495; - if (!sub_8083BF4(v6)) + if (!sub_8083BF4(linkPlayerId)) return gUnknown_081A4479; return gUnknown_081A4487; } @@ -2424,44 +2425,44 @@ bool32 sub_8055940(void) return TRUE; } -void sub_8055954(struct UnkMapObjStruct *a1) +void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj) { - memset(a1, 0, sizeof(struct UnkMapObjStruct)); + memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject)); } void strange_npc_table_clear(void) { - memset(gUnknown_02029818, 0, 16); + memset(gLinkPlayerMapObjects, 0, 16); } -void sub_8055970(void *a1) +void ZeroMapObject(struct MapObject *mapObj) { - memset(a1, 0, 36); + memset(mapObj, 0, sizeof(struct MapObject)); } -void sub_8055980(u8 a1, s16 x, s16 y, u8 a4) +void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4) { u8 mapObjId = sub_805AB54(); - struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; struct MapObject *mapObj = &gMapObjects[mapObjId]; - sub_8055954(unkMapObjStruct); - sub_8055970(mapObj); + ZeroLinkPlayerMapObject(linkPlayerMapObj); + ZeroMapObject(mapObj); - unkMapObjStruct->a = 1; - unkMapObjStruct->b = a1; - unkMapObjStruct->c = mapObjId; - unkMapObjStruct->d = 0; + linkPlayerMapObj->active = 1; + linkPlayerMapObj->linkPlayerId = linkPlayerId; + linkPlayerMapObj->mapObjId = mapObjId; + linkPlayerMapObj->mode = 0; mapObj->active = 1; mapObj->mapobj_bit_1 = a4; mapObj->mapobj_unk_19 = 2; mapObj->spriteId = 64; - sub_8055A2C(mapObj, x, y); + InitLinkPlayerMapObjectPos(mapObj, x, y); } -void sub_8055A2C(struct MapObject *mapObj, s16 x, s16 y) +void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y) { mapObj->coords2.x = x; mapObj->coords2.y = y; @@ -2472,72 +2473,72 @@ void sub_8055A2C(struct MapObject *mapObj, s16 x, s16 y) FieldObjectUpdateZCoord(mapObj); } -void unref_sub_8055A6C(u8 a1, u8 a2) +void unref_sub_8055A6C(u8 linkPlayerId, u8 a2) { - if (gUnknown_02029818[a1].a) + if (gLinkPlayerMapObjects[linkPlayerId].active) { - u8 mapObjId = gUnknown_02029818[a1].c; + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; mapObj->mapobj_unk_19 = a2; } } -void unref_sub_8055A9C(u8 a1) +void unref_sub_8055A9C(u8 linkPlayerId) { - struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; - u8 mapObjId = unkMapObjStruct->c; + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + u8 mapObjId = linkPlayerMapObj->mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; if (mapObj->spriteId != 64 ) DestroySprite(&gSprites[mapObj->spriteId]); - unkMapObjStruct->a = 0; + linkPlayerMapObj->active = 0; mapObj->active = 0; } -u8 sub_8055AE8(u8 a1) +u8 sub_8055AE8(u8 linkPlayerId) { - u8 mapObjId = gUnknown_02029818[a1].c; + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; return mapObj->spriteId; } -void sub_8055B08(u8 a1, u16 *x, u16 *y) +void sub_8055B08(u8 linkPlayerId, u16 *x, u16 *y) { - u8 mapObjId = gUnknown_02029818[a1].c; + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; *x = mapObj->coords2.x; *y = mapObj->coords2.y; } -u8 sub_8055B30(u8 a1) +u8 sub_8055B30(u8 linkPlayerId) { - u8 mapObjId = gUnknown_02029818[a1].c; + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; return mapObj->mapobj_unk_19; } -u8 sub_8055B50(u8 a1) +u8 sub_8055B50(u8 linkPlayerId) { - u8 mapObjId = gUnknown_02029818[a1].c; + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; return mapObj->mapobj_unk_0B_0; } -s32 unref_sub_8055B74(u8 a1) +s32 unref_sub_8055B74(u8 linkPlayerId) { - u8 mapObjId = gUnknown_02029818[a1].c; + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; return 16 - (s8)mapObj->mapobj_unk_21; } -u8 sub_8055B9C(s16 x, s16 y) +u8 GetLinkPlayerIdAt(s16 x, s16 y) { u8 i; for (i = 0; i < 4; i++) { - if (gUnknown_02029818[i].a - && (gUnknown_02029818[i].d == 0 || gUnknown_02029818[i].d == 2)) + if (gLinkPlayerMapObjects[i].active + && (gLinkPlayerMapObjects[i].mode == 0 || gLinkPlayerMapObjects[i].mode == 2)) { - struct MapObject *mapObj = &gMapObjects[gUnknown_02029818[i].c]; + struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId]; if (mapObj->coords2.x == x && mapObj->coords2.y == y) return i; } @@ -2545,49 +2546,49 @@ u8 sub_8055B9C(s16 x, s16 y) return 4; } -void sub_8055BFC(u8 a1, u8 a2) +void sub_8055BFC(u8 linkPlayerId, u8 a2) { - struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; - u8 mapObjId = unkMapObjStruct->c; + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + u8 mapObjId = linkPlayerMapObj->mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; - if (unkMapObjStruct->a) + if (linkPlayerMapObj->active) { if (a2 > 10) mapObj->mapobj_bit_2 = 1; else - gUnknown_082166D8[gUnknown_082166A0[unkMapObjStruct->d](unkMapObjStruct, mapObj, a2)](unkMapObjStruct, mapObj); + gUnknown_082166D8[gUnknown_082166A0[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj); } } -u8 sub_8055C68(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { - return gUnknown_082166AC[a3](unkMapObjStruct, mapObj, a3); + return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); } -u8 sub_8055C88(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { return 1; } -u8 sub_8055C8C(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { - return gUnknown_082166AC[a3](unkMapObjStruct, mapObj, a3); + return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); } -u8 sub_8055CAC(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { return 0; } -u8 sub_8055CB0(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { s16 x, y; mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); FieldObjectMoveDestCoords(mapObj, mapObj->mapobj_unk_19, &x, &y); - if (npc_080587EC(unkMapObjStruct->c, mapObj->mapobj_unk_19, x, y)) + if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->mapobj_unk_19, x, y)) { return 0; } @@ -2600,26 +2601,26 @@ u8 sub_8055CB0(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj } } -u8 sub_8055D18(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); return 0; } -void sub_8055D30(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj) +void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) { - unkMapObjStruct->d = 0; + linkPlayerMapObj->mode = 0; } -void sub_8055D38(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj) +void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) { mapObj->mapobj_unk_21--; - unkMapObjStruct->d = 1; + linkPlayerMapObj->mode = 1; MoveCoords(mapObj->mapobj_unk_19, &mapObj->coords1.x, &mapObj->coords1.y); if (!mapObj->mapobj_unk_21) { npc_coords_shift_still(mapObj); - unkMapObjStruct->d = 2; + linkPlayerMapObj->mode = 2; } } @@ -2643,12 +2644,12 @@ u8 npc_something3(u8 a1, u8 a2) return a2; } -u8 npc_080587EC(u8 a1, u8 a2, s16 x, s16 y) +u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y) { u8 i; for (i = 0; i < 16; i++) { - if (i != a1) + if (i != selfMapObjId) { if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y)) @@ -2660,33 +2661,33 @@ u8 npc_080587EC(u8 a1, u8 a2, s16 x, s16 y) return MapGridIsImpassableAt(x, y); } -void sub_8055E5C(u8 a1) +void CreateLinkPlayerSprite(u8 linkPlayerId) { - struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; - u8 mapObjId = unkMapObjStruct->c; + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + u8 mapObjId = linkPlayerMapObj->mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; struct Sprite *sprite; - if (unkMapObjStruct->a) + if (linkPlayerMapObj->active) { u8 val = sub_805983C(0, mapObj->mapobj_bit_1); - mapObj->spriteId = AddPseudoFieldObject(val, sub_8055ED8, 0, 0, 0); + mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0); sprite = &gSprites[mapObj->spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->data0 = a1; + sprite->data0 = linkPlayerId; mapObj->mapobj_bit_2 = 0; } } -void sub_8055ED8(struct Sprite *sprite) +void SpriteCB_LinkPlayer(struct Sprite *sprite) { - struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[sprite->data0]; - struct MapObject *mapObj = &gMapObjects[unkMapObjStruct->c]; + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data0]; + struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId]; sprite->pos1.x = mapObj->coords1.x; sprite->pos1.y = mapObj->coords1.y; SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); sprite->oam.priority = ZCoordToPriority(mapObj->elevation); - if (!unkMapObjStruct->d) + if (!linkPlayerMapObj->mode) StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->mapobj_unk_19)); else StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->mapobj_unk_19)); |