Add review reports for Chapter 1, Chapter 2, and Chapter 2-Side; include image assets and logic checks

- Created Chapter1-review.md with syntax, character definitions, and dialogue checks.
- Created Chapter2-review.md with syntax, missing images, and logic errors.
- Created Chapter2-Side-review.md addressing syntax, character definitions, and dialogue issues.
- Added SUMMARY.md to summarize review findings and highlight critical issues.
- Included new image assets for xiaowei and backup files.
- Identified and documented several logic errors and suggestions for code cleanup across chapters.
This commit is contained in:
2026-04-26 13:32:11 +08:00
parent eb38af6045
commit 6c65eafa32
23 changed files with 1040 additions and 9 deletions

View File

@@ -201,16 +201,16 @@ label Chapter1_Scene3:
scene bg corridor with dissolve
"【同日下午·高二一班走廊】"
show xiaowei at left with dissolve
"同一时间,另一个人也在看那张照片。"
tongxue "晓薇你快看!这不是你们一班那个任懿涛吗?他怎么还是这么搞笑!"
show xiaowei at right with dissolve
xiaowei "拍得好生动啊!你们说,要是我也这样跳起来打人,会不会也这么有效果?"
tongxue "哈哈哈哈!"
hide xiaowei with dissolve
stop music fadeout 1.0
"{cps=20}她笑着,眼睛却没有离开屏幕。"
"{cps=20}那种真实的活力,让她觉得……在礼貌而疏离的文科班里,有什么东西被触动了。"
hide xiaowei with dissolve
#system_ "【切换账号:薇风拂晓】"
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
@@ -387,10 +387,11 @@ label Chapter1_Scene4:
scene bg black with fade
system_ "【同夜·城市另一头】"
scene bg yutong room night with dissolve
me "城市的另一头,苏雨桐刚回到家。"
yutong "TaoliTaoli……今天依然没有更新。"
system_ "【任懿涛画廊·访问计数器:+1】"
me "她一张张翻看那些照片。相册里已经积累了二十几张,按时间顺序排列。"
"她一张张翻看那些照片。相册里已经积累了二十几张,按时间顺序排列。"
yutong "……在这个高度秩序化的生活里,观察一个如此不协调、如此鲜活的存在……有种奇妙的慰藉。"
$ yutong_stats["affection"] += 3
@@ -398,6 +399,7 @@ label Chapter1_Scene4:
pause 0.5
system_ "【几公里外·林晓薇的房间】"
scene bg xiaowei room night with dissolve
me "几公里外,林晓薇躺在床上,盯着天花板发呆。"
me_w "你问的那个人,确实是我们学校的。怎么,你认识?"
me "那条回复躺在对话框里,她还没想好怎么回。"
@@ -423,4 +425,4 @@ label Chapter1_Scene4:
pause 1.5
system_ "【第一章·画廊风波·完】"
return
jump Chapter2_Scene1

View File

@@ -0,0 +1,126 @@
# Chapter 2: Side Stories
# 支线剧情
label C2Side1:
# —— 天台 ——
if lhy_stats["affection"] < 11:
jump C2S2
$ game_day = 16
$ game_period = "lunch"
scene bg rooftop with fade
system_ "【Day 16·午休·天台】"
pause 0.5
show lhy dialogue normal at left with dissolve
lhy "任懿涛。能占用你一点时间吗?"
show ryt dialogue normal at right with dissolve
me "小卡主动找我说话?概率大概跟哈雷彗星过境差不多。"
show lhy dialogue normal at left
lhy "关于昨天的邀请。我想确认一下——你是认真的吗?"
lhy "我的意思是我技术不好。KD只有0.6。"
me "所以呢?"
lhy "所以……你不怕拖累胜率?"
me "他表情好平静,感觉不是在谦虚......是在试探什么吗?"
hide ryt with dissolve
hide lhy with dissolve
menu:
"胜率不重要,重要的是有人兜底。":
$ lhy_stats["affection"] += 3
jump C2Side1S1
"怕什么,我可以一打三。":
$ lhy_stats["affection"] += 2
jump C2Side1S2
"你负责战略,我负责送死,公平吧?":
$ lhy_stats["affection"] += 1
jump C2Side1S3
label C2Side1S1:
show ryt dialogue normal at right with dissolve
me "胜率不重要,重要的是有人兜底。"
show lhy dialogue normal at left with dissolve
lhy "……"
lhy "你总是这样说。好像什么都可以轻描淡写地过去。"
lhy "其实,我有件事想问你。"
lhy "你是怎么做到……想跳起来就跳起来的?"
me "……啊?"
lhy "那天在教室里。你跳起来打我的后背。动作很笨拙,角度也不对,落地的时候还踉跄了。"
lhy "但你还是跳了。"
me "跳起来,需要理由吗?"
me "小卡难得说这么多话。而且他问这个的时候,语气不像在开玩笑。他在认真地问一个我从来没想过的问题......"
tongxue "你们两个在屋顶搞什么?偷情啊?"
show ryt dialogue embarrass pocket at right with dissolve
lhy "……"
me "……"
lhy "走吧。该回去上课了。"
lhy "对了,比赛那天……我会准备好的。"
$ flag["C4"] = 1
$ flag["competition_note"] = True
$ lhy_stats["trust"] += 2
$ tao_stats["humorSense"] += 1
$ lhy_stats["empathy"] += 1
jump C2S2
label C2Side1S2:
show ryt dialogue normal at right with dissolve
me "怕什么,我可以一打三。"
show lhy dialogue normal at left with dissolve
lhy "你的自信心从何而来我一直很好奇。但这确实有一定作用。"
me "行行行,你说得对。但我就是自信,天生的。"
#me "你妈死了刘泓予!"
tongxue "你们两个在屋顶搞什么?偷情啊?"
show ryt dialogue embarrass pocket2 at right with dissolve
lhy "……"
me "……"
lhy "走吧。该回去上课了。"
lhy "对了,比赛那天……我会准备好的。"
$ lhy_stats["trust"] += 1
$ tao_stats["humorSense"] += 1
$ lhy_stats["empathy"] += 1
jump C2S2
label C2Side1S3:
show ryt dialogue normal at right with dissolve
me "你负责战略,我负责送死,公平吧?"
show lhy dialogue normal at left with dissolve
lhy "战术性牺牲确实是一种可行的策略。但我的意思是……算了。"
tongxue "你们两个在屋顶搞什么?偷情啊?"
show ryt dialogue embarrass pocket at right with dissolve
lhy "……"
me "……"
lhy "走吧。该回去上课了。"
lhy "对了,比赛那天……我会准备好的。"
$ tao_stats["humorSense"] += 1
$ lhy_stats["empathy"] += 1
jump C2S2

