Skip to content

Latest commit

 

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Dino Pure Native C++ / WebAssembly

在线运行: https://krysof.github.io/dino/

这个仓库只承载 GitHub Pages 的编译后二进制产物,不公开游戏主程序的 C++、汇编、 反编译源码或生成脚本。页面无需选择或上传 ROM。

发布物

  • site/dino.wasm:逆向生成的 C++ 主程序和原生视频、内存、输入运行时;
  • site/dino.data:由完整帧、场景、索引图块、中文字体等 PNG 编译的视觉资源,以及 QSound、主程序数据和 11 个已编译 Lua 数据脚本;
  • site/dino.js:Emscripten 浏览器装载胶水;
  • site/mobile-game-shell.js:响应式横屏/竖屏降级与多点触控输入层;
  • site/index.html:Canvas/WebAudio、键盘、手柄和触摸前端。

11 个 Lua 源脚本由八关流程脚本以及 GUI、对白、Demo 三个演出脚本组成。它们负责敌人/道具 出现位置、容器内容、锁屏波次、关卡推进、384×224 GUI 坐标、621 条汉化文本,以及 12 段 Demo/过场的图块、位置和时间轴数据;敌人 AI、碰撞、动画与对象状态机仍由 C++ 执行。 发布包仅包含剥离调试信息后的 Lua 5.4 字节码,不包含可编辑的 .lua 源文件或注释; Lua 许可见 site/lua-license.html。发布版不包含可编辑 PNG,但运行时视觉资源全部由 PNG 编译:3513 张完整人物/敌人/物品/特效帧、7 组完整场景页、中文标题和 16×16 字体,以及覆盖动态 HUD、动态地图和未匹配对象的 8×8/16×16/32×32 索引 PNG 图集。完整场景不能安全覆盖的门、箱子、行滚动和调色板变化仍按实时状态组合,但每个栅格像素同样来自 PNG。

主 CPU、视频、VBlank、内存和输入都不依赖 CPS/libretro/68000 模拟器。唯一允许的模拟 边界是 Z80/QSound 音频。构建审计拒绝 C/C++、汇编、Python 源文件、ROM 压缩包以及 libretro/CPS 执行核心符号;已验证主程序可执行 C++ 覆盖率为 100%。

当前发行版包含扩展简体中文汉化:621 条精确规则覆盖投币/开始、人物姓名和能力、 全部 41 个 HUD 敌人/Boss 名称、八章标题、关卡地点、开场叙事、过场对白、Boss 台词与 结局文本,并补齐三地区开机警告、授权页、宝物、全部食物和武器标签。开机版权声明不再逐句 硬塞进原版 8×8 行,而是按 384×224 画面重新分行并居中;日版、美版和世界版分别保留准确的 地区含义。639 个中文字形已经转换成 1 bpp 二进制数组并封装在 dino.data 中。程序表内 318 条大字体物理行、41 个 HUD 名称、17 条警告行、7 条授权行、17 个宝物/计分标签、18 个食物/状态标签、15 个武器标签、 19 个零散小字体标签、50 个排行榜名次和 7 个逐帧短残片均通过自动完整性审计; 20,000 帧演示循环与 10,000 帧自动游戏的可见英文审计结果均为 0。原版 8×8 英文字块 命中后统一以完整 16×16 中文字形替换,不再缩成难辨认的小字。人物选择卡片改为三行 紧凑排版;战斗 HUD 另外识别无后缀玩家短名,下移血条;玩家头像补足 8 像素,全部 39 种敌人/Boss 头像均保持原图不拉伸,并从各自原版中立动作的全身 sprite 逐像素裁取 24×16 上半身接在头部下方,延续原边框成为完整 24×32 头像;玩家名与敌人名均下移, 玩家名另向左移动 8 像素; 敌人死亡叉号也扩展到完整 24×32 槽位;敌人血条上移 8 像素。拾取物品 会把两行 8×8 原文合成一行 16×16“数值名称 分”(如 1000千元 分),持枪和武器名称 上移 8 像素,避免姓名、头像和血条重叠。17 种食物名称以及满血时的 GOOD !! 提示也已全部汉化,并由直接扫描原程序食物表的 完整性测试保护。网页开场和游戏 标题画面将 http://www.ff18.com白河愁 分成两行,并使用完整 16×16 字形。原英文 图块 Logo 已替换为一张完整的 304×104 透明 RGBA“恐龙新世纪”图片:程序从 Logo 滑入阶段 起识别并清除原 sprite 组合,再一次绘制中文图片,不依赖 CPS 调色板,也不会露出英文碎片。 CAPCOM、人物插画装饰字和 1P/2P/3P 等其他直接画进图形资源的美术文字仍保留原样。

移动端首次开始只尝试全屏,不锁定设备方向。手机竖屏时游戏画面、摇杆和动作按钮会一起 旋转 90°,形成横向操作视图;Canvas 内部分辨率仍固定为 384×224。虚拟摇杆支持 八方向、快速轻触、长按、多点方向+动作,并在取消、失焦和切后台时立即释放,不会卡键。 摇杆和动作按钮已放大,并按较短视口边自适应计算、设置上下限;仅在窄视口空间不足时 整体等比缩小,控制区会随之自动预留空间且不会互相重叠。攻击和跳跃 在 160 ms 内分别按下时会重整为同一个采样边沿,动作按钮也带有轻微滑出迟滞,方便可靠 触发原作的攻击+跳跃组合技。

键盘采用 MAME 标准街机默认布局:1P 为方向键、左 Ctrl/左 Alt5 投币、1 开始;2P 为 R/F/D/GA/S62;3P 为 I/K/J/L、右 Ctrl/右 Shift73。开始画面会在桌面设备上直接显示这张按键表。 P 用于暂停/继续,F3 用于完整重启原生主程序与 QSound;暂停时会释放按住输入并 停止游戏帧和声音;切后台自动暂停不会覆盖手动暂停状态。

Web 主循环固定为原机 59.63 Hz,不会随 120/144 Hz 显示器刷新率倍速运行。点击开始会 同步请求游戏根元素全屏;若浏览器策略拒绝,桌面右上角会出现可重试的全屏按钮。Web 输出 使用自定义 WebGL 最近邻纹理 Shader,并预留淡入和闪色 uniform;创建 WebGL 失败时自动 退回 SDL 兼容渲染器,不会阻止游戏启动。附加 ?png-debug=1 会按最终可见像素检查来源: PNG 像素保持原色,只有真正绕过 PNG 的栅格像素才显示紫色;当前自动游戏的非 PNG 像素为 0。 左上角还会分别显示完整动作帧与 PNG 图块回退数量,便于区分“完整图片”和“动态 PNG 组合”。

本版修正了动态函数表遗漏和主 CPU 帧调度失控:补全实际玩法发现的嵌套 pointer/offset 分发表目标,保持 68000 统一只读常量地址空间,并把每帧主 CPU 限定为原机周期预算。发布前 已通过 5,000 帧纯 C++ 游戏测试、1,200 帧参考 CPU 差分以及桌面/移动浏览器自动回归。

声音第三方代码

声音模块使用未修改的 FB Alpha Z80 core:

简体中文字形来自 Noto Sans CJK SC,许可见 site/zh-font-license.txt

游戏名称、程序、图形与声音归各自权利人所有。本页为非商业逆向与可移植性演示,不隶属 于 Capcom。

About

Playable Dino CPS-1 C++ reverse engineering port for WebAssembly (ROM not included)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages