Candymates · Customization Guide · version 1.0.0 · Main buyer guide

Customization Guide

Make Candymates your own game: new treats, new backgrounds, your own logo, texts, music and sounds, and easier or harder levels. Every recipe below is a short list of steps and says exactly which file to open. You do not need to know how to program. All pictures on this page are real screenshots of the game in this package.

1. Before you start

Free tools you need:

Which folder to edit. The download has two copies of the game:

The paths in this guide (for example assets/art/logo.webp) are the same inside both folders.

Make a backup first. Copy the whole folder (or keep the ZIP you downloaded) before changing anything. If something breaks, you can always go back.

See your changes on your computer. The game must be opened from a web address, not by double-clicking index.html. Two easy ways:

python -m http.server 8080

After each change, reload the page with Ctrl+F5 (Windows) or Cmd+Shift+R (Mac) so the browser does not show the old file.

On your own computer (addresses that start with localhost) you can jump to any level by adding ?level=12 to the address, for example http://localhost:8080/?level=12. This shortcut does not work on a published site.

2. Where everything is

The numbers on each screenshot match the table below it. Texts are named by their key in src/locales.js (recipe E).

Title screen

Title screen, real screenshot with numbered parts 1 2 3 4 5
# What you see File to change
1 Logo assets/art/logo.webp. The same file is used on the title screen and at the top of the home screen (recipe B).
2 Subtitle ribbon Text: key tagline in src/locales.js (recipe E). Ribbon picture: assets/art/ribbon-coral*.webp.
3 Treats of the title The treat pictures in assets/art/: clown.webp, puffer.webp, angel.webp and the others (recipe C).
4 Tap to start button Text: key tapToStart. Glass shape: assets/art/glass-pill.webp.
5 Background assets/art/bg-home.webp for the title and the home screen (recipe D).

Home screen (My Candy Shop)

Home screen (My Candy Shop), real screenshot with numbered parts 1 2 3 4 5 6 7
# What you see File to change
1 Candy counter Candy icon (a wrapped candy): assets/art/pearl.webp. Brown plate: ui-plate*.webp. Starting candies and helper prices: recipe G.
2 Small logo assets/art/logo.webp, the same file as the title screen.
3 Settings button Icon: assets/art/ic-gear.webp. Round button: ui-round-blue.webp.
4 Collected treats The same treat pictures used in the levels (recipe C). They appear here as the player fills the album.
5 Shop decoration Pictures: assets/art/decor-*.webp; cake plate: pedestal.webp. Which level opens each spot and its three choices: PEDESTALS in src/config.js (recipe I).
6 Play button Text: keys play and levelN. Button picture: assets/art/ui-btn-coral*.webp.
7 Album, Journey and Daily Texts: keys album, journey, daily. Icons: ic-book.webp, ic-map.webp, ic-calendar.webp.

Journey map

Journey map, real screenshot with numbered parts 1 2 3 4 5 6
# What you see File to change
1 Back button Icon: assets/art/ic-back.webp.
2 World name Texts: keys w_coral, w_kelp, w_ship, w_glow, w_ice, w_deep. Ribbon: ui-ribbon-gold*.webp.
3 Stars earned Icon: assets/art/ui-star.webp. Three stars per level, 60 levels.
4 Current level Round button: assets/art/ui-round-red.webp; mascot above it: puffer-front.webp; sparkles: sparkle.webp.
5 Locked level Glass ball: assets/art/glass-orb.webp; lock: padlock.webp.
6 World background assets/art/bg-coral.webp, bg-kelp.webp, bg-ship.webp, bg-glow.webp, bg-ice.webp, bg-deep.webp: one per world (recipe D).

A level

