Dynamite Gulch — customization guide

Version 1.0.0. For non-programmers: which file to change for every part of the screen, and step-by-step recipes. Works offline, without JavaScript.

How to use this guide

Step-by-step recipes for people who do not program. Every part of the screen has a number on the real screenshots below and the exact file that controls it. Work in the source/ folder of the download, then run npm run build (or copy the changed files) and upload. You can also edit the files inside game/ directly: they are the same files.

  1. Make a backup: copy the whole extracted folder (or keep the original ZIP) before you change anything.
  2. Open the source/ folder in your editor (VS Code: File > Open Folder).
  3. Change a picture, a sound or a text using the recipes below.
  4. See the result on your computer: in source/, run npm run dev and open http://localhost:5190/ (the game does not run from a double-clicked index.html). Without Node.js you can use the free "Live Server" extension of VS Code. Press Ctrl+F5 after each change.
  5. Publish: run npm run build and upload the contents of dist/ (or upload only the files you changed, at the same paths, into your game folder on the host).

Free tools

Tool What for
VS Code or Notepad++ Edit texts, settings, levels and code (free). VS Code: File > Open Folder > source/.
Photopea (photopea.com) or GIMP Edit pictures and export WebP/PNG (free).
Squoosh (squoosh.app) Convert PNG/JPG to WebP and make files smaller (free, in the browser).
Audacity Edit sounds and music, export MP3 (free).
FileZilla Upload the game to your host by FTP (free).
Node.js 26.13 or newer (nodejs.org) Optional: local server, tests, level tools and the build copy.

Which file controls each part of the screen

Texts are in src/locales/<language>.js (shown here for English, src/locales/en.js). Pictures are WebP files in assets/art/; replace them keeping the same name and size.

Main menu

Main menu12345678
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Logo picture (with the game name painted in it), the menu scene (mascot, cannon, crates, cactus) and the desert sunset background behind it assets/art/logo.webp, assets/art/menu-hero.webp, background assets/art/bg.webp
2 Play button (gold plate) and its text picture assets/art/btn-play-wide.webp; texts play and continueLevel in src/locales/en.js
3 Levels button (wood plate + map icon) assets/art/btn-wood.webp, assets/art/icon-map.webp; text levels
4 Skins button (cannonball icon) assets/art/icon-ball.webp; text skins
5 Score button (trophy icon) assets/art/icon-trophy.webp; text ranking
6 Settings button (small gold plate) assets/art/btn-gold.webp
7 Stars, total score and coins line icons assets/art/icon-star.webp, assets/art/icon-trophy.webp, assets/art/coin.webp
8 Language picker (14 languages) list in src/locales.js; texts in src/locales/

A level (desktop layout)

A level (desktop layout)123456789
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Left card: level badge, name, hint, cargo left, chapter strip card assets/art/panel-tall.webp, badge assets/art/wheel.webp, hint note assets/art/hint-plaque.webp, crate icon assets/art/icon-crate.webp; names and hints l1..l50, h1..h50 in src/locales/en.js
2 Score box assets/art/score-box.webp
3 Pause button assets/art/hud-btn.webp
4 Settings button assets/art/hud-btn.webp
5 Right card: volley number and the star goals assets/art/panel-tall.webp, rows assets/art/row-plaque.webp, stars assets/art/star-big.webp, assets/art/star-empty.webp; goals from par in src/levels.js
6 Stars still possible assets/art/star-big.webp, assets/art/star-empty.webp
7 Bomb button assets/art/pulse-idle.webp, assets/art/pulse-armed.webp, label assets/art/label.webp; text pulse
8 Speed 1x/2x button assets/art/btn-speed.webp
9 Arena: frame, background, blocks, cannon, cannonballs frame assets/art/frame.webp, desert and sunset sky behind the blocks assets/art/interior.webp, desert scene with the wooden railing assets/art/scene.webp, blocks assets/art/crate.webp (and the others in the picture table), cannon assets/art/barrel-gun.webp, assets/art/carriage.webp, assets/art/breech.webp; drawn by src/render/view-arena.js

