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.
- Install Node.js v22.15.0.
- Create a
package.jsonfile 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"
}
}- Create a
pp-config.jsonfile at the root of your game's codebase.
{
"height": 360,
"name": "My Cool Game",
"requireClickToFocus": true,
"width": 640
}- Create a
pp-dev.jsonfile at the root of your game's codebase.
{
"port": 3000,
"renderPathing": false
}- Create a
pp-env.jsonfile at the root of your game's codebase.
{
"newgroundsAppID": null,
"newgroundsEncryptionKey": null
}- Create a
project.ldtkfile at the root of your game's codebase, using the LDTK level editor. - Create a
.gitignorefile at the root of your game's codebase.
node_modules
pp-dev.json
game.zip
- Create an
audiofolder at the root of your game's codebase. - Create an
imagesfolder at the root of your game's codebase. - Create a
srcfolder at the root of your game's codebase. - Create
src/tsconfig.json.
{
"extends": "../node_modules/pixel-pigeon/api/tsconfig.json",
"include": [
"./**/*.ts"
]
}
- Create an
index.tsfile inside of thesrcfolder. - Run
npm install. - Run
npm run devto start a dev server with hot reloading. - Explore the documentation: https://pp.evanmmo.com/
Run your game on a local dev server with hot reloading.
Export a .zip folder of your game that can be uploaded to sites like itch.io and newgrounds.com.
Run the linter on your game's source code.
Run the linter on your game's source code and automatically fix some errors.
Remove unneeded chunks from your game's images.
Generate 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"
]
}
}- Follow the "getting started" instructions to create a game somewhere on your PC, e.g.
D:\Code\My-Awesome-Game. - Clone the engine somewhere on your PC, e.g.
D:\Code\Pixel-Pigeon. - Inside of the engine directory, run
npm link. - Inside of the game directory, run
npm ci. - Inside of the game directory, run
npm link pixel-pigeon. - You can now run your game like normal with
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.