@idosgames/characters 0.0.0-stage → 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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -2
  3. package/dist/PartsManager-CAVBKvp6.d.ts +589 -0
  4. package/dist/PartsManager-Cn3MU-VS.d.cts +589 -0
  5. package/dist/chunk-64D567CX.js +1 -0
  6. package/dist/chunk-BU66AZ2Z.js +1 -0
  7. package/dist/chunk-CGF2TQVK.js +1 -0
  8. package/dist/chunk-OF4BH3JZ.js +2 -0
  9. package/dist/chunk-WKHHFTK2.js +1 -0
  10. package/dist/chunk-Z5I76WRJ.js +1 -0
  11. package/dist/contract-DhZuKNIf.d.cts +24 -0
  12. package/dist/contract-DhZuKNIf.d.ts +24 -0
  13. package/dist/gltf/index.cjs +1 -0
  14. package/dist/gltf/index.d.cts +150 -0
  15. package/dist/gltf/index.d.ts +150 -0
  16. package/dist/gltf/index.js +1 -0
  17. package/dist/image-D5NaQeFz.d.cts +8 -0
  18. package/dist/image-D5NaQeFz.d.ts +8 -0
  19. package/dist/index.cjs +1 -0
  20. package/dist/index.d.cts +65 -0
  21. package/dist/index.d.ts +65 -0
  22. package/dist/index.js +1 -0
  23. package/dist/rig2d/editor/index.cjs +81 -0
  24. package/dist/rig2d/editor/index.d.cts +25 -0
  25. package/dist/rig2d/editor/index.d.ts +25 -0
  26. package/dist/rig2d/editor/index.js +81 -0
  27. package/dist/rig2d/index.cjs +17 -0
  28. package/dist/rig2d/index.d.cts +190 -0
  29. package/dist/rig2d/index.d.ts +190 -0
  30. package/dist/rig2d/index.js +17 -0
  31. package/dist/rig2d/phaser/index.cjs +2 -0
  32. package/dist/rig2d/phaser/index.d.cts +106 -0
  33. package/dist/rig2d/phaser/index.d.ts +106 -0
  34. package/dist/rig2d/phaser/index.js +1 -0
  35. package/dist/rig2d/three/index.cjs +2 -0
  36. package/dist/rig2d/three/index.d.cts +63 -0
  37. package/dist/rig2d/three/index.d.ts +63 -0
  38. package/dist/rig2d/three/index.js +1 -0
  39. package/dist/thumbnail-BhGEEXux.d.cts +49 -0
  40. package/dist/thumbnail-Bp-jK70T.d.ts +49 -0
  41. package/dist/voxel/index.cjs +54 -0
  42. package/dist/voxel/index.d.cts +972 -0
  43. package/dist/voxel/index.d.ts +972 -0
  44. package/dist/voxel/index.js +54 -0
  45. package/package.json +101 -4