Victory card

Victory card1234567
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Level name on the red ribbon assets/art/ribbon-red.webp; card assets/art/card-parchment.webp
2 Stars won assets/art/star-big.webp, assets/art/star-empty.webp, assets/art/stars-decor.webp
3 Score and best scoring rules in src/sim/config.js
4 Coins earned winCoins in src/modes.js; coin assets/art/coin.webp
5 Next assets/art/btn-play.webp; text next
6 Retry assets/art/btn-wood.webp; text retry
7 Levels assets/art/btn-wood.webp; text levels

Defeat card

Defeat card1234
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Title and message card assets/art/card-dark.webp; mascot assets/art/parrot-sad.webp; texts in src/locales/en.js
2 One more chance (costs coins) RESCUE_COST in src/modes.js
3 Try again text retry
4 Levels text levels

Shop (skins and cannon upgrades)

Shop (skins and cannon upgrades)123
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Cannon upgrades prices in UPGRADES of src/modes.js; icons assets/art/icon-ball.webp, assets/art/pulse-armed.webp, assets/art/icon-spyglass.webp; texts up_balls, up_fuse, up_sight
2 Cannonball skins SKINS in src/render/palette.js (colours, stars needed), pictures assets/art/ball-spark.webp ... assets/art/ball-prism.webp, price skinPrice in src/modes.js; names skin_spark ... skin_prism
3 Coins and stars assets/art/coin.webp, assets/art/icon-star.webp

Settings

Settings12345
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Music volume default volumes at the top of src/main.js (music: 0.55)
2 Effects volume sfx: 0.85 in src/main.js
3 Narration volume voice: 0.9 in src/main.js
4 Language src/locales/
5 Close assets/art/btn-x.webp

Level map

Level map123
Real screenshot of the game. The numbers match the table.
# Part of the screen File to change
1 Chapter areas and level buttons assets/art/map-isle1-wide.webp ... assets/art/map-isle10-wide.webp (desktop) and -tall (phones), signs assets/art/sign-chapter.webp, assets/art/map-sign.webp, sand background assets/art/map-sea.webp
2 Coins and stars assets/art/label.webp
3 Close assets/art/btn-x.webp

Main pictures

File What it shows
assets/art/crate.webp, assets/art/barrel.webp, assets/art/chest.webp Crate, barrel and chest (regular and reinforced blocks); -d1 / -d2 are the cracked versions shown as they lose hit points
assets/art/keg.webp Dynamite barrel
assets/art/rum.webp, assets/art/anchor-block.webp, assets/art/treasure.webp Oil lantern, steel anvil block, treasure chest
assets/art/kraken.webp, assets/art/boss2.webp ... assets/art/boss10.webp The ten bosses (kraken is the first one, the Rattlesnake); -hurt is the picture shown when hit
assets/art/parrot-happy.webp, assets/art/parrot-sad.webp, assets/art/parrot-cheer.webp, assets/art/parrot-scared.webp, assets/art/parrot-perch.webp The mascot, a vulture in a cowboy hat, in its five poses
assets/art/ball-spark.webp ... assets/art/ball-prism.webp Cannonball skins
assets/art/bg.webp, assets/art/menu-hero.webp, assets/art/logo.webp, assets/art/logo-band.webp Menu background, menu scene, logo, logo band of the phone layout
assets/art/frame.webp, assets/art/interior.webp, assets/art/scene.webp, assets/art/wood.webp Arena frame, desert and sky behind the blocks, desert scene with the wooden railing, wood texture
assets/art/coin.webp, assets/art/hand.webp Coin (sheriff star), tutorial hand
assets/icons/icon-512.png, favicon.ico App icon and browser tab icon (all sizes in assets/icons/, including assets/icons/icon-maskable-512.png)

Sounds and music

Every sound the game plays is listed in assets/audio-manifest.json. Replace a file keeping its name; the description says what the original sounds like.

