X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2Ftracker.js;h=f3d4bb4120b92665b0716f2213d94e652fc794af;hb=HEAD;hp=6307eda6f026824251eb6e36ebdede95728bbcd0;hpb=cce28e8619fe87d4be33f82df9a5ec16b2ad9cf6;p=alttp.git diff --git a/resources/js/helpers/tracker.js b/resources/js/helpers/tracker.js index 6307eda..f3d4bb4 100644 --- a/resources/js/helpers/tracker.js +++ b/resources/js/helpers/tracker.js @@ -84,6 +84,8 @@ export const BOSSES = [ export const CONFIG = { bossShuffle: false, + checkCalculation: 'room-data', + compactKeysanity: true, glitches: 'none', mapLayout: 'horizontal', showMap: 'situational', @@ -1618,12 +1620,21 @@ export const shouldShowDungeonItem = (config, which) => { case 'always': return true; case 'situational': - return wild; + return wild || (which === 'Compass' && config.bossShuffle); case 'never': return false; } }; +export const showsFullKeysanity = (config) => + shouldShowDungeonItem(config, 'Map') && + shouldShowDungeonItem(config, 'Compass') && + shouldShowDungeonItem(config, 'Small') && + shouldShowDungeonItem(config, 'Big'); + +export const shouldCompactKeysanity = (config) => + config.compactKeysanity && showsFullKeysanity(config); + export const toggleBoolean = name => state => ({ ...state, [name]: !state[name], @@ -1857,10 +1868,26 @@ const collectInventory = (state, data, prizeMap) => { state[`${dungeon.id}-compass`] = !!(compass & dungeon.mask); state[`${dungeon.id}-small-key`] = data[INV_ADDR.RANDO_KEY_START + dungeon.offset]; state[`${dungeon.id}-big-key`] = !!(bigKey & dungeon.mask); + state[`${dungeon.id}-checks-collected`] = + data[INV_ADDR.RANDO_CHECKS_START + dungeon.offset]; if (dungeon.prize) { const isCrystal = prizeMap[dungeon.offset].isCrystal; const prizeFlags = data[isCrystal ? INV_ADDR.CRYSTALS : INV_ADDR.PENDANTS]; - state[`${dungeon.id}-prize-acquired`] = !!(prizeFlags & prizeMap[dungeon.offset].mask); + const prizeAcquired = !!(prizeFlags & prizeMap[dungeon.offset].mask); + state[`${dungeon.id}-prize-acquired`] = prizeAcquired; + if (prizeAcquired) { + if (!isCrystal) { + if (prizeMap[dungeon.offset].mask === 1) { + state[`${dungeon.id}-prize`] = 'red-pendant'; + } else if (prizeMap[dungeon.offset].mask === 2) { + state[`${dungeon.id}-prize`] = 'blue-pendant'; + } else if (prizeMap[dungeon.offset].mask === 4) { + state[`${dungeon.id}-prize`] = 'green-pendant'; + } + } else { + state[`${dungeon.id}-prize`] = 'crystal'; + } + } } }); }; @@ -1885,11 +1912,15 @@ const getDungeonAmounts = (config, state) => { DUNGEONS.forEach(dungeon => { let amount = 0; let total = dungeon.checks.length; - dungeon.checks.forEach(check => { - if (state[check]) { - ++amount; - } - }); + if (config.checkCalculation === 'inventory') { + amount = state[`${dungeon.id}-checks-collected`]; + } else { + dungeon.checks.forEach(check => { + if (state[check]) { + ++amount; + } + }); + } if (!config.wildMap && state[`${dungeon.id}-map`]) { --amount; --total;