<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>WoW Classic on oolong.live</title>
        <link>https://oolong.live/tags/wow-classic/</link>
        <description>Recent content in WoW Classic on oolong.live</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <copyright>ZhxChen</copyright>
        <lastBuildDate>Tue, 10 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oolong.live/tags/wow-classic/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>在浏览器里重返艾泽拉斯：魔兽世界 1.12.1 实验项目</title>
        <link>https://oolong.live/p/%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E9%87%8C%E9%87%8D%E8%BF%94%E8%89%BE%E6%B3%BD%E6%8B%89%E6%96%AF%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C-1.12.1-%E5%AE%9E%E9%AA%8C%E9%A1%B9%E7%9B%AE/</link>
        <pubDate>Tue, 10 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://oolong.live/p/%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E9%87%8C%E9%87%8D%E8%BF%94%E8%89%BE%E6%B3%BD%E6%8B%89%E6%96%AF%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C-1.12.1-%E5%AE%9E%E9%AA%8C%E9%A1%B9%E7%9B%AE/</guid>
        <description>&lt;img src="https://oolong.live/p/%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E9%87%8C%E9%87%8D%E8%BF%94%E8%89%BE%E6%B3%BD%E6%8B%89%E6%96%AF%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C-1.12.1-%E5%AE%9E%E9%AA%8C%E9%A1%B9%E7%9B%AE/wow-browser-gameplay.webp" alt="Featured image of post 在浏览器里重返艾泽拉斯：魔兽世界 1.12.1 实验项目" /&gt;&lt;p&gt;最近，我基于开源项目做了一些二次开发，让魔兽世界 &lt;strong&gt;1.12.1（build 5875）&lt;/strong&gt; 的客户端能够在浏览器里运行。打开网页、登录账号，就可以尝试进入熟悉的艾泽拉斯。&lt;/p&gt;