A level, real screenshot with numbered parts 1 2 3 4 5 6 7 8
# What you see File to change
1 Level number Text: key level. Plate: assets/art/ui-plate-bl.webp and ui-plate-br.webp.
2 Candy counter Candy icon (a wrapped candy): assets/art/pearl.webp. Brown plate: ui-plate*.webp. Starting candies and helper prices: recipe G.
3 Pause button Icon: assets/art/ic-gear.webp. It opens the pause window with the volumes.
4 Top bubbles Drawn by src/render/view.js with assets/art/glass-orb.webp. How many are open at once: floats in recipe F.
5 Bubbles with treats Treats: the pictures of recipe C. Extra pieces: kelp.webp (whipped cream), clam-lock.webp (locked cookie tin), key.webp, oyster.webp (candy tin), gold*.webp (Golden Bonbon). How many treats and kinds: recipe F.
6 Tray Drawn by src/render/view.js. Number of spots: TRAY in src/sim/sim.js (recipe F).
7 The three helpers Pictures: assets/art/pelican.webp (Scoop), crab-broom.webp (Whisk), whirl.webp (Swirl). Names: keys scoop, sweep, whirl. Prices: recipe G.
8 World background assets/art/bg-coral.webp, bg-kelp.webp, bg-ship.webp, bg-glow.webp, bg-ice.webp, bg-deep.webp: one per world (recipe D).

Windows (pause, settings, win, lose) share the same pieces: the glass window is assets/art/glass-panel.webp, the title ribbons are ribbon-coral*.webp, ribbon-gold*.webp and ribbon-purple*.webp, the buttons are ui-btn-coral*.webp (cherry red) and ui-btn-teal*.webp (mint green).

Pause window, real screenshot
Pause: the three volumes, vibration, reduced motion and the language. Icons: ic-music, ic-speaker, ic-mic, ic-phone, ic-motion, ui-globe; switches: ui-toggle-on and ui-toggle-off.
Settings window, real screenshot
Settings, opened from the home screen. The gummy bear on top is puffer-peek.webp.
Level complete window, real screenshot
Level complete: stars ui-star.webp and ui-star-off.webp, light rays sunburst.webp and rays.webp, the cream splash splash*.webp.
Level lost window, real screenshot
Level lost: the sad gummy bear is puffer-sad.webp. Texts: keys soClose, onlyLeft, tryAgain, secondChance, addsSlot.
Album screen, real screenshot
Album: one glass ball per treat (glass-orb.webp); treats not met yet show ic-question.webp.
A level on a phone held upright, real screenshot
A phone held upright: the same pictures, sized to the screen.

Names inside the files

Candymates was made from another game of the same engine, and some names inside the files were kept on purpose so that nothing breaks. You will meet them in file names and in the code. This is what they mean here:

Name you will see What it is in Candymates
fish, species, sp, shoal A treat, a kind of treat, a group of treats.
pearl, pearls The candies (wrapped pink candy), the only currency.
reef The home screen, My Candy Shop.
kelp, clam-lock, oyster The whipped cream, the locked cookie tin and the candy tin.
clown, puffer, angel, eel, seahorse, star, crab, tang, box, banner, jelly, octo The 12 treats, in order (table in recipe C).
bg-coral, bg-kelp, bg-ship, bg-glow, bg-ice, bg-deep The six world backgrounds: Cupcake Bakery, Lollipop Meadow, Chocolate River, Candy Night, Ice Cream Peaks and Cocoa Depths.
sweep, whirl, pelican, crab-broom The Whisk and Swirl helpers; the pictures of Scoop (pelican.webp) and Whisk (crab-broom.webp).
puffer-front, puffer-peek, puffer-sad The gummy bear mascot.

You can keep these names (simplest) and only change the pictures and the texts. Renaming them means changing every place that uses them in the code, so it is not needed to make your own game.

4. Recipe A: replace a picture

All pictures are in assets/art/ in WebP format. The game finds each picture by its file name, so a new picture with the same name simply takes its place.

  1. Find the file with the screens above or by its name: treat names (clown, puffer...), bg-* backgrounds, decor-* shop decorations, ui-btn-* buttons, ribbon-* and ui-ribbon-* ribbons, ui-plate* brown plates, glass-* glass pieces, ic-* icons.
  2. Open the old picture in your image editor and note its width and height.
  3. Make your new picture with the same width and height and a transparent background (except the bg-* backgrounds). Keep the drawing in the same position inside the picture.
  4. Export as WebP with the exact same name, for example pearl.webp, and replace the old file.
  5. Buttons, ribbons and plates come in four files: the whole piece and three slices that let it stretch, for example ui-btn-coral.webp, ui-btn-coral-l.webp (left end), ui-btn-coral-m.webp (middle) and ui-btn-coral-r.webp (right end). Replace all four, cutting your new picture at the same places.
  6. Reload the game with Ctrl+F5.
