Spaces:
Running
Running
Space: close drift — curate full asset set, unified nav IR, sync via build.sh
Browse files- Assets: curate_assets.py copies every manifest-referenced sheet (177 files:
shadows, extras, companions, diagonals) from the full auto-battler set, so the
Space renders shadows/effects like React instead of 404-degrading.
- Nav IR: app.py build_sidebar now consumes the SAME src/shell/nav.json the React
app renders (items with a `space` tab label); no more two hardcoded sidebars.
- build.sh now also copies web/shell/* and runs curate_assets.py, so shell + assets
can't silently drift from auto-battler.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This view is limited to 50 files because it contains too many changes. See raw diff
- app.py +9 -2
- build.sh +11 -1
- curate_assets.py +63 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Attack_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Die_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Dmg_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Idle_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Walk_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Attack_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Die_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Dmg_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Idle_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Walk_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Attack_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Die_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Dmg_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Idle_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Walk_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Figther_Attack_Effect.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Figther_Idle_Special.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Attack_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Die_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Dmg_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Idle_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Idle_Special_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Jump_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_walk_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Cataclysm/Cataclysm_Effect.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Cataclysm/Figther_Cataclysm.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Swirl/Figther_Swirl.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Swirl/Figther_Swirl_Effect.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Swirl/_Shadows/Figther_Swirl_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Taunt/Figther_Taunt.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Taunt/_Shadows/Figther_Taunt_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Tempest/Figther_Tempest.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Tempest/Figther_Tempest_Effect.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Tempest/_Shadows/Figther_Tempest_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Uppercut/Figther_Uppercut.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Uppercut/Figther_Uppercut_Effect.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Uppercut/_Shadows/Figther_Uppercut_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/Ranger_Idle_Special.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/Ranger_SingleShot_Diagonal.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/Single_Arrow_Projectile.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Die_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Dmg_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Idle_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Idle_Special_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Jump_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_SingleShot_Diagonal_Shadow.png +0 -0
- web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_SingleShot_Orthogonal_Shadow.png +0 -0
app.py
CHANGED
|
@@ -55,6 +55,10 @@ STAGE = "height:56vh;border:1px solid #20262e;border-radius:12px;overflow:hidden
|
|
| 55 |
# the markup; the CSS styles it and the JS slides/collapses it — proving the
|
| 56 |
# chrome is shareable across React and Gradio from one source.
|
| 57 |
def build_sidebar(nav):
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
b = nav.get("brand", {})
|
| 59 |
out = ['<aside class="tac-sidebar">',
|
| 60 |
f'<div class="tac-brand"><span class="tac-brand-icon">{b.get("icon","")}</span>'
|
|
@@ -62,13 +66,16 @@ def build_sidebar(nav):
|
|
| 62 |
f'<button class="tac-collapse tac-toggle" title="Collapse">‹</button></div>']
|
| 63 |
first = True # mark the default page active (matches Gradio's first/open tab)
|
| 64 |
for sec in nav.get("sections", []):
|
|
|
|
|
|
|
|
|
|
| 65 |
out.append('<div class="tac-section">')
|
| 66 |
if sec.get("title"):
|
| 67 |
out.append(f'<div class="tac-section-title">{sec["title"]}</div>')
|
| 68 |
-
for it in
|
| 69 |
cls = "tac-nav-item active" if first else "tac-nav-item"
|
| 70 |
first = False
|
| 71 |
-
out.append(f'<a class="{cls}" data-target="{it["
|
| 72 |
f'<span class="tac-ico">{it.get("icon","")}</span><span>{it["label"]}</span></a>')
|
| 73 |
out.append('</div>')
|
| 74 |
out.append('</aside>')
|
|
|
|
| 55 |
# the markup; the CSS styles it and the JS slides/collapses it — proving the
|
| 56 |
# chrome is shareable across React and Gradio from one source.
|
| 57 |
def build_sidebar(nav):
|
| 58 |
+
# Render from the shared nav IR. An item belongs on the Space when it carries a
|
| 59 |
+
# `space` field = the Gradio tab label it navigates to (data-target, matched by
|
| 60 |
+
# sidebar.js against the tab buttons). React-only sandbox items (href but no
|
| 61 |
+
# `space`) and sections with no space-items are skipped.
|
| 62 |
b = nav.get("brand", {})
|
| 63 |
out = ['<aside class="tac-sidebar">',
|
| 64 |
f'<div class="tac-brand"><span class="tac-brand-icon">{b.get("icon","")}</span>'
|
|
|
|
| 66 |
f'<button class="tac-collapse tac-toggle" title="Collapse">‹</button></div>']
|
| 67 |
first = True # mark the default page active (matches Gradio's first/open tab)
|
| 68 |
for sec in nav.get("sections", []):
|
| 69 |
+
items = [it for it in sec.get("items", []) if it.get("space")]
|
| 70 |
+
if not items:
|
| 71 |
+
continue
|
| 72 |
out.append('<div class="tac-section">')
|
| 73 |
if sec.get("title"):
|
| 74 |
out.append(f'<div class="tac-section-title">{sec["title"]}</div>')
|
| 75 |
+
for it in items:
|
| 76 |
cls = "tac-nav-item active" if first else "tac-nav-item"
|
| 77 |
first = False
|
| 78 |
+
out.append(f'<a class="{cls}" data-target="{it["space"]}" href="#">'
|
| 79 |
f'<span class="tac-ico">{it.get("icon","")}</span><span>{it["label"]}</span></a>')
|
| 80 |
out.append('</div>')
|
| 81 |
out.append('</aside>')
|
build.sh
CHANGED
|
@@ -9,8 +9,18 @@
|
|
| 9 |
set -euo pipefail
|
| 10 |
AB="${AB:-../auto-battler}"
|
| 11 |
|
|
|
|
| 12 |
npx --yes esbuild "$AB/src/engine/teamBattle.js" --bundle --format=esm --outfile=web/engine.js
|
| 13 |
npx --yes esbuild "$AB/src/render/spriteSheet.js" --bundle --format=esm --outfile=web/sheet.js
|
| 14 |
npx --yes esbuild "$AB/src/render/spriteScene.js" --bundle --format=esm --outfile=web/scene.js
|
| 15 |
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
set -euo pipefail
|
| 10 |
AB="${AB:-../auto-battler}"
|
| 11 |
|
| 12 |
+
# 1. JS engine/render core → bundled (Pixi injected, so nothing external).
|
| 13 |
npx --yes esbuild "$AB/src/engine/teamBattle.js" --bundle --format=esm --outfile=web/engine.js
|
| 14 |
npx --yes esbuild "$AB/src/render/spriteSheet.js" --bundle --format=esm --outfile=web/sheet.js
|
| 15 |
npx --yes esbuild "$AB/src/render/spriteScene.js" --bundle --format=esm --outfile=web/scene.js
|
| 16 |
|
| 17 |
+
# 2. App shell (nav IR + sidebar CSS/JS) → copied verbatim, so it can't drift from
|
| 18 |
+
# the React app, which renders the SAME src/shell/nav.json.
|
| 19 |
+
mkdir -p web/shell
|
| 20 |
+
cp "$AB/src/shell/nav.json" "$AB/src/shell/sidebar.css" "$AB/src/shell/sidebar.js" web/shell/
|
| 21 |
+
|
| 22 |
+
# 3. Assets → curate the referenced sheets (shadows/extras/companions) for the
|
| 23 |
+
# curated characters from the full auto-battler set.
|
| 24 |
+
AB="$AB" python3 curate_assets.py
|
| 25 |
+
|
| 26 |
+
echo "synced web/{engine,sheet,scene}.js + web/shell/* + assets from $AB"
|
curate_assets.py
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Curate the Space's sprite assets from the full auto-battler set.
|
| 3 |
+
|
| 4 |
+
The Space ships a SUBSET of auto-battler's 65 MB asset library — only the sheets
|
| 5 |
+
the curated characters (web/assets/characters.json) actually reference. Previously
|
| 6 |
+
only the 5 core body sheets per character were copied, so every shadow, effect,
|
| 7 |
+
projectile and diagonal sheet 404'd and silently degraded. This copies EVERY sheet
|
| 8 |
+
the manifest references (body + shadows + extras + companions) so the Space renders
|
| 9 |
+
identically to the React app for those characters.
|
| 10 |
+
|
| 11 |
+
AB=../auto-battler python3 curate_assets.py # copy referenced sheets
|
| 12 |
+
Run from the tiny-army dir; idempotent. Add to build.sh so it stays reproducible.
|
| 13 |
+
"""
|
| 14 |
+
import json
|
| 15 |
+
import os
|
| 16 |
+
import shutil
|
| 17 |
+
|
| 18 |
+
HERE = os.path.dirname(os.path.abspath(__file__))
|
| 19 |
+
AB = os.environ.get("AB", os.path.join(HERE, "..", "auto-battler"))
|
| 20 |
+
SRC_ROOT = os.path.join(AB, "public", "assets")
|
| 21 |
+
DST_ROOT = os.path.join(HERE, "web", "assets")
|
| 22 |
+
MANIFEST = os.path.join(DST_ROOT, "characters.json")
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def referenced_urls(manifest):
|
| 26 |
+
"""Every /assets/... sheet URL the manifest points at, across all sheet kinds."""
|
| 27 |
+
urls = set()
|
| 28 |
+
for pack in manifest["packs"]:
|
| 29 |
+
for c in pack["characters"]:
|
| 30 |
+
for k in ("idle", "walk", "attack", "dmg", "die", "attackDiagonal",
|
| 31 |
+
"attackEffect", "attackProjectile", "attackImpact"):
|
| 32 |
+
if c.get(k):
|
| 33 |
+
urls.add(c[k])
|
| 34 |
+
for u in (c.get("shadows") or {}).values():
|
| 35 |
+
urls.add(u)
|
| 36 |
+
for e in (c.get("extras") or []):
|
| 37 |
+
for k in ("url", "effect", "projectile", "impact", "shadow"):
|
| 38 |
+
if e.get(k):
|
| 39 |
+
urls.add(e[k])
|
| 40 |
+
return urls
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
def main():
|
| 44 |
+
manifest = json.load(open(MANIFEST))
|
| 45 |
+
copied = skipped = absent = 0
|
| 46 |
+
for url in sorted(referenced_urls(manifest)):
|
| 47 |
+
rel = url[len("/assets/"):] if url.startswith("/assets/") else url.lstrip("/")
|
| 48 |
+
src = os.path.join(SRC_ROOT, rel)
|
| 49 |
+
dst = os.path.join(DST_ROOT, rel)
|
| 50 |
+
if os.path.exists(dst):
|
| 51 |
+
skipped += 1
|
| 52 |
+
continue
|
| 53 |
+
if not os.path.exists(src):
|
| 54 |
+
absent += 1 # referenced but missing from the full set too — skip
|
| 55 |
+
continue
|
| 56 |
+
os.makedirs(os.path.dirname(dst), exist_ok=True)
|
| 57 |
+
shutil.copy2(src, dst)
|
| 58 |
+
copied += 1
|
| 59 |
+
print(f"curate: copied={copied} already-present={skipped} missing-from-source={absent}")
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
if __name__ == "__main__":
|
| 63 |
+
main()
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Attack_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Die_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Dmg_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Idle_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Cannon_Fodder/Acolyte/_Shadows/Walk_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Attack_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Die_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Dmg_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Idle_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_Dark_Brotherhood_v1.0/Dark_Brotherhood/Devoted_Brothers/Devoted_Blade/_Shadows/Walk_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Attack_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Die_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Dmg_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Idle_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_RTS_Humans_v1.0/RTS_Humans/Units/Knight/_Shadows/Walk_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Figther_Attack_Effect.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Figther_Idle_Special.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Attack_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Die_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Dmg_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Idle_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Idle_Special_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_Jump_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/General_Animations/Shadows/Figther_walk_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Cataclysm/Cataclysm_Effect.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Cataclysm/Figther_Cataclysm.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Swirl/Figther_Swirl.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Swirl/Figther_Swirl_Effect.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Swirl/_Shadows/Figther_Swirl_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Taunt/Figther_Taunt.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Taunt/_Shadows/Figther_Taunt_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Tempest/Figther_Tempest.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Tempest/Figther_Tempest_Effect.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Tempest/_Shadows/Figther_Tempest_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Uppercut/Figther_Uppercut.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Uppercut/Figther_Uppercut_Effect.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Fighter/Special_Animations/Uppercut/_Shadows/Figther_Uppercut_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/Ranger_Idle_Special.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/Ranger_SingleShot_Diagonal.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/Single_Arrow_Projectile.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Die_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Dmg_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Idle_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Idle_Special_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_Jump_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_SingleShot_Diagonal_Shadow.png
ADDED
|
web/assets/minifantasy/Minifantasy_True_Heroes_III_v1.1/Minifantasy_True_Heroes_III_Assets/Ranger/General_Animations/_Shadows/Ranger_SingleShot_Orthogonal_Shadow.png
ADDED
|