X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2Ftracker.js;h=2bc477bff1b632813829f7d4a3ee944d62e6fb57;hb=5fe70ee6bc5380c556169756a375956799093604;hp=bc18847fcc10e47ad7f0a8c8405b64ce0323a37b;hpb=24489254a5d05efd6fe7dceb2cffe5fdb49ab7b7;p=alttp.git diff --git a/resources/js/helpers/tracker.js b/resources/js/helpers/tracker.js index bc18847..2bc477b 100644 --- a/resources/js/helpers/tracker.js +++ b/resources/js/helpers/tracker.js @@ -1765,11 +1765,15 @@ const collectUnderworld = (state, data) => { }); }; -export const computeState = (data, prizeMap) => { +export const computeState = (config, data, prizeMap) => { const state = {}; collectInventory(state, data.slice(SRAM_ADDR.INV_START), prizeMap); collectOverworld(state, data); collectUnderworld(state, data.slice(SRAM_ADDR.ROOM_DATA_START)); + const amounts = getDungeonAmounts(config, state); + DUNGEONS.forEach(dungeon => { + state[`${dungeon.id}-checks`] = amounts[dungeon.id]; + }); return state; }; @@ -1804,12 +1808,54 @@ const getDungeonAmounts = (config, state) => { return amounts; }; -export const mergeStates = (config, cur, inc) => { - const next = { ...cur, ...inc }; - const amounts = getDungeonAmounts(config, inc); +export const mergeStates = (autoState, manualState) => { + const next = { ...autoState }; + BOOLEAN_STATES.forEach(name => { + if (manualState[name]) { + next[name] = true; + } + }); + INTEGER_STATES.forEach(name => { + next[name] = Math.max(autoState[name] || 0, manualState[name] || 0); + }); DUNGEONS.forEach(dungeon => { - next[`${dungeon.id}-checks`] = amounts[dungeon.id]; + next[`${dungeon.id}-small-key`] += manualState[`${dungeon.id}-small-key`] || 0; + next[`${dungeon.id}-checks`] += manualState[`${dungeon.id}-checks`] || 0; + if (manualState[`${dungeon.id}-big-key`]) { + next[`${dungeon.id}-big-key`] = true; + } + if (manualState[`${dungeon.id}-compass`]) { + next[`${dungeon.id}-compass`] = true; + } + if (manualState[`${dungeon.id}-map`]) { + next[`${dungeon.id}-map`] = true; + } + if (manualState[`${dungeon.id}-boss-defeated`]) { + next[`${dungeon.id}-boss-defeated`] = true; + } + if (manualState[`${dungeon.id}-prize`] && + manualState[`${dungeon.id}-prize`] !== 'crystal' + ) { + next[`${dungeon.id}-prize`] = manualState[`${dungeon.id}-prize`]; + } else if (!next[`${dungeon.id}-prize`]) { + next[`${dungeon.id}-prize`] = 'crystal'; + } + if (manualState[`${dungeon.id}-prize-acquired`]) { + next[`${dungeon.id}-prize-acquired`] = true; + } + }); + OVERWORLD_LOCATIONS.forEach(loc => { + if (manualState[loc.id]) { + next[loc.id] = true; + } + }); + UNDERWORLD_LOCATIONS.forEach(loc => { + if (manualState[loc.id]) { + next[loc.id] = true; + } }); + next['mm-medallion'] = manualState['mm-medallion']; + next['tr-medallion'] = manualState['tr-medallion']; //console.log(next); return next; };