Tip: if your new picture looks too big, too small or cut, its size is different from the old one. Make it exactly the same width and height.
  1. Logo: replace assets/art/logo.webp (recipe A). Keep the same width, height and transparent background.
  2. Browser tab name: open index.html and change the text between <title> and </title>. On the line of the logo, a little below, change the name inside alt="CANDYMATES" too (screen readers read it).
  3. Subtitle under the logo ("Bubble Candy Sort"): key tagline in src/locales.js (recipe E).
  4. Tab icon: replace favicon.ico, next to index.html.

6. Recipe C: change the treats

There are 12 treats and the Golden Bonbon. Each one is a set of five pictures in assets/art/: the picture alone and four faces (-x0 normal, -blink eyes closed, -happy, -worry). The file names are older internal names (see Names inside the files). Replace the whole set, drawing the same treat with the four faces, in the same size and position.

# Name in the game Pictures Spoken name
0 Cherry (cupcake) clown.webp, clown-x0.webp, clown-blink.webp, clown-happy.webp, clown-worry.webp name_0.mp3
1 Gummy (gummy bear) puffer.webp, puffer-x0.webp, puffer-blink.webp, puffer-happy.webp, puffer-worry.webp name_1.mp3
2 Puffy (marshmallow) angel.webp, angel-x0.webp, angel-blink.webp, angel-happy.webp, angel-worry.webp name_2.mp3
3 Beanie (jelly bean) eel.webp, eel-x0.webp, eel-blink.webp, eel-happy.webp, eel-worry.webp name_3.mp3
4 Rosy (candy apple) seahorse.webp, seahorse-x0.webp, seahorse-blink.webp, seahorse-happy.webp, seahorse-worry.webp name_4.mp3
5 Sprinkles (donut) star.webp, star-x0.webp, star-blink.webp, star-happy.webp, star-worry.webp name_5.mp3
6 Wobbles (pudding) crab.webp, crab-x0.webp, crab-blink.webp, crab-happy.webp, crab-worry.webp name_6.mp3
7 Fluffy (cotton candy) tang.webp, tang-x0.webp, tang-blink.webp, tang-happy.webp, tang-worry.webp name_7.mp3
8 Macky (macaron) box.webp, box-x0.webp, box-blink.webp, box-happy.webp, box-worry.webp name_8.mp3
9 Swirly (swirl lollipop) banner.webp, banner-x0.webp, banner-blink.webp, banner-happy.webp, banner-worry.webp name_9.mp3
10 Cookie (cream sandwich cookie) jelly.webp, jelly-x0.webp, jelly-blink.webp, jelly-happy.webp, jelly-worry.webp name_10.mp3
11 Minty (mint ice cream) octo.webp, octo-x0.webp, octo-blink.webp, octo-happy.webp, octo-worry.webp name_11.mp3

7. Recipe D: change the backgrounds and the worlds

  1. Backgrounds are in assets/art/: bg-home.webp (title and home) and one per world, in this order: bg-coral.webp (levels 1 to 10), bg-kelp.webp (11 to 20), bg-ship.webp (21 to 30), bg-glow.webp (31 to 40), bg-ice.webp (41 to 50), bg-deep.webp (51 to 60).
  2. Replace a file with a picture of the same width and height (recipe A). Keep the middle calm, without strong details: the bubbles are drawn there. The sides are shown blurred on wide screens.
  3. World names: keys w_coral, w_kelp, w_ship, w_glow, w_ice, w_deep in src/locales.js (recipe E). The file names stay the same even if your world has another theme; players never see them.

8. Recipe E: change texts and translations

