Initial Commit

This commit is contained in:
2026-04-12 20:41:43 -07:00
commit 4cd0d8c589
30 changed files with 934 additions and 0 deletions

99
assets/pets/cat.js Normal file
View File

@@ -0,0 +1,99 @@
'use strict';
const fs = require('fs');
const path = require('path');
function loadSvg(name) {
return fs.readFileSync(path.join(__dirname, 'cat', 'frames', `${name}.svg`), 'utf8');
}
function frame(name) {
return {
name,
svg: loadSvg(name)
};
}
module.exports = {
width: 48,
height: 32,
clips: {
idle: {
fps: 3,
frames: [
frame('idle-1'),
frame('idle-2'),
frame('idle-3')
]
},
walk: {
fps: 10,
frames: [
frame('walk-1'),
frame('walk-2'),
frame('walk-3'),
frame('walk-4')
]
},
inspect: {
fps: 5,
frames: [
frame('inspect-1'),
frame('inspect-2'),
frame('inspect-3')
]
},
chase: {
fps: 12,
frames: [
frame('chase-1'),
frame('chase-2'),
frame('chase-3'),
frame('chase-4')
]
},
sleep: {
fps: 2,
frames: [
frame('sleep-1'),
frame('sleep-2')
]
},
transitionIdleWalk: {
fps: 10,
frames: [
frame('transition-idle-walk-1'),
frame('transition-idle-walk-2'),
frame('transition-idle-walk-3')
],
nextClip: 'walk'
},
transitionWalkSleep: {
fps: 9,
frames: [
frame('transition-walk-sleep-1'),
frame('transition-walk-sleep-2'),
frame('transition-walk-sleep-3')
],
nextClip: 'sleep'
},
transitionSleepIdle: {
fps: 8,
frames: [
frame('transition-sleep-idle-1'),
frame('transition-sleep-idle-2'),
frame('transition-sleep-idle-3')
],
nextClip: 'idle'
}
},
transitions: {
'idle->walk': 'transitionIdleWalk',
'inspect->walk': 'transitionIdleWalk',
'walk->sleep': 'transitionWalkSleep',
'chase->sleep': 'transitionWalkSleep',
'sleep->idle': 'transitionSleepIdle',
'sleep->walk': 'transitionSleepIdle',
'sleep->inspect': 'transitionSleepIdle'
}
};

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.2" fill="rgba(0,0,0,0.14)"/><path d="M12 18 Q8 15 7 13 Q6 10 9 8.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(10 12 18)"/><rect x="16" y="28" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="20" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11.2" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(2 33 14)"/><path d="M39 12 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-2 37 14)"/><ellipse cx="34" cy="16" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="18.8" r="1.1" fill="#6a4c39"/><path d="M35.2 20 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.1" fill="rgba(0,0,0,0.14)"/><path d="M12 17.5 Q8 14.5 7 12.5 Q6 9.5 9 8" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(16 12 17.5)"/><rect x="16" y="26" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="22" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="13.5" width="22" height="11.5" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(4 33 14)"/><path d="M39 12 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-4 37 14)"/><ellipse cx="34" cy="16" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="18.8" r="1.1" fill="#6a4c39"/><path d="M35.2 20 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.2" fill="rgba(0,0,0,0.14)"/><path d="M12 18 Q8 15 7 13 Q6 10 9 8.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(20 12 18)"/><rect x="16" y="20" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="28" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11.2" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-1 33 14)"/><path d="M39 12 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(1 37 14)"/><ellipse cx="34" cy="16" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="18.8" r="1.1" fill="#6a4c39"/><path d="M35.2 20 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.2" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(12 12 19)"/><rect x="16" y="22" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="26" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="16" width="22" height="10.9" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1014 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-14 12 19)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1013 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 18.5 Q8 15.5 7 13.5 Q6 10.5 9 8.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-10 12 18.5)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="14.5" width="22" height="11.2" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(1 33 15)"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-1 37 15)"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-16 12 19)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18.5 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13.5 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-1 33 15)"/><path d="M39 13.5 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(1 37 15)"/><ellipse cx="34" cy="17.5" rx="1" ry="1.1" fill="#1d140f"/><ellipse cx="38" cy="17.5" rx="1" ry="1.1" fill="#1d140f"/><circle cx="36" cy="20.3" r="1.1" fill="#6a4c39"/><path d="M35.2 21.5 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-8 12 19)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(2 33 14)"/><path d="M39 12 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-2 37 14)"/><ellipse cx="34" cy="16" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="18.8" r="1.1" fill="#6a4c39"/><path d="M35.2 20 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 18.5 Q8 15.5 7 13.5 Q6 10.5 9 8.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-2 12 18.5)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="14.5" width="22" height="11.1" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 16 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 11 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(4 33 13)"/><path d="M39 11 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-4 37 13)"/><ellipse cx="34" cy="15" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="15" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="17.8" r="1.1" fill="#6a4c39"/><path d="M35.2 19 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-8 12 19)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(2 33 14)"/><path d="M39 12 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-2 37 14)"/><ellipse cx="34" cy="16" rx="1" ry="1.1" fill="#1d140f"/><ellipse cx="38" cy="16" rx="1" ry="1.1" fill="#1d140f"/><circle cx="36" cy="18.8" r="1.1" fill="#6a4c39"/><path d="M35.2 20 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="12" ry="3.8" fill="rgba(0,0,0,0.14)"/><path d="M12 20 Q8 17 7 15 Q6 12 9 10.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-18 12 20)"/><rect x="11" y="16" width="24" height="12" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M29 21 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 16 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-4 32 18)"/><path d="M38 16 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(4 36 18)"/><ellipse cx="33" cy="20" rx="1" ry="0.7" fill="#1d140f"/><ellipse cx="37" cy="20" rx="1" ry="0.7" fill="#1d140f"/><circle cx="35" cy="22.8" r="1.1" fill="#6a4c39"/><path d="M34.2 24 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 931 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="12" ry="3.6" fill="rgba(0,0,0,0.14)"/><path d="M12 21 Q8 18 7 16 Q6 13 9 11" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-20 12 21)"/><rect x="11" y="17" width="24" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M29 22 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-5 32 19)"/><path d="M38 17 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(5 36 19)"/><ellipse cx="33" cy="21" rx="1" ry="0.7" fill="#1d140f"/><ellipse cx="37" cy="21" rx="1" ry="0.7" fill="#1d140f"/><circle cx="35" cy="23.8" r="1.1" fill="#6a4c39"/><path d="M34.2 25 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 929 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-10 12 19)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1013 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.3" fill="rgba(0,0,0,0.14)"/><path d="M12 18.5 Q8 15.5 7 13.5 Q6 10.5 9 8.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(0 12 18.5)"/><rect x="16" y="25" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="23" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="14.5" width="22" height="11.1" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17.5 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12.5 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(1 33 14.5)"/><path d="M39 12.5 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-1 37 14.5)"/><ellipse cx="34" cy="16.5" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16.5" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.3" r="1.1" fill="#6a4c39"/><path d="M35.2 20.5 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.2" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(8 12 19)"/><rect x="16" y="27" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="21" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11.2" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17.5 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12.5 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 12.5 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="16.5" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16.5" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.3" r="1.1" fill="#6a4c39"/><path d="M35.2 20.5 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="12" ry="3.8" fill="rgba(0,0,0,0.14)"/><path d="M12 20 Q8 17 7 15 Q6 12 9 10.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-18 12 20)"/><rect x="11" y="16" width="24" height="12" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M29 21 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 16 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-4 32 18)"/><path d="M38 16 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(4 36 18)"/><ellipse cx="33" cy="20" rx="1" ry="0.7" fill="#1d140f"/><ellipse cx="37" cy="20" rx="1" ry="0.7" fill="#1d140f"/><circle cx="35" cy="22.8" r="1.1" fill="#6a4c39"/><path d="M34.2 24 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 931 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="12.5" ry="4" fill="rgba(0,0,0,0.14)"/><path d="M12 20 Q8 17 7 15 Q6 12 9 10" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-12 12 20)"/><rect x="11" y="16" width="22" height="10.5" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 19 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 14 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-1 33 16)"/><path d="M39 14 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(1 37 16)"/><ellipse cx="34" cy="18" rx="1" ry="1.1" fill="#1d140f"/><ellipse cx="38" cy="18" rx="1" ry="1.1" fill="#1d140f"/><circle cx="36" cy="20.8" r="1.1" fill="#6a4c39"/><path d="M35.2 22 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 931 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-12 12 19)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1013 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(4 12 19)"/><rect x="16" y="22" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="26" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1011 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="12.5" ry="4" fill="rgba(0,0,0,0.14)"/><path d="M12 20 Q8 17 7 15 Q6 12 9 10" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-8 12 20)"/><rect x="16" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="24" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="16" width="22" height="10.5" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 19 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 14 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-2 33 16)"/><path d="M39 14 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(2 37 16)"/><ellipse cx="34" cy="18" rx="1" ry="1.1" fill="#1d140f"/><ellipse cx="38" cy="18" rx="1" ry="1.1" fill="#1d140f"/><circle cx="36" cy="20.8" r="1.1" fill="#6a4c39"/><path d="M35.2 22 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="12" ry="3.8" fill="rgba(0,0,0,0.14)"/><path d="M12 20 Q8 17 7 15 Q6 12 9 10.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-18 12 20)"/><rect x="11" y="16" width="24" height="12" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M29 21 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 16 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-4 32 18)"/><path d="M38 16 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(4 36 18)"/><ellipse cx="33" cy="20" rx="1" ry="0.7" fill="#1d140f"/><ellipse cx="37" cy="20" rx="1" ry="0.7" fill="#1d140f"/><circle cx="35" cy="22.8" r="1.1" fill="#6a4c39"/><path d="M34.2 24 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 931 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(-4 12 19)"/><rect x="16" y="27" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="21" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1012 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.2" fill="rgba(0,0,0,0.14)"/><path d="M12 18 Q8 15 7 13 Q6 10 9 8.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(6 12 18)"/><rect x="16" y="25" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="23" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="14" width="22" height="11.2" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 17.5 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 12.5 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(1 33 14.5)"/><path d="M39 12.5 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(-1 37 14.5)"/><ellipse cx="34" cy="16.5" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="16.5" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.3" r="1.1" fill="#6a4c39"/><path d="M35.2 20.5 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.4" fill="rgba(0,0,0,0.14)"/><path d="M12 19 Q8 16 7 14 Q6 11 9 9.5" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(12 12 19)"/><rect x="16" y="21" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="27" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="15" width="22" height="11" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13 l2 -5 l3 4" fill="#9d7a5d" transform="rotate(-1 33 15)"/><path d="M39 13 l-2 -5 l-3 4" fill="#9d7a5d" transform="rotate(1 37 15)"/><ellipse cx="34" cy="17" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="19.8" r="1.1" fill="#6a4c39"/><path d="M35.2 21 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 32"><ellipse cx="23" cy="28.5" rx="13" ry="4.2" fill="rgba(0,0,0,0.14)"/><path d="M12 20 Q8 17 7 15 Q6 12 9 10" fill="none" stroke="#6d5240" stroke-width="3.5" stroke-linecap="round" transform="rotate(2 12 20)"/><rect x="16" y="23" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="27" y="25" width="3.2" height="5.5" rx="1.2" fill="#6d5240"/><rect x="11" y="16" width="22" height="10.8" rx="6" fill="#9d7a5d" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M30 18.5 q0 -6 6 -6 q6 0 6 6 q0 6 -6 6 q-6 0 -6 -6 z" fill="#f1dbc1" stroke="rgba(30,18,10,0.2)" stroke-width="0.8"/><path d="M31 13.5 l2 -5 l3 4" fill="#9d7a5d"/><path d="M39 13.5 l-2 -5 l-3 4" fill="#9d7a5d"/><ellipse cx="34" cy="17.5" rx="1" ry="2.2" fill="#1d140f"/><ellipse cx="38" cy="17.5" rx="1" ry="2.2" fill="#1d140f"/><circle cx="36" cy="20.3" r="1.1" fill="#6a4c39"/><path d="M35.2 21.5 q0.8 1 1.8 0" fill="none" stroke="#6a4c39" stroke-width="0.8" stroke-linecap="round"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

21
assets/pets/index.js Normal file
View File

@@ -0,0 +1,21 @@
'use strict';
const cat = require('./cat');
const PET_ASSETS = {
cat
};
function getPetAsset(type) {
return PET_ASSETS[type] || PET_ASSETS.cat;
}
function getAvailablePetTypes() {
return Object.keys(PET_ASSETS);
}
module.exports = {
PET_ASSETS,
getPetAsset,
getAvailablePetTypes
};