@seer-pet-anim/swf-rebuild 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +78 -0
- package/dist/abc.d.ts +14 -0
- package/dist/abc.d.ts.map +1 -0
- package/dist/abc.js +258 -0
- package/dist/abc.js.map +1 -0
- package/dist/binary.d.ts +32 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +129 -0
- package/dist/binary.js.map +1 -0
- package/dist/browser.d.ts +9 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +27 -0
- package/dist/browser.js.map +1 -0
- package/dist/buffer-setup.d.ts +2 -0
- package/dist/buffer-setup.d.ts.map +1 -0
- package/dist/buffer-setup.js +5 -0
- package/dist/buffer-setup.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +73 -0
- package/dist/cli.js.map +1 -0
- package/dist/frames.d.ts +12 -0
- package/dist/frames.d.ts.map +1 -0
- package/dist/frames.js +104 -0
- package/dist/frames.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/material.d.ts +11 -0
- package/dist/material.d.ts.map +1 -0
- package/dist/material.js +40 -0
- package/dist/material.js.map +1 -0
- package/dist/rebuild-core.d.ts +15 -0
- package/dist/rebuild-core.d.ts.map +1 -0
- package/dist/rebuild-core.js +220 -0
- package/dist/rebuild-core.js.map +1 -0
- package/dist/rebuild.d.ts +8 -0
- package/dist/rebuild.d.ts.map +1 -0
- package/dist/rebuild.js +22 -0
- package/dist/rebuild.js.map +1 -0
- package/dist/resources.d.ts +27 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +114 -0
- package/dist/resources.js.map +1 -0
- package/dist/source.d.ts +29 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +259 -0
- package/dist/source.js.map +1 -0
- package/dist/swf.d.ts +42 -0
- package/dist/swf.d.ts.map +1 -0
- package/dist/swf.js +290 -0
- package/dist/swf.js.map +1 -0
- package/dist/textures.d.ts +6 -0
- package/dist/textures.d.ts.map +1 -0
- package/dist/textures.js +38 -0
- package/dist/textures.js.map +1 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/unity-clip.d.ts +3 -0
- package/dist/unity-clip.d.ts.map +1 -0
- package/dist/unity-clip.js +64 -0
- package/dist/unity-clip.js.map +1 -0
- package/dist/unity.d.ts +4 -0
- package/dist/unity.d.ts.map +1 -0
- package/dist/unity.js +41 -0
- package/dist/unity.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Buffer } from "buffer";
|
|
2
|
+
import { bitmap, bitmapShape, maskShape, sprite, browserCompression, } from "./swf.js";
|
|
3
|
+
/** 合并多行中相同的水平区段,同时保留透明空洞。 */
|
|
4
|
+
export function alphaRectangles(width, height, rgba) {
|
|
5
|
+
if (rgba.length !== width * height * 4)
|
|
6
|
+
throw new Error("Mask pixel length mismatch");
|
|
7
|
+
const rectangles = [];
|
|
8
|
+
let previous = new Map();
|
|
9
|
+
for (let y = 0; y < height; y++) {
|
|
10
|
+
const current = new Map();
|
|
11
|
+
let x = 0;
|
|
12
|
+
while (x < width) {
|
|
13
|
+
// Unity 使用 clip(alpha - 0.01);alpha 为整数且在 0 到 2 之间时会被裁掉。
|
|
14
|
+
if (rgba[(y * width + x) * 4 + 3] < 3) {
|
|
15
|
+
x++;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const start = x;
|
|
19
|
+
while (x < width && rgba[(y * width + x) * 4 + 3] >= 3)
|
|
20
|
+
x++;
|
|
21
|
+
const key = `${start}:${x}`;
|
|
22
|
+
const existing = previous.get(key);
|
|
23
|
+
const rectangle = existing ?? {
|
|
24
|
+
x: start,
|
|
25
|
+
y,
|
|
26
|
+
width: x - start,
|
|
27
|
+
height: 0,
|
|
28
|
+
};
|
|
29
|
+
if (!existing)
|
|
30
|
+
rectangles.push(rectangle);
|
|
31
|
+
rectangle.height++;
|
|
32
|
+
current.set(key, rectangle);
|
|
33
|
+
}
|
|
34
|
+
previous = current;
|
|
35
|
+
}
|
|
36
|
+
return rectangles;
|
|
37
|
+
}
|
|
38
|
+
export class ResourceDictionary {
|
|
39
|
+
atlas;
|
|
40
|
+
nextId;
|
|
41
|
+
textureScale;
|
|
42
|
+
compression;
|
|
43
|
+
tags = [];
|
|
44
|
+
regions = new Map();
|
|
45
|
+
masks = new Map();
|
|
46
|
+
bitmapPixelBytes = 0;
|
|
47
|
+
originalBitmapPixelBytes = 0;
|
|
48
|
+
constructor(atlas, nextId, textureScale = 1, compression = browserCompression) {
|
|
49
|
+
this.atlas = atlas;
|
|
50
|
+
this.nextId = nextId;
|
|
51
|
+
this.textureScale = textureScale;
|
|
52
|
+
this.compression = compression;
|
|
53
|
+
}
|
|
54
|
+
allocate() {
|
|
55
|
+
if (this.nextId > 65535)
|
|
56
|
+
throw new Error("SWF character dictionary exhausted");
|
|
57
|
+
return this.nextId++;
|
|
58
|
+
}
|
|
59
|
+
createSprite(frames) {
|
|
60
|
+
return sprite(this.allocate(), frames);
|
|
61
|
+
}
|
|
62
|
+
crop(first, second) {
|
|
63
|
+
const { width: atlasWidth, height: atlasHeight, rgba } = this.atlas;
|
|
64
|
+
const x0 = Math.round(((first >>> 16) / 65535) * atlasWidth);
|
|
65
|
+
const y0 = Math.round(((first & 65535) / 65535) * atlasHeight);
|
|
66
|
+
const x1 = Math.round(((second >>> 16) / 65535) * atlasWidth);
|
|
67
|
+
const y1 = Math.round(((second & 65535) / 65535) * atlasHeight);
|
|
68
|
+
if (x0 < 0 ||
|
|
69
|
+
y0 < 0 ||
|
|
70
|
+
x1 > atlasWidth ||
|
|
71
|
+
y1 > atlasHeight ||
|
|
72
|
+
x1 <= x0 ||
|
|
73
|
+
y1 <= y0) {
|
|
74
|
+
throw new Error(`Invalid or reversed UV rectangle ${first}:${second}`);
|
|
75
|
+
}
|
|
76
|
+
const width = x1 - x0;
|
|
77
|
+
const height = y1 - y0;
|
|
78
|
+
const pixels = Buffer.alloc(width * height * 4);
|
|
79
|
+
for (let row = 0; row < height; row++) {
|
|
80
|
+
const offset = ((y0 + row) * atlasWidth + x0) * 4;
|
|
81
|
+
pixels.set(rgba.subarray(offset, offset + width * 4), row * width * 4);
|
|
82
|
+
}
|
|
83
|
+
return { width, height, pixels };
|
|
84
|
+
}
|
|
85
|
+
region(first, second) {
|
|
86
|
+
const key = `${first}:${second}`;
|
|
87
|
+
const cached = this.regions.get(key);
|
|
88
|
+
if (cached)
|
|
89
|
+
return cached;
|
|
90
|
+
const { width, height, pixels } = this.crop(first, second);
|
|
91
|
+
const bitmapId = this.allocate();
|
|
92
|
+
const bitmapWidth = Math.ceil(width * this.textureScale);
|
|
93
|
+
const bitmapHeight = Math.ceil(height * this.textureScale);
|
|
94
|
+
// 放置变换和遮罩几何仍使用原始区域尺寸。
|
|
95
|
+
const region = { id: this.allocate(), width, height };
|
|
96
|
+
this.tags.push(bitmap(bitmapId, width, height, pixels, this.textureScale, this.compression), bitmapShape(region.id, bitmapId, width, height, bitmapWidth, bitmapHeight));
|
|
97
|
+
this.originalBitmapPixelBytes += width * height * 4;
|
|
98
|
+
this.bitmapPixelBytes += bitmapWidth * bitmapHeight * 4;
|
|
99
|
+
this.regions.set(key, region);
|
|
100
|
+
return region;
|
|
101
|
+
}
|
|
102
|
+
mask(first, second) {
|
|
103
|
+
const key = `${first}:${second}`;
|
|
104
|
+
const cached = this.masks.get(key);
|
|
105
|
+
if (cached)
|
|
106
|
+
return cached;
|
|
107
|
+
const { width, height, pixels } = this.crop(first, second);
|
|
108
|
+
const region = { id: this.allocate(), width, height };
|
|
109
|
+
this.tags.push(maskShape(region.id, width, height, alphaRectangles(width, height, pixels)));
|
|
110
|
+
this.masks.set(key, region);
|
|
111
|
+
return region;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,MAAM,EACN,kBAAkB,GAGnB,MAAM,UAAU,CAAC;AASlB,6BAA6B;AAC7B,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,MAAc,EACd,IAAgB;IAEhB,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG,MAAM,GAAG,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,IAAI,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,KAAK,EAAE,CAAC;YACjB,yDAAyD;YACzD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAAE,CAAC,EAAE,CAAC;YAC5D,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,QAAQ,IAAI;gBAC5B,CAAC,EAAE,KAAK;gBACR,CAAC;gBACD,KAAK,EAAE,CAAC,GAAG,KAAK;gBAChB,MAAM,EAAE,CAAC;aACV,CAAC;YACF,IAAI,CAAC,QAAQ;gBAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,kBAAkB;IAQV;IACT;IACS;IACA;IAVV,IAAI,GAAU,EAAE,CAAC;IACjB,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,gBAAgB,GAAG,CAAC,CAAC;IACrB,wBAAwB,GAAG,CAAC,CAAC;IAE7B,YACmB,KAAoB,EAC7B,MAAc,EACL,eAA6B,CAAC,EAC9B,cAAc,kBAAkB;QAHhC,UAAK,GAAL,KAAK,CAAe;QAC7B,WAAM,GAAN,MAAM,CAAQ;QACL,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,gBAAW,GAAX,WAAW,CAAqB;IAChD,CAAC;IAEI,QAAQ;QACd,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,YAAY,CAAC,MAAe;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,IAAI,CACV,KAAa,EACb,MAAc;QAEd,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACpE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;QAChE,IACE,EAAE,GAAG,CAAC;YACN,EAAE,GAAG,CAAC;YACN,EAAE,GAAG,UAAU;YACf,EAAE,GAAG,WAAW;YAChB,EAAE,IAAI,EAAE;YACR,EAAE,IAAI,EAAE,EACR,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,MAAc;QAClC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3D,sBAAsB;QACtB,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,MAAM,CACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,CACjB,EACD,WAAW,CACT,MAAM,CAAC,EAAE,EACT,QAAQ,EACR,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,CACb,CACF,CAAC;QACF,IAAI,CAAC,wBAAwB,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,IAAI,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,MAAc;QAChC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,SAAS,CACP,MAAM,CAAC,EAAE,EACT,KAAK,EACL,MAAM,EACN,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CACvC,CACF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
package/dist/source.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type SwfFile, type Tag } from "./swf.js";
|
|
2
|
+
import type { Clip, Sequence } from "./types.js";
|
|
3
|
+
type Translation = [number, number];
|
|
4
|
+
export interface SourceAction {
|
|
5
|
+
id: number;
|
|
6
|
+
sequence: Sequence;
|
|
7
|
+
origin: Translation;
|
|
8
|
+
className?: string;
|
|
9
|
+
hit?: number;
|
|
10
|
+
idlePlacement?: Translation;
|
|
11
|
+
idleAtStart?: boolean;
|
|
12
|
+
/** 客户端在已停止的三帧控制包装内播放出场动画。 */
|
|
13
|
+
content?: {
|
|
14
|
+
id: number;
|
|
15
|
+
translation: Translation;
|
|
16
|
+
wrapper: Tag;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface SourceLayout {
|
|
20
|
+
petSpriteId: number;
|
|
21
|
+
idleSpriteId: number;
|
|
22
|
+
nextCharacterId: number;
|
|
23
|
+
actions: SourceAction[];
|
|
24
|
+
}
|
|
25
|
+
export declare const isCharacterDefinition: (tag: Tag) => boolean;
|
|
26
|
+
/** 根据精简后的 Flash 外壳结构推断约定,不依赖宠物 ID、哈希或类名模式。 */
|
|
27
|
+
export declare function discoverSource(file: SwfFile, clip: Clip): SourceLayout;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AASpC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,CAAC;CAClE;AACD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAQD,eAAO,MAAM,qBAAqB,GAAI,KAAK,GAAG,KAAG,OAClB,CAAC;AA6HhC,8CAA8C;AAC9C,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,YAAY,CAiKtE"}
|
package/dist/source.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { BitReader, Reader } from "./binary.js";
|
|
2
|
+
import { readTags } from "./swf.js";
|
|
3
|
+
// 定义角色的标签都以 UI16 类型的 CharacterId 开头。
|
|
4
|
+
// 字体元数据、缩放网格和符号绑定只引用已有 ID,不属于资源定义。
|
|
5
|
+
const definitionCodes = new Set([
|
|
6
|
+
2, 6, 7, 10, 11, 14, 20, 21, 22, 32, 33, 34, 35, 36, 37, 39, 46, 48, 60, 75,
|
|
7
|
+
83, 84, 87, 90, 91,
|
|
8
|
+
]);
|
|
9
|
+
export const isCharacterDefinition = (tag) => definitionCodes.has(tag.code);
|
|
10
|
+
function readTranslation(reader) {
|
|
11
|
+
const bits = new BitReader(reader.data.slice(reader.position));
|
|
12
|
+
let a = 1, d = 1, b = 0, c = 0;
|
|
13
|
+
if (bits.read(1)) {
|
|
14
|
+
const count = bits.read(5);
|
|
15
|
+
a = bits.read(count, true) / 65536;
|
|
16
|
+
d = bits.read(count, true) / 65536;
|
|
17
|
+
}
|
|
18
|
+
if (bits.read(1)) {
|
|
19
|
+
const count = bits.read(5);
|
|
20
|
+
b = bits.read(count, true) / 65536;
|
|
21
|
+
c = bits.read(count, true) / 65536;
|
|
22
|
+
}
|
|
23
|
+
const count = bits.read(5);
|
|
24
|
+
const translation = [
|
|
25
|
+
bits.read(count, true),
|
|
26
|
+
bits.read(count, true),
|
|
27
|
+
];
|
|
28
|
+
reader.take(bits.bytes);
|
|
29
|
+
if (a !== 1 || d !== 1 || b !== 0 || c !== 0) {
|
|
30
|
+
throw new Error("Source action/idle placement must use translation only");
|
|
31
|
+
}
|
|
32
|
+
return translation;
|
|
33
|
+
}
|
|
34
|
+
function readIdentityColor(reader) {
|
|
35
|
+
const bits = new BitReader(reader.data.slice(reader.position));
|
|
36
|
+
const hasAdd = bits.read(1), hasMultiply = bits.read(1), count = bits.read(4);
|
|
37
|
+
const multiply = hasMultiply
|
|
38
|
+
? Array.from({ length: 4 }, () => bits.read(count, true))
|
|
39
|
+
: [256, 256, 256, 256];
|
|
40
|
+
const add = hasAdd
|
|
41
|
+
? Array.from({ length: 4 }, () => bits.read(count, true))
|
|
42
|
+
: [0, 0, 0, 0];
|
|
43
|
+
reader.take(bits.bytes);
|
|
44
|
+
if (multiply.some((value) => value !== 256) ||
|
|
45
|
+
add.some((value) => value !== 0)) {
|
|
46
|
+
throw new Error("Source action/idle placement has an unsupported color transform");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** 重放显示列表:标签可能与移动指令同帧出现,也可能没有新的放置指令。 */
|
|
50
|
+
function timeline(tag) {
|
|
51
|
+
const objects = new Map();
|
|
52
|
+
const frames = [];
|
|
53
|
+
let labels = [];
|
|
54
|
+
for (const entry of readTags(tag.data.slice(4))) {
|
|
55
|
+
const reader = new Reader(entry.data);
|
|
56
|
+
if (entry.code === 26) {
|
|
57
|
+
const flags = reader.u8(), depth = reader.u16();
|
|
58
|
+
const previous = flags & 1 ? objects.get(depth) : undefined;
|
|
59
|
+
if (flags & 1 && !previous)
|
|
60
|
+
throw new Error("Source move references an empty depth");
|
|
61
|
+
const id = flags & 2 ? reader.u16() : previous?.id;
|
|
62
|
+
const translation = flags & 4
|
|
63
|
+
? readTranslation(reader)
|
|
64
|
+
: (previous?.translation ?? [0, 0]);
|
|
65
|
+
if (flags & 8)
|
|
66
|
+
readIdentityColor(reader);
|
|
67
|
+
if (flags & 16)
|
|
68
|
+
reader.u16(); // Ratio 不影响 MovieClip 包装。
|
|
69
|
+
if (flags & 32)
|
|
70
|
+
reader.string();
|
|
71
|
+
if (flags & 0xc0)
|
|
72
|
+
throw new Error("Source wrapper uses clipping or clip actions");
|
|
73
|
+
if (id === undefined || reader.position !== entry.data.length)
|
|
74
|
+
throw new Error("Invalid source placement");
|
|
75
|
+
objects.set(depth, { id, translation });
|
|
76
|
+
}
|
|
77
|
+
else if (entry.code === 28) {
|
|
78
|
+
objects.delete(reader.u16());
|
|
79
|
+
}
|
|
80
|
+
else if (entry.code === 43) {
|
|
81
|
+
labels.push(reader.string());
|
|
82
|
+
}
|
|
83
|
+
else if (entry.code === 1) {
|
|
84
|
+
frames.push({ labels, objects: new Map(objects) });
|
|
85
|
+
labels = [];
|
|
86
|
+
}
|
|
87
|
+
else if (entry.code !== 0) {
|
|
88
|
+
throw new Error(`Unsupported source wrapper tag ${entry.code}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (frames.length !== tag.data.readUInt16LE(2))
|
|
92
|
+
throw new Error("Source sprite frame count mismatch");
|
|
93
|
+
return frames;
|
|
94
|
+
}
|
|
95
|
+
function singlePlacement(frame) {
|
|
96
|
+
if (frame.objects.size !== 1)
|
|
97
|
+
throw new Error("Expected one MovieClip in the source wrapper frame");
|
|
98
|
+
return frame.objects.values().next().value;
|
|
99
|
+
}
|
|
100
|
+
function validateEvents(sequence, action) {
|
|
101
|
+
const frames = sequence.frames.length;
|
|
102
|
+
if (!frames || frames > 65535)
|
|
103
|
+
throw new Error(`Invalid ${sequence.name} frame count`);
|
|
104
|
+
const events = (name) => sequence.frames.flatMap((frame, index) => frame.labels.filter((label) => label === name).map(() => index + 1));
|
|
105
|
+
const ends = events("action_end"), hits = events("action_hit");
|
|
106
|
+
if (ends.length !== 1 || ends[0] !== frames)
|
|
107
|
+
throw new Error(`Unexpected ${sequence.name} end event`);
|
|
108
|
+
if (action
|
|
109
|
+
? hits.length !== 1 || hits[0] <= 1 || hits[0] >= frames
|
|
110
|
+
: hits.length !== 0) {
|
|
111
|
+
throw new Error(`Unexpected ${sequence.name} hit event`);
|
|
112
|
+
}
|
|
113
|
+
return hits[0];
|
|
114
|
+
}
|
|
115
|
+
/** 根据精简后的 Flash 外壳结构推断约定,不依赖宠物 ID、哈希或类名模式。 */
|
|
116
|
+
export function discoverSource(file, clip) {
|
|
117
|
+
const sprites = new Map();
|
|
118
|
+
const symbols = new Map();
|
|
119
|
+
const characterIds = new Set();
|
|
120
|
+
for (const tag of file.tags) {
|
|
121
|
+
if (isCharacterDefinition(tag)) {
|
|
122
|
+
const id = tag.data.readUInt16LE(0);
|
|
123
|
+
if (!id || characterIds.has(id))
|
|
124
|
+
throw new Error(`Duplicate or invalid CharacterId ${id}`);
|
|
125
|
+
characterIds.add(id);
|
|
126
|
+
if (tag.code === 39) {
|
|
127
|
+
if (readTags(tag.data.slice(4)).some(isCharacterDefinition)) {
|
|
128
|
+
throw new Error("Nested character definitions are not supported");
|
|
129
|
+
}
|
|
130
|
+
sprites.set(id, tag);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (tag.code === 76) {
|
|
134
|
+
const reader = new Reader(tag.data);
|
|
135
|
+
const count = reader.u16();
|
|
136
|
+
for (let i = 0; i < count; i++) {
|
|
137
|
+
const id = reader.u16(), name = reader.string();
|
|
138
|
+
if (symbols.has(id))
|
|
139
|
+
throw new Error(`Duplicate SymbolClass binding ${id}`);
|
|
140
|
+
symbols.set(id, name);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const pets = [...symbols].filter(([, name]) => name === "pet");
|
|
145
|
+
if (pets.length !== 1 || !sprites.has(pets[0][0]))
|
|
146
|
+
throw new Error("Expected one exported pet MovieClip");
|
|
147
|
+
const petSpriteId = pets[0][0];
|
|
148
|
+
const sequences = new Map();
|
|
149
|
+
for (const sequence of clip.sequences) {
|
|
150
|
+
if (sequences.has(sequence.name))
|
|
151
|
+
throw new Error(`Duplicate bundle sequence ${sequence.name}`);
|
|
152
|
+
sequences.set(sequence.name, sequence);
|
|
153
|
+
}
|
|
154
|
+
const standby = sequences.get("standby");
|
|
155
|
+
if (!standby)
|
|
156
|
+
throw new Error("Missing standby sequence");
|
|
157
|
+
validateEvents(standby, false);
|
|
158
|
+
const actions = [];
|
|
159
|
+
let idleSpriteId;
|
|
160
|
+
let idleOrigin;
|
|
161
|
+
const seen = new Set();
|
|
162
|
+
for (const frame of timeline(sprites.get(petSpriteId))) {
|
|
163
|
+
for (const name of frame.labels) {
|
|
164
|
+
// 保留的受击动画已有完整的原始时间轴。
|
|
165
|
+
if (name === "hited")
|
|
166
|
+
continue;
|
|
167
|
+
const sequence = sequences.get(name);
|
|
168
|
+
if (!sequence || name === "standby" || seen.has(name))
|
|
169
|
+
throw new Error(`Unmatched or duplicate action label ${name}`);
|
|
170
|
+
seen.add(name);
|
|
171
|
+
const parent = singlePlacement(frame);
|
|
172
|
+
const wrapper = sprites.get(parent.id);
|
|
173
|
+
if (!wrapper)
|
|
174
|
+
throw new Error(`Missing action sprite ${parent.id}`);
|
|
175
|
+
const frames = timeline(wrapper);
|
|
176
|
+
if (frames.length !== 3)
|
|
177
|
+
throw new Error(`Expected a three-frame trimmed wrapper for ${name}`);
|
|
178
|
+
frames.forEach(singlePlacement);
|
|
179
|
+
const first = singlePlacement(frames[0]), last = singlePlacement(frames[2]);
|
|
180
|
+
if (!sprites.has(last.id))
|
|
181
|
+
throw new Error("Common idle is not a MovieClip");
|
|
182
|
+
const origin = [
|
|
183
|
+
-parent.translation[0],
|
|
184
|
+
-parent.translation[1],
|
|
185
|
+
];
|
|
186
|
+
const candidateOrigin = [
|
|
187
|
+
origin[0] - last.translation[0],
|
|
188
|
+
origin[1] - last.translation[1],
|
|
189
|
+
];
|
|
190
|
+
if (idleSpriteId !== undefined &&
|
|
191
|
+
(idleSpriteId !== last.id ||
|
|
192
|
+
idleOrigin.some((value, index) => value !== candidateOrigin[index]))) {
|
|
193
|
+
throw new Error("Action wrappers disagree on common idle placement");
|
|
194
|
+
}
|
|
195
|
+
idleSpriteId = last.id;
|
|
196
|
+
idleOrigin = candidateOrigin;
|
|
197
|
+
const className = symbols.get(parent.id);
|
|
198
|
+
if (!className)
|
|
199
|
+
throw new Error(`Missing SymbolClass binding for ${name}`);
|
|
200
|
+
const idleAtStart = first.id === last.id;
|
|
201
|
+
if (idleAtStart &&
|
|
202
|
+
first.translation.some((value, index) => value !== last.translation[index])) {
|
|
203
|
+
throw new Error("Initial and final idle placements differ");
|
|
204
|
+
}
|
|
205
|
+
let content;
|
|
206
|
+
// "appear" 是客户端接口标签,不是资源名或类名约定。
|
|
207
|
+
// PlayerPetView 会在包装的第 2 帧停止,然后播放第一个子级。
|
|
208
|
+
if (name === "appear") {
|
|
209
|
+
const middle = singlePlacement(frames[1]);
|
|
210
|
+
const inner = sprites.get(middle.id);
|
|
211
|
+
if (!inner ||
|
|
212
|
+
inner.data.readUInt16LE(2) !== 1 ||
|
|
213
|
+
symbols.has(middle.id) ||
|
|
214
|
+
middle.id === last.id ||
|
|
215
|
+
middle.id === parent.id) {
|
|
216
|
+
throw new Error("Expected an unbound single-frame appear content MovieClip distinct from idle and wrapper");
|
|
217
|
+
}
|
|
218
|
+
if (first.id !== last.id &&
|
|
219
|
+
(first.id !== middle.id ||
|
|
220
|
+
first.translation.some((value, index) => value !== middle.translation[index]))) {
|
|
221
|
+
throw new Error("Initial appear content differs from the frame-2 placement");
|
|
222
|
+
}
|
|
223
|
+
content = { ...middle, wrapper };
|
|
224
|
+
}
|
|
225
|
+
actions.push({
|
|
226
|
+
id: parent.id,
|
|
227
|
+
sequence,
|
|
228
|
+
origin,
|
|
229
|
+
className,
|
|
230
|
+
hit: validateEvents(sequence, true),
|
|
231
|
+
idlePlacement: last.translation,
|
|
232
|
+
idleAtStart,
|
|
233
|
+
...(content ? { content } : {}),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (idleSpriteId === undefined || !idleOrigin)
|
|
238
|
+
throw new Error("No reconstructable action wrappers");
|
|
239
|
+
if (sprites.get(idleSpriteId).data.readUInt16LE(2) !== 1 ||
|
|
240
|
+
symbols.has(idleSpriteId)) {
|
|
241
|
+
throw new Error("Expected an unbound single-frame common idle sprite");
|
|
242
|
+
}
|
|
243
|
+
for (const name of sequences.keys()) {
|
|
244
|
+
if (name !== "standby" && name !== "hited" && !seen.has(name))
|
|
245
|
+
throw new Error(`Bundle action ${name} has no source entry`);
|
|
246
|
+
}
|
|
247
|
+
actions.unshift({ id: idleSpriteId, sequence: standby, origin: idleOrigin });
|
|
248
|
+
if (new Set(actions.map((action) => action.id)).size !== actions.length ||
|
|
249
|
+
actions.some((action) => action.id === petSpriteId)) {
|
|
250
|
+
throw new Error("Source action sprites alias each other or their parent");
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
petSpriteId,
|
|
254
|
+
idleSpriteId,
|
|
255
|
+
nextCharacterId: Math.max(...characterIds) + 1,
|
|
256
|
+
actions,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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"}
|
package/dist/swf.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Buffer } from "buffer";
|
|
2
|
+
import type { TextureScale } from "./types.js";
|
|
3
|
+
export interface SwfCompression {
|
|
4
|
+
deflate(bytes: Uint8Array): Uint8Array;
|
|
5
|
+
inflate(bytes: Uint8Array): Uint8Array;
|
|
6
|
+
}
|
|
7
|
+
export declare const browserCompression: SwfCompression;
|
|
8
|
+
export interface Tag {
|
|
9
|
+
code: number;
|
|
10
|
+
data: Buffer;
|
|
11
|
+
}
|
|
12
|
+
export type Matrix = [number, number, number, number, number, number];
|
|
13
|
+
export interface SwfFile {
|
|
14
|
+
version: number;
|
|
15
|
+
header: Buffer;
|
|
16
|
+
tags: Tag[];
|
|
17
|
+
}
|
|
18
|
+
export declare function readTags(bytes: Buffer): Tag[];
|
|
19
|
+
export declare function encodeTag(tag: Tag): Buffer;
|
|
20
|
+
export declare function readSwf(bytes: Buffer, compression?: SwfCompression): SwfFile;
|
|
21
|
+
export declare function writeSwf(file: SwfFile, compression?: SwfCompression): Buffer;
|
|
22
|
+
export declare function rect(values: [number, number, number, number]): Buffer;
|
|
23
|
+
export declare function matrix(values: Matrix): Buffer;
|
|
24
|
+
export declare function colorTransform(mul: number[], add: number[]): Buffer;
|
|
25
|
+
export declare function bitmap(id: number, width: number, height: number, rgba: Uint8Array, scale?: TextureScale, compression?: SwfCompression): Tag;
|
|
26
|
+
export declare function bitmapShape(id: number, bitmapId: number, width: number, height: number, bitmapWidth?: number, bitmapHeight?: number): Tag;
|
|
27
|
+
export declare function place(id: number, depth: number, transform: Matrix, mul?: number[], add?: number[], blend?: number): Tag;
|
|
28
|
+
export interface PixelRectangle {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
width: number;
|
|
32
|
+
height: number;
|
|
33
|
+
}
|
|
34
|
+
/** 必须使用实体几何:Flash 遮罩层会忽略位图的 alpha 通道。 */
|
|
35
|
+
export declare function maskShape(id: number, width: number, height: number, rectangles: PixelRectangle[]): Tag;
|
|
36
|
+
export declare function placeMask(id: number, depth: number, clipDepth: number, transform: Matrix): Tag;
|
|
37
|
+
export declare const showFrame: () => Tag;
|
|
38
|
+
export declare const end: () => Tag;
|
|
39
|
+
export declare const remove: (depth: number) => Tag;
|
|
40
|
+
export declare const label: (name: string) => Tag;
|
|
41
|
+
export declare function sprite(id: number, frames: Tag[][]): Tag;
|
|
42
|
+
//# sourceMappingURL=swf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swf.d.ts","sourceRoot":"","sources":["../src/swf.ts"],"names":[],"mappings":"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"}
|