Name File Description
anchor assets/sfx/anchor.mp3 Iron ball clanging off a heavy iron anvil, short low metallic clang with a brief ring, isolated game sound
ball_return assets/sfx/ball_return.mp3 Soft short thunk of a small iron ball dropping into a wooden bucket, gentle, single sound
boss_hit assets/sfx/boss_hit.mp3 Heavy thud of a lead ball hitting a big desert monster, soft low thump with a small surprised grunt, short
boss_roar assets/sfx/boss_roar.mp3 Cartoon big monster growl with a quick rattlesnake rattle, short, funny, not scary, game sound effect
break_glass assets/sfx/break_glass.mp3 Small wooden crate smashing apart, satisfying crunchy wood crack with a few planks clattering, short, punchy, game sound effect
break_heavy assets/sfx/break_heavy.mp3 Treasure chest bursting open, heavy wood crack with a metal latch clank and a quick jingle of spilling gold coins, short and punchy, game sound effect
coin assets/sfx/coin.mp3 Single gold coin clink landing on a pile of coins, bright short metallic clink, isolated
combo assets/sfx/combo.mp3 Short rising run of three quick bright gold coin clinks, arcade combo sound
core_boom assets/sfx/core_boom.mp3 Compact punchy gunpowder keg explosion, deep boom with a crackling fire burst and wood debris, short, tight, cartoon arcade game sound effect, no long rumble
danger assets/sfx/danger.mp3 Short urgent warning, two quick toots of a steam train whistle, not harsh, isolated game sound
descend assets/sfx/descend.mp3 Wooden wagon wheels rolling one step on dusty ground, a short low wooden creak ending in a soft thud, dry, isolated game sound
hit_glass assets/sfx/hit_glass.mp3 Single short knock of a small iron ball hitting a wooden crate, dry woody "tock" with a clear pitch, very short, no reverb, isolated game sound
hit_heavy assets/sfx/hit_heavy.mp3 Single dull heavy clank of an iron ball hitting an iron-banded treasure chest, wood thud with a short metallic ring, isolated game impact sound
launch assets/sfx/launch.mp3 Single short cartoon cannon shot, punchy low "poomf" thump with a quick puff of air, tight and dry, no echo, no long tail, game sound effect
lose assets/sfx/lose.mp3 Short sad descending tune on a harmonica, three falling notes ending low with a soft twangy guitar note, gentle cartoon game over
pulse_charge assets/sfx/pulse_charge.mp3 Bomb fuse being lit, quick match strike then a fast sizzling sparkling fuse rising in intensity, short, cartoon game
pulse_hit assets/sfx/pulse_hit.mp3 Big cartoon bomb explosion, deep bass boom with a bright crackle and falling debris, short, arcade game
rum assets/sfx/rum.mp3 Whoosh of fire racing along spilled lamp oil, quick bright flame swoosh with a crackle, short, cartoon game
splash assets/sfx/splash.mp3 Small object landing in desert sand, a soft dusty thump with a little sand puff, short, cartoon game sound effect
star assets/sfx/star.mp3 Bright shiny gold coin ding, single high metallic chime for awarding a star, short
tap_start assets/sfx/tap_start.mp3 Short saloon piano chord with a chunky wooden thump and a spur jingle, satisfying start game confirm, short
ui_back assets/sfx/ui_back.mp3 Soft low muted wooden knock, short
ui_click assets/sfx/ui_click.mp3 Soft short wooden button tap, pleasant woody click
unlock assets/sfx/unlock.mp3 Treasure chest opening reward, wooden creak then shimmering ascending chimes and coin sparkle, short
wall_tick assets/sfx/wall_tick.mp3 Single short dry woody tick of a small iron ball bouncing off a wooden post, isolated game sound
whoosh assets/sfx/whoosh.mp3 Quick rope and sail swoosh, airy cloth whoosh, smooth, short
win assets/sfx/win.mp3 Short cheerful western victory fanfare, harmonica, banjo and a twangy guitar playing a quick rising four-note phrase with a whip crack, ending on a bright bell, joyful, game level complete jingle
cove-game-a assets/music/cove-game-a.mp3 Music track
cove-game-b assets/music/cove-game-b.mp3 Music track
cove-kraken assets/music/cove-kraken.mp3 Music track
cove-menu assets/music/cove-menu.mp3 Music track

