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.