@@ -191,19 +191,26 @@ <h2 id="journal-title">SIGNAL LOG</h2>
191191} ) ) ;
192192let progressStorage = null ;
193193try { progressStorage = window . localStorage ; } catch { }
194+ const loadedProgress = LittleAndroidProgress . loadProgress ( progressStorage ) ;
194195const savedProgress = LittleAndroidProgress . scopeProgressToChallenge (
195- LittleAndroidProgress . loadProgress ( progressStorage ) ,
196+ loadedProgress ,
196197 dailyChallenge . dateKey ,
197198) ;
199+ if ( loadedProgress . challengeDate !== savedProgress . challengeDate ) {
200+ LittleAndroidProgress . saveProgress ( progressStorage , savedProgress ) ;
201+ }
198202const feedback = LittleAndroidFeedback . createFeedbackController ( window , progressStorage ) ;
199203const metrics = LittleAndroidEngagement . createLocalMetrics ( progressStorage ) ;
200204metrics . increment ( 'sessions' ) ;
205+ let progressGeneration = savedProgress . generation ;
201206for ( const fragment of signalFragments ) {
202207 fragment . discovered = savedProgress . discoveredFragments . includes ( fragment . id ) ;
203208 fragment . collected = savedProgress . collectedFragments . includes ( fragment . id ) ;
204209}
205210const discoveredNPCs = new Set ( savedProgress . discoveredNPCs ) ;
206- const quest = { complete : savedProgress . complete } ;
211+ const quest = {
212+ complete : savedProgress . complete || signalFragments . every ( fragment => fragment . collected ) ,
213+ } ;
207214
208215function isWalkable ( tx , ty ) {
209216 if ( tx < 0 || ty < 0 || tx >= MW || ty >= MH ) return false ;
@@ -998,6 +1005,7 @@ <h2 id="journal-title">SIGNAL LOG</h2>
9981005 return {
9991006 version : LittleAndroidProgress . SAVE_VERSION ,
10001007 challengeDate : dailyChallenge . dateKey ,
1008+ generation : progressGeneration ,
10011009 discoveredFragments : signalFragments . filter ( fragment => fragment . discovered ) . map ( fragment => fragment . id ) ,
10021010 collectedFragments : signalFragments . filter ( fragment => fragment . collected ) . map ( fragment => fragment . id ) ,
10031011 discoveredNPCs : [ ...discoveredNPCs ] ,
@@ -1006,12 +1014,26 @@ <h2 id="journal-title">SIGNAL LOG</h2>
10061014}
10071015
10081016function persistProgress ( ) {
1009- const latest = LittleAndroidProgress . scopeProgressToChallenge (
1010- LittleAndroidProgress . loadProgress ( progressStorage ) ,
1011- dailyChallenge . dateKey ,
1017+ const stored = LittleAndroidProgress . loadProgress ( progressStorage ) ;
1018+ if ( stored . challengeDate && stored . challengeDate !== dailyChallenge . dateKey ) return false ;
1019+ const latest = LittleAndroidProgress . scopeProgressToChallenge ( stored , dailyChallenge . dateKey ) ;
1020+ const merged = LittleAndroidProgress . mergeProgress (
1021+ latest ,
1022+ currentProgress ( ) ,
1023+ signalFragments . map ( fragment => fragment . id ) ,
10121024 ) ;
1013- const merged = LittleAndroidProgress . mergeProgress ( latest , currentProgress ( ) ) ;
1025+ progressGeneration = merged . generation ;
1026+ for ( const fragment of signalFragments ) {
1027+ fragment . discovered = merged . discoveredFragments . includes ( fragment . id ) ;
1028+ fragment . collected = merged . collectedFragments . includes ( fragment . id ) ;
1029+ }
1030+ discoveredNPCs . clear ( ) ;
1031+ for ( const identity of merged . discoveredNPCs ) discoveredNPCs . add ( identity ) ;
1032+ quest . complete = merged . complete ;
1033+ document . body . classList . toggle ( 'world-restored' , quest . complete ) ;
1034+ updateQuestUI ( ) ;
10141035 LittleAndroidProgress . saveProgress ( progressStorage , merged ) ;
1036+ return merged ;
10151037}
10161038
10171039function rememberNPC ( npc ) {
@@ -1071,7 +1093,9 @@ <h2 id="journal-title">SIGNAL LOG</h2>
10711093 discoveredNPCs . clear ( ) ;
10721094 quest . complete = false ;
10731095 document . body . classList . remove ( 'world-restored' ) ;
1074- LittleAndroidProgress . clearProgress ( progressStorage ) ;
1096+ const storedGeneration = LittleAndroidProgress . loadProgress ( progressStorage ) . generation ;
1097+ progressGeneration = Math . max ( progressGeneration , storedGeneration ) + 1 ;
1098+ LittleAndroidProgress . saveProgress ( progressStorage , currentProgress ( ) ) ;
10751099 updateQuestUI ( ) ;
10761100 updateJournal ( ) ;
10771101 showStatus ( 'SIGNAL SEARCH RESTARTED' , 2 ) ;
@@ -1085,8 +1109,7 @@ <h2 id="journal-title">SIGNAL LOG</h2>
10851109 confirmReset ( message ) :
10861110 typeof window . confirm === 'function' && window . confirm ( message ) ;
10871111 if ( ! confirmed ) return false ;
1088- resetQuest ( ) ;
1089- return true ;
1112+ return resetQuest ( ) ;
10901113}
10911114
10921115function performAction ( ) {
0 commit comments