zeljkovranjes/waw-color-tags

GitHub: zeljkovranjes/waw-color-tags

通过逆向工程从《使命召唤:战争世界》游戏中提取并用纯 JavaScript 在浏览器中精确复刻家族标签动画效果的开源项目。

Stars: 0 | Forks: 0

# waw-color-tags 《使命召唤:战争世界》(Call of Duty: World at War,2008)动画 clan tag 效果的浏览器复刻版。 可以在[我的博客](https://blog.zeljkovranjes.com/posts/call-of-duty-world-at-war-clan-tag-effects)上查看预览。 每个效果都是通过挂载调试器、定位引擎 color table 和 clan tag 分发器,并反编译每个 animator 函数,从正在运行的游戏 (`CoDWaW.exe`) 中逆向工程得到的。确切的计时、调色板和逐字母逻辑使用纯 JavaScript 复现,无需构建步骤,也无任何依赖。 ## 它是什么 在修改过的 WaW 客户端中,将你的 clan tag 设置为特殊关键字会触发内置的名称动画。分发器会将 tag 与预设列表进行比较,并将其路由到一个小型 animator,该 animator 会使用引擎 `^` color code(或通过移动字符)在每一帧重写名称。本项目在浏览器中以 1:1 的比例重建了这些 animator。 打开 `index.html` 即可查看在 `Unknown Soldier` 名称上运行的所有效果。 ## 效果 | Tag | 效果 | 源函数 | |-----|--------|-----------------| | `cycl` | 粘性颜色擦除。一种颜色从左到右每次填充一个字母,直到填满整个单词,然后下一种颜色擦入。 | `0x65CED0` | | `rain` | 逐字母的彩虹渐变,每 100 毫秒滚动一步。每个字母都是不同的颜色。 | `0x65CE20` | | `cyln` / `krdr` | 单个红色字母来回扫描,由余弦驱动,在两端速度较慢。(Cylon / Knight Rider 扫描仪。) | `0x65D010` | | `move` | 无颜色。文本在 40 个字符的字段内左右滑动。 | `0x65D1A0` | | `....` | 弹跳的 `o` 在点之间来回移动。仅限 Tag。 | `0x65D100` | | `****` | 弹跳的 `+` 在破折号之间来回移动。与 `....` 使用相同的函数。 | `0x65D100` | | `RED` `GRN` `YELW` `BLUE` `CYAN` | 静态颜色 Tag。Tag 文本以固定颜色显示。 | `0x65D260` | ## 调色板 `^` code 使用的引擎 color table (`g_color_table`): | Code | 名称 | Hex | |------|------|-----| | `^1` | red | `#FF3333` | | `^2` | green | `#00FF00` | | `^3` | yellow | `#FFFF00` | | `^4` | blue | `#0000FF` | | `^5` | cyan | `#00FFFF` | `^1` red 和 `^6` pink 在 WaW 中进行了柔化处理(`^1` 是 `255, 51, 51`,而不是纯原色),这就是为什么简单的 Quake 3 调色板无法匹配的原因。 ## 计时的工作原理 所有 animator 都会读取毫秒级时钟 (`winmm.timeGetTime`) 并从中推导出步骤。 ``` cycl base = floor(t / (L*100)) % 5 ; pos = floor(t / 100) % L color[i] = (i < pos) ? base : (base+4)%5 // sticky two color wipe rain base = floor(t / 100) % 5 color[i] = (base + i) % 5 // scrolling gradient, 500 ms cycle cyln pos = floor( (cos(t * 0.004) + 1) * 0.5 * L ) // cosine bounce, ~1571 ms color[i] = (i == pos) ? red : white move off = floor( (1 - |sin(t * 0.004)|) * (40 - L) ) // leading spaces, ~785 ms bounce dots phase = floor(t / 75) & 7 pos = phase < 4 ? phase : 7 - phase // ping pong, 600 ms ``` `L` 是动画文本的长度。 ## 文件 ``` index.html demo page, one line per effect js/cycl.js cycl wipe js/rain.js rain gradient js/cyln.js cyln / krdr scanner js/move.js move slide js/dots.js .... bouncing dot js/stars.js **** bouncing plus js/colors.js RED GRN YELW BLUE CYAN static colors doc.txt extracted color palette reference ``` ## 运行 无需服务器或构建。在任何现代浏览器中打开 `index.html` 即可。 ## 注意事项 这是出于教育和保存目的对可见行为的全新复刻。它不包含任何游戏代码或资源。
标签:CMS安全, JavaScript, 云资产清单, 代码还原, 前端, 动画效果, 多模态安全, 数据可视化, 游戏, 自定义脚本, 逆向工程