diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/berry_powder.c | 128 | ||||
-rw-r--r-- | src/easy_chat.c | 6 | ||||
-rw-r--r-- | src/field_specials.c | 4 | ||||
-rwxr-xr-x | src/item_use.c | 5 | ||||
-rw-r--r-- | src/load_save.c | 3 | ||||
-rwxr-xr-x | src/mevent2.c | 626 | ||||
-rw-r--r-- | src/new_game.c | 4 | ||||
-rw-r--r-- | src/script.c | 3 | ||||
-rw-r--r-- | src/union_room.c | 4 | ||||
-rw-r--r-- | src/use_pokeblock.c | 221 |
10 files changed, 782 insertions, 222 deletions
diff --git a/src/berry_powder.c b/src/berry_powder.c new file mode 100755 index 000000000..91f9d0d4e --- /dev/null +++ b/src/berry_powder.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "berry_powder.h" +#include "bg.h" +#include "event_data.h" +#include "load_save.h" +#include "menu.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "text_window.h" +#include "window.h" + +#define MAX_BERRY_POWDER 99999 + +static EWRAM_DATA u8 sBerryPowderVendorWindowId = 0; + +static u32 DecryptBerryPowder(u32 *powder) +{ + return *powder ^ gSaveBlock2Ptr->encryptionKey; +} + +void SetBerryPowder(u32 *powder, u32 amount) +{ + *powder = amount ^ gSaveBlock2Ptr->encryptionKey; +} + +void ApplyNewEncryptionKeyToBerryPowder(u32 encryptionKey) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + ApplyNewEncryptionKeyToWord(powder, encryptionKey); +} + +static bool8 HasEnoughBerryPowder_(u32 cost) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + if (DecryptBerryPowder(powder) < cost) + return FALSE; + else + return TRUE; +} + +bool8 HasEnoughBerryPowder(void) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + if (DecryptBerryPowder(powder) < gSpecialVar_0x8004) + return FALSE; + else + return TRUE; +} + +bool8 GiveBerryPowder(u32 amountToAdd) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + u32 amount = DecryptBerryPowder(powder) + amountToAdd; + if (amount > MAX_BERRY_POWDER) + { + SetBerryPowder(powder, MAX_BERRY_POWDER); + return FALSE; + } + else + { + SetBerryPowder(powder, amount); + return TRUE; + } +} + +static bool8 TakeBerryPowder_(u32 cost) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + if (!HasEnoughBerryPowder_(cost)) + return FALSE; + + SetBerryPowder(powder, DecryptBerryPowder(powder) - cost); + return TRUE; +} + +bool8 TakeBerryPowder(void) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + if (!HasEnoughBerryPowder_(gSpecialVar_0x8004)) + return FALSE; + + SetBerryPowder(powder, DecryptBerryPowder(powder) - gSpecialVar_0x8004); + return TRUE; +} + +u32 GetBerryPowder(void) +{ + u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + return DecryptBerryPowder(powder); +} + +static void PrintBerryPowderAmount(u8 windowId, int amount, u8 x, u8 y, u8 speed) +{ + ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_RIGHT_ALIGN, 5); + AddTextPrinterParameterized(windowId, 1, gStringVar1, x, y, speed, NULL); +} + +static void DrawPlayerPowderAmount(u8 windowId, u16 baseTileOffset, u8 paletteNum, u32 amount) +{ + DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, baseTileOffset, paletteNum); + AddTextPrinterParameterized(windowId, 1, gText_Powder, 0, 1, TEXT_SPEED_FF, NULL); + PrintBerryPowderAmount(windowId, amount, 26, 17, 0); +} + +void PrintPlayerBerryPowderAmount(void) +{ + u32 amount = GetBerryPowder(); + PrintBerryPowderAmount(sBerryPowderVendorWindowId, amount, 26, 17, 0); +} + +void DisplayBerryPowderVendorMenu(void) +{ + struct WindowTemplate template; + SetWindowTemplateFields(&template, 0, 1, 1, 7, 4, 15, 0x1C); + sBerryPowderVendorWindowId = AddWindow(&template); + FillWindowPixelBuffer(sBerryPowderVendorWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sBerryPowderVendorWindowId); + LoadUserWindowBorderGfx_(sBerryPowderVendorWindowId, 0x21D, 0xD0); + DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 13, GetBerryPowder()); +} + +void RemoveBerryPowderVendorMenu(void) +{ + ClearWindowTilemap(sBerryPowderVendorWindowId); + ClearStdWindowAndFrameToTransparent(sBerryPowderVendorWindowId, TRUE); + RemoveWindow(sBerryPowderVendorWindowId); +} diff --git a/src/easy_chat.c b/src/easy_chat.c index 4cc8b9c5b..2e384de6e 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -14,8 +14,8 @@ #include "gpu_regs.h" #include "graphics.h" #include "international_string_util.h" -#include "link.h" #include "main.h" +#include "mevent.h" #include "menu.h" #include "overworld.h" #include "palette.h" @@ -1318,7 +1318,7 @@ void ShowEasyChatScreen(void) words = gSaveBlock2Ptr->apprentices[0].easyChatWords; break; case EASY_CHAT_TYPE_QUESTIONNAIRE: - words = GetSaveBlock1Field3564(); + words = sub_801B058(); break; default: return; @@ -5531,7 +5531,7 @@ void InitializeEasyChatWordArray(u16 *words, u16 length) void sub_811F8BC(void) { int i; - u16 *words = GetSaveBlock1Field3564(); + u16 *words = sub_801B058(); for (i = 0; i < 4; i++) words[i] = 0xFFFF; } diff --git a/src/field_specials.c b/src/field_specials.c index 2ae494dad..20c2e6173 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1,4 +1,5 @@ #include "global.h" +#include "alloc.h" #include "battle.h" #include "battle_tower.h" #include "cable_club.h" @@ -20,7 +21,7 @@ #include "link.h" #include "list_menu.h" #include "main.h" -#include "alloc.h" +#include "mevent.h" #include "match_call.h" #include "menu.h" #include "overworld.h" @@ -31,7 +32,6 @@ #include "random.h" #include "rayquaza_scene.h" #include "region_map.h" -#include "rom_8011DC0.h" #include "rtc.h" #include "script.h" #include "script_menu.h" diff --git a/src/item_use.c b/src/item_use.c index e646a18ee..7947964ca 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -4,6 +4,7 @@ #include "battle_pyramid.h" #include "battle_pyramid_bag.h" #include "berry.h" +#include "berry_powder.h" #include "bike.h" #include "coins.h" #include "data2.h" @@ -45,8 +46,6 @@ extern u8 Route102_EventScript_274482[]; extern u8 Route102_EventScript_2744C0[]; extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[]; -extern s32 sub_80247BC(void); - void SetUpItemUseCallback(u8 taskId); void MapPostLoadHook_UseItem(void); void sub_80AF6D4(void); @@ -638,7 +637,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) void ItemUseOutOfBattle_PowderJar(u8 taskId) { - ConvertIntToDecimalStringN(gStringVar1, sub_80247BC(), 0, 5); + ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), 0, 5); StringExpandPlaceholders(gStringVar4, gText_PowderQty); if (!gTasks[taskId].data[3]) diff --git a/src/load_save.c b/src/load_save.c index d6785254f..150c557c6 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -1,5 +1,6 @@ #include "global.h" #include "alloc.h" +#include "berry_powder.h" #include "item.h" #include "load_save.h" #include "main.h" @@ -15,8 +16,6 @@ static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); -extern void ApplyNewEncryptionKeyToBerryPowder(u32 key); - #define SAVEBLOCK_MOVE_RANGE 128 struct LoadedSaveData diff --git a/src/mevent2.c b/src/mevent2.c new file mode 100755 index 000000000..8a6bd9faa --- /dev/null +++ b/src/mevent2.c @@ -0,0 +1,626 @@ +#include "global.h" +#include "util.h" +#include "main.h" +#include "event_data.h" +#include "easy_chat.h" +#include "script.h" +#include "battle_tower.h" +#include "mevent_news.h" +#include "string_util.h" +#include "new_game.h" +#include "mevent.h" +#include "constants/species.h" + +static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE; + +static void sub_801B180(void); +static void sub_801B14C(void); +static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data); +static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data); +static void sub_801B330(void); +static void sub_801B368(void); +static void sub_801B9F8(void); +static void sub_801BA8C(u32 a0, u32 a1, u32 *a2, int a3); + +void sub_801AFD8(void) +{ + CpuFill32(0, &gSaveBlock1Ptr->unk_322C, sizeof(gSaveBlock1Ptr->unk_322C)); + sub_801B180(); + sub_811F8BC(); +} + +struct MEventBuffer_3120_Sub *sub_801B00C(void) +{ + return &gSaveBlock1Ptr->unk_322C.buffer_000.data; +} + +struct MEventBuffer_32E0_Sub *sav1_get_mevent_buffer_1(void) +{ + return &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; +} + +struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void) +{ + return &gSaveBlock1Ptr->unk_322C.buffer_310.data; +} + +struct MysteryEventStruct *sub_801B044(void) +{ + return &gSaveBlock1Ptr->unk_322C.unk_340; +} + +u16 *sub_801B058(void) +{ + return gSaveBlock1Ptr->unk_322C.unk_338; +} + +void sub_801B06C(void) +{ + sub_801B14C(); +} + +bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src) +{ + if (!sub_801B114(src)) + return FALSE; + + sub_801B14C(); + gSaveBlock1Ptr->unk_322C.buffer_000.data = *src; + gSaveBlock1Ptr->unk_322C.buffer_000.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)); + return TRUE; +} + +bool32 sub_801B0CC(void) +{ + if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_322C.buffer_000.crc) + return FALSE; + if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.buffer_000.data)) + return FALSE; + + return TRUE; +} + +static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data) +{ + if (data->unk_00 == 0) + return FALSE; + + return TRUE; +} + +bool32 sub_801B128(void) +{ + const struct MEventBuffer_3120_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_000.data; + if (data->unk_02 == 0) + return FALSE; + + return TRUE; +} + +static void sub_801B14C(void) +{ + CpuFill32(0, sub_801B00C(), sizeof(gSaveBlock1Ptr->unk_322C.buffer_000.data)); + gSaveBlock1Ptr->unk_322C.buffer_000.crc = 0; +} + +static void sub_801B180(void) +{ + CpuFill32(0, sub_801B044(), sizeof(struct MysteryEventStruct)); + sub_801DBC0(); +} + +bool32 sub_801B1A4(const u8 *src) +{ + const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.buffer_000.data; + u32 i; + if (!sub_801B0CC()) + return FALSE; + + for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++) + { + if (r5[i] != src[i]) + return FALSE; + } + + return TRUE; +} + +void sub_801B1E8(void) +{ + sub_801B330(); + sub_801B368(); + sub_801B9F8(); + ClearRamScript(); + sub_809D4D8(); + sub_809D570(); + ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer); +} + +bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data) +{ + struct MEventBuffer_3430_Sub *r2; + struct MEventBuffer_32E0_Sub *r1; + if (!sub_801B2CC(data)) + return FALSE; + + sub_801B1E8(); + memcpy(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, data, sizeof(struct MEventBuffer_32E0_Sub)); + gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); + r2 = &gSaveBlock1Ptr->unk_322C.buffer_310.data; + r1 = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + r2->unk_06 = r1->unk_02; + return TRUE; +} + +bool32 sub_801B27C(void) +{ + if (gSaveBlock1Ptr->unk_322C.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub))) + return FALSE; + if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data)) + return FALSE; + if (!sub_80991F8()) + return FALSE; + + return TRUE; +} + +static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data) +{ + if (data->unk_00 == 0) + return FALSE; + if (data->unk_08_0 > 2) + return FALSE; + if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2)) + return FALSE; + if (data->unk_08_2 > 7) + return FALSE; + if (data->unk_09 > 7) + return FALSE; + + return TRUE; +} + +bool32 sub_801B308(void) +{ + const struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_6 == 0) + return FALSE; + + return TRUE; +} + +static void sub_801B330(void) +{ + CpuFill32(0, &gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); + gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = 0; +} + +static void sub_801B368(void) +{ + CpuFill32(0, sav1_get_mevent_buffer_2(), 18 *sizeof(u16)); + gSaveBlock1Ptr->unk_322C.buffer_310.crc = 0; +} + +u16 sub_801B39C(void) +{ + if (sub_801B27C()) + return gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00; + + return 0; +} + +void sub_801B3C0(struct MEventBuffer_32E0_Sub *buffer) +{ + if (buffer->unk_08_6 == 1) + buffer->unk_08_6 = 0; +} + +static bool32 sub_801B3D8(u16 a0) +{ + if (a0 >= 1000 && a0 < 1020) + return TRUE; + + return FALSE; +} + +static const u16 sMysteryGiftFlags[] = +{ + FLAG_RECEIVED_AURORA_TICKET, + FLAG_RECEIVED_MYSTIC_TICKET, + FLAG_RECEIVED_OLD_SEA_MAP, + FLAG_UNUSED_MYSTERY_GIFT_0x13D, + FLAG_UNUSED_MYSTERY_GIFT_0x13E, + FLAG_UNUSED_MYSTERY_GIFT_0x13F, + FLAG_UNUSED_MYSTERY_GIFT_0x140, + FLAG_UNUSED_MYSTERY_GIFT_0x141, + FLAG_UNUSED_MYSTERY_GIFT_0x142, + FLAG_UNUSED_MYSTERY_GIFT_0x143, + FLAG_UNUSED_MYSTERY_GIFT_0x144, + FLAG_UNUSED_MYSTERY_GIFT_0x145, + FLAG_UNUSED_MYSTERY_GIFT_0x146, + FLAG_UNUSED_MYSTERY_GIFT_0x147, + FLAG_UNUSED_MYSTERY_GIFT_0x148, + FLAG_UNUSED_MYSTERY_GIFT_0x149, + FLAG_UNUSED_MYSTERY_GIFT_0x14A, + FLAG_UNUSED_MYSTERY_GIFT_0x14B, + FLAG_UNUSED_MYSTERY_GIFT_0x14C, + FLAG_UNUSED_MYSTERY_GIFT_0x14D, +}; + +bool32 sub_801B3F8(void) +{ + u16 value = sub_801B39C(); + if (!sub_801B3D8(value)) + return FALSE; + + if (FlagGet(sMysteryGiftFlags[value - 1000]) == TRUE) + return FALSE; + + return TRUE; +} + +static int sub_801B438(const struct MEventBuffer_3430_Sub *data, int size) +{ + int r3 = 0; + int i; + for (i = 0; i < size; i++) + { + if (data->unk_08[1][i] && data->unk_08[0][i]) + r3++; + } + + return r3; +} + +static bool32 sub_801B460(const struct MEventBuffer_3430_Sub *data1, const u16 *data2, int size) +{ + int i; + for (i = 0; i < size; i++) + { + if (data1->unk_08[1][i] == data2[1]) + return TRUE; + if (data1->unk_08[0][i] == data2[0]) + return TRUE; + } + + return FALSE; +} + +static bool32 sub_801B4A4(const u16 *data) +{ + if (data[1] == 0) + return FALSE; + if (data[0] == 0) + return FALSE; + if (data[0] >= NUM_SPECIES) + return FALSE; + return TRUE; +} + +static int sub_801B4CC(void) +{ + struct MEventBuffer_32E0_Sub *data; + if (!sub_801B27C()) + return 0; + + data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 != 1) + return 0; + + return sub_801B438(&gSaveBlock1Ptr->unk_322C.buffer_310.data, data->unk_09); +} + +bool32 sub_801B508(const u16 *data) +{ + struct MEventBuffer_32E0_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + int size = buffer->unk_09; + int i; + if (!sub_801B4A4(data)) + return FALSE; + + if (sub_801B460(&gSaveBlock1Ptr->unk_322C.buffer_310.data, data, size)) + return FALSE; + + for (i = 0; i < size; i++) + { + if (gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[0][i] == 0) + { + gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[1][i] = data[1]; + gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_08[0][i] = data[0]; + return TRUE; + } + } + + return FALSE; +} + +void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1) +{ + int i; + CpuFill32(0, data, sizeof(struct MEventStruct_Unk1442CC)); + data->unk_00 = 0x101; + data->unk_04 = 1; + data->unk_08 = 1; + + if (a1) + { + data->unk_0C = 5; + data->unk_10 = 0x0201; + } + else + { + data->unk_0C = 4; + data->unk_10 = 0x0200; + } + + if (sub_801B27C()) + { + data->unk_14 = sav1_get_mevent_buffer_1()->unk_00; + data->unk_20 = *sav1_get_mevent_buffer_2(); + data->unk_44 = sav1_get_mevent_buffer_1()->unk_09; + } + else + { + data->unk_14 = 0; + } + + for (i = 0; i < 4; i++) + data->unk_16[i] = gSaveBlock1Ptr->unk_322C.unk_338[i]; + + CopyTrainerId(data->unk_4C, gSaveBlock2Ptr->playerTrainerId); + StringCopy(data->unk_45, gSaveBlock2Ptr->playerName); + for (i = 0; i < 6; i++) + data->unk_50[i] = gSaveBlock1Ptr->easyChatProfile[i]; + + memcpy(data->unk_5C, RomHeaderGameCode, 4); + data->unk_60 = RomHeaderSoftwareVersion; +} + +bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1) +{ + if (data->unk_00 != 0x101) + return FALSE; + + if (!(data->unk_04 & 1)) + return FALSE; + + if (!(data->unk_08 & 1)) + return FALSE; + + if (!a1) + { + if (!(data->unk_0C & 4)) + return FALSE; + + if (!(data->unk_10 & 0x380)) + return FALSE; + } + + return TRUE; +} + +u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused) +{ + if (a1->unk_14 == 0) + return 0; + + if (*a0 == a1->unk_14) + return 1; + + return 2; +} + +u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused) +{ + int r4 = a1->unk_44 - sub_801B438(&a1->unk_20, a1->unk_44); + if (r4 == 0) + return 1; + if (sub_801B460(&a1->unk_20, a0, a1->unk_44)) + return 3; + if (r4 == 1) + return 4; + return 2; +} + +bool32 sub_801B748(const struct MEventStruct_Unk1442CC *a0, const u16 *a1) +{ + int i; + for (i = 0; i < 4; i++) + { + if (a0->unk_16[i] != a1[i]) + return FALSE; + } + + return TRUE; +} + +static int sub_801B770(const struct MEventStruct_Unk1442CC *a0) +{ + return sub_801B438(&a0->unk_20, a0->unk_44); +} + +u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command) +{ + switch (command) + { + case 0: + return a0->unk_20.unk_00; + case 1: + return a0->unk_20.unk_02; + case 2: + return a0->unk_20.unk_04; + case 3: + return sub_801B770(a0); + case 4: + return a0->unk_44; + default: + AGB_ASSERT(0); + return 0; + } +} + +static void sub_801B7D8(u32 command) +{ + struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + u16 *dest = NULL; + switch (command) + { + case 0: + dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_00; + break; + case 1: + dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_02; + break; + case 2: + dest = &gSaveBlock1Ptr->unk_322C.buffer_310.data.unk_04; + break; + case 3: + break; + case 4: + break; + } + + if (dest == NULL) + AGB_ASSERT(0); + else if (++(*dest) > 999) + *dest = 999; + } +} + +u16 mevent_081445C0(u32 command) +{ + switch (command) + { + case 0: + { + struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; + return buffer->unk_00; + } + break; + } + case 1: + { + struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; + return buffer->unk_02; + } + break; + } + case 2: + { + struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; + return buffer->unk_04; + } + break; + } + case 3: + { + struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 == 1) + return sub_801B4CC(); + break; + } + case 4: + { + struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + if (data->unk_08_0 == 1) + return data->unk_09; + break; + } + } + + AGB_ASSERT(0); + return 0; +} + +void sub_801B940(void) +{ + gUnknown_02022C70 = FALSE; +} + +bool32 sub_801B94C(u16 a0) +{ + gUnknown_02022C70 = FALSE; + if (a0 == 0) + return FALSE; + + if (!sub_801B27C()) + return FALSE; + + if (gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00 != a0) + return FALSE; + + gUnknown_02022C70 = TRUE; + return TRUE; +} + +void sub_801B990(u32 a0, u32 a1) +{ + if (gUnknown_02022C70) + { + switch (a0) + { + case 2: + sub_801BA8C(2, a1, gSaveBlock1Ptr->unk_322C.unk_344[1], 5); + break; + case 0: + sub_801BA8C(0, a1, gSaveBlock1Ptr->unk_322C.unk_344[0], 5); + break; + case 1: + sub_801BA8C(1, a1, gSaveBlock1Ptr->unk_322C.unk_344[0], 5); + break; + default: + AGB_ASSERT(0); + } + } +} + +static void sub_801B9F8(void) +{ + CpuFill32(0, gSaveBlock1Ptr->unk_322C.unk_344, sizeof(gSaveBlock1Ptr->unk_322C.unk_344)); +} + +static bool32 sub_801BA24(u32 a0, u32 *a1, int size) +{ + int i; + int j; + + for (i = 0; i < size; i++) + { + if (a1[i] == a0) + break; + } + + if (i == size) + { + for (j = size - 1; j > 0; j--) + a1[j] = a1[j - 1]; + + a1[0] = a0; + return TRUE; + } + else + { + for (j = i; j > 0; j--) + a1[j] = a1[j - 1]; + + a1[0] = a0; + return FALSE; + } +} + +static void sub_801BA8C(u32 a0, u32 a1, u32 *a2, int a3) +{ + if (sub_801BA24(a1, a2, a3)) + sub_801B7D8(a0); +} diff --git a/src/new_game.c b/src/new_game.c index 2e8930f7c..97988497d 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -41,12 +41,12 @@ #include "secret_base.h" #include "player_pc.h" #include "field_specials.h" +#include "berry_powder.h" +#include "mevent.h" extern void copy_strings_to_sav1(void); -extern void sub_801AFD8(void); extern void ResetPokeJumpResults(void); -extern void SetBerryPowder(u32* powder, u32 newValue); extern const u8 EventScript_ResetAllMapFlags[]; diff --git a/src/script.c b/src/script.c index c95a1141f..91690dd33 100644 --- a/src/script.c +++ b/src/script.c @@ -1,6 +1,7 @@ #include "global.h" #include "script.h" #include "event_data.h" +#include "mevent.h" #include "util.h" #include "constants/map_scripts.h" @@ -8,8 +9,6 @@ extern const u8* gUnknown_020375C0; -extern bool32 sub_801B27C(void); - // ewram bss IWRAM_DATA static u8 sScriptContext1Status; IWRAM_DATA static u32 sUnusedVariable1; diff --git a/src/union_room.c b/src/union_room.c index 68a517ea6..708f44a26 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -34,6 +34,7 @@ #include "data2.h" #include "field_screen_effect.h" #include "script_pokemon_util_80F87D8.h" +#include "mevent.h" struct UnkStruct_Shared { @@ -228,9 +229,6 @@ void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, bool32 sub_8017678(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId); void sub_801807C(struct TradeUnkStruct *arg0); -void sub_801B940(void); -void sub_801B94C(u16); -u16 sub_801B39C(void); void sub_801AC54(void); void sub_801DD98(void); void sub_802A9A8(u8 monId, MainCallback callback); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 999ddcbbd..9b02eeb72 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -509,19 +509,15 @@ void sub_81668F8(void) } } -#ifdef NONMATCHING void sub_8166A34(void) { switch (gUnknown_0203BC90->field_50) { u8 var; case 0: - gUnknown_0203BC90->field_5c[0] = (u8) &gPlayerParty; - gUnknown_0203BCAC->info.field_71 = (u32) &gUnknown_0203BCAC->field_0[gUnknown_0203BCAC->info.field_71]; - gUnknown_0203BC90->field_5c[0] = &gPlayerParty + gUnknown_0203BC90->pokemon = gPlayerParty; + gUnknown_0203BC90->pokemon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1; sub_81D3520(gUnknown_0203BCAC->field_7B1C); - /*gUnknown_0203BCAC->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_0203BCAC->field_0[0x7B1C]].partyIdx]; - move_anim_execute();*/ gUnknown_0203BC90->field_50++; break; case 1: @@ -530,27 +526,26 @@ void sub_8166A34(void) break; case 2: sub_8167104(); - sub_81D2754(gUnknown_0203BC90->field_5c, &gUnknown_0203BCAC->field_7C58[0x50]); - sub_81D1F84(&gUnknown_0203BCAC->field_7C58[0], &gUnknown_0203BCAC->field_7C58[gUnknown_0203BCAC->field_7C58[0x35B] + 0x14], 0); + sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]); + sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]); sub_8167338(); gUnknown_0203BC90->field_50++; break; case 3: - var = gUnknown_0203BCAC->field_7C58[0]; - sub_81D2074(); - if (!var) + var = sub_81D2074(&gUnknown_0203BCAC->field_7C58); + if(var) + return; + + sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71)); + + if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) { - sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71)); - /*sub_80F3D00(); - gUnknown_0203BCAC->unk52 = 0;*/ - if(gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1) - { - gUnknown_0203BC90->field_52 = var; - } - - sub_81D3480(&gUnknown_0203BCAC->field_7C58[0x35B], gUnknown_0203BCAC->field_7C58[0x35B + gUnknown_0203BCAC->field_7C58[0x358]]); - + u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; + sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); } + + gUnknown_0203BC90->field_52 = 0; + gUnknown_0203BC90->field_50++; break; case 4: if ((++gUnknown_0203BC90->field_52) > 16) @@ -568,190 +563,6 @@ void sub_8166A34(void) break; } } -#else -NAKED -void sub_8166A34(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r1, =gUnknown_0203BC90\n\ - ldr r0, [r1]\n\ - adds r0, 0x50\n\ - ldrb r0, [r0]\n\ - adds r5, r1, 0\n\ - cmp r0, 0x5\n\ - bls _08166A46\n\ - b _08166BDA\n\ -_08166A46:\n\ - lsls r0, 2\n\ - ldr r1, =_08166A58\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ -_08166A58:\n\ - .4byte _08166A70\n\ - .4byte _08166AAC\n\ - .4byte _08166AC0\n\ - .4byte _08166B14\n\ - .4byte _08166B94\n\ - .4byte _08166BB6\n\ -_08166A70:\n\ - ldr r4, [r5]\n\ - ldr r3, =gPlayerParty\n\ - str r3, [r4, 0xC]\n\ - ldr r0, =gUnknown_0203BCAC\n\ - ldr r0, [r0]\n\ - ldr r2, =0x00008041\n\ - adds r1, r0, r2\n\ - ldrb r1, [r1]\n\ - lsls r1, 2\n\ - adds r1, r0, r1\n\ - subs r2, 0x88\n\ - adds r1, r2\n\ - ldrb r2, [r1]\n\ - movs r1, 0x64\n\ - muls r1, r2\n\ - adds r1, r3\n\ - str r1, [r4, 0xC]\n\ - ldr r3, =0x00007b1c\n\ - adds r0, r3\n\ - bl sub_81D3520\n\ - b _08166BAA\n\ - .pool\n\ -_08166AAC:\n\ - ldr r0, =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08166ABA\n\ - b _08166BDA\n\ -_08166ABA:\n\ - b _08166BAA\n\ - .pool\n\ -_08166AC0:\n\ - bl sub_8167104\n\ - ldr r6, =gUnknown_0203BC90\n\ - ldr r0, [r6]\n\ - adds r0, 0x5C\n\ - ldr r4, =gUnknown_0203BCAC\n\ - ldr r1, [r4]\n\ - ldr r5, =0x00007ca8\n\ - adds r1, r5\n\ - bl sub_81D2754\n\ - ldr r2, [r4]\n\ - ldr r4, =0x00007c58\n\ - adds r0, r2, r4\n\ - ldr r3, =0x00007fb3\n\ - adds r1, r2, r3\n\ - movs r3, 0\n\ - ldrsb r3, [r1, r3]\n\ - lsls r1, r3, 2\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r4, 0x14\n\ - adds r1, r4\n\ - adds r1, r2, r1\n\ - adds r2, r5\n\ - bl sub_81D1F84\n\ - bl sub_8167338\n\ - ldr r1, [r6]\n\ - b _08166BAC\n\ - .pool\n\ -_08166B14:\n\ - ldr r5, =gUnknown_0203BCAC\n\ - ldr r0, [r5]\n\ - ldr r1, =0x00007c58\n\ - adds r0, r1\n\ - bl sub_81D2074\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0\n\ - bne _08166BDA\n\ - ldr r0, [r5]\n\ - ldr r4, =0x00008041\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - bl sub_81672A4\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl sub_81681F4\n\ - ldr r3, [r5]\n\ - adds r4, r3, r4\n\ - ldrb r1, [r4]\n\ - ldr r2, =0x00008040\n\ - adds r0, r3, r2\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - beq _08166B6C\n\ - ldr r4, =0x00007fb3\n\ - adds r0, r3, r4\n\ - movs r1, 0\n\ - ldrsb r1, [r0, r1]\n\ - subs r2, 0x90\n\ - adds r0, r3, r2\n\ - adds r0, r1\n\ - ldrb r2, [r0]\n\ - ldr r4, =0x00007b1c\n\ - adds r0, r3, r4\n\ - subs r4, 0xC\n\ - adds r1, r3, r4\n\ - ldrb r1, [r1]\n\ - bl sub_81D3480\n\ -_08166B6C:\n\ - ldr r1, =gUnknown_0203BC90\n\ - ldr r0, [r1]\n\ - adds r0, 0x52\n\ - strb r6, [r0]\n\ - ldr r1, [r1]\n\ - b _08166BAC\n\ - .pool\n\ -_08166B94:\n\ - ldr r1, [r5]\n\ - adds r1, 0x52\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x10\n\ - bls _08166BDA\n\ - bl sub_8166E24\n\ -_08166BAA:\n\ - ldr r1, [r5]\n\ -_08166BAC:\n\ - adds r1, 0x50\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _08166BDA\n\ -_08166BB6:\n\ - ldr r0, =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08166BDA\n\ - bl sub_8166EDC\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08166BDA\n\ - ldr r0, =gSpecialVar_ItemId\n\ - ldrb r0, [r0]\n\ - bl TryClearPokeblock\n\ - ldr r0, =sub_8166BEC\n\ - bl sub_816636C\n\ -_08166BDA:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); -} -#endif void sub_8166BEC(void) { |