Compare commits
10 Commits
13ecbdb246
...
v0.0.7
| Author | SHA1 | Date | |
|---|---|---|---|
| b9dc8b7105 | |||
| 47f1733a95 | |||
| 230e5f8892 | |||
| 4a348e578b | |||
| 2e273a782c | |||
| b5452a0a8a | |||
| 890dea326d | |||
| ec39996d7c | |||
| d2da64618a | |||
| 7bf578b6b0 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,6 +3,7 @@
|
||||
# =============================================
|
||||
*.rpyc
|
||||
*.rpyb
|
||||
*.rpymc
|
||||
game/cache/
|
||||
game/saves/
|
||||
game/temp/
|
||||
|
||||
95
CLAUDE.md
Normal file
95
CLAUDE.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
**莘澜日记 (XinLanDiary)** 是一款使用 Ren'Py 引擎开发的中文视觉小说游戏,当前版本 dev0.0.6,由 RYT Studio 制作。游戏以校园为背景,通过多角色关系数值追踪和多视角叙事推动剧情。
|
||||
|
||||
## 开发环境与运行
|
||||
|
||||
本项目没有传统的构建脚本。开发和构建均通过 **Ren'Py SDK** 完成:
|
||||
|
||||
```bash
|
||||
# 在开发模式下运行游戏(需要安装 Ren'Py SDK)
|
||||
/path/to/renpy.sh /Users/lipeng/Documents/projects/XinLanDiary-b2-dev
|
||||
|
||||
# 检查脚本语法错误(Ren'Py 会在启动时自动编译 .rpy 文件)
|
||||
# 错误日志位于:game/traceback.txt 和 log.txt
|
||||
```
|
||||
|
||||
构建多平台发行版需通过 Ren'Py 启动器 GUI 操作,配置见 `project.json` 和 `android.json`。
|
||||
|
||||
## 项目架构
|
||||
|
||||
### 核心文件
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `game/script.rpy` | 入口点:角色定义、变换效果、start 标签跳转 |
|
||||
| `game/options.rpy` | 游戏配置:版本、音频、转场、存档目录 |
|
||||
| `game/screens.rpy` | UI/屏幕布局(1622行) |
|
||||
| `game/gui.rpy` | GUI 样式配置,分辨率 1920x1080 |
|
||||
| `game/Chapters/Chapter1.rpy` | 第一章剧情脚本 |
|
||||
| `剧情/Chapter1.txt` | 剧情草稿(中文原稿) |
|
||||
|
||||
### 角色系统
|
||||
|
||||
所有角色在 `game/script.rpy` 中定义。每个角色有专属颜色、发言速度和独立的关系数值字典。
|
||||
|
||||
**主要角色速查表**:
|
||||
|
||||
| 变量名 | 全名 | 颜色 | 独特数值 |
|
||||
|--------|------|------|----------|
|
||||
| `me` | 任懿涛(主角) | #71b4e4 | selfAcceptance, humorSense, studyStress (0-10) |
|
||||
| `xingyu` | 陈星宇 | #cff3ff | affection, cooperation, helpfulness (0-100) |
|
||||
| `lhy` | 刘泓予 | #ffc052 | affection, trust, empathy (0-100) |
|
||||
| `lzx` | 李泽瑄 | #631e2c | infoOpenness (0-10),神秘角色 |
|
||||
| `xiaowei` | 林晓薇 | #f4a7b9 | affection, synergy, interactionFrequency;网络ID:薇风拂晓 |
|
||||
| `yutong` | 苏雨桐 | #69cae7 | affection, attention, academicSupport |
|
||||
| `yh` | 颜涵 | #d4b8e0 | affection, understanding, support |
|
||||
| `xwhy` | 徐卫浩宇 | #9dffdb | affection, reliance, helpfulness |
|
||||
|
||||
**数值定义模式**:
|
||||
```python
|
||||
default {char}_stats = {
|
||||
"{stat_name}": 0, # 说明
|
||||
}
|
||||
```
|
||||
|
||||
### 场景与标签规范
|
||||
|
||||
- 场景入口:`label Chapter{#}_Scene{#}:`
|
||||
- 背景命名:`bg_{地点}_{光照}_{特殊}`(如 `bg_classroom_morning`)
|
||||
- 角色素材:`{缩写}_{状态}`(如 `ryt_normal`, `lhy_embarrassed`)
|
||||
- 网络身份后缀:`_w`(如 `xiaowei_w`, `me_w`)
|
||||
|
||||
### 核心叙事机制
|
||||
|
||||
- **多视角切换**:第三场景从主角视角切换至苏雨桐、林晓薇视角
|
||||
- **关系数值驱动分支**:玩家选择同时影响多个角色的多项数值
|
||||
- **隐藏数值**:`h_` 前缀(如 `h_academicSupport`)用于更精细的关系追踪
|
||||
- **剧情内社交媒体**:包含论坛帖子和私信场景
|
||||
|
||||
### 变换效果(Transforms)
|
||||
|
||||
在 `script.rpy` 中定义的常用变换:
|
||||
- `shake_rotate` — 抖动旋转动画(0.5秒)
|
||||
- `slide_right(distance, duration)` — 向右滑动
|
||||
- `zoom_to_upper_right` — 镜头缩放并移向右上角
|
||||
- `c1s2_ryt_pos`, `c1s4_ryt_pos` — 特定场景角色定位
|
||||
|
||||
## 多平台构建配置
|
||||
|
||||
- **macOS**:`project.json`(当前激活,force_recompile=true)
|
||||
- **Android**:`android.json`(横屏锁定,包名 `com.rytstudio.xinlandiary`,堆内存 3GB)
|
||||
- **Web/其他**:通过 Ren'Py launcher 配置
|
||||
|
||||
## 错误排查
|
||||
|
||||
运行时错误日志:
|
||||
- `game/log.txt` — 运行日志
|
||||
- `game/traceback.txt` — 崩溃堆栈
|
||||
- `game/errors.txt` — 编译错误
|
||||
|
||||
Ren'Py 在启动时自动将 `.rpy` 编译为 `.rpyc`,语法错误会阻止游戏启动并写入上述日志。
|
||||
@@ -3,15 +3,17 @@
|
||||
|
||||
|
||||
label Chapter1_Scene1:
|
||||
|
||||
scene bg classroom featryt with fade
|
||||
|
||||
me "{cps=25}九月的风还带着夏末的燥热,那道斜切过窗台的阳光,在黑板上画出一道明晃晃的线。\n就像我的人生,被分成了两半——线的那头,是重点班;线的这头,是我。"
|
||||
me "这道光就这么直直地切过来,像是在提醒我,你就在这儿,也只能在这儿了。\n曾经唾手可得,如今遥不可及。"
|
||||
|
||||
pause 0.5
|
||||
show xingyu thinking at left
|
||||
|
||||
show xingyu thinking at left
|
||||
xingyu "涛哥,你咋又对着黑板发呆?"
|
||||
play music "audio/XinLanDiary-Part1.ogg" fadein 2
|
||||
show xingyu laughing
|
||||
xingyu "该不会是在研究光线折射角度吧?"
|
||||
hide xingyu
|
||||
@@ -35,7 +37,9 @@ label Chapter1_Scene1:
|
||||
show xingyu laughing big
|
||||
xingyu "{cps=5}哈哈哈哈哈{cps=15}!\n真是一对苦命鸳鸯!"
|
||||
|
||||
play sound "audio/xiakering.mp3"
|
||||
stop music fadeout 1.0
|
||||
play sound "audio/AfterClassRing.ogg" noloop
|
||||
queue sound "audio/MainMenu.ogg" fadein 1.0
|
||||
scene bg black with fade
|
||||
pause 1.0
|
||||
scene bg playground twilight
|
||||
@@ -52,6 +56,7 @@ label Chapter1_Scene1:
|
||||
stop sound fadeout 1.0
|
||||
|
||||
hide xingyu with dissolve
|
||||
play music "audio/MainMenu.ogg" fadein 1.0
|
||||
|
||||
me "那声'起义'在心里荡开了一个小涟漪。"
|
||||
me "他说得对——但说出口的代价,比他想的要重得多。"
|
||||
@@ -68,6 +73,7 @@ label Chapter1_Scene1:
|
||||
show ryt dialogue embarrass pocket at center with dissolve
|
||||
me "三张连拍……全程记录,还加了学术注释。行吧,就是个玩笑。"
|
||||
hide ryt with dissolve
|
||||
stop music fadeout 1.0
|
||||
|
||||
$ lhy_stats["affection"] += 3
|
||||
$ lhy_stats["trust"] += 2
|
||||
@@ -80,6 +86,7 @@ label Chapter1_Scene1:
|
||||
|
||||
label Chapter1_Scene2:
|
||||
scene bg classroom morning featryt with fade
|
||||
play music "audio/XinLanDiary-Part1.ogg" fadein 2
|
||||
#system_ "【第二天早上】"
|
||||
|
||||
me "第二天早上,一切都不一样了。"
|
||||
@@ -111,12 +118,14 @@ label Chapter1_Scene2:
|
||||
me "深吸一口气——经过八班队列时,我故意做了个跳起来打空气的动作,表情夸张。"
|
||||
hide ryt with dissolve
|
||||
tongxue "哈哈哈哈——"
|
||||
stop music fadeout 1.0
|
||||
me "果然,又是一阵笑声。"
|
||||
me "我的那层盔甲还在。 对吗?"
|
||||
|
||||
pause 0.3
|
||||
|
||||
# 关键场景:刘泓予看穿
|
||||
play music "audio/MainMenu.ogg" fadein 2.0
|
||||
show lhy dialogue normal at right with dissolve
|
||||
lhy "你刚才那个假动作,面部肌肉的紧张程度是平时的1.3倍。"
|
||||
show ryt dialogue embarrass pocket at left with dissolve
|
||||
@@ -130,6 +139,8 @@ label Chapter1_Scene2:
|
||||
me "但不知道为什么,被他这么一说……我反而松了口气。"
|
||||
me "有人看见了,但没有嘲笑。只是……记录。"
|
||||
|
||||
#stop music fadeout 1.0
|
||||
|
||||
$ lhy_stats["affection"] += 5
|
||||
$ lhy_stats["trust"] += 5
|
||||
$ lhy_stats["empathy"] += 3
|
||||
@@ -167,6 +178,8 @@ label Chapter1_Scene3:
|
||||
yutong "我那天递给他的纸条上可不仅写了“恭喜”二字……"
|
||||
yutong "这句话,他没有回应。\n 或许他根本就没有看见……"
|
||||
|
||||
stop music fadeout 1.0
|
||||
|
||||
$ yutong_stats["affection"] += 3
|
||||
$ yutong_stats["attention"] += 5
|
||||
$ yutong_stats["h_academicSupport"] += 1
|
||||
@@ -174,6 +187,7 @@ label Chapter1_Scene3:
|
||||
pause 0.5
|
||||
|
||||
# —— 视角B:林晓薇·高二一班走廊 ——
|
||||
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
|
||||
scene bg corridor with dissolve
|
||||
"【同日下午·高二一班走廊】"
|
||||
|
||||
@@ -183,11 +197,13 @@ label Chapter1_Scene3:
|
||||
xiaowei "拍得好生动啊!你们说,要是我也这样跳起来打人,会不会也这么有效果?"
|
||||
tongxue "哈哈哈哈!"
|
||||
hide xiaowei with dissolve
|
||||
stop music fadeout 1.0
|
||||
|
||||
"{cps=20}她笑着,眼睛却没有离开屏幕。"
|
||||
"{cps=20}那种真实的活力,让她觉得……在礼貌而疏离的文科班里,有什么东西被触动了。"
|
||||
|
||||
#system_ "【切换账号:薇风拂晓】"
|
||||
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
|
||||
scene bg classroom phone closeup with dissolve
|
||||
system_ "好友列表:逍遥剑客 [[在线]"
|
||||
xiaowei_w "在吗?问个事。你们学校是不是有个挺搞笑的人?最近好像因为什么照片火了。"
|
||||
@@ -202,6 +218,7 @@ label Chapter1_Scene3:
|
||||
me "任懿涛正背对门口,和陈星宇比划着什么。大概又是游戏攻略。"
|
||||
hide ryt with dissolve
|
||||
hide xingyu with dissolve
|
||||
stop music fadeout 1.0
|
||||
|
||||
$ xiaowei_stats["affection"] += 4
|
||||
$ xiaowei_stats["interactionFrequency"] += 2
|
||||
@@ -210,6 +227,7 @@ label Chapter1_Scene3:
|
||||
jump Chapter1_Scene4
|
||||
|
||||
label Chapter1_Scene4:
|
||||
play music "audio/MainMenu.ogg" fadein 2.0
|
||||
scene bg classroom wide afterschool with fade
|
||||
"{cps=20}【同日放学后·七班教室】" # system_ "【同日放学后·七班教室】"
|
||||
|
||||
@@ -250,6 +268,7 @@ label Chapter1_Scene4:
|
||||
hide ryt with dissolve
|
||||
|
||||
# 反侦察行动
|
||||
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
|
||||
show xingyu at left with dissolve
|
||||
xingyu "各位!我有个绝妙的主意——"
|
||||
xingyu "既然那个画廊这么喜欢拍涛哥,咱们不如搞个「反侦察行动」!"
|
||||
@@ -260,9 +279,12 @@ label Chapter1_Scene4:
|
||||
xingyu "哎呀小卡你别扫兴!就是玩嘛!涛哥,你说干不干?"
|
||||
hide lhy with dissolve
|
||||
|
||||
stop music fadeout 0.8
|
||||
show ryt dialogue normal at right with dissolve
|
||||
me "看着眼前这群人。认识不过一个多月——但他们就这么凑过来,商量这种无聊又有趣的计划。"
|
||||
me "在重点班时,从来没有过这样的时刻。"
|
||||
|
||||
play music "audio/XinLanDiary-Part1.ogg" fadein 1.0
|
||||
me "行啊!但咱们得专业!要有分工!有排班表!有应急预案!还要有——"
|
||||
hide ryt with dissolve
|
||||
hide xingyu with dissolve
|
||||
@@ -275,6 +297,7 @@ label Chapter1_Scene4:
|
||||
yh "我负责记录你们的失败过程。"
|
||||
hide yh with dissolve
|
||||
tongxue "哈哈哈哈哈!"
|
||||
stop music fadeout 1.0
|
||||
|
||||
show ryt dialogue normal at right with dissolve
|
||||
me "我也跟着笑。但眼睛不自觉地望向窗外。"
|
||||
@@ -294,6 +317,7 @@ label Chapter1_Scene4:
|
||||
pause 0.5
|
||||
|
||||
# 便利店
|
||||
play music "audio/XinLanDiary-Part2.ogg" fadein 2.0
|
||||
scene bg convenience store with fade
|
||||
system_ "【傍晚17:25·校门外便利店】"
|
||||
|
||||
|
||||
BIN
game/audio/AfterClassRing.ogg
Normal file
BIN
game/audio/AfterClassRing.ogg
Normal file
Binary file not shown.
BIN
game/audio/MainMenu.ogg
Normal file
BIN
game/audio/MainMenu.ogg
Normal file
Binary file not shown.
BIN
game/audio/XinLanDiary-Part1.ogg
Normal file
BIN
game/audio/XinLanDiary-Part1.ogg
Normal file
Binary file not shown.
BIN
game/audio/XinLanDiary-Part2.ogg
Normal file
BIN
game/audio/XinLanDiary-Part2.ogg
Normal file
Binary file not shown.
Binary file not shown.
@@ -69,7 +69,7 @@ define config.has_voice = False
|
||||
## 将以下语句取消注释就可以设置标题界面播放的背景音乐文件。此文件将在整个游戏中
|
||||
## 持续播放,直至音乐停止或其他文件开始播放。
|
||||
|
||||
# define config.main_menu_music = "main-menu-theme.ogg"
|
||||
define config.main_menu_music = "audio/MainMenu.ogg"
|
||||
|
||||
|
||||
## 转场 ##########################################################################
|
||||
|
||||
@@ -113,10 +113,14 @@ transform zoom_to_upper_right:
|
||||
# 快速放大并向左下偏移(画面看起来往右上移动)
|
||||
ease 0.3 zoom 1.7 xalign 0.6 yalign 0.2
|
||||
|
||||
#label before_main_menu:
|
||||
# $ renpy.music.play("andio/MainMenu.ogg", loop=True, fadein=2.0)
|
||||
|
||||
|
||||
# 游戏在此开始。
|
||||
|
||||
label start:
|
||||
# stop music fadeout 1.0
|
||||
jump Chapter1_Scene1
|
||||
# 此处为游戏结尾。
|
||||
|
||||
|
||||
Binary file not shown.
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"build_update": false,
|
||||
"packages": [
|
||||
"mac"
|
||||
"mac",
|
||||
"linux",
|
||||
"win"
|
||||
],
|
||||
"add_from": true,
|
||||
"force_recompile": true,
|
||||
|
||||
BIN
web-presplash.png
Normal file
BIN
web-presplash.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 261 KiB |
Reference in New Issue
Block a user