Recipes, step by step

Change a picture (blocks, bosses, buttons, backgrounds)

  1. Find the picture in the tables above or open assets/art/ and look at the thumbnails.
  2. Make a copy of the original first (for example crate-original.webp, outside the game folder).
  3. Open it in Photopea (free, in the browser) or GIMP and draw over it, or prepare your own picture with the same width and height and a transparent background.
  4. Export as WebP with the same file name (Photopea: File > Export as > WEBP; or export PNG and convert it with Squoosh).
  5. Replace the file in source/assets/art/ (and in game/assets/art/ if you upload directly), then reload with Ctrl+F5.

Change the mascot (the vulture in a cowboy hat)

  1. Replace the five assets/art/parrot-*.webp pictures keeping their sizes (each pose has its own file: happy, sad, cheer, scared, perched). parrot is only the internal file name.
  2. The mascot also talks: the narration files are in assets/voice/en/, assets/voice/pt/ and assets/voice/es/ (one MP3 per line; what each line says is listed in assets/audio-manifest.json). Replace them keeping the names, or set the narration volume to 0 by default in src/main.js.

Change a block

  1. Pictures: assets/art/crate.webp (wooden crate, low hit points), assets/art/barrel.webp (barrel), assets/art/chest.webp (locked chest) and their -d1 / -d2 cracked versions; assets/art/keg.webp for the dynamite barrel.
  2. Which picture a block uses (and the tint per chapter) is chosen in src/render/sprites.js and src/render/palette.js.
  3. The hit sounds are hit_glass, hit_heavy, break_glass and break_heavy in assets/sfx/.

Change a boss

  1. Pictures: assets/art/kraken.webp (chapter 1, the Rattlesnake) and assets/art/boss2.webp ... assets/art/boss10.webp, each with a -hurt version.
  2. Name: the texts boss1 ... boss10 in src/locales/en.js (and in the other languages).
  3. Health and escort: bossHp, ESCORT and RAGE in src/modes.js; run node tools/check-modes.mjs after changing them.
  4. Boss music: assets/music/cove-kraken.mp3 (internal name only); roar and hit sounds: boss_roar, boss_hit in assets/sfx/.

Change a sound effect

  1. Open assets/audio-manifest.json: under sfx each sound has a name, its file in assets/sfx/ and a short description.
  2. Edit or record the new sound in Audacity (free), keep it short (most effects are under 1 second) and export as MP3.
  3. Replace the file keeping the same name. No code change is needed.

Change the music

  1. The four tracks are assets/music/cove-menu.mp3 (menus), assets/music/cove-game-a.mp3 and assets/music/cove-game-b.mp3 (levels, alternating) and assets/music/cove-kraken.mp3 (bosses and the last level). The cove- prefix is only an internal name.
  2. Replace them with MP3 files of the same names; loops sound best when the end flows into the start.
  3. If the new track has a different length, update its dur (seconds) in the music list of assets/audio-manifest.json.

Change a text or a translation

  1. Open src/locales/en.js (English) in VS Code or Notepad++. Each line is key: 'text'.
  2. Change only the text between the quotes. Keep {n} and similar markers. Save as UTF-8.
  3. Do the same in the other languages (src/locales/pt.js, src/locales/es.js ...). A key missing in a language shows the English text.
  4. The page title and description are in index.html (<title>, <meta name="description">) and manifest.webmanifest.

