From 228755c708c2001b2f6a3a66f514a925c0f41dcd Mon Sep 17 00:00:00 2001 From: TheoryOfNekomata Date: Sun, 18 Sep 2022 14:41:29 +0800 Subject: [PATCH] Draft specs for sprites and animations Add documentation for sprites and animation management. --- .../default/weapon-servant/animation.json | 17 ++++ .../default/weapon-servant/definition.json | 1 + .../default/weapon-servant/sprite.orig.svg | 82 ++++++++++++++++++ .../default/weapon-servant/sprite.svg | 83 +------------------ docs/sprites.md | 4 + src/packages/game/output/video/IZ_video.c | 3 +- src/packages/game/output/video/IZ_video.h | 2 +- 7 files changed, 108 insertions(+), 84 deletions(-) create mode 100644 assets/internal/default/weapon-servant/animation.json create mode 100644 assets/internal/default/weapon-servant/definition.json create mode 100644 assets/internal/default/weapon-servant/sprite.orig.svg create mode 100644 docs/sprites.md 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*);