#include "global.h" #include "battle.h" #include "event_data.h" #include "item_menu.h" #include "pokemon.h" #include "test/overworld_script.h" #include "test/test.h" TEST("TMs and HMs are sorted correctly in the bag") { struct BagPocket *pocket = &gBagPockets[POCKET_TM_HM]; ASSUME(GetItemPocket(ITEM_HM07) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_TM25) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_TM14) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_TM42) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_HM05) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_TM05) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_TM01) == POCKET_TM_HM); ASSUME(GetItemPocket(ITEM_HM02) == POCKET_TM_HM); /* * Note: I would add a test to make sure that TMs are sorted correctly by move name, * but downstream users are likely to rearrange TMs so this would just be a nuisance. */ RUN_OVERWORLD_SCRIPT( additem ITEM_HM07; additem ITEM_TM25; additem ITEM_TM14; additem ITEM_TM42; additem ITEM_HM05; additem ITEM_TM05; additem ITEM_TM01; additem ITEM_HM02; ); SortItemsInBag(&gBagPockets[POCKET_TM_HM], SORT_BY_INDEX); EXPECT_EQ(pocket->itemSlots[0].itemId, ITEM_TM01); EXPECT_EQ(pocket->itemSlots[1].itemId, ITEM_TM05); EXPECT_EQ(pocket->itemSlots[2].itemId, ITEM_TM14); EXPECT_EQ(pocket->itemSlots[3].itemId, ITEM_TM25); EXPECT_EQ(pocket->itemSlots[4].itemId, ITEM_TM42); EXPECT_EQ(pocket->itemSlots[5].itemId, ITEM_HM02); EXPECT_EQ(pocket->itemSlots[6].itemId, ITEM_HM05); EXPECT_EQ(pocket->itemSlots[7].itemId, ITEM_HM07); EXPECT_EQ(pocket->itemSlots[8].itemId, ITEM_NONE); } TEST("Berries are sorted correctly in the bag") { struct BagPocket *pocket = &gBagPockets[POCKET_BERRIES]; ASSUME(GetItemPocket(ITEM_POMEG_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_MAGOST_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_KELPSY_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_MICLE_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_CHARTI_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_GANLON_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_ORAN_BERRY) == POCKET_BERRIES); ASSUME(GetItemPocket(ITEM_CHERI_BERRY) == POCKET_BERRIES); RUN_OVERWORLD_SCRIPT( additem ITEM_POMEG_BERRY; additem ITEM_MAGOST_BERRY; additem ITEM_KELPSY_BERRY; additem ITEM_MICLE_BERRY; additem ITEM_CHARTI_BERRY; additem ITEM_GANLON_BERRY; additem ITEM_ORAN_BERRY; additem ITEM_CHERI_BERRY; ); SortItemsInBag(&gBagPockets[POCKET_BERRIES], SORT_BY_INDEX); EXPECT_EQ(pocket->itemSlots[0].itemId, ITEM_CHERI_BERRY); EXPECT_EQ(pocket->itemSlots[1].itemId, ITEM_ORAN_BERRY); EXPECT_EQ(pocket->itemSlots[2].itemId, ITEM_POMEG_BERRY); EXPECT_EQ(pocket->itemSlots[3].itemId, ITEM_KELPSY_BERRY); EXPECT_EQ(pocket->itemSlots[4].itemId, ITEM_MAGOST_BERRY); EXPECT_EQ(pocket->itemSlots[5].itemId, ITEM_CHARTI_BERRY); EXPECT_EQ(pocket->itemSlots[6].itemId, ITEM_GANLON_BERRY); EXPECT_EQ(pocket->itemSlots[7].itemId, ITEM_MICLE_BERRY); EXPECT_EQ(pocket->itemSlots[8].itemId, ITEM_NONE); SortItemsInBag(&gBagPockets[POCKET_BERRIES], SORT_ALPHABETICALLY); EXPECT_EQ(pocket->itemSlots[0].itemId, ITEM_CHARTI_BERRY); EXPECT_EQ(pocket->itemSlots[1].itemId, ITEM_CHERI_BERRY); EXPECT_EQ(pocket->itemSlots[2].itemId, ITEM_GANLON_BERRY); EXPECT_EQ(pocket->itemSlots[3].itemId, ITEM_KELPSY_BERRY); EXPECT_EQ(pocket->itemSlots[4].itemId, ITEM_MAGOST_BERRY); EXPECT_EQ(pocket->itemSlots[5].itemId, ITEM_MICLE_BERRY); EXPECT_EQ(pocket->itemSlots[6].itemId, ITEM_ORAN_BERRY); EXPECT_EQ(pocket->itemSlots[7].itemId, ITEM_POMEG_BERRY); EXPECT_EQ(pocket->itemSlots[8].itemId, ITEM_NONE); } TEST("Items are correctly sorted and compacted in the bag") { struct BagPocket *pocket = &gBagPockets[POCKET_ITEMS]; memset(pocket->itemSlots, 0, sizeof(gSaveBlock1Ptr->bag.items)); ASSUME(GetItemPocket(ITEM_NUGGET) == POCKET_ITEMS); ASSUME(GetItemPocket(ITEM_BIG_NUGGET) == POCKET_ITEMS); ASSUME(GetItemPocket(ITEM_TINY_MUSHROOM) == POCKET_ITEMS); ASSUME(GetItemPocket(ITEM_BIG_MUSHROOM) == POCKET_ITEMS); ASSUME(GetItemPocket(ITEM_PEARL) == POCKET_ITEMS); ASSUME(GetItemPocket(ITEM_BIG_PEARL) == POCKET_ITEMS); RUN_OVERWORLD_SCRIPT( additem ITEM_NUGGET; additem ITEM_BIG_NUGGET; additem ITEM_TINY_MUSHROOM; additem ITEM_BIG_MUSHROOM; additem ITEM_PEARL; additem ITEM_BIG_PEARL; ); EXPECT_EQ(pocket->itemSlots[0].itemId, ITEM_NUGGET); EXPECT_EQ(pocket->itemSlots[0].quantity, 1); EXPECT_EQ(pocket->itemSlots[1].itemId, ITEM_BIG_NUGGET); EXPECT_EQ(pocket->itemSlots[1].quantity, 1); EXPECT_EQ(pocket->itemSlots[2].itemId, ITEM_TINY_MUSHROOM); EXPECT_EQ(pocket->itemSlots[2].quantity, 1); EXPECT_EQ(pocket->itemSlots[3].itemId, ITEM_BIG_MUSHROOM); EXPECT_EQ(pocket->itemSlots[3].quantity, 1); EXPECT_EQ(pocket->itemSlots[4].itemId, ITEM_PEARL); EXPECT_EQ(pocket->itemSlots[4].quantity, 1); EXPECT_EQ(pocket->itemSlots[5].itemId, ITEM_BIG_PEARL); EXPECT_EQ(pocket->itemSlots[5].quantity, 1); EXPECT_EQ(pocket->itemSlots[6].itemId, ITEM_NONE); SortItemsInBag(&gBagPockets[POCKET_ITEMS], SORT_ALPHABETICALLY); EXPECT_EQ(pocket->itemSlots[0].itemId, ITEM_BIG_MUSHROOM); EXPECT_EQ(pocket->itemSlots[1].itemId, ITEM_BIG_NUGGET); EXPECT_EQ(pocket->itemSlots[2].itemId, ITEM_BIG_PEARL); EXPECT_EQ(pocket->itemSlots[3].itemId, ITEM_NUGGET); EXPECT_EQ(pocket->itemSlots[4].itemId, ITEM_PEARL); EXPECT_EQ(pocket->itemSlots[5].itemId, ITEM_TINY_MUSHROOM); EXPECT_EQ(pocket->itemSlots[6].itemId, ITEM_NONE); // Try removing the big items, check that everything is compacted correctly RUN_OVERWORLD_SCRIPT( removeitem ITEM_BIG_NUGGET; removeitem ITEM_BIG_MUSHROOM; removeitem ITEM_BIG_PEARL; ); CompactItemsInBagPocket(POCKET_ITEMS); EXPECT_EQ(pocket->itemSlots[0].itemId, ITEM_NUGGET); EXPECT_EQ(pocket->itemSlots[0].quantity, 1); EXPECT_EQ(pocket->itemSlots[1].itemId, ITEM_PEARL); EXPECT_EQ(pocket->itemSlots[1].quantity, 1); EXPECT_EQ(pocket->itemSlots[2].itemId, ITEM_TINY_MUSHROOM); EXPECT_EQ(pocket->itemSlots[2].quantity, 1); EXPECT_EQ(pocket->itemSlots[3].itemId, ITEM_NONE); EXPECT_EQ(pocket->itemSlots[4].itemId, ITEM_NONE); EXPECT_EQ(pocket->itemSlots[5].itemId, ITEM_NONE); EXPECT_EQ(pocket->itemSlots[6].itemId, ITEM_NONE); }