Initial Commit
99
assets/pets/cat.js
Normal 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'
|
||||
}
|
||||
};
|
||||
1
assets/pets/cat/frames/chase-1.svg
Normal 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 |
1
assets/pets/cat/frames/chase-2.svg
Normal 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 |
1
assets/pets/cat/frames/chase-3.svg
Normal 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 |
1
assets/pets/cat/frames/chase-4.svg
Normal 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 |
1
assets/pets/cat/frames/idle-1.svg
Normal 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 |
1
assets/pets/cat/frames/idle-2.svg
Normal 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 |
1
assets/pets/cat/frames/idle-3.svg
Normal 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 |
1
assets/pets/cat/frames/inspect-1.svg
Normal 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 |
1
assets/pets/cat/frames/inspect-2.svg
Normal 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 |
1
assets/pets/cat/frames/inspect-3.svg
Normal 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 |
1
assets/pets/cat/frames/sleep-1.svg
Normal 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 |
1
assets/pets/cat/frames/sleep-2.svg
Normal 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 |
1
assets/pets/cat/frames/transition-idle-walk-1.svg
Normal 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 |
1
assets/pets/cat/frames/transition-idle-walk-2.svg
Normal 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 |
1
assets/pets/cat/frames/transition-idle-walk-3.svg
Normal 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 |
1
assets/pets/cat/frames/transition-sleep-idle-1.svg
Normal 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 |
1
assets/pets/cat/frames/transition-sleep-idle-2.svg
Normal 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 |
1
assets/pets/cat/frames/transition-sleep-idle-3.svg
Normal 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 |
1
assets/pets/cat/frames/transition-walk-sleep-1.svg
Normal 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 |
1
assets/pets/cat/frames/transition-walk-sleep-2.svg
Normal 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 |
1
assets/pets/cat/frames/transition-walk-sleep-3.svg
Normal 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 |
1
assets/pets/cat/frames/walk-1.svg
Normal 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 |
1
assets/pets/cat/frames/walk-2.svg
Normal 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 |
1
assets/pets/cat/frames/walk-3.svg
Normal 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 |
1
assets/pets/cat/frames/walk-4.svg
Normal 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
@@ -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
|
||||
};
|
||||