#include "static_data.h"
#include "context.h"
#include "logic.h"
#include "z64object.h"
#include "soh/Enhancements/custom-message/CustomMessageTypes.h"
#include "draw.h"

using namespace Rando;

std::array<Item, RG_MAX> Rando::StaticData::itemTable;
std::unordered_map<std::string, RandomizerGet> Rando::StaticData::itemNameToEnum;

void Rando::StaticData::InitItemTable() {
    auto logic = Context::GetInstance()->GetLogic();
    itemTable[RG_NONE] =                                Item(RG_NONE,                             Text{ "No Item", "Rien", "Kein Artikel" },                                                                                           ITEMTYPE_EVENT,             GI_RUPEE_GREEN,       false, LOGIC_NONE,                         RHT_NONE,                              ITEM_NONE,                            0,                       0,                   0,                           0,    0,                ITEM_CATEGORY_JUNK,   MOD_NONE);
    //        Randomizer Get                                 Randomizer Get                       Name Text                                                                                                                            Type                        Get Item ID           Adv.   Logic Value                         Hint Text Key                          Item ID                               Object ID                Draw ID              Text ID                      field Chest Animation   Item Category         Mod Index
    itemTable[RG_KOKIRI_SWORD] =                        Item(RG_KOKIRI_SWORD,                     Text{ "Kokiri Sword", "Épée Kokiri", "Kokiri-Schwert" },                                                                             ITEMTYPE_EQUIP,             GI_SWORD_KOKIRI,      true,  LOGIC_KOKIRI_SWORD,                 RHT_KOKIRI_SWORD,                      ITEM_SWORD_KOKIRI,                    OBJECT_GI_SWORD_1,       GID_SWORD_KOKIRI,    0xA4,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_MASTER_SWORD] =                        Item(RG_MASTER_SWORD,                     Text{ "Master Sword", "Épée de Legende", "Master-Schwert"},                                                                          ITEMTYPE_EQUIP,             0xE0,                 true,  LOGIC_MASTER_SWORD,                 RHT_MASTER_SWORD,                      ITEM_SWORD_MASTER,                    OBJECT_TOKI_OBJECTS,     GID_SWORD_BGS,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_MASTER_SWORD].SetCustomDrawFunc(Randomizer_DrawMasterSword);
    itemTable[RG_GIANTS_KNIFE] =                        Item(RG_GIANTS_KNIFE,                     Text{ "Giant's Knife", "Lame des Géants", "Langschwert" },                                                                           ITEMTYPE_EQUIP,             GI_SWORD_KNIFE,       true,  LOGIC_NONE,                         RHT_GIANTS_KNIFE,                      ITEM_SWORD_BGS,                       OBJECT_GI_LONGSWORD,     GID_SWORD_BGS,       0x4B,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BIGGORON_SWORD] =                      Item(RG_BIGGORON_SWORD,                   Text{ "Biggoron's Sword", "Épée de Biggoron", "Biggoron-Schwert" },                                                                  ITEMTYPE_EQUIP,             GI_SWORD_BGS,         true,  LOGIC_BIGGORON_SWORD,               RHT_BIGGORON_SWORD,                    ITEM_SWORD_BGS,                       OBJECT_GI_LONGSWORD,     GID_SWORD_BGS,       0x0C,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_DEKU_SHIELD] =                         Item(RG_DEKU_SHIELD,                      Text{ "Deku Shield", "Bouclier Mojo", "Deku-Schild" },                                                                               ITEMTYPE_EQUIP,             GI_SHIELD_DEKU,       false, LOGIC_DEKU_SHIELD,                  RHT_DEKU_SHIELD,                       ITEM_SHIELD_DEKU,                     OBJECT_GI_SHIELD_1,      GID_SHIELD_DEKU,     0x4C,                        0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_HYLIAN_SHIELD] =                       Item(RG_HYLIAN_SHIELD,                    Text{ "Hylian Shield", "Bouclier Hylien", "Hylia-Schild" },                                                                          ITEMTYPE_EQUIP,             GI_SHIELD_HYLIAN,     false, LOGIC_HYLIAN_SHIELD,                RHT_HYLIAN_SHIELD,                     ITEM_SHIELD_HYLIAN,                   OBJECT_GI_SHIELD_2,      GID_SHIELD_HYLIAN,   0x4D,                        0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_MIRROR_SHIELD] =                       Item(RG_MIRROR_SHIELD,                    Text{ "Mirror Shield", "Bouclier Miroir", "Spiegelschild" },                                                                         ITEMTYPE_EQUIP,             GI_SHIELD_MIRROR,     true,  LOGIC_MIRROR_SHIELD,                RHT_MIRROR_SHIELD,                     ITEM_SHIELD_MIRROR,                   OBJECT_GI_SHIELD_3,      GID_SHIELD_MIRROR,   0x4E,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_GORON_TUNIC] =                         Item(RG_GORON_TUNIC,                      Text{ "Goron Tunic", "Tunique Goron", "Goronen-Tunika" },                                                                            ITEMTYPE_EQUIP,             GI_TUNIC_GORON,       true,  LOGIC_GORON_TUNIC,                  RHT_GORON_TUNIC,                       ITEM_TUNIC_GORON,                     OBJECT_GI_CLOTHES,       GID_TUNIC_GORON,     0x50,                        0xA0, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_ZORA_TUNIC] =                          Item(RG_ZORA_TUNIC,                       Text{ "Zora Tunic", "Tunique Zora", "Zora-Tunika" },                                                                                 ITEMTYPE_EQUIP,             GI_TUNIC_ZORA,        true,  LOGIC_ZORA_TUNIC,                   RHT_ZORA_TUNIC,                        ITEM_TUNIC_ZORA,                      OBJECT_GI_CLOTHES,       GID_TUNIC_ZORA,      0x51,                        0xA0, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_IRON_BOOTS] =                          Item(RG_IRON_BOOTS,                       Text{ "Iron Boots", "Bottes de plomb", "Eisenstiefel" },                                                                             ITEMTYPE_EQUIP,             GI_BOOTS_IRON,        true,  LOGIC_IRON_BOOTS,                   RHT_IRON_BOOTS,                        ITEM_BOOTS_IRON,                      OBJECT_GI_BOOTS_2,       GID_BOOTS_IRON,      0x53,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_HOVER_BOOTS] =                         Item(RG_HOVER_BOOTS,                      Text{ "Hover Boots", "Bottes de airs", "Gleitstiefel" },                                                                             ITEMTYPE_EQUIP,             GI_BOOTS_HOVER,       true,  LOGIC_HOVER_BOOTS,                  RHT_HOVER_BOOTS,                       ITEM_BOOTS_HOVER,                     OBJECT_GI_HOVERBOOTS,    GID_BOOTS_HOVER,     0x54,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BOOMERANG] =                           Item(RG_BOOMERANG,                        Text{ "Boomerang", "Boomerang", "Bumerang" },                                                                                        ITEMTYPE_ITEM,              GI_BOOMERANG,         true,  LOGIC_BOOMERANG,                    RHT_BOOMERANG,                         ITEM_BOOMERANG,                       OBJECT_GI_BOOMERANG,     GID_BOOMERANG,       0x35,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_LENS_OF_TRUTH] =                       Item(RG_LENS_OF_TRUTH,                    Text{ "Lens of Truth", "Monocle de Vérité", "Auge der Wahrheit" },                                                                   ITEMTYPE_ITEM,              GI_LENS,              true,  LOGIC_LENS_OF_TRUTH,                RHT_LENS_OF_TRUTH,                     ITEM_LENS,                            OBJECT_GI_GLASSES,       GID_LENS,            0x39,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_MEGATON_HAMMER] =                      Item(RG_MEGATON_HAMMER,                   Text{ "Megaton Hammer", "Masse des Titans", "Stahlhammer" },                                                                         ITEMTYPE_ITEM,              GI_HAMMER,            true,  LOGIC_HAMMER,                       RHT_MEGATON_HAMMER,                    ITEM_HAMMER,                          OBJECT_GI_HAMMER,        GID_HAMMER,          0x38,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_STONE_OF_AGONY] =                      Item(RG_STONE_OF_AGONY,                   Text{ "Stone of Agony", "Pierre de Souffrance", "Stein des Wissens" },                                                               ITEMTYPE_ITEM,              GI_STONE_OF_AGONY,    true,  LOGIC_STONE_OF_AGONY,               RHT_STONE_OF_AGONY,                    ITEM_STONE_OF_AGONY,                  OBJECT_GI_MAP,           GID_STONE_OF_AGONY,  0x68,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_DINS_FIRE] =                           Item(RG_DINS_FIRE,                        Text{ "Din's Fire", "Feu de Din", "Dins Feuerinferno" },                                                                             ITEMTYPE_ITEM,              GI_DINS_FIRE,         true,  LOGIC_DINS_FIRE,                    RHT_DINS_FIRE,                         ITEM_DINS_FIRE,                       OBJECT_GI_GODDESS,       GID_DINS_FIRE,       0xAD,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_FARORES_WIND] =                        Item(RG_FARORES_WIND,                     Text{ "Farore's Wind", "Vent de Farore", "Farores Donnersturm" },                                                                    ITEMTYPE_ITEM,              GI_FARORES_WIND,      true,  LOGIC_FARORES_WIND,                 RHT_FARORES_WIND,                      ITEM_FARORES_WIND,                    OBJECT_GI_GODDESS,       GID_FARORES_WIND,    0xAE,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_NAYRUS_LOVE] =                         Item(RG_NAYRUS_LOVE,                      Text{ "Nayru's Love", "Amour de Nayru", "Nayrus Umarmung" },                                                                         ITEMTYPE_ITEM,              GI_NAYRUS_LOVE,       true,  LOGIC_NAYRUS_LOVE,                  RHT_NAYRUS_LOVE,                       ITEM_NAYRUS_LOVE,                     OBJECT_GI_GODDESS,       GID_NAYRUS_LOVE,     0xAF,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_FIRE_ARROWS] =                         Item(RG_FIRE_ARROWS,                      Text{ "Fire Arrow", "Flèche de Feu", "Feuerpfeil" },                                                                                 ITEMTYPE_ITEM,              GI_ARROW_FIRE,        true,  LOGIC_FIRE_ARROWS,                  RHT_FIRE_ARROWS,                       ITEM_ARROW_FIRE,                      OBJECT_GI_M_ARROW,       GID_ARROW_FIRE,      0x70,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_ICE_ARROWS] =                          Item(RG_ICE_ARROWS,                       Text{ "Ice Arrow", "Flèche de Glace", "Eispfeil" },                                                                                  ITEMTYPE_ITEM,              GI_ARROW_ICE,         true,  LOGIC_ICE_ARROWS,                   RHT_ICE_ARROWS,                        ITEM_ARROW_ICE,                       OBJECT_GI_M_ARROW,       GID_ARROW_ICE,       0x71,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_LIGHT_ARROWS] =                        Item(RG_LIGHT_ARROWS,                     Text{ "Light Arrow", "Flèche de Lumière", "Lichtpfeil" },                                                                            ITEMTYPE_ITEM,              GI_ARROW_LIGHT,       true,  LOGIC_LIGHT_ARROWS,                 RHT_LIGHT_ARROWS,                      ITEM_ARROW_LIGHT,                     OBJECT_GI_M_ARROW,       GID_ARROW_LIGHT,     0x72,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_GERUDO_MEMBERSHIP_CARD] =              Item(RG_GERUDO_MEMBERSHIP_CARD,           Text{ "Gerudo Membership Card", "Carte Gerudo", "Gerudo-Pass" },                                                                     ITEMTYPE_ITEM,              GI_GERUDO_CARD,       true,  LOGIC_GERUDO_CARD,                  RHT_GERUDO_MEMBERSHIP_CARD,            ITEM_GERUDO_CARD,                     OBJECT_GI_GERUDO,        GID_GERUDO_CARD,     0x7B,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_MAGIC_BEAN] =                          Item(RG_MAGIC_BEAN,                       Text{ "Magic Bean", "Haricots Magiques", "Wundererbse" },                                                                            ITEMTYPE_ITEM,              GI_BEAN,              true,  LOGIC_MAGIC_BEAN,                   RHT_MAGIC_BEAN,                        ITEM_BEAN,                            OBJECT_GI_BEAN,          GID_BEAN,            0x48,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_MAGIC_BEAN_PACK] =                     Item(RG_MAGIC_BEAN_PACK,                  Text{ "Magic Bean Pack", "Paquet de Haricots Magiques", "Wundererbsen-Packung" },                                                    ITEMTYPE_ITEM,              RG_MAGIC_BEAN_PACK,   true,  LOGIC_MAGIC_BEAN,                   RHT_MAGIC_BEAN_PACK,                   RG_MAGIC_BEAN_PACK,                   OBJECT_GI_BEAN,          GID_BEAN,            TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_DOUBLE_DEFENSE] =                      Item(RG_DOUBLE_DEFENSE,                   Text{ "Double Defense", "Double Défence", "Doppelte Verteidigung" },                                                                 ITEMTYPE_ITEM,              RG_DOUBLE_DEFENSE,    true,  LOGIC_DOUBLE_DEFENSE,               RHT_DOUBLE_DEFENSE,                    RG_DOUBLE_DEFENSE,                    OBJECT_GI_HEARTS,        GID_HEART_CONTAINER, 0xE9,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_DOUBLE_DEFENSE].SetCustomDrawFunc(Randomizer_DrawDoubleDefense);
    // Trade Quest Items
    itemTable[RG_WEIRD_EGG] =                           Item(RG_WEIRD_EGG,                        Text{ "Weird Egg", "Oeuf Curieux", "Seltsames Ei" },                                                                                 ITEMTYPE_ITEM,              GI_WEIRD_EGG,         true,  LOGIC_WEIRD_EGG,                    RHT_WEIRD_EGG,                         ITEM_WEIRD_EGG,                       OBJECT_GI_EGG,           GID_EGG,             0x9A,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_ZELDAS_LETTER] =                       Item(RG_ZELDAS_LETTER,                    Text{ "Zelda's Letter", "Lettre de Zelda", "Zeldas Brief" },                                                                         ITEMTYPE_ITEM,              GI_LETTER_ZELDA,      true,  LOGIC_ZELDAS_LETTER,                RHT_ZELDAS_LETTER,                     ITEM_LETTER_ZELDA,                    OBJECT_GI_LETTER,        GID_LETTER_ZELDA,    0x69,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_POCKET_EGG] =                          Item(RG_POCKET_EGG,                       Text{ "Pocket Egg", "Oeuf de poche", "Ei" },                                                                                         ITEMTYPE_ITEM,              GI_POCKET_EGG,        true,  LOGIC_POCKET_EGG,                   RHT_POCKET_EGG,                        ITEM_POCKET_EGG,                      OBJECT_GI_EGG,           GID_EGG,             0x01,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_COJIRO] =                              Item(RG_COJIRO,                           Text{ "Cojiro", "P'tit Poulet", "Henni" },                                                                                           ITEMTYPE_ITEM,              GI_COJIRO,            true,  LOGIC_COJIRO,                       RHT_COJIRO,                            ITEM_COJIRO,                          OBJECT_GI_NIWATORI,      GID_COJIRO,          0x02,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_ODD_MUSHROOM] =                        Item(RG_ODD_MUSHROOM,                     Text{ "Odd Mushroom", "Champigon Suspect", "Schimmelpilz" },                                                                         ITEMTYPE_ITEM,              GI_ODD_MUSHROOM,      true,  LOGIC_ODD_MUSHROOM,                 RHT_ODD_MUSHROOM,                      ITEM_ODD_MUSHROOM,                    OBJECT_GI_MUSHROOM,      GID_ODD_MUSHROOM,    0x03,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_ODD_POTION] =                          Item(RG_ODD_POTION,                       Text{ "Odd Potion", "Mixture Suspecte", "Modertrank" },                                                                              ITEMTYPE_ITEM,              GI_ODD_POTION,        true,  LOGIC_ODD_POULTICE,                 RHT_ODD_POTION,                        ITEM_ODD_POTION,                      OBJECT_GI_POWDER,        GID_ODD_POTION,      0x04,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_POACHERS_SAW] =                        Item(RG_POACHERS_SAW,                     Text{ "Poacher's Saw", "Scie du Chasseur", "Säge" },                                                                                 ITEMTYPE_ITEM,              GI_SAW,               true,  LOGIC_POACHERS_SAW,                 RHT_POACHERS_SAW,                      ITEM_SAW,                             OBJECT_GI_SAW,           GID_SAW,             0x05,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BROKEN_SWORD] =                        Item(RG_BROKEN_SWORD,                     Text{ "Broken Goron's Sword", "Épée Brisée de Goron", "Zerbrochenes Goronen-Schwert" },                                              ITEMTYPE_ITEM,              GI_SWORD_BROKEN,      true,  LOGIC_BROKEN_SWORD,                 RHT_BROKEN_SWORD,                      ITEM_SWORD_BROKEN,                    OBJECT_GI_BROKENSWORD,   GID_SWORD_BROKEN,    0x08,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_PRESCRIPTION] =                        Item(RG_PRESCRIPTION,                     Text{ "Prescription", "Ordonnance", "Rezept" },                                                                                      ITEMTYPE_ITEM,              GI_PRESCRIPTION,      true,  LOGIC_PRESCRIPTION,                 RHT_PRESCRIPTION,                      ITEM_PRESCRIPTION,                    OBJECT_GI_PRESCRIPTION,  GID_PRESCRIPTION,    0x09,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_EYEBALL_FROG] =                        Item(RG_EYEBALL_FROG,                     Text{ "Eyeball Frog", "Crapaud-qui-louche", "Glotzfrosch" },                                                                         ITEMTYPE_ITEM,              GI_FROG,              true,  LOGIC_EYEBALL_FROG,                 RHT_EYEBALL_FROG,                      ITEM_FROG,                            OBJECT_GI_FROG,          GID_FROG,            0x0D,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_EYEDROPS] =                            Item(RG_EYEDROPS,                         Text{ "World's Finest Eyedrops", "Super Gouttes", "Augentropfen" },                                                                  ITEMTYPE_ITEM,              GI_EYEDROPS,          true,  LOGIC_EYEDROPS,                     RHT_EYEDROPS,                          ITEM_EYEDROPS,                        OBJECT_GI_EYE_LOTION,    GID_EYEDROPS,        0x0E,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_CLAIM_CHECK] =                         Item(RG_CLAIM_CHECK,                      Text{ "Claim Check", "Certificat", "Zertifikat" },                                                                                   ITEMTYPE_ITEM,              GI_CLAIM_CHECK,       true,  LOGIC_CLAIM_CHECK,                  RHT_CLAIM_CHECK,                       ITEM_CLAIM_CHECK,                     OBJECT_GI_TICKETSTONE,   GID_CLAIM_CHECK,     0x0A,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    // Skulltula Token
    itemTable[RG_GOLD_SKULLTULA_TOKEN] =                Item(RG_GOLD_SKULLTULA_TOKEN,             Text{ "Gold Skulltula Token", "Symbole de Skulltula d'Or", "Goldenes Skulltula-Symbol" },                                            ITEMTYPE_TOKEN,             GI_SKULL_TOKEN,       true,  LOGIC_GOLD_SKULLTULA_TOKENS,        RHT_GOLD_SKULLTULA_TOKEN,              ITEM_SKULL_TOKEN,                     OBJECT_GI_SUTARU,        GID_SKULL_TOKEN,     0xB4,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SKULLTULA_TOKEN, MOD_NONE);
    // Progressive Items
    itemTable[RG_PROGRESSIVE_HOOKSHOT] =                Item(RG_PROGRESSIVE_HOOKSHOT,             Text{ "Progressive Hookshot", "Grappin (prog.)", "Progressiver Fanghaken" },                                                         ITEMTYPE_ITEM,              0x80,                 true,  LOGIC_PROGRESSIVE_HOOKSHOT,         RHT_PROGRESSIVE_HOOKSHOT, true);
    itemTable[RG_PROGRESSIVE_STRENGTH] =                Item(RG_PROGRESSIVE_STRENGTH,             Text{ "Strength Upgrade", "Amélioration de Force (prog.)", "Progressives Kraft-Upgrade" },                                           ITEMTYPE_ITEM,              0x81,                 true,  LOGIC_PROGRESSIVE_STRENGTH,         RHT_PROGRESSIVE_STRENGTH, true);
    itemTable[RG_PROGRESSIVE_BOMB_BAG] =                Item(RG_PROGRESSIVE_BOMB_BAG,             Text{ "Progressive Bomb Bag", "Sac de Bombes (prog.)", "Progressive Bombentasche" },                                                 ITEMTYPE_ITEM,              0x82,                 true,  LOGIC_PROGRESSIVE_BOMB_BAG,         RHT_PROGRESSIVE_BOMB_BAG, true);
    itemTable[RG_PROGRESSIVE_BOW] =                     Item(RG_PROGRESSIVE_BOW,                  Text{ "Progressive Bow", "Arc (prog.)", "Progressiver Bogen" },                                                                      ITEMTYPE_ITEM,              0x83,                 true,  LOGIC_PROGRESSIVE_BOW,              RHT_PROGRESSIVE_BOW, true);
    itemTable[RG_PROGRESSIVE_SLINGSHOT] =               Item(RG_PROGRESSIVE_SLINGSHOT,            Text{ "Progressive Slingshot", "Lance-Pierre (prog.)", "Progressive Steinschleuder" },                                               ITEMTYPE_ITEM,              0x84,                 true,  LOGIC_PROGRESSIVE_BULLET_BAG,       RHT_PROGRESSIVE_SLINGSHOT, true);
    itemTable[RG_PROGRESSIVE_WALLET] =                  Item(RG_PROGRESSIVE_WALLET,               Text{ "Progressive Wallet", "Bourse (prog.)", "Progressive Geldbörse" },                                                             ITEMTYPE_ITEM,              0x85,                 true,  LOGIC_PROGRESSIVE_WALLET,           RHT_PROGRESSIVE_WALLET, true);
    itemTable[RG_PROGRESSIVE_SCALE] =                   Item(RG_PROGRESSIVE_SCALE,                Text{ "Progressive Scale", "Écaille (prog.)", "Progressive Schuppe" },                                                               ITEMTYPE_ITEM,              0x86,                 true,  LOGIC_PROGRESSIVE_SCALE,            RHT_PROGRESSIVE_SCALE, true);
    itemTable[RG_PROGRESSIVE_NUT_UPGRADE] =             Item(RG_PROGRESSIVE_NUT_UPGRADE,          Text{ "Progressive Nut Capacity", "Capacité de Noix (prog.)", "Progressive Nuß-Kapazität" },                                         ITEMTYPE_ITEM,              0x87,                 true,  LOGIC_PROGRESSIVE_NUT_BAG,          RHT_PROGRESSIVE_NUT_UPGRADE, true);
    itemTable[RG_PROGRESSIVE_STICK_UPGRADE] =           Item(RG_PROGRESSIVE_STICK_UPGRADE,        Text{ "Progressive Stick Capacity", "Capacité de Bâtons (prog.)", "Progressive Stab-Kapazität" },                                    ITEMTYPE_ITEM,              0x88,                 true,  LOGIC_PROGRESSIVE_STICK_BAG,        RHT_PROGRESSIVE_STICK_UPGRADE, true);
    itemTable[RG_PROGRESSIVE_BOMBCHUS] =                Item(RG_PROGRESSIVE_BOMBCHUS,             Text{ "Progressive Bombchu", "Missiles (prog.)", "Progressive Krabbelminen" },                                                       ITEMTYPE_ITEM,              0x89,                 true,  LOGIC_BOMBCHUS,                     RHT_PROGRESSIVE_BOMBCHUS, true);
    itemTable[RG_PROGRESSIVE_MAGIC_METER] =             Item(RG_PROGRESSIVE_MAGIC_METER,          Text{ "Progressive Magic Meter", "Jauge de Magie (prog.)", "Progressives Magisches Maß" },                                           ITEMTYPE_ITEM,              0x8A,                 true,  LOGIC_PROGRESSIVE_MAGIC,            RHT_PROGRESSIVE_MAGIC_METER, true);
    itemTable[RG_PROGRESSIVE_OCARINA] =                 Item(RG_PROGRESSIVE_OCARINA,              Text{ "Progressive Ocarina", "Ocarina (prog.)", "Progressive Okarina" },                                                             ITEMTYPE_ITEM,              0x8B,                 true,  LOGIC_PROGRESSIVE_OCARINA,          RHT_PROGRESSIVE_OCARINA, true);
    itemTable[RG_PROGRESSIVE_GORONSWORD] =              Item(RG_PROGRESSIVE_GORONSWORD,           Text{ "Progressive Goron Sword", "Épée Goron (prog.)", "Progressives Goronen-Schwert" },                                             ITEMTYPE_ITEM,              0xD4,                 true,  LOGIC_PROGRESSIVE_GIANT_KNIFE,      RHT_PROGRESSIVE_GORONSWORD, true);
    // Bottles
    itemTable[RG_EMPTY_BOTTLE] =                        Item(RG_EMPTY_BOTTLE,                     Text{ "Empty Bottle", "Bouteille Vide", "Leere Flasche" },                                                                           ITEMTYPE_ITEM,              GI_BOTTLE,            true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_MILK,                  ITEM_BOTTLE,                          OBJECT_GI_BOTTLE,        GID_BOTTLE,          0x42,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BOTTLE_WITH_MILK] =                    Item(RG_BOTTLE_WITH_MILK,                 Text{ "Bottle with Milk", "Bouteille avec du Lait", "Flasche mit Milch" },                                                           ITEMTYPE_ITEM,              GI_MILK_BOTTLE,       true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_MILK,                  ITEM_MILK_BOTTLE,                     OBJECT_GI_MILK,          GID_MILK,            0x98,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BOTTLE_WITH_RED_POTION] =              Item(RG_BOTTLE_WITH_RED_POTION,           Text{ "Bottle with Red Potion", "Bouteille avec une Potion Rouge", "Flasche mit rotem Elixier" },                                    ITEMTYPE_ITEM,              0x8C,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_RED_POTION,            RG_BOTTLE_WITH_RED_POTION,            OBJECT_GI_LIQUID,        GID_POTION_RED,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_GREEN_POTION] =            Item(RG_BOTTLE_WITH_GREEN_POTION,         Text{ "Bottle with Green Potion", "Bouteille avec une Potion Verte", "Flasche mit grünem Elixier" },                                 ITEMTYPE_ITEM,              0x8D,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_GREEN_POTION,          RG_BOTTLE_WITH_GREEN_POTION,          OBJECT_GI_LIQUID,        GID_POTION_GREEN,    TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_BLUE_POTION] =             Item(RG_BOTTLE_WITH_BLUE_POTION,          Text{ "Bottle with Blue Potion", "Bouteille avec une Potion Bleue", "Flasche mit blauem Elixier" },                                  ITEMTYPE_ITEM,              0x8E,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_BLUE_POTION,           RG_BOTTLE_WITH_BLUE_POTION,           OBJECT_GI_LIQUID,        GID_POTION_BLUE,     TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_FAIRY] =                   Item(RG_BOTTLE_WITH_FAIRY,                Text{ "Bottle with Fairy", "Bouteille avec une Fée", "Flasche mit Fee" },                                                            ITEMTYPE_ITEM,              0x8F,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_FAIRY,                 RG_BOTTLE_WITH_FAIRY,                 OBJECT_GI_BOTTLE,        GID_BOTTLE,          TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_FISH] =                    Item(RG_BOTTLE_WITH_FISH,                 Text{ "Bottle with Fish", "Bouteille avec un Poisson", "Flasche mit Fisch" },                                                        ITEMTYPE_ITEM,              0x90,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_FISH,                  RG_BOTTLE_WITH_FISH,                  OBJECT_GI_FISH,          GID_FISH,            TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_BLUE_FIRE] =               Item(RG_BOTTLE_WITH_BLUE_FIRE,            Text{ "Bottle with Blue Fire", "Bouteille avec une Flamme Bleue", "Flasche mit blauem Feuer" },                                      ITEMTYPE_ITEM,              0x91,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_BLUE_FIRE,             RG_BOTTLE_WITH_BLUE_FIRE,             OBJECT_GI_FIRE,          GID_BLUE_FIRE,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_BUGS] =                    Item(RG_BOTTLE_WITH_BUGS,                 Text{ "Bottle with Bugs", "Bouteille avec des Insectes", "Flasche mit Wanzen" },                                                     ITEMTYPE_ITEM,              0x92,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_BUGS,                  RG_BOTTLE_WITH_BUGS,                  OBJECT_GI_INSECT,        GID_BUG,             TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BOTTLE_WITH_POE] =                     Item(RG_BOTTLE_WITH_POE,                  Text{ "Bottle with Poe", "Bouteille avec un Esprit", "Flasche mit einem Geist" },                                                    ITEMTYPE_ITEM,              0x94,                 true,  LOGIC_BOTTLES,                      RHT_BOTTLE_WITH_POE,                   RG_BOTTLE_WITH_POE,                   OBJECT_GI_GHOST,         GID_POE,             TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_RUTOS_LETTER] =                        Item(RG_RUTOS_LETTER,                     Text{ "Bottle with Ruto's Letter", "Bouteille avec la Lettre de Ruto", "Flasche mit Rutos Brief" },                                  ITEMTYPE_ITEM,              GI_LETTER_RUTO,       true,  LOGIC_RUTOS_LETTER,                 RHT_RUTOS_LETTER,                      ITEM_LETTER_RUTO,                     OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO,     0x99,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BOTTLE_WITH_BIG_POE] =                 Item(RG_BOTTLE_WITH_BIG_POE,              Text{ "Bottle with Big Poe", "Bouteille avec une Âme", "Flasche mit Seele" },                                                        ITEMTYPE_ITEM,              0x93,                 true,  LOGIC_BOTTLE_WITH_BIG_POE,          RHT_BOTTLE_WITH_BIG_POE,               RG_BOTTLE_WITH_BIG_POE,               OBJECT_GI_GHOST,         GID_BIG_POE,         TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    // Songs
    itemTable[RG_ZELDAS_LULLABY] =                      Item(RG_ZELDAS_LULLABY,                   Text{ "Zelda's Lullaby", "Berceuse de Zelda", "Zeldas Wiegenlied" },                                                                 ITEMTYPE_SONG,              0xC1,                 true,  LOGIC_ZELDAS_LULLABY,               RHT_ZELDAS_LULLABY,                    ITEM_SONG_LULLABY,                    OBJECT_GI_MELODY,        GID_SONG_ZELDA,      0xD4,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_EPONAS_SONG] =                         Item(RG_EPONAS_SONG,                      Text{ "Epona's Song", "Chant d'Epona", "Eponas Lied" },                                                                              ITEMTYPE_SONG,              0xC2,                 true,  LOGIC_EPONAS_SONG,                  RHT_EPONAS_SONG,                       ITEM_SONG_EPONA,                      OBJECT_GI_MELODY,        GID_SONG_EPONA,      0xD2,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SARIAS_SONG] =                         Item(RG_SARIAS_SONG,                      Text{ "Saria's Song", "Chant de Saria", "Salias Lied" },                                                                             ITEMTYPE_SONG,              0xC3,                 true,  LOGIC_SARIAS_SONG,                  RHT_SARIAS_SONG,                       ITEM_SONG_SARIA,                      OBJECT_GI_MELODY,        GID_SONG_SARIA,      0xD1,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SUNS_SONG] =                           Item(RG_SUNS_SONG,                        Text{ "Sun's Song", "Chant du Soleil", "Hymne der Sonne" },                                                                          ITEMTYPE_SONG,              0xC4,                 true,  LOGIC_SUNS_SONG,                    RHT_SUNS_SONG,                         ITEM_SONG_SUN,                        OBJECT_GI_MELODY,        GID_SONG_SUN,        0xD3,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SONG_OF_TIME] =                        Item(RG_SONG_OF_TIME,                     Text{ "Song of Time", "Chant du Temps", "Hymne der Zeit" },                                                                          ITEMTYPE_SONG,              0xC5,                 true,  LOGIC_SONG_OF_TIME,                 RHT_SONG_OF_TIME,                      ITEM_SONG_TIME,                       OBJECT_GI_MELODY,        GID_SONG_TIME,       0xD5,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SONG_OF_STORMS] =                      Item(RG_SONG_OF_STORMS,                   Text{ "Song of Storms", "Chant des Tempêtes", "Hymne des Sturms" },                                                                  ITEMTYPE_SONG,              0xC6,                 true,  LOGIC_SONG_OF_STORMS,               RHT_SONG_OF_STORMS,                    ITEM_SONG_STORMS,                     OBJECT_GI_MELODY,        GID_SONG_STORM,      0xD6,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_MINUET_OF_FOREST] =                    Item(RG_MINUET_OF_FOREST,                 Text{ "Minuet of Forest", "Menuet des Bois", "Menuett des Waldes" },                                                                 ITEMTYPE_SONG,              0xBB,                 true,  LOGIC_MINUET_OF_FOREST,             RHT_MINUET_OF_FOREST,                  ITEM_SONG_MINUET,                     OBJECT_GI_MELODY,        GID_SONG_MINUET,     0x73,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BOLERO_OF_FIRE] =                      Item(RG_BOLERO_OF_FIRE,                   Text{ "Bolero of Fire", "Boléro du Feu", "Bolero des Feuers" },                                                                      ITEMTYPE_SONG,              0xBC,                 true,  LOGIC_BOLERO_OF_FIRE,               RHT_BOLERO_OF_FIRE,                    ITEM_SONG_BOLERO,                     OBJECT_GI_MELODY,        GID_SONG_BOLERO,     0x74,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SERENADE_OF_WATER] =                   Item(RG_SERENADE_OF_WATER,                Text{ "Serenade of Water", "Sérénade de l'Eau", "Serenade des Wassers" },                                                            ITEMTYPE_SONG,              0xBD,                 true,  LOGIC_SERENADE_OF_WATER,            RHT_SERENADE_OF_WATER,                 ITEM_SONG_SERENADE,                   OBJECT_GI_MELODY,        GID_SONG_SERENADE,   0x75,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_NOCTURNE_OF_SHADOW] =                  Item(RG_NOCTURNE_OF_SHADOW,               Text{ "Nocturne of Shadow", "Nocturne de l'Ombre", "Nocturne des Schattens" },                                                       ITEMTYPE_SONG,              0xBF,                 true,  LOGIC_NOCTURNE_OF_SHADOW,           RHT_NOCTURNE_OF_SHADOW,                ITEM_SONG_NOCTURNE,                   OBJECT_GI_MELODY,        GID_SONG_NOCTURNE,   0x77,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_REQUIEM_OF_SPIRIT] =                   Item(RG_REQUIEM_OF_SPIRIT,                Text{ "Requiem of Spirit", "Requiem des Esprits", "Requiem der Geister" },                                                           ITEMTYPE_SONG,              0xBE,                 true,  LOGIC_REQUIEM_OF_SPIRIT,            RHT_REQUIEM_OF_SPIRIT,                 ITEM_SONG_REQUIEM,                    OBJECT_GI_MELODY,        GID_SONG_REQUIEM,    0x76,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_PRELUDE_OF_LIGHT] =                    Item(RG_PRELUDE_OF_LIGHT,                 Text{ "Prelude of Light", "Prélude de la Lumière", "Kantate des Lichts" },                                                           ITEMTYPE_SONG,              0xC0,                 true,  LOGIC_PRELUDE_OF_LIGHT,             RHT_PRELUDE_OF_LIGHT,                  ITEM_SONG_PRELUDE,                    OBJECT_GI_MELODY,        GID_SONG_PRELUDE,    0x78,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    // Maps and Compasses
    itemTable[RG_DEKU_TREE_MAP] =                       Item(RG_DEKU_TREE_MAP,                    Text{ "Great Deku Tree Map", "Carte de l'Arbre Mojo", "Karte des Deku-Baums" },                                                      ITEMTYPE_MAP,               0xA5,                 false, LOGIC_MAP_DEKU_TREE,                RHT_DEKU_TREE_MAP,                     RG_DEKU_TREE_MAP,                     OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_DODONGOS_CAVERN_MAP] =                 Item(RG_DODONGOS_CAVERN_MAP,              Text{ "Dodongo's Cavern Map", "Carte de la Caverne Dodongo", "Karte der Dodongo-Höhle" },                                            ITEMTYPE_MAP,               0xA6,                 false, LOGIC_MAP_DODONGOS_CAVERN,          RHT_DODONGOS_CAVERN_MAP,               RG_DODONGOS_CAVERN_MAP,               OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_JABU_JABUS_BELLY_MAP] =                Item(RG_JABU_JABUS_BELLY_MAP,             Text{ "Jabu-Jabu's Belly Map", "Carte du Ventre de Jabu-Jabu", "Karte des Jabu-Jabu-Bauchs" },                                       ITEMTYPE_MAP,               0xA7,                 false, LOGIC_MAP_JABU_JABUS_BELLY,         RHT_JABU_JABUS_BELLY_MAP,              RG_JABU_JABUS_BELLY_MAP,              OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_FOREST_TEMPLE_MAP] =                   Item(RG_FOREST_TEMPLE_MAP,                Text{ "Forest Temple Map", "Carte du Temple de la Forêt", "Karte des Waldtempels" },                                                 ITEMTYPE_MAP,               0xA8,                 false, LOGIC_MAP_FOREST_TEMPLE,            RHT_FOREST_TEMPLE_MAP,                 RG_FOREST_TEMPLE_MAP,                 OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_FIRE_TEMPLE_MAP] =                     Item(RG_FIRE_TEMPLE_MAP,                  Text{ "Fire Temple Map", "Carte due Temple de Feu", "Karte des Feuertempels" },                                                      ITEMTYPE_MAP,               0xA9,                 false, LOGIC_MAP_FIRE_TEMPLE,              RHT_FIRE_TEMPLE_MAP,                   RG_FIRE_TEMPLE_MAP,                   OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_WATER_TEMPLE_MAP] =                    Item(RG_WATER_TEMPLE_MAP,                 Text{ "Water Temple Map", "Carte du Temple de l'Eau", "Karte des Wassertempels" },                                                   ITEMTYPE_MAP,               0xAA,                 false, LOGIC_MAP_WATER_TEMPLE,             RHT_WATER_TEMPLE_MAP,                  RG_WATER_TEMPLE_MAP,                  OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_SPIRIT_TEMPLE_MAP] =                   Item(RG_SPIRIT_TEMPLE_MAP,                Text{ "Spirit Temple Map", "Carte due Temple de l'Esprit", "Karte des Geistertempels" },                                             ITEMTYPE_MAP,               0xAB,                 false, LOGIC_MAP_SPIRIT_TEMPLE,            RHT_SPIRIT_TEMPLE_MAP,                 RG_SPIRIT_TEMPLE_MAP,                 OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_SHADOW_TEMPLE_MAP] =                   Item(RG_SHADOW_TEMPLE_MAP,                Text{ "Shadow Temple Map", "Carte du Temple de l'Ombre", "Karte des Schattentempels" },                                              ITEMTYPE_MAP,               0xAC,                 false, LOGIC_MAP_SHADOW_TEMPLE,            RHT_SHADOW_TEMPLE_MAP,                 RG_SHADOW_TEMPLE_MAP,                 OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_BOTTOM_OF_THE_WELL_MAP] =              Item(RG_BOTTOM_OF_THE_WELL_MAP,           Text{ "Bottom of the Well Map", "Carte du Puits", "Karte des Grund des Brunnens" },                                                  ITEMTYPE_MAP,               0xAD,                 false, LOGIC_MAP_BOTTOM_OF_THE_WELL,       RHT_BOTTOM_OF_THE_WELL_MAP,            RG_BOTTOM_OF_THE_WELL_MAP,            OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_ICE_CAVERN_MAP] =                      Item(RG_ICE_CAVERN_MAP,                   Text{ "Ice Cavern Map", "Carte de la Caverne Polaire", "Karte der Eishöhle" },                                                       ITEMTYPE_MAP,               0xAE,                 false, LOGIC_MAP_ICE_CAVERN,               RHT_ICE_CAVERN_MAP,                    RG_ICE_CAVERN_MAP,                    OBJECT_GI_MAP,           GID_DUNGEON_MAP,     TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_DEKU_TREE_COMPASS] =                   Item(RG_DEKU_TREE_COMPASS,                Text{ "Great Deku Tree Compass", "Boussole de l'Arbre Mojo", "Kompaß des Deku-Baums" },                                              ITEMTYPE_COMPASS,           0x9B,                 false, LOGIC_COMPASS_DEKU_TREE,            RHT_DEKU_TREE_COMPASS,                 RG_DEKU_TREE_COMPASS,                 OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_DUNGEON_MAP,       0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_DEKU_TREE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_DODONGOS_CAVERN_COMPASS] =             Item(RG_DODONGOS_CAVERN_COMPASS,          Text{ "Dodongo's Cavern Compass", "Boussole de la Caverne Dodongo", "Kompaß der Dodongo-Höhle" },                                    ITEMTYPE_COMPASS,           0x9C,                 false, LOGIC_COMPASS_DODONGOS_CAVERN,      RHT_DODONGOS_CAVERN_COMPASS,           RG_DODONGOS_CAVERN_COMPASS,           OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_DODONGOS_CAVERN_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_JABU_JABUS_BELLY_COMPASS] =            Item(RG_JABU_JABUS_BELLY_COMPASS,         Text{ "Jabu-Jabu's Belly Compass", "Boussole du Ventre de Jabu-Jabu", "Kompaß des Jabu-Jabu-Bauchs" },                               ITEMTYPE_COMPASS,           0x9D,                 false, LOGIC_COMPASS_JABU_JABUS_BELLY,     RHT_JABU_JABUS_BELLY_COMPASS,          RG_JABU_JABUS_BELLY_COMPASS,          OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_JABU_JABUS_BELLY_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_FOREST_TEMPLE_COMPASS] =               Item(RG_FOREST_TEMPLE_COMPASS,            Text{ "Forest Temple Compass", "Boussole du Temple de la Forêt", "Kompaß des Waldtempels" },                                         ITEMTYPE_COMPASS,           0x9E,                 false, LOGIC_COMPASS_FOREST_TEMPLE,        RHT_FOREST_TEMPLE_COMPASS,             RG_FOREST_TEMPLE_COMPASS,             OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_FOREST_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_FIRE_TEMPLE_COMPASS] =                 Item(RG_FIRE_TEMPLE_COMPASS,              Text{ "Fire Temple Compass", "Boussole du Temple du Feu", "Kompaß des Feuertempels" },                                               ITEMTYPE_COMPASS,           0x9F,                 false, LOGIC_COMPASS_FIRE_TEMPLE,          RHT_FIRE_TEMPLE_COMPASS,               RG_FIRE_TEMPLE_COMPASS,               OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_FIRE_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_WATER_TEMPLE_COMPASS] =                Item(RG_WATER_TEMPLE_COMPASS,             Text{ "Water Temple Compass", "Boussole du Temple de l'Eau", "Kompaß des Wassertempels" },                                           ITEMTYPE_COMPASS,           0xA0,                 false, LOGIC_COMPASS_WATER_TEMPLE,         RHT_WATER_TEMPLE_COMPASS,              RG_WATER_TEMPLE_COMPASS,              OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_WATER_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_SPIRIT_TEMPLE_COMPASS] =               Item(RG_SPIRIT_TEMPLE_COMPASS,            Text{ "Spirit Temple Compass", "Boussole due Temple de l'Esprit", "Kompaß des Geistertempels" },                                     ITEMTYPE_COMPASS,           0xA1,                 false, LOGIC_COMPASS_SPIRIT_TEMPLE,        RHT_SPIRIT_TEMPLE_COMPASS,             RG_SPIRIT_TEMPLE_COMPASS,             OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_SPIRIT_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_SHADOW_TEMPLE_COMPASS] =               Item(RG_SHADOW_TEMPLE_COMPASS,            Text{ "Shadow Temple Compass", "Boussole du Temple de l'Ombre", "Kompaß des Schattentempels" },                                      ITEMTYPE_COMPASS,           0xA2,                 false, LOGIC_COMPASS_SHADOW_TEMPLE,        RHT_SHADOW_TEMPLE_COMPASS,             RG_SHADOW_TEMPLE_COMPASS,             OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_SHADOW_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_BOTTOM_OF_THE_WELL_COMPASS] =          Item(RG_BOTTOM_OF_THE_WELL_COMPASS,       Text{ "Bottom of the Well Compass", "Boussole du Puits", "Kompaß des Grund des Brunnens" },                                          ITEMTYPE_COMPASS,           0xA3,                 false, LOGIC_COMPASS_BOTTOM_OF_THE_WELL,   RHT_BOTTOM_OF_THE_WELL_COMPASS,        RG_BOTTOM_OF_THE_WELL_COMPASS,        OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_BOTTOM_OF_THE_WELL_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);
    itemTable[RG_ICE_CAVERN_COMPASS] =                  Item(RG_ICE_CAVERN_COMPASS,               Text{ "Ice Cavern Compass", "Boussole de la Caverne Polaire", "Kompaß der Eishöhle" },                                               ITEMTYPE_COMPASS,           0xA4,                 false, LOGIC_COMPASS_ICE_CAVERN,           RHT_ICE_CAVERN_COMPASS,                RG_ICE_CAVERN_COMPASS,                OBJECT_GI_COMPASS,       GID_COMPASS,         TEXT_ITEM_COMPASS,           0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_ICE_CAVERN_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass);          
    // Boss Keys
    itemTable[RG_FOREST_TEMPLE_BOSS_KEY] =              Item(RG_FOREST_TEMPLE_BOSS_KEY,           Text{ "Forest Temple Boss Key", "Clé d'Or du Temple de la Forêt", "Master-Schlüssel des Waldtempels" },                              ITEMTYPE_BOSSKEY,           0x95,                 true,  LOGIC_BOSS_KEY_FOREST_TEMPLE,       RHT_FOREST_TEMPLE_BOSS_KEY,            RG_FOREST_TEMPLE_BOSS_KEY,            OBJECT_GI_BOSSKEY,       GID_KEY_BOSS,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER);
    itemTable[RG_FOREST_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey);
    itemTable[RG_FIRE_TEMPLE_BOSS_KEY] =                Item(RG_FIRE_TEMPLE_BOSS_KEY,             Text{ "Fire Temple Boss Key", "Clé d'Or du Temple du Feu", "Master-Schlüssel des Feuertempels" },                                    ITEMTYPE_BOSSKEY,           0x96,                 true,  LOGIC_BOSS_KEY_FIRE_TEMPLE,         RHT_FIRE_TEMPLE_BOSS_KEY,              RG_FIRE_TEMPLE_BOSS_KEY,              OBJECT_GI_BOSSKEY,       GID_KEY_BOSS,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER);
    itemTable[RG_FIRE_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey);
    itemTable[RG_WATER_TEMPLE_BOSS_KEY] =               Item(RG_WATER_TEMPLE_BOSS_KEY,            Text{ "Water Temple Boss Key", "Clé d'Or du Temple de l'Eau", "Master-Schlüssel des Wassertempels" },                                ITEMTYPE_BOSSKEY,           0x97,                 true,  LOGIC_BOSS_KEY_WATER_TEMPLE,        RHT_WATER_TEMPLE_BOSS_KEY,             RG_WATER_TEMPLE_BOSS_KEY,             OBJECT_GI_BOSSKEY,       GID_KEY_BOSS,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER);
    itemTable[RG_WATER_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey);
    itemTable[RG_SPIRIT_TEMPLE_BOSS_KEY] =              Item(RG_SPIRIT_TEMPLE_BOSS_KEY,           Text{ "Spirit Temple Boss Key", "Clé d'Or du Temple de l'Esprit", "Master-Schlüssel des Geistertempels" },                           ITEMTYPE_BOSSKEY,           0x98,                 true,  LOGIC_BOSS_KEY_SPIRIT_TEMPLE,       RHT_SPIRIT_TEMPLE_BOSS_KEY,            RG_SPIRIT_TEMPLE_BOSS_KEY,            OBJECT_GI_BOSSKEY,       GID_KEY_BOSS,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER);
    itemTable[RG_SPIRIT_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey);
    itemTable[RG_SHADOW_TEMPLE_BOSS_KEY] =              Item( RG_SHADOW_TEMPLE_BOSS_KEY,          Text{ "Shadow Temple Boss Key", "Clé d'Or du Temple de l'Ombre", "Master-Schlüssel des Schattentempels" },                           ITEMTYPE_BOSSKEY,           0x99,                 true,  LOGIC_BOSS_KEY_SHADOW_TEMPLE,       RHT_SHADOW_TEMPLE_BOSS_KEY,            RG_SHADOW_TEMPLE_BOSS_KEY,            OBJECT_GI_BOSSKEY,       GID_KEY_BOSS,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER);
    itemTable[RG_SHADOW_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey);
    itemTable[RG_GANONS_CASTLE_BOSS_KEY] =              Item(RG_GANONS_CASTLE_BOSS_KEY,           Text{ "Ganon's Castle Boss Key", "Clé d'Or du Château de Ganon", "Master-Schlüssel von Ganons Schloß" },                             ITEMTYPE_BOSSKEY,           0x9A,                 true,  LOGIC_BOSS_KEY_GANONS_CASTLE,       RHT_GANONS_CASTLE_BOSS_KEY,            RG_GANONS_CASTLE_BOSS_KEY,            OBJECT_GI_BOSSKEY,       GID_KEY_BOSS,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER);
    itemTable[RG_GANONS_CASTLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey);
    itemTable[RG_FOREST_TEMPLE_SMALL_KEY] =             Item(RG_FOREST_TEMPLE_SMALL_KEY,          Text{ "Forest Temple Small Key", "Petite Clé du Temple de la Forêt", "Kleiner Schlüssel für den Waldtempel" },                       ITEMTYPE_SMALLKEY,          0xAF,                 true,  LOGIC_FOREST_TEMPLE_KEYS,           RHT_FOREST_TEMPLE_SMALL_KEY,           RG_FOREST_TEMPLE_SMALL_KEY,           OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_FOREST_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_FIRE_TEMPLE_SMALL_KEY] =               Item(RG_FIRE_TEMPLE_SMALL_KEY,            Text{ "Fire Temple Small Key", "Petite Clé du Temple du Feu", "Kleiner Schlüssel für den Feuertempel" },                             ITEMTYPE_SMALLKEY,          0xB0,                 true,  LOGIC_FIRE_TEMPLE_KEYS,             RHT_FIRE_TEMPLE_SMALL_KEY,             RG_FIRE_TEMPLE_SMALL_KEY,             OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_FIRE_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_WATER_TEMPLE_SMALL_KEY] =              Item(RG_WATER_TEMPLE_SMALL_KEY,           Text{ "Water Temple Small Key", "Petite Clé du Temple de l'Eau", "Kleiner Schlüssel für den Wassertempel" },                         ITEMTYPE_SMALLKEY,          0xB1,                 true,  LOGIC_WATER_TEMPLE_KEYS,            RHT_WATER_TEMPLE_SMALL_KEY,            RG_WATER_TEMPLE_SMALL_KEY,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_WATER_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_SPIRIT_TEMPLE_SMALL_KEY] =             Item(RG_SPIRIT_TEMPLE_SMALL_KEY,          Text{ "Spirit Temple Small Key", "Petite Clé du Temple de l'Esprit", "Kleiner Schlüssel für den Geistertempel" },                    ITEMTYPE_SMALLKEY,          0xB2,                 true,  LOGIC_SPIRIT_TEMPLE_KEYS,           RHT_SPIRIT_TEMPLE_SMALL_KEY,           RG_SPIRIT_TEMPLE_SMALL_KEY,           OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_SPIRIT_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_SHADOW_TEMPLE_SMALL_KEY] =             Item(RG_SHADOW_TEMPLE_SMALL_KEY,          Text{ "Shadow Temple Small Key", "Petite Clé du Temple de l'Ombre", "Kleiner Schlüssel für den Schattentempel" },                    ITEMTYPE_SMALLKEY,          0xB3,                 true,  LOGIC_SHADOW_TEMPLE_KEYS,           RHT_SHADOW_TEMPLE_SMALL_KEY,           RG_SHADOW_TEMPLE_SMALL_KEY,           OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_SHADOW_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_BOTTOM_OF_THE_WELL_SMALL_KEY] =        Item(RG_BOTTOM_OF_THE_WELL_SMALL_KEY,     Text{ "Bottom of the Well Small Key", "Petite Clé du Puits", "Kleiner Schlüssel für den Grund des Brunnens" },                       ITEMTYPE_SMALLKEY,          0xB4,                 true,  LOGIC_BOTTOM_OF_THE_WELL_KEYS,      RHT_BOTTOM_OF_THE_WELL_SMALL_KEY,      RG_BOTTOM_OF_THE_WELL_SMALL_KEY,      OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_BOTTOM_OF_THE_WELL_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_GERUDO_TRAINING_GROUND_SMALL_KEY] =   Item(RG_GERUDO_TRAINING_GROUND_SMALL_KEY,  Text{ "Training Ground Small Key", "Petite Clé du Gymnase Gerudo", "Kleiner Schlüssel für das Gerudo-Trainingsgelände" },            ITEMTYPE_SMALLKEY,          0xB5,                 true,  LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_SMALL_KEY, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GERUDO_TRAINING_GROUND_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_GERUDO_FORTRESS_SMALL_KEY] =           Item(RG_GERUDO_FORTRESS_SMALL_KEY,        Text{ "Gerudo Fortress Small Key", "Petite Clé du Repaire des Voleurs", "Kleiner Schlüssel für die Gerudo-Festung" },                ITEMTYPE_FORTRESS_SMALLKEY, 0xB6,                 true,  LOGIC_GERUDO_FORTRESS_KEYS,         RHT_GERUDO_FORTRESS_SMALL_KEY,         RG_GERUDO_FORTRESS_SMALL_KEY,         OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GERUDO_FORTRESS_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);
    itemTable[RG_GANONS_CASTLE_SMALL_KEY] =             Item(RG_GANONS_CASTLE_SMALL_KEY,          Text{ "Ganon's Castle Small Key", "Petite Clé du Château de Ganon", "Kleiner Schlüssel für Ganons Schloß" },                         ITEMTYPE_SMALLKEY,          0xB7,                 true,  LOGIC_GANONS_CASTLE_KEYS,           RHT_GANONS_CASTLE_SMALL_KEY,           RG_GANONS_CASTLE_SMALL_KEY,           OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GANONS_CASTLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey);      
    itemTable[RG_TREASURE_GAME_SMALL_KEY] =             Item(RG_TREASURE_GAME_SMALL_KEY,          Text{ "Chest Game Small Key", "Petite Clé du jeu la Chasse-aux-Trésors", "Kleiner Schlüssel für das Truhenspiel" },                  ITEMTYPE_SMALLKEY,          GI_DOOR_KEY,          true,  LOGIC_TREASURE_GAME_KEYS,           RHT_TREASURE_GAME_SMALL_KEY,           ITEM_KEY_SMALL,                       OBJECT_GI_KEY,           GID_KEY_SMALL,       0xF3,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_NONE);
    itemTable[RG_GUARD_HOUSE_KEY] =                     Item(RG_GUARD_HOUSE_KEY,                  Text{ "Guard House Key", "", "Schlüssel für das Haus der Wachen" },                                                                  ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_GUARD_HOUSE_KEY,              RHT_OVERWORLD_KEY,                     RG_GUARD_HOUSE_KEY,                   OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GUARD_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_MARKET_BAZAAR_KEY] =                   Item(RG_MARKET_BAZAAR_KEY,                Text{ "Market Bazaar Key", "", "Schlüssel für den Basar des Marktes" },                                                              ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_MARKET_BAZAAR_KEY,            RHT_OVERWORLD_KEY,                     RG_MARKET_BAZAAR_KEY,                 OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_MARKET_BAZAAR_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_MARKET_POTION_SHOP_KEY] =              Item(RG_MARKET_POTION_SHOP_KEY,           Text{ "Market Potion Shop Key", "", "Schlüssel für den Magie-Laden des Marktes" },                                                   ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_MARKET_POTION_SHOP_KEY,       RHT_OVERWORLD_KEY,                     RG_MARKET_POTION_SHOP_KEY,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_MARKET_POTION_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_MASK_SHOP_KEY] =                       Item(RG_MASK_SHOP_KEY,                    Text{ "Mask Shop Key", "", "Schlüssel für den Maskenladen" },                                                                        ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_MASK_SHOP_KEY,                RHT_OVERWORLD_KEY,                     RG_MASK_SHOP_KEY,                     OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_MASK_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_MARKET_SHOOTING_GALLERY_KEY] =         Item(RG_MARKET_SHOOTING_GALLERY_KEY,      Text{ "Market Shooting Gallery Key", "", "Schlüssel für die Schießbude des Marktes" },                                               ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_MARKET_SHOOTING_GALLERY_KEY,  RHT_OVERWORLD_KEY,                     RG_MARKET_SHOOTING_GALLERY_KEY,       OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_MARKET_SHOOTING_GALLERY_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_BOMBCHU_BOWLING_KEY] =                 Item(RG_BOMBCHU_BOWLING_KEY,              Text{ "Bombchu Bowling Alley Key", "", "Schlüssel für die Minenbowlingbahn" },                                                       ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_BOMBCHU_BOWLING_KEY,          RHT_OVERWORLD_KEY,                     RG_BOMBCHU_BOWLING_KEY,               OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_BOMBCHU_BOWLING_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_TREASURE_CHEST_GAME_BUILDING_KEY] =    Item(RG_TREASURE_CHEST_GAME_BUILDING_KEY, Text{ "Treasure Chest Game Building Key", "", "Schlüssel für das Haus des Schatzkisten-Pokers" },                                    ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_TREASURE_CHEST_GAME_BUILDING_KEY,RHT_OVERWORLD_KEY,                  RG_TREASURE_CHEST_GAME_BUILDING_KEY,  OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_TREASURE_CHEST_GAME_BUILDING_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_BOMBCHU_SHOP_KEY] =                    Item(RG_BOMBCHU_SHOP_KEY,                 Text{ "Bombchu Shop Key", "", "Schlüssel für den Krabbelminenladen" },                                                               ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_BOMBCHU_SHOP_KEY,             RHT_OVERWORLD_KEY,                     RG_BOMBCHU_SHOP_KEY,                  OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_BOMBCHU_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_RICHARDS_HOUSE_KEY] =                  Item(RG_RICHARDS_HOUSE_KEY,               Text{ "Richard's House Key", "", "Schlüssel für das Haus von Richard" },                                                             ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_RICHARDS_HOUSE_KEY,           RHT_OVERWORLD_KEY,                     RG_RICHARDS_HOUSE_KEY,                OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_RICHARDS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_ALLEY_HOUSE_KEY] =                     Item(RG_ALLEY_HOUSE_KEY,                  Text{ "Alley House Key", "", "Schlüssel für das Gäßchenhaus" },                                                                      ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_ALLEY_HOUSE_KEY,              RHT_OVERWORLD_KEY,                     RG_ALLEY_HOUSE_KEY,                   OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_ALLEY_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_KAK_BAZAAR_KEY] =                      Item(RG_KAK_BAZAAR_KEY,                   Text{ "Kakariko Bazaar Key", "", "Schlüssel für den Basar von Kakariko" },                                                           ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_KAK_BAZAAR_KEY,               RHT_OVERWORLD_KEY,                     RG_KAK_BAZAAR_KEY,                    OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_KAK_BAZAAR_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_KAK_POTION_SHOP_KEY] =                 Item(RG_KAK_POTION_SHOP_KEY,              Text{ "Kakariko Potion Shop Key", "", "Schlüssel für den Magie-Laden von Kakariko" },                                                ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_KAK_POTION_SHOP_KEY,          RHT_OVERWORLD_KEY,                     RG_KAK_POTION_SHOP_KEY,               OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_KAK_POTION_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_BOSS_HOUSE_KEY] =                      Item(RG_BOSS_HOUSE_KEY,                   Text{ "Boss's House Key", "", "Schlüssel für das Haus des Chefs" },                                                                  ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_BOSS_HOUSE_KEY,               RHT_OVERWORLD_KEY,                     RG_BOSS_HOUSE_KEY,                    OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_BOSS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_GRANNYS_POTION_SHOP_KEY] =             Item(RG_GRANNYS_POTION_SHOP_KEY,          Text{ "Granny's Potion Shop Key", "", "Schlüssel für Asas Hexenladen" },                                                             ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_GRANNYS_POTION_SHOP_KEY,      RHT_OVERWORLD_KEY,                     RG_GRANNYS_POTION_SHOP_KEY,           OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GRANNYS_POTION_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_SKULLTULA_HOUSE_KEY] =                 Item(RG_SKULLTULA_HOUSE_KEY,              Text{ "Skulltula House Key", "", "Schlüssel für das Skulltula-Haus" },                                                               ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_SKULLTULA_HOUSE_KEY,          RHT_OVERWORLD_KEY,                     RG_SKULLTULA_HOUSE_KEY,               OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_SKULLTULA_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_IMPAS_HOUSE_KEY] =                     Item(RG_IMPAS_HOUSE_KEY,                  Text{ "Impa's House Key", "", "Schlüssel für das Haus von Impa" },                                                                   ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_IMPAS_HOUSE_KEY,              RHT_OVERWORLD_KEY,                     RG_IMPAS_HOUSE_KEY,                   OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_IMPAS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_WINDMILL_KEY] =                        Item(RG_WINDMILL_KEY,                     Text{ "Windmill Key", "", "Schlüssel für die Windmühle" },                                                                           ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_WINDMILL_KEY,                 RHT_OVERWORLD_KEY,                     RG_WINDMILL_KEY,                      OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_WINDMILL_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_KAK_SHOOTING_GALLERY_KEY] =            Item(RG_KAK_SHOOTING_GALLERY_KEY,         Text{ "Kakariko Shooting Gallery Key", "", "Schlüssel für die Schießbude von Kakariko" },                                            ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_KAK_SHOOTING_GALLERY_KEY,     RHT_OVERWORLD_KEY,                     RG_KAK_SHOOTING_GALLERY_KEY,          OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_KAK_SHOOTING_GALLERY_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_DAMPES_HUT_KEY] =                      Item(RG_DAMPES_HUT_KEY,                   Text{ "Dampe's Hut Key", "", "Schlüssel für die Hütte von Boris" },                                                                  ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_DAMPES_HUT_KEY,               RHT_OVERWORLD_KEY,                     RG_DAMPES_HUT_KEY,                    OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_DAMPES_HUT_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_TALONS_HOUSE_KEY] =                    Item(RG_TALONS_HOUSE_KEY,                 Text{ "Talon's House Key", "", "Schlüssel für das Haus von Talon" },                                                                 ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_TALONS_HOUSE_KEY,             RHT_OVERWORLD_KEY,                     RG_TALONS_HOUSE_KEY,                  OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_TALONS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_STABLES_KEY] =                         Item(RG_STABLES_KEY,                      Text{ "Stables Key", "", "Schlüssel für die Ställe" },                                                                               ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_STABLES_KEY,                  RHT_OVERWORLD_KEY,                     RG_STABLES_KEY,                       OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_STABLES_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_BACK_TOWER_KEY] =                      Item(RG_BACK_TOWER_KEY,                   Text{ "Back Tower Key", "", "Schlüssel für den hinteren Turm" },                                                                     ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_BACK_TOWER_KEY,               RHT_OVERWORLD_KEY,                     RG_BACK_TOWER_KEY,                    OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_BACK_TOWER_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_HYLIA_LAB_KEY] =                       Item(RG_HYLIA_LAB_KEY,                    Text{ "Hylia Laboratory Key", "", "Schlüssel für das Hylia-Labor" },                                                                 ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_HYLIA_LAB_KEY,                RHT_OVERWORLD_KEY,                     RG_HYLIA_LAB_KEY,                     OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_HYLIA_LAB_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    itemTable[RG_FISHING_HOLE_KEY] =                    Item(RG_FISHING_HOLE_KEY,                 Text{ "Fishing Hole Key", "", "Schlüssel für den Fischweiher" },                                                                     ITEMTYPE_ITEM,              GI_DOOR_KEY,          true,  LOGIC_FISHING_HOLE_KEY,             RHT_OVERWORLD_KEY,                     RG_FISHING_HOLE_KEY,                  OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_FISHING_HOLE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey);
    // Key Rings
    itemTable[RG_FOREST_TEMPLE_KEY_RING] =              Item(RG_FOREST_TEMPLE_KEY_RING,           Text{ "Forest Temple Key Ring", "Trousseau du Temple de la Forêt", "Schlüsselbund für den Waldtempel" },                             ITEMTYPE_SMALLKEY,          0xD5,                 true,  LOGIC_FOREST_TEMPLE_KEYS,           RHT_FOREST_TEMPLE_KEY_RING,            RG_FOREST_TEMPLE_KEY_RING,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_FOREST_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_FIRE_TEMPLE_KEY_RING] =                Item(RG_FIRE_TEMPLE_KEY_RING,             Text{ "Fire Temple Key Ring", "Trousseau du Temple du Feu", "Schlüsselbund für den Feuertempel" },                                   ITEMTYPE_SMALLKEY,          0xD6,                 true,  LOGIC_FIRE_TEMPLE_KEYS,             RHT_FIRE_TEMPLE_KEY_RING,              RG_FIRE_TEMPLE_KEY_RING,              OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_FIRE_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_WATER_TEMPLE_KEY_RING] =               Item(RG_WATER_TEMPLE_KEY_RING,            Text{ "Water Temple Key Ring", "Trousseau du Temple de l'Eau", "Schlüsselbund für den Wassertempel" },                               ITEMTYPE_SMALLKEY,          0xD7,                 true,  LOGIC_WATER_TEMPLE_KEYS,            RHT_WATER_TEMPLE_KEY_RING,             RG_WATER_TEMPLE_KEY_RING,             OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_WATER_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_SPIRIT_TEMPLE_KEY_RING] =              Item(RG_SPIRIT_TEMPLE_KEY_RING,           Text{ "Spirit Temple Key Ring", "Trousseau du Temple de l'Esprit", "Schlüsselbund für den Geistertempel" },                          ITEMTYPE_SMALLKEY,          0xD8,                 true,  LOGIC_SPIRIT_TEMPLE_KEYS,           RHT_SPIRIT_TEMPLE_KEY_RING,            RG_SPIRIT_TEMPLE_KEY_RING,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_SPIRIT_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); 
    itemTable[RG_SHADOW_TEMPLE_KEY_RING] =              Item(RG_SHADOW_TEMPLE_KEY_RING,           Text{ "Shadow Temple Key Ring", "Trousseau du Temple de l'Ombre", "Schlüsselbund für den Schattentempel" },                          ITEMTYPE_SMALLKEY,          0xD9,                 true,  LOGIC_SHADOW_TEMPLE_KEYS,           RHT_SHADOW_TEMPLE_KEY_RING,            RG_SHADOW_TEMPLE_KEY_RING,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_SHADOW_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING] =         Item(RG_BOTTOM_OF_THE_WELL_KEY_RING,      Text{ "Bottom of the Well Key Ring", "Trousseau du Puits", "Schlüsselbund für den Grund des Brunnens" },                             ITEMTYPE_SMALLKEY,          0xDA,                 true,  LOGIC_BOTTOM_OF_THE_WELL_KEYS,      RHT_BOTTOM_OF_THE_WELL_KEY_RING,       RG_BOTTOM_OF_THE_WELL_KEY_RING,       OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING] =    Item(RG_GERUDO_TRAINING_GROUND_KEY_RING,   Text{ "Training Ground Key Ring", "Trousseau du Gymnase Gerudo", "Schlüsselbund für das Gerudo-Trainingsgelände" },                 ITEMTYPE_SMALLKEY,          0xDB,                 true,  LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_KEY_RING,  RG_GERUDO_TRAINING_GROUND_KEY_RING,  OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_GERUDO_FORTRESS_KEY_RING] =            Item(RG_GERUDO_FORTRESS_KEY_RING,         Text{ "Gerudo Fortress Key Ring", "Trousseau du Repaire des Voleurs", "Schlüsselbund für die Gerudo-Festung" },                      ITEMTYPE_FORTRESS_SMALLKEY, 0xDC,                 true,  LOGIC_GERUDO_FORTRESS_KEYS,         RHT_GERUDO_FORTRESS_KEY_RING,          RG_GERUDO_FORTRESS_KEY_RING,          OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GERUDO_FORTRESS_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_GANONS_CASTLE_KEY_RING] =              Item(RG_GANONS_CASTLE_KEY_RING,           Text{ "Ganon's Castle Key Ring", "Trousseau du Château de Ganon", "Schlüsselbund für Ganons Schloß" },                               ITEMTYPE_SMALLKEY,          0xDD,                 true,  LOGIC_GANONS_CASTLE_KEYS,           RHT_GANONS_CASTLE_KEY_RING,            RG_GANONS_CASTLE_KEY_RING,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_GANONS_CASTLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    itemTable[RG_TREASURE_GAME_KEY_RING] =              Item(RG_TREASURE_GAME_KEY_RING,           Text{ "Chest Game Key Ring", "Trousseau du jeu la Chasse-aux-Trésors", "Schlüsselbund für das Truhenspiel" },                        ITEMTYPE_SMALLKEY,          0xDE,                 true,  LOGIC_TREASURE_GAME_KEYS,           RHT_TREASURE_GAME_KEY_RING,            RG_TREASURE_GAME_KEY_RING,            OBJECT_GI_KEY,           GID_KEY_SMALL,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER);
    itemTable[RG_TREASURE_GAME_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing);
    // Dungeon Rewards
    itemTable[RG_KOKIRI_EMERALD] =                      Item(RG_KOKIRI_EMERALD,                   Text{ "Kokiri's Emerald", "Émeraude Kokiri", "Kokiri-Smaragd" },                                                                     ITEMTYPE_DUNGEONREWARD,     0xCB,                 true,  LOGIC_KOKIRI_EMERALD,               RHT_KOKIRI_EMERALD,                    ITEM_KOKIRI_EMERALD,                  OBJECT_GI_JEWEL,        GID_KOKIRI_EMERALD,   0x80,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_GORON_RUBY] =                          Item(RG_GORON_RUBY,                       Text{ "Goron's Ruby", "Rubis Goron", "Goronen-Rubin" },                                                                              ITEMTYPE_DUNGEONREWARD,     0xCC,                 true,  LOGIC_GORON_RUBY,                   RHT_GORON_RUBY,                        ITEM_GORON_RUBY,                      OBJECT_GI_JEWEL,        GID_GORON_RUBY,       0x81,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_ZORA_SAPPHIRE] =                       Item(RG_ZORA_SAPPHIRE,                    Text{ "Zora's Sapphire", "Saphir Zora", "Zora-Saphir" },                                                                             ITEMTYPE_DUNGEONREWARD,     0xCD,                 true,  LOGIC_ZORA_SAPPHIRE,                RHT_ZORA_SAPPHIRE,                     ITEM_ZORA_SAPPHIRE,                   OBJECT_GI_JEWEL,        GID_ZORA_SAPPHIRE,    0x82,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_FOREST_MEDALLION] =                    Item(RG_FOREST_MEDALLION,                 Text{ "Forest Medallion", "Médaillon de la Forêt", "Amulett des Waldes" },                                                           ITEMTYPE_DUNGEONREWARD,     0xCE,                 true,  LOGIC_FOREST_MEDALLION,             RHT_FOREST_MEDALLION,                  ITEM_MEDALLION_FOREST,                OBJECT_GI_MEDAL,        GID_MEDALLION_FOREST, 0x3E,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_FIRE_MEDALLION] =                      Item(RG_FIRE_MEDALLION,                   Text{ "Fire Medallion", "Médaillon du Feu", "Amulett des Feuers" },                                                                  ITEMTYPE_DUNGEONREWARD,     0xCF,                 true,  LOGIC_FIRE_MEDALLION,               RHT_FIRE_MEDALLION,                    ITEM_MEDALLION_FIRE,                  OBJECT_GI_MEDAL,        GID_MEDALLION_FIRE,   0x3C,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_WATER_MEDALLION] =                     Item(RG_WATER_MEDALLION,                  Text{ "Water Medallion", "Médaillon de l'Eau", "Amulett des Wassers" },                                                              ITEMTYPE_DUNGEONREWARD,     0xD0,                 true,  LOGIC_WATER_MEDALLION,              RHT_WATER_MEDALLION,                   ITEM_MEDALLION_WATER,                 OBJECT_GI_MEDAL,        GID_MEDALLION_WATER,  0x3D,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SPIRIT_MEDALLION] =                    Item(RG_SPIRIT_MEDALLION,                 Text{ "Spirit Medallion", "Médaillon de l'Esprit", "Amulett der Geister" },                                                          ITEMTYPE_DUNGEONREWARD,     0xD1,                 true,  LOGIC_SPIRIT_MEDALLION,             RHT_SPIRIT_MEDALLION,                  ITEM_MEDALLION_SPIRIT,                OBJECT_GI_MEDAL,        GID_MEDALLION_SPIRIT, 0x3F,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SHADOW_MEDALLION] =                    Item(RG_SHADOW_MEDALLION,                 Text{ "Shadow Medallion", "Médaillon de l'Ombre", "Amulett des Schattens" },                                                         ITEMTYPE_DUNGEONREWARD,     0xD2,                 true,  LOGIC_SHADOW_MEDALLION,             RHT_SHADOW_MEDALLION,                  ITEM_MEDALLION_SHADOW,                OBJECT_GI_MEDAL,        GID_MEDALLION_SHADOW, 0x41,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_LIGHT_MEDALLION] =                     Item(RG_LIGHT_MEDALLION,                  Text{ "Light Medallion", "Médaillon de la Lumière", "Amulett des Lichts" },                                                          ITEMTYPE_DUNGEONREWARD,     0xD3,                 true,  LOGIC_LIGHT_MEDALLION,              RHT_LIGHT_MEDALLION,                   ITEM_MEDALLION_LIGHT,                 OBJECT_GI_MEDAL,        GID_MEDALLION_LIGHT,  0x40,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    // Generic Items
    itemTable[RG_RECOVERY_HEART] =                      Item(RG_RECOVERY_HEART,                   Text{ "Recovery Heart", "Coeur de Vie", "Herz" },                                                                                    ITEMTYPE_ITEM,              GI_HEART,             false, LOGIC_NONE,                         RHT_RECOVERY_HEART,                    ITEM_HEART,                           OBJECT_GI_HEART,        GID_HEART,            0x55,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_GREEN_RUPEE] =                         Item(RG_GREEN_RUPEE,                      Text{ "Green Rupee", "Rubis Vert", "Grüner Rubin" },                                                                                 ITEMTYPE_ITEM,              GI_RUPEE_GREEN,       false, LOGIC_NONE,                         RHT_GREEN_RUPEE,                       ITEM_RUPEE_GREEN,                     OBJECT_GI_RUPY,         GID_RUPEE_GREEN,      0x6F,                        0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_GREG_RUPEE] =                          Item(RG_GREG_RUPEE,                       Text{ "Greg the Green Rupee", "Rubis Greg", "Greg Rubin" },                                                                          ITEMTYPE_ITEM,              GI_RUPEE_GREEN,       true,  LOGIC_GREG,                         RHT_GREG_RUPEE,                        RG_GREG_RUPEE,                        OBJECT_GI_RUPY,         GID_RUPEE_GREEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BLUE_RUPEE] =                          Item(RG_BLUE_RUPEE,                       Text{ "Blue Rupee", "Rubis Bleu", "Blauer Rubin" },                                                                                  ITEMTYPE_ITEM,              GI_RUPEE_BLUE,        false, LOGIC_NONE,                         RHT_BLUE_RUPEE,                        ITEM_RUPEE_BLUE,                      OBJECT_GI_RUPY,         GID_RUPEE_BLUE,       0xCC,                        0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_RED_RUPEE] =                           Item(RG_RED_RUPEE,                        Text{ "Red Rupee", "Rubis Rouge", "Roter Rubin" },                                                                                   ITEMTYPE_ITEM,              GI_RUPEE_RED,         false, LOGIC_NONE,                         RHT_RED_RUPEE,                         ITEM_RUPEE_RED,                       OBJECT_GI_RUPY,         GID_RUPEE_RED,        0xF0,                        0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_PURPLE_RUPEE] =                        Item(RG_PURPLE_RUPEE,                     Text{ "Purple Rupee", "Rubis Pourpre", "Violetter Rubin" },                                                                          ITEMTYPE_ITEM,              GI_RUPEE_PURPLE,      false, LOGIC_NONE,                         RHT_PURPLE_RUPEE,                      ITEM_RUPEE_PURPLE,                    OBJECT_GI_RUPY,         GID_RUPEE_PURPLE,     0xF1,                        0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_HUGE_RUPEE] =                          Item(RG_HUGE_RUPEE,                       Text{ "Huge Rupee", "Énorme Rubis", "Riesiger Rubin" },                                                                              ITEMTYPE_ITEM,              GI_RUPEE_GOLD,        false, LOGIC_NONE,                         RHT_HUGE_RUPEE,                        ITEM_RUPEE_GOLD,                      OBJECT_GI_RUPY,         GID_RUPEE_GOLD,       0xF2,                        0x13, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_PIECE_OF_HEART] =                      Item(RG_PIECE_OF_HEART,                   Text{ "Piece of Heart", "Quart de Coeur", "Herzstück" },                                                                             ITEMTYPE_ITEM,              GI_HEART_PIECE,       true,  LOGIC_PIECE_OF_HEART,               RHT_PIECE_OF_HEART,                    ITEM_HEART_PIECE_2,                   OBJECT_GI_HEARTS,       GID_HEART_PIECE,      0xC2,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_HEART_CONTAINER] =                     Item(RG_HEART_CONTAINER,                  Text{ "Heart Container", "Réceptacle de Coeur", "Herzcontainer" },                                                                   ITEMTYPE_ITEM,              GI_HEART_CONTAINER_2, true,  LOGIC_HEART_CONTAINER,              RHT_HEART_CONTAINER,                   ITEM_HEART_CONTAINER,                 OBJECT_GI_HEARTS,       GID_HEART_CONTAINER,  0xC6,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_ICE_TRAP] =                            Item(RG_ICE_TRAP,                         Text{ "Ice Trap", "Piège de Glace", "Eisfalle" },                                                                                    ITEMTYPE_ITEM,              RG_ICE_TRAP,          false, LOGIC_NONE,                         RHT_ICE_TRAP,                          RG_ICE_TRAP,                          OBJECT_GI_RUPY,         GID_RUPEE_GOLD,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_MILK] =                                Item(RG_MILK,                             Text{ "Milk", "Lait", "Milch" },                                                                                                     ITEMTYPE_ITEM,              GI_MILK,              false, LOGIC_NONE,                         RHT_NONE,                              ITEM_MILK,                            OBJECT_GI_MILK,         GID_MILK,             0x98,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_FISH] =                                Item(RG_FISH,                             Text{ "Fish", "Poisson", "Fisch" },                                                                                                  ITEMTYPE_ITEM,              GI_FISH,              false, LOGIC_NONE,                         RHT_NONE,                              ITEM_FISH,                            OBJECT_GI_FISH,         GID_FISH,             0x47,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE);
    // Refills
    itemTable[RG_BOMBS_5] =                             Item(RG_BOMBS_5,                          Text{ "Bombs (5)", "Bombes (5)", "Bomben (5)" },                                                                                     ITEMTYPE_REFILL,            GI_BOMBS_5,           false, LOGIC_NONE,                         RHT_BOMBS_5,                           ITEM_BOMBS_5,                         OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BOMBS_10] =                            Item(RG_BOMBS_10,                         Text{ "Bombs (10)", "Bombes (10)", "Bomben (10)" },                                                                                  ITEMTYPE_REFILL,            GI_BOMBS_10,          false, LOGIC_NONE,                         RHT_BOMBS_10,                          ITEM_BOMBS_10,                        OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BOMBS_20] =                            Item(RG_BOMBS_20,                         Text{ "Bombs (20)", "Bombes (20)", "Bomben (20)" },                                                                                  ITEMTYPE_REFILL,            GI_BOMBS_20,          false, LOGIC_NONE,                         RHT_BOMBS_20,                          ITEM_BOMBS_20,                        OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BOMBCHU_5] =                           Item(RG_BOMBCHU_5,                        Text{ "Bombchus (5)", "Missiles (5)", "Krabbelminen (5)" },                                                                          ITEMTYPE_REFILL,            GI_BOMBCHUS_5,        true,  LOGIC_BOMBCHUS,                     RHT_BOMBCHUS_5,                        ITEM_BOMBCHUS_5,                      OBJECT_GI_BOMB_2,       GID_BOMBCHU,          0x33,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BOMBCHU_10] =                          Item(RG_BOMBCHU_10,                       Text{ "Bombchus (10)", "Missiles (10)", "Krabbelminen (10)" },                                                                       ITEMTYPE_REFILL,            GI_BOMBCHUS_10,       true,  LOGIC_BOMBCHUS,                     RHT_BOMBCHUS_10,                       ITEM_BOMBCHU,                         OBJECT_GI_BOMB_2,       GID_BOMBCHU,          0x33,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BOMBCHU_20] =                          Item(RG_BOMBCHU_20,                       Text{ "Bombchus (20)", "Missiles (20)", "Krabbelminen (20)" },                                                                       ITEMTYPE_REFILL,            GI_BOMBCHUS_20,       true,  LOGIC_BOMBCHUS,                     RHT_BOMBCHUS_20,                       ITEM_BOMBCHUS_20,                     OBJECT_GI_BOMB_2,       GID_BOMBCHU,          0x33,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BOMBCHU_20].SetCustomDrawFunc(Randomizer_DrawBombchuBagInLogic);
    itemTable[RG_ARROWS_5] =                            Item(RG_ARROWS_5,                         Text{ "Arrows (5)", "Flèches (5)", "Pfeile (5)" },                                                                                   ITEMTYPE_REFILL,            GI_ARROWS_SMALL,      false, LOGIC_NONE,                         RHT_ARROWS_5,                          ITEM_ARROWS_SMALL,                    OBJECT_GI_ARROW,        GID_ARROWS_SMALL,     0xE6,                        0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_ARROWS_10] =                           Item(RG_ARROWS_10,                        Text{ "Arrows (10)", "Flèches (10)", "Pfeile (10)" },                                                                                ITEMTYPE_REFILL,            GI_ARROWS_MEDIUM,     false, LOGIC_NONE,                         RHT_ARROWS_10,                         ITEM_ARROWS_MEDIUM,                   OBJECT_GI_ARROW,        GID_ARROWS_MEDIUM,    0xE6,                        0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_ARROWS_30] =                           Item(RG_ARROWS_30,                        Text{ "Arrows (30)", "Flèches (30)", "Pfeile (30)" },                                                                                ITEMTYPE_REFILL,            GI_ARROWS_LARGE,      false, LOGIC_NONE,                         RHT_ARROWS_30,                         ITEM_ARROWS_LARGE,                    OBJECT_GI_ARROW,        GID_ARROWS_LARGE,     0xE6,                        0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_DEKU_NUTS_5] =                         Item(RG_DEKU_NUTS_5,                      Text{ "Deku Nuts (5)", "Noix Mojo (5)", "Deku-Nüsse (5)" },                                                                          ITEMTYPE_REFILL,            GI_NUTS_5,            false, LOGIC_NONE,                         RHT_DEKU_NUTS_5,                       ITEM_NUTS_5,                          OBJECT_GI_NUTS,         GID_NUTS,             0x34,                        0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_DEKU_NUTS_10] =                        Item(RG_DEKU_NUTS_10,                     Text{ "Deku Nuts (10)", "Noix Mojo (10)", "Deku-Nüsse (10)" },                                                                       ITEMTYPE_REFILL,            GI_NUTS_10,           false, LOGIC_NONE,                         RHT_DEKU_NUTS_10,                      ITEM_NUTS_10,                         OBJECT_GI_NUTS,         GID_NUTS,             0x34,                        0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_DEKU_SEEDS_30] =                       Item(RG_DEKU_SEEDS_30,                    Text{ "Deku Seeds (30)", "Graines Mojo (30)", "Deku-Samen (30)" },                                                                   ITEMTYPE_REFILL,            GI_SEEDS_30,          false, LOGIC_NONE,                         RHT_DEKU_SEEDS_30,                     ITEM_SEEDS_30,                        OBJECT_GI_SEED,         GID_SEEDS,            0xDC,                        0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_DEKU_STICK_1] =                        Item(RG_DEKU_STICK_1,                     Text{ "Deku Stick (1)", "Bâton Mojo (1)", "Deku-Stab (1)" },                                                                         ITEMTYPE_REFILL,            GI_STICKS_1,          false, LOGIC_NONE,                         RHT_DEKU_STICK_1,                      ITEM_STICK,                           OBJECT_GI_STICK,        GID_STICK,            0x37,                        0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_RED_POTION_REFILL] =                   Item(RG_RED_POTION_REFILL,                Text{ "Red Potion Refill", "Recharge de Potion Rouge", "Nachfüllpackung des roten Elixiers" },                                       ITEMTYPE_REFILL,            GI_POTION_RED,        false, LOGIC_NONE,                         RHT_NONE,                              ITEM_POTION_RED,                      OBJECT_GI_LIQUID,       GID_POTION_RED,       0x43,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_GREEN_POTION_REFILL] =                 Item(RG_GREEN_POTION_REFILL,              Text{ "Green Potion Refill", "Recharge de Potion Verte", "Nachfüllpackung des grünen Elixiers" },                                    ITEMTYPE_REFILL,            GI_POTION_GREEN,      false, LOGIC_NONE,                         RHT_NONE,                              ITEM_POTION_GREEN,                    OBJECT_GI_LIQUID,       GID_POTION_GREEN,     0x44,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE);
    itemTable[RG_BLUE_POTION_REFILL] =                  Item(RG_BLUE_POTION_REFILL,               Text{ "Blue Potion Refill", "Recharge de Potion Bleue", "Nachfüllpackung des blauen Elixiers" },                                     ITEMTYPE_REFILL,            GI_POTION_BLUE,       false, LOGIC_NONE,                         RHT_NONE,                              ITEM_POTION_BLUE,                     OBJECT_GI_LIQUID,       GID_POTION_BLUE,      0x45,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE);
    // Treasure Game
    itemTable[RG_TREASURE_GAME_HEART] =                 Item(RG_TREASURE_GAME_HEART,              Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzstück (Schatztruhenminispiel)" },                       ITEMTYPE_ITEM,              GI_HEART_PIECE_WIN,   true,  LOGIC_PIECE_OF_HEART,               RHT_TREASURE_GAME_HEART,               ITEM_HEART_PIECE_2,                   OBJECT_GI_HEARTS,       GID_HEART_PIECE,      0xFA,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_TREASURE_GAME_GREEN_RUPEE] =           Item(RG_TREASURE_GAME_GREEN_RUPEE,        Text{ "Green Rupee (LOSER)", "Rubis Vert (Chasse-aux-Trésors)", "Grüner Rubin (Schatztruhenminispiel)" },                            ITEMTYPE_ITEM,              GI_RUPEE_GREEN_LOSE,  false, LOGIC_NONE,                         RHT_TREASURE_GAME_GREEN_RUPEE,         ITEM_RUPEE_GREEN,                     OBJECT_GI_RUPY,         GID_RUPEE_GREEN,      0xF4,                        0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR,  MOD_NONE);
    // Shop
    itemTable[RG_BUY_DEKU_NUTS_5] =                     Item(RG_BUY_DEKU_NUTS_5,                  Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nuß kaufen (5)" },                                                         ITEMTYPE_SHOP,              GI_NUTS_5_2,          true,  LOGIC_NUTS,                         RHT_DEKU_NUTS_5,                       ITEM_NUTS_5,                          OBJECT_GI_NUTS,         GID_NUTS,             0x34,                        0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 15);
    itemTable[RG_BUY_ARROWS_30] =                       Item(RG_BUY_ARROWS_30,                    Text{ "Buy Arrows (30)", "Acheter: Flèches (30)", "Pfeile kaufen (30)" },                                                            ITEMTYPE_SHOP,              GI_ARROWS_MEDIUM,     true,  LOGIC_BUY_ARROW,                    RHT_ARROWS_30,                         ITEM_ARROWS_MEDIUM,                   OBJECT_GI_ARROW,        GID_ARROWS_MEDIUM,    0xE6,                        0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 60);
    itemTable[RG_BUY_ARROWS_50] =                       Item(RG_BUY_ARROWS_50,                    Text{ "Buy Arrows (50)", "Acheter: Flèches (50)", "Pfeile kaufen (50)" },                                                            ITEMTYPE_SHOP,              GI_ARROWS_LARGE,      true,  LOGIC_BUY_ARROW,                    RHT_ARROWS_30,                         ITEM_ARROWS_LARGE,                    OBJECT_GI_ARROW,        GID_ARROWS_LARGE,     0xE6,                        0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 90);
    itemTable[RG_BUY_BOMBS_525] =                       Item(RG_BUY_BOMBS_525,                    Text{ "Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Bomben kaufen (5) [25]" },                                                  ITEMTYPE_SHOP,              GI_BOMBS_5,           true,  LOGIC_BUY_BOMB,                     RHT_BOMBS_5,                           ITEM_BOMBS_5,                         OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 25);
    itemTable[RG_BUY_DEKU_NUTS_10] =                    Item(RG_BUY_DEKU_NUTS_10,                 Text{ "Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Deku-Nuß kaufen (10)" },                                                      ITEMTYPE_SHOP,              GI_NUTS_10,           true,  LOGIC_NUTS,                         RHT_DEKU_NUTS_10,                      ITEM_NUTS_10,                         OBJECT_GI_NUTS,         GID_NUTS,             0x34,                        0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 30);
    itemTable[RG_BUY_DEKU_STICK_1] =                    Item(RG_BUY_DEKU_STICK_1,                 Text{ "Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Deku-Stab kaufen (1)" },                                                     ITEMTYPE_SHOP,              GI_STICKS_1,          true,  LOGIC_STICKS,                       RHT_DEKU_STICK_1,                      ITEM_STICK,                           OBJECT_GI_STICK,        GID_STICK,            0x37,                        0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 10);
    itemTable[RG_BUY_BOMBS_10] =                        Item(RG_BUY_BOMBS_10,                     Text{ "Buy Bombs (10)", "Acheter: Bombes (10)", "Bomben kaufen (10)" },                                                              ITEMTYPE_SHOP,              GI_BOMBS_10,          true,  LOGIC_BUY_BOMB,                     RHT_BOMBS_10,                          ITEM_BOMBS_10,                        OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 50);
    itemTable[RG_BUY_FISH] =                            Item(RG_BUY_FISH,                         Text{ "Buy Fish", "Acheter: Poisson", "Fisch kaufen" },                                                                              ITEMTYPE_SHOP,              GI_FISH,              true,  LOGIC_FISH_ACCESS,                  RHT_BOTTLE_WITH_FISH,                  ITEM_FISH,                            OBJECT_GI_FISH,         GID_FISH,             0x47,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 200);
    itemTable[RG_BUY_RED_POTION_30] =                   Item(RG_BUY_RED_POTION_30,                Text{ "Buy Red Potion [30]", "Acheter: Potion Rouge [30]", "Rotes Elixier kaufen [30]" },                                            ITEMTYPE_SHOP,              GI_POTION_RED,        false, LOGIC_NONE,                         RHT_BOTTLE_WITH_RED_POTION,            ITEM_POTION_RED,                      OBJECT_GI_LIQUID,       GID_POTION_RED,       0x43,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 30);
    itemTable[RG_BUY_GREEN_POTION] =                    Item(RG_BUY_GREEN_POTION,                 Text{ "Buy Green Potion", "Acheter: Potion Verte", "Grünes Elixier kaufen" },                                                        ITEMTYPE_SHOP,              GI_POTION_GREEN,      true,  LOGIC_BUY_MAGIC_POTION,             RHT_BOTTLE_WITH_GREEN_POTION,          ITEM_POTION_GREEN,                    OBJECT_GI_LIQUID,       GID_POTION_GREEN,     0x44,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 30);
    itemTable[RG_BUY_BLUE_POTION] =                     Item(RG_BUY_BLUE_POTION,                  Text{ "Buy Blue Potion", "Acheter: Potion Bleue", "Blaues Elixier kaufen" },                                                         ITEMTYPE_SHOP,              GI_POTION_BLUE,       true,  LOGIC_BUY_MAGIC_POTION,             RHT_BOTTLE_WITH_BLUE_POTION,           ITEM_POTION_BLUE,                     OBJECT_GI_LIQUID,       GID_POTION_BLUE,      0x45,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 100);
    itemTable[RG_BUY_HYLIAN_SHIELD] =                   Item(RG_BUY_HYLIAN_SHIELD,                Text{ "Buy Hylian Shield", "Acheter: Bouclier Hylien", "Hylia-Schild kaufen" },                                                      ITEMTYPE_SHOP,              GI_SHIELD_HYLIAN,     true,  LOGIC_HYLIAN_SHIELD,                RHT_HYLIAN_SHIELD,                     ITEM_SHIELD_HYLIAN,                   OBJECT_GI_SHIELD_2,     GID_SHIELD_HYLIAN,    0x4D,                        0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 80);
    itemTable[RG_BUY_DEKU_SHIELD] =                     Item(RG_BUY_DEKU_SHIELD,                  Text{ "Buy Deku Shield", "Acheter: Bouclier Mojo", "Deku-Schild kaufen" },                                                           ITEMTYPE_SHOP,              GI_SHIELD_DEKU,       true,  LOGIC_DEKU_SHIELD,                  RHT_DEKU_SHIELD,                       ITEM_SHIELD_DEKU,                     OBJECT_GI_SHIELD_1,     GID_SHIELD_DEKU,      0x4C,                        0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 40);
    itemTable[RG_BUY_GORON_TUNIC] =                     Item(RG_BUY_GORON_TUNIC,                  Text{ "Buy Goron Tunic", "Acheter: Tunique Goron", "Goronen-Tunika kaufen" },                                                        ITEMTYPE_SHOP,              GI_TUNIC_GORON,       true,  LOGIC_GORON_TUNIC,                  RHT_GORON_TUNIC,                       ITEM_TUNIC_GORON,                     OBJECT_GI_CLOTHES,      GID_TUNIC_GORON,      0x50,                        0xA0, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE, false, 200);
    itemTable[RG_BUY_ZORA_TUNIC] =                      Item(RG_BUY_ZORA_TUNIC,                   Text{ "Buy Zora Tunic", "Acheter: Tunique Zora", "Zora-Tunika kaufen" },                                                             ITEMTYPE_SHOP,              GI_TUNIC_ZORA,        true,  LOGIC_ZORA_TUNIC,                   RHT_ZORA_TUNIC,                        ITEM_TUNIC_ZORA,                      OBJECT_GI_CLOTHES,      GID_TUNIC_ZORA,       0x51,                        0xA0, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE, false, 300);
    itemTable[RG_BUY_HEART] =                           Item(RG_BUY_HEART,                        Text{ "Buy Heart", "Acheter: Coeur de Vie", "Herz kaufen" },                                                                         ITEMTYPE_SHOP,              GI_HEART,             false, LOGIC_NONE,                         RHT_RECOVERY_HEART,                    ITEM_HEART,                           OBJECT_GI_HEART,        GID_HEART,            0x55,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 10);
    itemTable[RG_BUY_BOMBCHUS_10] =                     Item(RG_BUY_BOMBCHUS_10,                  Text{ "Buy Bombchu (10)", "Acheter: Missiles (10)", "Krabbelminen kaufen (10)" },                                                    ITEMTYPE_SHOP,              GI_BOMBCHUS_10,       true,  LOGIC_BUY_BOMBCHUS,                 RHT_BOMBCHUS_10,                       ITEM_BOMBCHU,                         OBJECT_GI_BOMB_2,       GID_BOMBCHU,          0x33,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 99);
    itemTable[RG_BUY_BOMBCHUS_20] =                     Item(RG_BUY_BOMBCHUS_20,                  Text{ "Buy Bombchu (20)", "Acheter: Missiles (20)", "Krabbelminen kaufen (20)" },                                                    ITEMTYPE_SHOP,              GI_BOMBCHUS_20,       true,  LOGIC_BUY_BOMBCHUS,                 RHT_BOMBCHUS_20,                       ITEM_BOMBCHUS_20,                     OBJECT_GI_BOMB_2,       GID_BOMBCHU,          0x33,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 180);
    itemTable[RG_BUY_DEKU_SEEDS_30] =                   Item(RG_BUY_DEKU_SEEDS_30,                Text{ "Buy Deku Seeds (30)", "Acheter: Graines Mojo (30)", "Deku-Samen kaufen (30)" },                                               ITEMTYPE_SHOP,              GI_SEEDS_30,          true,  LOGIC_BUY_SEED,                     RHT_DEKU_SEEDS_30,                     ITEM_SEEDS_30,                        OBJECT_GI_SEED,         GID_SEEDS,            0xDC,                        0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 30);
    itemTable[RG_SOLD_OUT] =                            Item(RG_SOLD_OUT,                         Text{ "Sold Out", "Rupture de stock", "Ausverkauft" },                                                                               ITEMTYPE_SHOP,              RG_SOLD_OUT,          false, LOGIC_NONE,                         RHT_NONE, false, 0);
    itemTable[RG_BUY_BLUE_FIRE] =                       Item(RG_BUY_BLUE_FIRE,                    Text{ "Buy Blue Fire", "Acheter: Flamme Bleue", "Blaues Feuer kaufen" },                                                             ITEMTYPE_SHOP,              GI_BLUE_FIRE,         true,  LOGIC_BLUE_FIRE_ACCESS,             RHT_BOTTLE_WITH_BLUE_FIRE,             ITEM_BLUE_FIRE,                       OBJECT_GI_FIRE,         GID_BLUE_FIRE,        0x5D,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 300);
    itemTable[RG_BUY_BOTTLE_BUG] =                      Item(RG_BUY_BOTTLE_BUG,                   Text{ "Buy Bottle Bug", "Acheter: Insecte en bouteille", "Flaschenkäfer kaufen" },                                                   ITEMTYPE_SHOP,              GI_BUGS,              true,  LOGIC_BUGS_ACCESS,                  RHT_BOTTLE_WITH_BUGS,                  ITEM_BUG,                             OBJECT_GI_INSECT,       GID_BUG,              0x7A,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 50);
    itemTable[RG_BUY_POE] =                             Item(RG_BUY_POE,                          Text{ "Buy Poe", "Acheter: Esprit", "Geist kaufen" },                                                                                ITEMTYPE_SHOP,              RG_BUY_POE,           false, LOGIC_NONE,                         RHT_BOTTLE_WITH_BIG_POE,               ITEM_POE,                             OBJECT_GI_GHOST,        GID_POE,              0x97,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 30);
    itemTable[RG_BUY_FAIRYS_SPIRIT] =                   Item(RG_BUY_FAIRYS_SPIRIT,                Text{ "Buy Fairy's Spirit", "Acheter: Esprit de Fée", "Feengeist kaufen" },                                                          ITEMTYPE_SHOP,              GI_FAIRY,             true,  LOGIC_FAIRY_ACCESS,                 RHT_BOTTLE_WITH_FAIRY,                 ITEM_FAIRY,                           OBJECT_GI_BOTTLE,       GID_BOTTLE,           0x46,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 50);
    itemTable[RG_BUY_ARROWS_10] =                       Item(RG_BUY_ARROWS_10,                    Text{ "Buy Arrows (10)", "Acheter: Flèches (10)", "Pfeile kaufen (10)" },                                                            ITEMTYPE_SHOP,              GI_ARROWS_SMALL,      true,  LOGIC_BUY_ARROW,                    RHT_ARROWS_10,                         ITEM_ARROWS_SMALL,                    OBJECT_GI_ARROW,        GID_ARROWS_SMALL,     0xE6,                        0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 20);
    itemTable[RG_BUY_BOMBS_20] =                        Item(RG_BUY_BOMBS_20,                     Text{ "Buy Bombs (20)", "Acheter: Bombes (20)", "Bomben kaufen (20)" },                                                              ITEMTYPE_SHOP,              GI_BOMBS_20,          true,  LOGIC_BUY_BOMB,                     RHT_BOMBS_20,                          ITEM_BOMBS_20,                        OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 80);
    itemTable[RG_BUY_BOMBS_30] =                        Item(RG_BUY_BOMBS_30,                     Text{ "Buy Bombs (30)", "Acheter: Bombes (30)", "Bomben kaufen (30)" },                                                              ITEMTYPE_SHOP,              GI_BOMBS_30,          true,  LOGIC_BUY_BOMB,                     RHT_BOMBS_20,                          ITEM_BOMBS_30,                        OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 120);
    itemTable[RG_BUY_BOMBS_535] =                       Item(RG_BUY_BOMBS_535,                    Text{ "Buy Bombs (5) [35]", "Acheter: Bombes (5) [35]", "Bomben kaufen (5) [35]" },                                                  ITEMTYPE_SHOP,              GI_BOMBS_5,           true,  LOGIC_BUY_BOMB,                     RHT_BOMBS_5,                           ITEM_BOMBS_5,                         OBJECT_GI_BOMB_1,       GID_BOMB,             0x32,                        0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK,   MOD_NONE, false, 35);
    itemTable[RG_BUY_RED_POTION_40] =                   Item(RG_BUY_RED_POTION_40,                Text{ "Buy Red Potion [40]", "Acheter: Potion Rouge [40]", "Rotes Elixier kaufen [40]" },                                            ITEMTYPE_SHOP,              GI_POTION_RED,        false, LOGIC_NONE,                         RHT_BOTTLE_WITH_RED_POTION,            ITEM_POTION_RED,                      OBJECT_GI_LIQUID,       GID_POTION_RED,       0x43,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 40);
    itemTable[RG_BUY_RED_POTION_50] =                   Item(RG_BUY_RED_POTION_50,                Text{ "Buy Red Potion [50]", "Acheter: Potion Rouge [50]", "Rotes Elixier kaufen [50]" },                                            ITEMTYPE_SHOP,              GI_POTION_RED,        false, LOGIC_NONE,                         RHT_BOTTLE_WITH_RED_POTION,            ITEM_POTION_RED,                      OBJECT_GI_LIQUID,       GID_POTION_RED,       0x43,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_JUNK,   MOD_NONE, false, 50);
    // Misc.
    itemTable[RG_GOHMA_SOUL] =                          Item(RG_GOHMA_SOUL,                       Text{ "Gohma's Soul", "Âme de Gohma", "Gohmas Seele" },                                                                                          ITEMTYPE_ITEM,              0xE0,                 true,  LOGIC_CAN_SUMMON_GOHMA,             RHT_GOHMA_SOUL,                        RG_GOHMA_SOUL,                        OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_GOHMA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_KING_DODONGO_SOUL] =                   Item(RG_KING_DODONGO_SOUL,                Text{ "King Dodongo's Soul", "Âme du Roi Dodongo", "König Dodongos Seele" },                                                                           ITEMTYPE_ITEM,              0xE1,                 true,  LOGIC_CAN_SUMMON_KINGDODONGO,       RHT_KING_DODONGO_SOUL,                 RG_KING_DODONGO_SOUL,                 OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_KING_DODONGO_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_BARINADE_SOUL] =                       Item(RG_BARINADE_SOUL,                    Text{ "Barinade's Soul", "Âme de Barinade", "Barinades Seele" },                                                                                    ITEMTYPE_ITEM,              0xE2,                 true,  LOGIC_CAN_SUMMON_BARINADE,          RHT_BARINADE_SOUL,                     RG_BARINADE_SOUL,                     OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BARINADE_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_PHANTOM_GANON_SOUL] =                  Item(RG_PHANTOM_GANON_SOUL,               Text{ "Phantom Ganon's Soul", "Âme de Ganon Spectral", "Phantom-Ganons Seele" },                                                                          ITEMTYPE_ITEM,              0xE3,                 true,  LOGIC_CAN_SUMMON_PHANTOMGANON,      RHT_PHANTOM_GANON_SOUL,                RG_PHANTOM_GANON_SOUL,                OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_PHANTOM_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_VOLVAGIA_SOUL] =                       Item(RG_VOLVAGIA_SOUL,                    Text{ "Volvagia's Soul", "Âme de Vulcania", "Volvagias Seele" },                                                                                    ITEMTYPE_ITEM,              0xE4,                 true,  LOGIC_CAN_SUMMON_VOLVAGIA,          RHT_VOLVAGIA_SOUL,                     RG_VOLVAGIA_SOUL,                     OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_VOLVAGIA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_MORPHA_SOUL] =                         Item(RG_MORPHA_SOUL,                      Text{ "Morpha's Soul", "Âme de Morpha", "Morphas Seele" },                                                                                        ITEMTYPE_ITEM,              0xE5,                 true,  LOGIC_CAN_SUMMON_MORPHA,            RHT_MORPHA_SOUL,                       RG_MORPHA_SOUL,                       OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_MORPHA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_BONGO_BONGO_SOUL] =                    Item(RG_BONGO_BONGO_SOUL,                 Text{ "Bongo Bongo's Soul", "Âme de Bongo Bongo", "Bongo Bongos Seele" },                                                                              ITEMTYPE_ITEM,              0xE6,                 true,  LOGIC_CAN_SUMMON_BONGOBONGO,        RHT_BONGO_BONGO_SOUL,                  RG_BONGO_BONGO_SOUL,                  OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BONGO_BONGO_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_TWINROVA_SOUL] =                       Item(RG_TWINROVA_SOUL,                    Text{ "Twinrova's Soul", "Âme du Duo Maléfique", "Twinrovas Seele" },                                                                                    ITEMTYPE_ITEM,              0xE7,                 true,  LOGIC_CAN_SUMMON_TWINROVA,          RHT_TWINROVA_SOUL,                     RG_TWINROVA_SOUL,                     OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_TWINROVA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_GANON_SOUL] =                          Item(RG_GANON_SOUL,                       Text{ "Ganon's Soul", "Âme de Ganon", "Ganons Seele" },                                                                                          ITEMTYPE_ITEM,              0xE8,                 true,  LOGIC_CAN_SUMMON_GANON,             RHT_GANON_SOUL,                        RG_GANON_SOUL,                        OBJECT_GI_SUTARU,       GID_SKULL_TOKEN,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
    itemTable[RG_FISHING_POLE] =                        Item(RG_FISHING_POLE,                     Text{ "Fishing Pole", "Canne à Pêche", "Angelrute" },                                                                                ITEMTYPE_ITEM,              RG_FISHING_POLE,      true,  LOGIC_FISHING_POLE,                 RHT_FISHING_POLE,                      RG_FISHING_POLE,                      OBJECT_GI_FISH,         GID_FISHING_POLE,     TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_FISHING_POLE].SetCustomDrawFunc(Randomizer_DrawFishingPoleGI);

    itemTable[RG_OCARINA_A_BUTTON] =                    Item(RG_OCARINA_A_BUTTON,                 Text{ "Ocarina A Button", "Touche A de l'Ocarina", "Taste A der Okarina" },                                                          ITEMTYPE_ITEM,              GI_MAP,               true,  LOGIC_OCARINA_A_BUTTON,             RHT_OCARINA_A_BUTTON,                  RG_OCARINA_A_BUTTON,                  OBJECT_GI_MAP,          GID_STONE_OF_AGONY,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_OCARINA_A_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);
    itemTable[RG_OCARINA_C_UP_BUTTON] =                 Item(RG_OCARINA_C_UP_BUTTON,              Text{ "Ocarina C Up Button", "Touche C-Haut de l'Ocarina", "Taste C-Oben der Okarina" },                                             ITEMTYPE_ITEM,              GI_MAP,               true,  LOGIC_OCARINA_C_UP_BUTTON,          RHT_OCARINA_C_UP_BUTTON,               RG_OCARINA_C_UP_BUTTON,               OBJECT_GI_MAP,          GID_STONE_OF_AGONY,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_OCARINA_C_UP_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);
    itemTable[RG_OCARINA_C_DOWN_BUTTON] =               Item(RG_OCARINA_C_DOWN_BUTTON,            Text{ "Ocarina C Down Button", "Touche C-Bas de l'Ocarina", "Taste C-Unten der Okarina" },                                           ITEMTYPE_ITEM,              GI_MAP,               true,  LOGIC_OCARINA_C_DOWN_BUTTON,        RHT_OCARINA_C_DOWN_BUTTON,             RG_OCARINA_C_DOWN_BUTTON,             OBJECT_GI_MAP,          GID_STONE_OF_AGONY,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_OCARINA_C_DOWN_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);
    itemTable[RG_OCARINA_C_LEFT_BUTTON] =               Item(RG_OCARINA_C_LEFT_BUTTON,            Text{ "Ocarina C Left Button", "Touche C-Gauche de l'Ocarina", "Taste C-Links der Okarina" },                                        ITEMTYPE_ITEM,              GI_MAP,               true,  LOGIC_OCARINA_C_LEFT_BUTTON,        RHT_OCARINA_C_LEFT_BUTTON,             RG_OCARINA_C_LEFT_BUTTON,             OBJECT_GI_MAP,          GID_STONE_OF_AGONY,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_OCARINA_C_LEFT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);
    itemTable[RG_OCARINA_C_RIGHT_BUTTON] =              Item(RG_OCARINA_C_RIGHT_BUTTON,           Text{ "Ocarina C Right Button", "Touche C-Droit de l'Ocarina", "Taste C-Rechts der Okarina" },                                       ITEMTYPE_ITEM,              GI_MAP,               true,  LOGIC_OCARINA_C_RIGHT_BUTTON,       RHT_OCARINA_C_RIGHT_BUTTON,            RG_OCARINA_C_RIGHT_BUTTON,            OBJECT_GI_MAP,          GID_STONE_OF_AGONY,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_OCARINA_C_RIGHT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);

    itemTable[RG_BRONZE_SCALE] =                        Item(RG_BRONZE_SCALE,                     Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" },                                                                                   ITEMTYPE_ITEM,              GI_SCALE_SILVER,      true,  LOGIC_PROGRESSIVE_WALLET,           RHT_BRONZE_SCALE,                      RG_BRONZE_SCALE,                      OBJECT_GI_SCALE,        GID_SCALE_SILVER,     TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale);

    itemTable[RG_BOMBCHU_BAG] =                         Item(RG_BOMBCHU_BAG,                      Text{ "Bombchu Bag", "!!!", "!!!" },                                                                                                 ITEMTYPE_ITEM,              RG_BOMBCHU_BAG,       true,  LOGIC_BOMBCHUS,                     RHT_BOMBCHU_BAG,                       RG_BOMBCHU_BAG,                       OBJECT_GI_BOMB_2,       GID_BOMBCHU,          TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
    itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag);
    
    itemTable[RG_QUIVER_INF] =                          Item(RG_QUIVER_INF,                       Text{ "Infinite Quiver", "Carquois Infini", "Unendlicher Köcher" },                                                                              ITEMTYPE_ITEM,              RG_QUIVER_INF,        true,  LOGIC_PROGRESSIVE_BOW,              RHT_QUIVER_INF,                        RG_QUIVER_INF,                        OBJECT_GI_ARROWCASE,    GID_QUIVER_50,        TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_BOMB_BAG_INF] =                        Item(RG_BOMB_BAG_INF,                     Text{ "Infinite Bomb Bag", "Sac de Bombes Infini", "Unendliche Bombentasche" },                                                                       ITEMTYPE_ITEM,              RG_BOMB_BAG_INF,      true,  LOGIC_PROGRESSIVE_BOMB_BAG,         RHT_BOMB_BAG_INF,                      RG_BOMB_BAG_INF,                      OBJECT_GI_BOMBPOUCH,    GID_BOMB_BAG_40,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_BULLET_BAG_INF] =                      Item(RG_BULLET_BAG_INF,                   Text{ "Infinite Bullet Bag", "Sac de Graines Infinis", "Unendliche Samentasche" },                                                                      ITEMTYPE_ITEM,              RG_BULLET_BAG_INF,    true,  LOGIC_PROGRESSIVE_BULLET_BAG,       RHT_BULLET_BAG_INF,                    RG_BULLET_BAG_INF,                    OBJECT_GI_DEKUPOUCH,    GID_BULLET_BAG,       TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_STICK_UPGRADE_INF] =                   Item(RG_STICK_UPGRADE_INF,                Text{ "Infinite Stick Capacity", "Bâtons Mojo Infinis", "Unendliche Stab-Kapazität" },                                                               ITEMTYPE_ITEM,              RG_STICK_UPGRADE_INF, true,  LOGIC_PROGRESSIVE_STICK_BAG,        RHT_STICK_UPGRADE_INF,                 RG_STICK_UPGRADE_INF,                 OBJECT_GI_STICK,        GID_STICK,            TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_NUT_UPGRADE_INF] =                     Item(RG_NUT_UPGRADE_INF,                  Text{ "Infinite Nut Capacity", "Noix Mojo Infinies", "Unendliche Nuß-Kapazität" },                                                                  ITEMTYPE_ITEM,              RG_NUT_UPGRADE_INF,   true,  LOGIC_PROGRESSIVE_NUT_BAG,          RHT_NUT_UPGRADE_INF,                   RG_NUT_UPGRADE_INF,                   OBJECT_GI_NUTS,         GID_NUTS,             TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_MAGIC_INF] =                           Item(RG_MAGIC_INF,                        Text{ "Infinite Magic Meter", "Magie Infinie", "Unendliches Magisches Maß" },                                                                  ITEMTYPE_ITEM,              RG_MAGIC_INF,         true,  LOGIC_PROGRESSIVE_MAGIC,            RHT_MAGIC_INF,                         RG_MAGIC_INF,                         OBJECT_GI_MAGICPOT,     GID_MAGIC_LARGE,      TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_BOMBCHU_INF] =                         Item(RG_BOMBCHU_INF,                      Text{ "Infinite Bombchus", "Missiles Teigneux Infinis", "Unendliche Krabbelminen" },                                                                       ITEMTYPE_ITEM,              RG_BOMBCHU_INF,       true,  LOGIC_BOMBCHUS,                     RHT_BOMBCHU_INF,                       RG_BOMBCHU_INF,                       OBJECT_GI_BOMB_2,       GID_BOMBCHU,          TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_BOMBCHU_INF].SetCustomDrawFunc(Randomizer_DrawBombchuBag);
    itemTable[RG_WALLET_INF] =                          Item(RG_WALLET_INF,                       Text{ "Infinite Wallet", "Bourse Infinie", "Unendliche Geldbörse" },                                                                            ITEMTYPE_ITEM,              RG_WALLET_INF,        true,  LOGIC_PROGRESSIVE_WALLET,           RHT_WALLET_INF,                        RG_WALLET_INF,                        OBJECT_GI_PURSE,        GID_WALLET_GIANT,     TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);

    itemTable[RG_SKELETON_KEY] =                        Item(RG_SKELETON_KEY,                     Text{ "Skeleton Key", "Clé Squelette", "Skelettschlüssel" },                                                                                   ITEMTYPE_ITEM,              GI_STONE_OF_AGONY,    true,  LOGIC_SKELETON_KEY,                 RHT_SKELETON_KEY,                      RG_SKELETON_KEY,                      OBJECT_GI_MAP,          GID_STONE_OF_AGONY,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_SKELETON_KEY].SetCustomDrawFunc(Randomizer_DrawSkeletonKey);

    itemTable[RG_DEKU_STICK_BAG] =                      Item(RG_DEKU_STICK_BAG,                   Text{ "Deku Stick Bag", "Sac de Bâton Mojo", "Deku-Stab-Tasche" },                                                                                 ITEMTYPE_ITEM,              GI_STICK_UPGRADE_30,  true,  LOGIC_PROGRESSIVE_STICK_BAG,        RHT_NONE,                              RG_DEKU_STICK_BAG,                    OBJECT_GI_STICK,        GID_STICK,            TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);

    itemTable[RG_DEKU_NUT_BAG] =                        Item(RG_DEKU_NUT_BAG,                     Text{ "Deku Nut Bag", "Sac de Noix Mojo", "Deku-Nuß-Tasche" },                                                                                    ITEMTYPE_ITEM,              GI_NUT_UPGRADE_30,    true,  LOGIC_PROGRESSIVE_NUT_BAG,          RHT_NONE,                              RG_DEKU_NUT_BAG,                      OBJECT_GI_NUTS,         GID_NUTS,             TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);

    itemTable[RG_TRIFORCE] =                            Item(RG_TRIFORCE,                         Text{ "Triforce", "Triforce", "Triforce" },                                                                                          ITEMTYPE_EVENT,             RG_TRIFORCE,          false, LOGIC_NONE,                         RHT_NONE);
    itemTable[RG_HINT] =                                Item(RG_HINT,                             Text{ "Hint", "Indice", "Hinweis" },                                                                                                 ITEMTYPE_EVENT,             RG_HINT,              false, LOGIC_NONE,                         RHT_NONE);
    // Individual stages of progressive items (only here for GetItemEntry purposes, not for use in seed gen)
    itemTable[RG_HOOKSHOT] =                            Item(RG_HOOKSHOT,                         Text{ "Hookshot", "Grappin", "Fanghaken" },                                                                                          ITEMTYPE_ITEM,              GI_HOOKSHOT,          true,  LOGIC_PROGRESSIVE_HOOKSHOT,         RHT_HOOKSHOT,                          ITEM_HOOKSHOT,                        OBJECT_GI_HOOKSHOT,     GID_HOOKSHOT,         0x36,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_LONGSHOT] =                            Item(RG_LONGSHOT,                         Text{ "Longshot", "Super-Grappin", "Enterhaken" },                                                                                   ITEMTYPE_ITEM,              GI_LONGSHOT,          true,  LOGIC_PROGRESSIVE_HOOKSHOT,         RHT_LONGSHOT,                          ITEM_LONGSHOT,                        OBJECT_GI_HOOKSHOT,     GID_LONGSHOT,         0x4F,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_FAIRY_OCARINA] =                       Item(RG_FAIRY_OCARINA,                    Text{ "Fairy Ocarina", "Ocarina des fées", "Feen-Okarina" },                                                                         ITEMTYPE_ITEM,              GI_OCARINA_FAIRY,     true,  LOGIC_PROGRESSIVE_OCARINA,          RHT_FAIRY_OCARINA,                     ITEM_OCARINA_FAIRY,                   OBJECT_GI_OCARINA_0,    GID_OCARINA_FAIRY,    0x4A,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_OCARINA_OF_TIME] =                     Item(RG_OCARINA_OF_TIME,                  Text{ "Ocarina of Time", "Ocarina du Temps", "Okarina der Zeit" },                                                                   ITEMTYPE_ITEM,              GI_OCARINA_OOT,       true,  LOGIC_PROGRESSIVE_OCARINA,          RHT_OCARINA_OF_TIME,                   ITEM_OCARINA_TIME,                    OBJECT_GI_OCARINA,      GID_OCARINA_TIME,     0x3A,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BOMB_BAG] =                            Item(RG_BOMB_BAG,                         Text{ "Bomb Bag", "Sac de Bombes", "Bombentasche" },                                                                                 ITEMTYPE_ITEM,              GI_BOMB_BAG_20,       true,  LOGIC_PROGRESSIVE_BOMB_BAG,         RHT_BOMB_BAG,                          ITEM_BOMB_BAG_20,                     OBJECT_GI_BOMBPOUCH,    GID_BOMB_BAG_20,      0x58,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BIG_BOMB_BAG] =                        Item(RG_BIG_BOMB_BAG,                     Text{ "Big Bomb Bag", "Grand Sac de Bombes", "Große Bombentasche" },                                                                 ITEMTYPE_ITEM,              GI_BOMB_BAG_30,       true,  LOGIC_PROGRESSIVE_BOMB_BAG,         RHT_BIG_BOMB_BAG,                      ITEM_BOMB_BAG_30,                     OBJECT_GI_BOMBPOUCH,    GID_BOMB_BAG_30,      0x59,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_BIGGEST_BOMB_BAG] =                    Item(RG_BIGGEST_BOMB_BAG,                 Text{ "Biggest Bomb Bag", "Énorme Sac de Bombes", "Größte Bombentasche" },                                                           ITEMTYPE_ITEM,              GI_BOMB_BAG_40,       true,  LOGIC_PROGRESSIVE_BOMB_BAG,         RHT_BIGGEST_BOMB_BAG,                  ITEM_BOMB_BAG_40,                     OBJECT_GI_BOMBPOUCH,    GID_BOMB_BAG_40,      0x5A,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_FAIRY_BOW] =                           Item(RG_FAIRY_BOW,                        Text{ "Fairy Bow", "Arc des Fées", "Feen-Bogen" },                                                                                   ITEMTYPE_ITEM,              GI_BOW,               true,  LOGIC_PROGRESSIVE_BOW,              RHT_FAIRY_BOW,                         ITEM_BOW,                             OBJECT_GI_BOW,          GID_BOW,              0x31,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BIG_QUIVER] =                          Item(RG_BIG_QUIVER,                       Text{ "Big Quiver", "Grand carquois", "Großer Köcher" },                                                                             ITEMTYPE_ITEM,              GI_QUIVER_40,         true,  LOGIC_PROGRESSIVE_BOW,              RHT_BIG_QUIVER,                        ITEM_QUIVER_40,                       OBJECT_GI_ARROWCASE,    GID_QUIVER_40,        0x56,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_BIGGEST_QUIVER] =                      Item(RG_BIGGEST_QUIVER,                   Text{ "Biggest Quiver", "Énorme carquois", "Größter Köcher" },                                                                       ITEMTYPE_ITEM,              GI_QUIVER_50,         true,  LOGIC_PROGRESSIVE_BOW,              RHT_BIGGEST_QUIVER,                    ITEM_QUIVER_50,                       OBJECT_GI_ARROWCASE,    GID_QUIVER_50,        0x57,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_FAIRY_SLINGSHOT] =                     Item(RG_FAIRY_SLINGSHOT,                  Text{ "Fairy Slingshot", "Lance-Pierre des Fées", "Feen-Schleuder" },                                                                ITEMTYPE_ITEM,              GI_SLINGSHOT,         true,  LOGIC_PROGRESSIVE_BULLET_BAG,       RHT_FAIRY_SLINGSHOT,                   ITEM_SLINGSHOT,                       OBJECT_GI_PACHINKO,     GID_SLINGSHOT,        0x30,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_BIG_BULLET_BAG] =                      Item(RG_BIG_BULLET_BAG,                   Text{ "Big Deku Seed Bullet Bag", "Grand sac de graines mojo", "Große Deku-Samentasche" },                                           ITEMTYPE_ITEM,              GI_BULLET_BAG_40,     true,  LOGIC_PROGRESSIVE_BULLET_BAG,       RHT_BIG_BULLET_BAG,                    ITEM_BULLET_BAG_40,                   OBJECT_GI_DEKUPOUCH,    GID_BULLET_BAG,       0x07,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_BIGGEST_BULLET_BAG] =                  Item(RG_BIGGEST_BULLET_BAG,               Text{ "Biggest Deku Seed Bullet Bag", "Énorme sac de graines mojo", "Größte Deku-Samentasche" },                                     ITEMTYPE_ITEM,              GI_BULLET_BAG_50,     true,  LOGIC_PROGRESSIVE_BULLET_BAG,       RHT_BIGGEST_BULLET_BAG,                ITEM_BULLET_BAG_50,                   OBJECT_GI_DEKUPOUCH,    GID_BULLET_BAG,       0x07,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_GORONS_BRACELET] =                     Item(RG_GORONS_BRACELET,                  Text{ "Goron's Bracelet", "Bracelet Goron", "Goronen-Armband" },                                                                     ITEMTYPE_ITEM,              GI_BRACELET,          true,  LOGIC_PROGRESSIVE_STRENGTH,         RHT_GORONS_BRACELET,                   ITEM_BRACELET,                        OBJECT_GI_BRACELET,     GID_BRACELET,         0x79,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SILVER_GAUNTLETS] =                    Item(RG_SILVER_GAUNTLETS,                 Text{ "Silver Gauntlets", "Gantelets d'argent", "Silberhandschuhe" },                                                                ITEMTYPE_ITEM,              GI_GAUNTLETS_SILVER,  true,  LOGIC_PROGRESSIVE_STRENGTH,         RHT_SILVER_GAUNTLETS,                  ITEM_GAUNTLETS_SILVER,                OBJECT_GI_GLOVES,       GID_GAUNTLETS_SILVER, 0x5B,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_GOLDEN_GAUNTLETS] =                    Item(RG_GOLDEN_GAUNTLETS,                 Text{ "Golden Gauntlets", "Gantelets d'or", "Goldhandschuhe" },                                                                      ITEMTYPE_ITEM,              GI_GAUNTLETS_GOLD,    true,  LOGIC_PROGRESSIVE_STRENGTH,         RHT_GOLDEN_GAUNTLETS,                  ITEM_GAUNTLETS_GOLD,                  OBJECT_GI_GLOVES,       GID_GAUNTLETS_GOLD,   0x5C,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_SILVER_SCALE] =                        Item(RG_SILVER_SCALE,                     Text{ "Silver Scale", "Écaille d'argent", "Silberne Schuppe" },                                                                      ITEMTYPE_ITEM,              GI_SCALE_SILVER,      true,  LOGIC_PROGRESSIVE_SCALE,            RHT_SILVER_SCALE,                      ITEM_SCALE_SILVER,                    OBJECT_GI_SCALE,        GID_SCALE_SILVER,     0xCD,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_GOLDEN_SCALE] =                        Item(RG_GOLDEN_SCALE,                     Text{ "Golden Scale", "Écaille d'or", "Goldene Schuppe" },                                                                           ITEMTYPE_ITEM,              GI_SCALE_GOLDEN,        true,  LOGIC_PROGRESSIVE_SCALE,            RHT_GOLDEN_SCALE,                      ITEM_SCALE_GOLDEN,                    OBJECT_GI_SCALE,        GID_SCALE_GOLDEN,     0xCE,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_ADULT_WALLET] =                        Item(RG_ADULT_WALLET,                     Text{ "Adult Wallet", "Grande Bourse", "Erwachsenengeldbörse" },                                                                     ITEMTYPE_ITEM,              GI_WALLET_ADULT,      true,  LOGIC_PROGRESSIVE_WALLET,           RHT_ADULT_WALLET,                      ITEM_WALLET_ADULT,                    OBJECT_GI_PURSE,        GID_WALLET_ADULT,     0x5E,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_GIANT_WALLET] =                        Item(RG_GIANT_WALLET,                     Text{ "Giant Wallet", "Bourse de Géant", "Riesige Geldbörse" },                                                                      ITEMTYPE_ITEM,              GI_WALLET_GIANT,      true,  LOGIC_PROGRESSIVE_WALLET,           RHT_GIANT_WALLET,                      ITEM_WALLET_GIANT,                    OBJECT_GI_PURSE,        GID_WALLET_GIANT,     0x5F,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_NONE);
    itemTable[RG_TYCOON_WALLET] =                       Item(RG_TYCOON_WALLET,                    Text{ "Tycoon Wallet", "Bourse de Magnat", "Goldene Geldbörse" },                                                                    ITEMTYPE_ITEM,              RG_TYCOON_WALLET,     true,  LOGIC_PROGRESSIVE_WALLET,           RHT_TYCOON_WALLET,                     RG_TYCOON_WALLET,                     OBJECT_GI_PURSE,        GID_WALLET_GIANT,     TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_CHILD_WALLET] =                        Item(RG_CHILD_WALLET,                     Text{ "Child Wallet", "Petite Bourse", "Kindergeldbörse" },                                                                        ITEMTYPE_ITEM,              RG_CHILD_WALLET,      true,  LOGIC_PROGRESSIVE_WALLET,           RHT_CHILD_WALLET,                      RG_CHILD_WALLET,                      OBJECT_GI_PURSE,        GID_WALLET_ADULT,     TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_DEKU_NUT_CAPACITY_30] =                Item(RG_DEKU_NUT_CAPACITY_30,             Text{ "Deku Nut Capacity (30)", "Capacité de noix Mojo (30)", "Deku-Nuß-Kapazität (30)" },                                           ITEMTYPE_ITEM,              GI_NUT_UPGRADE_30,    true,  LOGIC_PROGRESSIVE_NUT_BAG,          RHT_DEKU_NUT_CAPACITY_30,              ITEM_NUT_UPGRADE_30,                  OBJECT_GI_NUTS,         GID_NUTS,             0xA7,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_DEKU_NUT_CAPACITY_40] =                Item(RG_DEKU_NUT_CAPACITY_40,             Text{ "Deku Nut Capacity (40)", "Capacité de noix Mojo (40)", "Deku-Nuß-Kapazität (40)" },                                           ITEMTYPE_ITEM,              GI_NUT_UPGRADE_40,    true,  LOGIC_PROGRESSIVE_NUT_BAG,          RHT_DEKU_NUT_CAPACITY_40,              ITEM_NUT_UPGRADE_40,                  OBJECT_GI_NUTS,         GID_NUTS,             0xA8,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_DEKU_STICK_CAPACITY_20] =              Item(RG_DEKU_STICK_CAPACITY_20,           Text{ "Deku Stick Capacity (20)", "Capacité de Bâtons Mojo (20)", "Deku-Stab-Kapazität (20)" },                                      ITEMTYPE_ITEM,              GI_STICK_UPGRADE_20,  true,  LOGIC_PROGRESSIVE_STICK_BAG,        RHT_DEKU_STICK_CAPACITY_20,            ITEM_STICK_UPGRADE_20,                OBJECT_GI_STICK,        GID_STICK,            0x90,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_DEKU_STICK_CAPACITY_30] =              Item(RG_DEKU_STICK_CAPACITY_30,           Text{ "Deku Stick Capacity (30)", "Capacité de Bâtons Mojo (30)", "Deku-Stab-Kapazität (30)" },                                      ITEMTYPE_ITEM,              GI_STICK_UPGRADE_30,  true,  LOGIC_PROGRESSIVE_STICK_BAG,        RHT_DEKU_STICK_CAPACITY_30,            ITEM_STICK_UPGRADE_30,                OBJECT_GI_STICK,        GID_STICK,            0x91,                        0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
    itemTable[RG_MAGIC_SINGLE] =                        Item(RG_MAGIC_SINGLE,                     Text{ "Magic Meter", "Jauge de Magie", "Magisches Maß" },                                                                            ITEMTYPE_ITEM,              0x8A,                 true,  LOGIC_PROGRESSIVE_MAGIC,            RHT_MAGIC_SINGLE,                      RG_MAGIC_SINGLE,                      OBJECT_GI_MAGICPOT,     GID_MAGIC_SMALL,      0xE4,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);
    itemTable[RG_MAGIC_DOUBLE] =                        Item(RG_MAGIC_DOUBLE,                     Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verbessertes Magisches Maß" },                                            ITEMTYPE_ITEM,              0x8A,                 true,  LOGIC_PROGRESSIVE_MAGIC,            RHT_MAGIC_DOUBLE,                      RG_MAGIC_DOUBLE,                      OBJECT_GI_MAGICPOT,     GID_MAGIC_LARGE,      0xE8,                        0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
    itemTable[RG_TRIFORCE_PIECE] =                      Item(RG_TRIFORCE_PIECE,                   Text{ "Triforce Piece", "Triforce Piece", "Triforce-Fragment" },                                                                     ITEMTYPE_ITEM,              0xDF,                 true,  LOGIC_TRIFORCE_PIECES,              RHT_TRIFORCE_PIECE,                    RG_TRIFORCE_PIECE,                    OBJECT_GI_BOMB_2,       GID_TRIFORCE_PIECE,   TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG,  ITEM_CATEGORY_MAJOR,  MOD_RANDOMIZER);

    // Init itemNameToEnum
    for (auto& item : itemTable) {
        // Easiest way to filter out all the empty values from the array, since we still technically want the 0/RG_NONE
        // entry
        if (item.GetName().english.empty()) {
            continue;
        }
        itemNameToEnum[item.GetName().english] = item.GetRandomizerGet();
        itemNameToEnum[item.GetName().french] = item.GetRandomizerGet();
    }
}

Item& Rando::StaticData::RetrieveItem(const RandomizerGet rgid) {
    return itemTable[rgid];
}

Item& Rando::StaticData::ItemFromGIID(const int giid) {
    uint32_t index = 0;
    while (index < RG_MAX) {
        if (itemTable[index].GetItemID() == giid) {
            return itemTable[index];
        }
        index++;
    }

    // there are vanilla items that don't exist in the item table we're reading from here
    // if we made it this far, it means we didn't find an item in the table
    // if we don't return anything, the game will crash, so, as a workaround, return greg
    return itemTable[RG_GREEN_RUPEE];
}

std::array<Item, RG_MAX>& Rando::StaticData::GetItemTable() {
    return itemTable;
}
