diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-16 15:41:01 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-16 15:41:01 -0500 |
commit | 4d0f46f0cdd43d411e5f543b552969d9731b9074 (patch) | |
tree | bf6f7d0f169fa95d20d176edf7f767c0d1c374d5 /src | |
parent | fad367402892e1c25634c4448936d84a621c341c (diff) |
box_party_pokemon_dropdown
Diffstat (limited to 'src')
-rw-r--r-- | src/box_party_pokemon_dropdown.c | 212 |
1 files changed, 212 insertions, 0 deletions
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; + } +} |