Files
thejayman77 ce69b8cd18 zen: UB is now the Queen angelfish (real model) + fix admin lockout
- Admin lockout: /zen checked blockedForViewer() before auth loaded, so a hard-refresh/
  direct-link bounced admins to /play. Now revalidate auth (await refresh if !ready)
  BEFORE the gate check.
- UB swap: retired the two-tail koi (ub.glb/ub-split.glb) for the vetted Queen angelfish.
  Trimmed the 75.67s baked Take down to just the Idle loop (tools/glb-split/trim-idle.mjs
  → 16MB → 6.9MB) → static/models/ub-angelfish.glb. aquarium.js reworked for the pack's
  ONE-mesh/TWO-material layout (…_body opaque single-sided; …_fins opaque alpha-tested,
  tunable); animation is the trimmed Idle. Debug tuner (/zen?debug=1) updated: yaw/pitch/
  scale + one fins&tail section. Still devgate IN_DEV={'zen'} — admin-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 18:10:38 -04:00

315 lines
4.5 KiB
JSON

{
"note": "Angelfish Animated Pack 10 (CGTrader). One baked 75.67s/2270-frame Take at 30fps in each GLB. GLB frame = Maya frame + 110. Slice with THREE.AnimationUtils.subclip(clip,name,startFrame,endFrame,30).",
"fps": 30,
"total_frames": 2270,
"clips": {
"Swim1_norm": {
"glb_frames": [
110,
185
],
"seconds": [
3.667,
6.167
],
"maya_frames": [
0,
75
]
},
"Turn_R_in": {
"glb_frames": [
186,
255
],
"seconds": [
6.2,
8.5
],
"maya_frames": [
76,
145
]
},
"Turn_R_loop": {
"glb_frames": [
256,
330
],
"seconds": [
8.533,
11.0
],
"maya_frames": [
146,
220
]
},
"Turn_R_out": {
"glb_frames": [
331,
409
],
"seconds": [
11.033,
13.633
],
"maya_frames": [
221,
299
]
},
"Swim2_Fast": {
"glb_frames": [
410,
450
],
"seconds": [
13.667,
15.0
],
"maya_frames": [
300,
340
]
},
"Turn_L_in": {
"glb_frames": [
486,
535
],
"seconds": [
16.2,
17.833
],
"maya_frames": [
376,
425
]
},
"Turn_L_loop": {
"glb_frames": [
536,
610
],
"seconds": [
17.867,
20.333
],
"maya_frames": [
426,
500
]
},
"Turn_L_out": {
"glb_frames": [
611,
710
],
"seconds": [
20.367,
23.667
],
"maya_frames": [
501,
600
]
},
"Attack": {
"glb_frames": [
711,
751
],
"seconds": [
23.7,
25.033
],
"maya_frames": [
601,
641
]
},
"Eat_Swim": {
"glb_frames": [
752,
811
],
"seconds": [
25.067,
27.033
],
"maya_frames": [
642,
701
]
},
"Eat_Ground": {
"glb_frames": [
812,
852
],
"seconds": [
27.067,
28.4
],
"maya_frames": [
702,
742
]
},
"Eat_Wall": {
"glb_frames": [
853,
893
],
"seconds": [
28.433,
29.767
],
"maya_frames": [
743,
783
]
},
"Turn_L_Fast": {
"glb_frames": [
894,
923
],
"seconds": [
29.8,
30.767
],
"maya_frames": [
784,
813
]
},
"Turn_R_Fast": {
"glb_frames": [
924,
953
],
"seconds": [
30.8,
31.767
],
"maya_frames": [
814,
843
]
},
"Swim3_Long_Wide": {
"glb_frames": [
954,
1401
],
"seconds": [
31.8,
46.7
],
"maya_frames": [
844,
1291
]
},
"Swim4_Long_Near": {
"glb_frames": [
1402,
1852
],
"seconds": [
46.733,
61.733
],
"maya_frames": [
1292,
1742
]
},
"Death1 Sink Start": {
"glb_frames": [
1853,
1930
],
"seconds": [
61.767,
64.333
],
"maya_frames": [
1743,
1820
]
},
"Death1 Sink Loop": {
"glb_frames": [
1930,
1987
],
"seconds": [
64.333,
66.233
],
"maya_frames": [
1820,
1877
]
},
"Death2 Float Start": {
"glb_frames": [
1988,
2120
],
"seconds": [
66.267,
70.667
],
"maya_frames": [
1878,
2010
]
},
"Death2 Float Loop": {
"glb_frames": [
2121,
2210
],
"seconds": [
70.7,
73.667
],
"maya_frames": [
2011,
2100
]
},
"Jump": {
"glb_frames": [
2211,
2270
],
"seconds": [
73.7,
75.667
],
"maya_frames": [
2101,
2160
]
},
"Idle": {
"glb_frames": [
0,
109
],
"seconds": [
0.0,
3.633
],
"maya_frames": [
-110,
-1
]
}
}
}