Add PS spritesheet generator tool

This commit is contained in:
Christopher Monsanto 2020-04-16 02:08:29 -04:00
parent 12fb7af96b
commit 5ba2e316e4
6 changed files with 730 additions and 0 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
build/
.tup
node_modules
pnpm-debug.log

View File

@ -33,6 +33,8 @@ $ brew install tup graphicsmagick advancecomp
## Building
Install dependencies once with `pnpm install`. Then, to build:
```
$ tup
```

681
pnpm-lock.yaml Normal file
View File

@ -0,0 +1,681 @@
importers:
tools/sprites:
dependencies:
commander: 5.0.0
make-promises-safe: 5.1.0
spritesmith: 3.4.0
specifiers:
commander: ^5.0.0
make-promises-safe: ^5.1.0
spritesmith: ^3.4.0
lockfileVersion: 5.1
packages:
/ajv/6.12.0:
dependencies:
fast-deep-equal: 3.1.1
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.2.2
dev: false
resolution:
integrity: sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==
/asn1/0.2.4:
dependencies:
safer-buffer: 2.1.2
dev: false
resolution:
integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
/assert-plus/1.0.0:
dev: false
engines:
node: '>=0.8'
resolution:
integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
/async/0.9.2:
dev: false
resolution:
integrity: sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
/asynckit/0.4.0:
dev: false
resolution:
integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=
/aws-sign2/0.7.0:
dev: false
resolution:
integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
/aws4/1.9.1:
dev: false
resolution:
integrity: sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
/bcrypt-pbkdf/1.0.2:
dependencies:
tweetnacl: 0.14.5
dev: false
resolution:
integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
/bin-pack/1.0.2:
dev: false
resolution:
integrity: sha1-wqAU7b8L7XCjKSBi7UZXe5YSBnk=
/caseless/0.12.0:
dev: false
resolution:
integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
/clone-stats/0.0.1:
dev: false
resolution:
integrity: sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=
/clone/1.0.4:
dev: false
engines:
node: '>=0.8'
resolution:
integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
/combined-stream/1.0.8:
dependencies:
delayed-stream: 1.0.0
dev: false
engines:
node: '>= 0.8'
resolution:
integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
/commander/5.0.0:
dev: false
engines:
node: '>= 6'
resolution:
integrity: sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ==
/concat-stream/1.5.2:
dependencies:
inherits: 2.0.4
readable-stream: 2.0.6
typedarray: 0.0.6
dev: false
engines:
'0': node >= 0.8
resolution:
integrity: sha1-cIl4Yk2FavQaWnQd790mHadSwmY=
/contentstream/1.0.0:
dependencies:
readable-stream: 1.0.34
dev: false
engines:
node: '>= 0.8.0'
resolution:
integrity: sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU=
/core-util-is/1.0.2:
dev: false
resolution:
integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
/cwise-compiler/1.1.3:
dependencies:
uniq: 1.0.1
dev: false
resolution:
integrity: sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=
/dashdash/1.14.1:
dependencies:
assert-plus: 1.0.0
dev: false
engines:
node: '>=0.10'
resolution:
integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
/data-uri-to-buffer/0.0.3:
dev: false
resolution:
integrity: sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo=
/delayed-stream/1.0.0:
dev: false
engines:
node: '>=0.4.0'
resolution:
integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
/ecc-jsbn/0.1.2:
dependencies:
jsbn: 0.1.1
safer-buffer: 2.1.2
dev: false
resolution:
integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
/extend/3.0.2:
dev: false
resolution:
integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
/extsprintf/1.3.0:
dev: false
engines:
'0': node >=0.6.0
resolution:
integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
/fast-deep-equal/3.1.1:
dev: false
resolution:
integrity: sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
/fast-json-stable-stringify/2.1.0:
dev: false
resolution:
integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
/first-chunk-stream/1.0.0:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=
/forever-agent/0.6.1:
dev: false
resolution:
integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
/form-data/2.3.3:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.26
dev: false
engines:
node: '>= 0.12'
resolution:
integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
/get-pixels/3.3.2:
dependencies:
data-uri-to-buffer: 0.0.3
jpeg-js: 0.3.7
mime-types: 2.1.26
ndarray: 1.0.19
ndarray-pack: 1.2.1
node-bitmap: 0.0.1
omggif: 1.0.10
parse-data-uri: 0.2.0
pngjs: 3.4.0
request: 2.88.2
through: 2.3.8
dev: false
resolution:
integrity: sha512-6ar+8yPxRd1pskEcl2GSEu1La0+xYRjjnkby6AYiRDDwZ0tJbPQmHnSeH9fGLskT8kvR0OukVgtZLcsENF9YKQ==
/getpass/0.1.7:
dependencies:
assert-plus: 1.0.0
dev: false
resolution:
integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
/gif-encoder/0.4.3:
dependencies:
readable-stream: 1.1.14
dev: false
engines:
node: '>= 0.8.0'
resolution:
integrity: sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk=
/graceful-fs/4.2.3:
dev: false
resolution:
integrity: sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
/har-schema/2.0.0:
dev: false
engines:
node: '>=4'
resolution:
integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
/har-validator/5.1.3:
dependencies:
ajv: 6.12.0
har-schema: 2.0.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
/http-signature/1.2.0:
dependencies:
assert-plus: 1.0.0
jsprim: 1.4.1
sshpk: 1.16.1
dev: false
engines:
node: '>=0.8'
npm: '>=1.3.7'
resolution:
integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
/inherits/2.0.4:
dev: false
resolution:
integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
/iota-array/1.0.0:
dev: false
resolution:
integrity: sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=
/is-buffer/1.1.6:
dev: false
resolution:
integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
/is-typedarray/1.0.0:
dev: false
resolution:
integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
/is-utf8/0.2.1:
dev: false
resolution:
integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
/isarray/0.0.1:
dev: false
resolution:
integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
/isarray/1.0.0:
dev: false
resolution:
integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
/isstream/0.1.2:
dev: false
resolution:
integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
/jpeg-js/0.0.4:
dev: false
resolution:
integrity: sha1-Bqr0fv7HrwsZJKWc1pWm0rXthw4=
/jpeg-js/0.3.7:
dev: false
resolution:
integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==
/jsbn/0.1.1:
dev: false
resolution:
integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
/json-schema-traverse/0.4.1:
dev: false
resolution:
integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
/json-schema/0.2.3:
dev: false
resolution:
integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
/json-stringify-safe/5.0.1:
dev: false
resolution:
integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
/jsprim/1.4.1:
dependencies:
assert-plus: 1.0.0
extsprintf: 1.3.0
json-schema: 0.2.3
verror: 1.10.0
dev: false
engines:
'0': node >=0.6.0
resolution:
integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
/layout/2.2.0:
dependencies:
bin-pack: 1.0.2
dev: false
engines:
node: '>= 0.8.0'
resolution:
integrity: sha1-MeRL/BjdEBmz/7II5AKku/4uavQ=
/make-promises-safe/5.1.0:
dev: false
resolution:
integrity: sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==
/mime-db/1.43.0:
dev: false
engines:
node: '>= 0.6'
resolution:
integrity: sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
/mime-types/2.1.26:
dependencies:
mime-db: 1.43.0
dev: false
engines:
node: '>= 0.6'
resolution:
integrity: sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
/ndarray-ops/1.2.2:
dependencies:
cwise-compiler: 1.1.3
dev: false
resolution:
integrity: sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=
/ndarray-pack/1.2.1:
dependencies:
cwise-compiler: 1.1.3
ndarray: 1.0.19
dev: false
resolution:
integrity: sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=
/ndarray/1.0.19:
dependencies:
iota-array: 1.0.0
is-buffer: 1.1.6
dev: false
resolution:
integrity: sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==
/node-bitmap/0.0.1:
dev: false
engines:
node: '>=v0.6.5'
resolution:
integrity: sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE=
/oauth-sign/0.9.0:
dev: false
resolution:
integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
/obj-extend/0.1.0:
dev: false
resolution:
integrity: sha1-u0SKR3X7les0p4H5CLusLfI9u1s=
/omggif/1.0.10:
dev: false
resolution:
integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
/parse-data-uri/0.2.0:
dependencies:
data-uri-to-buffer: 0.0.3
dev: false
resolution:
integrity: sha1-vwTYUd1ch7CrI45dAazklLYEtMk=
/performance-now/2.1.0:
dev: false
resolution:
integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
/pixelsmith/2.4.1:
dependencies:
async: 0.9.2
concat-stream: 1.5.2
get-pixels: 3.3.2
mime-types: 2.1.26
ndarray: 1.0.19
obj-extend: 0.1.0
save-pixels: 2.3.4
vinyl-file: 1.3.0
dev: false
engines:
node: '>= 8.0.0'
resolution:
integrity: sha512-6lVOPf9eBd9bWfxo5efmJcAiF6y65Ui9Ir8IR8jocrj/v/8QoLWZmgnhO7KGUfqkwPLNlCBfxVdjp4QihdPmPQ==
/pngjs-nozlib/1.0.0:
dev: false
engines:
iojs: '>= 1.0.0'
node: '>=0.10.0'
resolution:
integrity: sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c=
/pngjs/3.4.0:
dev: false
engines:
node: '>=4.0.0'
resolution:
integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
/process-nextick-args/1.0.7:
dev: false
resolution:
integrity: sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
/process-nextick-args/2.0.1:
dev: false
resolution:
integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
/psl/1.8.0:
dev: false
resolution:
integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
/punycode/2.1.1:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
/qs/6.5.2:
dev: false
engines:
node: '>=0.6'
resolution:
integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
/readable-stream/1.0.34:
dependencies:
core-util-is: 1.0.2
inherits: 2.0.4
isarray: 0.0.1
string_decoder: 0.10.31
dev: false
resolution:
integrity: sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
/readable-stream/1.1.14:
dependencies:
core-util-is: 1.0.2
inherits: 2.0.4
isarray: 0.0.1
string_decoder: 0.10.31
dev: false
resolution:
integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
/readable-stream/2.0.6:
dependencies:
core-util-is: 1.0.2
inherits: 2.0.4
isarray: 1.0.0
process-nextick-args: 1.0.7
string_decoder: 0.10.31
util-deprecate: 1.0.2
dev: false
resolution:
integrity: sha1-j5A0HmilPMySh4jaz80Rs265t44=
/readable-stream/2.3.7:
dependencies:
core-util-is: 1.0.2
inherits: 2.0.4
isarray: 1.0.0
process-nextick-args: 2.0.1
safe-buffer: 5.1.2
string_decoder: 1.1.1
util-deprecate: 1.0.2
dev: false
resolution:
integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
/replace-ext/0.0.1:
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=
/request/2.88.2:
dependencies:
aws-sign2: 0.7.0
aws4: 1.9.1
caseless: 0.12.0
combined-stream: 1.0.8
extend: 3.0.2
forever-agent: 0.6.1
form-data: 2.3.3
har-validator: 5.1.3
http-signature: 1.2.0
is-typedarray: 1.0.0
isstream: 0.1.2
json-stringify-safe: 5.0.1
mime-types: 2.1.26
oauth-sign: 0.9.0
performance-now: 2.1.0
qs: 6.5.2
safe-buffer: 5.2.0
tough-cookie: 2.5.0
tunnel-agent: 0.6.0
uuid: 3.4.0
deprecated: 'request has been deprecated, see https://github.com/request/request/issues/3142'
dev: false
engines:
node: '>= 6'
resolution:
integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
/safe-buffer/5.1.2:
dev: false
resolution:
integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
/safe-buffer/5.2.0:
dev: false
resolution:
integrity: sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
/safer-buffer/2.1.2:
dev: false
resolution:
integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
/save-pixels/2.3.4:
dependencies:
contentstream: 1.0.0
gif-encoder: 0.4.3
jpeg-js: 0.0.4
ndarray: 1.0.19
ndarray-ops: 1.2.2
pngjs-nozlib: 1.0.0
through: 2.3.8
dev: false
resolution:
integrity: sha1-SdNJwGuNfAEn2/DaJLRKylr7Wf4=
/semver/5.0.3:
dev: false
hasBin: true
resolution:
integrity: sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=
/spritesmith/3.4.0:
dependencies:
concat-stream: 1.5.2
layout: 2.2.0
pixelsmith: 2.4.1
semver: 5.0.3
through2: 2.0.5
dev: false
engines:
node: '>= 4.0.0'
resolution:
integrity: sha512-epa/Ib2GzkrzOA6ZMKH+YOX4ooBlRz8JwIV5NQDt9FvqXVHTh4dVn/0oA+n5eeu6wem1CCrtZWODlOqvwXXpyA==
/sshpk/1.16.1:
dependencies:
asn1: 0.2.4
assert-plus: 1.0.0
bcrypt-pbkdf: 1.0.2
dashdash: 1.14.1
ecc-jsbn: 0.1.2
getpass: 0.1.7
jsbn: 0.1.1
safer-buffer: 2.1.2
tweetnacl: 0.14.5
dev: false
engines:
node: '>=0.10.0'
hasBin: true
resolution:
integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
/string_decoder/0.10.31:
dev: false
resolution:
integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
/string_decoder/1.1.1:
dependencies:
safe-buffer: 5.1.2
dev: false
resolution:
integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
/strip-bom-stream/1.0.0:
dependencies:
first-chunk-stream: 1.0.0
strip-bom: 2.0.0
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=
/strip-bom/2.0.0:
dependencies:
is-utf8: 0.2.1
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
/through/2.3.8:
dev: false
resolution:
integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
/through2/2.0.5:
dependencies:
readable-stream: 2.3.7
xtend: 4.0.2
dev: false
resolution:
integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
/tough-cookie/2.5.0:
dependencies:
psl: 1.8.0
punycode: 2.1.1
dev: false
engines:
node: '>=0.8'
resolution:
integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
/tunnel-agent/0.6.0:
dependencies:
safe-buffer: 5.2.0
dev: false
resolution:
integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
/tweetnacl/0.14.5:
dev: false
resolution:
integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
/typedarray/0.0.6:
dev: false
resolution:
integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
/uniq/1.0.1:
dev: false
resolution:
integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
/uri-js/4.2.2:
dependencies:
punycode: 2.1.1
dev: false
resolution:
integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
/util-deprecate/1.0.2:
dev: false
resolution:
integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
/uuid/3.4.0:
dev: false
hasBin: true
resolution:
integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
/verror/1.10.0:
dependencies:
assert-plus: 1.0.0
core-util-is: 1.0.2
extsprintf: 1.3.0
dev: false
engines:
'0': node >=0.6.0
resolution:
integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
/vinyl-file/1.3.0:
dependencies:
graceful-fs: 4.2.3
strip-bom: 2.0.0
strip-bom-stream: 1.0.0
vinyl: 1.2.0
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-qgVjTTqGe6kUR77bs0r8sm9E9uc=
/vinyl/1.2.0:
dependencies:
clone: 1.0.4
clone-stats: 0.0.1
replace-ext: 0.0.1
dev: false
engines:
node: '>= 0.9'
resolution:
integrity: sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=
/xtend/4.0.2:
dev: false
engines:
node: '>=0.4'
resolution:
integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==