&lt;p&gt;体验地址：&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://wow.oolong.live&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://wow.oolong.live&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是一个围绕 60 级经典版本的学习和实验项目，目前仍在测试中。浏览器兼容性、加载速度和部分游戏功能还在持续完善，测试数据也可能回退。&lt;/p&gt;
&lt;h2 id=&#34;从一个开源项目开始&#34;&gt;从一个开源项目开始
&lt;/h2&gt;&lt;p&gt;做这个项目的起点，是我看到了 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Arnesen/wenilla&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Arnesen/wenilla&lt;/a&gt;。能把这样一款游戏搬进浏览器，让我很想了解它是怎么实现的，也想在这个基础上继续折腾。&lt;/p&gt;
&lt;p&gt;这里先介绍一下几个上游项目的关系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/samwhosung/benilla-re&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;benilla-re&lt;/a&gt;&lt;/strong&gt;：针对魔兽世界 1.12.1 客户端的逆向研究，记录客户端行为、文件格式、网络协议和界面机制等，为重新实现客户端提供参考。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/samwhosung/benilla&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;benilla&lt;/a&gt;&lt;/strong&gt;：基于这些研究，使用 Rust 和 Bevy 游戏引擎从头编写的客户端实现，负责资源读取、世界渲染、角色动作、网络通信和 Lua 界面等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Arnesen/wenilla&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;wenilla&lt;/a&gt;&lt;/strong&gt;：在 benilla 的基础上加入浏览器移植，将客户端编译为 WebAssembly（WASM），通过 WebGPU 渲染游戏，并通过 WebSocket 接入游戏服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，这条技术路线可以理解为：&lt;strong&gt;逆向研究 → Rust / Bevy 客户端重写 → WASM 浏览器移植 → 我在此基础上的二次开发。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;flowchart LR
    A[&#34;benilla-re&lt;br/&gt;(C++ 逆向研究与协议分析)&#34;] --&gt; B[&#34;benilla&lt;br/&gt;(Rust + Bevy 客户端重构)&#34;]
    B --&gt; C[&#34;wenilla&lt;br/&gt;(WASM 编译 + WebGPU 渲染)&#34;]
    C --&gt; D[&#34;wow.oolong.live&lt;br/&gt;(二次开发：门户接入、资源流式加载、中文输入与插件)&#34;]
&lt;/div&gt;&lt;p&gt;其中，逆向研究、客户端重写以及浏览器移植的基础能力来自上游作者。我的工作主要围绕实际网页使用中的账号接入、资源加载、缓存、中文输入和插件适配展开。&lt;/p&gt;
&lt;h2 id=&#34;打开网页以后如何开始&#34;&gt;打开网页以后，如何开始？
&lt;/h2&gt;&lt;h3 id=&#34;1-准备支持-webgpu-的桌面浏览器&#34;&gt;1. 准备支持 WebGPU 的桌面浏览器
&lt;/h3&gt;&lt;p&gt;建议使用较新版本的桌面 Chrome 或 Edge，并确保浏览器能够使用显卡加速。实际是否可用，还取决于操作系统、显卡和驱动支持情况。&lt;/p&gt;
&lt;p&gt;可以先通过 &lt;a class=&#34;link&#34; href=&#34;https://webgpureport.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;webgpureport.org&lt;/a&gt; 查看当前浏览器的 WebGPU 支持情况。如果游戏页面提示浏览器不支持 WebGPU，需要先检查浏览器和运行环境。&lt;/p&gt;
&lt;p&gt;请使用完整的 HTTPS 地址访问：&lt;a class=&#34;link&#34; href=&#34;https://wow.oolong.live&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://wow.oolong.live&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;2-创建账号并登录&#34;&gt;2. 创建账号并登录
&lt;/h3&gt;&lt;p&gt;打开首页后，点击「创建账号」，按页面提示填写用户名、显示名称和密码；如果当前启用了邮箱验证，再按提示完成验证。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://image.oolong.live/uPic/wow-web-register.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;创建账号页面&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;注册成功后，使用刚创建的门户账号登录。已经有本站账号的用户可以直接登录；如果页面提示暂未开放注册，则以当时的站点设置为准。&lt;/p&gt;
&lt;h3 id=&#34;3-点击开始游戏&#34;&gt;3. 点击「开始游戏」
&lt;/h3&gt;&lt;p&gt;登录后，在欢迎页面点击「开始游戏」，进入游戏启动页。&lt;/p&gt;
&lt;p&gt;启动页提供实验插件选项，首次默认关闭。第一次体验可以先保持默认设置，之后再按需要选择插件。如果启用插件后遇到加载问题，可以使用页面上的「无插件重新进入」。&lt;/p&gt;
&lt;p&gt;确认后，再点击启动页的「开始游戏」，等待客户端初始化和基础资源加载。随后按游戏内界面提示创建或选择角色，进入世界。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;首次进入请保持页面打开，给它一些加载时间。&lt;/strong&gt; 下载和初始化所需时间取决于网络、电脑性能以及浏览器缓存情况。&lt;/p&gt;
&lt;h2 id=&#34;不用安装客户端为什么还需要下载&#34;&gt;不用安装客户端，为什么还需要下载？
&lt;/h2&gt;&lt;p&gt;这里的「不需要下载客户端」，指的是玩家不用手动下载安装包、安装桌面程序，也不用提前准备一整套本地游戏目录。浏览器仍然需要下载并运行网页版本的客户端代码。&lt;/p&gt;
&lt;p&gt;加载过程大致可以分为两部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一部分是启动所需的基础程序和数据。&lt;/strong&gt; 第一次启动时，浏览器需要获取 WASM 客户端、配套 JavaScript，以及启动界面所需的基础资源，并完成编译、初始化等工作。这也就是第一次打开时需要等待的那一部分「基础框架」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二部分是游戏过程中的按需资源加载。&lt;/strong&gt; 进入游戏后，客户端会根据当前场景和操作，继续请求需要的地图、模型、贴图、字体、声音等素材。例如，前往一个没去过的区域、看到一种新的装备外观，或者首次打开某个界面，都可能触发新的资源读取。&lt;/p&gt;
&lt;p&gt;整体思路就是：&lt;strong&gt;先准备能够启动的基础内容，后续用到什么，再加载相应的游戏素材。&lt;/strong&gt; 启动和入场阶段也会提前准备一部分必要资源，以减少随后的等待。&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;sequenceDiagram
    autonumber
    actor Player as 浏览器 (玩家)
    participant CDN as 静态素材分发 (CDN)
    participant Server as 游戏服务端 (vMaNGOS)

    Note over Player,CDN: 阶段一：基础框架启动
    Player-&gt;&gt;CDN: 1. 下载 WASM 客户端、JS 胶水代码及启动界面素材
    Player-&gt;&gt;Player: 2. 编译 WASM 模块，初始化 WebGPU 渲染环境

    Note over Player,Server: 阶段二：登录与角色就绪
    Player-&gt;&gt;Server: 3. WebSocket 握手，提交门户登录鉴权凭证
    Player-&gt;&gt;Server: 4. 选择/创建角色，进入世界

    Note over Player,CDN: 阶段三：按需资源流式加载 (On-Demand)
    loop 场景漫游与交互
        Player-&gt;&gt;CDN: 5. 异步请求当前视野所需的地图、模型、贴图与音频
        CDN--&gt;&gt;Player: 6. 响应数据块，存入浏览器缓存并上传显存渲染
    end
&lt;/div&gt;&lt;p&gt;已经下载的部分内容会在浏览器允许的情况下缓存下来，后续访问相同资源时可以复用。清理站点数据、更换浏览器、使用隐私模式，或者浏览器回收缓存后，都可能需要重新下载；版本更新也可能触发新的下载。&lt;/p&gt;
&lt;p&gt;游戏画面由本机浏览器和显卡渲染，因此体验同时受网络速度和本机性能影响。&lt;/p&gt;
&lt;h2 id=&#34;看到素材不全或者卡顿先稍等一下&#34;&gt;看到素材不全或者卡顿，先稍等一下
&lt;/h2&gt;&lt;p&gt;按需加载带来的一个直观现象，是画面可能先出现，部分细节随后才补齐。&lt;/p&gt;
&lt;p&gt;第一次进入区域、加载新角色外观或打开界面时，可能短暂看到贴图未显示、模型细节不完整、文字稍后出现，或者遇到一阵卡顿。除了网络下载，浏览器还要处理资源解析、贴图解码和显卡上传等工作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果只是短暂缺图或卡顿，可以先停留片刻，等待资源加载完成，通常会逐步恢复。&lt;/strong&gt; 不必一看到画面不完整就连续刷新页面，重新启动也需要时间。&lt;/p&gt;
&lt;p&gt;如果长时间没有变化，或者出现明确报错、掉线、同一素材持续缺失，则需要进一步排查。可以记录当时的区域、操作、浏览器版本和错误截图，再反馈问题。实际缺失的文件、网络故障和程序错误，需要分别处理。&lt;/p&gt;
&lt;h2 id=&#34;我在这个基础上做了哪些改进&#34;&gt;我在这个基础上做了哪些改进？
&lt;/h2&gt;&lt;p&gt;让游戏在浏览器里启动之后，实际使用还会遇到不少问题。我的二次开发主要集中在以下几个方面。&lt;/p&gt;
&lt;h3 id=&#34;更直接的账号和游戏入口&#34;&gt;更直接的账号和游戏入口
&lt;/h3&gt;&lt;p&gt;我增加了独立的用户门户，提供注册、登录、修改密码等功能，并接入 vMaNGOS 游戏服务。玩家登录门户后，通过「开始游戏」进入客户端，由系统处理关联游戏账号和连接授权。&lt;/p&gt;
&lt;p&gt;游戏连接会检查登录状态和访问来源，退出登录或会话失效时也会撤销相关授权。&lt;/p&gt;
&lt;h3 id=&#34;减少资源读取造成的等待&#34;&gt;减少资源读取造成的等待
&lt;/h3&gt;&lt;p&gt;浏览器里的网络读取方式和本地文件读取不同。部分同步读取会阻塞画面更新，素材越零散，网络往返的影响越明显。&lt;/p&gt;
&lt;p&gt;我对部分世界和界面贴图、角色外观以及动态字体加载做了异步化处理，让资源在后台准备，完成后再更新到画面；同时加入请求复用、分帧接入和缓存，减少重复读取及集中处理造成的停顿。&lt;/p&gt;
&lt;p&gt;素材分发也做了调整：公开游戏素材可以由浏览器直接从资源分发地址读取，减少逐个文件经过门户验证和跳转的开销；连接游戏仍然需要登录授权。&lt;/p&gt;
&lt;p&gt;这些改动改善了部分加载路径，但资源解析和渲染依然需要时间，游戏中仍可能出现卡顿。&lt;/p&gt;
&lt;h3 id=&#34;更清楚的入场进度以及地形加载保护&#34;&gt;更清楚的入场进度，以及地形加载保护
&lt;/h3&gt;&lt;p&gt;选角之后，地图、界面和碰撞数据还需要继续准备。我补充了入场进度显示，让这段等待有更明确的反馈，并提前准备部分界面依赖，减少后续同步读取。&lt;/p&gt;
&lt;p&gt;针对浏览器地形等待方式引起的崩溃，以及传送后碰撞数据尚未就绪时可能穿地的问题，也加入了非阻塞等待和移动保护：必要地形、碰撞准备完成后，再恢复相应移动。&lt;/p&gt;
&lt;p&gt;这些修复仍需要在不同地图、网络环境和连续传送等真实场景中继续验证。&lt;/p&gt;
&lt;h3 id=&#34;中文显示和输入&#34;&gt;中文显示和输入
&lt;/h3&gt;&lt;p&gt;中文适配中，我修复了动态字体预算不足导致部分物品、技能描述缺字的问题，并调整了字体加载失败的处理，避免单个字体失败影响后续队列。&lt;/p&gt;
&lt;p&gt;中文输入则通过游戏输入框焦点与浏览器原生输入能力衔接：打开聊天等普通输入框时，按需启用系统输入法；离开输入框后，恢复游戏按键处理。不同操作系统和输入法的实际体验还需要持续测试。&lt;/p&gt;
&lt;h3 id=&#34;可选插件与加载优化&#34;&gt;可选插件与加载优化
&lt;/h3&gt;&lt;p&gt;我接入了一组可选择的实验插件，并增加了本地设置保存和无插件启动入口。插件按选择下载，使用压缩包和缓存减少请求，同时修复了部分插件纹理没有走正确读取路径的问题。&lt;/p&gt;
&lt;p&gt;目前的插件范围以启动页提供的选项为准，插件兼容性和具体功能仍需要逐项验证。&lt;/p&gt;
&lt;h2 id=&#34;这是一次学习和交流的尝试&#34;&gt;这是一次学习和交流的尝试
&lt;/h2&gt;&lt;p&gt;这个项目让我有机会接触客户端逆向研究、Rust、Bevy、WebAssembly、WebGPU，以及浏览器资源加载和游戏网络接入。感谢 benilla-re、benilla、wenilla 及相关开源项目作者的工作，让这些实验有了基础。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本项目仅用于个人学习、技术研究和交流，没有任何商业目的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你也对老游戏如何在现代浏览器里运行感兴趣，欢迎交流实现思路和体验反馈。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
