diff --git a/assets/internal/default/weapon-servant/animation.json b/assets/internal/default/weapon-servant/animation.json
new file mode 100644
index 0000000..923671c
--- /dev/null
+++ b/assets/internal/default/weapon-servant/animation.json
@@ -0,0 +1,17 @@
+{
+ "deploy": {
+ "zeroInterpolation": "set",
+ "components": {
+ "SlideBack": {
+ 0: { "translate": [0, 0] },
+ 0.25: { "translate": [-1.5, 0] },
+ 1: { "translate": [0, 0], "interpolation": "ease-in" }
+ },
+ "SlideFront": {
+ 0: { "translate": [0, 0] },
+ 0.25: { "translate": [-1.5, 0] },
+ 1: { "translate": [0, 0], "interpolation": "ease-in" }
+ }
+ }
+ }
+}
diff --git a/assets/internal/default/weapon-servant/definition.json b/assets/internal/default/weapon-servant/definition.json
new file mode 100644
index 0000000..69a88e3
--- /dev/null
+++ b/assets/internal/default/weapon-servant/definition.json
@@ -0,0 +1 @@
+{}
diff --git a/assets/internal/default/weapon-servant/sprite.orig.svg b/assets/internal/default/weapon-servant/sprite.orig.svg
new file mode 100644
index 0000000..199f911
--- /dev/null
+++ b/assets/internal/default/weapon-servant/sprite.orig.svg
@@ -0,0 +1,82 @@
+
diff --git a/assets/internal/default/weapon-servant/sprite.svg b/assets/internal/default/weapon-servant/sprite.svg
index 418bfa2..0a74933 100644
--- a/assets/internal/default/weapon-servant/sprite.svg
+++ b/assets/internal/default/weapon-servant/sprite.svg
@@ -1,82 +1 @@
-
+
diff --git a/docs/sprites.md b/docs/sprites.md
new file mode 100644
index 0000000..b34c002
--- /dev/null
+++ b/docs/sprites.md
@@ -0,0 +1,4 @@
+* Sprites should only be in SVG format.
+* Avoid using `transform` in sprites (does not work in nanosvg).
+* Optimize SVG files as much as possible, but keep the IDs readable (for easy modding).
+* Avoid CSS in styles (does not work in nanosvg).
diff --git a/src/packages/game/output/video/IZ_video.c b/src/packages/game/output/video/IZ_video.c
index b2c2910..7d68172 100644
--- a/src/packages/game/output/video/IZ_video.c
+++ b/src/packages/game/output/video/IZ_video.c
@@ -103,7 +103,8 @@ void IZ_VideoTeardown(IZ_VideoState* state) {
SDL_DestroyWindow(state->window);
}
-u16 IZ_VideoGetNextFreeSpriteSlot(IZ_VideoState* state) {
+// we can use IZ_Pool for memory management. Do we want to use a single pool or multiple ones?
+u16 IZ_VideoGetNextFreeSpriteSlot(IZ_VideoState* state, IZ_VideoSpritePriority priority) {
// TODO:
// 1. Run through all sprites in the active sprites array
// 2. Check each sprite's priority and requested_at (for eviction policy)
diff --git a/src/packages/game/output/video/IZ_video.h b/src/packages/game/output/video/IZ_video.h
index ada7e71..da2acc7 100644
--- a/src/packages/game/output/video/IZ_video.h
+++ b/src/packages/game/output/video/IZ_video.h
@@ -86,7 +86,7 @@ IZ_ProcedureResult IZ_VideoInitialize(IZ_VideoState*, void*, const char*, u8, co
IZ_ProcedureResult IZ_VideoSaveConfig(IZ_VideoState*, const char*);
-u16 IZ_VideoGetNextFreeSpriteSlot(IZ_VideoState*);
+u16 IZ_VideoGetNextFreeSpriteSlot(IZ_VideoState*, IZ_VideoSpritePriority);
void IZ_VideoLoadSprite(IZ_VideoState*, IZ_VideoLoadSpriteParams, IZ_SpriteSlot*);