Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

stremy

12
Posts
2
Following
A member registered Dec 24, 2023

Recent community posts

no worries (*‘ω‘ *)

Off the top of my head, I'm pretty sure it's in the North West corner of Blackthorn City

Might depend on your PC settings because mine pauses in the background too

You can also get them in the National Park North of Goldenrod City

Ye, they're consumed after a single use

(1 edit)

You might have to change the const variables if your stuff is stored somewhere else. This is where I found mine: 


So you might have to change the following if yours isn't the same. :)

const DB_NAME = "/userfs";
const STORE_NAME = "FILE_DATA";
 const MATCH = "/drawings/";

(5 edits)

Here's how I downloaded all my saved DoodleMagic drawings as a zip:

1. Open the game in your browser (I’m using Edge, Chrome probably works too).

2. Open Developer Tools

  • Press F12 (or right click → Inspect)

3. Go to Console

4. At the top of the console there’s a dropdown that usually says “top”. Click it and switch to "index.html" (or whatever looks like the game frame). If you don’t do this, it might not find the files.

5. Paste this script into the console and hit Enter (you might have to first input 'allow pasting' before you can paste this.

(async () => {
  // ---- Settings ----
  const DB_NAME = "/userfs";
  const STORE_NAME = "FILE_DATA";
  const MATCH = "/drawings/";            // downloads any file whose key contains this
  const ZIP_NAME = "drawings.zip";       // output filename
  // ---- Load JSZip (no install needed) ----
  if (!window.JSZip) {
    await new Promise((resolve, reject) => {
      const s = document.createElement("script");
      s.src = "https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js";
      s.onload = resolve;
      s.onerror = reject;
      document.head.appendChild(s);
    });
  }
  const db = await new Promise((res, rej) => {
    const r = indexedDB.open(DB_NAME);
    r.onsuccess = () => res(r.result);
    r.onerror = () => rej(r.error);
  });
  const getAllKeys = () =>
    new Promise((res, rej) => {
      const tx = db.transaction(STORE_NAME, "readonly");
      const store = tx.objectStore(STORE_NAME);
      const r = store.getAllKeys();
      r.onsuccess = () => res(r.result);
      r.onerror = () => rej(r.error);
    });
  const getValue = (key) =>
    new Promise((res, rej) => {
      const tx = db.transaction(STORE_NAME, "readonly"); // fresh tx per read
      const store = tx.objectStore(STORE_NAME);
      const r = store.get(key);
      r.onsuccess = () => res(r.result);
      r.onerror = () => rej(r.error);
    });
  const keys = await getAllKeys();
  const drawingKeys = keys.filter(k => typeof k === "string" && k.includes(MATCH));
  console.log(`Found ${drawingKeys.length} file(s) matching "${MATCH}"`, drawingKeys);
  const zip = new JSZip();
  for (const key of drawingKeys) {
    const value = await getValue(key);
    if (!value?.contents) {
      console.warn("Skipping (no contents):", key, value);
      continue;
    }
    // Convert Int8Array -> Uint8Array safely
    const bytes = Uint8Array.from(value.contents, b => (b + 256) % 256);
    // Put in zip with a nice relative path (everything after "/drawings/")
    const idx = key.lastIndexOf(MATCH);
    const relPath = idx >= 0 ? key.slice(idx + MATCH.length) : key.split("/").pop();
    zip.file(relPath || "file.bin", bytes);
  }
  const zipBlob = await zip.generateAsync({ type: "blob" });
  const url = URL.createObjectURL(zipBlob);
  const a = document.createElement("a");
  a.href = url;
  a.download = ZIP_NAME;
  a.click();
  URL.revokeObjectURL(url);
  db.close();
})();


It should download a zip called "drawings.zip" with all your gifs inside.

If it doesn’t work:

  • Make sure your game is open!! 
  • Make sure you switched the dropdown from "top" to "index.html"
  • If it says it found 0 files, the game might be saving them somewhere that isn’t "/drawings/" (so this won’t catch it

I got it! 

this game is so cute and endearing. i really love the art style. is there some way i can save the pictures i draw locally? thanks!! ヽ(o・∀・)ノ

Oh, and I just wanted to add that I love this game! I 100% (minus shinies) your TD game and have been having heaps of fun with this one too. Thank you for sharing your work! :)

(35 edits)

📘 Pokémon Lithic Veil – Master Guide 

Updated: 2026-01-11 @ 11:00 UTC+10

Compiled from developer Khydra’s official comments - collated using AI (cringe but finding things in comments is zzz). I'll also edit in my findings as I go as well. :)

Note: Since this is going off all comments, some of this info may be outdated, just fyi. Oh, and spoilers ahead.

📍 Points of Interest

Johto

  • Evolution Dojo: North of Violet City
  • Mint Farm: Route 39 (North of Olivine City)
  • Move Deleter: Route 43 (North of Mahogany Town)
  • Pokeball Upgrades: Route 37 (Master Ball quest from the dad, Kurt, on Route 30 - quest guide below)
  • Pokemon Daycare: Route 34
  • Pokemon Mansion: On map, needs cut. Rare Pokemon (catch starters).
  • Pokemon Academy: Violet City (reward for each Johto badge)
  • Pokemon Laboratory: New Bark Town (rewards for Pokedex entries)

🧺 Apricorn Locations

  • Blue (Great Ball) – House, Goldenrod City
  • Green (Water Bike Upgrade) – Vessel, Route 48
    • Give to house on Cherry Islet (west of Cherrygrove City) 
  • Red – Safari House, Route 48
  • Yellow (Ultra Ball) – Basket, Route 36 (requires Cut)
  • Pink – Vessel, Blackthorn City
  • Black – House, Blackthorn Cliff
  • White – House, Route 4
    • Bring to Rural House on Route 8

🚢 Travel & Movement

Surf Access

  • Get the Water Bike from a house in Mahogany Town
    • As stated above, upgrade Water Bike (traverse dangerous currents) by giving the Green Apricorn to the house on Cherry Islet (west of Cherrygrove City) 
  • Surf Pikachu is required for some puzzles

Boat (Johto → Kanto Progression)

  • After earning 8 Johto badges:
    • Go to Violet City to get the Boat Ticket
    • Go to Olivine City → use the boat → Kanto
  • Kanto unlocks:
    • Higher level cap
    • Rock-breaking quest
    • Professor Oak progression
    • Snorlax puzzle resolution

Cutting Bushes

  • Requires upgraded water bike to traverse water currents (see Apricorn Locations / Surf Access above). 
  • Surf to Route 27 after upgrade

🧩 Major Puzzles & Mechanics

🔑 Lithic Stones

  1. Route 42 (South)
    • Braille puzzle with bushes and rocks
    • Press Z to open cave → vessel inside
  2. Route 45 (Password Box)
    • Code: 6573
    • Clue found in Lithic Forest
  3. Route 25 (Mailbox)
    • At the very end of the route
  4. Pokémon League
    • Automatically obtained
  5. Saffron City
    • Version 1.0.11+
    • Older versions require a long Professor Oak quest chain

Using the Stones

  • Perform the Apacheta Ritual at Route 45 West
  • Unlocks:
    • 3rd Region
    • Dojos
    • Rock-breaking progression
    • Groudon quest

👑 Master Ball Parts

  • Scrap: Saffron City
  • False Swipe: Cherrygrove City
  • Magikarp: Magikarp in team
  • Leek: Marble City
  • Milk: Marble City + Miltank in team
  • Letter of Giovanni: Talk to Giovanni after defeating him while having this mission active
  • Haunter:
    • Get Shadow-Catching Urn in Route 50
    • Defeat a Haunter
  • Ho-Oh Feather: Mirage Island, first map (hidden item)


🪨 How to Break Rocks (FULL QUEST)

  1. Accept mission in Goron Cave (Route 15, Kanto)
  2. Beat Pokémon League
  3. Collect all 5 Lithic Stones
  4. Use Apacheta on Route 45
  5. Complete 5 Dojos (3rd Region)
  6. Go to Marble City
  7. Fisherman gives an item
  8. Return to Goron Cave
  9. Rock-breaking unlocked

🏛️ Tombs & Braille Puzzles

Ruins of Alph

  • Tree in top-left corner opens path at the bottom
  • Allows catching Unown

Steel Tomb

  • Save and exit the game

Ice Tomb

  • Party setup:
    • Slot 1: Relicanth
    • Slot 6: Wailord

Ancient Tomb

  • Use keyboard arrows:
UP, DOWN, UP, RIGHT, LEFT, RIGHT

Regis

  • Use Braille alphabet
  • Translation required (language-based)

🌙 Lunar & ☀️ Solar Sanctuaries

How They Work

  • Upper floor buttons play Pokémon cries
  • Letters (Mail) give Pokédex numbers
  • Pokémon must be in your party

Lunar Example Party

  • Umbreon (197)
  • Lunatone (337)
  • Absol (359)
  • Clefable (36)
  • Murkrow (198)
  • Noctowl (164)

Finding the Mail

  • Requires Rock Smash
  • Found on Route 12

🐉 Legendary Pokémon Locations

Mew

  • Location: Abandoned House (Route 43)
  • Get Key to a House (Olivine City)
  • Time: 00:00–00:59

Mewtwo

  • Location: Cianwood – Cliff Edge Gate
  • Bike Shop (Cerulean City) with 1,000,000¥
  • Get Herb
  • Give Herb to neighbor (Viridian City)
  • Receive Elevator Key
  • Press hidden button (symmetrical to missing rock)
  • Use elevator → Mewtwo room

Groudon

  • Location: Goron Cave / south of Cherrygrove City
  • Accept mission at Goron Cave
  • Finish Pokémon League
  • Collect 5 Lithic Stones
  • Complete 3rd Region Dojos
  • Fisherman in Marble City gives item
  • Groudon breaks rock south of Cherrygrove City

Zapdos

  • Location: Route 38
  • Party requirement: Pikachu + Surf (or Raichu)

Jirachi

  • Location: Route 67
  • Click sign and wait with sign open (~2 minutes)

Celebi

  • Location: Ilex Forest
  • Special tree
  • Requires quest from Olivine City → Lavender Town
  • Requires an item to attract it

Ho-Oh Feather

  • Location: Mirage Island
  • Hidden item near the boat
  • Access via Olivine Lighthouse with Wide Lens

Entei (Level 65)

  • Location: Union Cave
  • Requires Water Bike
  • Quickest travel point: Azalea Town

Suicune (Level 65)

  • Location: Ice Path
  • Requires Water Bike + Upgrade (Green Apricorn)
  • Quickest travel point: Blackthorn City / Mahogany Town

👻 MissingNo

  • Found on Mirage Island
  • Requires Wide Lens
  • Go to Olivine Lighthouse cave
  • Bring 6 Unown spelling:
L – I – T – H – I – C

🐞 Known Bugs / Notes

  • Some TM descriptions are incorrect (copy-paste errors)
  • Gulpin, Lileep, Anorith do not spawn in wild
  • Gulpin acquisition methods:
    • Catch 6 Swalot → request egg at Daycare (100% Gulpin)
    • Union Tickets in Ecruteak City (~2% chance)
  • Shedinja is obtained by evolving Nincada and pressing Next to skip Ninjask
  • Shiny Pokémon in party do not increase catch rate
  • Linux build rebuilt from v1.0.19 (possible issues)
  • Shiny achievements may bug for a few Pokémon
  • Giant Magnemite intentionally unbeatable
  • No save transfer support (save files are not easily accessible)
(3 edits)

I'm really loving the game so far!! One thing I've notice is it’s sometimes hard to tell whether an achievement has been unlocked, particularly when the badge is grey or silver. Adding a clear visual indicator (for example, a small tick) or showing the unlocked status on hover would significantly improve usability. I’ve put a rough (I'm no UI expert lmao) example below to illustrate what I mean:

Thanks for all the amazing work you've put into this game. :)