@almadar/ui 5.72.0 → 5.73.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/dist/avl/index.cjs +402 -362
- package/dist/avl/index.js +402 -362
- package/dist/components/game/atoms/ActionButton.d.ts +3 -3
- package/dist/components/game/atoms/ChoiceButton.d.ts +3 -3
- package/dist/components/game/atoms/ComboCounter.d.ts +3 -3
- package/dist/components/game/atoms/ControlButton.d.ts +3 -3
- package/dist/components/game/atoms/DamageNumber.d.ts +3 -3
- package/dist/components/game/atoms/DialogueBubble.d.ts +3 -3
- package/dist/components/game/atoms/ItemSlot.d.ts +3 -3
- package/dist/components/game/atoms/ResourceCounter.d.ts +3 -3
- package/dist/components/game/atoms/ScoreDisplay.d.ts +3 -3
- package/dist/components/game/atoms/Sprite.d.ts +3 -20
- package/dist/components/game/atoms/StateIndicator.d.ts +2 -2
- package/dist/components/game/atoms/StatusEffect.d.ts +3 -3
- package/dist/components/game/atoms/TurnIndicator.d.ts +3 -3
- package/dist/components/game/atoms/WaypointMarker.d.ts +3 -3
- package/dist/components/game/molecules/CardHand.d.ts +2 -2
- package/dist/components/game/molecules/DialogueBox.d.ts +3 -3
- package/dist/components/game/molecules/EnemyPlate.d.ts +3 -3
- package/dist/components/game/molecules/GameCanvas2D.d.ts +3 -3
- package/dist/components/game/molecules/HealthPanel.d.ts +3 -3
- package/dist/components/game/molecules/IsometricCanvas.d.ts +8 -12
- package/dist/components/game/molecules/PowerupSlots.d.ts +3 -3
- package/dist/components/game/molecules/StatBadge.d.ts +5 -5
- package/dist/components/game/molecules/TurnPanel.d.ts +3 -3
- package/dist/components/game/molecules/three/index.cjs +51 -28
- package/dist/components/game/molecules/three/index.js +51 -28
- package/dist/components/game/molecules/useUnitSpriteAtlas.d.ts +3 -10
- package/dist/components/game/organisms/BattleBoard.d.ts +5 -6
- package/dist/components/game/organisms/CardBattlerBoard.d.ts +3 -4
- package/dist/components/game/organisms/CastleBoard.d.ts +5 -6
- package/dist/components/game/organisms/CityBuilderBoard.d.ts +6 -7
- package/dist/components/game/organisms/FishingBoard.d.ts +4 -6
- package/dist/components/game/organisms/PlatformerBoard.d.ts +5 -5
- package/dist/components/game/organisms/RoguelikeBoard.d.ts +4 -5
- package/dist/components/game/organisms/TopDownShooterBoard.d.ts +5 -6
- package/dist/components/game/organisms/TowerDefenseBoard.d.ts +5 -6
- package/dist/components/game/organisms/VisualNovelBoard.d.ts +4 -5
- package/dist/components/game/organisms/WorldMapBoard.d.ts +5 -6
- package/dist/components/game/organisms/types/effects.d.ts +7 -8
- package/dist/components/game/organisms/types/isometric.d.ts +8 -8
- package/dist/components/game/organisms/types/spriteAnimation.d.ts +3 -4
- package/dist/components/game/organisms/utils/makeAsset.d.ts +5 -0
- package/dist/components/game/templates/PlatformerTemplate.d.ts +5 -4
- package/dist/components/game/templates/game3dAssetManifest.d.ts +6 -8
- package/dist/components/index.cjs +417 -363
- package/dist/components/index.js +417 -363
- package/dist/providers/index.cjs +402 -362
- package/dist/providers/index.js +402 -362
- package/dist/runtime/index.cjs +402 -362
- package/dist/runtime/index.js +402 -362
- package/package.json +2 -2
|
@@ -8171,7 +8171,7 @@ function ActionButton({
|
|
|
8171
8171
|
assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8172
8172
|
"img",
|
|
8173
8173
|
{
|
|
8174
|
-
src: assetUrl,
|
|
8174
|
+
src: assetUrl.url,
|
|
8175
8175
|
alt: "",
|
|
8176
8176
|
width: 16,
|
|
8177
8177
|
height: 16,
|
|
@@ -8215,7 +8215,11 @@ var init_ActionButton = __esm({
|
|
|
8215
8215
|
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary-hover border-border",
|
|
8216
8216
|
danger: "bg-error text-error-foreground hover:bg-error/90 border-error"
|
|
8217
8217
|
};
|
|
8218
|
-
DEFAULT_ASSET_URL =
|
|
8218
|
+
DEFAULT_ASSET_URL = {
|
|
8219
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/particles/slash_01.png",
|
|
8220
|
+
role: "effect",
|
|
8221
|
+
category: "effect"
|
|
8222
|
+
};
|
|
8219
8223
|
ActionButton.displayName = "ActionButton";
|
|
8220
8224
|
}
|
|
8221
8225
|
});
|
|
@@ -8291,7 +8295,7 @@ function ControlButton({
|
|
|
8291
8295
|
children: assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8292
8296
|
"img",
|
|
8293
8297
|
{
|
|
8294
|
-
src: assetUrl,
|
|
8298
|
+
src: assetUrl.url,
|
|
8295
8299
|
alt: "",
|
|
8296
8300
|
width: 24,
|
|
8297
8301
|
height: 24,
|
|
@@ -8331,7 +8335,11 @@ var init_ControlButton = __esm({
|
|
|
8331
8335
|
secondary: "bg-secondary text-secondary-foreground border-border hover:bg-secondary-hover",
|
|
8332
8336
|
ghost: "bg-transparent text-foreground border-border hover:bg-muted"
|
|
8333
8337
|
};
|
|
8334
|
-
DEFAULT_ASSET_URL2 =
|
|
8338
|
+
DEFAULT_ASSET_URL2 = {
|
|
8339
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/particles/circle_01.png",
|
|
8340
|
+
role: "effect",
|
|
8341
|
+
category: "effect"
|
|
8342
|
+
};
|
|
8335
8343
|
ControlButton.displayName = "ControlButton";
|
|
8336
8344
|
}
|
|
8337
8345
|
});
|
|
@@ -9900,12 +9908,7 @@ var init_spriteAnimation = __esm({
|
|
|
9900
9908
|
}
|
|
9901
9909
|
});
|
|
9902
9910
|
function unitAtlasUrl(unit) {
|
|
9903
|
-
|
|
9904
|
-
const sprite = unit.sprite;
|
|
9905
|
-
if (!sprite) return null;
|
|
9906
|
-
const match = /^(.*-sprite-sheet)(?:-(?:se|sw))?(?:-v\d+)?\.png$/.exec(sprite);
|
|
9907
|
-
if (!match) return null;
|
|
9908
|
-
return `${match[1]}.json`;
|
|
9911
|
+
return unit.spriteSheet?.url ?? null;
|
|
9909
9912
|
}
|
|
9910
9913
|
function resolveSheetUrl(atlasUrl, relativeSheetPath) {
|
|
9911
9914
|
try {
|
|
@@ -10101,7 +10104,6 @@ function IsometricCanvas({
|
|
|
10101
10104
|
// Tuning
|
|
10102
10105
|
diamondTopY: diamondTopYProp,
|
|
10103
10106
|
// Remote asset loading
|
|
10104
|
-
assetBaseUrl,
|
|
10105
10107
|
assetManifest
|
|
10106
10108
|
}) {
|
|
10107
10109
|
const tilesProp = Array.isArray(_tilesPropRaw) ? _tilesPropRaw : [];
|
|
@@ -10183,54 +10185,48 @@ function IsometricCanvas({
|
|
|
10183
10185
|
const attackTargetSet = React85.useMemo(() => {
|
|
10184
10186
|
return new Set(attackTargets.map((p2) => `${p2.x},${p2.y}`));
|
|
10185
10187
|
}, [attackTargets]);
|
|
10186
|
-
const resolveManifestUrl7 = React85.useCallback((relativePath) => {
|
|
10187
|
-
if (!relativePath) return void 0;
|
|
10188
|
-
if (assetBaseUrl) return `${assetBaseUrl.replace(/\/$/, "")}${relativePath.startsWith("/") ? "" : "/"}${relativePath}`;
|
|
10189
|
-
return relativePath;
|
|
10190
|
-
}, [assetBaseUrl]);
|
|
10191
10188
|
const spriteUrls = React85.useMemo(() => {
|
|
10192
10189
|
const urls = [];
|
|
10193
10190
|
for (const tile of sortedTiles) {
|
|
10194
|
-
if (tile.terrainSprite) urls.push(tile.terrainSprite);
|
|
10191
|
+
if (tile.terrainSprite) urls.push(tile.terrainSprite.url);
|
|
10195
10192
|
else if (getTerrainSprite) {
|
|
10196
10193
|
const url = getTerrainSprite(tile.terrain ?? "");
|
|
10197
10194
|
if (url) urls.push(url);
|
|
10198
10195
|
} else {
|
|
10199
|
-
const url =
|
|
10196
|
+
const url = assetManifest?.terrains?.[tile.terrain ?? ""]?.url;
|
|
10200
10197
|
if (url) urls.push(url);
|
|
10201
10198
|
}
|
|
10202
10199
|
}
|
|
10203
10200
|
for (const feature of features) {
|
|
10204
|
-
if (feature.sprite) urls.push(feature.sprite);
|
|
10201
|
+
if (feature.sprite) urls.push(feature.sprite.url);
|
|
10205
10202
|
else if (getFeatureSprite) {
|
|
10206
10203
|
const url = getFeatureSprite(feature.type);
|
|
10207
10204
|
if (url) urls.push(url);
|
|
10208
10205
|
} else {
|
|
10209
|
-
const url =
|
|
10206
|
+
const url = assetManifest?.features?.[feature.type]?.url;
|
|
10210
10207
|
if (url) urls.push(url);
|
|
10211
10208
|
}
|
|
10212
10209
|
}
|
|
10213
10210
|
for (const unit of units) {
|
|
10214
|
-
if (unit.sprite) urls.push(unit.sprite);
|
|
10211
|
+
if (unit.sprite) urls.push(unit.sprite.url);
|
|
10215
10212
|
else if (getUnitSprite) {
|
|
10216
10213
|
const url = getUnitSprite(unit);
|
|
10217
10214
|
if (url) urls.push(url);
|
|
10218
10215
|
} else if (unit.unitType) {
|
|
10219
|
-
const url =
|
|
10216
|
+
const url = assetManifest?.units?.[unit.unitType]?.url;
|
|
10220
10217
|
if (url) urls.push(url);
|
|
10221
10218
|
}
|
|
10222
10219
|
}
|
|
10223
10220
|
if (assetManifest?.effects) {
|
|
10224
|
-
for (const
|
|
10225
|
-
|
|
10226
|
-
if (url) urls.push(url);
|
|
10221
|
+
for (const asset of Object.values(assetManifest.effects)) {
|
|
10222
|
+
if (asset.url) urls.push(asset.url);
|
|
10227
10223
|
}
|
|
10228
10224
|
}
|
|
10229
10225
|
if (effectSpriteUrls) urls.push(...effectSpriteUrls);
|
|
10230
10226
|
if (atlasSheetUrls.length) urls.push(...atlasSheetUrls);
|
|
10231
10227
|
if (backgroundImage) urls.push(backgroundImage);
|
|
10232
10228
|
return [...new Set(urls.filter(Boolean))];
|
|
10233
|
-
}, [sortedTiles, features, units, getTerrainSprite, getFeatureSprite, getUnitSprite, effectSpriteUrls, atlasSheetUrls, backgroundImage, assetManifest
|
|
10229
|
+
}, [sortedTiles, features, units, getTerrainSprite, getFeatureSprite, getUnitSprite, effectSpriteUrls, atlasSheetUrls, backgroundImage, assetManifest]);
|
|
10234
10230
|
const { getImage, pendingCount: _imagePendingCount } = useImageCache(spriteUrls);
|
|
10235
10231
|
React85.useEffect(() => {
|
|
10236
10232
|
if (typeof window === "undefined") return;
|
|
@@ -10255,14 +10251,14 @@ function IsometricCanvas({
|
|
|
10255
10251
|
lerpToTarget
|
|
10256
10252
|
} = useCamera();
|
|
10257
10253
|
const resolveTerrainSpriteUrl = React85.useCallback((tile) => {
|
|
10258
|
-
return tile.terrainSprite || getTerrainSprite?.(tile.terrain ?? "") ||
|
|
10259
|
-
}, [getTerrainSprite, assetManifest
|
|
10254
|
+
return tile.terrainSprite?.url || getTerrainSprite?.(tile.terrain ?? "") || assetManifest?.terrains?.[tile.terrain ?? ""]?.url;
|
|
10255
|
+
}, [getTerrainSprite, assetManifest]);
|
|
10260
10256
|
const resolveFeatureSpriteUrl = React85.useCallback((featureType) => {
|
|
10261
|
-
return getFeatureSprite?.(featureType) ||
|
|
10262
|
-
}, [getFeatureSprite, assetManifest
|
|
10257
|
+
return getFeatureSprite?.(featureType) || assetManifest?.features?.[featureType]?.url;
|
|
10258
|
+
}, [getFeatureSprite, assetManifest]);
|
|
10263
10259
|
const resolveUnitSpriteUrl = React85.useCallback((unit) => {
|
|
10264
|
-
return unit.sprite || getUnitSprite?.(unit) || (unit.unitType ?
|
|
10265
|
-
}, [getUnitSprite, assetManifest
|
|
10260
|
+
return unit.sprite?.url || getUnitSprite?.(unit) || (unit.unitType ? assetManifest?.units?.[unit.unitType]?.url : void 0);
|
|
10261
|
+
}, [getUnitSprite, assetManifest]);
|
|
10266
10262
|
const miniMapTiles = React85.useMemo(() => {
|
|
10267
10263
|
if (!showMinimap) return [];
|
|
10268
10264
|
return sortedTiles.map((t2) => ({
|
|
@@ -10409,7 +10405,7 @@ function IsometricCanvas({
|
|
|
10409
10405
|
if (pos.x + scaledTileWidth < visLeft || pos.x > visRight || pos.y + scaledTileHeight < visTop || pos.y > visBottom) {
|
|
10410
10406
|
continue;
|
|
10411
10407
|
}
|
|
10412
|
-
const spriteUrl = feature.sprite || resolveFeatureSpriteUrl(feature.type);
|
|
10408
|
+
const spriteUrl = feature.sprite?.url || resolveFeatureSpriteUrl(feature.type);
|
|
10413
10409
|
const img = spriteUrl ? getImage(spriteUrl) : null;
|
|
10414
10410
|
const centerX = pos.x + scaledTileWidth / 2;
|
|
10415
10411
|
const featureGroundY = pos.y + scaledDiamondTopY + scaledFloorHeight * 0.5;
|
|
@@ -10458,12 +10454,12 @@ function IsometricCanvas({
|
|
|
10458
10454
|
const img = unitSpriteUrl ? getImage(unitSpriteUrl) : null;
|
|
10459
10455
|
const unitDrawH = scaledFloorHeight * spriteHeightRatio * unitScale;
|
|
10460
10456
|
const maxUnitW = scaledTileWidth * spriteMaxWidthRatio * unitScale;
|
|
10457
|
+
const unitIsSheet = unit.sprite?.dimension === "2d" && (unit.sprite?.animations?.length ?? 0) > 0;
|
|
10461
10458
|
const SHEET_ROWS = 5;
|
|
10462
10459
|
const sheetFrameW = img ? img.naturalWidth / exports.SHEET_COLUMNS : 0;
|
|
10463
10460
|
const sheetFrameH = img ? img.naturalHeight / SHEET_ROWS : 0;
|
|
10464
|
-
const
|
|
10465
|
-
const
|
|
10466
|
-
const frameH = imgIsSheet ? sheetFrameH : img?.naturalHeight ?? 1;
|
|
10461
|
+
const frameW = unitIsSheet ? sheetFrameW : img?.naturalWidth ?? 1;
|
|
10462
|
+
const frameH = unitIsSheet ? sheetFrameH : img?.naturalHeight ?? 1;
|
|
10467
10463
|
const ar = frameW / (frameH || 1);
|
|
10468
10464
|
let drawH = unitDrawH;
|
|
10469
10465
|
let drawW = unitDrawH * ar;
|
|
@@ -10478,7 +10474,7 @@ function IsometricCanvas({
|
|
|
10478
10474
|
ctx.save();
|
|
10479
10475
|
ctx.globalAlpha = 0.25;
|
|
10480
10476
|
if (img) {
|
|
10481
|
-
if (
|
|
10477
|
+
if (unitIsSheet) {
|
|
10482
10478
|
ctx.drawImage(img, 0, 0, sheetFrameW, sheetFrameH, ghostCenterX - drawW / 2, ghostGroundY - drawH, drawW, drawH);
|
|
10483
10479
|
} else {
|
|
10484
10480
|
ctx.drawImage(img, ghostCenterX - drawW / 2, ghostGroundY - drawH, drawW, drawH);
|
|
@@ -10526,7 +10522,7 @@ function IsometricCanvas({
|
|
|
10526
10522
|
} else if (img) {
|
|
10527
10523
|
const spriteY = groundY - drawH - breatheOffset;
|
|
10528
10524
|
const drawUnit = (x) => {
|
|
10529
|
-
if (
|
|
10525
|
+
if (unitIsSheet) {
|
|
10530
10526
|
ctx.drawImage(img, 0, 0, sheetFrameW, sheetFrameH, x, spriteY, drawW, drawH);
|
|
10531
10527
|
} else {
|
|
10532
10528
|
ctx.drawImage(img, x, spriteY, drawW, drawH);
|
|
@@ -10553,7 +10549,7 @@ function IsometricCanvas({
|
|
|
10553
10549
|
}
|
|
10554
10550
|
}
|
|
10555
10551
|
for (const fx of effects) {
|
|
10556
|
-
const spriteUrl =
|
|
10552
|
+
const spriteUrl = assetManifest?.effects?.[fx.key]?.url;
|
|
10557
10553
|
if (!spriteUrl) continue;
|
|
10558
10554
|
const img = getImage(spriteUrl);
|
|
10559
10555
|
if (!img) continue;
|
|
@@ -10597,7 +10593,6 @@ function IsometricCanvas({
|
|
|
10597
10593
|
backgroundImage,
|
|
10598
10594
|
cameraRef,
|
|
10599
10595
|
unitScale,
|
|
10600
|
-
resolveManifestUrl7,
|
|
10601
10596
|
assetManifest
|
|
10602
10597
|
]);
|
|
10603
10598
|
React85.useEffect(() => {
|
|
@@ -10875,6 +10870,42 @@ var init_boardEntity = __esm({
|
|
|
10875
10870
|
"components/game/organisms/boardEntity.ts"() {
|
|
10876
10871
|
}
|
|
10877
10872
|
});
|
|
10873
|
+
|
|
10874
|
+
// components/game/organisms/utils/makeAsset.ts
|
|
10875
|
+
function makeAsset(url, role, overrides = {}) {
|
|
10876
|
+
const defaults = ROLE_DEFAULTS[role] ?? { dimension: "2d", animations: ["static"], aspect: "1:1" };
|
|
10877
|
+
return {
|
|
10878
|
+
url,
|
|
10879
|
+
role,
|
|
10880
|
+
category: url.split("/").pop()?.replace(/\.[^.]+$/, "") ?? role,
|
|
10881
|
+
...defaults,
|
|
10882
|
+
...overrides
|
|
10883
|
+
};
|
|
10884
|
+
}
|
|
10885
|
+
function makeAssetMap(record, role, overrides = {}) {
|
|
10886
|
+
const result = {};
|
|
10887
|
+
for (const [key, url] of Object.entries(record)) {
|
|
10888
|
+
result[key] = makeAsset(url, role, overrides);
|
|
10889
|
+
}
|
|
10890
|
+
return result;
|
|
10891
|
+
}
|
|
10892
|
+
var ROLE_DEFAULTS;
|
|
10893
|
+
var init_makeAsset = __esm({
|
|
10894
|
+
"components/game/organisms/utils/makeAsset.ts"() {
|
|
10895
|
+
ROLE_DEFAULTS = {
|
|
10896
|
+
tile: { dimension: "2d", animations: ["static"], aspect: "1:1" },
|
|
10897
|
+
decoration: { dimension: "2d", animations: ["static"], aspect: "1:1" },
|
|
10898
|
+
effect: { dimension: "2d", animations: ["static"], aspect: "1:1" },
|
|
10899
|
+
item: { dimension: "2d", animations: ["static"], aspect: "5:7" },
|
|
10900
|
+
player: { dimension: "2d", animations: ["idle", "walk", "attack", "hit", "death"], aspect: "1:1" },
|
|
10901
|
+
enemy: { dimension: "2d", animations: ["idle", "walk", "attack", "hit", "death"], aspect: "1:1" },
|
|
10902
|
+
npc: { dimension: "2d", animations: ["idle", "walk", "attack", "hit", "death"], aspect: "1:1" },
|
|
10903
|
+
projectile: { dimension: "2d", animations: ["static"], aspect: "1:1" },
|
|
10904
|
+
vehicle: { dimension: "2d", animations: ["idle", "walk"], aspect: "1:1" },
|
|
10905
|
+
ui: { dimension: "2d", animations: ["static"], aspect: "1:1" }
|
|
10906
|
+
};
|
|
10907
|
+
}
|
|
10908
|
+
});
|
|
10878
10909
|
function buildDefaultBattleTiles() {
|
|
10879
10910
|
const tiles = [];
|
|
10880
10911
|
for (let y = 0; y < BATTLE_GRID_H; y++) {
|
|
@@ -10933,14 +10964,14 @@ function BattleBoard({
|
|
|
10933
10964
|
if (o === null || typeof o.x !== "number" || typeof o.y !== "number") return [];
|
|
10934
10965
|
const tile = { x: o.x, y: o.y };
|
|
10935
10966
|
if (typeof o.terrain === "string") tile.terrain = o.terrain;
|
|
10936
|
-
if (typeof o.terrainSprite === "string") tile.terrainSprite = o.terrainSprite;
|
|
10967
|
+
if (typeof o.terrainSprite === "string") tile.terrainSprite = makeAsset(o.terrainSprite, "tile");
|
|
10937
10968
|
if (typeof o.passable === "boolean") tile.passable = o.passable;
|
|
10938
10969
|
if (typeof o.movementCost === "number") tile.movementCost = o.movementCost;
|
|
10939
10970
|
if (typeof o.elevation === "number") tile.elevation = o.elevation;
|
|
10940
10971
|
if (typeof o.type === "string") tile.type = o.type;
|
|
10941
10972
|
if (typeof o.tileType === "string") tile.tileType = o.tileType;
|
|
10942
10973
|
if (typeof o.id === "string") tile.id = o.id;
|
|
10943
|
-
if (typeof o.modelUrl === "string") tile.modelUrl = o.modelUrl;
|
|
10974
|
+
if (typeof o.modelUrl === "string") tile.modelUrl = makeAsset(o.modelUrl, "decoration", { dimension: "3d" });
|
|
10944
10975
|
return [tile];
|
|
10945
10976
|
}) : []);
|
|
10946
10977
|
const tiles = rawTiles.length === 0 ? DEFAULT_BATTLE_TILES : rawTiles;
|
|
@@ -10949,10 +10980,10 @@ function BattleBoard({
|
|
|
10949
10980
|
if (o === null || typeof o.type !== "string" || typeof o.x !== "number" || typeof o.y !== "number") return [];
|
|
10950
10981
|
const feat = { type: o.type, x: o.x, y: o.y };
|
|
10951
10982
|
if (typeof o.id === "string") feat.id = o.id;
|
|
10952
|
-
if (typeof o.sprite === "string") feat.sprite = o.sprite;
|
|
10983
|
+
if (typeof o.sprite === "string") feat.sprite = makeAsset(o.sprite, "decoration");
|
|
10953
10984
|
if (typeof o.color === "string") feat.color = o.color;
|
|
10954
10985
|
if (typeof o.elevation === "number") feat.elevation = o.elevation;
|
|
10955
|
-
if (typeof o.assetUrl === "string") feat.assetUrl = o.assetUrl;
|
|
10986
|
+
if (typeof o.assetUrl === "string") feat.assetUrl = makeAsset(o.assetUrl, "decoration", { dimension: "3d" });
|
|
10956
10987
|
return [feat];
|
|
10957
10988
|
}) : []);
|
|
10958
10989
|
const boardWidth = num(board.gridWidth ?? board.boardWidth, BATTLE_GRID_W);
|
|
@@ -11068,7 +11099,7 @@ function BattleBoard({
|
|
|
11068
11099
|
maxHealth: num(unit.maxHealth),
|
|
11069
11100
|
unitType: unit.unitType == null ? void 0 : str(unit.unitType),
|
|
11070
11101
|
heroId: unit.heroId == null ? void 0 : str(unit.heroId),
|
|
11071
|
-
sprite: unit.sprite == null ? void 0 : str(unit.sprite),
|
|
11102
|
+
sprite: unit.sprite == null ? void 0 : makeAsset(str(unit.sprite), "npc"),
|
|
11072
11103
|
traits: unitTraits?.map((tr) => ({
|
|
11073
11104
|
name: tr.name,
|
|
11074
11105
|
currentState: tr.currentState,
|
|
@@ -11218,7 +11249,6 @@ function BattleBoard({
|
|
|
11218
11249
|
onTileHover: (x, y) => setHoveredTile({ x, y }),
|
|
11219
11250
|
onTileLeave: () => setHoveredTile(null),
|
|
11220
11251
|
scale,
|
|
11221
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
11222
11252
|
assetManifest,
|
|
11223
11253
|
backgroundImage,
|
|
11224
11254
|
onDrawEffects,
|
|
@@ -11296,15 +11326,16 @@ var init_BattleBoard = __esm({
|
|
|
11296
11326
|
init_IsometricCanvas();
|
|
11297
11327
|
init_boardEntity();
|
|
11298
11328
|
init_isometric();
|
|
11329
|
+
init_makeAsset();
|
|
11299
11330
|
BATTLE_CDN = "https://almadar-kflow-assets.web.app/shared";
|
|
11300
11331
|
BATTLE_GRID_W = 16;
|
|
11301
11332
|
BATTLE_GRID_H = 16;
|
|
11302
11333
|
BATTLE_TERRAIN_SPRITES = [
|
|
11303
|
-
`${BATTLE_CDN}/isometric-dungeon/Isometric/dirt_E.png`,
|
|
11304
|
-
`${BATTLE_CDN}/isometric-dungeon/Isometric/dirtTiles_E.png`,
|
|
11305
|
-
`${BATTLE_CDN}/isometric-dungeon/Isometric/planks_E.png`,
|
|
11306
|
-
`${BATTLE_CDN}/isometric-dungeon/Isometric/stoneTile_E.png`,
|
|
11307
|
-
`${BATTLE_CDN}/isometric-dungeon/Isometric/stoneInset_E.png
|
|
11334
|
+
makeAsset(`${BATTLE_CDN}/isometric-dungeon/Isometric/dirt_E.png`, "tile"),
|
|
11335
|
+
makeAsset(`${BATTLE_CDN}/isometric-dungeon/Isometric/dirtTiles_E.png`, "tile"),
|
|
11336
|
+
makeAsset(`${BATTLE_CDN}/isometric-dungeon/Isometric/planks_E.png`, "tile"),
|
|
11337
|
+
makeAsset(`${BATTLE_CDN}/isometric-dungeon/Isometric/stoneTile_E.png`, "tile"),
|
|
11338
|
+
makeAsset(`${BATTLE_CDN}/isometric-dungeon/Isometric/stoneInset_E.png`, "tile")
|
|
11308
11339
|
];
|
|
11309
11340
|
DEFAULT_BATTLE_TILES = buildDefaultBattleTiles();
|
|
11310
11341
|
BattleBoard.displayName = "BattleBoard";
|
|
@@ -11343,61 +11374,64 @@ function BattleTemplate({
|
|
|
11343
11374
|
}
|
|
11344
11375
|
);
|
|
11345
11376
|
}
|
|
11346
|
-
var CDN, DEFAULT_BATTLE_TILES2, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
|
|
11377
|
+
var CDN, STONE, DIRT, GRASS, DEFAULT_BATTLE_TILES2, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
|
|
11347
11378
|
var init_BattleTemplate = __esm({
|
|
11348
11379
|
"components/game/templates/BattleTemplate.tsx"() {
|
|
11349
11380
|
init_BattleBoard();
|
|
11381
|
+
init_makeAsset();
|
|
11350
11382
|
CDN = "https://almadar-kflow-assets.web.app/shared";
|
|
11383
|
+
STONE = makeAsset(`${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png`, "tile");
|
|
11384
|
+
DIRT = makeAsset(`${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png`, "tile");
|
|
11385
|
+
GRASS = makeAsset(`${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png`, "tile");
|
|
11351
11386
|
DEFAULT_BATTLE_TILES2 = [
|
|
11352
|
-
{ x: 0, y: 0, terrain: "stone", passable: false, terrainSprite:
|
|
11353
|
-
{ x: 1, y: 0, terrain: "stone", passable: false, terrainSprite:
|
|
11354
|
-
{ x: 2, y: 0, terrain: "stone", passable: false, terrainSprite:
|
|
11355
|
-
{ x: 3, y: 0, terrain: "stone", passable: false, terrainSprite:
|
|
11356
|
-
{ x: 4, y: 0, terrain: "stone", passable: false, terrainSprite:
|
|
11357
|
-
{ x: 0, y: 1, terrain: "stone", passable: false, terrainSprite:
|
|
11358
|
-
{ x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite:
|
|
11359
|
-
{ x: 2, y: 1, terrain: "grass", passable: true, terrainSprite:
|
|
11360
|
-
{ x: 3, y: 1, terrain: "grass", passable: true, terrainSprite:
|
|
11361
|
-
{ x: 4, y: 1, terrain: "stone", passable: false, terrainSprite:
|
|
11362
|
-
{ x: 0, y: 2, terrain: "stone", passable: false, terrainSprite:
|
|
11363
|
-
{ x: 1, y: 2, terrain: "grass", passable: true, terrainSprite:
|
|
11364
|
-
{ x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite:
|
|
11365
|
-
{ x: 3, y: 2, terrain: "grass", passable: true, terrainSprite:
|
|
11366
|
-
{ x: 4, y: 2, terrain: "stone", passable: false, terrainSprite:
|
|
11367
|
-
{ x: 0, y: 3, terrain: "stone", passable: false, terrainSprite:
|
|
11368
|
-
{ x: 1, y: 3, terrain: "grass", passable: true, terrainSprite:
|
|
11369
|
-
{ x: 2, y: 3, terrain: "grass", passable: true, terrainSprite:
|
|
11370
|
-
{ x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite:
|
|
11371
|
-
{ x: 4, y: 3, terrain: "stone", passable: false, terrainSprite:
|
|
11372
|
-
{ x: 0, y: 4, terrain: "stone", passable: false, terrainSprite:
|
|
11373
|
-
{ x: 1, y: 4, terrain: "stone", passable: false, terrainSprite:
|
|
11374
|
-
{ x: 2, y: 4, terrain: "stone", passable: false, terrainSprite:
|
|
11375
|
-
{ x: 3, y: 4, terrain: "stone", passable: false, terrainSprite:
|
|
11376
|
-
{ x: 4, y: 4, terrain: "stone", passable: false, terrainSprite:
|
|
11387
|
+
{ x: 0, y: 0, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11388
|
+
{ x: 1, y: 0, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11389
|
+
{ x: 2, y: 0, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11390
|
+
{ x: 3, y: 0, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11391
|
+
{ x: 4, y: 0, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11392
|
+
{ x: 0, y: 1, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11393
|
+
{ x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite: DIRT },
|
|
11394
|
+
{ x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: GRASS },
|
|
11395
|
+
{ x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: GRASS },
|
|
11396
|
+
{ x: 4, y: 1, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11397
|
+
{ x: 0, y: 2, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11398
|
+
{ x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: GRASS },
|
|
11399
|
+
{ x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite: DIRT },
|
|
11400
|
+
{ x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: GRASS },
|
|
11401
|
+
{ x: 4, y: 2, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11402
|
+
{ x: 0, y: 3, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11403
|
+
{ x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: GRASS },
|
|
11404
|
+
{ x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: GRASS },
|
|
11405
|
+
{ x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite: DIRT },
|
|
11406
|
+
{ x: 4, y: 3, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11407
|
+
{ x: 0, y: 4, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11408
|
+
{ x: 1, y: 4, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11409
|
+
{ x: 2, y: 4, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11410
|
+
{ x: 3, y: 4, terrain: "stone", passable: false, terrainSprite: STONE },
|
|
11411
|
+
{ x: 4, y: 4, terrain: "stone", passable: false, terrainSprite: STONE }
|
|
11377
11412
|
];
|
|
11378
11413
|
DEFAULT_BATTLE_UNITS = [
|
|
11379
|
-
{ id: "u1", position: { x: 1, y: 1 }, unitType: "worker", name: "Worker", team: "player", health: 10, maxHealth: 10, sprite: `${CDN}/sprite-sheets/amir-sprite-sheet-se.png
|
|
11380
|
-
{ id: "u2", position: { x: 3, y: 3 }, unitType: "guardian", name: "Guardian", team: "enemy", health: 8, maxHealth: 10, sprite: `${CDN}/sprite-sheets/destroyer-sprite-sheet-sw.png
|
|
11414
|
+
{ id: "u1", position: { x: 1, y: 1 }, unitType: "worker", name: "Worker", team: "player", health: 10, maxHealth: 10, sprite: makeAsset(`${CDN}/sprite-sheets/amir-sprite-sheet-se.png`, "player") },
|
|
11415
|
+
{ id: "u2", position: { x: 3, y: 3 }, unitType: "guardian", name: "Guardian", team: "enemy", health: 8, maxHealth: 10, sprite: makeAsset(`${CDN}/sprite-sheets/destroyer-sprite-sheet-sw.png`, "enemy") }
|
|
11381
11416
|
];
|
|
11382
11417
|
DEFAULT_BATTLE_FEATURES = [
|
|
11383
|
-
{ id: "f1", x: 2, y: 2, type: "gold_mine", sprite: `${CDN}/world-map/gold_mine.png
|
|
11384
|
-
{ id: "f2", x: 3, y: 1, type: "portal", sprite: `${CDN}/world-map/portal_open.png
|
|
11418
|
+
{ id: "f1", x: 2, y: 2, type: "gold_mine", sprite: makeAsset(`${CDN}/world-map/gold_mine.png`, "decoration") },
|
|
11419
|
+
{ id: "f2", x: 3, y: 1, type: "portal", sprite: makeAsset(`${CDN}/world-map/portal_open.png`, "decoration") }
|
|
11385
11420
|
];
|
|
11386
11421
|
DEFAULT_BATTLE_MANIFEST = {
|
|
11387
|
-
|
|
11388
|
-
|
|
11389
|
-
|
|
11390
|
-
|
|
11391
|
-
|
|
11392
|
-
|
|
11393
|
-
|
|
11394
|
-
|
|
11395
|
-
|
|
11396
|
-
|
|
11397
|
-
|
|
11398
|
-
|
|
11399
|
-
|
|
11400
|
-
}
|
|
11422
|
+
terrains: makeAssetMap({
|
|
11423
|
+
stone: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png`,
|
|
11424
|
+
dirt: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png`,
|
|
11425
|
+
grass: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png`
|
|
11426
|
+
}, "tile"),
|
|
11427
|
+
units: makeAssetMap({
|
|
11428
|
+
worker: `${CDN}/sprite-sheets/amir-sprite-sheet-se.png`,
|
|
11429
|
+
guardian: `${CDN}/sprite-sheets/destroyer-sprite-sheet-sw.png`
|
|
11430
|
+
}, "npc"),
|
|
11431
|
+
features: makeAssetMap({
|
|
11432
|
+
gold_mine: `${CDN}/world-map/gold_mine.png`,
|
|
11433
|
+
portal: `${CDN}/world-map/portal_open.png`
|
|
11434
|
+
}, "decoration")
|
|
11401
11435
|
};
|
|
11402
11436
|
BattleTemplate.displayName = "BattleTemplate";
|
|
11403
11437
|
}
|
|
@@ -13612,7 +13646,6 @@ function BoardgameBoard({
|
|
|
13612
13646
|
units,
|
|
13613
13647
|
features,
|
|
13614
13648
|
assetManifest,
|
|
13615
|
-
assetBaseUrl,
|
|
13616
13649
|
scale,
|
|
13617
13650
|
showMinimap,
|
|
13618
13651
|
enableCamera,
|
|
@@ -18682,7 +18715,7 @@ function CardHand({
|
|
|
18682
18715
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-1 flex items-center justify-center w-full", children: card.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
18683
18716
|
"img",
|
|
18684
18717
|
{
|
|
18685
|
-
src: card.iconUrl,
|
|
18718
|
+
src: card.iconUrl.url,
|
|
18686
18719
|
alt: card.title ?? card.id,
|
|
18687
18720
|
width: art,
|
|
18688
18721
|
height: art,
|
|
@@ -18740,15 +18773,6 @@ var init_CardHand = __esm({
|
|
|
18740
18773
|
CardHand.displayName = "CardHand";
|
|
18741
18774
|
}
|
|
18742
18775
|
});
|
|
18743
|
-
function resolveManifestUrl(manifest, relative) {
|
|
18744
|
-
if (relative == null) return void 0;
|
|
18745
|
-
if (/^https?:\/\//.test(relative)) return relative;
|
|
18746
|
-
const base = manifest?.baseUrl;
|
|
18747
|
-
if (base == null) return relative;
|
|
18748
|
-
const cleanBase = base.replace(/\/$/, "");
|
|
18749
|
-
const cleanRel = relative.replace(/^\//, "");
|
|
18750
|
-
return `${cleanBase}/${cleanRel}`;
|
|
18751
|
-
}
|
|
18752
18776
|
function rowToCard(r) {
|
|
18753
18777
|
return {
|
|
18754
18778
|
id: str(r.id),
|
|
@@ -18762,7 +18786,7 @@ function rowToCard(r) {
|
|
|
18762
18786
|
function toHandCards(cards, manifest, mana) {
|
|
18763
18787
|
return cards.map((c) => {
|
|
18764
18788
|
const key = c.iconKey ?? c.id;
|
|
18765
|
-
const iconUrl =
|
|
18789
|
+
const iconUrl = manifest?.cards?.[key];
|
|
18766
18790
|
return {
|
|
18767
18791
|
id: c.id,
|
|
18768
18792
|
iconUrl,
|
|
@@ -19876,7 +19900,6 @@ function CastleBoard({
|
|
|
19876
19900
|
onTileHover: (x, y) => setHoveredTile({ x, y }),
|
|
19877
19901
|
onTileLeave: () => setHoveredTile(null),
|
|
19878
19902
|
scale,
|
|
19879
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
19880
19903
|
assetManifest,
|
|
19881
19904
|
backgroundImage
|
|
19882
19905
|
}
|
|
@@ -19952,60 +19975,63 @@ function CastleTemplate({
|
|
|
19952
19975
|
}
|
|
19953
19976
|
);
|
|
19954
19977
|
}
|
|
19955
|
-
var CDN2, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
|
|
19978
|
+
var CDN2, WALL, FLOOR, FLOOR_CENTER, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
|
|
19956
19979
|
var init_CastleTemplate = __esm({
|
|
19957
19980
|
"components/game/templates/CastleTemplate.tsx"() {
|
|
19958
19981
|
init_CastleBoard();
|
|
19982
|
+
init_makeAsset();
|
|
19959
19983
|
CDN2 = "https://almadar-kflow-assets.web.app/shared";
|
|
19984
|
+
WALL = makeAsset(`${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png`, "tile");
|
|
19985
|
+
FLOOR = makeAsset(`${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png`, "tile");
|
|
19986
|
+
FLOOR_CENTER = makeAsset(`${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_09.png`, "tile");
|
|
19960
19987
|
DEFAULT_CASTLE_TILES = [
|
|
19961
|
-
{ x: 0, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
19962
|
-
{ x: 1, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
19963
|
-
{ x: 2, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
19964
|
-
{ x: 3, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
19965
|
-
{ x: 4, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
19966
|
-
{ x: 0, y: 1, terrain: "wall", passable: false, terrainSprite:
|
|
19967
|
-
{ x: 1, y: 1, terrain: "floor", passable: true, terrainSprite:
|
|
19968
|
-
{ x: 2, y: 1, terrain: "floor", passable: true, terrainSprite:
|
|
19969
|
-
{ x: 3, y: 1, terrain: "floor", passable: true, terrainSprite:
|
|
19970
|
-
{ x: 4, y: 1, terrain: "wall", passable: false, terrainSprite:
|
|
19971
|
-
{ x: 0, y: 2, terrain: "wall", passable: false, terrainSprite:
|
|
19972
|
-
{ x: 1, y: 2, terrain: "floor", passable: true, terrainSprite:
|
|
19973
|
-
{ x: 2, y: 2, terrain: "floor", passable: true, terrainSprite:
|
|
19974
|
-
{ x: 3, y: 2, terrain: "floor", passable: true, terrainSprite:
|
|
19975
|
-
{ x: 4, y: 2, terrain: "wall", passable: false, terrainSprite:
|
|
19976
|
-
{ x: 0, y: 3, terrain: "wall", passable: false, terrainSprite:
|
|
19977
|
-
{ x: 1, y: 3, terrain: "floor", passable: true, terrainSprite:
|
|
19978
|
-
{ x: 2, y: 3, terrain: "floor", passable: true, terrainSprite:
|
|
19979
|
-
{ x: 3, y: 3, terrain: "floor", passable: true, terrainSprite:
|
|
19980
|
-
{ x: 4, y: 3, terrain: "wall", passable: false, terrainSprite:
|
|
19981
|
-
{ x: 0, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
19982
|
-
{ x: 1, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
19983
|
-
{ x: 2, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
19984
|
-
{ x: 3, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
19985
|
-
{ x: 4, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
19988
|
+
{ x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19989
|
+
{ x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19990
|
+
{ x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19991
|
+
{ x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19992
|
+
{ x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19993
|
+
{ x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19994
|
+
{ x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
19995
|
+
{ x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
19996
|
+
{ x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
19997
|
+
{ x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19998
|
+
{ x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
19999
|
+
{ x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
20000
|
+
{ x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: FLOOR_CENTER },
|
|
20001
|
+
{ x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
20002
|
+
{ x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20003
|
+
{ x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20004
|
+
{ x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
20005
|
+
{ x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
20006
|
+
{ x: 3, y: 3, terrain: "floor", passable: true, terrainSprite: FLOOR },
|
|
20007
|
+
{ x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20008
|
+
{ x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20009
|
+
{ x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20010
|
+
{ x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20011
|
+
{ x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: WALL },
|
|
20012
|
+
{ x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: WALL }
|
|
19986
20013
|
];
|
|
19987
20014
|
DEFAULT_CASTLE_UNITS = [
|
|
19988
|
-
{ id: "u1", position: { x: 1, y: 1 }, unitType: "worker", name: "Worker", team: "player", health: 10, maxHealth: 10, sprite: `${CDN2}/sprite-sheets/coordinator-sprite-sheet-se.png
|
|
19989
|
-
{ id: "u2", position: { x: 3, y: 3 }, unitType: "guardian", name: "Guardian", team: "player", health: 10, maxHealth: 10, sprite: `${CDN2}/sprite-sheets/forger-sprite-sheet-se.png
|
|
20015
|
+
{ id: "u1", position: { x: 1, y: 1 }, unitType: "worker", name: "Worker", team: "player", health: 10, maxHealth: 10, sprite: makeAsset(`${CDN2}/sprite-sheets/coordinator-sprite-sheet-se.png`, "player") },
|
|
20016
|
+
{ id: "u2", position: { x: 3, y: 3 }, unitType: "guardian", name: "Guardian", team: "player", health: 10, maxHealth: 10, sprite: makeAsset(`${CDN2}/sprite-sheets/forger-sprite-sheet-se.png`, "player") }
|
|
19990
20017
|
];
|
|
19991
20018
|
DEFAULT_CASTLE_FEATURES = [
|
|
19992
|
-
{ id: "f1", x: 2, y: 2, type: "chest", sprite: `${CDN2}/world-map/treasure_chest_closed.png
|
|
19993
|
-
{ id: "f2", x: 3, y: 1, type: "crystal", sprite: `${CDN2}/world-map/resonance_crystal.png
|
|
20019
|
+
{ id: "f1", x: 2, y: 2, type: "chest", sprite: makeAsset(`${CDN2}/world-map/treasure_chest_closed.png`, "decoration") },
|
|
20020
|
+
{ id: "f2", x: 3, y: 1, type: "crystal", sprite: makeAsset(`${CDN2}/world-map/resonance_crystal.png`, "decoration") }
|
|
19994
20021
|
];
|
|
19995
20022
|
DEFAULT_CASTLE_MANIFEST = {
|
|
19996
|
-
|
|
19997
|
-
|
|
19998
|
-
|
|
19999
|
-
|
|
20000
|
-
|
|
20001
|
-
|
|
20002
|
-
|
|
20003
|
-
|
|
20004
|
-
|
|
20005
|
-
|
|
20006
|
-
|
|
20007
|
-
|
|
20008
|
-
}
|
|
20023
|
+
terrains: makeAssetMap({
|
|
20024
|
+
wall: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png`,
|
|
20025
|
+
floor: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png`
|
|
20026
|
+
}, "tile"),
|
|
20027
|
+
units: makeAssetMap({
|
|
20028
|
+
worker: `${CDN2}/sprite-sheets/coordinator-sprite-sheet-se.png`,
|
|
20029
|
+
guardian: `${CDN2}/sprite-sheets/forger-sprite-sheet-se.png`
|
|
20030
|
+
}, "player"),
|
|
20031
|
+
features: makeAssetMap({
|
|
20032
|
+
chest: `${CDN2}/world-map/treasure_chest_closed.png`,
|
|
20033
|
+
crystal: `${CDN2}/world-map/resonance_crystal.png`
|
|
20034
|
+
}, "decoration")
|
|
20009
20035
|
};
|
|
20010
20036
|
CastleTemplate.displayName = "CastleTemplate";
|
|
20011
20037
|
}
|
|
@@ -21033,7 +21059,7 @@ function ChoiceButton({
|
|
|
21033
21059
|
assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
21034
21060
|
"img",
|
|
21035
21061
|
{
|
|
21036
|
-
src: assetUrl,
|
|
21062
|
+
src: assetUrl.url,
|
|
21037
21063
|
alt: "",
|
|
21038
21064
|
width: 16,
|
|
21039
21065
|
height: 16,
|
|
@@ -21059,15 +21085,6 @@ var init_ChoiceButton = __esm({
|
|
|
21059
21085
|
ChoiceButton.displayName = "ChoiceButton";
|
|
21060
21086
|
}
|
|
21061
21087
|
});
|
|
21062
|
-
function resolveManifestUrl2(manifest, relative) {
|
|
21063
|
-
if (relative == null) return void 0;
|
|
21064
|
-
if (/^https?:\/\//.test(relative)) return relative;
|
|
21065
|
-
const base = manifest?.baseUrl;
|
|
21066
|
-
if (base == null) return relative;
|
|
21067
|
-
const cleanBase = base.replace(/\/$/, "");
|
|
21068
|
-
const cleanRel = relative.replace(/^\//, "");
|
|
21069
|
-
return `${cleanBase}/${cleanRel}`;
|
|
21070
|
-
}
|
|
21071
21088
|
function buildDefaultCBTiles() {
|
|
21072
21089
|
const tiles = [];
|
|
21073
21090
|
for (let y = 0; y < CB_GRID_H; y++) {
|
|
@@ -21082,12 +21099,12 @@ function buildDefaultCBTiles() {
|
|
|
21082
21099
|
function tilesToIso(tiles, manifest) {
|
|
21083
21100
|
return tiles.map((t) => {
|
|
21084
21101
|
const key = t.terrain ?? "grass";
|
|
21085
|
-
const
|
|
21102
|
+
const terrainSprite = t.terrainSprite ?? manifest?.terrains?.[key] ?? manifest?.terrains?.grass;
|
|
21086
21103
|
return {
|
|
21087
21104
|
x: t.x,
|
|
21088
21105
|
y: t.y,
|
|
21089
21106
|
terrain: t.terrain,
|
|
21090
|
-
terrainSprite
|
|
21107
|
+
terrainSprite,
|
|
21091
21108
|
passable: t.passable
|
|
21092
21109
|
};
|
|
21093
21110
|
});
|
|
@@ -21098,7 +21115,7 @@ function buildingsToFeatures(buildings, manifest) {
|
|
|
21098
21115
|
x: b.x,
|
|
21099
21116
|
y: b.y,
|
|
21100
21117
|
type: b.type,
|
|
21101
|
-
sprite:
|
|
21118
|
+
sprite: manifest?.features?.[b.type]
|
|
21102
21119
|
}));
|
|
21103
21120
|
}
|
|
21104
21121
|
function CityBuilderBoard({
|
|
@@ -21130,7 +21147,7 @@ function CityBuilderBoard({
|
|
|
21130
21147
|
x: num(r.x),
|
|
21131
21148
|
y: num(r.y),
|
|
21132
21149
|
terrain: r.terrain == null ? void 0 : str(r.terrain),
|
|
21133
|
-
terrainSprite: r.terrainSprite == null ? void 0 : str(r.terrainSprite),
|
|
21150
|
+
terrainSprite: r.terrainSprite == null ? void 0 : makeAsset(str(r.terrainSprite), "tile"),
|
|
21134
21151
|
passable: r.passable !== false
|
|
21135
21152
|
})),
|
|
21136
21153
|
[board.tiles]
|
|
@@ -21239,7 +21256,6 @@ function CityBuilderBoard({
|
|
|
21239
21256
|
{
|
|
21240
21257
|
tiles: isoTiles,
|
|
21241
21258
|
features: buildingFeatures,
|
|
21242
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
21243
21259
|
assetManifest,
|
|
21244
21260
|
validMoves,
|
|
21245
21261
|
hoveredTile,
|
|
@@ -21274,6 +21290,7 @@ var CB_GRID_W, CB_GRID_H, DEFAULT_BUILD_TYPES, DEFAULT_CB_TILES;
|
|
|
21274
21290
|
var init_CityBuilderBoard = __esm({
|
|
21275
21291
|
"components/game/organisms/CityBuilderBoard.tsx"() {
|
|
21276
21292
|
"use client";
|
|
21293
|
+
init_makeAsset();
|
|
21277
21294
|
init_cn();
|
|
21278
21295
|
init_useEventBus();
|
|
21279
21296
|
init_Box();
|
|
@@ -21805,7 +21822,7 @@ function ComboCounter({
|
|
|
21805
21822
|
assetUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21806
21823
|
"img",
|
|
21807
21824
|
{
|
|
21808
|
-
src: assetUrl,
|
|
21825
|
+
src: assetUrl.url,
|
|
21809
21826
|
alt: "combo",
|
|
21810
21827
|
width: 24,
|
|
21811
21828
|
height: 24,
|
|
@@ -21831,7 +21848,11 @@ var DEFAULT_ASSET_URL3, sizeMap5;
|
|
|
21831
21848
|
var init_ComboCounter = __esm({
|
|
21832
21849
|
"components/game/atoms/ComboCounter.tsx"() {
|
|
21833
21850
|
init_cn();
|
|
21834
|
-
DEFAULT_ASSET_URL3 =
|
|
21851
|
+
DEFAULT_ASSET_URL3 = {
|
|
21852
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/flash/flash00.png",
|
|
21853
|
+
role: "effect",
|
|
21854
|
+
category: "effect"
|
|
21855
|
+
};
|
|
21835
21856
|
sizeMap5 = {
|
|
21836
21857
|
sm: { combo: "text-lg", label: "text-xs", multiplier: "text-xs" },
|
|
21837
21858
|
md: { combo: "text-2xl", label: "text-xs", multiplier: "text-sm" },
|
|
@@ -22276,7 +22297,7 @@ function ItemSlot({
|
|
|
22276
22297
|
assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
22277
22298
|
"img",
|
|
22278
22299
|
{
|
|
22279
|
-
src: assetUrl,
|
|
22300
|
+
src: assetUrl?.url,
|
|
22280
22301
|
alt: label,
|
|
22281
22302
|
width: px,
|
|
22282
22303
|
height: px,
|
|
@@ -22324,7 +22345,11 @@ var init_ItemSlot = __esm({
|
|
|
22324
22345
|
epic: "shadow-lg",
|
|
22325
22346
|
legendary: "shadow-lg"
|
|
22326
22347
|
};
|
|
22327
|
-
DEFAULT_ASSET_URL4 =
|
|
22348
|
+
DEFAULT_ASSET_URL4 = {
|
|
22349
|
+
url: "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png",
|
|
22350
|
+
role: "effect",
|
|
22351
|
+
category: "item"
|
|
22352
|
+
};
|
|
22328
22353
|
assetSizeMap = {
|
|
22329
22354
|
sm: 28,
|
|
22330
22355
|
md: 40,
|
|
@@ -22526,7 +22551,7 @@ function DamageNumber({
|
|
|
22526
22551
|
assetUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
22527
22552
|
"img",
|
|
22528
22553
|
{
|
|
22529
|
-
src: assetUrl,
|
|
22554
|
+
src: assetUrl.url,
|
|
22530
22555
|
alt: "",
|
|
22531
22556
|
width: 14,
|
|
22532
22557
|
height: 14,
|
|
@@ -22562,7 +22587,11 @@ var init_DamageNumber = __esm({
|
|
|
22562
22587
|
100% { opacity: 0; transform: translateY(-32px) scale(0.8); }
|
|
22563
22588
|
}
|
|
22564
22589
|
`;
|
|
22565
|
-
DEFAULT_ASSET_URL5 =
|
|
22590
|
+
DEFAULT_ASSET_URL5 = {
|
|
22591
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/particles/spark_01.png",
|
|
22592
|
+
role: "effect",
|
|
22593
|
+
category: "effect"
|
|
22594
|
+
};
|
|
22566
22595
|
DamageNumber.displayName = "DamageNumber";
|
|
22567
22596
|
}
|
|
22568
22597
|
});
|
|
@@ -25505,6 +25534,9 @@ function TextLikeControl({
|
|
|
25505
25534
|
function isTraitConfigObject(v) {
|
|
25506
25535
|
return v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
|
|
25507
25536
|
}
|
|
25537
|
+
function isAssetObject(v) {
|
|
25538
|
+
return isTraitConfigObject(v) && typeof v.url === "string";
|
|
25539
|
+
}
|
|
25508
25540
|
function FieldControl({
|
|
25509
25541
|
name,
|
|
25510
25542
|
decl,
|
|
@@ -25526,6 +25558,17 @@ function FieldControl({
|
|
|
25526
25558
|
onChange: (url) => onChange(name, url)
|
|
25527
25559
|
}
|
|
25528
25560
|
);
|
|
25561
|
+
} else if (decl.type === "Asset") {
|
|
25562
|
+
const assetUrl = isAssetObject(effectiveValue) ? effectiveValue.url : "";
|
|
25563
|
+
const baseAsset = isAssetObject(effectiveValue) ? effectiveValue : {};
|
|
25564
|
+
control = /* @__PURE__ */ jsxRuntime.jsx(
|
|
25565
|
+
exports.AssetPicker,
|
|
25566
|
+
{
|
|
25567
|
+
assets: assets ?? [],
|
|
25568
|
+
value: assetUrl,
|
|
25569
|
+
onChange: (url) => onChange(name, { ...baseAsset, url })
|
|
25570
|
+
}
|
|
25571
|
+
);
|
|
25529
25572
|
} else if (decl.type === "boolean") {
|
|
25530
25573
|
control = /* @__PURE__ */ jsxRuntime.jsx(exports.Switch, { checked: value === true, onChange: (c) => onChange(name, c) });
|
|
25531
25574
|
} else if (decl.type === "string" && decl.values !== void 0 && decl.values.length > 0) {
|
|
@@ -25578,7 +25621,7 @@ var init_PropertyInspector = __esm({
|
|
|
25578
25621
|
init_JsonTreeEditor();
|
|
25579
25622
|
init_NodeSlotEditor();
|
|
25580
25623
|
TIER_ORDER = ["presentation", "domain", "policy", "infra", "internal"];
|
|
25581
|
-
SCALAR_TYPES = /* @__PURE__ */ new Set(["string", "number", "boolean", "icon", "asset"]);
|
|
25624
|
+
SCALAR_TYPES = /* @__PURE__ */ new Set(["string", "number", "boolean", "icon", "asset", "Asset"]);
|
|
25582
25625
|
exports.PropertyInspector = ({
|
|
25583
25626
|
config,
|
|
25584
25627
|
values,
|
|
@@ -28682,7 +28725,7 @@ function ScoreDisplay({
|
|
|
28682
28725
|
assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
28683
28726
|
"img",
|
|
28684
28727
|
{
|
|
28685
|
-
src: assetUrl,
|
|
28728
|
+
src: assetUrl.url,
|
|
28686
28729
|
alt: "",
|
|
28687
28730
|
width: 20,
|
|
28688
28731
|
height: 20,
|
|
@@ -28707,7 +28750,11 @@ var init_ScoreDisplay = __esm({
|
|
|
28707
28750
|
lg: "text-2xl",
|
|
28708
28751
|
xl: "text-4xl"
|
|
28709
28752
|
};
|
|
28710
|
-
DEFAULT_ASSET_URL6 =
|
|
28753
|
+
DEFAULT_ASSET_URL6 = {
|
|
28754
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/particles/star_01.png",
|
|
28755
|
+
role: "effect",
|
|
28756
|
+
category: "effect"
|
|
28757
|
+
};
|
|
28711
28758
|
ScoreDisplay.displayName = "ScoreDisplay";
|
|
28712
28759
|
}
|
|
28713
28760
|
});
|
|
@@ -28741,7 +28788,7 @@ function StatBadge({
|
|
|
28741
28788
|
resolvedAsset ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
28742
28789
|
"img",
|
|
28743
28790
|
{
|
|
28744
|
-
src: resolvedAsset,
|
|
28791
|
+
src: resolvedAsset.url,
|
|
28745
28792
|
alt: "",
|
|
28746
28793
|
width: 16,
|
|
28747
28794
|
height: 16,
|
|
@@ -28924,7 +28971,7 @@ function WaypointMarker({
|
|
|
28924
28971
|
children: completed ? checkIcon : assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
28925
28972
|
"img",
|
|
28926
28973
|
{
|
|
28927
|
-
src: assetUrl,
|
|
28974
|
+
src: assetUrl.url,
|
|
28928
28975
|
alt: label,
|
|
28929
28976
|
width: sizes.img,
|
|
28930
28977
|
height: sizes.img,
|
|
@@ -28953,7 +29000,11 @@ var init_WaypointMarker = __esm({
|
|
|
28953
29000
|
"components/game/atoms/WaypointMarker.tsx"() {
|
|
28954
29001
|
init_cn();
|
|
28955
29002
|
init_Icon();
|
|
28956
|
-
DEFAULT_ASSET_URL7 =
|
|
29003
|
+
DEFAULT_ASSET_URL7 = {
|
|
29004
|
+
url: "https://almadar-kflow-assets.web.app/shared/world-map/battle_marker.png",
|
|
29005
|
+
role: "effect",
|
|
29006
|
+
category: "world"
|
|
29007
|
+
};
|
|
28957
29008
|
sizeMap12 = {
|
|
28958
29009
|
sm: { dot: "w-4 h-4", ring: "w-6 h-6", label: "text-xs mt-1", img: 12 },
|
|
28959
29010
|
md: { dot: "w-6 h-6", ring: "w-8 h-8", label: "text-sm mt-1.5", img: 18 },
|
|
@@ -29130,7 +29181,7 @@ function GameCanvas2D({
|
|
|
29130
29181
|
tickEvent,
|
|
29131
29182
|
drawEvent,
|
|
29132
29183
|
fps = 60,
|
|
29133
|
-
backgroundImage
|
|
29184
|
+
backgroundImage,
|
|
29134
29185
|
assetBaseUrl,
|
|
29135
29186
|
className
|
|
29136
29187
|
}) {
|
|
@@ -29194,7 +29245,7 @@ function GameCanvas2D({
|
|
|
29194
29245
|
emitRef.current(tickEventRef.current, { dt, frame });
|
|
29195
29246
|
}
|
|
29196
29247
|
if (backgroundImageRef.current) {
|
|
29197
|
-
const bgImg = loadImage(backgroundImageRef.current);
|
|
29248
|
+
const bgImg = loadImage(backgroundImageRef.current.url);
|
|
29198
29249
|
if (bgImg) {
|
|
29199
29250
|
ctx.drawImage(bgImg, 0, 0, widthRef.current, heightRef.current);
|
|
29200
29251
|
} else {
|
|
@@ -29266,7 +29317,7 @@ function StatusEffect({
|
|
|
29266
29317
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex items-center justify-center", sizes.icon), children: assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
29267
29318
|
"img",
|
|
29268
29319
|
{
|
|
29269
|
-
src: assetUrl,
|
|
29320
|
+
src: assetUrl.url,
|
|
29270
29321
|
alt: label,
|
|
29271
29322
|
width: sizes.img,
|
|
29272
29323
|
height: sizes.img,
|
|
@@ -29305,7 +29356,11 @@ var init_StatusEffect = __esm({
|
|
|
29305
29356
|
"components/game/atoms/StatusEffect.tsx"() {
|
|
29306
29357
|
init_cn();
|
|
29307
29358
|
init_Icon();
|
|
29308
|
-
DEFAULT_ASSET_URL8 =
|
|
29359
|
+
DEFAULT_ASSET_URL8 = {
|
|
29360
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/particles/flame_01.png",
|
|
29361
|
+
role: "effect",
|
|
29362
|
+
category: "effect"
|
|
29363
|
+
};
|
|
29309
29364
|
sizeMap13 = {
|
|
29310
29365
|
sm: { container: "w-8 h-8", icon: "text-sm", badge: "text-xs -top-1 -right-1 w-4 h-4", timer: "text-[9px]", img: 20 },
|
|
29311
29366
|
md: { container: "w-10 h-10", icon: "text-base", badge: "text-xs -top-1 -right-1 w-5 h-5", timer: "text-xs", img: 28 },
|
|
@@ -29596,7 +29651,7 @@ function TurnIndicator({
|
|
|
29596
29651
|
assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
29597
29652
|
"img",
|
|
29598
29653
|
{
|
|
29599
|
-
src: assetUrl,
|
|
29654
|
+
src: assetUrl.url,
|
|
29600
29655
|
alt: "",
|
|
29601
29656
|
width: 12,
|
|
29602
29657
|
height: 12,
|
|
@@ -29619,7 +29674,11 @@ var init_TurnIndicator = __esm({
|
|
|
29619
29674
|
md: { wrapper: "text-sm gap-2 px-3 py-1", dot: "w-2 h-2" },
|
|
29620
29675
|
lg: { wrapper: "text-base gap-2.5 px-4 py-1.5", dot: "w-2.5 h-2.5" }
|
|
29621
29676
|
};
|
|
29622
|
-
DEFAULT_ASSET_URL9 =
|
|
29677
|
+
DEFAULT_ASSET_URL9 = {
|
|
29678
|
+
url: "https://almadar-kflow-assets.web.app/shared/effects/particles/symbol_01.png",
|
|
29679
|
+
role: "effect",
|
|
29680
|
+
category: "effect"
|
|
29681
|
+
};
|
|
29623
29682
|
TurnIndicator.displayName = "TurnIndicator";
|
|
29624
29683
|
}
|
|
29625
29684
|
});
|
|
@@ -29713,7 +29772,7 @@ function EnemyPlate({
|
|
|
29713
29772
|
assetUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
29714
29773
|
"img",
|
|
29715
29774
|
{
|
|
29716
|
-
src: assetUrl,
|
|
29775
|
+
src: assetUrl.url,
|
|
29717
29776
|
alt: name,
|
|
29718
29777
|
width: 24,
|
|
29719
29778
|
height: 24,
|
|
@@ -30055,7 +30114,7 @@ function DialogueBox({
|
|
|
30055
30114
|
"div",
|
|
30056
30115
|
{
|
|
30057
30116
|
className: "fixed inset-0 z-20 bg-center bg-cover bg-no-repeat",
|
|
30058
|
-
style: { backgroundImage: `url(${backgroundImage})` },
|
|
30117
|
+
style: { backgroundImage: `url(${backgroundImage?.url})` },
|
|
30059
30118
|
"aria-hidden": "true"
|
|
30060
30119
|
}
|
|
30061
30120
|
),
|
|
@@ -30070,7 +30129,7 @@ function DialogueBox({
|
|
|
30070
30129
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
30071
30130
|
"img",
|
|
30072
30131
|
{
|
|
30073
|
-
src: portraitUrl,
|
|
30132
|
+
src: portraitUrl?.url,
|
|
30074
30133
|
alt: dialogue.speaker,
|
|
30075
30134
|
className: "h-full w-auto object-contain drop-shadow-2xl"
|
|
30076
30135
|
}
|
|
@@ -41787,7 +41846,7 @@ var init_DetailPanel = __esm({
|
|
|
41787
41846
|
function DialogueBubble({
|
|
41788
41847
|
speaker = "Hero",
|
|
41789
41848
|
text = "The dungeon awaits. Choose your path wisely.",
|
|
41790
|
-
portrait =
|
|
41849
|
+
portrait = DEFAULT_PORTRAIT,
|
|
41791
41850
|
position = "bottom",
|
|
41792
41851
|
className
|
|
41793
41852
|
}) {
|
|
@@ -41803,7 +41862,7 @@ function DialogueBubble({
|
|
|
41803
41862
|
portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-warning/60", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
41804
41863
|
"img",
|
|
41805
41864
|
{
|
|
41806
|
-
src: portrait,
|
|
41865
|
+
src: portrait?.url,
|
|
41807
41866
|
alt: speaker ?? "speaker",
|
|
41808
41867
|
className: "w-full h-full object-cover"
|
|
41809
41868
|
}
|
|
@@ -41816,9 +41875,15 @@ function DialogueBubble({
|
|
|
41816
41875
|
}
|
|
41817
41876
|
);
|
|
41818
41877
|
}
|
|
41878
|
+
var DEFAULT_PORTRAIT;
|
|
41819
41879
|
var init_DialogueBubble = __esm({
|
|
41820
41880
|
"components/game/atoms/DialogueBubble.tsx"() {
|
|
41821
41881
|
init_cn();
|
|
41882
|
+
DEFAULT_PORTRAIT = {
|
|
41883
|
+
url: "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
|
|
41884
|
+
role: "effect",
|
|
41885
|
+
category: "character"
|
|
41886
|
+
};
|
|
41822
41887
|
DialogueBubble.displayName = "DialogueBubble";
|
|
41823
41888
|
}
|
|
41824
41889
|
});
|
|
@@ -41894,7 +41959,7 @@ function StateIndicator({
|
|
|
41894
41959
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { as: "span", children: assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
41895
41960
|
"img",
|
|
41896
41961
|
{
|
|
41897
|
-
src: assetUrl,
|
|
41962
|
+
src: assetUrl.url,
|
|
41898
41963
|
alt: displayLabel,
|
|
41899
41964
|
width: 16,
|
|
41900
41965
|
height: 16,
|
|
@@ -41913,7 +41978,11 @@ var init_StateIndicator = __esm({
|
|
|
41913
41978
|
init_Box();
|
|
41914
41979
|
init_Icon();
|
|
41915
41980
|
init_cn();
|
|
41916
|
-
DEFAULT_ASSET_URL10 =
|
|
41981
|
+
DEFAULT_ASSET_URL10 = {
|
|
41982
|
+
url: "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png",
|
|
41983
|
+
role: "effect",
|
|
41984
|
+
category: "item"
|
|
41985
|
+
};
|
|
41917
41986
|
DEFAULT_STATE_STYLES = {
|
|
41918
41987
|
idle: { icon: "\u23F8", bgClass: "bg-muted" },
|
|
41919
41988
|
active: { icon: "\u25B6", bgClass: "bg-success" },
|
|
@@ -42719,7 +42788,6 @@ var init_FeatureGridOrganism = __esm({
|
|
|
42719
42788
|
});
|
|
42720
42789
|
function FishingBoard({
|
|
42721
42790
|
backgroundImage,
|
|
42722
|
-
assetBaseUrl,
|
|
42723
42791
|
scale = 1,
|
|
42724
42792
|
showMinimap = false,
|
|
42725
42793
|
enableCamera = true,
|
|
@@ -42737,8 +42805,7 @@ function FishingBoard({
|
|
|
42737
42805
|
{
|
|
42738
42806
|
width,
|
|
42739
42807
|
height,
|
|
42740
|
-
backgroundImage
|
|
42741
|
-
assetBaseUrl,
|
|
42808
|
+
backgroundImage,
|
|
42742
42809
|
fps: 60,
|
|
42743
42810
|
className: "w-full h-full"
|
|
42744
42811
|
}
|
|
@@ -44964,7 +45031,7 @@ var init_GameCanvas3D2 = __esm({
|
|
|
44964
45031
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
44965
45032
|
ModelLoader,
|
|
44966
45033
|
{
|
|
44967
|
-
url: tile.modelUrl,
|
|
45034
|
+
url: tile.modelUrl.url,
|
|
44968
45035
|
scale: 0.95,
|
|
44969
45036
|
fallbackGeometry: "box",
|
|
44970
45037
|
castShadow: true,
|
|
@@ -45029,7 +45096,7 @@ var init_GameCanvas3D2 = __esm({
|
|
|
45029
45096
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
45030
45097
|
ModelLoader,
|
|
45031
45098
|
{
|
|
45032
|
-
url: unit.modelUrl,
|
|
45099
|
+
url: unit.modelUrl.url,
|
|
45033
45100
|
scale: modelScale,
|
|
45034
45101
|
fallbackGeometry: "box",
|
|
45035
45102
|
castShadow: true
|
|
@@ -45089,7 +45156,7 @@ var init_GameCanvas3D2 = __esm({
|
|
|
45089
45156
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
45090
45157
|
ModelLoader,
|
|
45091
45158
|
{
|
|
45092
|
-
url: feature.assetUrl,
|
|
45159
|
+
url: feature.assetUrl.url,
|
|
45093
45160
|
position,
|
|
45094
45161
|
scale: 0.5,
|
|
45095
45162
|
rotation: [0, feature.rotation ?? 0, 0],
|
|
@@ -45310,7 +45377,18 @@ function GameBoard3D({
|
|
|
45310
45377
|
const row = boardEntity(entity);
|
|
45311
45378
|
const eventBus = useEventBus();
|
|
45312
45379
|
const entityUnits = row ? rows(row.units) : [];
|
|
45313
|
-
const units = entityUnits
|
|
45380
|
+
const units = entityUnits.map((r) => ({
|
|
45381
|
+
id: str(r.id),
|
|
45382
|
+
x: num(r.x),
|
|
45383
|
+
y: num(r.y),
|
|
45384
|
+
z: num(r.z),
|
|
45385
|
+
faction: str(r.faction) || "neutral",
|
|
45386
|
+
team: str(r.team) || str(r.faction) || "neutral",
|
|
45387
|
+
unitType: r.unitType == null ? void 0 : str(r.unitType),
|
|
45388
|
+
name: r.name == null ? void 0 : str(r.name),
|
|
45389
|
+
health: r.health == null ? void 0 : num(r.health),
|
|
45390
|
+
maxHealth: r.maxHealth == null ? void 0 : num(r.maxHealth)
|
|
45391
|
+
}));
|
|
45314
45392
|
const selectedUnitId = row ? str(row.selectedUnitId) || null : null;
|
|
45315
45393
|
const phase = row ? str(row.phase) : "observation";
|
|
45316
45394
|
const result = row ? str(row.result) : "none";
|
|
@@ -45905,7 +45983,6 @@ function HexStrategyBoard({
|
|
|
45905
45983
|
units,
|
|
45906
45984
|
features,
|
|
45907
45985
|
assetManifest,
|
|
45908
|
-
assetBaseUrl,
|
|
45909
45986
|
scale,
|
|
45910
45987
|
showMinimap,
|
|
45911
45988
|
enableCamera,
|
|
@@ -45947,7 +46024,6 @@ function HolidayRunnerBoard({
|
|
|
45947
46024
|
units,
|
|
45948
46025
|
features,
|
|
45949
46026
|
assetManifest,
|
|
45950
|
-
assetBaseUrl,
|
|
45951
46027
|
scale,
|
|
45952
46028
|
showMinimap,
|
|
45953
46029
|
enableCamera,
|
|
@@ -46742,7 +46818,6 @@ function MatchPuzzleBoard({
|
|
|
46742
46818
|
units,
|
|
46743
46819
|
features,
|
|
46744
46820
|
assetManifest,
|
|
46745
|
-
assetBaseUrl,
|
|
46746
46821
|
scale,
|
|
46747
46822
|
showMinimap,
|
|
46748
46823
|
enableCamera,
|
|
@@ -47003,7 +47078,6 @@ function MinigolfBoard({
|
|
|
47003
47078
|
units,
|
|
47004
47079
|
features,
|
|
47005
47080
|
assetManifest,
|
|
47006
|
-
assetBaseUrl,
|
|
47007
47081
|
scale,
|
|
47008
47082
|
showMinimap,
|
|
47009
47083
|
enableCamera,
|
|
@@ -47309,7 +47383,6 @@ function PirateBoard({
|
|
|
47309
47383
|
units,
|
|
47310
47384
|
features,
|
|
47311
47385
|
assetManifest,
|
|
47312
|
-
assetBaseUrl,
|
|
47313
47386
|
scale,
|
|
47314
47387
|
showMinimap,
|
|
47315
47388
|
enableCamera,
|
|
@@ -47430,8 +47503,8 @@ function PlatformerBoard({
|
|
|
47430
47503
|
canvasHeight,
|
|
47431
47504
|
followCamera: true,
|
|
47432
47505
|
bgColor,
|
|
47433
|
-
playerSprite,
|
|
47434
|
-
tileSprites,
|
|
47506
|
+
playerSprite: playerSprite?.url,
|
|
47507
|
+
tileSprites: tileSprites ? Object.fromEntries(Object.entries(tileSprites).map(([k, a]) => [k, a.url])) : void 0,
|
|
47435
47508
|
leftEvent,
|
|
47436
47509
|
rightEvent,
|
|
47437
47510
|
jumpEvent,
|
|
@@ -47496,7 +47569,7 @@ function PlatformerTemplate({
|
|
|
47496
47569
|
worldHeight = 400,
|
|
47497
47570
|
canvasWidth = 800,
|
|
47498
47571
|
canvasHeight = 400,
|
|
47499
|
-
playerSprite = `${CDN3}/characters/platformChar_idle.png`,
|
|
47572
|
+
playerSprite = makeAsset(`${CDN3}/characters/platformChar_idle.png`, "player"),
|
|
47500
47573
|
tileSprites = DEFAULT_TILE_SPRITES,
|
|
47501
47574
|
bgColor = "#5c94fc",
|
|
47502
47575
|
gameEndEvent = "GAME_END",
|
|
@@ -47549,13 +47622,14 @@ var init_PlatformerTemplate = __esm({
|
|
|
47549
47622
|
init_PlatformerBoard();
|
|
47550
47623
|
init_GameHud();
|
|
47551
47624
|
init_ScoreBoard();
|
|
47625
|
+
init_makeAsset();
|
|
47552
47626
|
CDN3 = "https://almadar-kflow-assets.web.app/shared/platformer";
|
|
47553
|
-
DEFAULT_TILE_SPRITES = {
|
|
47627
|
+
DEFAULT_TILE_SPRITES = makeAssetMap({
|
|
47554
47628
|
ground: `${CDN3}/tiles/platformPack_tile001.png`,
|
|
47555
47629
|
platform: `${CDN3}/tiles/platformPack_tile004.png`,
|
|
47556
47630
|
hazard: `${CDN3}/tiles/platformPack_tile017.png`,
|
|
47557
47631
|
goal: `${CDN3}/tiles/platformPack_tile007.png`
|
|
47558
|
-
};
|
|
47632
|
+
}, "tile");
|
|
47559
47633
|
DEFAULT_PLATFORMS = [
|
|
47560
47634
|
{ x: 0, y: 368, width: 800, height: 32, type: "ground" },
|
|
47561
47635
|
{ x: 150, y: 280, width: 160, height: 16, type: "platform" },
|
|
@@ -47711,7 +47785,6 @@ function RacingBoard({
|
|
|
47711
47785
|
units,
|
|
47712
47786
|
features,
|
|
47713
47787
|
assetManifest,
|
|
47714
|
-
assetBaseUrl,
|
|
47715
47788
|
scale,
|
|
47716
47789
|
showMinimap,
|
|
47717
47790
|
enableCamera,
|
|
@@ -47754,7 +47827,7 @@ function ResourceCounter({
|
|
|
47754
47827
|
assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
47755
47828
|
"img",
|
|
47756
47829
|
{
|
|
47757
|
-
src: assetUrl,
|
|
47830
|
+
src: assetUrl.url,
|
|
47758
47831
|
alt: label,
|
|
47759
47832
|
width: sizes.img,
|
|
47760
47833
|
height: sizes.img,
|
|
@@ -47787,7 +47860,11 @@ var init_ResourceCounter = __esm({
|
|
|
47787
47860
|
error: "text-error",
|
|
47788
47861
|
muted: "text-muted-foreground"
|
|
47789
47862
|
};
|
|
47790
|
-
DEFAULT_ASSET_URL11 =
|
|
47863
|
+
DEFAULT_ASSET_URL11 = {
|
|
47864
|
+
url: "https://almadar-kflow-assets.web.app/shared/world-map/gold_mine.png",
|
|
47865
|
+
role: "effect",
|
|
47866
|
+
category: "world"
|
|
47867
|
+
};
|
|
47791
47868
|
sizeMap16 = {
|
|
47792
47869
|
sm: { wrapper: "text-xs gap-1 px-1.5 py-0.5", icon: "text-sm", img: 16 },
|
|
47793
47870
|
md: { wrapper: "text-sm gap-1.5 px-2 py-1", icon: "text-base", img: 20 },
|
|
@@ -47796,27 +47873,18 @@ var init_ResourceCounter = __esm({
|
|
|
47796
47873
|
ResourceCounter.displayName = "ResourceCounter";
|
|
47797
47874
|
}
|
|
47798
47875
|
});
|
|
47799
|
-
function resolveManifestUrl3(manifest, relative) {
|
|
47800
|
-
if (relative == null) return void 0;
|
|
47801
|
-
if (/^https?:\/\//.test(relative)) return relative;
|
|
47802
|
-
const base = manifest?.baseUrl;
|
|
47803
|
-
if (base == null) return relative;
|
|
47804
|
-
const cleanBase = base.replace(/\/$/, "");
|
|
47805
|
-
const cleanRel = relative.replace(/^\//, "");
|
|
47806
|
-
return `${cleanBase}/${cleanRel}`;
|
|
47807
|
-
}
|
|
47808
47876
|
function dungeonTerrain(x, y, stairsX, stairsY, manifest) {
|
|
47809
47877
|
const isBorder = x === 0 || y === 0 || x === DUNGEON_GRID_W - 1 || y === DUNGEON_GRID_H - 1;
|
|
47810
47878
|
const isPillar = x % 4 === 0 && y % 4 === 0 && !isBorder;
|
|
47811
47879
|
const isWall = isBorder || isPillar;
|
|
47812
47880
|
const terrains = manifest?.terrains;
|
|
47813
47881
|
if (x === stairsX && y === stairsY) {
|
|
47814
|
-
return { terrain: "stairs", passable: true, terrainSprite:
|
|
47882
|
+
return { terrain: "stairs", passable: true, terrainSprite: terrains?.stairs };
|
|
47815
47883
|
}
|
|
47816
47884
|
if (isWall) {
|
|
47817
|
-
return { terrain: "wall", passable: false, terrainSprite:
|
|
47885
|
+
return { terrain: "wall", passable: false, terrainSprite: terrains?.wall };
|
|
47818
47886
|
}
|
|
47819
|
-
return { terrain: "floor", passable: true, terrainSprite:
|
|
47887
|
+
return { terrain: "floor", passable: true, terrainSprite: terrains?.floor };
|
|
47820
47888
|
}
|
|
47821
47889
|
function buildDefaultDungeonTiles(stairsX, stairsY, manifest) {
|
|
47822
47890
|
const tiles = [];
|
|
@@ -47860,7 +47928,7 @@ function RoguelikeBoard({
|
|
|
47860
47928
|
x: num(r.x),
|
|
47861
47929
|
y: num(r.y),
|
|
47862
47930
|
terrain: r.terrain == null ? void 0 : str(r.terrain),
|
|
47863
|
-
terrainSprite: r.terrainSprite == null ? void 0 : str(r.terrainSprite),
|
|
47931
|
+
terrainSprite: r.terrainSprite == null ? void 0 : makeAsset(str(r.terrainSprite), "tile"),
|
|
47864
47932
|
passable: r.passable !== false
|
|
47865
47933
|
})),
|
|
47866
47934
|
[board.tiles]
|
|
@@ -47940,7 +48008,7 @@ function RoguelikeBoard({
|
|
|
47940
48008
|
health: playerHp,
|
|
47941
48009
|
maxHealth: playerMaxHp,
|
|
47942
48010
|
unitType: "player",
|
|
47943
|
-
sprite:
|
|
48011
|
+
sprite: assetManifest?.units?.player
|
|
47944
48012
|
},
|
|
47945
48013
|
...liveEnemies.map((e) => ({
|
|
47946
48014
|
id: e.id,
|
|
@@ -47950,7 +48018,7 @@ function RoguelikeBoard({
|
|
|
47950
48018
|
health: e.hp,
|
|
47951
48019
|
maxHealth: 6,
|
|
47952
48020
|
unitType: "enemy",
|
|
47953
|
-
sprite:
|
|
48021
|
+
sprite: assetManifest?.units?.enemy
|
|
47954
48022
|
}))
|
|
47955
48023
|
];
|
|
47956
48024
|
}, [player, enemies, playerHp, playerMaxHp, assetManifest, t]);
|
|
@@ -47960,7 +48028,7 @@ function RoguelikeBoard({
|
|
|
47960
48028
|
x: it.x,
|
|
47961
48029
|
y: it.y,
|
|
47962
48030
|
type: it.kind,
|
|
47963
|
-
sprite:
|
|
48031
|
+
sprite: assetManifest?.features?.[it.kind]
|
|
47964
48032
|
})),
|
|
47965
48033
|
[items, assetManifest]
|
|
47966
48034
|
);
|
|
@@ -48021,7 +48089,6 @@ function RoguelikeBoard({
|
|
|
48021
48089
|
onTileHover: (x, y) => setHoveredTile({ x, y }),
|
|
48022
48090
|
onTileLeave: () => setHoveredTile(null),
|
|
48023
48091
|
scale,
|
|
48024
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
48025
48092
|
assetManifest,
|
|
48026
48093
|
unitScale,
|
|
48027
48094
|
spriteHeightRatio,
|
|
@@ -48081,6 +48148,7 @@ var init_RoguelikeBoard = __esm({
|
|
|
48081
48148
|
init_Stack();
|
|
48082
48149
|
init_IsometricCanvas();
|
|
48083
48150
|
init_boardEntity();
|
|
48151
|
+
init_makeAsset();
|
|
48084
48152
|
DUNGEON_GRID_W = 16;
|
|
48085
48153
|
DUNGEON_GRID_H = 16;
|
|
48086
48154
|
DEFAULT_ENEMIES = [
|
|
@@ -48131,55 +48199,59 @@ function RoguelikeTemplate({
|
|
|
48131
48199
|
}
|
|
48132
48200
|
);
|
|
48133
48201
|
}
|
|
48134
|
-
var CDN4, DEFAULT_ROGUELIKE_TILES, DEFAULT_ROGUELIKE_MANIFEST;
|
|
48202
|
+
var CDN4, wall, floor, tiles2, stairs, DEFAULT_ROGUELIKE_TILES, DEFAULT_ROGUELIKE_MANIFEST;
|
|
48135
48203
|
var init_RoguelikeTemplate = __esm({
|
|
48136
48204
|
"components/game/templates/RoguelikeTemplate.tsx"() {
|
|
48137
48205
|
init_RoguelikeBoard();
|
|
48206
|
+
init_makeAsset();
|
|
48138
48207
|
CDN4 = "https://almadar-kflow-assets.web.app/shared";
|
|
48208
|
+
wall = makeAsset(`${CDN4}/isometric-dungeon/Isometric/stoneInset_E.png`, "tile");
|
|
48209
|
+
floor = makeAsset(`${CDN4}/isometric-dungeon/Isometric/dirt_E.png`, "tile");
|
|
48210
|
+
tiles2 = makeAsset(`${CDN4}/isometric-dungeon/Isometric/dirtTiles_E.png`, "tile");
|
|
48211
|
+
stairs = makeAsset(`${CDN4}/isometric-dungeon/Isometric/stairs_E.png`, "tile");
|
|
48139
48212
|
DEFAULT_ROGUELIKE_TILES = [
|
|
48140
|
-
{ x: 0, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
48141
|
-
{ x: 1, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
48142
|
-
{ x: 2, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
48143
|
-
{ x: 3, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
48144
|
-
{ x: 4, y: 0, terrain: "wall", passable: false, terrainSprite:
|
|
48145
|
-
{ x: 0, y: 1, terrain: "wall", passable: false, terrainSprite:
|
|
48146
|
-
{ x: 1, y: 1, terrain: "floor", passable: true, terrainSprite:
|
|
48147
|
-
{ x: 2, y: 1, terrain: "floor", passable: true, terrainSprite:
|
|
48148
|
-
{ x: 3, y: 1, terrain: "floor", passable: true, terrainSprite:
|
|
48149
|
-
{ x: 4, y: 1, terrain: "wall", passable: false, terrainSprite:
|
|
48150
|
-
{ x: 0, y: 2, terrain: "wall", passable: false, terrainSprite:
|
|
48151
|
-
{ x: 1, y: 2, terrain: "floor", passable: true, terrainSprite:
|
|
48152
|
-
{ x: 2, y: 2, terrain: "floor", passable: true, terrainSprite:
|
|
48153
|
-
{ x: 3, y: 2, terrain: "floor", passable: true, terrainSprite:
|
|
48154
|
-
{ x: 4, y: 2, terrain: "wall", passable: false, terrainSprite:
|
|
48155
|
-
{ x: 0, y: 3, terrain: "wall", passable: false, terrainSprite:
|
|
48156
|
-
{ x: 1, y: 3, terrain: "floor", passable: true, terrainSprite:
|
|
48157
|
-
{ x: 2, y: 3, terrain: "floor", passable: true, terrainSprite:
|
|
48158
|
-
{ x: 3, y: 3, terrain: "stairs", passable: true, terrainSprite:
|
|
48159
|
-
{ x: 4, y: 3, terrain: "wall", passable: false, terrainSprite:
|
|
48160
|
-
{ x: 0, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
48161
|
-
{ x: 1, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
48162
|
-
{ x: 2, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
48163
|
-
{ x: 3, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
48164
|
-
{ x: 4, y: 4, terrain: "wall", passable: false, terrainSprite:
|
|
48213
|
+
{ x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48214
|
+
{ x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48215
|
+
{ x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48216
|
+
{ x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48217
|
+
{ x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48218
|
+
{ x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48219
|
+
{ x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: floor },
|
|
48220
|
+
{ x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: floor },
|
|
48221
|
+
{ x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: floor },
|
|
48222
|
+
{ x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48223
|
+
{ x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48224
|
+
{ x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: tiles2 },
|
|
48225
|
+
{ x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: tiles2 },
|
|
48226
|
+
{ x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: floor },
|
|
48227
|
+
{ x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48228
|
+
{ x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48229
|
+
{ x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: floor },
|
|
48230
|
+
{ x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: tiles2 },
|
|
48231
|
+
{ x: 3, y: 3, terrain: "stairs", passable: true, terrainSprite: stairs },
|
|
48232
|
+
{ x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48233
|
+
{ x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48234
|
+
{ x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48235
|
+
{ x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48236
|
+
{ x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: wall },
|
|
48237
|
+
{ x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: wall }
|
|
48165
48238
|
];
|
|
48166
48239
|
DEFAULT_ROGUELIKE_MANIFEST = {
|
|
48167
|
-
|
|
48168
|
-
|
|
48169
|
-
|
|
48170
|
-
|
|
48171
|
-
|
|
48172
|
-
|
|
48173
|
-
},
|
|
48240
|
+
terrains: makeAssetMap({
|
|
48241
|
+
floor: `${CDN4}/isometric-dungeon/Isometric/dirt_E.png`,
|
|
48242
|
+
wall: `${CDN4}/isometric-dungeon/Isometric/stoneInset_E.png`,
|
|
48243
|
+
stairs: `${CDN4}/isometric-dungeon/Isometric/stairs_E.png`,
|
|
48244
|
+
planks: `${CDN4}/isometric-dungeon/Isometric/planks_E.png`
|
|
48245
|
+
}, "tile"),
|
|
48174
48246
|
units: {
|
|
48175
|
-
player:
|
|
48176
|
-
enemy:
|
|
48247
|
+
player: makeAsset(`${CDN4}/isometric-dungeon/Characters/Male/Male_0_Idle0.png`, "player"),
|
|
48248
|
+
enemy: makeAsset(`${CDN4}/sprite-sheets/shadow-legion-sprite-sheet-sw.png`, "enemy")
|
|
48177
48249
|
},
|
|
48178
|
-
features: {
|
|
48179
|
-
health_potion:
|
|
48180
|
-
sword:
|
|
48181
|
-
shield:
|
|
48182
|
-
}
|
|
48250
|
+
features: makeAssetMap({
|
|
48251
|
+
health_potion: `${CDN4}/isometric-dungeon/Isometric/chestClosed_E.png`,
|
|
48252
|
+
sword: `${CDN4}/isometric-dungeon/Isometric/barrel_E.png`,
|
|
48253
|
+
shield: `${CDN4}/isometric-dungeon/Isometric/barrel_E.png`
|
|
48254
|
+
}, "item")
|
|
48183
48255
|
};
|
|
48184
48256
|
RoguelikeTemplate.displayName = "RoguelikeTemplate";
|
|
48185
48257
|
}
|
|
@@ -51034,7 +51106,6 @@ function SokobanBoard({
|
|
|
51034
51106
|
units,
|
|
51035
51107
|
features,
|
|
51036
51108
|
assetManifest,
|
|
51037
|
-
assetBaseUrl,
|
|
51038
51109
|
scale,
|
|
51039
51110
|
showMinimap,
|
|
51040
51111
|
enableCamera,
|
|
@@ -51076,7 +51147,6 @@ function SpaceShmupBoard({
|
|
|
51076
51147
|
units,
|
|
51077
51148
|
features,
|
|
51078
51149
|
assetManifest,
|
|
51079
|
-
assetBaseUrl,
|
|
51080
51150
|
scale,
|
|
51081
51151
|
showMinimap,
|
|
51082
51152
|
enableCamera,
|
|
@@ -51118,7 +51188,6 @@ function SpaceStationBoard({
|
|
|
51118
51188
|
units,
|
|
51119
51189
|
features,
|
|
51120
51190
|
assetManifest,
|
|
51121
|
-
assetBaseUrl,
|
|
51122
51191
|
scale,
|
|
51123
51192
|
showMinimap,
|
|
51124
51193
|
enableCamera,
|
|
@@ -51253,7 +51322,6 @@ function SportsBoard({
|
|
|
51253
51322
|
units,
|
|
51254
51323
|
features,
|
|
51255
51324
|
assetManifest,
|
|
51256
|
-
assetBaseUrl,
|
|
51257
51325
|
scale,
|
|
51258
51326
|
showMinimap,
|
|
51259
51327
|
enableCamera,
|
|
@@ -51273,7 +51341,7 @@ var init_SportsBoard = __esm({
|
|
|
51273
51341
|
}
|
|
51274
51342
|
});
|
|
51275
51343
|
function Sprite({
|
|
51276
|
-
spritesheet =
|
|
51344
|
+
spritesheet = DEFAULT_SPRITESHEET,
|
|
51277
51345
|
frameWidth = 64,
|
|
51278
51346
|
frameHeight = 64,
|
|
51279
51347
|
frame = 0,
|
|
@@ -51326,7 +51394,7 @@ function Sprite({
|
|
|
51326
51394
|
position: "absolute",
|
|
51327
51395
|
width: frameWidth,
|
|
51328
51396
|
height: frameHeight,
|
|
51329
|
-
backgroundImage: `url(${spritesheet})`,
|
|
51397
|
+
backgroundImage: `url(${spritesheet.url})`,
|
|
51330
51398
|
backgroundPosition,
|
|
51331
51399
|
backgroundRepeat: "no-repeat",
|
|
51332
51400
|
imageRendering: "pixelated",
|
|
@@ -51374,11 +51442,17 @@ function drawSprite(ctx, image, props) {
|
|
|
51374
51442
|
);
|
|
51375
51443
|
ctx.restore();
|
|
51376
51444
|
}
|
|
51445
|
+
var DEFAULT_SPRITESHEET;
|
|
51377
51446
|
var init_Sprite = __esm({
|
|
51378
51447
|
"components/game/atoms/Sprite.tsx"() {
|
|
51379
51448
|
"use client";
|
|
51380
51449
|
init_useEventBus();
|
|
51381
51450
|
init_spriteAnimation();
|
|
51451
|
+
DEFAULT_SPRITESHEET = {
|
|
51452
|
+
url: "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
|
|
51453
|
+
role: "tile",
|
|
51454
|
+
category: "tile"
|
|
51455
|
+
};
|
|
51382
51456
|
}
|
|
51383
51457
|
});
|
|
51384
51458
|
exports.StatCard = void 0;
|
|
@@ -53206,7 +53280,6 @@ function TanksBoard({
|
|
|
53206
53280
|
units,
|
|
53207
53281
|
features,
|
|
53208
53282
|
assetManifest,
|
|
53209
|
-
assetBaseUrl,
|
|
53210
53283
|
scale,
|
|
53211
53284
|
showMinimap,
|
|
53212
53285
|
enableCamera,
|
|
@@ -53534,15 +53607,6 @@ var init_ToastSlot = __esm({
|
|
|
53534
53607
|
exports.ToastSlot.displayName = "ToastSlot";
|
|
53535
53608
|
}
|
|
53536
53609
|
});
|
|
53537
|
-
function resolveManifestUrl4(manifest, relative) {
|
|
53538
|
-
if (relative == null || relative === "") return void 0;
|
|
53539
|
-
if (/^https?:\/\//.test(relative)) return relative;
|
|
53540
|
-
const base = manifest?.baseUrl;
|
|
53541
|
-
if (base == null) return relative;
|
|
53542
|
-
const cleanBase = base.replace(/\/$/, "");
|
|
53543
|
-
const cleanRel = relative.replace(/^\//, "");
|
|
53544
|
-
return `${cleanBase}/${cleanRel}`;
|
|
53545
|
-
}
|
|
53546
53610
|
function readPlayer(v) {
|
|
53547
53611
|
if (v == null || typeof v !== "object") return void 0;
|
|
53548
53612
|
const o = v;
|
|
@@ -53595,10 +53659,10 @@ function TopDownShooterBoard({
|
|
|
53595
53659
|
const wave = propWave ?? num(board.wave, 1);
|
|
53596
53660
|
const lives = propLives ?? num(board.lives, 3);
|
|
53597
53661
|
const result = propResult ?? (str(board.result) || "none");
|
|
53598
|
-
const playerSprite =
|
|
53599
|
-
const enemySprite =
|
|
53600
|
-
const projectileSprite =
|
|
53601
|
-
const backgroundSprite =
|
|
53662
|
+
const playerSprite = assetManifest?.units?.player?.url;
|
|
53663
|
+
const enemySprite = assetManifest?.units?.enemy?.url;
|
|
53664
|
+
const projectileSprite = assetManifest?.features?.projectile?.url;
|
|
53665
|
+
const backgroundSprite = assetManifest?.background;
|
|
53602
53666
|
const spriteUrls = React85.useMemo(
|
|
53603
53667
|
() => [playerSprite, enemySprite, projectileSprite].filter((u) => u != null),
|
|
53604
53668
|
[playerSprite, enemySprite, projectileSprite]
|
|
@@ -53765,7 +53829,6 @@ function TopDownShooterBoard({
|
|
|
53765
53829
|
width,
|
|
53766
53830
|
height,
|
|
53767
53831
|
backgroundImage: backgroundSprite,
|
|
53768
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
53769
53832
|
onDraw
|
|
53770
53833
|
}
|
|
53771
53834
|
),
|
|
@@ -53890,15 +53953,6 @@ var init_TopDownShooterTemplate = __esm({
|
|
|
53890
53953
|
TopDownShooterTemplate.displayName = "TopDownShooterTemplate";
|
|
53891
53954
|
}
|
|
53892
53955
|
});
|
|
53893
|
-
function resolveManifestUrl5(manifest, relative) {
|
|
53894
|
-
if (relative == null) return void 0;
|
|
53895
|
-
if (/^https?:\/\//.test(relative)) return relative;
|
|
53896
|
-
const base = manifest?.baseUrl;
|
|
53897
|
-
if (base == null) return relative;
|
|
53898
|
-
const cleanBase = base.replace(/\/$/, "");
|
|
53899
|
-
const cleanRel = relative.replace(/^\//, "");
|
|
53900
|
-
return `${cleanBase}/${cleanRel}`;
|
|
53901
|
-
}
|
|
53902
53956
|
function buildDefaultTDTiles() {
|
|
53903
53957
|
const pathSet = new Set(DEFAULT_TD_PATH.map((p2) => `${p2.x},${p2.y}`));
|
|
53904
53958
|
const tiles = [];
|
|
@@ -53918,18 +53972,18 @@ function buildDefaultTDTiles() {
|
|
|
53918
53972
|
function tilesToIso2(tiles, manifest) {
|
|
53919
53973
|
return tiles.map((t) => {
|
|
53920
53974
|
const key = t.terrain ?? "ground";
|
|
53921
|
-
const
|
|
53975
|
+
const terrainSprite = t.terrainSprite != null ? makeAsset(t.terrainSprite, "tile") : manifest?.terrains?.[key] ?? manifest?.terrains?.ground;
|
|
53922
53976
|
return {
|
|
53923
53977
|
x: t.x,
|
|
53924
53978
|
y: t.y,
|
|
53925
53979
|
terrain: t.terrain,
|
|
53926
|
-
terrainSprite
|
|
53980
|
+
terrainSprite,
|
|
53927
53981
|
passable: t.passable
|
|
53928
53982
|
};
|
|
53929
53983
|
});
|
|
53930
53984
|
}
|
|
53931
53985
|
function creepsToUnits(creeps, manifest) {
|
|
53932
|
-
const sprite =
|
|
53986
|
+
const sprite = manifest?.units?.creep;
|
|
53933
53987
|
return creeps.map((c) => ({
|
|
53934
53988
|
id: c.id,
|
|
53935
53989
|
position: { x: c.x, y: c.y },
|
|
@@ -53947,14 +54001,14 @@ function heroToUnit(hero, manifest) {
|
|
|
53947
54001
|
position: { x: hero.x, y: hero.y },
|
|
53948
54002
|
name: "Hero",
|
|
53949
54003
|
team: "player",
|
|
53950
|
-
sprite:
|
|
54004
|
+
sprite: manifest?.units?.hero,
|
|
53951
54005
|
unitType: "hero",
|
|
53952
54006
|
health: 1,
|
|
53953
54007
|
maxHealth: 1
|
|
53954
54008
|
};
|
|
53955
54009
|
}
|
|
53956
54010
|
function towersToFeatures(towers, manifest) {
|
|
53957
|
-
const sprite =
|
|
54011
|
+
const sprite = manifest?.features?.tower;
|
|
53958
54012
|
return towers.map((t) => ({
|
|
53959
54013
|
id: t.id,
|
|
53960
54014
|
x: t.x,
|
|
@@ -54152,7 +54206,6 @@ function TowerDefenseBoard({
|
|
|
54152
54206
|
tiles: isoTiles,
|
|
54153
54207
|
units: isoUnits,
|
|
54154
54208
|
features: towerFeatures,
|
|
54155
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
54156
54209
|
assetManifest,
|
|
54157
54210
|
validMoves,
|
|
54158
54211
|
hoveredTile,
|
|
@@ -54196,6 +54249,7 @@ var TD_GRID_W, TD_GRID_H, DEFAULT_TD_PATH, DEFAULT_TD_TILES;
|
|
|
54196
54249
|
var init_TowerDefenseBoard = __esm({
|
|
54197
54250
|
"components/game/organisms/TowerDefenseBoard.tsx"() {
|
|
54198
54251
|
"use client";
|
|
54252
|
+
init_makeAsset();
|
|
54199
54253
|
init_cn();
|
|
54200
54254
|
init_useEventBus();
|
|
54201
54255
|
init_Box();
|
|
@@ -54525,15 +54579,6 @@ var init_UncontrolledBattleBoard = __esm({
|
|
|
54525
54579
|
UncontrolledBattleBoard.displayName = "UncontrolledBattleBoard";
|
|
54526
54580
|
}
|
|
54527
54581
|
});
|
|
54528
|
-
function resolveManifestUrl6(manifest, relative) {
|
|
54529
|
-
if (relative == null) return void 0;
|
|
54530
|
-
if (/^https?:\/\//.test(relative)) return relative;
|
|
54531
|
-
const base = manifest?.baseUrl;
|
|
54532
|
-
if (base == null) return relative;
|
|
54533
|
-
const cleanBase = base.replace(/\/$/, "");
|
|
54534
|
-
const cleanRel = relative.replace(/^\//, "");
|
|
54535
|
-
return `${cleanBase}/${cleanRel}`;
|
|
54536
|
-
}
|
|
54537
54582
|
function VisualNovelBoard({
|
|
54538
54583
|
entity,
|
|
54539
54584
|
nodes: propNodes,
|
|
@@ -54568,11 +54613,11 @@ function VisualNovelBoard({
|
|
|
54568
54613
|
const currentNodeId = propCurrentNodeId ?? (str(board.currentNodeId) || nodes[0]?.id);
|
|
54569
54614
|
const currentNode = nodes.find((n) => n.id === currentNodeId) ?? nodes[0];
|
|
54570
54615
|
const backgroundImage = React85.useMemo(
|
|
54571
|
-
() =>
|
|
54616
|
+
() => assetManifest?.backgrounds?.[currentNode?.backgroundKey ?? ""],
|
|
54572
54617
|
[assetManifest, currentNode?.backgroundKey]
|
|
54573
54618
|
);
|
|
54574
54619
|
const portraitUrl = React85.useMemo(
|
|
54575
|
-
() =>
|
|
54620
|
+
() => assetManifest?.portraits?.[currentNode?.portraitKey ?? ""],
|
|
54576
54621
|
[assetManifest, currentNode?.portraitKey]
|
|
54577
54622
|
);
|
|
54578
54623
|
const dialogueChoices = React85.useMemo(
|
|
@@ -54746,7 +54791,7 @@ function buildDefaultWorldTiles() {
|
|
|
54746
54791
|
for (let x = 0; x < WORLD_GRID_W; x++) {
|
|
54747
54792
|
const isBorder = x === 0 || y === 0 || x === WORLD_GRID_W - 1 || y === WORLD_GRID_H - 1;
|
|
54748
54793
|
const def = isBorder ? WORLD_TERRAIN_DEFS[3] : WORLD_TERRAIN_DEFS[(x * 5 + y * 3 + (x ^ y)) % (WORLD_TERRAIN_DEFS.length - 1)];
|
|
54749
|
-
tiles.push({ x, y, terrain: def.terrain, terrainSprite: def.sprite, passable: def.passable });
|
|
54794
|
+
tiles.push({ x, y, terrain: def.terrain, terrainSprite: makeAsset(def.sprite, "tile"), passable: def.passable });
|
|
54750
54795
|
}
|
|
54751
54796
|
}
|
|
54752
54797
|
return tiles;
|
|
@@ -54790,7 +54835,12 @@ function WorldMapBoard({
|
|
|
54790
54835
|
const resolved = boardEntity(entity);
|
|
54791
54836
|
const entityUnits = rows(resolved?.units);
|
|
54792
54837
|
const entityTiles = rows(resolved?.tiles);
|
|
54793
|
-
const features = propFeatures ?? rows(resolved?.features)
|
|
54838
|
+
const features = propFeatures ?? rows(resolved?.features).map((r) => ({
|
|
54839
|
+
id: r.id == null ? void 0 : str(r.id),
|
|
54840
|
+
x: num(r.x),
|
|
54841
|
+
y: num(r.y),
|
|
54842
|
+
type: str(r.type)
|
|
54843
|
+
}));
|
|
54794
54844
|
const selectedHeroId = resolved?.selectedHeroId ?? null;
|
|
54795
54845
|
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
54796
54846
|
const backgroundImage = resolved?.backgroundImage;
|
|
@@ -54800,7 +54850,7 @@ function WorldMapBoard({
|
|
|
54800
54850
|
x: num(t.x),
|
|
54801
54851
|
y: num(t.y),
|
|
54802
54852
|
terrain: str(t.terrain),
|
|
54803
|
-
terrainSprite: t.terrainSprite == null ? void 0 : str(t.terrainSprite),
|
|
54853
|
+
terrainSprite: t.terrainSprite == null ? void 0 : makeAsset(str(t.terrainSprite), "tile"),
|
|
54804
54854
|
passable: t.passable !== false
|
|
54805
54855
|
})),
|
|
54806
54856
|
[entityTiles]
|
|
@@ -54816,7 +54866,7 @@ function WorldMapBoard({
|
|
|
54816
54866
|
team: str(u.team) === "enemy" ? "enemy" : "player",
|
|
54817
54867
|
health: num(u.health) || 100,
|
|
54818
54868
|
maxHealth: num(u.maxHealth) || 100,
|
|
54819
|
-
sprite: u.sprite == null ? void 0 : str(u.sprite)
|
|
54869
|
+
sprite: u.sprite == null ? void 0 : makeAsset(str(u.sprite), "player")
|
|
54820
54870
|
})),
|
|
54821
54871
|
[entityUnits, propUnits]
|
|
54822
54872
|
);
|
|
@@ -54998,7 +55048,6 @@ function WorldMapBoard({
|
|
|
54998
55048
|
onTileHover: (x, y) => setHoveredTile({ x, y }),
|
|
54999
55049
|
onTileLeave: () => setHoveredTile(null),
|
|
55000
55050
|
scale,
|
|
55001
|
-
assetBaseUrl: assetManifest?.baseUrl,
|
|
55002
55051
|
assetManifest,
|
|
55003
55052
|
backgroundImage,
|
|
55004
55053
|
effectSpriteUrls,
|
|
@@ -55021,6 +55070,7 @@ var WORLD_CDN, WORLD_GRID_W, WORLD_GRID_H, WORLD_TERRAIN_DEFS, DEFAULT_WORLD_TIL
|
|
|
55021
55070
|
var init_WorldMapBoard = __esm({
|
|
55022
55071
|
"components/game/organisms/WorldMapBoard.tsx"() {
|
|
55023
55072
|
"use client";
|
|
55073
|
+
init_makeAsset();
|
|
55024
55074
|
init_cn();
|
|
55025
55075
|
init_useEventBus();
|
|
55026
55076
|
init_Stack();
|
|
@@ -55074,62 +55124,66 @@ function WorldMapTemplate({
|
|
|
55074
55124
|
}
|
|
55075
55125
|
);
|
|
55076
55126
|
}
|
|
55077
|
-
var CDN5, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
|
|
55127
|
+
var CDN5, mountain, water, grass, road, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
|
|
55078
55128
|
var init_WorldMapTemplate = __esm({
|
|
55079
55129
|
"components/game/templates/WorldMapTemplate.tsx"() {
|
|
55080
55130
|
init_WorldMapBoard();
|
|
55131
|
+
init_makeAsset();
|
|
55081
55132
|
CDN5 = "https://almadar-kflow-assets.web.app/shared";
|
|
55133
|
+
mountain = makeAsset(`${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png`, "tile");
|
|
55134
|
+
water = makeAsset(`${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png`, "tile");
|
|
55135
|
+
grass = makeAsset(`${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png`, "tile");
|
|
55136
|
+
road = makeAsset(`${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png`, "tile");
|
|
55082
55137
|
DEFAULT_WORLDMAP_TILES = [
|
|
55083
|
-
{ x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite:
|
|
55084
|
-
{ x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite:
|
|
55085
|
-
{ x: 2, y: 0, terrain: "water", passable: false, terrainSprite:
|
|
55086
|
-
{ x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite:
|
|
55087
|
-
{ x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite:
|
|
55088
|
-
{ x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite:
|
|
55089
|
-
{ x: 1, y: 1, terrain: "grass", passable: true, terrainSprite:
|
|
55090
|
-
{ x: 2, y: 1, terrain: "grass", passable: true, terrainSprite:
|
|
55091
|
-
{ x: 3, y: 1, terrain: "grass", passable: true, terrainSprite:
|
|
55092
|
-
{ x: 4, y: 1, terrain: "water", passable: false, terrainSprite:
|
|
55093
|
-
{ x: 0, y: 2, terrain: "water", passable: false, terrainSprite:
|
|
55094
|
-
{ x: 1, y: 2, terrain: "grass", passable: true, terrainSprite:
|
|
55095
|
-
{ x: 2, y: 2, terrain: "grass", passable: true, terrainSprite:
|
|
55096
|
-
{ x: 3, y: 2, terrain: "grass", passable: true, terrainSprite:
|
|
55097
|
-
{ x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite:
|
|
55098
|
-
{ x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite:
|
|
55099
|
-
{ x: 1, y: 3, terrain: "grass", passable: true, terrainSprite:
|
|
55100
|
-
{ x: 2, y: 3, terrain: "grass", passable: true, terrainSprite:
|
|
55101
|
-
{ x: 3, y: 3, terrain: "grass", passable: true, terrainSprite:
|
|
55102
|
-
{ x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite:
|
|
55103
|
-
{ x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite:
|
|
55104
|
-
{ x: 1, y: 4, terrain: "water", passable: false, terrainSprite:
|
|
55105
|
-
{ x: 2, y: 4, terrain: "grass", passable: true, terrainSprite:
|
|
55106
|
-
{ x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite:
|
|
55107
|
-
{ x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite:
|
|
55138
|
+
{ x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55139
|
+
{ x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55140
|
+
{ x: 2, y: 0, terrain: "water", passable: false, terrainSprite: water },
|
|
55141
|
+
{ x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55142
|
+
{ x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55143
|
+
{ x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55144
|
+
{ x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55145
|
+
{ x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55146
|
+
{ x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55147
|
+
{ x: 4, y: 1, terrain: "water", passable: false, terrainSprite: water },
|
|
55148
|
+
{ x: 0, y: 2, terrain: "water", passable: false, terrainSprite: water },
|
|
55149
|
+
{ x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55150
|
+
{ x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: road },
|
|
55151
|
+
{ x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55152
|
+
{ x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55153
|
+
{ x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55154
|
+
{ x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55155
|
+
{ x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55156
|
+
{ x: 3, y: 3, terrain: "grass", passable: true, terrainSprite: road },
|
|
55157
|
+
{ x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55158
|
+
{ x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55159
|
+
{ x: 1, y: 4, terrain: "water", passable: false, terrainSprite: water },
|
|
55160
|
+
{ x: 2, y: 4, terrain: "grass", passable: true, terrainSprite: grass },
|
|
55161
|
+
{ x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite: mountain },
|
|
55162
|
+
{ x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite: mountain }
|
|
55108
55163
|
];
|
|
55109
55164
|
DEFAULT_WORLDMAP_UNITS = [
|
|
55110
|
-
{ id: "h1", position: { x: 1, y: 1 }, unitType: "hero", name: "Amir", team: "player", health: 10, maxHealth: 10, sprite: `${CDN5}/sprite-sheets/amir-sprite-sheet-se.png
|
|
55111
|
-
{ id: "h2", position: { x: 3, y: 3 }, unitType: "scout", name: "Archivist", team: "player", health: 10, maxHealth: 10, sprite: `${CDN5}/sprite-sheets/archivist-sprite-sheet-se.png
|
|
55165
|
+
{ id: "h1", position: { x: 1, y: 1 }, unitType: "hero", name: "Amir", team: "player", health: 10, maxHealth: 10, sprite: makeAsset(`${CDN5}/sprite-sheets/amir-sprite-sheet-se.png`, "player") },
|
|
55166
|
+
{ id: "h2", position: { x: 3, y: 3 }, unitType: "scout", name: "Archivist", team: "player", health: 10, maxHealth: 10, sprite: makeAsset(`${CDN5}/sprite-sheets/archivist-sprite-sheet-se.png`, "npc") }
|
|
55112
55167
|
];
|
|
55113
55168
|
DEFAULT_WORLDMAP_FEATURES = [
|
|
55114
|
-
{ id: "f1", x: 2, y: 2, type: "capital", sprite: `${CDN5}/scenes/world/capital.png
|
|
55115
|
-
{ id: "f2", x: 4, y: 2, type: "power_node", sprite: `${CDN5}/world-map/power_node.png
|
|
55169
|
+
{ id: "f1", x: 2, y: 2, type: "capital", sprite: makeAsset(`${CDN5}/scenes/world/capital.png`, "decoration") },
|
|
55170
|
+
{ id: "f2", x: 4, y: 2, type: "power_node", sprite: makeAsset(`${CDN5}/world-map/power_node.png`, "decoration") }
|
|
55116
55171
|
];
|
|
55117
55172
|
DEFAULT_WORLDMAP_MANIFEST = {
|
|
55118
|
-
|
|
55119
|
-
|
|
55120
|
-
|
|
55121
|
-
|
|
55122
|
-
|
|
55123
|
-
|
|
55124
|
-
},
|
|
55173
|
+
terrains: makeAssetMap({
|
|
55174
|
+
grass: `${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png`,
|
|
55175
|
+
water: `${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png`,
|
|
55176
|
+
mountain: `${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png`,
|
|
55177
|
+
road: `${CDN5}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png`
|
|
55178
|
+
}, "tile"),
|
|
55125
55179
|
units: {
|
|
55126
|
-
hero:
|
|
55127
|
-
scout:
|
|
55180
|
+
hero: makeAsset(`${CDN5}/sprite-sheets/amir-sprite-sheet-se.png`, "player"),
|
|
55181
|
+
scout: makeAsset(`${CDN5}/sprite-sheets/archivist-sprite-sheet-se.png`, "npc")
|
|
55128
55182
|
},
|
|
55129
|
-
features: {
|
|
55130
|
-
capital:
|
|
55131
|
-
power_node:
|
|
55132
|
-
}
|
|
55183
|
+
features: makeAssetMap({
|
|
55184
|
+
capital: `${CDN5}/scenes/world/capital.png`,
|
|
55185
|
+
power_node: `${CDN5}/world-map/power_node.png`
|
|
55186
|
+
}, "decoration")
|
|
55133
55187
|
};
|
|
55134
55188
|
WorldMapTemplate.displayName = "WorldMapTemplate";
|
|
55135
55189
|
}
|