Change colours

  1. Interface colours are CSS variables at the top of style.css and gulch.css (for example --gold, --cream, --brown, --amber, --danger). Change the hex value, save, reload.
  2. The arena colours of each chapter (background, glow, rails) are the THEMES in src/render/palette.js; block tints and cannonball skins are in the same file.
  3. Most of the look comes from the pictures: to change the wood or parchment, edit assets/art/wood.webp, assets/art/panel-tall.webp, assets/art/card-parchment.webp and the button plates.

Change the font

  1. Put the new font file (WOFF2) in assets/fonts/ together with its licence.
  2. Change the @font-face rule at the top of gulch.css (titles, Fraunces) or style.css (numbers, Chakra Petch) and the --font variable.
  3. The canvas texts use FONT in src/render/view-shared.js: put the same family name first.

Make the game easier or harder

  1. Cannonballs per volley: BALLS in src/sim/config.js (10).
  2. Stars: par of each level in src/levels.js (volleys allowed for 3 stars).
  3. Block health: the numbers in the level maps of src/levels.js; boss health: bossHp in src/modes.js.
  4. After changing levels, run node tools/validate.mjs --solve <n> (see "Editing levels" in the main guide) and npm test.

Change prices and rewards

  1. All of them are at the bottom of src/modes.js: START_COINS, RESCUE_COST, winCoins, BOSS_COINS, DAILY_COINS, STAR_MILESTONES, UPGRADES (prices per level), MISSIONS (goals and rewards), skinPrice.
  2. Stars needed for each skin: stars in SKINS of src/render/palette.js.
  3. Run npm test afterwards.

Turn ads, the "Tap to start" screen or the full-screen button on and off

  1. Open dynamite-gulch.config.js, change provider, tapToStart or fullscreen as explained in its comments, save and reload. See "Settings file and optional ads" in the main guide.

Publish your changes

  1. In source/, run npm test (if you changed code, levels or prices) and npm run build.
  2. Upload the contents of dist/ to your game folder on the host (FileZilla or the host file manager), replacing the old files. Keep the same web address so players keep their progress.
  3. Open the game in a private window or press Ctrl+F5 (Cmd+Shift+R on a Mac): browsers and CDNs keep old files for a while. Do not clear "site data", it deletes the save.
  4. If something breaks, put back the file from your backup and compare.

Internal names in the code

Some code names come from the first version of the engine. The player never sees them: all visible names come from src/locales/.

In the code In the game
targets, cargo, crystal, gem, armor The blocks the cannonballs break (crates, barrels, chests); gem and armor pick the block look
core, CORE, sound core_boom, picture keg Dynamite barrel (explodes its 8 neighbours)
rum, anchor-block / anchor, treasure Oil lantern (burns its row), steel anvil block (indestructible), treasure chest (+2 cannonballs)
pulse, Pulse, btn-pulse, pulse-armed The Bomb power (opens a 3x3 hole)
volley, balls A volley of cannonballs (10 at the start)
kraken, boss2 ... boss10 (pictures in assets/art/) The ten chapter bosses; kraken is the first one, the Rattlesnake (names from boss1 ... boss10 in src/locales/)
skins Cannonball looks (lead, ember, tumbleweed, ...) sold in the shop
coins Coins (sheriff-star coins)
parrot-* pictures; Rico in setRicoDrawer, drawRotRico, res-rico, rot-rico The vulture mascot in a cowboy hat
rank, ranking, btn-rank The local score screen (no online leaderboard in this edition)
MOCK in src/render/view-shared.js Reference measurements of the portrait layout
theme keys ice, geode, forge, ... in src/render/palette.js The 10 chapters (Dusty Ranch, Gold Mine, Red Canyon, ... Gold Rush)
level ids in src/levels.js (first-spark ... heart-of-the-gulch) Save keys of each level's record
music cove-menu, cove-game-a, cove-game-b, cove-kraken Menu, two gameplay tracks, boss track (cove is only an internal prefix)

Help

Main guide: documentation/index.html (installation, settings, levels, economy, languages, troubleshooting). Questions and custom work: willian@polargames.com.br.