View File

@@ -0,0 +1,439 @@
# Chapter 2: 游戏内外
define zhuchi = Character("主持人", color="#3c3fff", what_slow_cps=19, who_outlines=[(1, "#404040", 0, 0)])
define yang = Character("杨义涵", color="#ff3c3c", what_slow_cps=19, who_outlines=[(1, "#404040", 0, 0)])
label Chapter2_Scene1:
$ game_day = 15
$ game_period = "afternoon"
scene bg classroom wide afterschool with fade
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
system_ "【Day 15·下午·七班教室】"
show ryt dialogue normal at right with dissolve
me "十一月的风从窗缝钻进来,带走了夏末最后的余热。我盯着手机屏幕上的推送——《四角州行动》校内赛,下周六。"
me "从重点班跌到现在,好像已经很久了。但在游戏里,段位还是那个段位。至少这个,还没跌。"
hide ryt with dissolve
show xingyu at left with dissolve
xingyu "涛哥!看公告没?校内赛!电竞社这次玩真的,冠军有机械键盘和——重点班旁听一周体验券!"
hide xingyu with dissolve
show ryt dialogue normal at right with dissolve
me "……最后那个,是什么鬼奖励。"
hide ryt with dissolve
show lhy dialogue normal at left with dissolve
lhy "从概率学角度,我们组队胜率取决于三个变量:枪法、战术配合、以及对手里有几个挂。"
show xingyu at right with dissolve
xingyu "小卡你也会玩?"
hide xingyu with dissolve
show lhy dialogue normal at left
lhy "不怎么会。但我可以学。"
hide lhy with dissolve
show ryt dialogue normal at right with dissolve
me "他这说话的表情,跟宣布今天要交数学作业时的一模一样。真是做啥事都认真。"
me "我要邀请他吗?"
menu:
"邀请刘泓予":
$ lhy_stats["affection"] += 5
$ flag["lhy_team"] = True
jump C2Side1
"只找个游戏高手":
$ xingyu_stats["affection"] -= 5
$ flag["lhy_team"] = False
jump C2S2
"还没想好":
$ flag["C2S1_think"] = False
jump C2S2
label C2S2:
$ game_day = 18
$ game_period = "after_school"
scene bg computer lab with fade
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
system_ "【Day 18·放学后·机房】"
show ryt dialogue normal at right with dissolve
me "训练赛,对手是颜涵和杨天赐。一个音游龙👃,一个不知道是男娘还是男同的玩意儿。胜率计算器直接报错。"
hide ryt with dissolve
show yh camerabag at left with dissolve
yh "任懿涛。"
yh "你是主突击位?"
hide yh with dissolve
show ryt dialogue normal at right with dissolve
me "嗯,习惯了。"
hide ryt with dissolve
show yh camerabag at left with dissolve
yh "那我针对你。"
hide yh with dissolve
show ryt dialogue normal at right with dissolve
me "为啥?"
hide ryt with dissolve
show yh camerabag at left with dissolve
yh "练习赛的意义就在于此。找到弱点。"
yh "除非……你怕我?"
# yh笑的立绘
show ryt dialogue normal at right with dissolve
me "他怎么又笑了!好瘆人……我好像更紧张了。"
me "不过我才不会怕他呢"
me "来啊。谁怕谁。"
hide ryt with dissolve
hide yh with dissolve
stop music fadeout 1.0
pause 1.0
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
system_ "【练习赛结束·2:2平】"
show yh camerabag at left with dissolve
yh "手速很快。但你的移动轨迹有pattern。每三次变向就有一次习惯性右偏。"
hide yh with dissolve
show ryt dialogue normal at right with dissolve
me "……你连这个都记?"
hide ryt with dissolve
show yh camerabag at left with dissolve
yh "习惯了。音游打多了,眼睛会自动追踪移动目标。"
yh "对了。"
yh "下周嘉年华筹备开始了。摄影社要做“莘澜面孔”影展。"
yh "你会出镜的。"
hide yh with dissolve
show ryt dialogue normal at right with dissolve
me "……凭什么?"
hide ryt with dissolve
show yh camerabag at left with dissolve
yh "因为我会拍你。"
yh "无论你同意与否。"
hide yh with dissolve
show ryt dialogue normal at right with dissolve
me "他怎么刚说完就走。语气跟高一那回说”你今天发型更丑了“一模一样——不像威胁,倒是像通知。"
hide ryt with dissolve
# —— 机房门口 ——
scene bg computer lab door with dissolve
pause 0.5
show xiaowei at right with dissolve
me "林晓薇?你怎么在这?"
xiaowei "欸——是不是打扰到你们了?"
me "林晓薇......她怎么会出现在机房门口?这栋楼离文科班教室隔了一个操场。"
show xiaowei embarrass at right with dissolve
xiaowei "我、我是来还机房钥匙的!正好路过!"
me "她耳朵红了。高一我就发现了,她说谎的时候先红耳朵。"
show xiaowei at right with dissolve
xiaowei "那、那个……比赛加油!我会去旁观的!"
me "旁观?"
xiaowei "啊不不是那个意思——就是——呃——友好支持!"
hide xiaowei with dissolve
me "她转身就跑。背影消失在楼梯拐角。"
pause 0.5
me "手机响了。"
scene bg classroom phone closeup with dissolve
system_ "【游戏内私聊】薇风拂晓:在吗?"
me "又是她。每次都在我刚上线的时间出现。太巧了。"
xiaowei_w "下周比赛,你会参加对吧?"
me_w "你怎么知道?"
xiaowei_w "……猜的。你游戏ID不是'逍遥剑客'吗,电竞社报名名单上有。"
me_w "你还看报名名单?"
xiaowei_w "随便看看!"
xiaowei_w "那……比赛见。"
me_w "等等,你到底哪个学校的?"
system_ "【对方已离线】"
me "又跑了。每次问到这个问题就消失。"
me "但奇怪的是……我好像并没有很想知道答案。就这么聊着,也挺好。"
$ xiaowei_stats["affection"] += 3
$ xiaowei_stats["interactionFrequency"] += 2
$ yh_stats["affection"] += 2
$ yh_stats["understanding"] += 2
if yutong_stats["affection"] >= 8 and yutong_stats["attention"] >= 12: # 仅为符合格式规范此jump必定执行
jump C2S3
label C2S3:
$ game_day = 20
$ game_period = "afternoon"
scene bg playground with fade
play music "audio/XinLanDiary-Part1.ogg" fadein 2.0
system_ "【Day 20·下午·操场旁】"
show ryt dialogue normal at right with dissolve
me "赛前最后一次训练。机房里设备嗡嗡响。"
me "诶?门口什么时候站着个人。"
hide ryt with dissolve
show yutong at left with dissolve
yutong "学习部检查。"
yutong "学生会接到投诉,说电竞社训练影响晚自习秩序。"
me "是苏雨桐。语气跟开会时一模一样。但她的眼睛在看我手机屏幕,不是看我。"
me "我们只是利用课余时间——"
yutong "《四角州行动》,是吗?"
me "……你怎么知道游戏名?"
yutong "资料调查。"
yutong "……"
yutong "手速确实很快。"
me "她说这句话的时候,声音比刚才轻。然后推了推眼镜,像在掩饰什么。"
yutong "但要小心重复性劳损。腕关节每天最好不要超过两万次点击。"
me "……你在关心我?"
yutong "这是学习部对参赛同学的健康提示。"
yutong "另外……"
yutong "重点班旁听体验券,是真的。"
yutong "如果你想的话。"
me "她转身走了。跟高一一样,走路很快,从不回头看。"
me "但这句'如果你想的话'——她是在传达一个信息,还是在问一个问题?我分不清。"
$ yutong_stats["affection"] += 2
$ yutong_stats["attention"] += 2
jump C2S4
label C2S4:
$ game_day = 22
$ game_period = "afternoon"
scene bg auditorium with fade
play music "audio/XinLanDiary-Part2.ogg" fadein 2.0
system_ "【Day 22·周六·报告厅·电竞社校内赛】"
if flag.get("competition_note"):
show ryt dialogue normal at right with dissolve
me "人比想象的多多了!后排都站满了。陈星宇在调试设备,刘泓予戴着耳机,腿上摊着笔记本。他真的记了笔记。"
hide ryt with dissolve
else:
show ryt dialogue normal at right with dissolve
me "人比想象的多多了后排都站满了。陈星宇在调试设备颜涵拿着他的D850相机。"
hide ryt with dissolve
show ryt dialogue normal at right with dissolve
me "而我在找一个人。'薇风拂晓'说'比赛见'。如果她真的是本校的——"
zhuchi "下面请最后一支签到队伍,'七星文学部'——呃,七班的队伍!"
show xingyu at left with dissolve
xingyu "走了涛哥!上场!"
hide xingyu with dissolve
hide ryt with dissolve
pause 1.0
system_ "【第一轮】胜"
pause 0.5
system_ "【第二轮】胜"
pause 0.5
system_ "【第三轮】平局"
show ryt dialogue normal at right with dissolve
me "手酸。苏雨桐说的两万次点击,可能快到了。"
me "但更重要的是——观众席上,林晓薇正举着手机。目光对上的时候,她没有躲。她笑了,虎牙露出来。"
hide ryt with dissolve
scene bg classroom phone closeup with dissolve
xiaowei_w "打得不错。"
me_w "你在现场?"
xiaowei_w "嗯。"
me_w "哪里?"
xiaowei_w "你猜。"
scene bg auditorium with dissolve
show ryt dialogue normal at right with dissolve
me "我抬头扫了一圈。后排靠左,她戴着耳机,低头看手机。像是感应到什么,她忽然抬头——虎牙。"
me "高一的时候,每次我讲完笑话,她都是第一个笑的那个。"
hide ryt with dissolve
$ xiaowei_stats["affection"] += 3
$ xiaowei_stats["interactionFrequency"] += 2
$ xiaowei_stats["is_xiaowei_w"] = True
jump C2S5
label C2S5:
# ###### CG ######
scene bg auditorium with dissolve
zhuchi "那么,决赛即将开始——"
yang "等一下!"
show ryt dialogue normal at right with dissolve
me "不好,是杨义涵!"
hide ryt with dissolve
yang "我有话要说!"
yang "我要和任懿涛——"
yang "生下一对冠军宝宝!!!"
show ryt dialogue normal at right with dissolve
me "他张开双臂。全场爆笑。主持人手里的麦克风差点掉了。刘泓予——刘泓予低着头,肩膀在抖。"
me "连他都在笑。"
hide ryt with dissolve
menu:
"……哈?":
# depseek认为事后杨义涵会主动找任懿涛聊天触发关于"为什么要做夸张的事"的对话
# (任懿涛发现杨义涵也有类似"用夸张掩饰什么"的一面)
jump C2S5_end
"你先找好对象再说。":
$ yh_stats["affection"] += 1
# ds说杨义涵赛后会在群里发"任懿涛1:0我",两人关系定位变成"损友"
jump C2S5_end
"推开他继续比赛":
$ lhy_stats["affection"] += 1
# 林晓薇在台下会小声说"好无情啊"然后偷笑
jump C2S5_end
label C2S5_end:
# ###### CG ######
# 存疑台词:
# me "最终事件平息。比赛继续。但我鼻子里残留着韭菜盒子的味道,还有满场的笑声没散。"
# me "这就是我的高二——不是在被人拍,就是在被人抱。"
system_ "【决赛结果·七星文学部 2:1 获胜】"
$ tao_stats["humorSense"] += 2
jump C2S6
label C2S6:
$ game_period = "evening"
scene bg schoolgate evening with fade
play music "audio/XinLanDiary-Part2.ogg" fadein 2.0
system_ "【赛后·傍晚·校门口】"
show ryt dialogue normal at right with dissolve
me "散场的时候,我故意走慢了一点。陈星宇说去庆祝,刘泓予说有事,也走了。"
me "我在等一个人。"
hide ryt with dissolve
show xiaowei at left with dissolve
xiaowei "那个……"
me "路灯下面,她的短发被风吹得有点乱。"
me "你来了。"
xiaowei "恭喜你。冠军。"
xiaowei "我说了会旁观的嘛。"
show ryt dialogue normal at right with dissolve
me "我举起手机。屏幕上,是'薇风拂晓'的对话框。"
me "但我问的不是比赛。"
hide ryt with dissolve
xiaowei "……"
xiaowei "我就知道瞒不过你。"
hide xiaowei with dissolve
menu:
"所以游戏里的配合,都是演的?":
$ xiaowei_stats["affection"] += 1
show xiaowei at left with dissolve
xiaowei "不是演的!我真的觉得我们配合很好——啊不对,我不是那个意思——"
"怎么不早说?":
$ xiaowei_stats["affection"] += 2
show xiaowei at left with dissolve
xiaowei "因为怕你觉得奇怪……高一之后就分班了,突然游戏里相认什么的……"
"……下次排位带带我?":
$ xiaowei_stats["affection"] += 3
show xiaowei at left with dissolve
xiaowei "……欸?{cps=2}啊、好!{cps=20}不对,你段位比我高!"
# 立绘:她低头绞着背包带子
show xiaowei at left with dissolve
xiaowei "总之……对不起?瞒了你这么久。"
hide xiaowei with dissolve
me "高一那个课间,她也是这样低头翻笔记,然后抬头说'你刚才那个笑话再讲一遍'。"
me "没什么好道歉的。"
me "只是下次要说实话。"
me "在游戏里——如果有下次配合的话。"
show xiaowei at left with dissolve
xiaowei "……欸?" # 懵,略微疑惑,少许惊喜
xiaowei "一定!" # 笑
hide xiaowei with dissolve
me "她笑了。虎牙露出来。跟高一那个课间一样的笑。"
$ xiaowei_stats["synergy"] += 3
$ xiaowei_stats["interactionFrequency"] += 2
jump C2S7
label C2S7:
$ game_period = "night"
scene bg ryt room night with fade
stop music fadeout 1.0
play music "audio/XinLanDiary-Part2.ogg" fadein 2.0
system_ "【同夜·家中】"
show ryt dialogue normal at right with dissolve
me "躺在床上,盯着天花板。今天发生了太多事——冠军、拥抱、她身份的揭晓。"
me "手机亮了。"
hide ryt with dissolve
yutong "《四角州行动》概率计算题,我出在了学习部的下周挑战里。如果你有兴趣的话。"
me "她怎么有我的联系方式。"
me "不对,她是学习部部长,找谁的联系方式都行。但为什么专门发给我?"
me "概率计算题。用游戏出题。跟上次嘉年华数学摊位那个一样——她知道我会感兴趣。"
system_ "【画廊更新】电竞时刻:手速与反应速度的实证研究。"
me "果然。李泽瑄不会放过任何素材。"
me "但照片里——不止我一个人。陈星宇在画面边缘大笑,刘泓予低头记笔记,林晓薇在观众席举起手机。还有角落里,苏雨桐抱着笔记本,假装在看别的地方。"
me "原来被拍下来的时候,我一直不是一个人。"
me "窗外,十一月的夜空很干净。高一的时候我从没注意过这些。现在我开始观察。"
$ yutong_stats["affection"] += 2
$ yutong_stats["attention"] += 2
$ lzx_stats["infoOpenness"] += 1
$ tao_stats["selfAcceptance"] += 2
pause 1.0
scene bg black with fade
pause 1.5
system_ "【第二章·游戏内外·完】"
return

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
game/images/bg rooftop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

