diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2ccca07..9441648 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -51,6 +51,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 +<<<<<<< HEAD + - name: Set App Version + run: node -e "const fs = require('fs'); const ver = fs.readFileSync('ver', 'utf8').trim(); const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); pkg.version = ver + '.${{ github.run_number }}'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)); if(fs.existsSync('electron/package.json')){const epkg = JSON.parse(fs.readFileSync('electron/package.json', 'utf8')); epkg.version = pkg.version; fs.writeFileSync('electron/package.json', JSON.stringify(epkg, null, 2));} console.log('Version set to ' + pkg.version);" +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} @@ -149,6 +154,11 @@ jobs: app_type: [bundled, pwa] steps: - uses: actions/checkout@v4 +<<<<<<< HEAD + - name: Set App Version + run: node -e "const fs = require('fs'); const ver = fs.readFileSync('ver', 'utf8').trim(); const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); pkg.version = ver + '.${{ github.run_number }}'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)); if(fs.existsSync('electron/package.json')){const epkg = JSON.parse(fs.readFileSync('electron/package.json', 'utf8')); epkg.version = pkg.version; fs.writeFileSync('electron/package.json', JSON.stringify(epkg, null, 2));} console.log('Version set to ' + pkg.version);" +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} @@ -242,6 +252,12 @@ jobs: npx cap sync android cd android +<<<<<<< HEAD + VERSION=$(cat ../ver | tr -d '\r\n').${{ github.run_number }} + sed -i "s/versionName \".*\"/versionName \"$VERSION\"/g" app/build.gradle + sed -i "s/versionCode .*/versionCode ${{ github.run_number }}/g" app/build.gradle +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 ./gradlew assembleDebug ./gradlew bundleDebug @@ -272,7 +288,12 @@ jobs: mkdir -p deb-package/usr/share/applications mkdir -p deb-package/usr/share/icons/hicolor/512x512/apps +<<<<<<< HEAD + VERSION=$(cat ver | tr -d '\r\n').${{ github.run_number }} + sed -e "s|\${AppName}|$APP_NAME|g" -e "s|Version: 1.0.0|Version: $VERSION|g" .pwa/linux-control > deb-package/DEBIAN/control +======= sed -e "s|\${AppName}|$APP_NAME|g" .pwa/linux-control > deb-package/DEBIAN/control +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 sed -e "s|\${ManifestUrl}|$MANIFEST_URL|g" .pwa/linux-launcher.sh > deb-package/usr/bin/$APP_NAME chmod +x deb-package/usr/bin/$APP_NAME @@ -285,7 +306,11 @@ jobs: sudo apt-get update && sudo apt-get install -y rpm mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} +<<<<<<< HEAD + sed -e "s|\${AppName}|$APP_NAME|g" -e "s|\${Workspace}|$GITHUB_WORKSPACE|g" -e "s|Version: 1.0.0|Version: $VERSION|g" .pwa/linux.spec > rpmbuild/SPECS/pwa.spec +======= sed -e "s|\${AppName}|$APP_NAME|g" -e "s|\${Workspace}|$GITHUB_WORKSPACE|g" .pwa/linux.spec > rpmbuild/SPECS/pwa.spec +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 rpmbuild -bb --define "_topdir $GITHUB_WORKSPACE/rpmbuild" rpmbuild/SPECS/pwa.spec cp rpmbuild/RPMS/noarch/*.rpm . @@ -327,6 +352,11 @@ jobs: app_type: [bundled, pwa] steps: - uses: actions/checkout@v4 +<<<<<<< HEAD + - name: Set App Version + run: node -e "const fs = require('fs'); const ver = fs.readFileSync('ver', 'utf8').trim(); const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); pkg.version = ver + '.${{ github.run_number }}'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)); if(fs.existsSync('electron/package.json')){const epkg = JSON.parse(fs.readFileSync('electron/package.json', 'utf8')); epkg.version = pkg.version; fs.writeFileSync('electron/package.json', JSON.stringify(epkg, null, 2));} console.log('Version set to ' + pkg.version);" +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} @@ -441,8 +471,14 @@ jobs: Copy-Item $IconSrc "$AppDir\Assets\Square44x44Logo.png" Copy-Item $IconSrc "$AppDir\Assets\SplashScreen.png" +<<<<<<< HEAD + $Version = (Get-Content -Path "ver" -Raw).Trim() + "." + $env:GITHUB_RUN_NUMBER + ".0" + $ManifestContent = Get-Content -Path ".pwa/windows-bundled.appxmanifest.xml" -Raw + $ManifestContent = $ManifestContent -replace '\$\{Prefix\}', $Prefix -replace 'Version="1\.0\.0\.0"', "Version=`"$Version`"" +======= $ManifestContent = Get-Content -Path ".pwa/windows-bundled.appxmanifest.xml" -Raw $ManifestContent = $ManifestContent -replace '\$\{Prefix\}', $Prefix +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 Set-Content -Path "$AppDir\AppxManifest.xml" -Value $ManifestContent $MakeAppx = (Get-ChildItem -Path "C:\Program Files (x86)\Windows Kits\10\bin\*\x64\makeappx.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1).FullName @@ -477,8 +513,14 @@ jobs: Copy-Item $IconSrc "$AppDir\Assets\Square44x44Logo.png" Copy-Item $IconSrc "$AppDir\Assets\SplashScreen.png" +<<<<<<< HEAD + $Version = (Get-Content -Path "ver" -Raw).Trim() + "." + $env:GITHUB_RUN_NUMBER + ".0" + $ManifestContent = Get-Content -Path ".pwa/windows-pwa.appxmanifest.xml" -Raw + $ManifestContent = $ManifestContent -replace '\$\{Prefix\}', $Prefix -replace '\$\{ManifestUrl\}', $ManifestUrl -replace 'Version="1\.0\.0\.0"', "Version=`"$Version`"" +======= $ManifestContent = Get-Content -Path ".pwa/windows-pwa.appxmanifest.xml" -Raw $ManifestContent = $ManifestContent -replace '\$\{Prefix\}', $Prefix -replace '\$\{ManifestUrl\}', $ManifestUrl +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 Set-Content -Path "$AppDir\AppxManifest.xml" -Value $ManifestContent $MakeAppx = (Get-ChildItem -Path "C:\Program Files (x86)\Windows Kits\10\bin\*\x64\makeappx.exe" -ErrorAction SilentlyContinue | Sort-Object FullName -Descending | Select-Object -First 1).FullName @@ -518,6 +560,11 @@ jobs: app_type: [bundled, pwa] steps: - uses: actions/checkout@v4 +<<<<<<< HEAD + - name: Set App Version + run: node -e "const fs = require('fs'); const ver = fs.readFileSync('ver', 'utf8').trim(); const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); pkg.version = ver + '.${{ github.run_number }}'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)); if(fs.existsSync('electron/package.json')){const epkg = JSON.parse(fs.readFileSync('electron/package.json', 'utf8')); epkg.version = pkg.version; fs.writeFileSync('electron/package.json', JSON.stringify(epkg, null, 2));} console.log('Version set to ' + pkg.version);" +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} @@ -611,6 +658,12 @@ jobs: npx cap add ios npx @capacitor/assets generate --ios npx cap sync ios +<<<<<<< HEAD + VERSION=$(cat ver | tr -d '\r\n').${{ github.run_number }} + /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" ios/App/App/Info.plist + /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${{ github.run_number }}" ios/App/App/Info.plist +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 cd ios/App xcodebuild -project App.xcodeproj -scheme App -configuration Debug -sdk iphonesimulator -derivedDataPath build xcodebuild archive -project App.xcodeproj -scheme App -configuration Release -archivePath build/App.xcarchive CODE_SIGNING_ALLOWED=NO || true @@ -642,6 +695,11 @@ jobs: app_type: [bundled, pwa] steps: - uses: actions/checkout@v4 +<<<<<<< HEAD + - name: Set App Version + run: node -e "const fs = require('fs'); const ver = fs.readFileSync('ver', 'utf8').trim(); const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); pkg.version = ver + '.${{ github.run_number }}'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)); if(fs.existsSync('electron/package.json')){const epkg = JSON.parse(fs.readFileSync('electron/package.json', 'utf8')); epkg.version = pkg.version; fs.writeFileSync('electron/package.json', JSON.stringify(epkg, null, 2));} console.log('Version set to ' + pkg.version);" +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 - name: Download Web Artifact uses: actions/download-artifact@v4 @@ -678,11 +736,20 @@ jobs: cp .pwa/icons-$build_prefix/pwa/icon-512x512.png ext-firefox/icon.png # 1. Chromium Extension (Chrome, Edge, Brave, Opera, ChromeOS) +<<<<<<< HEAD + VERSION=$(cat ver | tr -d '\r\n').${{ github.run_number }} + sed -e "s|\${AppName}|$APP_NAME|g" -e "s|\"version\": \"1.0.0\"|\"version\": \"$VERSION\"|g" .pwa/chromium-manifest.json > ext-chromium/manifest.json + sed -e "s|\${TargetUrl}|$TARGET_URL|g" .pwa/extension-background.js > ext-chromium/background.js + + # 2. Firefox Extension + sed -e "s|\${AppName}|$APP_NAME|g" -e "s|\${Prefix}|$build_prefix|g" -e "s|\"version\": \"1.0.0\"|\"version\": \"$VERSION\"|g" .pwa/firefox-manifest.json > ext-firefox/manifest.json +======= sed -e "s|\${AppName}|$APP_NAME|g" .pwa/chromium-manifest.json > ext-chromium/manifest.json sed -e "s|\${TargetUrl}|$TARGET_URL|g" .pwa/extension-background.js > ext-chromium/background.js # 2. Firefox Extension sed -e "s|\${AppName}|$APP_NAME|g" -e "s|\${Prefix}|$build_prefix|g" .pwa/firefox-manifest.json > ext-firefox/manifest.json +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 sed -e "s|\${TargetUrl}|$TARGET_URL|g" .pwa/extension-background.js > ext-firefox/background.js # Zip the extensions (Ready for Chrome Web Store & Mozilla Add-ons) diff --git a/audio_to_ogg.py b/audio_to_ogg.py new file mode 100644 index 0000000..0412afd --- /dev/null +++ b/audio_to_ogg.py @@ -0,0 +1,39 @@ +import os +import subprocess +from pathlib import Path + +def convert_to_ogg(input_folder): + formats = [".mp3", ".wav", ".m4a", ".flac", ".ogg"] + print("Starting batch conversion...") + + if not os.path.exists(os.path.join(input_folder, "converted")): + os.mkdir(os.path.join(input_folder, "converted")) + + for ext in formats: + for file_path in Path(input_folder).glob(f"*{ext}"): + input_file = str(file_path) + output_file = str(Path(input_folder) / "converted/" / file_path.with_suffix('.ogg').name) + command = [ + "ffmpeg", + "-i", input_file, + "-c:a", "libvorbis", + "-q:a", "5", + "-map_metadata", "-1", + "-vn", + "-ac", "1", + "-ar", "32000", + "-af", "silenceremove=start_periods=1:start_duration=0:start_threshold=-50dB", + "-y", + output_file + ] + print(f"Converting {file_path.name} to OGG...") + try: + subprocess.run(command, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + print(f" -> Saved to {output_file}") + except subprocess.CalledProcessError as e: + print(f" -> Error converting {file_path.name}. Ensure it's a valid audio file.") + print(e) + print("Done!") + +convert_to_ogg("public/sound/music") +convert_to_ogg("public/sound/sfx") \ No newline at end of file diff --git a/capacitor.config.ts b/capacitor.config.ts index e6d5008..edea02d 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -1,9 +1,22 @@ import type { CapacitorConfig } from '@capacitor/cli'; +<<<<<<< HEAD +import type { CapacitorElectronConfig } from '@capacitor-community/electron'; + +const config: CapacitorElectronConfig = { + appId: 'com.cheems.app', + appName: 'Cheems Bonk Game', + webDir: 'dist/cheems-angular/browser', + electron: { + trayIconAndMenuEnabled: false, + splashScreenEnabled: false + } +======= const config: CapacitorConfig = { appId: 'com.cheems.app', appName: 'Cheems Bonk Game', webDir: 'dist/cheems-angular/browser' +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }; export default config; diff --git a/electron/electron-builder.config.json b/electron/electron-builder.config.json index ccebe17..f8b8b92 100644 --- a/electron/electron-builder.config.json +++ b/electron/electron-builder.config.json @@ -7,6 +7,10 @@ "buildResources": "assets" }, "files": [ +<<<<<<< HEAD + "app/**/*", +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "build/**/*", "node_modules/**/*", "package.json" diff --git a/electron/src/index.ts b/electron/src/index.ts index 1d48128..bae6e2a 100644 --- a/electron/src/index.ts +++ b/electron/src/index.ts @@ -4,7 +4,10 @@ import type { MenuItemConstructorOptions } from 'electron'; import { app, MenuItem } from 'electron'; import electronIsDev from 'electron-is-dev'; import unhandled from 'electron-unhandled'; +<<<<<<< HEAD +======= import { autoUpdater } from 'electron-updater'; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 import { ElectronCapacitorApp, setupContentSecurityPolicy, setupReloadWatcher } from './setup'; @@ -45,6 +48,13 @@ if (electronIsDev) { setupContentSecurityPolicy(myCapacitorApp.getCustomURLScheme()); // Initialize our app, build windows, and load content. await myCapacitorApp.init(); +<<<<<<< HEAD + + myCapacitorApp.getMainWindow().on('close', () => { + app.quit(); + }); +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 })(); // Handle when all of our windows are close (platforms have their own expectations). diff --git a/ngsw-config.json b/ngsw-config.json index 98b3a6a..b94a116 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -17,15 +17,39 @@ } }, { +<<<<<<< HEAD + "name": "essential-assets", +======= "name": "assets", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "installMode": "prefetch", "updateMode": "prefetch", "resources": { "files": [ +<<<<<<< HEAD + "/closet.json", + "/items/*.json", + "/lang/*.lang", + "/sound/music/A_Jazz_Piano.ogg", + "/sound/sfx/hit.ogg", + "/img/cheems/normal.webp", + "/**/*.(svg|cur|woff|woff2|ttf|otf)" + ] + } + }, + { + "name": "lazy-assets", + "installMode": "lazy", + "updateMode": "lazy", + "resources": { + "files": [ + "/**/*.(jpg|jpeg|png|apng|webp|avif|gif|txt|xml|csv|ico|ogg|mp3|wav|m4a)", +======= "/**/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2|txt|json|xml|csv|ico|ogg|mp3|wav|m4a|lang)", "/closet.json", "/items/*.json", "/lang/*.lang", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "/sound/**/*", "/img/**/*", "/games/**/*" diff --git a/png_to_webp.py b/png_to_webp.py new file mode 100644 index 0000000..3d88a4a --- /dev/null +++ b/png_to_webp.py @@ -0,0 +1,18 @@ +import os +from PIL import Image + +def batch_convert_png_to_webp(folder_path, quality=85): + for filename in os.listdir(folder_path): + if filename.lower().endswith(".png"): + png_path = os.path.join(folder_path, filename) + webp_filename = os.path.splitext(filename)[0] + ".webp" + webp_path = os.path.join(folder_path, webp_filename) + + with Image.open(png_path) as img: + img.save(webp_path, "webp", quality=quality) + print(f"Converted: {filename} -> {webp_filename}") + +batch_convert_png_to_webp("public/img/cheems", 100) +batch_convert_png_to_webp("public/img/hit", 100) +batch_convert_png_to_webp("public/img/music", 100) + diff --git a/public/data/cheems.json b/public/data/cheems.json index c8fda6d..96c9240 100644 --- a/public/data/cheems.json +++ b/public/data/cheems.json @@ -2,8 +2,13 @@ { "id": "cheems_normal", "nameKey": "cheems_normal", +<<<<<<< HEAD + "img": "normal.webp", + "hitImg": "normal.webp", +======= "img": "normal.png", "hitImg": "normal.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "default": true, "storageKey": "c1", "description": "cheems_normal_desc" @@ -11,104 +16,169 @@ { "id": "cheems_little", "nameKey": "cheems_little", +<<<<<<< HEAD + "img": "little.webp", + "hitImg": "little.webp", +======= "img": "little.png", "hitImg": "little.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c2", "description": "cheems_little_desc" }, { "id": "cheems_adult", "nameKey": "cheems_adult", +<<<<<<< HEAD + "img": "adult.webp", + "hitImg": "adult.webp", +======= "img": "adult.png", "hitImg": "adult.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c3", "description": "cheems_adult_desc" }, { "id": "cheems_kid", "nameKey": "cheems_kid", +<<<<<<< HEAD + "img": "kid.webp", + "hitImg": "kid.webp", +======= "img": "kid.png", "hitImg": "kid.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c4", "description": "cheems_kid_desc" }, { "id": "cheems_mamado", "nameKey": "cheems_mamado", +<<<<<<< HEAD + "img": "mamado.webp", + "hitImg": "mamado.webp", +======= "img": "mamado.png", "hitImg": "mamado.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c5", "description": "cheems_mamado_desc" }, { "id": "cheems_pixelart", "nameKey": "cheems_pixelart", +<<<<<<< HEAD + "img": "pixelart.webp", + "hitImg": "pixelart.webp", +======= "img": "pixelart.png", "hitImg": "pixelart.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c6", "description": "cheems_pixelart_desc" }, { "id": "cheems_elegant", "nameKey": "cheems_elegant", +<<<<<<< HEAD + "img": "elegant.webp", + "hitImg": "elegant.webp", +======= "img": "elegant.png", "hitImg": "elegant.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c7", "description": "cheems_elegant_desc" }, { "id": "cheems_3d", "nameKey": "cheems_3d", +<<<<<<< HEAD + "img": "3d.webp", + "hitImg": "3d.webp", +======= "img": "3d.png", "hitImg": "3d.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c8", "description": "cheems_3d_desc" }, { "id": "cheems_black", "nameKey": "cheems_black", +<<<<<<< HEAD + "img": "black.webp", + "hitImg": "black.webp", +======= "img": "black.png", "hitImg": "black.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c9", "description": "cheems_black_desc" }, { "id": "cheems_minecraft", "nameKey": "cheems_minecraft", +<<<<<<< HEAD + "img": "cubes.webp", + "hitImg": "cubes.webp", +======= "img": "cubes.png", "hitImg": "cubes.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c10", "description": "cheems_minecraft_desc" }, { "id": "cheems_not_a_dog", "nameKey": "cheems_not_a_dog", +<<<<<<< HEAD + "img": "not_a_dog.webp", + "hitImg": "not_a_dog.webp", +======= "img": "not_a_dog.png", "hitImg": "not_a_dog.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c11", "description": "cheems_not_a_dog_desc" }, { "id": "cheems_not_a_plumber", "nameKey": "cheems_not_a_plumber", +<<<<<<< HEAD + "img": "not_a_plumber.webp", + "hitImg": "not_a_plumber.webp", +======= "img": "not_a_plumber.png", "hitImg": "not_a_plumber.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c12", "description": "cheems_not_a_plumber_desc" }, { "id": "cheems_not_ai", "nameKey": "cheems_not_ai", +<<<<<<< HEAD + "img": "not_ai.webp", + "hitImg": "not_ai.webp", +======= "img": "not_ai.png", "hitImg": "not_ai.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c13", "description": "cheems_not_ai_desc" }, { "id": "cheems_realistic", "nameKey": "cheems_realistic", +<<<<<<< HEAD + "img": "realistic.webp", + "hitImg": "realistic.webp", +======= "img": "realistic.png", "hitImg": "realistic.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "storageKey": "c14", "description": "cheems_realistic_desc" } diff --git a/public/data/music.json b/public/data/music.json index 8e0362f..80d9d51 100644 --- a/public/data/music.json +++ b/public/data/music.json @@ -7,7 +7,11 @@ "default": true, "storageKey": "m0", "description": "music_0_desc", +<<<<<<< HEAD + "cover": "img/music/no_image.webp" +======= "cover": "img/music/no_image.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_1", @@ -17,7 +21,11 @@ "default": true, "storageKey": "m1", "description": "music_1_desc", +<<<<<<< HEAD + "cover": "img/music/no_image.webp" +======= "cover": "img/music/no_image.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_2", @@ -27,7 +35,11 @@ "default": false, "storageKey": "m2", "description": "music_2_desc", +<<<<<<< HEAD + "cover": "img/music/jack_bootleg.webp" +======= "cover": "img/music/jack_bootleg.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_3", @@ -37,7 +49,11 @@ "default": false, "storageKey": "m3", "description": "music_3_desc", +<<<<<<< HEAD + "cover": "img/music/magic_night.webp" +======= "cover": "img/music/magic_night.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_4", @@ -47,7 +63,11 @@ "default": false, "storageKey": "m4", "description": "music_4_desc", +<<<<<<< HEAD + "cover": "img/music/minimalism_no9.webp" +======= "cover": "img/music/minimalism_no9.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_5", @@ -57,7 +77,11 @@ "default": false, "storageKey": "m5", "description": "music_5_desc", +<<<<<<< HEAD + "cover": "img/music/minimalism_no10.webp" +======= "cover": "img/music/minimalism_no10.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_6", @@ -67,236 +91,424 @@ "default": false, "storageKey": "m6", "description": "music_6_desc", +<<<<<<< HEAD + "cover": "img/music/when_you_smile.webp" +======= "cover": "img/music/when_you_smile.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_7", "nameKey": "music_7", +<<<<<<< HEAD + "file": "TETRIS_jack_bootleg.ogg", +======= "file": "TETRIS (Joey iLLah Bootleg) (Final).wav", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m7", "description": "music_7_desc", +<<<<<<< HEAD + "cover": "img/music/tetris_bootleg.webp" +======= "cover": "img/music/tetris_bootleg.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_8", "nameKey": "music_8", +<<<<<<< HEAD + "file": "separation.ogg", +======= "file": "separation-185196.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m8", "description": "music_8_desc", +<<<<<<< HEAD + "cover": "img/music/no_image.webp" +======= "cover": "img/music/no_image.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_9", "nameKey": "music_9", +<<<<<<< HEAD + "file": "electro-summer-positive-party.ogg", +======= "file": "electro-summer-positive-party-141081.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m9", "description": "music_9_desc", +<<<<<<< HEAD + "cover": "img/music/electro_summer_positive_party.webp" +======= "cover": "img/music/electro_summer_positive_party.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_10", "nameKey": "music_10", +<<<<<<< HEAD + "file": "titanium.ogg", +======= "file": "titanium-170190.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m10", "description": "music_10_desc", +<<<<<<< HEAD + "cover": "img/music/titanium.webp" +======= "cover": "img/music/titanium.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_11", "nameKey": "music_11", +<<<<<<< HEAD + "file": "believe-me.ogg", +======= "file": "believe-me-143530.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m11", "description": "music_11_desc", +<<<<<<< HEAD + "cover": "img/music/believe_me.webp" +======= "cover": "img/music/believe_me.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_12", "nameKey": "music_12", +<<<<<<< HEAD + "file": "city-streets.ogg", +======= "file": "city-streets-background-version-166003.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m12", "description": "music_12_desc", +<<<<<<< HEAD + "cover": "img/music/city_streets.webp" +======= "cover": "img/music/city_streets.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_13", "nameKey": "music_13", +<<<<<<< HEAD + "file": "coffee-shop.ogg", +======= "file": "coffee-shop-189585.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m13", "description": "music_13_desc", +<<<<<<< HEAD + "cover": "img/music/no_image.webp" +======= "cover": "img/music/no_image.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_14", "nameKey": "music_14", +<<<<<<< HEAD + "file": "trap-future-bass.ogg", +======= "file": "trap-future-bass-royalty-free-music-167020.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m14", "description": "music_14_desc", +<<<<<<< HEAD + "cover": "img/music/trap_future_bass.webp" +======= "cover": "img/music/trap_future_bass.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_15", "nameKey": "music_15", +<<<<<<< HEAD + "file": "bonk_the_amber.ogg", +======= "file": "bonk_the_amber.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m15", "description": "music_15_desc", +<<<<<<< HEAD + "cover": "img/music/bonk_the_amber.webp" +======= "cover": "img/music/bonk_the_amber.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_16", "nameKey": "music_16", +<<<<<<< HEAD + "file": "bonk_the_avatar.ogg", +======= "file": "bonk_the_avatar.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m16", "description": "music_16_desc", +<<<<<<< HEAD + "cover": "img/music/bonk_the_avatar.webp" +======= "cover": "img/music/bonk_the_avatar.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_17", "nameKey": "music_17", +<<<<<<< HEAD + "file": "bonus_level_bounce.ogg", +======= "file": "bonus_level_bounce.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m17", "description": "music_17_desc", +<<<<<<< HEAD + "cover": "img/music/bonus_level_bounce.webp" +======= "cover": "img/music/bonus_level_bounce.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_18", "nameKey": "music_18", +<<<<<<< HEAD + "file": "button_smash_routine.ogg", +======= "file": "button_smash_routine.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m18", "description": "music_18_desc", +<<<<<<< HEAD + "cover": "img/music/button_smash_routine.webp" +======= "cover": "img/music/button_smash_routine.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_19", "nameKey": "music_19", +<<<<<<< HEAD + "file": "cheems-chan_bonk.ogg", +======= "file": "cheems-chan_bonk.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m19", "description": "music_19_desc", +<<<<<<< HEAD + "cover": "img/music/cheems_chan_bonk.webp" +======= "cover": "img/music/cheems_chan_bonk.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_20", "nameKey": "music_20", +<<<<<<< HEAD + "file": "click_for_a_bonk.ogg", +======= "file": "click_for_a_bonk.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m20", "description": "music_20_desc", +<<<<<<< HEAD + "cover": "img/music/click_for_a_bonk.webp" +======= "cover": "img/music/click_for_a_bonk.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_21", "nameKey": "music_21", +<<<<<<< HEAD + "file": "hardwood_strike.ogg", +======= "file": "hardwood_strike.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m21", "description": "music_21_desc", +<<<<<<< HEAD + "cover": "img/music/hardwood_strike.webp" +======= "cover": "img/music/hardwood_strike.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_22", "nameKey": "music_22", +<<<<<<< HEAD + "file": "perfect_round.ogg", +======= "file": "perfect_round.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m22", "description": "music_22_desc", +<<<<<<< HEAD + "cover": "img/music/perfect_round.webp" +======= "cover": "img/music/perfect_round.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_23", "nameKey": "music_23", +<<<<<<< HEAD + "file": "pocket_change_victory.ogg", +======= "file": "pocket_change_victory.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m23", "description": "music_23_desc", +<<<<<<< HEAD + "cover": "img/music/pocket_change_victory.webp" +======= "cover": "img/music/pocket_change_victory.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_24", "nameKey": "music_24", +<<<<<<< HEAD + "file": "quick_loot_run.ogg", +======= "file": "quick_loot_run.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m24", "description": "music_24_desc", +<<<<<<< HEAD + "cover": "img/music/quick_loot_run.webp" +======= "cover": "img/music/quick_loot_run.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_25", "nameKey": "music_25", +<<<<<<< HEAD + "file": "target_in_the_sight.ogg", +======= "file": "target_in_the_sight.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m25", "description": "music_25_desc", +<<<<<<< HEAD + "cover": "img/music/target_in_the_sight.webp" +======= "cover": "img/music/target_in_the_sight.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_26", "nameKey": "music_26", +<<<<<<< HEAD + "file": "the_hammer_falls.ogg", +======= "file": "the_hammer_falls.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m26", "description": "music_26_desc", +<<<<<<< HEAD + "cover": "img/music/the_hammer_falls.webp" +======= "cover": "img/music/the_hammer_falls.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_27", "nameKey": "music_27", +<<<<<<< HEAD + "file": "the_late_commute.ogg", +======= "file": "the_late_commute.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m27", "description": "music_27_desc", +<<<<<<< HEAD + "cover": "img/music/the_late_commute.webp" +======= "cover": "img/music/the_late_commute.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_28", "nameKey": "music_28", +<<<<<<< HEAD + "file": "the_unwritten_page.ogg", +======= "file": "the_unwritten_page.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m28", "description": "music_28_desc", +<<<<<<< HEAD + "cover": "img/music/the_unwritten_page_bage.webp" +======= "cover": "img/music/the_unwritten_page_bage.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "id": "music_29", "nameKey": "music_29", +<<<<<<< HEAD + "file": "where_the_path_bends.ogg", +======= "file": "where_the_path_bends.mp3", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "basePath": "sound/music/", "default": false, "storageKey": "m29", "description": "music_29_desc", +<<<<<<< HEAD + "cover": "img/music/where_the_path_bends.webp" +======= "cover": "img/music/where_the_path_bends.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } ] \ No newline at end of file diff --git a/public/data/shop.json b/public/data/shop.json index 0339e2f..429f2ec 100644 --- a/public/data/shop.json +++ b/public/data/shop.json @@ -1,5 +1,76 @@ [ { +<<<<<<< HEAD + "_comment": "--- Upgrades ---" + }, + { + "id": "upgrade_idle_quantity_1", + "type": "upgrade", + "upgradeType": "quantity", + "upgradeValue": 1, + "priceMultiplier": 1.12, + "nameKey": "shop_upgrade_qty_1_name", + "descKey": "shop_upgrade_qty_1_desc", + "cost": 0, + "costCoins": 5, + "icon": "img/icons/report-svgrepo-com.svg", + "dailyLimit": 0 + }, + { + "id": "upgrade_idle_quantity_2", + "type": "upgrade", + "upgradeType": "quantity", + "upgradeValue": 2, + "priceMultiplier": 1.15, + "nameKey": "shop_upgrade_qty_2_name", + "descKey": "shop_upgrade_qty_2_desc", + "cost": 0, + "costCoins": 8, + "icon": "img/icons/report-svgrepo-com.svg", + "dailyLimit": 0 + }, + { + "id": "upgrade_idle_quantity_3", + "type": "upgrade", + "upgradeType": "quantity", + "upgradeValue": 3, + "priceMultiplier": 1.18, + "nameKey": "shop_upgrade_qty_3_name", + "descKey": "shop_upgrade_qty_3_desc", + "cost": 0, + "costCoins": 12, + "icon": "img/icons/report-svgrepo-com.svg", + "dailyLimit": 0 + }, + { + "id": "upgrade_idle_quantity_5", + "type": "upgrade", + "upgradeType": "quantity", + "upgradeValue": 5, + "priceMultiplier": 1.25, + "nameKey": "shop_upgrade_qty_5_name", + "descKey": "shop_upgrade_qty_5_desc", + "cost": 0, + "costCoins": 18, + "icon": "img/icons/report-svgrepo-com.svg", + "dailyLimit": 0 + }, + { + "id": "upgrade_idle_quantity_10", + "type": "upgrade", + "upgradeType": "quantity", + "upgradeValue": 10, + "priceMultiplier": 1.4, + "nameKey": "shop_upgrade_qty_10_name", + "descKey": "shop_upgrade_qty_10_desc", + "cost": 0, + "costCoins": 30, + "icon": "img/icons/report-svgrepo-com.svg", + "dailyLimit": 0 + }, + { +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "_comment": "--- Currencies ---" }, { @@ -12,7 +83,11 @@ "coinsGiven": 1, "multiplier": 1, "durationMin": 0, +<<<<<<< HEAD + "icon": "img/dogecoin.png", +======= "icon": "img/dogecoin-min.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "dailyLimit": "${daily_price_4} / 100 + 1" }, { @@ -25,7 +100,11 @@ "coinsGiven": 1, "multiplier": 1, "durationMin": 0, +<<<<<<< HEAD + "icon": "img/dogecoin.png", +======= "icon": "img/dogecoin-min.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "dailyLimit": 0 }, { @@ -38,7 +117,11 @@ "coinsGiven": 2, "multiplier": 1, "durationMin": 0, +<<<<<<< HEAD + "icon": "img/dogecoin.png", +======= "icon": "img/dogecoin-min.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "dailyLimit": 0 }, { @@ -51,7 +134,11 @@ "coinsGiven": 5, "multiplier": 1, "durationMin": 0, +<<<<<<< HEAD + "icon": "img/dogecoin.png", +======= "icon": "img/dogecoin-min.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "dailyLimit": "${daily_price_4} / 10 + 1" }, { @@ -64,7 +151,11 @@ "coinsGiven": 10, "multiplier": 1, "durationMin": 0, +<<<<<<< HEAD + "icon": "img/dogecoin.png", +======= "icon": "img/dogecoin-min.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "dailyLimit": "${daily_price_2} / 10 + 1" }, { @@ -77,7 +168,11 @@ "coinsGiven": 20, "multiplier": 1, "durationMin": 0, +<<<<<<< HEAD + "icon": "img/dogecoin.png", +======= "icon": "img/dogecoin-min.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "dailyLimit": "${daily_price_3} / 10 + 1" }, { @@ -100,7 +195,11 @@ "costCoins": 0, "costMinigames": 10, "coinsGiven": 1, +<<<<<<< HEAD + "icon": "img/dogecoin.png" +======= "icon": "img/dogecoin-min.png" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, { "_comment": "--- Boosters ---" @@ -183,7 +282,11 @@ "nameKey": "shop_boost_3x_5m_name", "descKey": "shop_boost_3x_5m_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 100, +======= "costCoins": 150, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "multiplier": 3, "durationMin": 5, "icon": "img/icons/trophy-svgrepo-com.svg", @@ -195,7 +298,11 @@ "nameKey": "shop_boost_3x_10m_name", "descKey": "shop_boost_3x_10m_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 180, +======= "costCoins": 250, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "multiplier": 3, "durationMin": 10, "icon": "img/icons/trophy-svgrepo-com.svg", @@ -207,7 +314,11 @@ "nameKey": "shop_boost_3x_20m_name", "descKey": "shop_boost_3x_20m_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 450, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "multiplier": 3, "durationMin": 20, "icon": "img/icons/trophy-svgrepo-com.svg", @@ -221,9 +332,15 @@ "type": "cheems", "nameKey": "cheems_little", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, + "costMinigames": 0, + "icon": "img/cheems/little.webp", +======= "costCoins": 500, "costMinigames": 0, "icon": "img/cheems/little.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -231,9 +348,15 @@ "type": "cheems", "nameKey": "cheems_adult", "cost": 0, +<<<<<<< HEAD + "costCoins": 450, + "costMinigames": 0, + "icon": "img/cheems/adult.webp", +======= "costCoins": 800, "costMinigames": 0, "icon": "img/cheems/adult.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -241,9 +364,15 @@ "type": "cheems", "nameKey": "cheems_kid", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 0, + "icon": "img/cheems/kid.webp", +======= "costCoins": 1000, "costMinigames": 0, "icon": "img/cheems/kid.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -251,9 +380,15 @@ "type": "cheems", "nameKey": "cheems_mamado", "cost": 0, +<<<<<<< HEAD + "costCoins": 1200, + "costMinigames": 0, + "icon": "img/cheems/mamado.webp", +======= "costCoins": 2000, "costMinigames": 0, "icon": "img/cheems/mamado.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -261,9 +396,15 @@ "type": "cheems", "nameKey": "cheems_pixelart", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 0, + "icon": "img/cheems/pixelart.webp", +======= "costCoins": 3000, "costMinigames": 0, "icon": "img/cheems/pixelart.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -271,9 +412,15 @@ "type": "cheems", "nameKey": "cheems_elegant", "cost": 0, +<<<<<<< HEAD + "costCoins": 1500, + "costMinigames": 0, + "icon": "img/cheems/elegant.webp", +======= "costCoins": 3500, "costMinigames": 0, "icon": "img/cheems/elegant.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -281,9 +428,15 @@ "type": "cheems", "nameKey": "cheems_3d", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 0, + "icon": "img/cheems/3d.webp", +======= "costCoins": 2500, "costMinigames": 0, "icon": "img/cheems/3d.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -291,9 +444,15 @@ "type": "cheems", "nameKey": "cheems_black", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 0, + "icon": "img/cheems/black.webp", +======= "costCoins": 2800, "costMinigames": 0, "icon": "img/cheems/black.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -301,9 +460,15 @@ "type": "cheems", "nameKey": "cheems_not_ai", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 0, + "icon": "img/cheems/not_ai.webp", +======= "costCoins": 2600, "costMinigames": 0, "icon": "img/cheems/not_ai.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -311,9 +476,15 @@ "type": "cheems", "nameKey": "cheems_realistic", "cost": 0, +<<<<<<< HEAD + "costCoins": 1500, + "costMinigames": 0, + "icon": "img/cheems/realistic.webp", +======= "costCoins": 5000, "costMinigames": 0, "icon": "img/cheems/realistic.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -321,9 +492,15 @@ "type": "cheems", "nameKey": "cheems_not_a_dog", "cost": 0, +<<<<<<< HEAD + "costCoins": 1200, + "costMinigames": 0, + "icon": "img/cheems/not_a_dog.webp", +======= "costCoins": 3200, "costMinigames": 0, "icon": "img/cheems/not_a_dog.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -331,9 +508,15 @@ "type": "cheems", "nameKey": "cheems_not_a_plumber", "cost": 0, +<<<<<<< HEAD + "costCoins": 1200, + "costMinigames": 1500, + "icon": "img/cheems/not_a_plumber.webp", +======= "costCoins": 4500, "costMinigames": 3000, "icon": "img/cheems/not_a_plumber.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -341,9 +524,15 @@ "type": "cheems", "nameKey": "cheems_minecraft", "cost": 0, +<<<<<<< HEAD + "costCoins": 1200, + "costMinigames": 1200, + "icon": "img/cheems/cubes.webp", +======= "costCoins": 3500, "costMinigames": 2500, "icon": "img/cheems/cubes.png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "oneTimePurchase": true }, { @@ -354,8 +543,13 @@ "type": "sound", "nameKey": "sfx_2", "cost": 0, +<<<<<<< HEAD + "costCoins": 450, + "costMinigames": 450, +======= "costCoins": 1200, "costMinigames": 2000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true }, @@ -364,8 +558,13 @@ "type": "sound", "nameKey": "sfx_3", "cost": 0, +<<<<<<< HEAD + "costCoins": 450, + "costMinigames": 450, +======= "costCoins": 1200, "costMinigames": 2000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true }, @@ -374,8 +573,13 @@ "type": "sound", "nameKey": "sfx_4", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 800, +======= "costCoins": 1500, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true }, @@ -384,8 +588,13 @@ "type": "sound", "nameKey": "sfx_5", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 800, +======= "costCoins": 1500, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true }, @@ -394,8 +603,13 @@ "type": "sound", "nameKey": "sfx_6", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, + "costMinigames": 300, +======= "costCoins": 800, "costMinigames": 1500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true }, @@ -404,8 +618,13 @@ "type": "sound", "nameKey": "sfx_7", "cost": 0, +<<<<<<< HEAD + "costCoins": 450, + "costMinigames": 450, +======= "costCoins": 1200, "costMinigames": 2000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true }, @@ -414,7 +633,11 @@ "type": "sound", "nameKey": "sfx_8", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 400, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true @@ -424,7 +647,11 @@ "type": "sound", "nameKey": "sfx_9", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true @@ -434,7 +661,11 @@ "type": "sound", "nameKey": "sfx_10", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true @@ -444,7 +675,11 @@ "type": "sound", "nameKey": "sfx_11", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true @@ -454,7 +689,11 @@ "type": "sound", "nameKey": "sfx_12", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, +======= "costCoins": 1000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/sound-svgrepo-com.svg", "oneTimePurchase": true @@ -467,7 +706,11 @@ "type": "music", "nameKey": "music_2", "cost": 0, +<<<<<<< HEAD + "costCoins": 1500, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -477,7 +720,11 @@ "type": "music", "nameKey": "music_3", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -487,7 +734,11 @@ "type": "music", "nameKey": "music_4", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -497,7 +748,11 @@ "type": "music", "nameKey": "music_5", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -507,7 +762,11 @@ "type": "music", "nameKey": "music_6", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -518,7 +777,11 @@ "nameKey": "music_7", "cost": 0, "costCoins": 1500, +<<<<<<< HEAD + "costMinigames": 1500, +======= "costMinigames": 3000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -527,7 +790,11 @@ "type": "music", "nameKey": "music_8", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -537,7 +804,11 @@ "type": "music", "nameKey": "music_9", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 900, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -547,7 +818,11 @@ "type": "music", "nameKey": "music_10", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 900, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -557,7 +832,11 @@ "type": "music", "nameKey": "music_11", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 900, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -567,7 +846,11 @@ "type": "music", "nameKey": "music_12", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -577,7 +860,11 @@ "type": "music", "nameKey": "music_13", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, +======= "costCoins": 600, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -587,7 +874,11 @@ "type": "music", "nameKey": "music_14", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 900, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -597,7 +888,11 @@ "type": "music", "nameKey": "music_15", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -607,7 +902,11 @@ "type": "music", "nameKey": "music_16", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -617,8 +916,13 @@ "type": "music", "nameKey": "music_17", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 550, +======= "costCoins": 1200, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -627,8 +931,13 @@ "type": "music", "nameKey": "music_18", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 550, +======= "costCoins": 1200, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -637,8 +946,13 @@ "type": "music", "nameKey": "music_19", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 550, +======= "costCoins": 1200, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -647,7 +961,11 @@ "type": "music", "nameKey": "music_20", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -657,7 +975,11 @@ "type": "music", "nameKey": "music_21", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -667,8 +989,13 @@ "type": "music", "nameKey": "music_22", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 550, +======= "costCoins": 1200, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -677,8 +1004,13 @@ "type": "music", "nameKey": "music_23", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 550, +======= "costCoins": 1200, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -687,8 +1019,13 @@ "type": "music", "nameKey": "music_24", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 550, +======= "costCoins": 1200, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true }, @@ -697,7 +1034,11 @@ "type": "music", "nameKey": "music_25", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -707,7 +1048,11 @@ "type": "music", "nameKey": "music_26", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -717,7 +1062,11 @@ "type": "music", "nameKey": "music_27", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -727,7 +1076,11 @@ "type": "music", "nameKey": "music_28", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -737,7 +1090,11 @@ "type": "music", "nameKey": "music_29", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, +======= "costCoins": 1200, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "costMinigames": 0, "icon": "img/icons/music-svgrepo-com.svg", "oneTimePurchase": true @@ -752,8 +1109,13 @@ "nameKey": "shop_minigame_block_breaker_name", "descKey": "shop_minigame_block_breaker_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 450, + "costMinigames": 800, +======= "costCoins": 1500, "costMinigames": 3500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -764,8 +1126,13 @@ "nameKey": "shop_minigame_attack_hole_name", "descKey": "shop_minigame_attack_hole_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 1500, + "costMinigames": 0, +======= "costCoins": 2500, "costMinigames": 2000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -776,8 +1143,13 @@ "nameKey": "shop_minigame_doge_rescue_name", "descKey": "shop_minigame_doge_rescue_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, + "costMinigames": 550, +======= "costCoins": 500, "costMinigames": 4000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -788,8 +1160,13 @@ "nameKey": "shop_minigame_flappy_dunk_name", "descKey": "shop_minigame_flappy_dunk_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 800, +======= "costCoins": 2000, "costMinigames": 3000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -800,8 +1177,13 @@ "nameKey": "shop_minigame_helix_jump_name", "descKey": "shop_minigame_helix_jump_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 1200, +======= "costCoins": 1000, "costMinigames": 4500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -812,8 +1194,13 @@ "nameKey": "shop_minigame_magic_sort_name", "descKey": "shop_minigame_magic_sort_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 550, + "costMinigames": 1200, +======= "costCoins": 1000, "costMinigames": 5000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -824,8 +1211,13 @@ "nameKey": "shop_minigame_mob_control_name", "descKey": "shop_minigame_mob_control_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 800, + "costMinigames": 800, +======= "costCoins": 1500, "costMinigames": 3500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -836,8 +1228,13 @@ "nameKey": "shop_minigame_paper_io_name", "descKey": "shop_minigame_paper_io_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 1500, + "costMinigames": 1500, +======= "costCoins": 3000, "costMinigames": 5000, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -848,8 +1245,13 @@ "nameKey": "shop_minigame_spiral_roll_name", "descKey": "shop_minigame_spiral_roll_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 1500, + "costMinigames": 0, +======= "costCoins": 1000, "costMinigames": 4500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true }, @@ -860,8 +1262,13 @@ "nameKey": "shop_minigame_stack_colors_name", "descKey": "shop_minigame_stack_colors_desc", "cost": 0, +<<<<<<< HEAD + "costCoins": 300, + "costMinigames": 550, +======= "costCoins": 500, "costMinigames": 2500, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "icon": "img/icons/play-svgrepo-com.svg", "oneTimePurchase": true } diff --git a/public/img/capture1.png b/public/img/capture1.png deleted file mode 100644 index 27f0915..0000000 Binary files a/public/img/capture1.png and /dev/null differ diff --git a/public/img/capture2.png b/public/img/capture2.png deleted file mode 100644 index 5e4b3c9..0000000 Binary files a/public/img/capture2.png and /dev/null differ diff --git a/public/img/capture3.png b/public/img/capture3.png deleted file mode 100644 index eaa741d..0000000 Binary files a/public/img/capture3.png and /dev/null differ diff --git a/public/img/cheems/3d.png b/public/img/cheems/3d.png deleted file mode 100644 index 8d2c838..0000000 Binary files a/public/img/cheems/3d.png and /dev/null differ diff --git a/public/img/cheems/3d.webp b/public/img/cheems/3d.webp new file mode 100644 index 0000000..57aa627 Binary files /dev/null and b/public/img/cheems/3d.webp differ diff --git a/public/img/cheems/adult.png b/public/img/cheems/adult.png deleted file mode 100644 index 3c3fdb5..0000000 Binary files a/public/img/cheems/adult.png and /dev/null differ diff --git a/public/img/cheems/adult.webp b/public/img/cheems/adult.webp new file mode 100644 index 0000000..ac4a676 Binary files /dev/null and b/public/img/cheems/adult.webp differ diff --git a/public/img/cheems/black.png b/public/img/cheems/black.png deleted file mode 100644 index 9adf81b..0000000 Binary files a/public/img/cheems/black.png and /dev/null differ diff --git a/public/img/cheems/black.webp b/public/img/cheems/black.webp new file mode 100644 index 0000000..fb8ad31 Binary files /dev/null and b/public/img/cheems/black.webp differ diff --git a/public/img/cheems/cubes.png b/public/img/cheems/cubes.png deleted file mode 100644 index f3a6513..0000000 Binary files a/public/img/cheems/cubes.png and /dev/null differ diff --git a/public/img/cheems/cubes.webp b/public/img/cheems/cubes.webp new file mode 100644 index 0000000..a219cf6 Binary files /dev/null and b/public/img/cheems/cubes.webp differ diff --git a/public/img/cheems/elegant.png b/public/img/cheems/elegant.png deleted file mode 100644 index 8691fd4..0000000 Binary files a/public/img/cheems/elegant.png and /dev/null differ diff --git a/public/img/cheems/elegant.webp b/public/img/cheems/elegant.webp new file mode 100644 index 0000000..ad04360 Binary files /dev/null and b/public/img/cheems/elegant.webp differ diff --git a/public/img/cheems/kid.png b/public/img/cheems/kid.png deleted file mode 100644 index eeed12d..0000000 Binary files a/public/img/cheems/kid.png and /dev/null differ diff --git a/public/img/cheems/kid.webp b/public/img/cheems/kid.webp new file mode 100644 index 0000000..a429205 Binary files /dev/null and b/public/img/cheems/kid.webp differ diff --git a/public/img/cheems/little.png b/public/img/cheems/little.png deleted file mode 100644 index a83e32f..0000000 Binary files a/public/img/cheems/little.png and /dev/null differ diff --git a/public/img/cheems/little.webp b/public/img/cheems/little.webp new file mode 100644 index 0000000..7ccaa90 Binary files /dev/null and b/public/img/cheems/little.webp differ diff --git a/public/img/cheems/locked-cheems.png b/public/img/cheems/locked-cheems.png deleted file mode 100644 index 7e39561..0000000 Binary files a/public/img/cheems/locked-cheems.png and /dev/null differ diff --git a/public/img/cheems/locked-cheems.webp b/public/img/cheems/locked-cheems.webp new file mode 100644 index 0000000..4d0c0f1 Binary files /dev/null and b/public/img/cheems/locked-cheems.webp differ diff --git a/public/img/cheems/mamado.png b/public/img/cheems/mamado.png deleted file mode 100644 index 087d491..0000000 Binary files a/public/img/cheems/mamado.png and /dev/null differ diff --git a/public/img/cheems/mamado.webp b/public/img/cheems/mamado.webp new file mode 100644 index 0000000..486868c Binary files /dev/null and b/public/img/cheems/mamado.webp differ diff --git a/public/img/cheems/normal.png b/public/img/cheems/normal.png deleted file mode 100644 index 2a2b980..0000000 Binary files a/public/img/cheems/normal.png and /dev/null differ diff --git a/public/img/cheems/normal.webp b/public/img/cheems/normal.webp new file mode 100644 index 0000000..469bbec Binary files /dev/null and b/public/img/cheems/normal.webp differ diff --git a/public/img/cheems/not_a_dog.png b/public/img/cheems/not_a_dog.png deleted file mode 100644 index 7105613..0000000 Binary files a/public/img/cheems/not_a_dog.png and /dev/null differ diff --git a/public/img/cheems/not_a_dog.webp b/public/img/cheems/not_a_dog.webp new file mode 100644 index 0000000..0777a71 Binary files /dev/null and b/public/img/cheems/not_a_dog.webp differ diff --git a/public/img/cheems/not_a_plumber.png b/public/img/cheems/not_a_plumber.png deleted file mode 100644 index 3332f45..0000000 Binary files a/public/img/cheems/not_a_plumber.png and /dev/null differ diff --git a/public/img/cheems/not_a_plumber.webp b/public/img/cheems/not_a_plumber.webp new file mode 100644 index 0000000..e8587b3 Binary files /dev/null and b/public/img/cheems/not_a_plumber.webp differ diff --git a/public/img/cheems/not_ai.png b/public/img/cheems/not_ai.png deleted file mode 100644 index 6c2a6d9..0000000 Binary files a/public/img/cheems/not_ai.png and /dev/null differ diff --git a/public/img/cheems/not_ai.webp b/public/img/cheems/not_ai.webp new file mode 100644 index 0000000..1203a48 Binary files /dev/null and b/public/img/cheems/not_ai.webp differ diff --git a/public/img/cheems/pixelart.png b/public/img/cheems/pixelart.png deleted file mode 100644 index 96061a1..0000000 Binary files a/public/img/cheems/pixelart.png and /dev/null differ diff --git a/public/img/cheems/pixelart.webp b/public/img/cheems/pixelart.webp new file mode 100644 index 0000000..9b94090 Binary files /dev/null and b/public/img/cheems/pixelart.webp differ diff --git a/public/img/cheems/realistic.png b/public/img/cheems/realistic.png deleted file mode 100644 index 64f6f70..0000000 Binary files a/public/img/cheems/realistic.png and /dev/null differ diff --git a/public/img/cheems/realistic.webp b/public/img/cheems/realistic.webp new file mode 100644 index 0000000..8dba8b5 Binary files /dev/null and b/public/img/cheems/realistic.webp differ diff --git a/public/img/dogecoin-min.png b/public/img/dogecoin-min.png deleted file mode 100644 index 04eaeb7..0000000 Binary files a/public/img/dogecoin-min.png and /dev/null differ diff --git a/public/img/dogecoin-min.svg b/public/img/dogecoin-min.svg deleted file mode 100644 index 108318b..0000000 --- a/public/img/dogecoin-min.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/img/hit/3d.png b/public/img/hit/3d.png deleted file mode 100644 index 32060ec..0000000 Binary files a/public/img/hit/3d.png and /dev/null differ diff --git a/public/img/hit/3d.webp b/public/img/hit/3d.webp new file mode 100644 index 0000000..794effa Binary files /dev/null and b/public/img/hit/3d.webp differ diff --git a/public/img/hit/adult.png b/public/img/hit/adult.png deleted file mode 100644 index 2d1aad6..0000000 Binary files a/public/img/hit/adult.png and /dev/null differ diff --git a/public/img/hit/adult.webp b/public/img/hit/adult.webp new file mode 100644 index 0000000..e474a2f Binary files /dev/null and b/public/img/hit/adult.webp differ diff --git a/public/img/hit/black.png b/public/img/hit/black.png deleted file mode 100644 index 649300d..0000000 Binary files a/public/img/hit/black.png and /dev/null differ diff --git a/public/img/hit/black.webp b/public/img/hit/black.webp new file mode 100644 index 0000000..3699b99 Binary files /dev/null and b/public/img/hit/black.webp differ diff --git a/public/img/hit/cubes.png b/public/img/hit/cubes.png deleted file mode 100644 index 1320573..0000000 Binary files a/public/img/hit/cubes.png and /dev/null differ diff --git a/public/img/hit/cubes.webp b/public/img/hit/cubes.webp new file mode 100644 index 0000000..7a76ec1 Binary files /dev/null and b/public/img/hit/cubes.webp differ diff --git a/public/img/hit/elegant.png b/public/img/hit/elegant.png deleted file mode 100644 index 308c00b..0000000 Binary files a/public/img/hit/elegant.png and /dev/null differ diff --git a/public/img/hit/elegant.webp b/public/img/hit/elegant.webp new file mode 100644 index 0000000..4988085 Binary files /dev/null and b/public/img/hit/elegant.webp differ diff --git a/public/img/hit/kid.png b/public/img/hit/kid.png deleted file mode 100644 index b13597a..0000000 Binary files a/public/img/hit/kid.png and /dev/null differ diff --git a/public/img/hit/kid.webp b/public/img/hit/kid.webp new file mode 100644 index 0000000..1a9b0d4 Binary files /dev/null and b/public/img/hit/kid.webp differ diff --git a/public/img/hit/little.png b/public/img/hit/little.png deleted file mode 100644 index 97ef26f..0000000 Binary files a/public/img/hit/little.png and /dev/null differ diff --git a/public/img/hit/little.webp b/public/img/hit/little.webp new file mode 100644 index 0000000..6d0604b Binary files /dev/null and b/public/img/hit/little.webp differ diff --git a/public/img/hit/mamado.png b/public/img/hit/mamado.png deleted file mode 100644 index 7861311..0000000 Binary files a/public/img/hit/mamado.png and /dev/null differ diff --git a/public/img/hit/mamado.webp b/public/img/hit/mamado.webp new file mode 100644 index 0000000..0a0f280 Binary files /dev/null and b/public/img/hit/mamado.webp differ diff --git a/public/img/hit/normal.png b/public/img/hit/normal.png deleted file mode 100644 index 09b4c7e..0000000 Binary files a/public/img/hit/normal.png and /dev/null differ diff --git a/public/img/hit/normal.webp b/public/img/hit/normal.webp new file mode 100644 index 0000000..896ca80 Binary files /dev/null and b/public/img/hit/normal.webp differ diff --git a/public/img/hit/not_a_dog.png b/public/img/hit/not_a_dog.png deleted file mode 100644 index 38e168f..0000000 Binary files a/public/img/hit/not_a_dog.png and /dev/null differ diff --git a/public/img/hit/not_a_dog.webp b/public/img/hit/not_a_dog.webp new file mode 100644 index 0000000..db953db Binary files /dev/null and b/public/img/hit/not_a_dog.webp differ diff --git a/public/img/hit/not_a_plumber.png b/public/img/hit/not_a_plumber.png deleted file mode 100644 index 76ace2e..0000000 Binary files a/public/img/hit/not_a_plumber.png and /dev/null differ diff --git a/public/img/hit/not_a_plumber.webp b/public/img/hit/not_a_plumber.webp new file mode 100644 index 0000000..ae97147 Binary files /dev/null and b/public/img/hit/not_a_plumber.webp differ diff --git a/public/img/hit/not_ai.png b/public/img/hit/not_ai.png deleted file mode 100644 index f73d2eb..0000000 Binary files a/public/img/hit/not_ai.png and /dev/null differ diff --git a/public/img/hit/not_ai.webp b/public/img/hit/not_ai.webp new file mode 100644 index 0000000..050e5e5 Binary files /dev/null and b/public/img/hit/not_ai.webp differ diff --git a/public/img/hit/pixelart.png b/public/img/hit/pixelart.png deleted file mode 100644 index 29214d5..0000000 Binary files a/public/img/hit/pixelart.png and /dev/null differ diff --git a/public/img/hit/pixelart.webp b/public/img/hit/pixelart.webp new file mode 100644 index 0000000..d22cf65 Binary files /dev/null and b/public/img/hit/pixelart.webp differ diff --git a/public/img/hit/realistic.png b/public/img/hit/realistic.png deleted file mode 100644 index fb1fd33..0000000 Binary files a/public/img/hit/realistic.png and /dev/null differ diff --git a/public/img/hit/realistic.webp b/public/img/hit/realistic.webp new file mode 100644 index 0000000..031ffb8 Binary files /dev/null and b/public/img/hit/realistic.webp differ diff --git a/public/img/icons/check-svgrepo-com.svg b/public/img/icons/check-svgrepo-com.svg new file mode 100644 index 0000000..0dd4e87 --- /dev/null +++ b/public/img/icons/check-svgrepo-com.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/img/music/believe_me.png b/public/img/music/believe_me.png deleted file mode 100644 index b934ac0..0000000 Binary files a/public/img/music/believe_me.png and /dev/null differ diff --git a/public/img/music/believe_me.webp b/public/img/music/believe_me.webp new file mode 100644 index 0000000..be72091 Binary files /dev/null and b/public/img/music/believe_me.webp differ diff --git a/public/img/music/bonk_the_amber.png b/public/img/music/bonk_the_amber.png deleted file mode 100644 index b6091ba..0000000 Binary files a/public/img/music/bonk_the_amber.png and /dev/null differ diff --git a/public/img/music/bonk_the_amber.webp b/public/img/music/bonk_the_amber.webp new file mode 100644 index 0000000..e83f7f0 Binary files /dev/null and b/public/img/music/bonk_the_amber.webp differ diff --git a/public/img/music/bonk_the_avatar.png b/public/img/music/bonk_the_avatar.png deleted file mode 100644 index b0d10e2..0000000 Binary files a/public/img/music/bonk_the_avatar.png and /dev/null differ diff --git a/public/img/music/bonk_the_avatar.webp b/public/img/music/bonk_the_avatar.webp new file mode 100644 index 0000000..6647182 Binary files /dev/null and b/public/img/music/bonk_the_avatar.webp differ diff --git a/public/img/music/bonus_level_bounce.png b/public/img/music/bonus_level_bounce.png deleted file mode 100644 index 0ba0e4f..0000000 Binary files a/public/img/music/bonus_level_bounce.png and /dev/null differ diff --git a/public/img/music/bonus_level_bounce.webp b/public/img/music/bonus_level_bounce.webp new file mode 100644 index 0000000..790fdab Binary files /dev/null and b/public/img/music/bonus_level_bounce.webp differ diff --git a/public/img/music/button_smash_routine.png b/public/img/music/button_smash_routine.png deleted file mode 100644 index 6975771..0000000 Binary files a/public/img/music/button_smash_routine.png and /dev/null differ diff --git a/public/img/music/button_smash_routine.webp b/public/img/music/button_smash_routine.webp new file mode 100644 index 0000000..3325420 Binary files /dev/null and b/public/img/music/button_smash_routine.webp differ diff --git a/public/img/music/cheems_chan_bonk.png b/public/img/music/cheems_chan_bonk.png deleted file mode 100644 index 438f69d..0000000 Binary files a/public/img/music/cheems_chan_bonk.png and /dev/null differ diff --git a/public/img/music/cheems_chan_bonk.webp b/public/img/music/cheems_chan_bonk.webp new file mode 100644 index 0000000..b530b83 Binary files /dev/null and b/public/img/music/cheems_chan_bonk.webp differ diff --git a/public/img/music/city_streets.png b/public/img/music/city_streets.png deleted file mode 100644 index 35182ab..0000000 Binary files a/public/img/music/city_streets.png and /dev/null differ diff --git a/public/img/music/city_streets.webp b/public/img/music/city_streets.webp new file mode 100644 index 0000000..e7967e4 Binary files /dev/null and b/public/img/music/city_streets.webp differ diff --git a/public/img/music/click_for_a_bonk.png b/public/img/music/click_for_a_bonk.png deleted file mode 100644 index faeb622..0000000 Binary files a/public/img/music/click_for_a_bonk.png and /dev/null differ diff --git a/public/img/music/click_for_a_bonk.webp b/public/img/music/click_for_a_bonk.webp new file mode 100644 index 0000000..6242557 Binary files /dev/null and b/public/img/music/click_for_a_bonk.webp differ diff --git a/public/img/music/electro_summer_positive_party.png b/public/img/music/electro_summer_positive_party.png deleted file mode 100644 index ad19b53..0000000 Binary files a/public/img/music/electro_summer_positive_party.png and /dev/null differ diff --git a/public/img/music/electro_summer_positive_party.webp b/public/img/music/electro_summer_positive_party.webp new file mode 100644 index 0000000..dcf1c96 Binary files /dev/null and b/public/img/music/electro_summer_positive_party.webp differ diff --git a/public/img/music/hardwood_strike.png b/public/img/music/hardwood_strike.png deleted file mode 100644 index 58bb786..0000000 Binary files a/public/img/music/hardwood_strike.png and /dev/null differ diff --git a/public/img/music/hardwood_strike.webp b/public/img/music/hardwood_strike.webp new file mode 100644 index 0000000..a08ab82 Binary files /dev/null and b/public/img/music/hardwood_strike.webp differ diff --git a/public/img/music/jack_bootleg.png b/public/img/music/jack_bootleg.png deleted file mode 100644 index b8efb3d..0000000 Binary files a/public/img/music/jack_bootleg.png and /dev/null differ diff --git a/public/img/music/jack_bootleg.webp b/public/img/music/jack_bootleg.webp new file mode 100644 index 0000000..1410cbf Binary files /dev/null and b/public/img/music/jack_bootleg.webp differ diff --git a/public/img/music/magic_night.png b/public/img/music/magic_night.png deleted file mode 100644 index 12ce619..0000000 Binary files a/public/img/music/magic_night.png and /dev/null differ diff --git a/public/img/music/magic_night.webp b/public/img/music/magic_night.webp new file mode 100644 index 0000000..33d6310 Binary files /dev/null and b/public/img/music/magic_night.webp differ diff --git a/public/img/music/minimalism_no10.png b/public/img/music/minimalism_no10.png deleted file mode 100644 index 20f10bf..0000000 Binary files a/public/img/music/minimalism_no10.png and /dev/null differ diff --git a/public/img/music/minimalism_no10.webp b/public/img/music/minimalism_no10.webp new file mode 100644 index 0000000..4bb8500 Binary files /dev/null and b/public/img/music/minimalism_no10.webp differ diff --git a/public/img/music/minimalism_no9.png b/public/img/music/minimalism_no9.png deleted file mode 100644 index 2be4abc..0000000 Binary files a/public/img/music/minimalism_no9.png and /dev/null differ diff --git a/public/img/music/minimalism_no9.webp b/public/img/music/minimalism_no9.webp new file mode 100644 index 0000000..e0d66cb Binary files /dev/null and b/public/img/music/minimalism_no9.webp differ diff --git a/public/img/music/no_image.png b/public/img/music/no_image.png deleted file mode 100644 index 46587cc..0000000 Binary files a/public/img/music/no_image.png and /dev/null differ diff --git a/public/img/music/no_image.webp b/public/img/music/no_image.webp new file mode 100644 index 0000000..df4f580 Binary files /dev/null and b/public/img/music/no_image.webp differ diff --git a/public/img/music/perfect_round.png b/public/img/music/perfect_round.png deleted file mode 100644 index 76655b4..0000000 Binary files a/public/img/music/perfect_round.png and /dev/null differ diff --git a/public/img/music/perfect_round.webp b/public/img/music/perfect_round.webp new file mode 100644 index 0000000..e690f1e Binary files /dev/null and b/public/img/music/perfect_round.webp differ diff --git a/public/img/music/pocket_change_victory.png b/public/img/music/pocket_change_victory.png deleted file mode 100644 index dcdb1db..0000000 Binary files a/public/img/music/pocket_change_victory.png and /dev/null differ diff --git a/public/img/music/pocket_change_victory.webp b/public/img/music/pocket_change_victory.webp new file mode 100644 index 0000000..23262a8 Binary files /dev/null and b/public/img/music/pocket_change_victory.webp differ diff --git a/public/img/music/quick_loot_run.png b/public/img/music/quick_loot_run.png deleted file mode 100644 index d15f520..0000000 Binary files a/public/img/music/quick_loot_run.png and /dev/null differ diff --git a/public/img/music/quick_loot_run.webp b/public/img/music/quick_loot_run.webp new file mode 100644 index 0000000..34f3719 Binary files /dev/null and b/public/img/music/quick_loot_run.webp differ diff --git a/public/img/music/target_in_the_sight.png b/public/img/music/target_in_the_sight.png deleted file mode 100644 index 3e68617..0000000 Binary files a/public/img/music/target_in_the_sight.png and /dev/null differ diff --git a/public/img/music/target_in_the_sight.webp b/public/img/music/target_in_the_sight.webp new file mode 100644 index 0000000..1e034cf Binary files /dev/null and b/public/img/music/target_in_the_sight.webp differ diff --git a/public/img/music/tetris_bootleg.png b/public/img/music/tetris_bootleg.png deleted file mode 100644 index 61dcc01..0000000 Binary files a/public/img/music/tetris_bootleg.png and /dev/null differ diff --git a/public/img/music/tetris_bootleg.webp b/public/img/music/tetris_bootleg.webp new file mode 100644 index 0000000..4da7d34 Binary files /dev/null and b/public/img/music/tetris_bootleg.webp differ diff --git a/public/img/music/the_hammer_falls.png b/public/img/music/the_hammer_falls.png deleted file mode 100644 index cc6e629..0000000 Binary files a/public/img/music/the_hammer_falls.png and /dev/null differ diff --git a/public/img/music/the_hammer_falls.webp b/public/img/music/the_hammer_falls.webp new file mode 100644 index 0000000..b028a77 Binary files /dev/null and b/public/img/music/the_hammer_falls.webp differ diff --git a/public/img/music/the_late_commute.png b/public/img/music/the_late_commute.png deleted file mode 100644 index a80c9b8..0000000 Binary files a/public/img/music/the_late_commute.png and /dev/null differ diff --git a/public/img/music/the_late_commute.webp b/public/img/music/the_late_commute.webp new file mode 100644 index 0000000..c9c115e Binary files /dev/null and b/public/img/music/the_late_commute.webp differ diff --git a/public/img/music/the_unwritten_page_bage.png b/public/img/music/the_unwritten_page_bage.png deleted file mode 100644 index 9e89810..0000000 Binary files a/public/img/music/the_unwritten_page_bage.png and /dev/null differ diff --git a/public/img/music/the_unwritten_page_bage.webp b/public/img/music/the_unwritten_page_bage.webp new file mode 100644 index 0000000..16d3909 Binary files /dev/null and b/public/img/music/the_unwritten_page_bage.webp differ diff --git a/public/img/music/titanium.png b/public/img/music/titanium.png deleted file mode 100644 index 9416af6..0000000 Binary files a/public/img/music/titanium.png and /dev/null differ diff --git a/public/img/music/titanium.webp b/public/img/music/titanium.webp new file mode 100644 index 0000000..75caf84 Binary files /dev/null and b/public/img/music/titanium.webp differ diff --git a/public/img/music/trap_future_bass.png b/public/img/music/trap_future_bass.png deleted file mode 100644 index eb6b228..0000000 Binary files a/public/img/music/trap_future_bass.png and /dev/null differ diff --git a/public/img/music/trap_future_bass.webp b/public/img/music/trap_future_bass.webp new file mode 100644 index 0000000..6d9e673 Binary files /dev/null and b/public/img/music/trap_future_bass.webp differ diff --git a/public/img/music/when_you_smile.png b/public/img/music/when_you_smile.png deleted file mode 100644 index f0e8b7e..0000000 Binary files a/public/img/music/when_you_smile.png and /dev/null differ diff --git a/public/img/music/when_you_smile.webp b/public/img/music/when_you_smile.webp new file mode 100644 index 0000000..a512c3f Binary files /dev/null and b/public/img/music/when_you_smile.webp differ diff --git a/public/img/music/where_the_path_bends.png b/public/img/music/where_the_path_bends.png deleted file mode 100644 index 0fbf555..0000000 Binary files a/public/img/music/where_the_path_bends.png and /dev/null differ diff --git a/public/img/music/where_the_path_bends.webp b/public/img/music/where_the_path_bends.webp new file mode 100644 index 0000000..eb0d115 Binary files /dev/null and b/public/img/music/where_the_path_bends.webp differ diff --git a/public/lang/texts.en.lang b/public/lang/texts.en.lang index b0a4c7d..8b7185c 100644 --- a/public/lang/texts.en.lang +++ b/public/lang/texts.en.lang @@ -21,7 +21,12 @@ "stack_colors": "Stack Colors", "minigames": "Minigames", "licenses": "Licenses & Credits", +<<<<<<< HEAD + "gallery": "Gallery", + "redeem": "Redeem code" +======= "gallery": "Gallery" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "minigames": { "trash": "TRASH", @@ -54,7 +59,12 @@ "buyDogeCoinSub": "Today's price: ", "buyDogeCoinSuccess": "You bought 1 DogeCoin!", "buyDogeCoinFail": "You need more points!", +<<<<<<< HEAD + "gallery": "Gallery", + "redeem": "Redeem Code" +======= "gallery": "Gallery" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "options": { "changeLang": { @@ -98,7 +108,18 @@ "totalScore": "Total touches", "booster": "Booster" }, +<<<<<<< HEAD + "tapToBonk": "Click Cheems for a BONK!", + "idleStats": "Idle Stats", + "activeAppOpen": "Active (App Open):", + "offlineBackground": "Offline (Background):", + "ptsPerSec": "pts/sec", + "ptsPerMin": "pts/min", + "ptsPerHr": "pts/hr", + "close": "Close" +======= "tapToBonk": "Click Cheems for a BONK!" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "closet": { "title": "Customization Shop", @@ -119,6 +140,17 @@ "buyInShop": "Buy this item in the Shop!", "locked": "Locked" }, +<<<<<<< HEAD + "redeemText": { + "title": "Redeem Code", + "enterCode": "Enter code here...", + "redeemBtn": "Redeem", + "history": "Redeem History", + "invalidCode": "Invalid code!", + "alreadyRedeemed": "Code already redeemed!", + "success": "Code redeemed successfully!", + "empty_codes": "No redeemed codes yet." +======= "dev": { "title": "Developer Options", "resetToZero": "Reset to zero", @@ -128,6 +160,7 @@ "success": "Done!", "unlocked": "Developer Menu UNLOCKED!", "locked": "Developer Menu locked." +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "onWork": { "title": "Page Under Development", @@ -184,12 +217,33 @@ "alreadyPurchased": "Already purchased!", "dogecoinSection": "DogeCoins", "boosterSection": "Boosters", +<<<<<<< HEAD + "upgradesSection": "Upgrades", + "cheemsSection": "Cheems Skins", + "sfxSection": "Sound Effects", + "musicSection": "Background Music", + "backToTop": "Back to Top ↑", + "maxLevel": "Max Level" + }, + "shopItemsText": { + "shop_upgrade_qty_1_name": "Idle Quantity Upgrade", + "shop_upgrade_qty_1_desc": "Increases the idle points earned per second by +1 point.", + "shop_upgrade_qty_2_name": "Idle Quantity Upgrade II", + "shop_upgrade_qty_2_desc": "Increases the idle points earned per second by +2 points.", + "shop_upgrade_qty_3_name": "Idle Quantity Upgrade III", + "shop_upgrade_qty_3_desc": "Increases the idle points earned per second by +3 points.", + "shop_upgrade_qty_5_name": "Idle Quantity Upgrade V", + "shop_upgrade_qty_5_desc": "Increases the idle points earned per second by +5 points.", + "shop_upgrade_qty_10_name": "Idle Quantity Upgrade X", + "shop_upgrade_qty_10_desc": "Increases the idle points earned per second by +10 points.", +======= "cheemsSection": "Cheems Skins", "sfxSection": "Sound Effects", "musicSection": "Background Music", "backToTop": "Back to Top ↑" }, "shopItemsText": { +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "shop_dogecoin_special_name": "DogeCoin (Special Offer)", "shop_dogecoin_special_desc": "Buy 1 DogeCoin for a special price!", "shop_dogecoin_1_name": "DogeCoin x1", diff --git a/public/lang/texts.es.lang b/public/lang/texts.es.lang index 453a6b9..0f199af 100644 --- a/public/lang/texts.es.lang +++ b/public/lang/texts.es.lang @@ -21,7 +21,12 @@ "stack_colors": "Stack Colors", "minigames": "Minijuegos", "licenses": "Licencias y Créditos", +<<<<<<< HEAD + "gallery": "GalerÃa", + "redeem": "Canjear Código" +======= "gallery": "GalerÃa" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "minigames": { "trash": "BASURA", @@ -54,7 +59,12 @@ "buyDogeCoinSub": "Costo de hoy: ", "buyDogeCoinSuccess": "¡Compraste 1 DogeCoin!", "buyDogeCoinFail": "¡Necesitas más puntos!", +<<<<<<< HEAD + "gallery": "GalerÃa", + "redeem": "Canjear Código" +======= "gallery": "GalerÃa" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "options": { "changeLang": { @@ -98,7 +108,18 @@ "totalScore": "Toques totales", "booster": "Potenciador" }, +<<<<<<< HEAD + "tapToBonk": "¡Haz clic en Cheems para un BONK!", + "idleStats": "Puntos Inactivo", + "activeAppOpen": "Activo (App Abierta):", + "offlineBackground": "Desconectado (App cerrada):", + "ptsPerSec": "pts/seg", + "ptsPerMin": "pts/min", + "ptsPerHr": "pts/hr", + "close": "Cerrar" +======= "tapToBonk": "¡Haz clic en Cheems para un BONK!" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }, "closet": { "title": "Personalización", @@ -119,6 +140,19 @@ "buyInShop": "¡Compra este artÃculo en la Tienda!", "locked": "Bloqueado" }, +<<<<<<< HEAD + "redeemText": { + "title": "Canjear Código", + "enterCode": "Ingresa el código aquÃ...", + "redeemBtn": "Canjear", + "history": "Historial de Canje", + "invalidCode": "¡Código inválido!", + "alreadyRedeemed": "¡El código ya fue canjeado!", + "success": "¡Código canjeado con éxito!", + "empty_codes": "No se han canjeado códigos todavÃa." + }, + "onWorkText": { +======= "dev": { "title": "Opciones de desarrollo", "resetToZero": "Restablecer a cero (Reset)", @@ -130,6 +164,7 @@ "locked": "Menú de desarrollo bloqueado." }, "onWork": { +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "title": "Página en desarrollo", "message": "Esta página está en desarrollo aún. ¡Vuelve pronto!", "backToMenu": "Volver al menú" @@ -184,12 +219,33 @@ "alreadyPurchased": "¡Ya comprado!", "dogecoinSection": "DogeCoins", "boosterSection": "Potenciadores", +<<<<<<< HEAD + "upgradesSection": "Mejoras", + "cheemsSection": "Aspectos Cheems", + "sfxSection": "Efectos de Sonido", + "musicSection": "Música de Fondo", + "backToTop": "Volver Arriba ↑", + "maxLevel": "Nivel Máximo" + }, + "shopItemsText": { + "shop_upgrade_qty_1_name": "Mejora Cantidad de Puntos Offline", + "shop_upgrade_qty_1_desc": "Aumenta los puntos generados por segundo en +1 punto.", + "shop_upgrade_qty_2_name": "Mejora Cantidad de Puntos Offline II", + "shop_upgrade_qty_2_desc": "Aumenta los puntos generados por segundo en +2 puntos.", + "shop_upgrade_qty_3_name": "Mejora Cantidad de Puntos Offline III", + "shop_upgrade_qty_3_desc": "Aumenta los puntos generados por segundo en +3 puntos.", + "shop_upgrade_qty_5_name": "Mejora Cantidad de Puntos Offline V", + "shop_upgrade_qty_5_desc": "Aumenta los puntos generados por segundo en +5 puntos.", + "shop_upgrade_qty_10_name": "Mejora Cantidad de Puntos Offline X", + "shop_upgrade_qty_10_desc": "Aumenta los puntos generados por segundo en +10 puntos.", +======= "cheemsSection": "Aspectos Cheems", "sfxSection": "Efectos de Sonido", "musicSection": "Música de Fondo", "backToTop": "Volver Arriba ↑" }, "shopItemsText": { +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "shop_dogecoin_special_name": "DogeCoin (Oferta Especial)", "shop_dogecoin_special_desc": "¡Compra 1 DogeCoin a precio especial!", "shop_dogecoin_1_name": "DogeCoin x1", diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest index ff2a2e2..2de63fd 100644 --- a/public/manifest.webmanifest +++ b/public/manifest.webmanifest @@ -7,6 +7,9 @@ "start_url": "./", "icons": [ { +<<<<<<< HEAD + "src": "../img/icons/pwa/icon-72x72.png", +======= "src": "../icons/icon-48.webp", "type": "image/png", "sizes": "48x48", @@ -14,11 +17,21 @@ }, { "src": "../icons/icon-72.webp", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "type": "image/png", "sizes": "72x72", "purpose": "any maskable" }, { +<<<<<<< HEAD + "src": "../img/icons/pwa/icon-144x144.png", + "type": "image/png", + "sizes": "144x144", + "purpose": "any maskable" + }, + { + "src": "../img/icons/pwa/icon-192x192.png", +======= "src": "../icons/icon-96.webp", "type": "image/png", "sizes": "96x96", @@ -32,11 +45,16 @@ }, { "src": "../icons/icon-192.webp", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "type": "image/png", "sizes": "192x192", "purpose": "any maskable" }, { +<<<<<<< HEAD + "src": "../img/icons/pwa/icon-512x512.png", + "type": "image/png", +======= "src": "../icons/icon-256.webp", "type": "image/png", "sizes": "256x256", @@ -45,6 +63,7 @@ { "src": "../icons/icon-512.webp", "type": "image/png", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 "sizes": "512x512", "purpose": "any maskable" } diff --git a/public/sound/music/A_Jazz_Piano.ogg b/public/sound/music/A_Jazz_Piano.ogg index d9e5cc9..e1a364a 100644 Binary files a/public/sound/music/A_Jazz_Piano.ogg and b/public/sound/music/A_Jazz_Piano.ogg differ diff --git a/public/sound/music/Jack_Bootleg.ogg b/public/sound/music/Jack_Bootleg.ogg index 60b1951..17829e3 100644 Binary files a/public/sound/music/Jack_Bootleg.ogg and b/public/sound/music/Jack_Bootleg.ogg differ diff --git a/public/sound/music/Magic_night.ogg b/public/sound/music/Magic_night.ogg index 70c476a..6696149 100644 Binary files a/public/sound/music/Magic_night.ogg and b/public/sound/music/Magic_night.ogg differ diff --git a/public/sound/music/Minimalism_No10.ogg b/public/sound/music/Minimalism_No10.ogg index 978a56d..5ee89a6 100644 Binary files a/public/sound/music/Minimalism_No10.ogg and b/public/sound/music/Minimalism_No10.ogg differ diff --git a/public/sound/music/Minimalism_No9.ogg b/public/sound/music/Minimalism_No9.ogg index 19cea58..566d505 100644 Binary files a/public/sound/music/Minimalism_No9.ogg and b/public/sound/music/Minimalism_No9.ogg differ diff --git a/public/sound/music/TETRIS (Joey iLLah Bootleg) (Final).wav b/public/sound/music/TETRIS (Joey iLLah Bootleg) (Final).wav deleted file mode 100644 index 6a543b6..0000000 Binary files a/public/sound/music/TETRIS (Joey iLLah Bootleg) (Final).wav and /dev/null differ diff --git a/public/sound/music/TETRIS_jack_bootleg.ogg b/public/sound/music/TETRIS_jack_bootleg.ogg new file mode 100644 index 0000000..b0fe2d8 Binary files /dev/null and b/public/sound/music/TETRIS_jack_bootleg.ogg differ diff --git a/public/sound/music/When_you_smile.ogg b/public/sound/music/When_you_smile.ogg index 3687cf2..5248013 100644 Binary files a/public/sound/music/When_you_smile.ogg and b/public/sound/music/When_you_smile.ogg differ diff --git a/public/sound/music/believe-me-143530.mp3 b/public/sound/music/believe-me-143530.mp3 deleted file mode 100644 index 30727e1..0000000 Binary files a/public/sound/music/believe-me-143530.mp3 and /dev/null differ diff --git a/public/sound/music/believe-me.ogg b/public/sound/music/believe-me.ogg new file mode 100644 index 0000000..4d5ab1c Binary files /dev/null and b/public/sound/music/believe-me.ogg differ diff --git a/public/sound/music/bonk_the_amber.mp3 b/public/sound/music/bonk_the_amber.mp3 deleted file mode 100644 index 426aa64..0000000 Binary files a/public/sound/music/bonk_the_amber.mp3 and /dev/null differ diff --git a/public/sound/music/bonk_the_amber.ogg b/public/sound/music/bonk_the_amber.ogg new file mode 100644 index 0000000..c741d0b Binary files /dev/null and b/public/sound/music/bonk_the_amber.ogg differ diff --git a/public/sound/music/bonk_the_avatar.mp3 b/public/sound/music/bonk_the_avatar.mp3 deleted file mode 100644 index 15bf632..0000000 Binary files a/public/sound/music/bonk_the_avatar.mp3 and /dev/null differ diff --git a/public/sound/music/bonk_the_avatar.ogg b/public/sound/music/bonk_the_avatar.ogg new file mode 100644 index 0000000..514cfe2 Binary files /dev/null and b/public/sound/music/bonk_the_avatar.ogg differ diff --git a/public/sound/music/bonus_level_bounce.mp3 b/public/sound/music/bonus_level_bounce.mp3 deleted file mode 100644 index 76c5fe4..0000000 Binary files a/public/sound/music/bonus_level_bounce.mp3 and /dev/null differ diff --git a/public/sound/music/bonus_level_bounce.ogg b/public/sound/music/bonus_level_bounce.ogg new file mode 100644 index 0000000..3fafb21 Binary files /dev/null and b/public/sound/music/bonus_level_bounce.ogg differ diff --git a/public/sound/music/button_smash_routine.mp3 b/public/sound/music/button_smash_routine.mp3 deleted file mode 100644 index 5544f21..0000000 Binary files a/public/sound/music/button_smash_routine.mp3 and /dev/null differ diff --git a/public/sound/music/button_smash_routine.ogg b/public/sound/music/button_smash_routine.ogg new file mode 100644 index 0000000..46afc21 Binary files /dev/null and b/public/sound/music/button_smash_routine.ogg differ diff --git a/public/sound/music/cheems-chan_bonk.mp3 b/public/sound/music/cheems-chan_bonk.mp3 deleted file mode 100644 index 6345af6..0000000 Binary files a/public/sound/music/cheems-chan_bonk.mp3 and /dev/null differ diff --git a/public/sound/music/cheems-chan_bonk.ogg b/public/sound/music/cheems-chan_bonk.ogg new file mode 100644 index 0000000..da26e90 Binary files /dev/null and b/public/sound/music/cheems-chan_bonk.ogg differ diff --git a/public/sound/music/city-streets-background-version-166003.mp3 b/public/sound/music/city-streets-background-version-166003.mp3 deleted file mode 100644 index 1003773..0000000 Binary files a/public/sound/music/city-streets-background-version-166003.mp3 and /dev/null differ diff --git a/public/sound/music/city-streets.ogg b/public/sound/music/city-streets.ogg new file mode 100644 index 0000000..bd95d5e Binary files /dev/null and b/public/sound/music/city-streets.ogg differ diff --git a/public/sound/music/click_for_a_bonk.mp3 b/public/sound/music/click_for_a_bonk.mp3 deleted file mode 100644 index 291819b..0000000 Binary files a/public/sound/music/click_for_a_bonk.mp3 and /dev/null differ diff --git a/public/sound/music/click_for_a_bonk.ogg b/public/sound/music/click_for_a_bonk.ogg new file mode 100644 index 0000000..f1c8385 Binary files /dev/null and b/public/sound/music/click_for_a_bonk.ogg differ diff --git a/public/sound/music/coffee-shop-189585.mp3 b/public/sound/music/coffee-shop-189585.mp3 deleted file mode 100644 index fcdd58e..0000000 Binary files a/public/sound/music/coffee-shop-189585.mp3 and /dev/null differ diff --git a/public/sound/music/coffee-shop.ogg b/public/sound/music/coffee-shop.ogg new file mode 100644 index 0000000..47c8b7a Binary files /dev/null and b/public/sound/music/coffee-shop.ogg differ diff --git a/public/sound/music/electro-summer-positive-party-141081.mp3 b/public/sound/music/electro-summer-positive-party-141081.mp3 deleted file mode 100644 index 5e56aa5..0000000 Binary files a/public/sound/music/electro-summer-positive-party-141081.mp3 and /dev/null differ diff --git a/public/sound/music/electro-summer-positive-party.ogg b/public/sound/music/electro-summer-positive-party.ogg new file mode 100644 index 0000000..c5a5ca7 Binary files /dev/null and b/public/sound/music/electro-summer-positive-party.ogg differ diff --git a/public/sound/music/hardwood_strike.mp3 b/public/sound/music/hardwood_strike.mp3 deleted file mode 100644 index f402d4e..0000000 Binary files a/public/sound/music/hardwood_strike.mp3 and /dev/null differ diff --git a/public/sound/music/hardwood_strike.ogg b/public/sound/music/hardwood_strike.ogg new file mode 100644 index 0000000..eb7e02a Binary files /dev/null and b/public/sound/music/hardwood_strike.ogg differ diff --git a/public/sound/music/perfect_round.mp3 b/public/sound/music/perfect_round.mp3 deleted file mode 100644 index b03236c..0000000 Binary files a/public/sound/music/perfect_round.mp3 and /dev/null differ diff --git a/public/sound/music/perfect_round.ogg b/public/sound/music/perfect_round.ogg new file mode 100644 index 0000000..220c435 Binary files /dev/null and b/public/sound/music/perfect_round.ogg differ diff --git a/public/sound/music/pocket_change_victory.mp3 b/public/sound/music/pocket_change_victory.mp3 deleted file mode 100644 index c52f63a..0000000 Binary files a/public/sound/music/pocket_change_victory.mp3 and /dev/null differ diff --git a/public/sound/music/pocket_change_victory.ogg b/public/sound/music/pocket_change_victory.ogg new file mode 100644 index 0000000..f5e1087 Binary files /dev/null and b/public/sound/music/pocket_change_victory.ogg differ diff --git a/public/sound/music/quick_loot_run.mp3 b/public/sound/music/quick_loot_run.mp3 deleted file mode 100644 index 5bd991f..0000000 Binary files a/public/sound/music/quick_loot_run.mp3 and /dev/null differ diff --git a/public/sound/music/quick_loot_run.ogg b/public/sound/music/quick_loot_run.ogg new file mode 100644 index 0000000..88ccfa4 Binary files /dev/null and b/public/sound/music/quick_loot_run.ogg differ diff --git a/public/sound/music/separation-185196.mp3 b/public/sound/music/separation-185196.mp3 deleted file mode 100644 index 44b90e9..0000000 Binary files a/public/sound/music/separation-185196.mp3 and /dev/null differ diff --git a/public/sound/music/separation.ogg b/public/sound/music/separation.ogg new file mode 100644 index 0000000..96f41f2 Binary files /dev/null and b/public/sound/music/separation.ogg differ diff --git a/public/sound/music/target_in_the_sight.mp3 b/public/sound/music/target_in_the_sight.mp3 deleted file mode 100644 index e690e1b..0000000 Binary files a/public/sound/music/target_in_the_sight.mp3 and /dev/null differ diff --git a/public/sound/music/target_in_the_sight.ogg b/public/sound/music/target_in_the_sight.ogg new file mode 100644 index 0000000..52191c0 Binary files /dev/null and b/public/sound/music/target_in_the_sight.ogg differ diff --git a/public/sound/music/the_hammer_falls.mp3 b/public/sound/music/the_hammer_falls.mp3 deleted file mode 100644 index 32fb10a..0000000 Binary files a/public/sound/music/the_hammer_falls.mp3 and /dev/null differ diff --git a/public/sound/music/the_hammer_falls.ogg b/public/sound/music/the_hammer_falls.ogg new file mode 100644 index 0000000..5e296f8 Binary files /dev/null and b/public/sound/music/the_hammer_falls.ogg differ diff --git a/public/sound/music/the_late_commute.mp3 b/public/sound/music/the_late_commute.mp3 deleted file mode 100644 index 4afe09c..0000000 Binary files a/public/sound/music/the_late_commute.mp3 and /dev/null differ diff --git a/public/sound/music/the_late_commute.ogg b/public/sound/music/the_late_commute.ogg new file mode 100644 index 0000000..e24c99b Binary files /dev/null and b/public/sound/music/the_late_commute.ogg differ diff --git a/public/sound/music/the_unwritten_page.mp3 b/public/sound/music/the_unwritten_page.mp3 deleted file mode 100644 index e849add..0000000 Binary files a/public/sound/music/the_unwritten_page.mp3 and /dev/null differ diff --git a/public/sound/music/the_unwritten_page.ogg b/public/sound/music/the_unwritten_page.ogg new file mode 100644 index 0000000..7ea8cca Binary files /dev/null and b/public/sound/music/the_unwritten_page.ogg differ diff --git a/public/sound/music/titanium-170190.mp3 b/public/sound/music/titanium-170190.mp3 deleted file mode 100644 index 811149e..0000000 Binary files a/public/sound/music/titanium-170190.mp3 and /dev/null differ diff --git a/public/sound/music/titanium.ogg b/public/sound/music/titanium.ogg new file mode 100644 index 0000000..610eed4 Binary files /dev/null and b/public/sound/music/titanium.ogg differ diff --git a/public/sound/music/trap-future-bass-royalty-free-music-167020.mp3 b/public/sound/music/trap-future-bass-royalty-free-music-167020.mp3 deleted file mode 100644 index 198db42..0000000 Binary files a/public/sound/music/trap-future-bass-royalty-free-music-167020.mp3 and /dev/null differ diff --git a/public/sound/music/trap-future-bass.ogg b/public/sound/music/trap-future-bass.ogg new file mode 100644 index 0000000..57942df Binary files /dev/null and b/public/sound/music/trap-future-bass.ogg differ diff --git a/public/sound/music/where_the_path_bends.mp3 b/public/sound/music/where_the_path_bends.mp3 deleted file mode 100644 index 58f89ad..0000000 Binary files a/public/sound/music/where_the_path_bends.mp3 and /dev/null differ diff --git a/public/sound/music/where_the_path_bends.ogg b/public/sound/music/where_the_path_bends.ogg new file mode 100644 index 0000000..e849eaa Binary files /dev/null and b/public/sound/music/where_the_path_bends.ogg differ diff --git a/public/sound/sfx/discord-connect.ogg b/public/sound/sfx/discord-connect.ogg index 8c6e520..43600ae 100644 Binary files a/public/sound/sfx/discord-connect.ogg and b/public/sound/sfx/discord-connect.ogg differ diff --git a/public/sound/sfx/discord-disconnect.ogg b/public/sound/sfx/discord-disconnect.ogg index afb4c67..dd93ade 100644 Binary files a/public/sound/sfx/discord-disconnect.ogg and b/public/sound/sfx/discord-disconnect.ogg differ diff --git a/public/sound/sfx/discord-msg.ogg b/public/sound/sfx/discord-msg.ogg index 6b6d73b..ec1dfa9 100644 Binary files a/public/sound/sfx/discord-msg.ogg and b/public/sound/sfx/discord-msg.ogg differ diff --git a/public/sound/sfx/hello.ogg b/public/sound/sfx/hello.ogg index f496c1e..7c4119f 100644 Binary files a/public/sound/sfx/hello.ogg and b/public/sound/sfx/hello.ogg differ diff --git a/public/sound/sfx/hit-minecraft.ogg b/public/sound/sfx/hit-minecraft.ogg index fe4ab51..a2b0728 100644 Binary files a/public/sound/sfx/hit-minecraft.ogg and b/public/sound/sfx/hit-minecraft.ogg differ diff --git a/public/sound/sfx/hit.ogg b/public/sound/sfx/hit.ogg index fdc8219..9197929 100644 Binary files a/public/sound/sfx/hit.ogg and b/public/sound/sfx/hit.ogg differ diff --git a/public/sound/sfx/hurt-minecraft.ogg b/public/sound/sfx/hurt-minecraft.ogg index 87c47d6..968d68a 100644 Binary files a/public/sound/sfx/hurt-minecraft.ogg and b/public/sound/sfx/hurt-minecraft.ogg differ diff --git a/public/sound/sfx/hurt-roblox.ogg b/public/sound/sfx/hurt-roblox.ogg index 347cbe4..6a9ef9a 100644 Binary files a/public/sound/sfx/hurt-roblox.ogg and b/public/sound/sfx/hurt-roblox.ogg differ diff --git a/public/sound/sfx/levelup1.ogg b/public/sound/sfx/levelup1.ogg index 88c1f58..a8821b6 100644 Binary files a/public/sound/sfx/levelup1.ogg and b/public/sound/sfx/levelup1.ogg differ diff --git a/public/sound/sfx/levelup2.ogg b/public/sound/sfx/levelup2.ogg index 4459f91..d91f9f2 100644 Binary files a/public/sound/sfx/levelup2.ogg and b/public/sound/sfx/levelup2.ogg differ diff --git a/public/sound/sfx/no.ogg b/public/sound/sfx/no.ogg index b3b8661..2572d2e 100644 Binary files a/public/sound/sfx/no.ogg and b/public/sound/sfx/no.ogg differ diff --git a/public/sound/sfx/pato.ogg b/public/sound/sfx/pato.ogg index 95e527c..2fe3adc 100644 Binary files a/public/sound/sfx/pato.ogg and b/public/sound/sfx/pato.ogg differ diff --git a/public/sound/sfx/peluche.ogg b/public/sound/sfx/peluche.ogg index f225ff9..acf72ff 100644 Binary files a/public/sound/sfx/peluche.ogg and b/public/sound/sfx/peluche.ogg differ diff --git a/public/sound/sfx/splat.ogg b/public/sound/sfx/splat.ogg index ae86fc7..4869f96 100644 Binary files a/public/sound/sfx/splat.ogg and b/public/sound/sfx/splat.ogg differ diff --git a/public/sound/sfx/windows-error.ogg b/public/sound/sfx/windows-error.ogg index 87850e1..f9aeb86 100644 Binary files a/public/sound/sfx/windows-error.ogg and b/public/sound/sfx/windows-error.ogg differ diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 671c362..7b4330b 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,5 +1,5 @@ import { CommonModule, PlatformLocation } from '@angular/common'; -import { Component, inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit, HostListener } from '@angular/core'; import { RouterOutlet } from '@angular/router'; import { ToolsService } from './services/tools.service'; import { NavbarComponent } from "./components/navbar/navbar.component"; @@ -12,10 +12,11 @@ import { NavbarComponent } from "./components/navbar/navbar.component"; }) export class AppComponent implements OnInit { tools: ToolsService = inject(ToolsService); + constructor (private platformLocation: PlatformLocation) {} ngOnInit(): void { - //!document.oncontextmenu = function(){return false}; + document.oncontextmenu = function(){return false}; document.ondragstart = function(){return false}; document.onselectstart = function(){return false}; @@ -23,6 +24,12 @@ export class AppComponent implements OnInit { document.addEventListener('touchstart', this.onTouchStart.bind(this), { passive: false }); window.addEventListener('beforeunload', (event: BeforeUnloadEvent) => { +<<<<<<< HEAD + if (navigator.userAgent.toLowerCase().includes('electron')) { + return; + } +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 event.preventDefault(); event.returnValue = 'Changes may not be saved'; return 'Changes may not be saved'; @@ -44,4 +51,61 @@ export class AppComponent implements OnInit { event.preventDefault(); } } + + // --- PWA Offline Caching Logic --- + + @HostListener('window:appinstalled', ['$event']) + onAppInstalled() { + console.log('PWA installed! Initiating automated asset download...'); + this.downloadRemainingAssets(); + } + + async downloadRemainingAssets() { + try { + const urlsToCache = new Set(); + + // Fetch your JSON files + const [sfxRes, musicRes, cheemsRes] = await Promise.all([ + fetch('/items/sound_effects.json'), + fetch('/items/music.json'), + fetch('/items/cheems.json') + ]); + + const sfxData = await sfxRes.json(); + const musicData = await musicRes.json(); + const cheemsData = await cheemsRes.json(); + + // Parse SFX + sfxData.forEach((sfx: any) => { + if (sfx.file) urlsToCache.add(`/sound/${sfx.file}`); + if (sfx.files) sfx.files.forEach((file: string) => urlsToCache.add(`/sound/${file}`)); + }); + + // Parse Music + musicData.forEach((music: any) => { + if (music.file && music.basePath) urlsToCache.add(`/${music.basePath}${music.file}`); + if (music.cover) urlsToCache.add(`/${music.cover}`); + }); + + // Parse Skins + cheemsData.forEach((cheems: any) => { + if (cheems.img) urlsToCache.add(`/img/cheems/${cheems.img}`); + if (cheems.hitImg) urlsToCache.add(`/img/cheems/${cheems.hitImg}`); + }); + + console.log(`Found ${urlsToCache.size} unique assets to cache.`); + + // Fire off fetch requests to trigger the Service Worker "lazy" cache + const fetchPromises = Array.from(urlsToCache).map(url => + fetch(url, { mode: 'no-cors' }) + .catch(err => console.error(`Failed to cache: ${url}`, err)) + ); + + await Promise.all(fetchPromises); + console.log('All assets successfully cached for offline use!'); + + } catch (error) { + console.error('Error during automated offline resource download:', error); + } + } } diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index f90edc6..78b82e4 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -2,7 +2,7 @@ import { Routes } from '@angular/router'; import { GameComponent } from './pages/game/game.component'; import { MenuComponent } from './pages/menu/menu.component'; import { SettingsComponent } from './pages/settings/settings.component'; -import { DevSettingsComponent } from './pages/dev-settings/dev-settings.component'; +import { RedeemComponent } from './pages/redeem/redeem.component'; import { ClosetComponent } from './pages/closet/closet.component'; import { OnworkPageComponent } from './pages/onwork-page/onwork-page.component'; import { LicensesComponent } from './pages/licenses/licenses.component'; @@ -27,7 +27,7 @@ export const routes: Routes = [ {path: "game", component: GameComponent, pathMatch: "full"}, {path: "menu", component: MenuComponent, pathMatch: "full"}, {path: "settings", component: SettingsComponent, pathMatch: "full"}, - {path: "devSettings", component: DevSettingsComponent, pathMatch: "full"}, + {path: "redeem", component: RedeemComponent, pathMatch: "full"}, {path: "closet", component: ClosetComponent, pathMatch: "full"}, {path: "gallery", component: GalleryComponent, pathMatch: "full"}, {path: "onWork", component: OnworkPageComponent, pathMatch: "full"}, diff --git a/src/app/components/navbar/navbar.component.css b/src/app/components/navbar/navbar.component.css index 2ae4660..01a1e4d 100644 --- a/src/app/components/navbar/navbar.component.css +++ b/src/app/components/navbar/navbar.component.css @@ -42,7 +42,11 @@ nav { .logo-coin { height: 36px; width: 36px; +<<<<<<< HEAD + cursor: default; +======= cursor: pointer; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 object-fit: contain; } @@ -173,6 +177,16 @@ nav.theme-contrast { nav { padding: 0.5rem 0.75rem; } +<<<<<<< HEAD + .preventive { + position: static; + transform: none; + flex: 1; + padding: 0 0.5rem; + max-width: none; + } +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 .counters-group { gap: 0.35rem; } diff --git a/src/app/components/navbar/navbar.component.html b/src/app/components/navbar/navbar.component.html index 46a2460..e47abfc 100644 --- a/src/app/components/navbar/navbar.component.html +++ b/src/app/components/navbar/navbar.component.html @@ -1,8 +1,12 @@ +<<<<<<< HEAD + >>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 class="icon logo-coin" title="DogeCoins" alt="DogeCoins"> diff --git a/src/app/components/navbar/navbar.component.ts b/src/app/components/navbar/navbar.component.ts index d75d8c5..b7c5d39 100644 --- a/src/app/components/navbar/navbar.component.ts +++ b/src/app/components/navbar/navbar.component.ts @@ -24,6 +24,9 @@ export class NavbarComponent implements OnInit, OnDestroy { } onDogeCoinClick(): void { +<<<<<<< HEAD +======= this.tools.registerDevClick(); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } } diff --git a/src/app/games/block_breaker/block_breaker.component.ts b/src/app/games/block_breaker/block_breaker.component.ts index 03b3521..6b80552 100644 --- a/src/app/games/block_breaker/block_breaker.component.ts +++ b/src/app/games/block_breaker/block_breaker.component.ts @@ -140,9 +140,13 @@ export class BlockBreakerComponent implements OnInit, OnDestroy, AfterViewInit { ngOnInit(): void { this.tools.setTitle("block_breaker" as any); this.tools.actPage = "block_breaker" as any; +<<<<<<< HEAD + +======= localStorage.removeItem("CheemsAppLiMinigame_PlayerLevel"); localStorage.removeItem("CheemsAppLiMinigame_Grid"); localStorage.removeItem("CheemsAppLiMinigame_Costs"); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 this.loadLevel(); this.loadGrid(); this.loadCosts(); diff --git a/src/app/pages/closet/closet.component.html b/src/app/pages/closet/closet.component.html index b4828b9..4ba406c 100644 --- a/src/app/pages/closet/closet.component.html +++ b/src/app/pages/closet/closet.component.html @@ -76,7 +76,11 @@ @if (track.id === 0) { } @else { +<<<<<<< HEAD + +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } {{tools.getMusicName(track)}} diff --git a/src/app/pages/dev-settings/dev-settings.component.css b/src/app/pages/dev-settings/dev-settings.component.css deleted file mode 100644 index f93d80b..0000000 --- a/src/app/pages/dev-settings/dev-settings.component.css +++ /dev/null @@ -1,30 +0,0 @@ -.dev-box { - display: flex; - flex-direction: column; - align-items: center; - gap: 2rem; - width: 90%; - max-width: 650px; - margin: 2.5rem auto; - padding: 2.5rem; -} - -.dev-title { - font-weight: 900; - font-size: 1.5em; - text-align: center; -} - -.dev-actions { - display: flex; - flex-direction: column; - gap: 1.25rem; - width: 100%; - max-width: 400px; -} - -.dev-btn { - width: 100%; - padding: 1rem 1.5rem; - font-size: 1.1em; -} diff --git a/src/app/pages/dev-settings/dev-settings.component.html b/src/app/pages/dev-settings/dev-settings.component.html deleted file mode 100644 index 622e237..0000000 --- a/src/app/pages/dev-settings/dev-settings.component.html +++ /dev/null @@ -1,44 +0,0 @@ - - - {{tools.dev[tools.lang].title}} - - - - - - {{tools.dev[tools.lang].unlockAll || 'Unlock All Content'}} - - - {{tools.dev[tools.lang].resetToZero || 'Delete Progress'}} - - - - - - DogeCoins ({{tools.dogeCoins}}) - - -100 - +100 - - - - - - Points ({{tools.points}}) - - -1k - +1k - - - - - - MG Coins ({{tools.minigameCoins}}) - - -50 - +50 - - - - - diff --git a/src/app/pages/dev-settings/dev-settings.component.ts b/src/app/pages/dev-settings/dev-settings.component.ts deleted file mode 100644 index 1f60c46..0000000 --- a/src/app/pages/dev-settings/dev-settings.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, inject, OnInit } from '@angular/core'; -import { ToolsService } from '../../services/tools.service'; - -@Component({ - selector: 'app-dev-settings', - imports: [], - templateUrl: './dev-settings.component.html', - styleUrl: './dev-settings.component.css' -}) -export class DevSettingsComponent implements OnInit { - tools: ToolsService = inject(ToolsService); - - ngOnInit(): void { - this.tools.setTitle("devSettings"); - this.tools.actPage = "devSettings"; - } - - resetToZero(): void { - this.tools.resetToZero(); - } - - unlockAll(): void { - this.tools.unlockAll(); - } - - modifyDogeCoins(amount: number): void { - this.tools.dogeCoins += amount; - if (amount > 0) { - this.tools.totalDogeCoinsEarned += amount; - this.tools.saveData("lifetime_dg", String(this.tools.totalDogeCoinsEarned)); - } - if (this.tools.dogeCoins < 0) this.tools.dogeCoins = 0; - this.tools.saveData("dg", String(this.tools.dogeCoins)); - this.tools.showToast(this.tools.dev[this.tools.lang].success || "Success"); - this.tools.playSound('4'); - } - - modifyPoints(amount: number): void { - if (amount > 0) { - this.tools.updateScore(amount); - } else { - this.tools.points += amount; - if (this.tools.points < 0) this.tools.points = 0; - this.tools.saveData("points", String(this.tools.points)); - } - this.tools.showToast(this.tools.dev[this.tools.lang].success || "Success"); - this.tools.playSound('4'); - } - - modifyMinigameCoins(amount: number): void { - if (amount > 0) { - this.tools.addMinigameCoins(amount); - } else { - this.tools.minigameCoins += amount; - if (this.tools.minigameCoins < 0) this.tools.minigameCoins = 0; - this.tools.saveData("mg", String(this.tools.minigameCoins)); - } - this.tools.showToast(this.tools.dev[this.tools.lang].success || "Success"); - this.tools.playSound('4'); - } -} diff --git a/src/app/pages/gallery/gallery.component.ts b/src/app/pages/gallery/gallery.component.ts index 663c055..1e090d9 100644 --- a/src/app/pages/gallery/gallery.component.ts +++ b/src/app/pages/gallery/gallery.component.ts @@ -143,7 +143,11 @@ export class GalleryComponent implements OnInit, OnDestroy { get currentAudioCover(): string | null { if (this.activeSection === 'music' && this.unlockedMusicTracks.length > 0) { +<<<<<<< HEAD + return this.unlockedMusicTracks[this.currentIndex].cover || 'img/music/no_image.webp'; +======= return this.unlockedMusicTracks[this.currentIndex].cover || 'img/music/no_image.png'; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } return null; } diff --git a/src/app/pages/game/game.component.css b/src/app/pages/game/game.component.css index 0164bfe..557d126 100644 --- a/src/app/pages/game/game.component.css +++ b/src/app/pages/game/game.component.css @@ -86,4 +86,132 @@ opacity: 0; transform: translate(-50%, -150px) scale(1); } +<<<<<<< HEAD +} + +/* Stats Button */ +.stats-btn { + position: absolute; + bottom: 20px; + right: 20px; + width: 50px; + height: 50px; + border-radius: 50%; + border: none; + background: rgba(0, 0, 0, 0.4); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); + transition: transform 0.2s, background 0.2s; + z-index: 50; +} + +.stats-btn:hover { + transform: scale(1.1); + background: rgba(0, 0, 0, 0.6); +} + +.stats-icon { + width: 24px; + height: 24px; + filter: invert(1); +} + +/* Modal */ +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.6); + backdrop-filter: blur(5px); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; +} + +.modal-content { + background: linear-gradient(145deg, rgba(40, 40, 40, 0.95), rgba(20, 20, 20, 0.95)); + border: 2px solid rgba(255, 255, 255, 0.1); + border-radius: 16px; + padding: 2rem; + width: 90%; + max-width: 400px; + box-shadow: 0 15px 35px rgba(0, 0, 0, 0.5); + text-align: center; + color: white; + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.modal-content.theme-light { + background: linear-gradient(145deg, rgba(255, 245, 230, 0.95), rgba(240, 225, 200, 0.95)); + border-color: rgba(0, 0, 0, 0.1); + color: #4a3b2c; +} + +.modal-title { + font-weight: 900; + margin: 0; + font-size: 1.5rem; +} + +.stat-row { + display: flex; + justify-content: space-between; + align-items: center; + background: rgba(0, 0, 0, 0.2); + padding: 1rem; + border-radius: 8px; + font-weight: bold; +} + +.modal-content.theme-light .stat-row { + background: rgba(255, 255, 255, 0.5); +} + +.stat-label { + opacity: 0.9; + font-size: 0.9rem; +} + +.stat-value { + font-size: 1.2rem; + color: #ffd166; + text-shadow: 0 0 5px rgba(255, 209, 102, 0.3); +} + +.modal-content.theme-light .stat-value { + color: #d97706; +} + +.close-btn { + margin-top: 0.5rem; + padding: 0.8rem; + border-radius: 8px; + border: none; + font-weight: bold; + cursor: pointer; + background: rgba(255, 255, 255, 0.1); + color: inherit; + transition: background 0.2s; +} + +.close-btn:hover { + background: rgba(255, 255, 255, 0.2); +} + +.modal-content.theme-light .close-btn { + background: rgba(0, 0, 0, 0.05); +} + +.modal-content.theme-light .close-btn:hover { + background: rgba(0, 0, 0, 0.1); +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } \ No newline at end of file diff --git a/src/app/pages/game/game.component.html b/src/app/pages/game/game.component.html index 7b4e5d6..01ccf8f 100644 --- a/src/app/pages/game/game.component.html +++ b/src/app/pages/game/game.component.html @@ -21,5 +21,29 @@ [style.top.px]="score.y"> +{{score.value}} +<<<<<<< HEAD + } + + + + + + @if (showStatsModal) { + + + {{tools.game[tools.lang]?.idleStats || 'Idle Stats'}} + + {{tools.game[tools.lang]?.activeAppOpen || 'Active (App Open):'}} + {{activeStats.value | number:'1.0-2'}} {{tools.game[tools.lang]?.[activeStats.unitKey]}} + + + {{tools.game[tools.lang]?.offlineBackground || 'Offline (Background):'}} + {{offlineStats.value | number:'1.0-2'}} {{tools.game[tools.lang]?.[offlineStats.unitKey]}} + + {{tools.game[tools.lang]?.close || 'Close'}} + + +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } \ No newline at end of file diff --git a/src/app/pages/game/game.component.ts b/src/app/pages/game/game.component.ts index 220bf03..2127baa 100644 --- a/src/app/pages/game/game.component.ts +++ b/src/app/pages/game/game.component.ts @@ -1,4 +1,8 @@ import { Component, inject, OnInit, OnDestroy } from '@angular/core'; +<<<<<<< HEAD +import { CommonModule } from '@angular/common'; +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 import { ToolsService } from '../../services/tools.service'; interface FloatingScore { @@ -10,7 +14,11 @@ interface FloatingScore { @Component({ selector: 'app-game', +<<<<<<< HEAD + imports: [CommonModule], +======= imports: [], +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 templateUrl: './game.component.html', styleUrl: './game.component.css' }) @@ -20,6 +28,10 @@ export class GameComponent implements OnInit, OnDestroy { floatingScores: FloatingScore[] = []; private nextScoreId: number = 0; private clickTimeout: any = null; +<<<<<<< HEAD + showStatsModal: boolean = false; +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 private onKeyUpBound = this.onKeyUp.bind(this); @@ -78,5 +90,59 @@ export class GameComponent implements OnInit, OnDestroy { this.clickTimeout = setTimeout(() => { this.clicked = false; }, 250); +<<<<<<< HEAD + } + + get pointsPerHour(): number { + return (3600 / this.tools.idleTime) * this.tools.idlePoints; + } + + get offlinePointsPerHour(): number { + return this.pointsPerHour / 4; + } + + getFormattedPoints(ptsPerHour: number): { value: number, unitKey: string } { + const perSec = ptsPerHour / 3600; + if (perSec >= 1000) { + return { value: perSec, unitKey: 'ptsPerSec' }; + } + const perMin = ptsPerHour / 60; + if (perMin >= 1000) { + return { value: perMin, unitKey: 'ptsPerMin' }; + } + return { value: ptsPerHour, unitKey: 'ptsPerHr' }; + } + + get activeStats() { + return this.getFormattedPoints(this.pointsPerHour); + } + + get offlineStats() { + return this.getFormattedPoints(this.offlinePointsPerHour); + } + + formatDuration(seconds: number): string { + if (seconds < 60) return `${Math.ceil(seconds)}s`; + const m = Math.floor(seconds / 60); + const s = Math.ceil(seconds % 60); + return `${m}m ${s}s`; + } + + get onlineIntervalStr(): string { + return this.formatDuration(this.tools.idleTime); + } + + get offlineIntervalStr(): string { + return this.formatDuration(this.tools.idleTime); + } + + toggleStatsModal(event: Event): void { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + this.showStatsModal = !this.showStatsModal; +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } } diff --git a/src/app/pages/menu/menu.component.html b/src/app/pages/menu/menu.component.html index 5438f4b..0e44ed5 100644 --- a/src/app/pages/menu/menu.component.html +++ b/src/app/pages/menu/menu.component.html @@ -56,6 +56,15 @@ +<<<<<<< HEAD + + + + + {{tools.menu[tools.lang].redeem || 'Redeem Code'}} + + +======= @if (tools.devMenuUnlocked) { @@ -65,5 +74,6 @@ } +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 \ No newline at end of file diff --git a/src/app/pages/onwork-page/onwork-page.component.html b/src/app/pages/onwork-page/onwork-page.component.html index 69ebfce..03117d7 100644 --- a/src/app/pages/onwork-page/onwork-page.component.html +++ b/src/app/pages/onwork-page/onwork-page.component.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD + +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 {{tools.onWork[tools.lang].title}} {{tools.onWork[tools.lang].message}} diff --git a/src/app/pages/p404/p404.component.html b/src/app/pages/p404/p404.component.html index 0c0e53c..c582289 100644 --- a/src/app/pages/p404/p404.component.html +++ b/src/app/pages/p404/p404.component.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD + +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 {{tools.p404[tools.lang].title}} {{tools.p404[tools.lang].message}} diff --git a/src/app/pages/redeem/codes.json b/src/app/pages/redeem/codes.json new file mode 100644 index 0000000..9328534 --- /dev/null +++ b/src/app/pages/redeem/codes.json @@ -0,0 +1,59 @@ +{ + "code_add_dg": { + "code": "DEV-ADD-DG", + "dg": 9999, + "one_time_redeem": false + }, + "code_wipe_dg": { + "code": "DEV-WIPE-DG", + "dg": -9999, + "one_time_redeem": false + }, + "code_add_mg": { + "code": "DEV-ADD-MG", + "mg": 9999, + "one_time_redeem": false + }, + "code_wipe_mg": { + "code": "DEV-WIPE-MG", + "mg": -9999, + "one_time_redeem": false + }, + "code_add_pt": { + "code": "DEV-ADD-PT", + "pt": 999999, + "one_time_redeem": false + }, + "code_wipe_pt": { + "code": "DEV-WIPE-PT", + "pt": -999999, + "one_time_redeem": false + }, + "code_unlock_all": { + "code": "DEV-UNLOCK-ALL", + "cheems": [ + "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14" + ], + "sfx": [ + "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", "s12" + ], + "music": [ + "m0", "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", "m10", "m11", "m12", "m13", "m14", "m15", "m16", "m17", "m18", "m19", "m20", "m21", "m22", "m23", "m24", "m25", "m26", "m27", "m28", "m29" + ], + "one_time_redeem": false + }, + "code_starter_pack": { + "code": "STARTER-PACK", + "dg": 100, + "mg": 100, + "pt": 1000, + "one_time_redeem": true + }, + "minecraft_fan": { + "code": "MINECRAFT-FAN", + "cheems": ["c10"], + "sfx": ["s2", "s4", "s7"], + "music": ["m28"], + "one_time_redeem": true + } +} diff --git a/src/app/pages/redeem/redeem.component.css b/src/app/pages/redeem/redeem.component.css new file mode 100644 index 0000000..7f28dbe --- /dev/null +++ b/src/app/pages/redeem/redeem.component.css @@ -0,0 +1,150 @@ +.page-content { + padding: 20px; + display: flex; + flex-direction: column; + gap: 20px; + max-width: 600px; + margin: 0 auto; + box-sizing: border-box; +} + +.card { + background-color: var(--card-bg, #2a2a2a); + border-radius: 15px; + padding: 25px; + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); + border: 1px solid var(--border-color, #444); +} + +.card.theme-light { + background-color: #ffffff; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + border: 1px solid #e0e0e0; +} + +.section-title { + margin-top: 0; + margin-bottom: 20px; + font-size: 1.5rem; + color: var(--text-color, #ffffff); + text-align: center; +} + +.theme-light .section-title { + color: #333333; +} + +.input-group { + display: flex; + gap: 10px; +} + +.input-text { + flex: 1; + padding: 12px 15px; + border-radius: 8px; + border: 1px solid var(--border-color, #555); + background-color: var(--input-bg, #333); + color: var(--text-color, #fff); + font-size: 1rem; + outline: none; + transition: all 0.3s; +} + +.input-text:focus { + border-color: #ffd700; +} + +.input-text.theme-light { + background-color: #f9f9f9; + border: 1px solid #ccc; + color: #333; +} + +.btn-primary { + background-color: #ffd700; + color: #333; + border: none; + padding: 12px 25px; + border-radius: 8px; + font-weight: bold; + cursor: pointer; + transition: all 0.3s; + font-size: 1rem; +} + +.btn-primary:hover { + background-color: #ffea00; + transform: scale(1.05); +} + +.history-list { + display: flex; + flex-direction: column; + gap: 10px; + max-height: 300px; + overflow-y: auto; +} + +.history-item { + display: flex; + align-items: center; + gap: 15px; + padding: 12px 15px; + background-color: var(--input-bg, #333); + border-radius: 8px; + border: 1px solid var(--border-color, #444); +} + +.history-item.theme-light { + background-color: #f5f5f5; + border: 1px solid #ddd; +} + +.icon { + width: 24px; + height: 24px; + filter: invert(1); +} + +.theme-light .icon { + filter: none; +} + +.code-text { + font-size: 1.1rem; + color: var(--text-color, #fff); + font-family: monospace; + font-weight: bold; + letter-spacing: 1px; +} + +.theme-light .code-text { + color: #333; +} + +.empty-state { + text-align: center; + color: var(--text-color, #888); + padding: 20px; + font-style: italic; +} + +.theme-light .empty-state { + color: #666; +} + +/* Scrollbar styles */ +.history-list::-webkit-scrollbar { + width: 8px; +} +.history-list::-webkit-scrollbar-track { + background: transparent; +} +.history-list::-webkit-scrollbar-thumb { + background: #666; + border-radius: 4px; +} +.theme-light .history-list::-webkit-scrollbar-thumb { + background: #ccc; +} diff --git a/src/app/pages/redeem/redeem.component.html b/src/app/pages/redeem/redeem.component.html new file mode 100644 index 0000000..5eb8e81 --- /dev/null +++ b/src/app/pages/redeem/redeem.component.html @@ -0,0 +1,29 @@ + + + {{tools.redeem[tools.lang].title || 'Redeem Code'}} + + + + + {{tools.redeem[tools.lang].redeemBtn || 'Redeem'}} + + + + + + {{tools.redeem[tools.lang].history || 'Redeem History'}} + + + @if (tools.redeemedCodes.length > 0) { + @for (code of tools.redeemedCodes; track $index) { + + + {{code}} + + } + } @else { + {{tools.redeem[tools.lang].empty_codes || "No redeemed codes yet."}} + } + + + diff --git a/src/app/pages/redeem/redeem.component.ts b/src/app/pages/redeem/redeem.component.ts new file mode 100644 index 0000000..7c22cbb --- /dev/null +++ b/src/app/pages/redeem/redeem.component.ts @@ -0,0 +1,109 @@ +import { Component, inject, OnInit } from '@angular/core'; +import { ToolsService } from '../../services/tools.service'; +import codesJson from './codes.json'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'app-redeem', + imports: [FormsModule, CommonModule], + templateUrl: './redeem.component.html', + styleUrl: './redeem.component.css' +}) +export class RedeemComponent implements OnInit { + tools: ToolsService = inject(ToolsService); + inputCode: string = ''; + + ngOnInit(): void { + this.tools.setTitle("redeem"); + this.tools.actPage = "redeem"; + } + + redeemCode(): void { + const codeToRedeem = this.inputCode.trim().toUpperCase(); + if (!codeToRedeem) return; + + let matchedConfig: any = null; + let matchedId: string = ''; + + const codesData: any = codesJson; + for (const id in codesData) { + if (codesData[id].code.toUpperCase() === codeToRedeem) { + matchedConfig = codesData[id]; + matchedId = id; + break; + } + } + + if (!matchedConfig) { + this.tools.showToast(this.tools.redeem[this.tools.lang]?.invalidCode || "Invalid code!"); + return; + } + + if (matchedConfig.one_time_redeem && this.tools.redeemedCodes.includes(matchedConfig.code)) { + this.tools.showToast(this.tools.redeem[this.tools.lang]?.alreadyRedeemed || "Code already redeemed!"); + return; + } + + // Apply Rewards + if (matchedConfig.dg) { + this.tools.dogeCoins += matchedConfig.dg; + if (this.tools.dogeCoins < 0) { + this.tools.dogeCoins = 0; + } else if (matchedConfig.dg > 0) { + this.tools.totalDogeCoinsEarned += matchedConfig.dg; + this.tools.saveData("lifetime_dg", String(this.tools.totalDogeCoinsEarned)); + } + this.tools.saveData("dg", String(this.tools.dogeCoins)); + } + + if (matchedConfig.mg) { + this.tools.minigameCoins += matchedConfig.mg; + if (this.tools.minigameCoins < 0) { + this.tools.minigameCoins = 0; + } else if (matchedConfig.mg > 0) { + this.tools.totalMinigameCoinsEarned += matchedConfig.mg; + this.tools.saveData("lifetime_mg", String(this.tools.totalMinigameCoinsEarned)); + } + this.tools.saveData("mg", String(this.tools.minigameCoins)); + } + + if (matchedConfig.pt) { + if (matchedConfig.pt > 0) { + this.tools.updateScore(matchedConfig.pt); + } else { + this.tools.points += matchedConfig.pt; + if (this.tools.points < 0) this.tools.points = 0; + this.tools.saveData("points", String(this.tools.points)); + } + } + + // Unlocks + if (matchedConfig.cheems && Array.isArray(matchedConfig.cheems)) { + matchedConfig.cheems.forEach((c: string) => { + this.tools.unlockedCheems[c] = true; + }); + this.tools.saveUnlockedCheems(); + } + if (matchedConfig.sfx && Array.isArray(matchedConfig.sfx)) { + matchedConfig.sfx.forEach((s: string) => { + this.tools.unlockedSounds[s] = true; + }); + this.tools.saveUnlockedSounds(); + } + if (matchedConfig.music && Array.isArray(matchedConfig.music)) { + matchedConfig.music.forEach((m: string) => { + this.tools.unlockedMusic[m] = true; + }); + this.tools.saveUnlockedMusic(); + } + + // Save to history + this.tools.redeemedCodes.push(matchedConfig.code); + this.tools.saveRedeemedCodes(); + + this.inputCode = ''; + this.tools.playSound('sfx_4'); // Success sound + this.tools.showToast(this.tools.redeem[this.tools.lang]?.success || "Code redeemed successfully!"); + } +} diff --git a/src/app/pages/shop/shop.component.css b/src/app/pages/shop/shop.component.css index 13b4099..057ddc3 100644 --- a/src/app/pages/shop/shop.component.css +++ b/src/app/pages/shop/shop.component.css @@ -66,6 +66,15 @@ } /* Per-section accent colors for nav buttons */ +.nav-upgrade { + border-color: rgba(255, 100, 100, 0.4); + color: #ff6464; +} +.nav-upgrade:hover { + background: rgba(255, 100, 100, 0.2); + box-shadow: 0 4px 15px rgba(255, 100, 100, 0.3); +} + .nav-dogecoin { border-color: rgba(255, 215, 0, 0.4); color: #ffd700; @@ -153,6 +162,16 @@ } /* Section-specific separator colors */ +.upgrade-title { + color: #ff6464; + border-color: rgba(255, 100, 100, 0.4); + background: rgba(255, 100, 100, 0.08); +} +.section-separator:has(.upgrade-title)::before, +.section-separator:has(.upgrade-title)::after { + background: linear-gradient(90deg, transparent, rgba(255, 100, 100, 0.5), transparent); +} + .dogecoin-title { color: #ffd700; border-color: rgba(255, 215, 0, 0.4); @@ -418,6 +437,16 @@ font-size: 3rem; } +.upgrade-badge { + background: linear-gradient(135deg, #ff6464, #d32f2f); + color: #fff; + font-weight: 800; + font-size: 1rem; + padding: 0.3rem 0.8rem; + border-radius: 50px; + box-shadow: 0 2px 10px rgba(211, 47, 47, 0.4); +} + .multiplier-badge { background: linear-gradient(135deg, #00c6ff, #0072ff); color: #fff; @@ -664,6 +693,15 @@ border-color: rgba(180, 120, 50, 0.25); } +.shop-container.theme-light .nav-upgrade { + color: #d32f2f; + border-color: rgba(211, 47, 47, 0.4); +} +.shop-container.theme-light .nav-upgrade:hover { + background: rgba(211, 47, 47, 0.12); + box-shadow: 0 4px 12px rgba(211, 47, 47, 0.2); +} + .shop-container.theme-light .nav-dogecoin { color: #b35900; border-color: rgba(179, 89, 0, 0.4); @@ -714,6 +752,15 @@ background: rgba(255, 255, 255, 0.8); } +.shop-container.theme-light .upgrade-title { + color: #d32f2f; + border-color: rgba(211, 47, 47, 0.4); +} +.shop-container.theme-light .section-separator:has(.upgrade-title)::before, +.shop-container.theme-light .section-separator:has(.upgrade-title)::after { + background: linear-gradient(90deg, transparent, rgba(211, 47, 47, 0.4), transparent); +} + .shop-container.theme-light .dogecoin-title { color: #b35900; border-color: rgba(179, 89, 0, 0.4); diff --git a/src/app/pages/shop/shop.component.html b/src/app/pages/shop/shop.component.html index 1cb0f08..9e2e69f 100644 --- a/src/app/pages/shop/shop.component.html +++ b/src/app/pages/shop/shop.component.html @@ -12,6 +12,11 @@ {{tools.shop[tools.lang]?.title || 'Shop'}} {{tools.shop[tools.lang]?.currencySection || 'Currency'}} } + @if (upgradeItems.length > 0) { + + {{tools.shop[tools.lang]?.upgradesSection || 'Upgrades'}} + + } @if (minigameItems.length > 0) { {{tools.shop[tools.lang]?.minigamesSection || 'Minigames'}} @@ -64,7 +69,7 @@ {{tools.shop[tools.lang]?.title || 'Shop'}} DogeCoins: - + {{tools.dogeCoins}} @@ -85,7 +90,7 @@ {{tools.shop[tools.lang]?.title || 'Shop'}} [class.currency-dgc-to-mg-card]="item.id === 'curr_dgc_to_mg'" [class.currency-mg-to-dgc-card]="item.id === 'curr_mg_to_dgc'"> - @if (item.icon.endsWith('.svg') || item.icon.endsWith('.png')) { + @if (item.icon.endsWith('.svg') || item.icon.endsWith('.png') || item.icon.endsWith('.webp')) { } @else { {{item.icon}} @@ -93,6 +98,15 @@ {{tools.shop[tools.lang]?.title || 'Shop'}} @if (item.type === 'booster') { x{{item.multiplier || 1}} } + @if (item.type === 'upgrade') { + + @if (isUpgradeMaxLevel(item)) { + {{tools.shop[tools.lang]?.maxLevel || 'Max Level'}} + } @else { + Lvl {{tools.purchasedUpgrades[item.id] || 0}} + } + + } @@ -147,6 +161,18 @@ {{tools.shop[tools.lang]?.currencySecti } + + @if (upgradeItems.length > 0) { + + {{tools.shop[tools.lang]?.upgradesSection || 'Upgrades'}} + + + @for (item of upgradeItems; track item.id) { + + } + + } + @if (minigameItems.length > 0) { diff --git a/src/app/pages/shop/shop.component.ts b/src/app/pages/shop/shop.component.ts index 6c7b556..5750603 100644 --- a/src/app/pages/shop/shop.component.ts +++ b/src/app/pages/shop/shop.component.ts @@ -40,6 +40,10 @@ export class ShopComponent implements OnInit, OnDestroy { } buyItem(item: ShopItem): void { + if (this.isUpgradeMaxLevel(item)) { + return; + } + if (!this.tools.canBuyDailyLimit(item)) { this.tools.showToast(this.tools.shop[this.tools.lang]?.dailyLimitReached || "Daily limit reached!"); return; @@ -49,17 +53,18 @@ export class ShopComponent implements OnInit, OnDestroy { return; } + const costObj = this.getDynamicCost(item); + if (item.type === 'dogecoin') { const coinsGiven = item.coinsGiven || 1; - this.tools.buyDogeCoin(item.cost, coinsGiven, item.id); + this.tools.buyDogeCoin(costObj.pts, coinsGiven, item.id); + } else if (item.type === 'upgrade') { + this.tools.buyUpgrade(item, costObj.pts, costObj.coins); } else if (item.type === 'currency') { - const ptsCost = item.cost || 0; - const coinCost = item.costCoins || 0; - const mgCost = item.costMinigames || 0; - if (this.tools.points >= ptsCost && this.tools.dogeCoins >= coinCost && this.tools.minigameCoins >= mgCost) { - this.tools.points -= ptsCost; - this.tools.dogeCoins -= coinCost; - this.tools.minigameCoins -= mgCost; + if (this.tools.points >= costObj.pts && this.tools.dogeCoins >= costObj.coins && this.tools.minigameCoins >= costObj.mg) { + this.tools.points -= costObj.pts; + this.tools.dogeCoins -= costObj.coins; + this.tools.minigameCoins -= costObj.mg; if (item.coinsGiven) { this.tools.dogeCoins += item.coinsGiven; } @@ -76,13 +81,10 @@ export class ShopComponent implements OnInit, OnDestroy { this.tools.showToast(this.tools.shop[this.tools.lang]?.notEnoughCoins || "Not enough currency!"); } } else if (item.type === 'minigame') { - const ptsCost = item.cost || 0; - const coinCost = item.costCoins || 0; - const mgCost = item.costMinigames || 0; - if (this.tools.points >= ptsCost && this.tools.dogeCoins >= coinCost && this.tools.minigameCoins >= mgCost) { - this.tools.points -= ptsCost; - this.tools.dogeCoins -= coinCost; - this.tools.minigameCoins -= mgCost; + if (this.tools.points >= costObj.pts && this.tools.dogeCoins >= costObj.coins && this.tools.minigameCoins >= costObj.mg) { + this.tools.points -= costObj.pts; + this.tools.dogeCoins -= costObj.coins; + this.tools.minigameCoins -= costObj.mg; this.tools.saveData("points", String(this.tools.points)); this.tools.saveData("dg", String(this.tools.dogeCoins)); this.tools.saveData("mg", String(this.tools.minigameCoins)); @@ -96,9 +98,7 @@ export class ShopComponent implements OnInit, OnDestroy { this.tools.showToast(this.tools.shop[this.tools.lang]?.notEnoughCoins || "Not enough currency!"); } } else if (item.type === 'booster') { - const ptsCost = item.cost || 0; - const coinCost = item.costCoins || 0; - if (this.tools.points >= ptsCost && this.tools.dogeCoins >= coinCost) { + if (this.tools.points >= costObj.pts && this.tools.dogeCoins >= costObj.coins) { const isOverride = this.tools.boosterEndTime !== 0 && this.tools.getBoosterRemainingSeconds() > 0 && this.tools.boosterMultiplier !== item.multiplier; if (isOverride) { const warningTemplate = this.tools.shop[this.tools.lang]?.boosterOverrideWarning || "Warning! You already have an active x{current} booster. Buying a x{new} booster will override your remaining time. Do you want to continue?"; @@ -109,14 +109,14 @@ export class ShopComponent implements OnInit, OnDestroy { return; } } - this.tools.points -= ptsCost; - this.tools.dogeCoins -= coinCost; + this.tools.points -= costObj.pts; + this.tools.dogeCoins -= costObj.coins; this.tools.saveData("points", String(this.tools.points)); this.tools.saveData("dg", String(this.tools.dogeCoins)); this.tools.recordDailyPurchase(item.id); this.tools.activateBooster(item.multiplier || 1, item.durationMin || 0); } else { - if (this.tools.points < ptsCost) { + if (this.tools.points < costObj.pts) { this.tools.showToast(this.tools.shop[this.tools.lang]?.needMorePoints || "Not enough points!"); } else { this.tools.showToast(this.tools.shop[this.tools.lang]?.notEnoughCoins || "Not enough DogeCoins!"); @@ -127,6 +127,30 @@ export class ShopComponent implements OnInit, OnDestroy { } } + getDynamicCost(item: ShopItem): { pts: number, coins: number, mg: number } { + const times = this.tools.purchasedUpgrades[item.id] || 0; + const mult = 1 + (item.priceMultiplier || 1) * times; + + let ptsCost = item.cost !== undefined ? item.cost : (item.type === 'dogecoin' ? this.dailyPrice : 0); + let coinsCost = item.costCoins || 0; + let mgCost = item.costMinigames || 0; + + if (item.type === 'upgrade') { + ptsCost = Math.ceil(ptsCost * mult); + coinsCost = Math.ceil(coinsCost * mult); + mgCost = Math.ceil(mgCost * mult); + } + + return { pts: ptsCost, coins: coinsCost, mg: mgCost }; + } + + isUpgradeMaxLevel(item: ShopItem): boolean { + if (item.type === 'upgrade' && item.upgradeType === 'frequency') { + return this.tools.idleTime <= 1; + } + return false; + } + canBuy(item: ShopItem): boolean { if (this.tools.isLifetimeLimitReached(item)) { return false; @@ -134,30 +158,29 @@ export class ShopComponent implements OnInit, OnDestroy { if (!this.tools.canBuyDailyLimit(item)) { return false; } - const ptsCost = item.cost !== undefined ? item.cost : (item.type === 'dogecoin' ? this.dailyPrice : 0); - const coinsCost = item.costCoins || 0; - const mgCost = item.costMinigames || 0; - return this.tools.points >= ptsCost && this.tools.dogeCoins >= coinsCost && this.tools.minigameCoins >= mgCost; + if (this.isUpgradeMaxLevel(item)) { + return false; + } + const costObj = this.getDynamicCost(item); + return this.tools.points >= costObj.pts && this.tools.dogeCoins >= costObj.coins && this.tools.minigameCoins >= costObj.mg; } formatItemCost(item: ShopItem): string { - const ptsCost = item.cost !== undefined ? item.cost : (item.type === 'dogecoin' ? this.dailyPrice : 0); - const coinsCost = item.costCoins || 0; - const mgCost = item.costMinigames || 0; + const costObj = this.getDynamicCost(item); - if (ptsCost === 0 && coinsCost === 0 && mgCost === 0) { + if (costObj.pts === 0 && costObj.coins === 0 && costObj.mg === 0) { return this.tools.shop[this.tools.lang]?.free || "Free"; } const parts: string[] = []; - if (ptsCost > 0) { - parts.push(`${ptsCost.toLocaleString()} Pts`); + if (costObj.pts > 0) { + parts.push(`${costObj.pts.toLocaleString()} Pts`); } - if (coinsCost > 0) { - parts.push(`${coinsCost.toLocaleString()} DGC`); + if (costObj.coins > 0) { + parts.push(`${costObj.coins.toLocaleString()} DGC`); } - if (mgCost > 0) { - parts.push(`${mgCost.toLocaleString()} MG`); + if (costObj.mg > 0) { + parts.push(`${costObj.mg.toLocaleString()} MG`); } return parts.join(' + '); } @@ -166,6 +189,10 @@ export class ShopComponent implements OnInit, OnDestroy { return this.tools.shopItems.filter(i => i.type === 'dogecoin' || i.type === 'currency'); } + get upgradeItems(): ShopItem[] { + return this.tools.shopItems.filter(i => i.type === 'upgrade'); + } + get minigameItems(): ShopItem[] { return this.tools.shopItems.filter(i => i.type === 'minigame'); } @@ -206,7 +233,7 @@ export class ShopComponent implements OnInit, OnDestroy { return item.icon; } if (item.type === 'cheems') { - return 'img/cheems/locked-cheems.png'; + return 'img/cheems/locked-cheems.webp'; } if (item.type === 'sound') { return 'img/icons/black-sound-svgrepo-com.svg'; diff --git a/src/app/services/constants.service.ts b/src/app/services/constants.service.ts index 9d0ce0a..ff79176 100644 --- a/src/app/services/constants.service.ts +++ b/src/app/services/constants.service.ts @@ -2,7 +2,11 @@ import { Injectable } from '@angular/core'; export interface PageName { closet: string; +<<<<<<< HEAD + redeem: string; +======= devSettings: string; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 game: string; menu: string; onWork: string; @@ -89,12 +93,20 @@ export const AVAILABLE_LANGUAGES: Array = [ ]; export const showCoins: Array = [ +<<<<<<< HEAD + "game", "redeem", "closet", "menu", "block_breaker", "attack_hole", "doge_rescue", "flappy_dunk", "helix_jump", "magic_sort", "mob_control", "paper_io", "spiral_roll", "stack_colors", "minigames" +======= "game", "dev-settings", "closet", "menu", "block_breaker", "attack_hole", "doge_rescue", "flappy_dunk", "helix_jump", "magic_sort", "mob_control", "paper_io", "spiral_roll", "stack_colors", "minigames" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 ]; export const pageName: PageName = { closet: "", +<<<<<<< HEAD + redeem: "", +======= devSettings: "", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 game: "", menu: "", onWork: "", @@ -125,7 +137,11 @@ export const menuText = { closet: "", stats: "", licenses: "", +<<<<<<< HEAD + redeem: "", +======= devMenu: "", +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 buyDogeCoin: "", buyDogeCoinSub: "", buyDogeCoinSuccess: "", @@ -252,6 +268,16 @@ export const closetText = { itemSelected: "" }; +<<<<<<< HEAD +export const redeemText = { + title: "", + enterCode: "", + redeemBtn: "", + history: "", + invalidCode: "", + alreadyRedeemed: "", + success: "" +======= export const devText = { title: "", resetToZero: "", @@ -261,6 +287,7 @@ export const devText = { success: "", unlocked: "", locked: "" +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 }; export const onWorkText = { @@ -323,6 +350,8 @@ export interface OfflineCategory { urls: string[]; } +<<<<<<< HEAD +======= export const OFFLINE_CATEGORIES: OfflineCategory[] = [ { id: 'essentials', @@ -451,6 +480,7 @@ export const OFFLINE_CATEGORIES: OfflineCategory[] = [ } ]; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 export const CHEEMS_SKINS: Array = []; export const SOUND_EFFECTS: Array = []; @@ -459,7 +489,11 @@ export const MUSIC_TRACKS: Array = []; export interface ShopItem { id: string; +<<<<<<< HEAD + type: 'dogecoin' | 'currency' | 'minigame' | 'booster' | 'cheems' | 'sound' | 'music' | 'upgrade'; +======= type: 'dogecoin' | 'currency' | 'minigame' | 'booster' | 'cheems' | 'sound' | 'music'; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 targetId?: string | number; nameKey?: string; nameEs?: string; @@ -477,6 +511,12 @@ export interface ShopItem { icon: string; dailyLimit?: number; oneTimePurchase?: boolean; +<<<<<<< HEAD + upgradeType?: 'frequency' | 'quantity'; + upgradeValue?: number; + priceMultiplier?: number; +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } @Injectable({ diff --git a/src/app/services/tools.service.ts b/src/app/services/tools.service.ts index 28830e1..ff14a9d 100644 --- a/src/app/services/tools.service.ts +++ b/src/app/services/tools.service.ts @@ -8,7 +8,11 @@ import { pageName, menuText, closetText, +<<<<<<< HEAD + redeemText, +======= devText, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 onWorkText, p404Text, minigamesText, @@ -24,7 +28,10 @@ import { LanguageItem, offlineText, OfflineCategory, +<<<<<<< HEAD +======= OFFLINE_CATEGORIES, +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 ShopItem, flappy_dunkText, magic_sortText, @@ -62,11 +69,23 @@ export class ToolsService { totalDogeCoinsEarned: number = 0; totalMinigameCoinsEarned: number = 0; +<<<<<<< HEAD + idlePoints: number = 0; + idleTime: number = 1; + private idleTimer: any = null; + purchasedUpgrades: Record = {}; + + effVol: number = 100; + musVol: number = 50; + + redeemedCodes: string[] = []; +======= effVol: number = 100; musVol: number = 50; devMenuUnlocked: boolean = false; private devClickCount: number = 0; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 unlockedCheems: Record = {}; unlockedSounds: Record = {}; @@ -77,7 +96,11 @@ export class ToolsService { options: any = createLangMap(optionsText); menu: any = createLangMap(menuText); closet: any = createLangMap(closetText); +<<<<<<< HEAD + redeem: any = createLangMap(redeemText); +======= dev: any = createLangMap(devText); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 onWork: any = createLangMap(onWorkText); p404: any = createLangMap(p404Text); offline: any = createLangMap(offlineText); @@ -97,7 +120,10 @@ export class ToolsService { paper_io: any = createLangMap(paper_ioText); spiral_roll: any = createLangMap(spiral_rollText); stack_colors: any = createLangMap(stack_colorsText); +<<<<<<< HEAD +======= offlineCategories: Array = OFFLINE_CATEGORIES; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 shopItemsText: Record> = {}; itemsText: Record> = {}; shopItems: Array = []; @@ -265,7 +291,11 @@ export class ToolsService { }; if (data.menu) this.menu[langCode] = { ...this.menu[langCode], ...data.menu }; if (data.closet) this.closet[langCode] = { ...this.closet[langCode], ...data.closet }; +<<<<<<< HEAD + if (data.redeemText) this.redeem[langCode] = { ...this.redeem[langCode], ...data.redeemText }; +======= if (data.dev) this.dev[langCode] = { ...this.dev[langCode], ...data.dev }; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 if (data.onWork) this.onWork[langCode] = { ...this.onWork[langCode], ...data.onWork }; if (data.p404) this.p404[langCode] = { ...this.p404[langCode], ...data.p404 }; if (data.offline) this.offline[langCode] = { ...this.offline[langCode], ...data.offline }; @@ -388,7 +418,11 @@ export class ToolsService { const minigamePages = ["block_breaker", "attack_hole", "doge_rescue", "flappy_dunk", "helix_jump", "magic_sort", "mob_control", "paper_io", "spiral_roll", "stack_colors"]; if (minigamePages.includes(this.actPage as string)) { this.redirect("minigames"); +<<<<<<< HEAD + } else if (["redeem", "closet", "gallery", "settings", "onWork", "shop", "minigames", "stats", "licenses"].includes(this.actPage as string)) { +======= } else if (["devSettings", "closet", "gallery", "settings", "onWork", "shop", "minigames", "stats", "licenses"].includes(this.actPage as string)) { +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 this.redirect("menu"); } else if (["menu", "p404"].includes(this.actPage as string)) { this.redirect("game"); @@ -432,14 +466,20 @@ export class ToolsService { this.totalMinigameCoinsEarned += amount; this.saveData("mg", String(this.minigameCoins)); this.saveData("lifetime_mg", String(this.totalMinigameCoinsEarned)); +<<<<<<< HEAD +======= document.cookie = `CheemsAppLiMinigameCoins=${this.minigameCoins}; path=/; max-age=31536000`; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } spendMinigameCoins(amount: number): boolean { if (this.minigameCoins >= amount) { this.minigameCoins = Math.floor(this.minigameCoins - amount); this.saveData("mg", String(this.minigameCoins)); +<<<<<<< HEAD +======= document.cookie = `CheemsAppLiMinigameCoins=${this.minigameCoins}; path=/; max-age=31536000`; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 return true; } return false; @@ -545,6 +585,34 @@ export class ToolsService { } } +<<<<<<< HEAD + buyUpgrade(item: ShopItem, currentCost: number, coinsCost: number): void { + if (this.points >= currentCost && this.dogeCoins >= coinsCost) { + this.points -= currentCost; + this.dogeCoins -= coinsCost; + this.saveData("points", String(this.points)); + this.saveData("dg", String(this.dogeCoins)); + + const times = this.purchasedUpgrades[item.id] || 0; + this.purchasedUpgrades[item.id] = times + 1; + this.saveData("upgrades", this.stringifyObject(this.purchasedUpgrades)); + + this.recalculateIdleStats(); + this.recordDailyPurchase(item.id); + + this.showToast(this.closet[this.lang]?.purchased || "Purchased!"); + this.playSound('sfx_4'); + } else { + this.showToast(this.shop[this.lang]?.notEnoughCoins || "Not enough currency!"); + this.playSound('sfx_8'); + } + } + + saveRedeemedCodes(): void { + this.saveData("redeemed_codes", JSON.stringify(this.redeemedCodes)); + } + +======= registerDevClick(): void { this.devClickCount++; if (this.devClickCount === 5) { @@ -560,6 +628,7 @@ export class ToolsService { } } +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 playSound(customSoundId?: string): void { if (this.isWindowBlurred) return; const soundToPlay = customSoundId || this.selectedSound; @@ -821,7 +890,11 @@ export class ToolsService { this.saveData("total_score", String(this.totalScore)); this.saveData("high_score", String(this.highScore)); this.saveData("dg", String(this.dogeCoins)); +<<<<<<< HEAD + this.showToast(this.redeem[this.lang]?.success || "Success"); +======= this.showToast(this.dev[this.lang].success); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 this.playSound('sfx_4'); } @@ -878,6 +951,16 @@ export class ToolsService { this.deleteData("lifetime_purchases"); this.deleteData("daily_purchases_limit"); +<<<<<<< HEAD + this.deleteData("upgrades"); + this.deleteData("idle_points"); + this.deleteData("redeemed_codes"); + + this.purchasedUpgrades = {}; + this.redeemedCodes = []; + this.recalculateIdleStats(); +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 this.boosterMultiplier = 1; this.boosterEndTime = 0; @@ -891,7 +974,11 @@ export class ToolsService { this.saveData("app_theme", "1"); this.saveData("font_size", "2"); +<<<<<<< HEAD + this.showToast(this.redeem[this.lang]?.success || "Success"); +======= this.showToast(this.dev[this.lang].success); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 this.playSound(); this.currentMusicFile = ""; this.playMusic(); @@ -911,7 +998,12 @@ export class ToolsService { this.loadMusic(); this.loadScore(); this.loadUnlocks(); +<<<<<<< HEAD + this.initIdlePoints(); + this.loadRedeemedCodes(); +======= this.loadDevMenu(); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } loadSettings(): void { @@ -969,6 +1061,16 @@ export class ToolsService { const tMG = this.loadData("lifetime_mg"); this.totalMinigameCoinsEarned = tMG ? this.parseNumber(tMG) : this.minigameCoins; +<<<<<<< HEAD + this.loadMinigameCoins(); + + this.actScore = 0; + } + + loadMinigameCoins(): void { + const mgCoins = this.loadData("mg"); + this.minigameCoins = mgCoins ? this.parseNumber(mgCoins) : 0; +======= let mgCoins = this.loadData("mg"); if (!mgCoins) { const match = document.cookie.match(/(^| )CheemsAppLiMinigameCoins=([^;]+)/); @@ -978,6 +1080,7 @@ export class ToolsService { this.actScore = 0; localStorage.setItem("CheemsAppLiActPoints", "0"); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } loadUnlocks(): void { @@ -1023,9 +1126,23 @@ export class ToolsService { this.saveData("unlocked_music", this.stringifyArray(list)); } +<<<<<<< HEAD + loadRedeemedCodes(): void { + const stored = this.loadData("redeemed_codes"); + if (stored) { + try { + this.redeemedCodes = JSON.parse(stored); + } catch (e) { + this.redeemedCodes = []; + } + } else { + this.redeemedCodes = []; + } +======= loadDevMenu(): void { const stored = this.loadData("dev_menu"); this.devMenuUnlocked = stored ? stored.replace(/"/g, '') === 'true' : false; +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } parseNumber(value: string): number { @@ -1040,6 +1157,8 @@ export class ToolsService { return new Promise(resolve => setTimeout(resolve, time)); } +<<<<<<< HEAD +======= async checkCategoryCached(category: OfflineCategory): Promise { if (!('caches' in window)) return false; try { @@ -1083,6 +1202,7 @@ export class ToolsService { } } +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 loadBoosterState(): void { const multStr = this.loadData("active_booster"); if (multStr) { @@ -1113,6 +1233,10 @@ export class ToolsService { console.warn("Could not load data/shop.json", err); } this.appendUnlockableShopItems(); +<<<<<<< HEAD + this.recalculateIdleStats(); +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } private evaluatePriceExpression(expression: string | number | undefined): number { @@ -1405,6 +1529,10 @@ export class ToolsService { private pauseAllAudioForBlur(): void { if (this.isWindowBlurred) return; this.isWindowBlurred = true; +<<<<<<< HEAD + this.saveData("last_active_time", String(Date.now())); +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 if (this.audioCtx && this.audioCtx.state === 'running') { this.audioCtx.suspend().catch(() => {}); } @@ -1416,6 +1544,10 @@ export class ToolsService { private resumeAllAudioForFocus(): void { if (!this.isWindowBlurred) return; this.isWindowBlurred = false; +<<<<<<< HEAD + this.calculateIdleCatchup(); +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 this.resumeBackground(); } @@ -1443,13 +1575,23 @@ export class ToolsService { getCheemsImg(id: string): string { const skin = this.cheemsSkins.find(s => s.id === id); if (skin?.imgUrl) return skin.imgUrl; +<<<<<<< HEAD + const fallbackId = id.replace('cheems_', ''); + return "img/cheems/" + (skin?.img || fallbackId + ".webp"); +======= return "img/cheems/" + (skin?.img || id + ".png"); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } getCheemsHitImg(id: string): string { const skin = this.cheemsSkins.find(s => s.id === id); if (skin?.hitImgUrl) return skin.hitImgUrl; +<<<<<<< HEAD + const fallbackId = id.replace('cheems_', ''); + return "img/hit/" + (skin?.hitImg || skin?.img || fallbackId + ".webp"); +======= return "img/hit/" + (skin?.hitImg || skin?.img || id + ".png"); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } getShopItemName(item: ShopItem): string { @@ -1555,7 +1697,11 @@ export class ToolsService { } } +<<<<<<< HEAD + this.showToast(this.redeem[this.lang]?.success || "Success"); +======= this.showToast(this.dev[this.lang].success || "Success"); +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 setTimeout(() => { location.reload(); }, 1000); @@ -1566,4 +1712,97 @@ export class ToolsService { }; reader.readAsText(file); } +<<<<<<< HEAD + + initIdlePoints(): void { + const idleConfigStr = this.loadData("idle_points"); + if (idleConfigStr) { + const cfg = this.parseObjectString(idleConfigStr); + if (cfg['points']) this.idlePoints = parseFloat(cfg['points']); + this.idleTime = 1; + } else { + this.saveData("idle_points", this.stringifyObject({ points: 0, time: 1 })); + } + + const upgradesStr = this.loadData("upgrades"); + if (upgradesStr) { + this.purchasedUpgrades = this.parseObjectString(upgradesStr) as any; + for (const key of Object.keys(this.purchasedUpgrades)) { + this.purchasedUpgrades[key] = parseInt(this.purchasedUpgrades[key] as any, 10) || 0; + } + } else { + this.purchasedUpgrades = {}; + } + this.recalculateIdleStats(); + + this.calculateIdleCatchup(); + this.startIdleTimer(); + } + + recalculateIdleStats(): void { + let basePoints = 0; + let baseTime = 1; + + const idleConfigStr = this.loadData("idle_points"); + if (idleConfigStr) { + const cfg = this.parseObjectString(idleConfigStr); + if (cfg['points']) basePoints = parseFloat(cfg['points']); + if (cfg['time']) baseTime = parseInt(cfg['time'], 10); + } + + // Apply upgrades from loaded shop items + if (this.shopItems && this.shopItems.length > 0) { + for (const upgradeId of Object.keys(this.purchasedUpgrades)) { + const times = this.purchasedUpgrades[upgradeId]; + if (times > 0) { + const item = this.shopItems.find(i => i.id === upgradeId); + if (item && item.type === 'upgrade' && item.upgradeValue) { + if (item.upgradeType === 'quantity') { + basePoints += item.upgradeValue * times; + } + } + } + } + } + + this.idlePoints = basePoints; + this.idleTime = 1; + + // Restart the timer so the new interval takes effect + this.startIdleTimer(); + } + + startIdleTimer(): void { + if (this.idleTimer) clearInterval(this.idleTimer); + this.idleTimer = setInterval(() => { + if (!this.isWindowBlurred) { + this.updateScore(Math.floor(this.idlePoints)); + this.saveData("last_active_time", String(Date.now())); + } + }, this.idleTime * 1000); + } + + calculateIdleCatchup(): void { + const lastActiveStr = this.loadData("last_active_time"); + const now = Date.now(); + + if (lastActiveStr) { + const lastActive = parseInt(lastActiveStr, 10); + const diffMs = now - lastActive; + const offlineIntervalMs = this.idleTime * 1000; + + if (diffMs >= offlineIntervalMs) { + const missedOfflineIntervals = Math.floor(diffMs / offlineIntervalMs); + const offlinePoints = Math.floor(missedOfflineIntervals * (this.idlePoints / 4)); + + if (offlinePoints > 0) { + this.updateScore(offlinePoints); + this.showToast(`Idle Bonus: +${offlinePoints} pts while you were away!`); + } + } + } + this.saveData("last_active_time", String(now)); + } +======= +>>>>>>> 978282b3d376db0a28f8a319cd5e15d9f5cddf20 } diff --git a/ver b/ver new file mode 100644 index 0000000..9f8e9b6 --- /dev/null +++ b/ver @@ -0,0 +1 @@ +1.0 \ No newline at end of file
{{tools.onWork[tools.lang].message}}
{{tools.p404[tools.lang].message}}