All texts players read are in two files: src/locales.js (English, Portuguese, Spanish) and src/locales-more.js (French, German, Italian, Dutch, Polish, Turkish, Russian, Indonesian, Japanese, Korean, Chinese). Each language is a block of lines like these:

  tapToStart: 'Tap to start',
  play: 'Play',
  levelN: 'Level {n}',
  soClose: 'So close!',
  1. Find the text you want to change (Ctrl+F in your editor). The word before the colon is the key; never change it.
  2. Change only the words inside the quotes. If your text has an apostrophe, like Let's, put double quotes around the text: "Let's go!".
  3. Keep markers such as {n}: the game puts a number there.
  4. Change the same key in the other languages you use.
  5. If you use source/, run npm test: it checks that the 14 languages still have every key and every marker.

The sentences of the guided first levels are the keys g1a, g1b, g1c, g2a, g2b, g2c, and the one-sentence cards of new pieces start with l_. The guided sentences are also spoken: see recipe H.

9. Recipe F: make the levels easier or harder

The 60 levels are not drawn by hand: src/levels.js has the numbers of each level and the game builds the bubbles from them. The first world (levels 1 to 10) is three plain lists, one number per level (the code calls the treats fish):

const W1 = {
  fish: [12, 18, 24, 30, 36, 42, 48, 54, 60, 72],
  sp: [2, 3, 4, 4, 5, 5, 6, 6, 6, 7],
  slots: [4, 5, 6, 6, 7, 7, 8, 8, 8, 8],
};
Setting What it means Easier
fish How many treats the level has. Always a multiple of 3. fewer
sp / nsp How many different kinds of treat appear. fewer
slots How many bubbles with treats are on the screen at once. shipped values: 4 to 10
floats How many top bubbles are open at once (2, 3 or 4). more
kelp, lock, free, oyster How many whipped-cream wraps, locked cookie tins, free bubbles and candy tins the level has. fewer wraps and locked tins, more free bubbles
hard How mixed the treats are, from 0 (grouped) to 0.65. lower
npm run levels
npm test

These two commands need Node.js; the main buyer guide explains how to install it, step by step.

10. Recipe G: change candies and helper prices

export const COST = { scoop: 3, sweep: 3, whirl: 2, chance: 5 };

Change only the numbers. Keep the commas, braces and names exactly where they are. Candies are earned by playing; the game has no store and no real-money purchases.

11. Recipe H: replace music, sounds and voice

Save your audio as MP3 with the same file name and replace the old file.

Recorded sound When it plays
assets/sfx/win.mp3 level complete
assets/sfx/fail.mp3 the tray is full, level lost
assets/sfx/star.mp3 each star on the win window
assets/sfx/pearl.mp3 candies are earned
assets/sfx/unlock.mp3 a cookie tin opens, a new-piece card appears, a decoration is placed
assets/sfx/gold.mp3 the Golden Bonbon completes a bubble
assets/sfx/oyster.mp3 a candy tin opens
assets/sfx/scoop.mp3 the Scoop helper
assets/sfx/sweep.mp3 the Whisk helper
assets/sfx/whirl.mp3 the Swirl helper
assets/sfx/chance.mp3 second chance is used

12. Recipe I: change the shop decorations

The home screen (the candy shop) has 6 decoration spots. Open src/config.js and find PEDESTALS, one line per spot:

{ at: 5, x: 0.15, y: 0.685, opts: ['lighthouse', 'castle', 'tiki'] },

13. Recipe J: change colors, buttons and the font

14. Check and publish your changes

  1. Play the parts you changed on your computer (see Before you start), in a wide window and in a narrow one (F12, then Ctrl+Shift+M shows phone sizes).
  2. If you edited source/: in a terminal inside source/, run the commands below. The first checks the rules, the levels and the texts; the second copies the game to source/dist/.
npm test
npm run build
  1. Upload everything inside game/ (or source/dist/, if you built it) to your web hosting, replacing the old files.
  2. Open your game address and press Ctrl+F5. If you still see the old version, read the section about updates and cache in the main buyer guide.

15. If something goes wrong