BIN
game/images/xiaowei.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

View File

@@ -1,4 +1,4 @@
# 游戏的脚本可置于此文件中。
# 游戏的脚本可置于此文件中。
# 声明此游戏使用的角色。颜色参数可使角色姓名着色。
define me = Character("任懿涛", color="#71b4e4", what_slow_cps=19, who_outlines=[(1, "#565656", 0, 0)])
@@ -72,6 +72,10 @@ default lzx_stats = {
"infoOpenness": 0, # 信息开放度
}
# ====== 其他全局变量 ======
default flag = {
}
# ====== 时间系统变量 ======
default game_day = 1 # 游戏内日期(第几天)
default game_period = "morning"

BIN
game/xiaowei.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

131
review/Chapter1-review.md Normal file
View File

@@ -0,0 +1,131 @@
# Chapter1.rpy 审阅报告
## 文件信息
- 文件路径: `game/Chapters/Chapter1.rpy`
- 行数: 429
- 包含场景: Chapter1_Scene1 ~ Chapter1_Scene4
- 跳转终点: Chapter2_Scene1位于 Chapter2.rpy
---
## 语法错误
**无严重语法错误**。Ren'Py 基本语法正常,`scene`/`show`/`hide`/`jump` 语句格式正确,`$` Python 赋值语句语法正常。
---
## 角色定义检查
| 角色 | 定义位置 | 使用情况 | 状态 |
|------|----------|----------|------|
| `me` | script.rpy:4 | 正常 | ✓ |
| `system_` | script.rpy:11 | 正常 | ✓ |
| `xingyu` | script.rpy:5 | 正常 | ✓ |
| `lhy` | script.rpy:6 | 正常 | ✓ |
| `lzx` | script.rpy:7 | 仅旁白引用,未使用 Character 发言 | ✓ |
| `tongxue` | script.rpy:16 | 正常 | ✓ |
| `yutong` | script.rpy:13 | 正常 | ✓ |
| `ganshi` | script.rpy:17 | 正常 | ✓ |
| `xiaowei` | script.rpy:9 | 正常 | ✓ |
| `xiaowei_w` | script.rpy:10 | 正常 | ✓ |
| `me_w` | script.rpy:15 | 正常 | ✓ |
| `mom` | script.rpy:12 | 正常 | ✓ |
| `yh` | script.rpy:14 | 正常 | ✓ |
| `"便利店主"` | 行343字符串字面量 | ⚠️ 见下方说明 | ✓ |
### 关于"便利店主"角色(行 343
```renpy
"便利店主" "小任,新品。尝尝,你们年轻人喜欢这个。"
```
此角色未在 script.rpy 中定义为 Character 对象使用了内联字符串作为说话人。Ren'Py **允许**此写法,会自动生成临时角色。但建议统一在 script.rpy 中定义,便于管理颜色、语速等属性。
---
## 图像引用检查
所有 `show` 命令引用的图像均在 `game/images/` 目录中找到对应文件:
| 引用 | 文件 |
|------|------|
| `aunt normal` | `aunt normal.png` ✓ |
| `xingyu thinking/laughing/laughing big/laughing 2` | 对应 png 均存在 ✓ |
| `ryt dialogue normal/hit/embarrass pocket/embarrass pocket2/normal spec` | 对应 png 均存在 ✓ |
| `lhy dialogue normal` | `lhy dialogue normal.png` ✓ |
| `yh camerabag` | `yh camerabag.png` ✓ |
| `xiaowei` / `xiaowei embarrass` | 对应 png 均存在 ✓ |
所有背景图像文件均存在 ✓
---
## Flag 和变量检查
### 统计变量修改
| 变量 | 修改位置 | 累计修改值 |
|------|----------|-----------|
| `lhy_stats["affection"]` | 行85, 153, 323 | +3, +5, +3 = **+11** |
| `lhy_stats["trust"]` | 行86, 154 | +2, +5 = **+7** |
| `lhy_stats["empathy"]` | 行155 | **+3** |
| `xingyu_stats["affection"]` | 行87, 320 | +3, +5 = **+8** |
| `xingyu_stats["cooperation"]` | 行88, 321 | +2, +5 = **+7** |
| `xingyu_stats["helpfulness"]` | 行322 | **+3** |
| `tao_stats["humorSense"]` | 行89 | **+2** |
| `tao_stats["selfAcceptance"]` | 行156, 326, 380 | +1, +2, +1 = **+4** |
| `tao_stats["studyStress"]` | 行157, 381 | +2, +1 = **+3** |
| `lzx_stats["infoOpenness"]` | 行90 | **+1** |
| `yutong_stats["affection"]` | 行193, 378, 397 | +3, +2, +3 = **+8** |
| `yutong_stats["attention"]` | 行194, 379, 398 | +5, +3, +4 = **+12** |
| `yutong_stats["h_academicSupport"]` | 行195 | **+1** |
| `xiaowei_stats["affection"]` | 行233, 412 | +4, +3 = **+7** |
| `xiaowei_stats["interactionFrequency"]` | 行234, 413 | +2, +3 = **+5** |
| `xiaowei_stats["is_xiaowei_w"]` | 行235 | 设为 False |
| `yh_stats["affection"]` | 行324 | **+3** |
| `yh_stats["understanding"]` | 行325 | **+2** |
所有修改的 stat key 均在 script.rpy 中定义 ✓
### 其他变量
- `gallery_photo4_unlocked = True` (行73): 定义在 script.rpy:90 ✓
- `game_day` / `game_period`: 正常赋值 ✓
---
## 逻辑错误
### ⚠️ 1. `hide ryt` 冗余调用(行 128
```renpy
# 行125: #show ryt hit at center with dissolve ← 已被注释
# 行126: scene bg playground with dissolve ← scene 清空所有图像
# 行127: me "深吸一口气..." ← me 无 sprite 也能说话
# 行128: hide ryt with dissolve ← ryt 已不存在,无操作
```
`show ryt` 已被注释,且 `scene` 语句已清空场景,`hide ryt` 为无效操作。不会导致运行时错误,但可删除。
### ⚠️ 2. `$ xiaowei_stats["is_xiaowei_w"] = False` 冗余(行 235
`is_xiaowei_w` 默认值已为 `False`script.rpy:46此处重新赋值无实际效果。虽不致命但如果意图是"在特定剧情点重置该 flag",应确认逻辑正确性。
---
## 奇怪/不当的对话
### 无明显问题
Chapter1 的对话整体符合角色设定,叙事流畅,不存在明显不当内容。
### 小建议
- 行58: `me "你们先打,下次我一定来 {cps=3} {cps=20}——前提是我妈能接受她儿子在篮球场上挥洒青春而不是在车里背单词。"``{cps=3}` 后跟空格再 `{cps=20}`,在空格处会以 cps=20 显示,即瞬间且无声停顿后正常语速。符合预期停顿效果。
---
## 清理建议
1. 删除无效注释行如行61 的 `#stop music fadeout 1.0`、行125 的 `#show ryt hit...` 等)
2. 删除元数据注释行71, 78, 165, 177, 182, 218, 243 中的 `.lzx` 标注属于作者审阅标记,不应留在正式脚本中)
3.`"便利店主"` 统一定义为 Character 对象
4. 删除行128 的冗余 `hide ryt`

