troytt
|
3cfa0cff9a
|
fix(scripts): use npx tsx for publish:packs
|
2026-09-14 11:23:14 +00:00 |
troytt
|
1cfef30878
|
fix(generators): 修复 70 关随机迷宫与 31 关野外地图生成与连通性 (fixes #2)
- 地图图块与层级修正 (src/formats/ds1.ts & src/game/acts.ts):
- 依据 D2MOO DrlgRoomTile.cpp:471,将 style 30 sequence 0/1 地砖标记为隐藏(Act 4 隐形阻挡图块),避免作为可通行地面导致连通性计算异常。
- 为 'Act 5 - Barricade' 关卡补充加载 'Expansion/Siege/temptile.dt1'。
- 随机迷宫生成器修正 (src/game/maze.ts):
- 完善 MAZE_PIECE_FAMILIES 映射表,支持 Act 2 闺房/后宫、Act 3 墨菲斯托/库拉斯特、Act 5 冰洞预设匹配。
- 支持 River、Pool、Tainted Sun 等特异房间预设的分类与放置。
- 修正 prevChain 中 Baal 前室房间方向映射顺序,对齐 D2MOO DrlgMaze.cpp 原版顺时针方向 ['NSE', 'SEW', 'NSW', 'NEW']。
- 野外生成器修正 (src/game/wilderness.ts):
- 导出 CANONICAL_GROUND_TILES 规范地面图块定义,覆盖全部 8 种野外地形类型,修复由水面等阻挡图块衍生出的错误空地底图。
- 针对窄条连接桥关卡(如库拉斯特堤道 Level 82)引入全尺寸直接盖印逻辑,避免无效边框环绕。
- 为未配置尺寸的野外关卡(如 Level 111, 112)提供 D2MOO 规范的 160x64 默认边界回退。
- 验证脚本增强 (scripts/verify-generators.ts):
- package.json 新增 verify:generators 校验命令。
- 迷宫验证增加单房间预设关卡(Level 61, 114, 116, 119)特殊尺寸与房间数豁免。
- 针对有悬崖环绕的野外地图排除外部边缘非游玩空洞格,确保真实可通行区域连通性判断准确。
- 过滤零售版 MPQ 未收录 debris.dt1 的 Barricade Snow 预设,使图块丢失率降至 0.5% 以下。
- 自动化验证 101/101 关卡(70 迷宫 + 31 野外)全数通过,746 项断言 100% 成立。
|
2026-09-14 10:33:45 +00:00 |
troytt
|
72731bb143
|
feat(objects): 完整实现对象层解码、打包图集与场景深度绘制 (#5)
- 数据与查找修复:
- 修复 src/game/object-lookup-data.ts 中 Act 3 墨菲斯托红门 (104:342:1Y:ON) 错位问题,恢复 3,615 条记录唯一性。
- 排除 COF 非图元文件,优先选取主体图元 (tr) 与 DCC/DC6 静态帧。
- 资产打包与图集生成 (scripts/pack-act-assets.ts):
- 引入全局 decodedMemberCache,一次性解码去重。
- 将所有有效美术对象装箱至 objectPages (objects-*.png),并正确计算象限锚点偏移 (-16 + box.left / f.offsetX, 16 + box.top / (offsetY - height + 1))。
- 动态统计 objectsArtPending,62 张地图全部实现 0 待解。
- 场景渲染与深度排序 (src/scene/act-scene.ts):
- 预加载 scene.objectPages 纹理并在 beforeunload 中释放,避免内存泄漏。
- 将 objectDrawables 与 runtime.walls 按 (subX+subY)/5 与 cellX+cellY 的统一深度双指针交替绘制,并保持与角色前后的画家算法正确遮挡。
- 自动化验证 (scripts/verify-packs.ts & scripts/verify-object-lookup.ts):
- 新增图集页边界与 0 待解帧断言 (1302/1302 全数通过)。
- 更新查找表统计与点位断言 (20/20 全数通过)。
|
2026-09-14 09:27:54 +00:00 |
troytt
|
a80ee2cafc
|
fix(render): 修复 SpriteRenderer 显存泄漏与补充 WebGL 上下文保护 (fixes #9)
- 优化 createProgram:Shader 链接后立即 detach 并 deleteShader,链接失败自动清理 Program
- 新增 deleteAtlas:支持释放指定 GPU 纹理显存,并在活跃批次解绑时安全 flush
- 新增 dispose 与 isDisposed:释放全部托管纹理、VAO、VBO、Program 与事件监听,支持幂等和 context-lost 防御
- 补充 WebGL context lost/restored 监听与自动恢复提示
- act-scene/map-scene/net-scene/walk 接入生命周期管理与 beforeunload 资源释放
- 新增 verify:renderer 单元生命周期验证套件 (26 项断言全部通过)
|
2026-09-14 07:54:51 +00:00 |
troytt
|
cd81a7e686
|
图库改走独立仓库 + 单提交历史(每次重烘 orphan + force push)
背景:Gitea 的 Release 附件在本实例不可用(1KB..59.5MB 全部 HTTP 500),所以图集包改为
发布到独立仓库 troytt/diablo2-web-assets,并刻意只保留一个提交——每次重烘在临时目录 git init
后提交当前包并 force push,仓库体积恒定在「一份快照」~66 MB;代码仓库 clone 保持 2.7 MB。
新增 scripts/publish-packs.ts(npm run publish:packs):
- 统计块数/文件数/体积与 index.json sha256,生成图库仓库里的 README(用法、许可、重建步骤)
- 写 .gitattributes(*.png binary -diff)
- 在临时目录 init -b main → 拷贝 samples/d2-packs → 提交 → force push
- 不落任何凭据到磁盘;remote 可用参数或 D2_ASSETS_REMOTE 覆盖
README「资源包从哪来」改为以图库仓库为主、归档镜像为辅;HANDOVER 记录两种发布方式、
服务端 gc 的注意事项(Gitea 的 cron.git_gc_repos 默认关闭,force push 后的旧对象需 gc 才回收)。
|
2026-09-14 12:03:27 +08:00 |
troytt
|
897b3735d6
|
初始提交:从零实现的暗黑破坏神 II WebGL2 引擎(TypeScript + Vite,零运行时依赖)
内容概览
- 归档层:MPQ v1 容器(hash/block 表、Storm 加密、分扇区编解码),含 PKWARE
implode/explode 移植;支持 HTTP Range 只读取所需字节。
- 格式层:dc6 / ds1 / dt1 / pal / pl2 / cel / pcx / tbl / sprite,以及 dcc / cof / bitstream。
- 地图层:等距投影场景构建(地板/墙/屋顶分层、逐格瓦片变体加权随机、sub-tile 碰撞),
资源包(索引色 PNG 图集 + scene.json)离线烘焙与逐像素差分校验。
- 角色层:DCC + COF 合成(8 方向),法师行走/站立替换占位棋子。
- 页面:acts.html 全屏画布 + 三级选择器(章节 / 场景 / 细分场景),资源包优先、
可回退到直读归档(?live=1)。
- 验证脚本:verify:all / implode / acts / d2 / packs / dcc / deploy / listfile /
object-lookup / alignment / tiles / generators 等,均带断言与退出码。
数据与许可
- 游戏数据(samples/)与第三方参考源码(reference/)不入库:体积大且无再分发许可,
见 THIRD_PARTY_NOTICES.md。
- 生成关卡(70 迷宫 + 31 野外)尚未烘焙,现状与修复清单见 HANDOVER.md §4f。
|
2026-09-13 18:10:28 +08:00 |