Crown Rush Checkers · Customization Guide · version 1.0.0 · Main buyer guide (14 languages)

Customization Guide

Make Crown Rush Checkers your own game: new characters, new pieces, new music, your own texts, colours and a stronger or weaker computer opponent. Every recipe below is a short list of steps and names the exact file to open. You do not need to know how to program. All pictures on this page are real screenshots of the game.

1. Before you start

Free tools you need:

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

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.

First time only: open a terminal inside source/ and install the tools.

npm ci

See your changes on your computer. In source/, run the command below and open the address that appears (it starts with http://127.0.0.1). The page reloads by itself when you save a file. Stop it with Ctrl+C.

npm run dev

The game must be opened from a web address like that one. Double-clicking index.html does not work.

2. Where everything is

The numbers on each screenshot match the table below it. The words in quotes are what the game shows in English.

Opening screen

Opening screen, real screenshot with numbered parts 1 2 3 4 5
#What you seeFile to change
1Play button "Play checkers"Text: search for Play checkers (recipe E).
2Language listThe 14 languages are the list LANGS in source/src/i18n.ts. Look of the tag: source/src/lang.css.
3Collection button "Collection"Opens the six piece sets (recipe D). Text key collection in source/src/i18n.ts.
4Statistics button "Statistics"Text key stats in source/src/i18n.ts.
5Settings button "Settings"Text key settings in source/src/i18n.ts. Icons are drawn in source/src/ui/icons.ts.

Mode select

Mode select, real screenshot with numbered parts 1 2 3 4 5
#What you seeFile to change
1Versus CPU card "Versus CPU"Picture: source/public/street/menu/mode-cpu.webp.
2Two players card "Two players"Picture: source/public/street/menu/mode-local.webp.
3Campaign card "Campaign"Picture: source/public/street/menu/mode-campaign.webp.
4Quick challenges card "Quick challenges"Picture: source/public/street/menu/mode-challenges.webp. The three challenges: source/src/data/challenges.ts.
5Learn to play card "Learn to play"Picture: source/public/street/menu/mode-learn.webp. Tutorial lessons: TUTORIAL in source/src/data/content.ts.

Character select

Character select, real screenshot with numbered parts 1 2 3 4 5
#What you seeFile to change
1Your character "P1 - You"Picture: source/public/street/poses/duel-tito.webp (one duel-<name>.webp per character, recipe C). Yellow card: source/public/street/menu/crew-card-y.webp.
2Opponent "CPU - Opponent"Picture: source/public/street/poses/duel-amora.webp. Blue card: source/public/street/menu/crew-card-b.webp.
3The three characters "AmoraCPU / TitoP1 / Olívia"Small pictures: source/public/street/characters/<name>.webp. Names: CHARACTERS in source/src/data/content.ts.
4Difficulty "Easy / Normal / Hard"How strong each level plays: recipe I. Pictures: source/public/street/menu/pill-blue.webp and menu/pill-yellow.webp (selected).
5Continue button "Continue"Picture: source/public/street/hud/btn-brush-yellow.webp.

Match

Match, real screenshot with numbered parts 1 2 3 4 5 6
#What you seeFile to change
1Your card "You - Team A"Card: source/public/street/hud/card-a.webp. Character: source/public/street/poses/duel-<name>.webp (recipe C).
2Opponent card "CPU - Team B"Card: source/public/street/hud/card-b.webp.
3Board and pieces "Checkers board"Stone table: source/public/street/table/top.webp, table/skirt.webp and frame.webp. Pieces: source/public/street/pieces/ (recipe D). Background: recipe B.
4Hint button "Hint"Picture: source/public/street/hud/btn-yellow.webp. Text key hint.
5Undo button "Undo"Picture: source/public/street/hud/btn-blue.webp. Text key undo.
6Menu button "Menu"Opens the pause menu. Text key menu.

Pause menu

Pause menu, real screenshot with numbered parts 1 2 3 4 5
#What you seeFile to change
1Resume "Resume"Text key resume in source/src/i18n.ts.
2Rules "Rules"The rules text is the list rulesText in source/src/i18n.ts (and in each file of source/src/locales/).
3Settings "Settings"The same options as the Settings screen.
4Resign "Resign"Text key resign.
5Back to home "Back to home"Text key exitToMenu. The match is kept and can be continued later.

Campaign map

Campaign map, real screenshot with numbered parts 1 2 3 4 5
#What you seeFile to change
1The three arenas "Checkers Plaza / Skate Park / Night Rooftop"Names: ENVIRONMENTS in source/src/data/content.ts. Tab pictures: source/public/street/menu/tag-yellow.webp (selected) and menu/pill-blue.webp.
2Open match "1. First Round · Available"Marker: source/public/street/menu/node-gold.webp. Map: source/public/street/campaign.webp. Positions of the nine markers: campaignNodesLandscape in source/src/art/manifest.ts.
3Locked match "2. Board Control · Win the previous match"Pictures: source/public/street/menu/node-dark.webp and menu/lock.webp.
4Match card and Play button "Play"Titles and speech of the nine matches: CAMPAIGN in source/src/data/content.ts. Card: source/public/street/menu/camp-card.webp. Character: source/public/street/heroes/<name>.webp. Button: source/public/street/hud/btn-brush-yellow.webp.
5Back button "Back"Picture: source/public/street/hud/btn-back.webp.

Collection

Collection, real screenshot with numbered parts 1 2 3
#What you seeFile to change
1Equipped piece set "Street Lightning✓ Equipped set"The six sets are the list COSMETICS in source/src/data/content.ts (recipe D).
2Another piece set "Jade PopInspect"Click a set to see it on the board and equip it.
3Back button "Back"Drawn in source/src/ui/icons.ts; colours in source/src/street-panels.css.

Victory screen

Victory screen, real screenshot with numbered parts 1 2 3
#What you seeFile to change
1Result title "Victory!"Text keys win, loss and draw in source/src/i18n.ts. Winner picture: source/public/street/win/<name>.webp. Background: source/public/street/win/bg.webp and win/bg2.webp.
2Play again "Play again"Picture: source/public/street/hud/btn-brush-yellow.webp. Text key playAgain.
3Home "Home"Picture: source/public/street/hud/btn-brush-blue.webp. Text key home.

Settings

Settings, real screenshot with numbered parts 1 2 3 4 5
#What you seeFile to change
1Tabs "Audio / Match / Accessibility"Audio, Match and Accessibility options.
2Music volume "Music"Tracks: source/src/assets/music/ (recipe F).
3Effects volume "Effects"Sound effects are generated by code in source/src/audio/audio.ts; there are no effect files.
4Erase progress "Erase progress"Deletes the saved profile of this browser.
5Close "Close"Text key close.

Recipe A: replace a picture

  1. Find the picture in the tables above or in the complete list of pictures. All artwork is in source/public/street/, in folders by subject: characters/, expressions/, heroes/, poses/, win/, pieces/, arenas/, plaza/, table/, menu/, hud/, challenges/, splash/.
  2. Open the file in your image editor and note its size in pixels (the list shows it too).
  3. Draw or paste your picture with the same size in pixels. Keep the background transparent where the original is transparent.
  4. Export as WebP with the same file name, replacing the old file.
  5. Run npm run build in source/ (or look at it first with npm run dev).

A picture with a different size still loads, but it may look stretched or out of place.

  1. Logo: replace source/public/street/splash/logo.webp. The same file is used on the opening screen, in the menus and during the match, in every language. source/public/street/logo.webp is a spare copy: replace it with the same picture.
  2. Name in the browser tab: open source/index.html and change the text between <title> and </title>, and the sentence after content=" in the line with name="description".
  3. Name read by screen readers: in source/src/i18n.ts change title: and subtitle: (they appear twice: Portuguese and English).
  4. Opening screen: background source/public/street/plaza/scene.webp; the three friends at the table source/public/street/plaza/crew.webp.
  5. Match backgrounds: Checkers Plaza source/public/street/plaza/match.webp (phones held upright use plaza/match-portrait.webp); Skate Park source/public/street/arenas/stones.webp; Night Rooftop source/public/street/arenas/library.webp. The file names stones and library are internal names: keep them.
  6. Menu background: source/public/street/menu/bg.webp. Campaign map: source/public/street/campaign.webp.

Recipe C: change a character

The game has three characters with the internal names amora, tito and olivia. Keep these names in the file names; change only the pictures and the name shown to players.

  1. Replace the pictures of the character. For Tito they are: characters/tito.webp (small portrait), expressions/tito-happy.webp, expressions/tito-proud.webp, expressions/tito-sad.webp (reactions), heroes/tito.webp (campaign card and menus), poses/duel-tito.webp (character select and match cards), poses/lean-tito.webp and poses/ledge-tito.webp (standing beside the board on wide screens), poses/shrug-tito.webp (the loser on the result screen), win/tito.webp (the winner) and menu/tito.webp (mode select). All inside source/public/street/.
  2. Draw every picture of one character in the same style, each with the size of the file it replaces.
  3. To change the name and the short description, open source/src/data/content.ts, find CHARACTERS and edit name: 'Tito' and title: {{ pt: '...', en: 'skater rabbit' }}. Then add the new English description to the other languages (recipe E, step 4).
  4. Build and check the character select, a match and the result screen.

Recipe D: change the pieces and the piece sets

  1. Shape of the pieces: four pictures in source/public/street/pieces/: yellow-man.webp, yellow-king.webp, coral-man.webp and coral-king.webp. Replace them keeping the size and the position of the piece inside the picture.
  2. Colours and names of the six sets: open source/src/data/content.ts and find COSMETICS. Each set has a name and two groups of colours, light (Team A) and dark (Team B). The game repaints the four pictures with the colour base of each group, so changing base: '#...' changes the colour of that side.
  3. Colours are written as #RRGGBB. Pick one in any colour picker (search the web for "color picker") and paste it.
  4. Do not change the id of a set (wood_ivory, sage_cream...). They are internal names stored in the players' saves.
  5. If you change a set name, add the new English name to the other languages (recipe E, step 4).

Recipe E: change texts and translations

  1. In your editor use Find in files (Ctrl+Shift+F in Visual Studio Code) inside source/src/ and search for the English sentence exactly as the game shows it.
  2. Most texts are in source/src/i18n.ts. The file has two lists with the same keys: const pt = {{ (Portuguese) and const en = {{ (English). Change only the text between the quotes, never the word before the colon.
  3. Other texts are in source/src/ui/copy.ts, source/src/ui/juice-copy.ts, source/src/data/content.ts (characters, arenas, campaign, tutorial) and source/src/data/challenges.ts, or written in the code as tx('Portuguese sentence', 'English sentence').
  4. The other 12 languages are in source/src/locales/, one file each (de.ts, es.ts, fr.ts, id.ts, it.ts, ja.ts, ko.ts, nl.ts, pl.ts, ru.ts, tr.ts, zh.ts). Each file has a part dict with the same keys as i18n.ts and a part text where the English sentence is the key: 'Play checkers': 'Dame spielen'. If you change an English sentence of step 3, change the same key in the text part of every language file, otherwise that language shows the English sentence.
  5. Keep markers such as {{n}}, ${{name}} and words in [brackets] exactly as they are: the game replaces them with numbers and names, and the word in brackets is painted yellow in the big titles.
  6. Run npm test: it tells you when a language is missing a sentence. Then npm run build.

To remove a language from the list, delete its line in LANGS in source/src/i18n.ts.

Recipe F: replace the music

  1. The three tracks are in source/src/assets/music/: menu.mp3 (menus), play1.mp3 and play2.mp3 (matches).
  2. Export your track as MP3 (128 to 192 kbps is enough) with the same file name and replace the old file.
  3. For a clean loop, cut the track on a whole bar in Audacity.
  4. Build. Browsers start sound only after the first click or tap on the page.

Sound effects (clicks, moves, captures, victory) are generated by code in source/src/audio/audio.ts; there are no files to replace. Players set the volumes in Settings.

Recipe G: change colours

  1. Interface colours: open source/src/street.css. Near the top there is a list of colours such as --honey: #ffce34 (yellow), --coral: #ff6950 (red), --sage: #40baff (blue) and --paper: #101f46 (dark blue of the panels). Change the value after the colon. The names are internal; keep them.
  2. Board squares and frame of each arena: in source/src/data/content.ts, find ENVIRONMENTS and change light, dark and frame inside board.
  3. Pieces: recipe D.
  4. Painted buttons, cards and tags are pictures in source/public/street/hud/ and source/public/street/menu/: recolour them in your image editor (recipe A).
  5. Browser bar on phones: name="theme-color" in source/index.html.

Recipe H: change the fonts

  1. The font files are in source/src/assets/fonts/ (WOFF2): Lilita One for the big street titles and buttons and Nunito for normal text. Corben is bundled too.
  2. Get your font as .woff2 (check that its license allows use on websites) and copy it to that folder.
  3. Open source/src/assets/fonts/fonts.css, copy one @font-face block, and change font-family to the name of your font and url('./...woff2') to your file.
  4. Open source/src/lang.css and put your font name first in --font-street (titles and buttons) or in --font-ui (normal text), for example --font-street: 'My Font', 'Lilita One', ....
  5. Keep the other names in the list: they cover letters your font may not have (Polish, Turkish, Russian, Japanese, Korean, Chinese).
  6. Add the license text of your font to source/licenses/.

Recipe I: make the computer easier or harder

Open source/src/ai/levels.ts and find levelFor. There is one block for each level: 'easy', 'normal' and 'hard'.

ValueWhat it doesEasierHarder
maxDepthHow many moves ahead the computer looks.Smaller numberLarger number
timeMsThinking time for each move, in thousandths of a second.SmallerLarger
randomChanceHow often it picks a weaker move on purpose (0.22 = 22% of the moves).Larger0
marginHow much worse than the best move a chosen move may be.Larger0

Where there are three numbers in square brackets, such as [0.22, 0.14, 0.08], they are the three steps of the campaign inside one arena: first, second and third match. The level each character uses in the campaign is in recipe J.

The rules of the game (Brazilian draughts: mandatory capture, flying kings, men capture backwards) are in source/src/engine/rules.ts. Changing rules is programming work; npm test checks them.

Recipe J: edit the campaign

  1. Open source/src/data/content.ts and find CAMPAIGN. There are nine blocks that start with E(, one for each match, in order.
  2. In each block you can change the opponent ('amora', 'tito' or 'olivia'), the level ('easy', 'normal' or 'hard'), the title, the sentence before the match (intro) and the sentences after a win and a loss.
  3. Every text has two versions, pt: and en:. For the other languages see recipe E, step 4.
  4. Keep nine matches and keep the arena names ('veranda', 'stones', 'library'): the map has nine markers, three in each arena.

Check and publish your changes

  1. In source/ run npm test. All 87 tests must pass.
  2. Run npm run build. It checks the code, builds the game and formats the result into source/dist-static/.
  3. Run npm run preview, open the address it prints, and play: opening screen, a full match against the computer, the result screen, the campaign and the settings. Test on a phone too if you can.
  4. Upload the contents of source/dist-static/ to your host with FTP or the file manager of your hosting panel, replacing the old files. Delete old files in assets/ that are no longer in the new build.
  5. Open your web address and reload with Ctrl+F5 (Windows) or Cmd+Shift+R (Mac).

If something goes wrong

Complete list of pictures

Source file (inside source/), size in pixels and the name of the same picture in game/ as delivered. After you rebuild, a picture you changed gets new letters after its name; the others keep theirs.

Source fileSizeFile in game/
public/street/arenas/library.webp1672 x 941assets/library-6q--eLmG.webp
public/street/arenas/stones.webp1672 x 941assets/stones-DpiTZEC3.webp
public/street/campaign.webp1672 x 941assets/campaign-2HtgAUr-.webp
public/street/challenges/comeback.webp512 x 512assets/comeback-C-bxkNw0.webp
public/street/challenges/crown.webp512 x 512assets/crown-BCARliSP.webp
public/street/challenges/triple.webp512 x 512assets/triple-DSth8IcH.webp
public/street/characters/amora.webp768 x 896assets/amora-DX9siue1.webp
public/street/characters/olivia.webp768 x 896assets/olivia-Aui6SFzf.webp
public/street/characters/tito.webp768 x 896assets/tito-DxNWbh1V.webp
public/street/expressions/amora-happy.webp768 x 896assets/amora-happy-DAe5bb6b.webp
public/street/expressions/amora-proud.webp768 x 896assets/amora-proud-CUfJKpS_.webp
public/street/expressions/amora-sad.webp768 x 896assets/amora-sad-BHHTwC8R.webp
public/street/expressions/olivia-happy.webp768 x 896assets/olivia-happy-DHjHpkU6.webp
public/street/expressions/olivia-proud.webp768 x 896assets/olivia-proud-Dq_SzigR.webp
public/street/expressions/olivia-sad.webp768 x 896assets/olivia-sad-vQ44r8iH.webp
public/street/expressions/tito-happy.webp768 x 896assets/tito-happy-Cl-v_Qj_.webp
public/street/expressions/tito-proud.webp768 x 896assets/tito-proud-DxvhUK0K.webp
public/street/expressions/tito-sad.webp768 x 896assets/tito-sad-DZAayk3_.webp
public/street/frame.webp1173 x 1173assets/frame-8xDDZ3ik.webp
public/street/heroes/amora.webp900 x 1200assets/amora-D90wc0wr.webp
public/street/heroes/olivia.webp900 x 1200assets/olivia-B0y2gC0a.webp
public/street/heroes/tito.webp900 x 1200assets/tito-BGxDusad.webp
public/street/hud/banner.webp877 x 280assets/banner-BuqubS9L.webp
public/street/hud/btn-back.webp815 x 325assets/btn-back-DdnCJ8AX.webp
public/street/hud/btn-blue.webp814 x 233assets/btn-blue-Bh_1WbYK.webp
public/street/hud/btn-brush-blue.webp704 x 190assets/btn-brush-blue-BYQxvBty.webp
public/street/hud/btn-brush-red.webp704 x 190assets/btn-brush-red-BDl3H9ZS.webp
public/street/hud/btn-brush-yellow.webp760 x 244assets/btn-brush-yellow-9bNXN4XS.webp
public/street/hud/btn-yellow.webp817 x 229assets/btn-yellow-Dy6c0mSR.webp
public/street/hud/bubble.webp900 x 313assets/bubble-CF2QAQ0x.webp
public/street/hud/burst.webp674 x 311assets/burst-PNbfedbn.webp
public/street/hud/card-a.webp636 x 900assets/card-a-D6X8ar_q.webp
public/street/hud/card-b.webp598 x 900assets/card-b-ft3qcN96.webp
public/street/hud/chip.webp696 x 224assets/chip-CSL0BxVG.webp
public/street/hud/counter.webp900 x 298assets/counter-CqsxLqTx.webp
public/street/hud/splat.webp415 x 191assets/splat-DZh0fMnc.webp
public/street/hud/starburst.webp1200 x 551assets/starburst-YmrI8N06.webp
public/street/hud/tag.webp900 x 353assets/tag-BTG7gdYH.webp
public/street/logo.webp1220 x 954assets/logo-1J33ewDO.webp
public/street/menu/bg.webp1672 x 941assets/bg-Bp58-cma.webp
public/street/menu/brush-red.webp900 x 208assets/brush-red-DBAepMAU.webp
public/street/menu/btn-go.webp760 x 252assets/btn-go-5YJBYYi-.webp
public/street/menu/camp-card.webp499 x 900assets/camp-card-uVCyD4lU.webp
public/street/menu/crew-card-b.webp900 x 658assets/crew-card-b-D3Wn9G1Z.webp
public/street/menu/crew-card-y.webp900 x 662assets/crew-card-y-BTPaoLFM.webp
public/street/menu/crown-sel.webp420 x 207assets/crown-sel-BSKv3ZKk.webp
public/street/menu/lock.webp259 x 300assets/lock-Bs-JjQ9u.webp
public/street/menu/mode-campaign.webp760 x 735assets/mode-campaign-CBH2Z4Pc.webp
public/street/menu/mode-challenges.webp760 x 703assets/mode-challenges-C3XdvQf6.webp
public/street/menu/mode-cpu.webp760 x 714assets/mode-cpu-B7u7b71G.webp
public/street/menu/mode-learn.webp742 x 760assets/mode-learn-B02MI7gQ.webp
public/street/menu/mode-local.webp760 x 701assets/mode-local-Dtrn64R9.webp
public/street/menu/name-plate.webp640 x 201assets/name-plate-CGF9CHAr.webp
public/street/menu/node-dark.webp300 x 239assets/node-dark-CcWYUgYa.webp
public/street/menu/node-gold.webp300 x 240assets/node-gold-pyQC6lrR.webp
public/street/menu/pill-blue.webp560 x 175assets/pill-blue-DCoIOUhE.webp
public/street/menu/pill-yellow.webp560 x 268assets/pill-yellow-BIfzOgkj.webp
public/street/menu/sparks-k.webp220 x 143assets/sparks-k-B_rN_hxs.webp
public/street/menu/sparks-y.webp220 x 143assets/sparks-y-BzJ-Vvu0.webp
public/street/menu/tag-dark.webp560 x 267assets/tag-dark-CPVKJLVq.webp
public/street/menu/tag-yellow.webp560 x 306assets/tag-yellow-BatPGv4B.webp
public/street/menu/tile-b.webp520 x 500assets/tile-b-oHtc0hyZ.webp
public/street/menu/tile-y.webp520 x 494assets/tile-y-D7aqXaPS.webp
public/street/menu/tito.webp547 x 1100assets/tito-zoCmA4UL.webp
public/street/menu/vs-burst.webp684 x 760assets/vs-burst-BMZ2_HD-.webp
public/street/pieces/coral-king.webp512 x 640assets/coral-king-DNVZno1P.webp
public/street/pieces/coral-man.webp512 x 640assets/coral-man-BtbO6oGt.webp
public/street/pieces/yellow-king.webp512 x 640assets/yellow-king-CzSobx7c.webp
public/street/pieces/yellow-man.webp512 x 640assets/yellow-man-BeyUPUFN.webp
public/street/plaza/crew.webp1254 x 1254assets/crew-Bg1QGTak.webp
public/street/plaza/match-portrait.webp910 x 1727assets/match-portrait-B9CszFqV.webp
public/street/plaza/match.webp1672 x 941assets/match-D7-qO45P.webp
public/street/plaza/scene.webp1672 x 941assets/scene-BSLNUz5a.webp
public/street/poses/duel-amora.webp607 x 900assets/duel-amora-BQLmp-v6.webp
public/street/poses/duel-olivia.webp672 x 900assets/duel-olivia-IOB4iRUH.webp
public/street/poses/duel-tito.webp554 x 900assets/duel-tito-DUG9UJE0.webp
public/street/poses/lean-amora.webp679 x 760assets/lean-amora-BYUB-3Zg.webp
public/street/poses/lean-olivia.webp758 x 760assets/lean-olivia-B6hM_lSI.webp
public/street/poses/lean-tito.webp710 x 760assets/lean-tito-CqY7tMVm.webp
public/street/poses/ledge-amora.webp669 x 760assets/ledge-amora-CZ76xCd0.webp
public/street/poses/ledge-olivia.webp760 x 731assets/ledge-olivia-Da1NyMSs.webp
public/street/poses/ledge-tito.webp730 x 760assets/ledge-tito-DAWa3wH4.webp
public/street/poses/shrug-amora.webp760 x 640assets/shrug-amora-5X7L7TYR.webp
public/street/poses/shrug-olivia.webp760 x 622assets/shrug-olivia-COFfkFQE.webp
public/street/poses/shrug-tito.webp760 x 713assets/shrug-tito-BBGdMcB1.webp
public/street/splash/logo.webp1536 x 1024assets/logo--4WLM-W0.webp
public/street/table/skirt.webp1600 x 375assets/skirt-CGRkcwxJ.webp
public/street/table/top.webp1254 x 1254assets/top-B3PHAJAx.webp
public/street/win/amora.webp596 x 1100assets/amora-DmvG0gN0.webp
public/street/win/bg.webp1672 x 941assets/bg-DhEWUDsN.webp
public/street/win/bg2.webp1672 x 941assets/bg2-DXXMyftb.webp
public/street/win/olivia.webp603 x 1100assets/olivia-HBSiIhu5.webp
public/street/win/puck-gold.webp420 x 345assets/puck-gold-DuBz2LAG.webp
public/street/win/puck-red.webp420 x 344assets/puck-red-BefY5fI0.webp
public/street/win/tito.webp546 x 1100assets/tito-DVbG1bYq.webp