gididaf/retro-rom-player

GitHub: gididaf/retro-rom-player

用 TypeScript 完全重写的《精灵宝可梦 黄》游戏引擎,在浏览器中从用户自备的 ROM 提取所有资源并运行,实现像素级完美还原。

Stars: 0 | Forks: 0

# retro-rom-player **[在线演示](https://gididaf.github.io/retro-rom-player/)** (请自备 ROM) 使用 TypeScript 完全重写的《精灵宝可梦 黄》,在浏览器中基于 HTML5 Canvas 运行。 这**不是模拟器** —— 这是对原版 Game Boy 游戏的从零开始的重制,从 [pret/pokeyellow](https://github.com/pret/pokeyellow) Z80 汇编反编译代码逐条指令移植为现代 TypeScript。目标是实现像素级完美、逻辑精确还原原版游戏,包括所有第一代的 Bug 和特性。 ## 运作原理 游戏引擎为纯 TypeScript(约 280KB)。**代码库中不包含任何游戏资源。** 相反,所有游戏数据(图像、音乐、对话、Pokemon 属性、地图)均在浏览器中直接从用户提供的《精灵宝可梦 黄》 ROM 文件中提取。 - 上传一次你自己的 ROM —— 系统会对其进行验证、提取并缓存到 IndexedDB - 再次访问时将直接从浏览器缓存中瞬间加载 - ROM 始终不会离开你的设备 ## 演示范围 这是一个正在进行中的演示,涵盖以下内容: - **标题画面** —— 带有皮卡丘动画和音乐 - **大木博士开场白** —— 完整的对话、命名、捕捉皮卡丘的情节 - **可游玩区域** —— 真新镇、1号道路、22号道路、常磐市 - **12 张地图** —— 包含 NPC、招牌、传送点和地图连接 - **野生战斗** —— 在 1号道路和 22号道路,包含完整的第一代机制 - **训练家对战** —— 带有 AI - **皮卡丘跟随者** —— 包含亲密度系统 - **完整音频** —— 50+ 首音乐曲目、37 种音效、4 声道 Game Boy 合成 - **图鉴、队伍、道具、保存/加载、商店、PC** ## 运行 ``` npm install npx vite ``` 在浏览器中打开 `http://localhost:5173` 并上传你的《精灵宝可梦 黄》 ROM。 ## 生产环境构建 ``` npm run build ``` 生成一个 `dist/` 文件夹(约 348KB),仅包含游戏引擎 —— 零游戏资源。可作为静态站点部署到任何地方。 ## 开发 ### 前置条件 - Node.js 18+ - 一个《精灵宝可梦 黄》 ROM 文件(`.gbc`) - [pret/pokeyellow](https://github.com/pret/pokeyellow) 反汇编项目(用于在实现功能时作为汇编参考) ### 设置 ``` npm install npm run setup # Extracts game data for tests ``` ### 命令 ``` npx vite # Dev server npx tsc --noEmit # Type-check npm test # Run tests (334 battle + other tests) ROM_PATH= npm test # Run all tests including ROM extraction verification ``` ### 项目结构 ``` src/ core/ # Shared types, constants, player state renderer/ # Canvas 2D rendering, palette system input/ # Keyboard input handling text/ # Dialogue system, charmap overworld/ # Maps, player, NPCs, movement battle/ # Full Gen 1 battle system menus/ # All menu screens (party, items, pokedex, title, etc.) audio/ # 4-channel Game Boy audio engine pikachu/ # Pikachu follower & happiness story/ # Cutscene scripts rom/ # ROM extraction system (14 extractors) script/ # Cutscene script engine ``` ## 架构 ROM 提取系统(`src/rom/`)包含 14 个专门的提取器,用于解析原始 Game Boy ROM 二进制格式: - **Pokemon 数据** —— 基础数值、属性、技能学习列表、进化(151 种) - **Sprites** —— 自定义第一代压缩格式的解压(302 个 Pokemon 精灵 + 训练家 + 地图人物) - **地图** —— 头部解析、方块布局、NPC、传送点、招牌、连接 - **音频** —— 音乐命令序列、音效、波形采样、噪声乐器 - **图形** —— 1bpp/2bpp 图块解码、图块集提取、字体渲染 - **文本** —— 从 ROM 偏移量解码字符映射编码的字符串 所有提取的数据通过 `fetch()` 重写提供给游戏引擎 —— 游戏代码无法区分它是在读取静态文件还是从 ROM 提取的数据。 ## 法律声明 本代码库**不包含任何任天堂的版权内容**。这是一个“净室”风格的引擎实现,要求用户提供自己合法获取的 ROM 文件。不包含也不分发任何 ROM 文件、游戏资源、精灵、音乐或对话文本。 该项目参考了 [pret/pokeyellow](https://github.com/pret/pokeyellow) 反汇编(一个社区逆向工程项目)作为重实现的技术参考。
标签:DNS解析, Game Boy, HTML5 Canvas, IndexedDB, MITM代理, ROM提取, TypeScript, Vite, Web游戏, Z80汇编, 云资产清单, 任天堂, 像素完美, 安全插件, 宝可梦, 开源项目, 怀旧游戏, 暗色界面, 浏览器游戏, 游戏开发, 游戏引擎, 粉丝项目, 自动化攻击, 逆向工程, 重制版