From 4d0f46f0cdd43d411e5f543b552969d9731b9074 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 16 Jan 2020 15:41:01 -0500 Subject: box_party_pokemon_dropdown --- src/box_party_pokemon_dropdown.c | 212 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 src/box_party_pokemon_dropdown.c (limited to 'src') diff --git a/src/box_party_pokemon_dropdown.c b/src/box_party_pokemon_dropdown.c new file mode 100644 index 000000000..3ef9f2d27 --- /dev/null +++ b/src/box_party_pokemon_dropdown.c @@ -0,0 +1,212 @@ +#include "global.h" +#include "bg.h" +#include "box_party_pokemon_dropdown.h" +#include "malloc.h" + +struct UnkStruct_203ABE4_Sub +{ + s16 destX; + s16 destY; + u16 width; + u16 height; + s16 destX2; + s16 destY2; +}; + +struct UnkStruct_203ABE4 +{ + struct UnkStruct_203ABE4_Sub map1rect; + struct UnkStruct_203ABE4_Sub map2rect; + const void * src1; + const void * src2; + u16 src1Height; + u16 src1Width; + u16 src2Height; + u16 unk_26; + u16 unk_28; + u8 mapSize; + u8 bgId; + bool8 bgUpdateScheduled; +}; + +static EWRAM_DATA struct UnkStruct_203ABE4 * sBoxPartyPokemonDropdownPtr = NULL; +static EWRAM_DATA u16 sBoxPartyPokemonDropdownCount = 0; + +static void PushMap1(u8 a0); +static void PushMap2(u8 a0); + +static const struct { + u16 height; + u16 width; +} sBGdims[2][4] = { + { + {0x0100, 0x0100}, + {0x0200, 0x0100}, + {0x0100, 0x0200}, + {0x0200, 0x0200} + }, { + {0x0080, 0x0080}, + {0x0100, 0x0100}, + {0x0200, 0x0200}, + {0x0400, 0x0400} + } +}; + +void sub_80F7AD8(u8 num) +{ + u16 i; + sBoxPartyPokemonDropdownPtr = Alloc(num * sizeof(struct UnkStruct_203ABE4)); + sBoxPartyPokemonDropdownCount = sBoxPartyPokemonDropdownPtr == NULL ? 0 : num; + for (i = 0; i < sBoxPartyPokemonDropdownCount; i++) + { + sBoxPartyPokemonDropdownPtr[i].src1 = NULL; + sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled = FALSE; + } +} + +void sub_80F7B2C(void) +{ + Free(sBoxPartyPokemonDropdownPtr); +} + +void sub_80F7B40(void) +{ + int i; + + for (i = 0; i < sBoxPartyPokemonDropdownCount; i++) + { + if (sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled == 1) + sub_80F7E54(i); + } +} + +void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4) +{ + u16 screenSize; + u16 bgType; + + if (a0 < sBoxPartyPokemonDropdownCount) + { + sBoxPartyPokemonDropdownPtr[a0].src1 = NULL; + sBoxPartyPokemonDropdownPtr[a0].src2 = a2; + sBoxPartyPokemonDropdownPtr[a0].bgId = a1; + sBoxPartyPokemonDropdownPtr[a0].src2Height = a3; + sBoxPartyPokemonDropdownPtr[a0].unk_26 = a4; + screenSize = GetBgAttribute(a1, BG_ATTR_SCREENSIZE); + bgType = GetBgAttribute(a1, BG_ATTR_BGTYPE); + sBoxPartyPokemonDropdownPtr[a0].src1Height = sBGdims[bgType][screenSize].height; + sBoxPartyPokemonDropdownPtr[a0].src1Width = sBGdims[bgType][screenSize].width; + if (bgType != 0) + sBoxPartyPokemonDropdownPtr[a0].mapSize = 1; + else + sBoxPartyPokemonDropdownPtr[a0].mapSize = 2; + sBoxPartyPokemonDropdownPtr[a0].unk_28 = a3 * sBoxPartyPokemonDropdownPtr[a0].mapSize; + sBoxPartyPokemonDropdownPtr[a0].map2rect.width = a3; + sBoxPartyPokemonDropdownPtr[a0].map2rect.height = a4; + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX = 0; + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY = 0; + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 = 0; + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 = 0; + sBoxPartyPokemonDropdownPtr[a0].map1rect = sBoxPartyPokemonDropdownPtr[a0].map2rect; + sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; + } +} + +void sub_80F7C7C(u8 a0, const void * a1) +{ + if (a0 < sBoxPartyPokemonDropdownCount) + { + sBoxPartyPokemonDropdownPtr[a0].src1 = a1; + sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; + } +} + +void sub_80F7CAC(u8 a0, u16 a1, u16 a2) +{ + if (a0 < sBoxPartyPokemonDropdownCount) + { + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 = a1; + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 = a2; + sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; + } +} + +void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4) +{ + if (a0 < sBoxPartyPokemonDropdownCount) + { + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX = a1; + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY = a2; + sBoxPartyPokemonDropdownPtr[a0].map2rect.width = a3; + sBoxPartyPokemonDropdownPtr[a0].map2rect.height = a4; + sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; + } +} + +void sub_80F7D30(u8 a0, u8 a1, s8 a2) +{ + if (a0 < sBoxPartyPokemonDropdownCount) + { + switch (a1) + { + case 0: + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 += a2; + sBoxPartyPokemonDropdownPtr[a0].map2rect.width -= a2; + break; + case 1: + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX += a2; + sBoxPartyPokemonDropdownPtr[a0].map2rect.width += a2; + break; + case 2: + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 += a2; + sBoxPartyPokemonDropdownPtr[a0].map2rect.height -= a2; + break; + case 3: + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY -= a2; + sBoxPartyPokemonDropdownPtr[a0].map2rect.height += a2; + break; + case 4: + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 += a2; + break; + case 5: + sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 += a2; + break; + } + sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; + } +} + +void sub_80F7E54(u8 a0) +{ + if (a0 < sBoxPartyPokemonDropdownCount) + { + if (sBoxPartyPokemonDropdownPtr[a0].src1 != NULL) + PushMap1(a0); + PushMap2(a0); + sBoxPartyPokemonDropdownPtr[a0].map1rect = sBoxPartyPokemonDropdownPtr[a0].map2rect; + } +} + +static void PushMap1(u8 a0) +{ + int i; + int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src1Height; + const void * addr = sBoxPartyPokemonDropdownPtr[a0].src1 + r9 * sBoxPartyPokemonDropdownPtr[a0].map1rect.destY2 + sBoxPartyPokemonDropdownPtr[a0].map1rect.destX2 * sBoxPartyPokemonDropdownPtr[a0].mapSize; + for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map1rect.height; i++) + { + CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map1rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map1rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map1rect.width, 1); + addr += r9; + } +} + +static void PushMap2(u8 a0) +{ + int i; + int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src2Height; + const void * addr = sBoxPartyPokemonDropdownPtr[a0].src2 + r9 * sBoxPartyPokemonDropdownPtr[a0].map2rect.destY + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX * sBoxPartyPokemonDropdownPtr[a0].mapSize; + for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map2rect.height; i++) + { + CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map2rect.width, 1); + addr += r9; + } +} -- cgit v1.2.3 From 15f7b5954db9ea6dcc02cd80fb073630e686baae Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 16 Jan 2020 16:13:36 -0500 Subject: Minor corrections --- src/box_party_pokemon_dropdown.c | 66 ++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/box_party_pokemon_dropdown.c b/src/box_party_pokemon_dropdown.c index 3ef9f2d27..a74f1611c 100644 --- a/src/box_party_pokemon_dropdown.c +++ b/src/box_party_pokemon_dropdown.c @@ -15,8 +15,8 @@ struct UnkStruct_203ABE4_Sub struct UnkStruct_203ABE4 { - struct UnkStruct_203ABE4_Sub map1rect; - struct UnkStruct_203ABE4_Sub map2rect; + struct UnkStruct_203ABE4_Sub map1Rect; + struct UnkStruct_203ABE4_Sub map2Rect; const void * src1; const void * src2; u16 src1Height; @@ -75,7 +75,7 @@ void sub_80F7B40(void) for (i = 0; i < sBoxPartyPokemonDropdownCount; i++) { - if (sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled == 1) + if (sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled == TRUE) sub_80F7E54(i); } } @@ -101,13 +101,13 @@ void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4) else sBoxPartyPokemonDropdownPtr[a0].mapSize = 2; sBoxPartyPokemonDropdownPtr[a0].unk_28 = a3 * sBoxPartyPokemonDropdownPtr[a0].mapSize; - sBoxPartyPokemonDropdownPtr[a0].map2rect.width = a3; - sBoxPartyPokemonDropdownPtr[a0].map2rect.height = a4; - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX = 0; - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY = 0; - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 = 0; - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 = 0; - sBoxPartyPokemonDropdownPtr[a0].map1rect = sBoxPartyPokemonDropdownPtr[a0].map2rect; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.width = a3; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.height = a4; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX = 0; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY = 0; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 = 0; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 = 0; + sBoxPartyPokemonDropdownPtr[a0].map1Rect = sBoxPartyPokemonDropdownPtr[a0].map2Rect; sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; } } @@ -125,8 +125,8 @@ void sub_80F7CAC(u8 a0, u16 a1, u16 a2) { if (a0 < sBoxPartyPokemonDropdownCount) { - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 = a1; - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 = a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 = a1; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 = a2; sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; } } @@ -135,10 +135,10 @@ void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4) { if (a0 < sBoxPartyPokemonDropdownCount) { - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX = a1; - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY = a2; - sBoxPartyPokemonDropdownPtr[a0].map2rect.width = a3; - sBoxPartyPokemonDropdownPtr[a0].map2rect.height = a4; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX = a1; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY = a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.width = a3; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.height = a4; sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; } } @@ -150,26 +150,26 @@ void sub_80F7D30(u8 a0, u8 a1, s8 a2) switch (a1) { case 0: - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 += a2; - sBoxPartyPokemonDropdownPtr[a0].map2rect.width -= a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.width -= a2; break; case 1: - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX += a2; - sBoxPartyPokemonDropdownPtr[a0].map2rect.width += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.width += a2; break; case 2: - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 += a2; - sBoxPartyPokemonDropdownPtr[a0].map2rect.height -= a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.height -= a2; break; case 3: - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY -= a2; - sBoxPartyPokemonDropdownPtr[a0].map2rect.height += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY -= a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.height += a2; break; case 4: - sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 += a2; break; case 5: - sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 += a2; + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 += a2; break; } sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE; @@ -183,7 +183,7 @@ void sub_80F7E54(u8 a0) if (sBoxPartyPokemonDropdownPtr[a0].src1 != NULL) PushMap1(a0); PushMap2(a0); - sBoxPartyPokemonDropdownPtr[a0].map1rect = sBoxPartyPokemonDropdownPtr[a0].map2rect; + sBoxPartyPokemonDropdownPtr[a0].map1Rect = sBoxPartyPokemonDropdownPtr[a0].map2Rect; } } @@ -191,10 +191,10 @@ static void PushMap1(u8 a0) { int i; int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src1Height; - const void * addr = sBoxPartyPokemonDropdownPtr[a0].src1 + r9 * sBoxPartyPokemonDropdownPtr[a0].map1rect.destY2 + sBoxPartyPokemonDropdownPtr[a0].map1rect.destX2 * sBoxPartyPokemonDropdownPtr[a0].mapSize; - for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map1rect.height; i++) + const void * addr = sBoxPartyPokemonDropdownPtr[a0].src1 + r9 * sBoxPartyPokemonDropdownPtr[a0].map1Rect.destY2 + sBoxPartyPokemonDropdownPtr[a0].map1Rect.destX2 * sBoxPartyPokemonDropdownPtr[a0].mapSize; + for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map1Rect.height; i++) { - CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map1rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map1rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map1rect.width, 1); + CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map1Rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map1Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map1Rect.width, 1); addr += r9; } } @@ -203,10 +203,10 @@ static void PushMap2(u8 a0) { int i; int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src2Height; - const void * addr = sBoxPartyPokemonDropdownPtr[a0].src2 + r9 * sBoxPartyPokemonDropdownPtr[a0].map2rect.destY + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX * sBoxPartyPokemonDropdownPtr[a0].mapSize; - for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map2rect.height; i++) + const void * addr = sBoxPartyPokemonDropdownPtr[a0].src2 + r9 * sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX * sBoxPartyPokemonDropdownPtr[a0].mapSize; + for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map2Rect.height; i++) { - CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map2rect.width, 1); + CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map2Rect.width, 1); addr += r9; } } -- cgit v1.2.3