from BaseClasses import Item from .GameID import jak1_name, jak1_max from .locs import (OrbLocations as Orbs, CellLocations as Cells, ScoutLocations as Scouts, SpecialLocations as Specials, OrbCacheLocations as Caches) class JakAndDaxterItem(Item): game: str = jak1_name # Power Cells are generic, fungible, interchangeable items. Every cell is indistinguishable from every other. cell_item_table = { 0: "Power Cell", } # Scout flies are interchangeable within their respective sets of 7. Notice the level name after each item. # Also, notice that their Item ID equals their respective Power Cell's Location ID. This is necessary for # game<->archipelago communication. scout_item_table = { 95: "Scout Fly - Geyser Rock", 75: "Scout Fly - Sandover Village", 7: "Scout Fly - Forbidden Jungle", 20: "Scout Fly - Sentinel Beach", 28: "Scout Fly - Misty Island", 68: "Scout Fly - Fire Canyon", 76: "Scout Fly - Rock Village", 57: "Scout Fly - Precursor Basin", 49: "Scout Fly - Lost Precursor City", 43: "Scout Fly - Boggy Swamp", 88: "Scout Fly - Mountain Pass", 77: "Scout Fly - Volcanic Crater", 85: "Scout Fly - Spider Cave", 65: "Scout Fly - Snowy Mountain", 90: "Scout Fly - Lava Tube", 91: "Scout Fly - Citadel", # Had to shorten, it was >32 characters. } # Orbs are also generic and interchangeable. # These items are only used by Orbsanity, and only one of these # items will be used corresponding to the chosen bundle size. orb_item_table = { 1: "1 Precursor Orb", 2: "2 Precursor Orbs", 4: "4 Precursor Orbs", 5: "5 Precursor Orbs", 8: "8 Precursor Orbs", 10: "10 Precursor Orbs", 16: "16 Precursor Orbs", 20: "20 Precursor Orbs", 25: "25 Precursor Orbs", 40: "40 Precursor Orbs", 50: "50 Precursor Orbs", 80: "80 Precursor Orbs", 100: "100 Precursor Orbs", 125: "125 Precursor Orbs", 200: "200 Precursor Orbs", 250: "250 Precursor Orbs", 400: "400 Precursor Orbs", 500: "500 Precursor Orbs", 1000: "1000 Precursor Orbs", 2000: "2000 Precursor Orbs", } # These are special items representing unique unlocks in the world. Notice that their Item ID equals their # respective Location ID. Like scout flies, this is necessary for game<->archipelago communication. # TODO - These numbers of checks may be inaccurate post-region refactor. special_item_table = { 5: "Fisherman's Boat", # Unlocks 14 checks in Misty Island 4: "Jungle Elevator", # Unlocks 2 checks in Forbidden Jungle 2: "Blue Eco Switch", # Unlocks 1 check in Jungle and 1 in Beach 17: "Flut Flut", # Unlocks 2 checks in Swamp and 2 in Snowy 33: "Warrior's Pontoons", # Unlocks 14 checks in Swamp and everything post-Rock Village 105: "Snowy Mountain Gondola", # Unlocks 15 checks in Snowy Mountain 60: "Yellow Eco Switch", # Unlocks 1 check in Pass and 1 in Snowy 63: "Snowy Fort Gate", # Unlocks 3 checks in Snowy Mountain 71: "Freed The Blue Sage", # 1 of 3 unlocks for the final staircase and 2 checks in Citadel 72: "Freed The Red Sage", # 1 of 3 unlocks for the final staircase and 2 checks in Citadel 73: "Freed The Yellow Sage", # 1 of 3 unlocks for the final staircase and 2 checks in Citadel 70: "Freed The Green Sage", # Unlocks the final elevator } # These are the move items for move randomizer. Notice that their Item ID equals some of the Orb Cache Location ID's. # This was 100% arbitrary. There's no reason to tie moves to orb caches except that I need a place to put them. ;_; move_item_table = { 10344: "Crouch", 10369: "Crouch Jump", 11072: "Crouch Uppercut", 12634: "Roll", 12635: "Roll Jump", 10945: "Double Jump", 14507: "Jump Dive", 14838: "Jump Kick", 23348: "Punch", 23349: "Punch Uppercut", 23350: "Kick", # 24038: "Orb Cache at End of Blast Furnace", # TODO - IDK, we didn't need all of the orb caches for move rando. # 24039: "Orb Cache at End of Launch Pad Room", # 24040: "Orb Cache at Start of Launch Pad Room", } # All Items # While we're here, do all the ID conversions needed. item_table = { **{Cells.to_ap_id(k): cell_item_table[k] for k in cell_item_table}, **{Scouts.to_ap_id(k): scout_item_table[k] for k in scout_item_table}, **{Specials.to_ap_id(k): special_item_table[k] for k in special_item_table}, **{Caches.to_ap_id(k): move_item_table[k] for k in move_item_table}, **{Orbs.to_ap_id(k): orb_item_table[k] for k in orb_item_table}, jak1_max: "Green Eco Pill" # Filler item. }