View File

@@ -0,0 +1,110 @@
# Chapter2-Side.rpy 审阅报告
## 文件信息
- 文件路径: `game/Chapters/Chapter2/Chapter2-Side.rpy`
- 行数: 126
- 包含场景: C2Side1, C2Side1S1, C2Side1S2, C2Side1S3
- 入口: 仅从 Chapter2_Scene1 菜单"邀请刘泓予"跳入
---
## 语法错误
**无语法错误**
---
## 角色定义检查
| 角色 | 定义位置 | 使用情况 | 状态 |
|------|----------|----------|------|
| `me` | script.rpy:4 | 正常 | ✓ |
| `lhy` | script.rpy:6 | 正常 | ✓ |
| `tongxue` | script.rpy:16 | 正常 | ✓ |
---
## 图像引用检查
- `bg rooftop`: `bg rooftop.png` 存在untracked
- `lhy dialogue normal`: 存在 ✓
- `ryt dialogue normal` / `ryt dialogue embarrass pocket` / `ryt dialogue embarrass pocket2`: 存在 ✓
---
## Flag 和变量检查
| 变量/Flag | 设置位置 | 值 | 读取位置 |
|-----------|----------|-----|----------|
| `flag["C4"]` | 行75 | 1 | **未读取** |
| `flag["competition_note"]` | 行75 | True | Chapter2.rpy:237 |
| `lhy_stats["trust"]` | 行77, 100 | +2 / +1 | — |
| `lhy_stats["empathy"]` | 行79, 101, 123 | +1 each | — |
| `tao_stats["humorSense"]` | 行78, 101, 122 | +1 each | — |
| `lhy_stats["affection"]` | 行38, 41, 44 | +3/+2/+1 (按选择) | — |
### 未使用的 Flag
`flag["C4"]` (行75): 在 C2Side1S1 分支中设为 1但代码库中未读取。推测为第4章的预留 flag建议加注释说明。
---
## 逻辑错误
### 🔴 严重: `return` 导致游戏直接结束 (行 6-7)
```renpy
label C2Side1:
if lhy_stats["affection"] < 11:
return
```
**问题**: 进入 C2Side1 的方式是通过 `jump C2Side1`Chapter2.rpy:45没有 `call` 调用栈。当 `return` 被执行时Ren'Py 会**返回主菜单**,而非继续游戏。
**触发条件**: `lhy_stats["affection"] < 11`。实际上 Chapter1 结束时 lhy affection = 113+5+3加上 Chapter2_Scene1 选择"邀请刘泓予"后 +5 = 16所以当前数据下该条件永远为 False。但
- 若有其他路径进入 C2Side1 且 affection 不足,游戏会异常退出
- 代码意图是"好感度不够时跳过支线"
**修复**:
```renpy
if lhy_stats["affection"] < 11:
jump C2S2
```
---
## 奇怪/不当的对话
### 🔴 严重: 行89 — 极度不当的辱骂
```renpy
me "你妈死了刘泓予!"
```
这是 C2Side1S2选择"怕什么,我可以一打三")分支中的主角台词。上下文:
```
lhy "你的自信心从何而来我一直很好奇。但这确实有一定作用。"
me "你妈死了刘泓予!" ← 突兀的辱骂
```
**问题严重**:
1. 与前后文**完全脱节**——刘泓予刚说完一句中性偏正面的话,主角毫无理由地突然辱骂
2. 与主角**人设严重冲突**——任懿涛是使用幽默应对压力的高中生,不是毫无理由口出恶言的人
3. 在校园题材视觉小说中加入此类粗口极为不协调
**建议**: 立刻替换为符合角色性格的台词。例如:
```renpy
me "你说话怎么跟我妈似的..."
```
或:
```renpy
me "行行行,你说得对。但我就是自信,天生的。"
```
---
## 清理建议
1. **立即修改行89的辱骂台词**(最高优先级)
2. 修复行7的 `return``jump C2S2`
3.`flag["C4"]` 添加用途注释

