一个用于编辑《Magical Princess》游戏存档的Web工具,基于 Vue 3 + Vite 构建。
🔗 在线使用: GitHub Pages | 📥 离线版本: Releases
save-editor/
├── src/
│ ├── components/ # UI组件
│ │ ├── BasicEditor.vue # 基础属性编辑
│ │ ├── DetailedEditor.vue # 详细属性编辑
│ │ ├── EquipmentEditor.vue # 装备编辑
│ │ ├── FriendEditor.vue # NPC好感度编辑
│ │ ├── BattleArtsEditor.vue # 战斗技能编辑
│ │ ├── ActivityEditor.vue # 活动数据编辑
│ │ ├── CurriculumEditor.vue # 课程数据编辑
│ │ ├── ConfigEditor.vue # 游戏设置编辑
│ │ ├── ItemEditor.vue # 物品列表编辑
│ │ ├── SkillEditor.vue # 技能列表编辑
│ │ ├── GlobalEditor.vue # 跨轮回数据编辑
│ │ ├── QuickActions.vue # 快捷操作面板
│ │ ├── SetupGuide.vue # 首次使用引导
│ │ └── Sidebar.vue # 导航侧边栏
│ ├── composables/ # 业务逻辑
│ │ ├── useCrypto.js # AES加解密
│ │ ├── useDeferredTableRender.js # 列表延迟挂载
│ │ ├── useSaveData.js # 存档数据管理
│ │ ├── useQuickActions.js # 快捷操作逻辑
│ │ └── useViewportTableHeight.js # 列表高度计算
│ ├── data/ # 静态数据
│ │ ├── constants.js # 常量定义
│ │ ├── enums.js # 枚举映射
│ │ ├── gameData.js # 游戏数据 (物品/NPC/技能名称)
│ │ ├── keyMap.js # JSON键名映射
│ │ ├── localization.js # 本地化数据工具
│ │ ├── mappings.js # 字段中文标签
│ │ └── periodData.js # 月份周期数据
│ ├── utils/ # 工具函数
│ │ ├── dirStore.js # 目录句柄存储
│ │ ├── saveParser.js # 存档解析/序列化
│ │ └── validators.js # 数据验证
│ ├── App.vue # 主容器
│ └── main.js
├── dist/
│ └── index.html # 打包后的单文件版本
├── package.json
├── vite.config.js
└── README.md
- 每个组件只负责一个功能模块
- 相关逻辑集中在同一文件
- 组件内部状态自管理
- 通过
v-model和事件通信 - 组件不直接依赖其他组件
- 业务逻辑封装在 Composable 中
- Composable 处理业务逻辑
- 组件只负责UI渲染
- 工具函数纯函数化
npm installnpm run devnpm run build构建结果在 dist/index.html,双击即可在浏览器中运行。
- 月份、压力、金钱、东亚硬币
- 行动力、善恶值、学院职业
- 声望、技能点、父女感情
- 四维等级 (体力/智力/魅力/感性)
- 16项子属性
- 战斗属性(等级/经验)
- 服装、武器、饰品
- 显示物品中文名称
- 37个NPC好感度
- 见面/对话/约会/送礼次数
- 恋爱事件
- 物品列表管理
- 142种物品中文名称
- 分组表格直接编辑数量、使用次数与合成状态
- 技能列表管理
- 100+技能中文名称
- 解锁/学习状态
- 战斗技能学习状态编辑
- 活动次数、完成次数与等级编辑
- 课程启用、完成和耐久编辑
- 语言、背景乐音量、音效音量、语音音量
- 文本显示速度与直播模式
- 目录初始化后自动预加载,统一通过“应用编辑”保存
- 玩家/父亲名称
- 生日设置
- 轮回次数、功绩点数
- 恋爱状态、结局标记
- 一键满属性 (子属性2000,等级10,战斗经验8000)
- 金钱/东亚硬币最大化
- 压力清零、行动力全满
- 全NPC满好感
- 解锁全部技能
- 时间跳转(跳到毕业/重置到初始月)
- 未选择存档时首页仍可查看,但快捷操作会保持禁用
| 属性 | 上限 | 依据 |
|---|---|---|
| 压力 | 0-100 | Clamp(stress, 0, 100) |
| 金钱 | 0-9,999,999 | 无硬性上限 |
| 东亚硬币 | 0-9,999 | 无硬性上限 |
| 等级 | 1-18 | maxLevel = 18 |
| 子属性 | 0-9,999 | 无硬性上限 |
| 好感度 | 0-100 | fFavarite >= 100 |
| 恋爱事件 | 0-4 | fLoveEvents >= 4 |
| 善恶平衡 | 0-100 | Clamp(gbBalance, 0, 100) |
| 战斗经验 | 0-99,999 | 无硬性上限 |
游戏使用 period (0-42) 表示月份周期:
| period 范围 | 阶段 | 显示 |
|---|---|---|
| 0-5 | 童年期 | 童年 4月 ~ 童年 9月 |
| 6-17 | 学院1年级 | 1年级 9月 ~ 1年级 8月 |
| 18-29 | 学院2年级 | 2年级 9月 ~ 2年级 8月 |
| 30-41 | 学院3年级 | 3年级 9月 ~ 3年级 8月 |
| 42 | 毕业 | 毕业 |
完整数据见 src/data/periodData.js
所有文本与游戏官方中文翻译同步,数据来源:
- 游戏内解包导出
- 覆盖内容:物品名称、NPC名称、技能名称、属性标签、活动名称、课程名称等
%USERPROFILE%/AppData/LocalLow/Neotro Inc_/MagicalPrincess/
文件格式:
v10_userdata1.dat~v10_userdata31.dat(用户存档)v10_configdata.dat(游戏设置)
| 技术 | 版本 | 用途 |
|---|---|---|
| Vue | 3.4+ | 前端框架 |
| Vite | 5.0+ | 构建工具 |
| Naive UI | 2.44+ | UI组件库 |
| CryptoJS | 4.2+ | AES加解密 |
| vite-plugin-singlefile | 2.0+ | 单文件打包 |
游戏存档使用 AES 加密:
- 算法: AES (RijndaelManaged)
- 模式: CBC
- 填充: ZeroPadding / Pkcs7
- Key:
giNArbHRlWBDIggF(16字节) - IV:
jC34fOybW3zEh0Kl(16字节)
JSON 使用简短键名,需要映射到完整字段名:
| JSON键 | 字段名 | 说明 |
|---|---|---|
m |
money | 金钱 |
st |
stress | 压力 |
p1 |
phyKinryoku | 力量 |
f |
fFavarite | 好感度 |
bc |
blackCoin | 东亚硬币 |
ap |
activePower | 行动力 |
ga |
goodAction | 善行 |
ba |
badAction | 恶行 |
完整映射见 src/data/keyMap.js
- 修改存档前请务必备份原文件
- 不合理的数值可能导致游戏异常
- 建议在游戏关闭时修改存档
- 部分属性之间存在关联关系
- 推荐使用 Chrome 或 Edge 浏览器
仅供学习研究使用,请勿用于商业用途。