Game engine for Evan's typescript games.
Evan wanted something specifically tailored to low spec pixel perfect games.
You may use the Template Game as a starting point, or create a repository from scratch using these instructions.
package.json file at the root of your game's codebase.{
  "scripts": {
    "dev": "pigeon dev",
    "lint": "pigeon lint",
    "lint:fix": "pigeon lint:fix",
    "zip": "pigeon zip"
  },
  "dependencies": {
    "pixel-pigeon": "evannorton/pixel-pigeon"
  },
  "engines": {
    "npm": "10.9.2",
    "node": "22.15.0"
  }
}
pp-config.json file at the root of your game's codebase.{
  "height": 360,
  "name": "My Cool Game",
  "requireClickToFocus": true,
  "width": 640
}
pp-dev.json file at the root of your game's codebase.{
  "port": 3000,
  "renderPathing": false
}
pp-env.json file at the root of your game's codebase.{
  "newgroundsAppID": null,
  "newgroundsEncryptionKey": null
}
project.ldtk file at the root of your game's codebase, using the LDTK level editor..gitignore file at the root of your game's codebase.node_modules
pp-dev.json
game.zip
audio folder at the root of your game's codebase.images folder at the root of your game's codebase.src folder at the root of your game's codebase.src/tsconfig.json.{
  "extends": "../node_modules/pixel-pigeon/api/tsconfig.json",
  "include": [
    "./**/*.ts"
  ]
}
index.ts file inside of the src folder.npm install.npm run dev to start a dev server with hot reloading.pigeon devRun your game on a local dev server with hot reloading.
pigeon zipExport a .zip folder of your game that can be uploaded to sites like itch.io and newgrounds.com.
pigeon lintRun the linter on your game's source code.
pigeon lint:fixRun the linter on your game's source code and automatically fix some errors.
pigeon pngRemove unneeded chunks from your game's images.
pigeon idGenerate a unique ID for your game. Achievements will not persist across sessions if you don't have an ID. Generating a new ID will cause players to lose their achievement data.
Create an .eslintrc with the following contents to use this extension.
{
  "parserOptions": {
    "project": "./src/tsconfig.json"
  },
  "extends": [
    "./node_modules/linter/.eslintrc"
  ],
  "rules": {
    "no-restricted-imports": [
      "off"
    ]
  }
}
D:\Code\My-Awesome-Game.D:\Code\Pixel-Pigeon.npm link.npm ci.npm link pixel-pigeon.pigeon dev. You must manually rerun this every time you make a local change to the engine, as hot reloading only listens for changes to your game's code.