160
review/Chapter2-review.md Normal file
View File

@@ -0,0 +1,160 @@
# Chapter2.rpy 审阅报告
## 文件信息
- 文件路径: `game/Chapters/Chapter2/Chapter2.rpy`
- 行数: 440
- 包含场景: Chapter2_Scene1, C2S2 ~ C2S7 + C2S5_end
- 新增角色定义: `zhuchi` (主持人), `yang` (杨义涵)
---
## 语法错误
**无语法错误**`menu` 语句、条件跳转、`if`/`else` 结构基本正确(详见下方逻辑错误部分)。
---
## 角色定义检查
| 角色 | 定义位置 | 使用情况 | 状态 |
|------|----------|----------|------|
| `me` | script.rpy:4 | 正常 | ✓ |
| `system_` | script.rpy:11 | 正常 | ✓ |
| `xingyu` | script.rpy:5 | 正常 | ✓ |
| `lhy` | script.rpy:6 | 正常 | ✓ |
| `yh` | script.rpy:14 | 正常 | ✓ |
| `xiaowei` | script.rpy:9 | 正常 | ✓ |
| `xiaowei_w` | script.rpy:10 | 正常 | ✓ |
| `me_w` | script.rpy:15 | 正常 | ✓ |
| `yutong` | script.rpy:13 | 正常 | ✓ |
| `zhuchi` | Chapter2.rpy:2 | 正常 | ✓ |
| `yang` | Chapter2.rpy:3 | 正常 | ✓ |
| `tongxue` | script.rpy:16 | 未在 Chapter2 使用 | — |
### yutong 角色使用
`yutong` 在 C2S3 (行194) 中被 `show` 显示为 sprite`game/images/` 中**不存在 `yutong.png`**,游戏运行到此时会报错。详见下方"缺失资源"。
---
## 图像引用检查
### 🔴 缺失的图像文件
| 引用位置 | 图像名 | 文件 | 状态 |
|----------|--------|------|------|
| 行58 | `bg computer lab` | — | **缺失!** |
| 行130 | `bg computer lab door` | — | **缺失!** |
| 行194 | `yutong` (sprite) | — | **缺失!** |
| 行337 | `bg schoolgate evening` | — | **缺失!** |
| 行406 | `bg ryt room night` | — | **缺失!** |
### 已存在但未跟踪的资源
| 引用 | 文件 | Git 状态 |
|------|------|-----------|
| `bg auditorium` (行233) | `bg auditorium.png` | untracked |
| `bg rooftop` | `bg rooftop.png` | untracked |
| `bg xiaowei room night` | `bg xiaowei room night.png` | untracked |
---
## Flag 和变量检查
### Flag 字典
| Flag | 设置位置 | 读取位置 | 状态 |
|------|----------|----------|------|
| `flag["lhy_team"]` | 行44 (True) / 行48 (False) | 未读取 | ⚠️ 只写未读 |
| `flag["C2S1_think"]` | 行51 (False) | 未读取 | ⚠️ 只写未读 |
| `flag["competition_note"]` | C2Side1.rpy:75 (True) | 行237 `.get(...)` | ✓ |
### 统计变量修改
| 变量 | 修改位置 | 值 |
|------|----------|-----|
| `lhy_stats["affection"]` | 行43, 318 | +5, +1 |
| `xingyu_stats["affection"]` | 行47 | -5 (惩罚分支) |
| `yh_stats["affection"]` | 行175, 314 | +2, +1 |
| `yh_stats["understanding"]` | 行176 | +2 |
| `xiaowei_stats["affection"]` | 行173, 281, 367-378 | 根据选择 +1~3 |
| `xiaowei_stats["interactionFrequency"]` | 行174, 282, 398 | +2 × 2 |
| `xiaowei_stats["synergy"]` | 行397 | +3 |
| `xiaowei_stats["is_xiaowei_w"]` | 行283 | True |
| `yutong_stats["affection"]` | 行224, 429 | +2 × 2 |
| `yutong_stats["attention"]` | 行225, 430 | +2 × 2 |
| `tao_stats["humorSense"]` | 行330 | +2 |
| `tao_stats["selfAcceptance"]` | 行432 | +2 |
| `lzx_stats["infoOpenness"]` | 行431 | +1 |
所有 key 均在 script.rpy 中定义 ✓
---
## 逻辑错误
### 🔴 严重: C2S3 条件跳转无效 (行 178-181)
```renpy
if yutong_stats["affection"] >= 8 and yutong_stats["attention"] >= 12:
jump C2S3
label C2S3:
```
**问题**: `if` 语句没有 `else` 分支。条件为 False 时,代码将"掉入"下一行——而下一行正好是 `label C2S3:`。意味着 **无论条件真假C2S3 都会执行**,条件形同虚设。
实际上Chapter1 结束时 `yutong_stats["affection"]` = 8, `attention` = 12恰好等于阈值所以当前数据下条件始终为 True。但:
1. 如果后续修改 Chapter1 的数值bug 就会暴露
2. 代码意图显然是"条件满足才进入 C2S3"
**修复**: 添加 else 跳转:
```renpy
if yutong_stats["affection"] >= 8 and yutong_stats["attention"] >= 12:
jump C2S3
else:
jump C2S4
```
### ⚠️ 2. `flag["lhy_team"]` 和 `flag["C2S1_think"]` 只写未读
- `flag["lhy_team"]` 在行44/48 被设置,但整个代码库中从未读取。如果未来章节需要使用,建议添加注释说明用途。
- `flag["C2S1_think"]` 同样只设置未使用。
---
## 奇怪/不当的对话
### 🔴 行63: 不当用词
```renpy
me "训练赛,对手是颜涵和杨天赐。一个音游龙👃,一个不知道是男娘还是男同的玩意儿。"
```
- emoji `👃` 在 Ren'Py 中可能无法正确渲染
- "男娘"和"男同"属于对同学不尊重的称呼,与主角"用幽默掩饰不自信"的人设不完全吻合。建议修改为更符合高中生日常表达的方式。
### ⚠️ 行301: 疑似错别字
```renpy
yang "我要和仁懿涛——"
```
"任懿涛"写成了"仁懿涛"。若是刻意设计(体现角色口误),建议加注释;否则应修正。
### ⚠️ 行326: 注释中的存疑台词
```renpy
# me "最终事件平息。比赛继续。但我鼻子里残留着韭菜盒子的味道,还有满场的笑声没散。"
```
这段被注释掉了。如果决定不用,建议直接删除而非保留注释。
---
## 清理建议
1. **补充 5 个缺失的图像文件**(见上方清单)
2. 修复 C2S3 条件跳转逻辑行178-181
3. 修改行63的不当用词
4. 确认行301的"仁懿涛"是否为刻意
5. 删除行325-326的注释代码
6. 为只写未读的 flag 添加注释说明用途,或标记为 `# TODO: 第X章使用`