@@ -0,0 +1,190 @@
1
+ import { S as Skeleton, d as Slot, e as Attachment, R as RigDef, f as ArtPack, g as ArtDef, h as ArtStyle, P as PartsManager, a as Animator, A as ArtCatalog, C as CharacterLook, b as PlayOptions, c as AnimationEvent } from '../PartsManager-Cn3MU-VS.cjs';
2
+ export { i as Animation, j as ArtId, B as BlinkOptions, k as Bone, l as BoneId, m as Color, n as ColorTargetDef, o as ColorTargetId, E as EditorGroup, p as ExpressionsDef, H as Hex, L as LOOK_VERSION, q as PartTypeDef, r as PartTypeId, s as PartsChange, t as PartsRule, u as Rng, v as RuleView, w as SkeletonData, x as Skin, W as WHITE, y as bothHands, z as colorOf, D as defineRig, F as hexToNumber, G as imageSizes, I as mergeLooks, J as numberToHex, K as parseLook, M as pick, N as readSkeletonData, O as seedOf, Q as seededRandom, T as skinImages, U as swapUnder } from '../PartsManager-Cn3MU-VS.cjs';
3
+ export { H as HERO_PRESETS, L as LookPreset, P as PictureArt, T as ThumbnailBackdrop, a as ThumbnailRequest, b as Thumbnailer, c as createThumbnailer, v as vectorPictures } from '../thumbnail-BhGEEXux.cjs';
4
+ import '../contract-DhZuKNIf.cjs';
5
+
6
+ interface Geometry {
7
+ /** x, y per vertex, world space. */
8
+ positions: Float32Array;
9
+ uvs: Float32Array;
10
+ triangles: Uint16Array;
11
+ }
12
+ /** Writes the attachment's world vertices into `out` (resized as needed); returns the geometry. */
13
+ declare function worldGeometry(sk: Skeleton, slot: Slot, attachment: Attachment, out: Float32Array | null): Geometry;
14
+
15
+ declare const RANGED_ANIMATIONS: {
16
+ /** A staff: raised high, then thrust at the enemy — the spell leaves at its point. */
17
+ readonly cast: "Cast";
18
+ readonly bow: "ShootBow";
19
+ readonly crossbow: "ShootCrossbow";
20
+ readonly pistol: "ShootPistol";
21
+ readonly musket: "ShootMusket";
22
+ /** A burst: three kicks of the gun (one shot event — the game shoots once per attack). */
23
+ readonly burst: "ShootBurst";
24
+ };
25
+ /** What a hero's shot looks like in flight: an arrow, a crossbow bolt, a bullet; for a melee weapon
26
+ * (the idle fight is ranged) the wave of its blow — a crescent from a swing, a spike from a stab; the
27
+ * game's own glowing orb for magic and bare hands. */
28
+ type ShotKind = "arrow" | "bolt" | "bullet" | "slash" | "thrust" | "orb";
29
+
30
+ declare const HERO_ANIMATIONS: {
31
+ readonly idle: "Idle";
32
+ /** Idle now and then: a look up and around. */
33
+ readonly look: "Look";
34
+ readonly walk: "Walk";
35
+ readonly run: "Run";
36
+ /** A run with a weapon held ready. */
37
+ readonly runArmed: "RunArmed";
38
+ /** Bare hands. */
39
+ readonly punch: "Punch";
40
+ /** Spears, daggers. */
41
+ readonly stab: "Stab";
42
+ /** Swords, axes, maces, clubs. */
43
+ readonly swing: "Swing";
44
+ readonly hit: "Hit";
45
+ readonly die: "Die";
46
+ /** Talking: the near hand gestures, the head nods. */
47
+ readonly talk: "Talk";
48
+ /** A start back with the hands up (once, then held). */
49
+ readonly surprised: "Surprised";
50
+ /** Pointing forward with the far hand (once, then held). */
51
+ readonly point: "Point";
52
+ /** Waving with the near hand. */
53
+ readonly wave: "Wave";
54
+ readonly jump: "Jump";
55
+ readonly dance: "Dance";
56
+ /** Sitting down (once, then held). */
57
+ readonly sit: "Sit";
58
+ /** Falling over (once, then lying) — Die without its event and its face. */
59
+ readonly fall: "Fall";
60
+ };
61
+ /**
62
+ * How fast the ground passes under a planted foot at speed 1, skeleton units a second: the foot is on
63
+ * the ground for half a stride and slides back 2 × stride (`foot`). A world scrolling at exactly this
64
+ * speed × the character's scale × the animation's speed keeps the feet put — no skating.
65
+ */
66
+ declare const GAIT_GROUND_SPEED: Readonly<Record<string, number>>;
67
+
68
+ /** The attack for what the weapon hand holds: a ranged weapon or a staff has its own (ranged.ts — a bow
69
+ * drawn and loosed, a crossbow, a pistol, a musket, a burst, a cast); otherwise bare hands punch, a
70
+ * thrusting weapon stabs, anything else — swords, axes, maces, clubs — swings. */
71
+ declare function heroAttack(weapon: string | null): string;
72
+ /** Does the hero fight face to face with this in hand — bare hands, a sword, an axe, a spear (not a
73
+ * bow, a gun or a staff)? The fight then hits only at the monster, with no shot in flight. */
74
+ declare function heroIsMelee(weapon: string | null): boolean;
75
+ /** What the hero's shot looks like in flight with this in hand: a bow's arrow, a gun's bullet; a swung
76
+ * weapon sends the crescent wave of its swing, a stabbing one a spike; a staff and bare hands — the
77
+ * game's orb. */
78
+ declare function heroShot(weapon: string | null): ShotKind;
79
+ declare const heroRig: RigDef;
80
+
81
+ declare const allPacks: readonly ArtPack[];
82
+
83
+ declare const basePack: ArtPack;
84
+
85
+ /** A whole SVG document of the art on its canvas, ×scale (rasterized once per image), drawn in a
86
+ * style: the colour of its painted part, the light on it. */
87
+ declare function svgDocument(art: ArtDef, size: {
88
+ w: number;
89
+ h: number;
90
+ }, scale?: number, style?: ArtStyle): string;
91
+
92
+ interface CharacterCanvasOptions {
93
+ rig: RigDef;
94
+ catalog: ArtCatalog;
95
+ look?: CharacterLook;
96
+ /** 1 — the rig's own facing, -1 — mirrored. */
97
+ facing?: 1 | -1;
98
+ /** "live" (default) — moving; "still" — one frame of the rig's default animation. */
99
+ mode?: "live" | "still";
100
+ /** The animation to start with (default the rig's). */
101
+ animation?: string;
102
+ /**
103
+ * How far the canvas reaches past its host, as shares of the host's size: the standing body fills
104
+ * the host, while what sticks out — a long weapon, a sword raised — is drawn over the space around
105
+ * (the canvas lets clicks through). Default: live on WebGL { side: 0.7, top: 0.5 }, still — none.
106
+ */
107
+ overflow?: {
108
+ side: number;
109
+ top: number;
110
+ };
111
+ }
112
+ declare class CharacterCanvas {
113
+ private readonly options;
114
+ readonly canvas: HTMLCanvasElement;
115
+ readonly parts: PartsManager;
116
+ readonly animator: Animator;
117
+ private readonly skeleton;
118
+ private readonly rig;
119
+ private readonly facing;
120
+ private readonly gl;
121
+ private readonly overflow;
122
+ private readonly offs;
123
+ private asked;
124
+ private skinsDirty;
125
+ private frame;
126
+ private last;
127
+ private visible;
128
+ private dead;
129
+ private stillDrawing;
130
+ private stillAgain;
131
+ constructor(host: HTMLElement, options: CharacterCanvasOptions);
132
+ /** Plays an animation — or the rig's stance of it for what is worn (a walk with a rifle). */
133
+ play(animation: string, options?: PlayOptions): boolean;
134
+ /** An animation event, "end", or "*". Returns the unsubscribe. */
135
+ on(event: string, listener: (e: AnimationEvent) => void): () => void;
136
+ setLook(look: CharacterLook): void;
137
+ destroy(): void;
138
+ private stanceOf;
139
+ private resize;
140
+ /** Where the rig's px land on the canvas: x → a·x + b, y (up) → c − a·y. */
141
+ private view;
142
+ private update;
143
+ /** One frame on a 2D canvas (still, or no WebGL); a change while drawing draws again after. */
144
+ private drawStill;
145
+ }
146
+
147
+ declare const RIG2D_RECIPE_LIMITS: {
148
+ /** Своих картинок на героя. */
149
+ readonly art: 16;
150
+ /** Символов SVG в одной картинке. */
151
+ readonly svgChars: 12000;
152
+ readonly name: 40;
153
+ readonly description: 300;
154
+ };
155
+ interface Rig2dRecipe {
156
+ name: string;
157
+ description: string;
158
+ look: CharacterLook;
159
+ /** Путь картинки → свой рисунок. */
160
+ art: Record<string, ArtDef>;
161
+ }
162
+ type Rig2dRecipeResult = {
163
+ ok: true;
164
+ recipe: Rig2dRecipe;
165
+ warnings: string[];
166
+ } | {
167
+ ok: false;
168
+ error: string;
169
+ };
170
+ /** Оставить в SVG только рисование: без скриптов, ссылок, событий, внешних ресурсов. */
171
+ declare function sanitizeSvg(svg: string): string | null;
172
+ /**
173
+ * Рецепт из ответа модели (строка или уже разобранный объект). Детали, которых нет у рига, и
174
+ * картинки чужих путей отбрасываются с предупреждением — герой всё равно собирается.
175
+ */
176
+ declare function parseRig2dRecipe(input: unknown, rig: RigDef): Rig2dRecipeResult;
177
+ /** Каталог героя: стандартные пакеты + его свои картинки поверх. */
178
+ declare function catalogFor(recipe: Rig2dRecipe, base: readonly ArtPack[]): ArtCatalog;
179
+ /**
180
+ * Что знает модель, когда пишет рецепт: типы деталей, их имена, цели цвета и холсты картинок
181
+ * (для своих рисунков). Сжато — уходит переменной шаблона промпта фичи.
182
+ */
183
+ declare function rig2dRecipeBrief(rig: RigDef): string;
184
+ /** Картинки, которые надевает деталь (для подсказки модели, какой путь перерисовать). */
185
+ declare function picturesOf(rig: RigDef, skin: string): string[];
186
+
187
+ /** Каталог всех пакетов рисунка; `extra` — пакеты игры или проекта поверх стандартных. */
188
+ declare function createCatalog(extra?: readonly ArtPack[]): ArtCatalog;
189
+
190
+ export { AnimationEvent, Animator, ArtCatalog, ArtDef, ArtPack, Attachment, CharacterCanvas, type CharacterCanvasOptions, CharacterLook, GAIT_GROUND_SPEED, HERO_ANIMATIONS, PartsManager, PlayOptions, RANGED_ANIMATIONS, RIG2D_RECIPE_LIMITS, type Rig2dRecipe, type Rig2dRecipeResult, RigDef, type ShotKind, Skeleton, Slot, allPacks, basePack, catalogFor, createCatalog, heroAttack, heroIsMelee, heroRig, heroShot, parseRig2dRecipe, picturesOf, rig2dRecipeBrief, sanitizeSvg, svgDocument, worldGeometry };
@@ -0,0 +1,190 @@
1
+ import { S as Skeleton, d as Slot, e as Attachment, R as RigDef, f as ArtPack, g as ArtDef, h as ArtStyle, P as PartsManager, a as Animator, A as ArtCatalog, C as CharacterLook, b as PlayOptions, c as AnimationEvent } from '../PartsManager-CAVBKvp6.js';
2
+ export { i as Animation, j as ArtId, B as BlinkOptions, k as Bone, l as BoneId, m as Color, n as ColorTargetDef, o as ColorTargetId, E as EditorGroup, p as ExpressionsDef, H as Hex, L as LOOK_VERSION, q as PartTypeDef, r as PartTypeId, s as PartsChange, t as PartsRule, u as Rng, v as RuleView, w as SkeletonData, x as Skin, W as WHITE, y as bothHands, z as colorOf, D as defineRig, F as hexToNumber, G as imageSizes, I as mergeLooks, J as numberToHex, K as parseLook, M as pick, N as readSkeletonData, O as seedOf, Q as seededRandom, T as skinImages, U as swapUnder } from '../PartsManager-CAVBKvp6.js';
3
+ export { H as HERO_PRESETS, L as LookPreset, P as PictureArt, T as ThumbnailBackdrop, a as ThumbnailRequest, b as Thumbnailer, c as createThumbnailer, v as vectorPictures } from '../thumbnail-Bp-jK70T.js';
4
+ import '../contract-DhZuKNIf.js';
5
+
6
+ interface Geometry {
7
+ /** x, y per vertex, world space. */
8
+ positions: Float32Array;
9
+ uvs: Float32Array;
10
+ triangles: Uint16Array;
11
+ }
12
+ /** Writes the attachment's world vertices into `out` (resized as needed); returns the geometry. */
13
+ declare function worldGeometry(sk: Skeleton, slot: Slot, attachment: Attachment, out: Float32Array | null): Geometry;
14
+
15
+ declare const RANGED_ANIMATIONS: {
16
+ /** A staff: raised high, then thrust at the enemy — the spell leaves at its point. */
17
+ readonly cast: "Cast";
18
+ readonly bow: "ShootBow";
19
+ readonly crossbow: "ShootCrossbow";
20
+ readonly pistol: "ShootPistol";
21
+ readonly musket: "ShootMusket";
22
+ /** A burst: three kicks of the gun (one shot event — the game shoots once per attack). */
23
+ readonly burst: "ShootBurst";
24
+ };
25
+ /** What a hero's shot looks like in flight: an arrow, a crossbow bolt, a bullet; for a melee weapon
26
+ * (the idle fight is ranged) the wave of its blow — a crescent from a swing, a spike from a stab; the
27
+ * game's own glowing orb for magic and bare hands. */
28
+ type ShotKind = "arrow" | "bolt" | "bullet" | "slash" | "thrust" | "orb";
29
+
30
+ declare const HERO_ANIMATIONS: {
31
+ readonly idle: "Idle";
32
+ /** Idle now and then: a look up and around. */
33
+ readonly look: "Look";
34
+ readonly walk: "Walk";
35
+ readonly run: "Run";
36
+ /** A run with a weapon held ready. */
37
+ readonly runArmed: "RunArmed";
38
+ /** Bare hands. */
39
+ readonly punch: "Punch";
40
+ /** Spears, daggers. */
41
+ readonly stab: "Stab";
42
+ /** Swords, axes, maces, clubs. */
43
+ readonly swing: "Swing";
44
+ readonly hit: "Hit";
45
+ readonly die: "Die";
46
+ /** Talking: the near hand gestures, the head nods. */
47
+ readonly talk: "Talk";
48
+ /** A start back with the hands up (once, then held). */
49
+ readonly surprised: "Surprised";
50
+ /** Pointing forward with the far hand (once, then held). */
51
+ readonly point: "Point";
52
+ /** Waving with the near hand. */
53
+ readonly wave: "Wave";
54
+ readonly jump: "Jump";
55
+ readonly dance: "Dance";
56
+ /** Sitting down (once, then held). */
57
+ readonly sit: "Sit";
58
+ /** Falling over (once, then lying) — Die without its event and its face. */
59
+ readonly fall: "Fall";
60
+ };
61
+ /**
62
+ * How fast the ground passes under a planted foot at speed 1, skeleton units a second: the foot is on
63
+ * the ground for half a stride and slides back 2 × stride (`foot`). A world scrolling at exactly this
64
+ * speed × the character's scale × the animation's speed keeps the feet put — no skating.
65
+ */
66
+ declare const GAIT_GROUND_SPEED: Readonly<Record<string, number>>;
67
+
68
+ /** The attack for what the weapon hand holds: a ranged weapon or a staff has its own (ranged.ts — a bow
69
+ * drawn and loosed, a crossbow, a pistol, a musket, a burst, a cast); otherwise bare hands punch, a
70
+ * thrusting weapon stabs, anything else — swords, axes, maces, clubs — swings. */
71
+ declare function heroAttack(weapon: string | null): string;
72
+ /** Does the hero fight face to face with this in hand — bare hands, a sword, an axe, a spear (not a
73
+ * bow, a gun or a staff)? The fight then hits only at the monster, with no shot in flight. */
74
+ declare function heroIsMelee(weapon: string | null): boolean;
75
+ /** What the hero's shot looks like in flight with this in hand: a bow's arrow, a gun's bullet; a swung
76
+ * weapon sends the crescent wave of its swing, a stabbing one a spike; a staff and bare hands — the
77
+ * game's orb. */
78
+ declare function heroShot(weapon: string | null): ShotKind;
79
+ declare const heroRig: RigDef;
80
+
81
+ declare const allPacks: readonly ArtPack[];
82
+
83
+ declare const basePack: ArtPack;
84
+
85
+ /** A whole SVG document of the art on its canvas, ×scale (rasterized once per image), drawn in a
86
+ * style: the colour of its painted part, the light on it. */
87
+ declare function svgDocument(art: ArtDef, size: {
88
+ w: number;
89
+ h: number;
90
+ }, scale?: number, style?: ArtStyle): string;
91
+
92
+ interface CharacterCanvasOptions {
93
+ rig: RigDef;
94
+ catalog: ArtCatalog;
95
+ look?: CharacterLook;
96
+ /** 1 — the rig's own facing, -1 — mirrored. */
97
+ facing?: 1 | -1;
98
+ /** "live" (default) — moving; "still" — one frame of the rig's default animation. */
99
+ mode?: "live" | "still";
100
+ /** The animation to start with (default the rig's). */
101
+ animation?: string;
102
+ /**
103
+ * How far the canvas reaches past its host, as shares of the host's size: the standing body fills
104
+ * the host, while what sticks out — a long weapon, a sword raised — is drawn over the space around
105
+ * (the canvas lets clicks through). Default: live on WebGL { side: 0.7, top: 0.5 }, still — none.
106
+ */
107
+ overflow?: {
108
+ side: number;
109
+ top: number;
110
+ };
111
+ }
112
+ declare class CharacterCanvas {
113
+ private readonly options;
114
+ readonly canvas: HTMLCanvasElement;
115
+ readonly parts: PartsManager;
116
+ readonly animator: Animator;
117
+ private readonly skeleton;
118
+ private readonly rig;
119
+ private readonly facing;
120
+ private readonly gl;
121
+ private readonly overflow;
122
+ private readonly offs;
123
+ private asked;
124
+ private skinsDirty;
125
+ private frame;
126
+ private last;
127
+ private visible;
128
+ private dead;
129
+ private stillDrawing;
130
+ private stillAgain;
131
+ constructor(host: HTMLElement, options: CharacterCanvasOptions);
132
+ /** Plays an animation — or the rig's stance of it for what is worn (a walk with a rifle). */
133
+ play(animation: string, options?: PlayOptions): boolean;
134
+ /** An animation event, "end", or "*". Returns the unsubscribe. */
135
+ on(event: string, listener: (e: AnimationEvent) => void): () => void;
136
+ setLook(look: CharacterLook): void;
137
+ destroy(): void;
138
+ private stanceOf;
139
+ private resize;
140
+ /** Where the rig's px land on the canvas: x → a·x + b, y (up) → c − a·y. */
141
+ private view;
142
+ private update;
143
+ /** One frame on a 2D canvas (still, or no WebGL); a change while drawing draws again after. */
144
+ private drawStill;
145
+ }
146
+
147
+ declare const RIG2D_RECIPE_LIMITS: {
148
+ /** Своих картинок на героя. */
149
+ readonly art: 16;
150
+ /** Символов SVG в одной картинке. */
151
+ readonly svgChars: 12000;
152
+ readonly name: 40;
153
+ readonly description: 300;
154
+ };
155
+ interface Rig2dRecipe {
156
+ name: string;
157
+ description: string;
158
+ look: CharacterLook;
159
+ /** Путь картинки → свой рисунок. */
160
+ art: Record<string, ArtDef>;
161
+ }
162
+ type Rig2dRecipeResult = {
163
+ ok: true;
164
+ recipe: Rig2dRecipe;
165
+ warnings: string[];
166
+ } | {
167
+ ok: false;
168
+ error: string;
169
+ };
170
+ /** Оставить в SVG только рисование: без скриптов, ссылок, событий, внешних ресурсов. */
171
+ declare function sanitizeSvg(svg: string): string | null;
172
+ /**
173
+ * Рецепт из ответа модели (строка или уже разобранный объект). Детали, которых нет у рига, и
174
+ * картинки чужих путей отбрасываются с предупреждением — герой всё равно собирается.
175
+ */
176
+ declare function parseRig2dRecipe(input: unknown, rig: RigDef): Rig2dRecipeResult;
177
+ /** Каталог героя: стандартные пакеты + его свои картинки поверх. */
178
+ declare function catalogFor(recipe: Rig2dRecipe, base: readonly ArtPack[]): ArtCatalog;
179
+ /**
180
+ * Что знает модель, когда пишет рецепт: типы деталей, их имена, цели цвета и холсты картинок
181
+ * (для своих рисунков). Сжато — уходит переменной шаблона промпта фичи.
182
+ */
183
+ declare function rig2dRecipeBrief(rig: RigDef): string;
184
+ /** Картинки, которые надевает деталь (для подсказки модели, какой путь перерисовать). */
185
+ declare function picturesOf(rig: RigDef, skin: string): string[];
186
+
187
+ /** Каталог всех пакетов рисунка; `extra` — пакеты игры или проекта поверх стандартных. */
188
+ declare function createCatalog(extra?: readonly ArtPack[]): ArtCatalog;
189
+
190
+ export { AnimationEvent, Animator, ArtCatalog, ArtDef, ArtPack, Attachment, CharacterCanvas, type CharacterCanvasOptions, CharacterLook, GAIT_GROUND_SPEED, HERO_ANIMATIONS, PartsManager, PlayOptions, RANGED_ANIMATIONS, RIG2D_RECIPE_LIMITS, type Rig2dRecipe, type Rig2dRecipeResult, RigDef, type ShotKind, Skeleton, Slot, allPacks, basePack, catalogFor, createCatalog, heroAttack, heroIsMelee, heroRig, heroShot, parseRig2dRecipe, picturesOf, rig2dRecipeBrief, sanitizeSvg, svgDocument, worldGeometry };