2
pnpm-workspace.yaml Normal file
View File

@ -0,0 +1,2 @@
packages:
- 'tools/sprites'

View File

@ -0,0 +1 @@
{"dependencies":{"commander":"^5.0.0","make-promises-safe":"^5.1.0","spritesmith":"^3.4.0"}}

42
tools/sprites/ps.js Executable file
View File

@ -0,0 +1,42 @@
require('make-promises-safe');
const program = require('commander');
const spritesmith = require('spritesmith');
const path = require('path');
const fs = require('fs');
const util = require('util');
const run = util.promisify(spritesmith.run);
program
.option('--output-image <file>', 'where to put image')
.option('--output-metadata <file>', 'where to put JSON metadata')
.parse(process.argv);
const files = [];
for (const directory of program.args) {
for (const file of fs.readdirSync(directory)) {
files.push(path.join(directory, file));
}
}
function toPSID(s) {
return s.toLowerCase().replace(/[^a-z0-9]+/g, '');
}
(async () => {
const result = await run({
src: files,
});
const sprites = Object.create(null);
for (const [filename, {x, y, width, height}] of Object.entries(result.coordinates)) {
const id = toPSID(path.parse(filename).name);
sprites[id] = {left: x, top: y};
}
fs.writeFileSync(program.outputImage, result.image, 'binary');
fs.writeFileSync(program.outputMetadata, JSON.stringify(sprites, null, 4));
})();