59
review/SUMMARY.md Normal file
View File

@@ -0,0 +1,59 @@
# 审阅总览
> 审阅日期: 2026-04-26 | 项目版本: dev0.0.8.5
## 审阅范围
| 文件 | 行数 | 场景数 | 报告 |
|------|------|--------|------|
| `game/Chapters/Chapter1.rpy` | 429 | 4 (Scene1~4) | [Chapter1-review.md](Chapter1-review.md) |
| `game/Chapters/Chapter2/Chapter2.rpy` | 440 | 7 (Scene1, C2S2~S7) | [Chapter2-review.md](Chapter2-review.md) |
| `game/Chapters/Chapter2/Chapter2-Side.rpy` | 126 | 4 (C2Side1, S1~S3) | [Chapter2-Side-review.md](Chapter2-Side-review.md) |
---
## 问题汇总(按严重程度排序)
### 🔴 严重 — 必须修复
| # | 文件 | 位置 | 问题 |
|---|------|------|------|
| 1 | Chapter2-Side.rpy | 行89 | **极度不当台词**`me "你妈死了刘泓予!"` — 突兀辱骂,与角色人设完全不符 |
| 2 | Chapter2-Side.rpy | 行7 | **`return` 导致游戏退出**:好感不足时应 `jump C2S2` 而非 `return` |
| 3 | Chapter2.rpy | 行178-181 | **C2S3 条件跳转无效**:缺少 `else`,条件形同虚设 |
| 4 | Chapter2.rpy | — | **5 个图像文件缺失**`bg computer lab`, `bg computer lab door`, `yutong` (sprite), `bg schoolgate evening`, `bg ryt room night` |
### ⚠️ 警告 — 建议修复
| # | 文件 | 位置 | 问题 |
|---|------|------|------|
| 5 | Chapter2.rpy | 行63 | 不当用词("男娘"/"男同" 称呼同学) |
| 6 | Chapter2.rpy | 行301 | "仁懿涛"疑为"任懿涛"错别字 |
| 7 | Chapter2.rpy | 行44,48,51 | `flag["lhy_team"]` / `flag["C2S1_think"]` 只写未读 |
| 8 | Chapter2-Side.rpy | 行75 | `flag["C4"]` 只写未读 |
| 9 | Chapter1.rpy | 行128 | `hide ryt` 无效操作scene 已清空show 已被注释) |
| 10 | Chapter1.rpy | 行235 | `is_xiaowei_w = False` 冗余(默认已是 False |
### 💡 建议 — 清理优化
| # | 文件 | 位置 | 问题 |
|---|------|------|------|
| 11 | Chapter1.rpy | 多处 | 删除元数据注释(`.lzx` 标注、注释掉的废弃代码) |
| 12 | Chapter1.rpy | 行343 | `"便利店主"` 建议定义为 Character 对象 |
| 13 | Chapter2.rpy | 行325-326 | 删除废弃的注释代码 |
---
## 各角色 stats 定义完整性
全部通过。所有在 Chapters 中使用的 stat key 均在 `script.rpy` 中正确定义,无拼写错误。
## 跳转目标完整性
| 跳转 | 目标标签 | 所在文件 | 状态 |
|------|----------|----------|------|
| `jump Chapter1_Scene2/3/4` | 同文件 | Chapter1.rpy | ✓ |
| `jump Chapter2_Scene1` | Chapter2_Scene1 | Chapter2.rpy:5 | ✓ |
| `jump C2Side1` | C2Side1 | Chapter2-Side.rpy:4 | ✓ |
| `jump C2S2~S7` | 同文件 | Chapter2.rpy | ✓ |
| `jump C2Side1S1/S2/S3` | 同文件 | Chapter2-Side.rpy | ✓ |