如题,用 js/canvas 还原 Phigros 游戏画面,属于个人兴趣项目,仅用于学习和测试;
模拟器代码部分为 @lchzh3473 (以下简称 lchzh) 独立编写,与《Phigros》游戏本体无关,您因使用或修改代码所造成的一切后果由您自己承担;
lchzh 不提供游戏本体安装包及逆向工具/教程,也不提供谱面下载;
lchzh 并不拥有官方素材(如音符贴图/打击音效/结算UI)的版权,如有侵权请联系 lchzh下架相关内容。
由于本项目正在进行模块化重构,近期代码可能存在较大变动。
本项目源码按 GPL-3.0 协议开源;不鼓励、不支持一切商业用途。
由于 lchzh 近期发现本仓库代码被严重滥用,附加条款如下:
- 不得移除或隐藏本声明;
- 不得在代码中移除或隐藏
canvas水印; - 修改代码,必须在显著位置注明修改内容和修改者;
- 要部署到 Web 页面,还必须在页面上注明修改者的社交平台账号超链接。
- 对pec谱面自带的配置文件提供支持:
Settings.txt/info.txt - 新增
音效音量下拉框(实时生效) - 新增
更多设置按钮,以支持更多的设置项 - 新增
显示Acc复选框(实时生效),该项选中时:- 画面右上角分数下方显示实时
Acc
- 画面右上角分数下方显示实时
- 新增
显示统计复选框(实时生效),该项选中时:- 画面左方显示实时偏移
DSP和平均偏移AVG(单位ms) - 画面右方显示不同类型判定实时的触发数目
- 画面左下角显示不同类型
Note的出现数目
- 画面左方显示实时偏移
- 新增
低分辨率复选框(实时生效),该项选中时:- 画面分辨率变为原来的
1/2,也许会提升性能
- 画面分辨率变为原来的
- 新增
横屏锁定复选框(实时生效),该项选中时:- 全屏时自动横屏,部分设备或浏览器可能不支持
- 支持播放背景视频(
音乐下拉框选中支持的视频文件时生效)
- 重构谱面预处理和判定模块,也许会提升性能
- 重构pec谱面读取模块,为支持导入rpe格式的谱面做准备
- 针对判定区域重叠的情况进行优化:
- 对于多押
Tap、Hold和Flick,优先判定物理距离最近的音符 - 现在符合特定条件的
Drag和Flick会阻挡其后的Tap判定
- 对于多押
- 重构
Flick判定,现在与滑动速度相关联 (感谢 @Mivik 提供技术支持) - 优化音频播放逻辑,也许会减少延迟
- 调整部分输入框:
歌名输入框名称改为曲名- 新增
曲师输入框(显示于开始动画的曲名下方) 等级输入框拆分为难度下拉框和等级下拉框,统一格式(配置文件不受此限制)
- 调整
info.csv部分属性:- 新增
Artist(曲师,亦可写作Composer/Musician) - 背景变暗由
GlobalAlpha调整为BackgroundDim - 谱师由
Designer调整为Charter
- 新增
- 调整
line.csv部分属性:- 图片缩放与拉伸由
Vert/Horz改为Scale/Aspect(默认均为1) - 跟随背景变暗由
IsDark调整为UseBackgroundDim - 新增
UseLineColor(跟随FC/AP指示器着色) - 新增
UseLineScale(使用判定线缩放策略)
- 图片缩放与拉伸由
- 微调判定范围:水平判定范围由画面宽度的
23.555%改为23.625% - 微调界面UI
- 更改部分资源的引用路径或读取方式,移除本仓库的官方素材
- 修复读取部分zip文件时非utf8编码文件名显示乱码的问题
- 现在加载zip组件会正常显示加载文案,而不是无任何提示
- 修复空文件被错误识别为pec谱面的问题
- 现在切换全屏会清除当前键盘操作
- 修复了缩放窗口时画面闪烁的问题
- 现在也许能正确读取文件夹内的配置文件
- 修复部分
input元素无法正常交互的问题 - 现在
谱面延时的效果受音乐变速比例变化
- 移除
开启打击音效复选框
- 重构文件上传模块,支持多文件上传和嵌套zip
- 优化信息显示:识别网址并自动转换成超链接
- 优化第三方js的加载逻辑和相关提示
- 兼容性检测现在由原生js实现
- 优化全屏幕相关判断
- 优化绘制逻辑,提升性能
Autoplay复选框名称改为预览模式- 更改部分UI贴图引用路径,移除本仓库的官方贴图素材
- 修复存在触摸点时新的触摸点移入画面会报错的问题
- 修复pec谱面
Note因浮点误差显示异常的问题
- 优化谱面镜像逻辑
- 优化不支持类型错误信息的显示
- 为不支持或禁用全屏功能的浏览器提供充满屏幕的适配
- 优化图片着色,避免 iOS 15.6+ 出现
InvalidStateError错误信息
- 微调
Note默认大小(缩小约0.99%) - 将
info.csv的按键缩放由ScaleRatio调整为NoteScale(数值越大Note越大,默认1)
- 修复
info.csv的按键缩放可能无法读取的问题 - 现在 Android 默认的文件选择器能够正确识别
zip文件类型
优化UA识别策略 (针对iPad/Safari)
- 修复长度超过一定值的
Hold在旋转一定角度时不正常显示的bug
- 微调
Note的positionX与画面宽度的比值 (由1/18改为9/160)
- 修复部分官方谱面
Note显示异常的bug (感谢 @MayLight39 提供反馈)
- 新增图片加载检测
针对UA标识为iOS和MacOS的设备禁用图片缓存
- 修改
音乐变速时支持存档(不同速度安排不同存档位) - 现在结算界面会显示具体变速数值(修改
音乐变速时生效)
- 优化第三方js的加载逻辑和相关提示
- 现在文本输入溢出时会缩排(即超过一定长度时缩小字号)
显示定位点:Note定位文字改为判定线序号±Note序号+Note类型- (例如0号判定线上方的0号Note,如果是
Tap则定位文字为0+0t)
- (例如0号判定线上方的0号Note,如果是
- 修复系统时间可能的自动修正导致谱面瞬移的bug
- 新增pec谱面
Note方向数值检测 没有别的更新了qwq
- 修复部分包含时间异常事件的谱面不正常显示的bug
- 移除HyperMode
- 新增功能:
谱面镜像(实时生效) - 新增功能:
音乐变速(非实时生效,启用时无法存档) - 新增Early/Late特效复选框(测试功能)
- 现在
信息选项卡无信息时会显示一条文案
新增HyperMode:更加严格的判定和结算(测试功能)新增Great判定:40-80ms(显示为绿色特效,HyperMode特有)- 新增Early/Late统计(结算界面点击切换)
- 针对低帧率画面调整打击判定,提升稳定性
- 暂停时点击画面不再触发打击判定
- 修复部分设备非全屏触摸点向上错位的bug
- 新增zip模块兼容性检测(测试功能)
- 修复画面高度小于一定值时全屏触摸点向下错位的bug
- 修复pec谱面结尾的n指令无法正常读取的bug
- 移除可选链操作符和WebAssembly兼容性检测
- 移除视频录制功能
- 新增pec谱面事件时间检测(测试功能)
- 为
Hold添加多押高亮(与官方v2.0.0一致)
- 修复画面高度大于一定值时部分
Note无法正常显示的bug 修复pec谱面结尾的n指令无法正常读取的bug
- 画面左上角播放进度:暂停时会显示
(Paused)
- 修复
info.csv配置不当导致谱面显示错误的bug - 修复进入结算界面之前重新开始仍会结算的bug
- 画面左上角播放进度:当分钟小于10时不再补0
- 修复因上版本播放逻辑造成音频撕裂的bug(将播放逻辑回退至1.4.7)
- 修复过渡动画结束前判定时间内的
Note可以被打击的bug 修复进入结算界面之前重新开始仍会结算的bug
优化音频播放逻辑,使音频与谱面保持同步
修复过渡动画结束前判定时间内的Note可以被打击的bug修复进入结算界面之前重新开始仍会结算的bug- 修复部分不支持视频录制的浏览器无法使用模拟器的bug
- 新增浏览器兼容性检测(测试功能)
- 新增pec谱面异常
Note和负数Alpha检测(测试功能)
- 为iPhone全面屏提供适配
- 隐藏文件:zip内包含以
.开头的文件将被隐藏,不会显示在选项框
- 优化图像和字体渲染
- 为Safari浏览器适配全屏功能
Hold连续打击特效间隔现在与判定线bpm成反比Autoplay开启时,结算画面不再显示"+0"- 产生Bad判定的
Note现在会跟随判定线 - pec谱面默认偏移由-150ms改为-175ms
- 新增键盘操作,感受极其生草的游戏体验(测试功能)
- 为Safari浏览器适配离屏自动暂停功能
- 若Bad判定范围内的
Tap前方存在未打击的Drag或Flick将不触发Bad判定 - 暂停快捷键由
Space(空格)改为Shift(左右Shift均可) - 调整结算界面
AUTO PLAY的显示位置
- 新增
触摸反馈和背景模糊复选框(实时生效) - 新增本地存档(仅在关闭
Autoplay并开启过渡动画时存档)
- 对Safari浏览器进行部分适配
- 优化文件读取逻辑,现在能够支持更多文件类型
- 优化图像渲染
- 结算界面背景音乐会随等级变化(仅在进入结算界面前生效)
- 新增功能:
谱面延时(非实时生效) - 添加防止模拟器泛滥的提示
- 新增错误提示(现在导入不包含音乐的zip文件也会报错)
- 优化页面布局
Hold渲染由倒序改为顺序(其余Note渲染顺序仍为倒序)- 导入zip:背景图片由必需改为可选(无图片时将替换为纯白背景)
- 过渡动画由逐帧控制改为计时器控制
- 修复过渡开始动画判定线颜色不随
FC/AP指示器变化的bug
- 双击判定区域由圆形改为矩形
- 修复无法判定
HoldTime小于0.2s的Hold的bug
- 新增画面双击判定:左上角暂停,右上角重新开始
- 优化触摸点定位逻辑
- 增大画面双击判定范围(现在与画面文字大小成正比)
- 修复开启
显示定位点时无法统计note数目的bug - 修复逐帧判定导致严重吃音的bug
- 修复结算界面"φ"评级有几率错误地显示为“V”的bug
- 新增
FC/AP指示器复选框(实时生效) - 新增游玩模式(测试功能,需关闭
Autoplay复选框) - 新增结算界面(测试功能,在歌曲结束后出现,需开启
过渡动画复选框) - 新增错误提示(导入非zip文件或不包含谱面的zip文件均会报错)
- 优化图片颜色渲染机制
- 打击特效动画更加接近官方(1.6.11)
- 单个打击特效时长由30tick改为500ms
- 切换全屏的方式改为双击画面右下角
- 修复关于pec谱面第一个bp指令延时不为0导致谱面错误偏移的bug
- 优化绘制逻辑,提升性能
- 修复无判定线事件的谱面无法播放的问题
Note定位文字改为判定线序号±Note序号(例如0号判定线上方的第0个Note定位文字为0+0)
- 新增功能:视频录制(测试功能,录制时无法暂停)
- 实装
info.csv和line.csv,简介新增悬浮提示 - 连击字样
combo改为Autoplay 显示定位点:画面左下角显示不同种类已打击Note的实时数量,负数Note以半透明显示
- 对pec谱面的bpm变速功能进行适配
- 新增功能:过渡动画(包含开头淡入和结尾淡出,不包含结算)
- 新增输入框(曲绘、谱师),对应过渡动画
- 通过添加
line.csv以修改判定线贴图(测试功能) - 通过添加
info.csv以自动填写谱面信息(测试功能)
- 优化zip文件读取逻辑(数组→对象)
- 优化判定线和背景的绘制顺序
- 调整背景和UI对不同尺寸屏幕的适配
- 打击特效动画采用缓动函数
- 调整打击音效与官方v1.6.10一致
- 优化
播放/停止和暂停/继续按钮相关逻辑
宽高比下拉列表新增10:7(适配iPad Pro 11),将256:175改为19:13(适配Phi Editor)显示定位点:判定线数字透明度随判定线透明度变化,Note打击后变为半透明Hold尾判调整为提前0.2秒得分Hold连续打击特效间隔由12tick缩短为9tick
- 修复部分谱面
Note打击时间异常的bug - 修复pec谱面由于判定线事件time不精确导致排序错误的bug
- 修复点击
停止按钮后按住的Hold无法关闭导致连击得分溢出的bug
显示定位点现在能对Note进行定位(测试功能)
- 修复包含文件夹的zip无法正确加载的问题
- 修复部分谱面
Note速度异常及Hold错位的bug
- 谱面默认速度:
1.0→1.2(json),1/5.75→1/7.0(pec) - 打击特效颜色:
#fce491(Perfect),#9ed5f3(Good)
- 添加下拉列表(宽高比、按键缩放、背景变暗)
- 对pec谱面的
Fake Note进行适配(测试功能)
- 修复pec判定线演出的若干bug
- 支持导入pec(暂未适配
Fake Note和Alpha值扩展)
- 支持导入zip、选择谱面及一些基本操作
- 暂时移除
模拟Demo
模拟Demo改为Phigros愚人节谱Spasmodic SP