My novice cheat engine skill no work on this one, fellas. Grind incoming.
I also first tried cheat engine without success. Then I realized this is a chromium game. Ran it with following console command:
Code:
.\"Bus Voyeur.exe" --auto-open-devtools-for-tabs
And while the game is running I pressed F12 to open the DevTools!
In the Application tab, under storage, IndexedDB I found the game save/persistence parameters. They are stored in a horrible convoluted way. It's just a text that can be parsed to JSON / JS object. And no indicators about what number does what.
Luckily I recognized the amount of coins I have and changing/increasing it let me buy more upgrades.
Went to the Source tab > Snippets > +new Snippet
and added following logic that reads and parses the parameters into a JS object:
Code:
const request = indexedDB.open("c3-localstorage-2m2oqhlgof90t", 2);
request.onerror = (event) => {
console.log("error");
};
request.onsuccess = (event) => {
console.log("success");
let db = event.target.result;
let transaction = db.transaction("keyvaluepairs", "readonly");
let objectStore = transaction.objectStore("keyvaluepairs");
const getRequest = objectStore.get('Store_Unlocks');
getRequest.onsuccess = (e) => {
console.log(e);
let str = e.target.result;
store = JSON.parse(str);
console.log('Store_Unlocks', store);
};
getRequest.onerror = (e) => {
console.error('Error retrieving data:', e.target.error);
};
const getRequest2 = objectStore.get('Girl_Unlocks');
getRequest2.onsuccess = (e) => {
let str = e.target.result;
girl = JSON.parse(str);
console.log('Girl_Unlocks', girl);
};
getRequest2.onerror = (e) => {
console.error('Error retrieving data:', e.target.error);
};
};
Then used a separate script to change the values I want and persist/store them back to IndexedDb. Following snippet gave me 9999 coins.
Code:
const request = indexedDB.open("c3-localstorage-2m2oqhlgof90t", 2);
request.onerror = (event) => {
console.log("error");
};
request.onsuccess = (event) => {
console.log("success");
let db = event.target.result;
let transaction = db.transaction("keyvaluepairs", "readwrite");
let objectStore = transaction.objectStore("keyvaluepairs");
let store2 = store;
store2["data"][5][0][0] = 9999;
let store2Str = JSON.stringify(store2);
const putRequest = objectStore.put(store2Str, "Store_Unlocks");
putRequest.onsuccess = () => {
console.log('Data written successfully!');
};
putRequest.onerror = (e) => {
console.error('Error writing data:', e.target.error);
};
};
using which I unlocked all upgrades:
which was not particularly helpful
I hope others can utilize this approach and find means of unlocking gallery etc. ^_^