commit e5dd12cfa7ed400b8feae19f658b43172cba987c Author: Cafw Date: Wed Feb 25 23:01:11 2026 +0800 feat: initial commit of XinLanDiary v0.0.6 dev 首次提交莘澜日记项目源码,包含第一章剧情脚本、UI 界面、角色素材及游戏配置。 排除了编译产物(.rpyc)、运行时存档、缓存及敏感密钥文件。 Co-Authored-By: Claude Sonnet 4.6 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..17b740b --- /dev/null +++ b/.gitignore @@ -0,0 +1,68 @@ +# ============================================= +# Ren'Py Compiled Files (auto-generated) +# ============================================= +*.rpyc +*.rpyb +game/cache/ +game/saves/ +game/temp/ + +# ============================================= +# Runtime Logs +# ============================================= +log.txt +traceback.txt +errors.txt +game/log.txt +game/traceback.txt +game/errors.txt + +# ============================================= +# Sensitive Credentials (NEVER commit these) +# ============================================= +*.keystore +*.jks + +# ============================================= +# macOS System Files +# ============================================= +.DS_Store +.DS_Store? +._* +.Spotlight-V7 +.Trashes +Thumbs.db + +# ============================================= +# Editor & IDE +# ============================================= +.vscode/ +.idea/ +*.swp +*.swo + +# ============================================= +# Backup Files +# ============================================= +*.bak +*.orig +*.backup + +# ============================================= +# Claude Code Session Files +# ============================================= +.claude/ + +# ============================================= +# Ren'Py / Android Build Artifacts +# ============================================= +progressive_download.txt +rapt/ +.android/ + +# ============================================= +# Python +# ============================================= +__pycache__/ +*.py[cod] +*.pyo diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..27f7384 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,100 @@ +# 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/Chapters/Chapter1.rpy:31` — 引用了未定义的变换 `move_to_bottomleft` +- `game/screens.rpy:318` — 按钮定义中存在非法中文标点符号(`。`) + +## 项目架构 + +### 核心文件 + +| 文件 | 作用 | +|------|------| +| `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`,语法错误会阻止游戏启动并写入上述日志。 diff --git a/android-icon_background.png b/android-icon_background.png new file mode 100644 index 0000000..df3db4d Binary files /dev/null and b/android-icon_background.png differ diff --git a/android-icon_foreground.png b/android-icon_foreground.png new file mode 100644 index 0000000..33e6e34 Binary files /dev/null and b/android-icon_foreground.png differ diff --git a/android-presplash.png b/android-presplash.png new file mode 100644 index 0000000..62c10bd Binary files /dev/null and b/android-presplash.png differ diff --git a/android.json b/android.json new file mode 100755 index 0000000..18a716f --- /dev/null +++ b/android.json @@ -0,0 +1,24 @@ +{ + "expansion": false, + "google_play_key": null, + "google_play_salt": null, + "heap_size": "3", + "icon_name": "\u8398\u6f9c\u65e5\u8bb0", + "include_pil": false, + "include_sqlite": false, + "layout": null, + "name": "\u8398\u6f9c\u65e5\u8bb0b0.0.6", + "numeric_version": 1, + "orientation": "sensorLandscape", + "package": "com.rytstudio.xinlandiary", + "permissions": [ + "VIBRATE", + "INTERNET" + ], + "source": false, + "store": "none", + "update_always": true, + "update_icons": true, + "update_keystores": true, + "version": "1.0" +} \ No newline at end of file diff --git a/game/Chapters/Chapter1.rpy b/game/Chapters/Chapter1.rpy new file mode 100755 index 0000000..49e0745 --- /dev/null +++ b/game/Chapters/Chapter1.rpy @@ -0,0 +1,389 @@ +# Chapter 1: 画廊风波 +# Characters defined here that are not in script.rpy + + +label Chapter1_Scene1: + scene bg classroom featryt with fade + + me "{cps=25}九月的风还带着夏末的燥热,那道斜切过窗台的阳光,在黑板上画出一道明晃晃的线。\n就像我的人生,被分成了两半——线的那头,是重点班;线的这头,是我。" + me "这道光就这么直直地切过来,像是在提醒我,你就在这儿,也只能在这儿了。\n曾经唾手可得,如今遥不可及。" + + pause 0.5 + show xingyu thinking at left + + xingyu "涛哥,你咋又对着黑板发呆?" + show xingyu laughing + xingyu "该不会是在研究光线折射角度吧?" + hide xingyu + + show ryt dialogue normal at right + me "{cps=28}错!{cps=1} {cps=17}我在思考一个深刻的哲学问题 ——{cps=5} {cps=18}为什么物理老师的头发总是逆着地心引力生长?" + hide ryt + + show lhy dialogue normal at left + lhy "根据观察,王老师的发际线在过去六个月里上移了0.8厘米,主要集中于期中考试前后。\n相关性系数0.76。" + + show ryt hit at right + me "你们看!{cps=6} {cps=20}这就是重点班的余孽,看什么都得用数据说话。吃我一掌!" + + show lhy dialogue normal at left, shake_rotate + lhy "你的发力角度今天调整了,从之前的斜上45度改为42度,动能转化效率提升了约5\%。有进步。" + hide lhy + show lhy dialogue normal at left + show ryt dialogue embarrass pocket at right + + show xingyu laughing big + xingyu "{cps=5}哈哈哈哈哈{cps=15}!\n真是一对苦命鸳鸯!" + + play sound "audio/xiakering.mp3" + scene bg black with fade + pause 1.0 + scene bg playground twilight + + show xingyu laughing 2 + xingyu "终于放学了!\n操场!走,三对三!今天必须把九班那群人打趴下!" + hide xingyu + mom "「17:40校门口便利店,别迟到。」" + show ryt dialogue normal at right + me "......妈妈又给我发这消息" + me "我得等车。\n你们先打,下次我一定来 {cps=3} {cps=20}——前提是我妈能接受她儿子在篮球场上挥洒青春而不是在车里背单词。" + show xingyu at left + xingyu "涛哥,你这样不行啊,迟早得「起义」。" + stop sound fadeout 1.0 + + hide xingyu with dissolve + + me "那声'起义'在心里荡开了一个小涟漪。" + me "他说得对——但说出口的代价,比他想的要重得多。" + hide ryt with dissolve + + pause 0.8 + + lzx "画廊更新了,有惊喜。友情提示:这次可能会火。" + + me "……“任懿涛观察日志?”" + system_ "【画廊更新】力学之美:作用力与反作用力在友谊中的应用。\n图注:请注意研究对象在空中时的肢体协调度与落地后的平衡恢复能力。" + #system_ "图注:请注意研究对象在空中时的肢体协调度与落地后的平衡恢复能力。" + + show ryt dialogue embarrass pocket at center with dissolve + me "三张连拍……全程记录,还加了学术注释。行吧,就是个玩笑。" + hide ryt with dissolve + + $ lhy_stats["affection"] += 3 + $ lhy_stats["trust"] += 2 + $ xingyu_stats["affection"] += 3 + $ xingyu_stats["cooperation"] += 2 + $ tao_stats["humorSense"] += 2 + $ lzx_stats["infoOpenness"] += 1 + + jump Chapter1_Scene2 + +label Chapter1_Scene2: + scene bg classroom morning featryt with fade + #system_ "【第二天早上】" + + me "第二天早上,一切都不一样了。" + me "刚踏进七班,就感觉空气里有种微妙的兴奋。" + me "几个别班男生挤在后门,看到我进来——" + tongxue "涛哥!高手啊!" + tongxue "这弹跳力,不考虑加入校篮球队?" + tongxue "刘泓予还好吗?需要验伤不?" + + show ryt dialogue normal at c1s2_ryt_pos with dissolve + me "笑,我只管笑。" + hide ryt with dissolve + + me "走到座位,拿出手机——" + system_ "【匿名论坛·置顶】震惊!高二学霸竟在教室对同学实施「物理攻击」!\n 回复:502层 | 转发:88" + + show ryt dialogue embarrass pocket at c1s2_ryt_pos with dissolve + me "……五百多层?" + me "李泽瑄那个链接,被人转到论坛上了?!" + hide ryt with dissolve + + scene bg playground morning aerial with fade + me "课间操,成了公开处刑。" + me "站在队列里,我能感觉到四面八方投来的目光,听到各处的窃窃私语。" + + + #show ryt hit at center with dissolve + scene bg playground with dissolve + me "深吸一口气——经过八班队列时,我故意做了个跳起来打空气的动作,表情夸张。" + hide ryt with dissolve + tongxue "哈哈哈哈——" + me "果然,又是一阵笑声。" + me "我的那层盔甲还在。 对吗?" + + pause 0.3 + + # 关键场景:刘泓予看穿 + show lhy dialogue normal at right with dissolve + lhy "你刚才那个假动作,面部肌肉的紧张程度是平时的1.3倍。" + show ryt dialogue embarrass pocket at left with dissolve + me "……" + lhy "高强度社交应激状态下,人体会产生应激性微表情抑制行为。你的眼轮匝肌收缩时序比平时延迟了0.2秒。" + + hide ryt with dissolve + hide lhy with dissolve + + me "他说这话的时候,语气跟讲公式一模一样。" + me "但不知道为什么,被他这么一说……我反而松了口气。" + me "有人看见了,但没有嘲笑。只是……记录。" + + $ lhy_stats["affection"] += 5 + $ lhy_stats["trust"] += 5 + $ lhy_stats["empathy"] += 3 + $ tao_stats["selfAcceptance"] += 1 + $ tao_stats["studyStress"] += 2 + + jump Chapter1_Scene3 + +label Chapter1_Scene3: + # —— 视角A:苏雨桐·学生会会议室 —— + scene bg meetingroom meeting with fade + "{cps=20}【同日下午·学生会会议室】" # system_ "【同日下午·学生会会议室】" + + me "下午的学生会会议室里,宣传部的干事滔滔不绝。" + ganshi "——就像最近论坛里很火的那个'力学之美'系列,这种原生内容特别容易引发共鸣,我们宣传部可以朝这个方向多发掘——" + + pause 0.3 + scene bg meetingroom featlxw at zoom_to_upper_right + yutong "稍等。" + pause 0.5 + yutong "这类内容涉及肖像权问题。根据《民法典》第一千零一十九条,未经同意使用他人肖像,即便没有营利目的,如果造成当事人困扰,也涉嫌侵权。" + yutong "尤其是这种可能引发负面关注的传播,我们需要更谨慎。" + + me "会议室陷入短暂沉默。" # 把me删掉? 不删!.lzx + + scene bg meetingroom meeting with dissolve + ganshi "雨桐提醒得对……这个问题我们后续会注意的。那继续下一项——" + + "{cps=20}会议继续。没人看见,她放在桌下的手机屏幕上——" # 这个me也删掉?删掉!.lzx + system_ "【苏雨桐手机·加密相册·新增1张】" + yutong "……力学之美……有趣的视角。" + "{cps=20}她把第三张连拍放大,看了很久。" + "{cps=20}那个落地踉跄、表情错愕的瞬间,和高一时那个数学竞赛获奖后,在走廊里短暂发呆的男生,微妙地重合了。" + yutong "「给岁月以文明,而不是给文明以岁月。」" + yutong "我那天递给他的纸条上可不仅写了“恭喜”二字……" + yutong "这句话,他没有回应。\n 或许他根本就没有看见……" + + $ yutong_stats["affection"] += 3 + $ yutong_stats["attention"] += 5 + $ yutong_stats["h_academicSupport"] += 1 + + pause 0.5 + + # —— 视角B:林晓薇·高二一班走廊 —— + scene bg corridor with dissolve + "【同日下午·高二一班走廊】" + + show xiaowei at left with dissolve + "同一时间,另一个人也在看那张照片。" + tongxue "晓薇你快看!这不是你们一班那个任懿涛吗?他怎么还是这么搞笑!" + xiaowei "拍得好生动啊!你们说,要是我也这样跳起来打人,会不会也这么有效果?" + tongxue "哈哈哈哈!" + hide xiaowei with dissolve + + "{cps=20}她笑着,眼睛却没有离开屏幕。" + "{cps=20}那种真实的活力,让她觉得……在礼貌而疏离的文科班里,有什么东西被触动了。" + + #system_ "【切换账号:薇风拂晓】" + scene bg classroom phone closeup with dissolve + system_ "好友列表:逍遥剑客 [[在线]" + xiaowei_w "在吗?问个事。你们学校是不是有个挺搞笑的人?最近好像因为什么照片火了。" + "发出去的瞬间她就后悔了。太突兀了——但已经来不及撤回。" + pause 0.8 + me_w "???你哪个学校的?" + xiaowei_w "就随便问问,不想说算了。" + me "她收起手机。上课铃响了。" + me "路过七班门口时,她下意识往里看了一眼——" + show ryt dialogue normal at right with dissolve + show xingyu at left with dissolve + me "任懿涛正背对门口,和陈星宇比划着什么。大概又是游戏攻略。" + hide ryt with dissolve + hide xingyu with dissolve + + $ xiaowei_stats["affection"] += 4 + $ xiaowei_stats["interactionFrequency"] += 2 + $ xiaowei_stats["is_xiaowei_w"] = False + + jump Chapter1_Scene4 + +label Chapter1_Scene4: + scene bg classroom wide afterschool with fade + "{cps=20}【同日放学后·七班教室】" # system_ "【同日放学后·七班教室】" + + show ryt dialogue normal at right with dissolve + me "放学了。教室里还剩几个人。" + me "'薇风拂晓'……你哪个学校的?" + me "这个账号……我好像只在游戏里见过。" + + show xingyu at left with dissolve + xingyu "涛哥,你咋了?还在想那个破照片的事?" + me "我在思考更严肃的问题——为什么总有人对我的英姿如此念念不忘?" + me "我来看看画廊的统计数据,\n论坛转发之后,访问量肯定不少——就当看个热闹。" + + hide ryt with dissolve + system_ "【画廊后台·访问统计】今日新增:347次 | 来源:匿名论坛转发" + + show ryt dialogue normal at right with dissolve + me "果然,三百多。论坛一转,全涌进来了。" + me "不过……" + me "我往下翻,手指停在了一条记录上。" + hide ryt with dissolve + + system_ "固定IP · 实验楼三层 · 每隔2-3天 · 晚9-10点" + system_ "最早记录:高一上学期(画廊建立初期)" + + show ryt dialogue embarrass pocket at right with dissolve + me "……等等。这个IP,从高一就开始了?" + me "星宇,实验楼三层的网络,是不是只有13班和实验室在用?" + xingyu "哟,有人盯上你了啊。对,那个段就是13班和几个竞赛实验室专用。" + xingyu "怎么,涛哥的英姿连重点班都征服了?" + hide xingyu with dissolve + show ryt dialogue embarrass pocket2 at right with dissolve + + me "13班。那个我刚离开的世界。" + me "……是谁?" + + pause 0.5 + hide ryt with dissolve + + # 反侦察行动 + show xingyu at left with dissolve + xingyu "各位!我有个绝妙的主意——" + xingyu "既然那个画廊这么喜欢拍涛哥,咱们不如搞个「反侦察行动」!" + xingyu "找出那个偷拍者,然后拍他的黑历史!怎么样?" + + show lhy dialogue normal with dissolve + lhy "理论上可行,但需要注意几个问题:\n第一,如何确定拍摄者会再次行动;\n第二,如何在保护自身隐私的前提下进行反追踪;\n第三——" + xingyu "哎呀小卡你别扫兴!就是玩嘛!涛哥,你说干不干?" + hide lhy with dissolve + + show ryt dialogue normal at right with dissolve + me "看着眼前这群人。认识不过一个多月——但他们就这么凑过来,商量这种无聊又有趣的计划。" + me "在重点班时,从来没有过这样的时刻。" + me "行啊!但咱们得专业!要有分工!有排班表!有应急预案!还要有——" + hide ryt with dissolve + hide xingyu with dissolve + pause 0.4 + + # 颜涵出场 + show yh camerabag at left with dissolve + yh "要有旁观席位。" + #me "声音从后门传来。颜涵,拎着相机包,表情平静。" + yh "我负责记录你们的失败过程。" + hide yh with dissolve + tongxue "哈哈哈哈哈!" + + show ryt dialogue normal at right with dissolve + me "我也跟着笑。但眼睛不自觉地望向窗外。" + me "夕阳下的实验楼泛着暖黄的光,三楼东侧的窗户反射着落日的余晖。" + me "那里有谁,在看着我?" + me "还有那个'薇风拂晓',到底是谁?" + hide ryt with dissolve + + $ xingyu_stats["affection"] += 5 + $ xingyu_stats["cooperation"] += 5 + $ xingyu_stats["helpfulness"] += 3 + $ lhy_stats["affection"] += 3 + $ yh_stats["affection"] += 3 + $ yh_stats["understanding"] += 2 + $ tao_stats["selfAcceptance"] += 2 + + pause 0.5 + + # 便利店 + scene bg convenience store with fade + system_ "【傍晚17:25·校门外便利店】" + + show ryt normal spec at c1s4_ryt_pos with dissolve + me "17:25,准时出现在校门外三百米处的便利店。" + me "买瓶饮料,站在店门口等车,看着其他学生自由地走过。" + me "骑车的,步行的,三五成群说笑的。每个人脸上都有种松弛感。" + #hide ryt with dissolve + + show aunt normal at left with dissolve + "便利店主" "小任,新品。尝尝,你们年轻人喜欢这个。" + #show ryt dialogue normal at right with dissolve + me "谢了阿姨。" + hide ryt with dissolve + hide aunt with dissolve + + me "拧开那瓶柚子味气泡水,靠在栏杆上。" + pause 0.6 + + # 苏雨桐骑车经过——本章关键镜头 + scene bg schoolgate featsyt with dissolve + me "那是 ——{cps=1} {cps=20}苏雨桐" + me "她推着自行车从校门口出来。车篮里放着一本厚厚的书。" + me "她停在路口等红灯,低头看了眼手机——" + me "然后嘴角很轻地抬了一下。几乎算不上笑,只是一个微小的弧度。" + scene bg convenience store with dissolve + show ryt normal spec at c1s4_ryt_pos with dissolve + show ryt normal spec at slide_right(distance=200, duration=0.5) with dissolve + me "我下意识往便利店的阴影里退了半步。" + hide ryt with dissolve + scene bg sunset featsyt with dissolve + me "绿灯。她跨上车,黑发在傍晚的风里扬起,朝着与我家相反的方向骑远了。" + + scene bg convenience store with dissolve + pause 0.5 + me "自由。" + me "这个词突然撞进脑子里——不是解题时的快感,而是一种更基础的东西:掌控自己轨迹的权利。" + + mom "「到了。」" + show ryt dialogue normal at right with dissolve + me "挺好的。特别开心。" + hide ryt with dissolve + me "……我说出这句话的时候,语气轻松得像是真的。" + me "车驶入车流。靠在车窗上,看着外面倒退的街景。" + + $ yutong_stats["affection"] += 2 + $ yutong_stats["attention"] += 3 + $ tao_stats["selfAcceptance"] += 1 + $ tao_stats["studyStress"] += 1 + + pause 0.5 + + # 双视角结尾 + scene bg black with fade + system_ "【同夜·城市另一头】" + + me "城市的另一头,苏雨桐刚回到家。" + yutong "TaoliTaoli……今天依然没有更新。" + system_ "【任懿涛画廊·访问计数器:+1】" + me "她一张张翻看那些照片。相册里已经积累了二十几张,按时间顺序排列。" + yutong "……在这个高度秩序化的生活里,观察一个如此不协调、如此鲜活的存在……有种奇妙的慰藉。" + + $ yutong_stats["affection"] += 3 + $ yutong_stats["attention"] += 4 + + pause 0.5 + system_ "【几公里外·林晓薇的房间】" + me "几公里外,林晓薇躺在床上,盯着天花板发呆。" + me_w "你问的那个人,确实是我们学校的。怎么,你认识?" + me "那条回复躺在对话框里,她还没想好怎么回。" + me "她翻看相册,看着任懿涛在空中那个狰狞又认真的表情,看着落地时那个措手不及的踉跄。" + me "然后,她做了个决定。" + xiaowei "明天,课间的时候,以真实身份去七班找他。" + xiaowei "就说:那张照片拍得真好,特别生动。" + xiaowei "……就想看看,他会是什么反应。" + + $ xiaowei_stats["affection"] += 3 + $ xiaowei_stats["interactionFrequency"] += 3 + + pause 0.5 + + # 章节尾声 + scene bg black with fade + me "窗外,九月的夜晚渐渐深了。城市灯火一盏盏亮起,每扇窗户后都是一个正在展开的故事。" + me "任懿涛的故事,在这一天,因为几张滑稽的照片,悄悄拐上了一条他自己都未曾预料的道路。" + me "这条路上,已经有两位女生在等着他——" + me "一个在暗处静静观察,一个在明处准备靠近。" + pause 1.0 + me "而他自己,还不知道。" + pause 1.5 + system_ "【第一章·画廊风波·完】" + + return diff --git a/game/Chapters/intro_discarded.txt b/game/Chapters/intro_discarded.txt new file mode 100755 index 0000000..4c89b22 --- /dev/null +++ b/game/Chapters/intro_discarded.txt @@ -0,0 +1,88 @@ +# intro.rpy +label splashscreen: + scene black + with Pause(1.0) + + # 1. 环境铺垫 + show bg school_gate with dissolve: + zoom 1.2 + linear 5.0 zoom 1.0 + play music "audio/intro_ambient.mp3" fadein 3.0 + + "2029年,上海青澜高中" + "一所普通的市重点,有着不普通的故事" + + # 2. 快速剪辑:主角的多个侧面 + show bg classroom_empty with pixellate + "他是数学课上的王者..." + + show bg basketball_court with pixellate + "篮球场上的活跃分子..." + + show bg computer_lab with pixellate + "游戏世界的攻略者..." + + # 3. 引入关键道具/符号 + show phone_screen: + xalign 0.5 yalign 0.5 + zoom 0.0 + linear 0.5 zoom 1.0 + "当他的生活被放上名为「任懿涛画廊」的网站..." + + show gallery_website with dissolve: + xalign 0.5 yalign 0.5 + "标签,比本人传播得更快" + hide gallery_website with dissolve + + # 4. 关键冲突提示 + scene bg corridor with dissolve + show shadow boy at left + show shadow girl at right + "重点班 → 普通班" + "学霸 → 偏科生" + "独立 → 依赖" + + # 5. 角色群像闪现(可选,如果立绘已准备好) + show liuhongyu silhouette at left with dissolve + show yanhan silhouette at center with dissolve + show xuwei silhouette at right with dissolve + "在这段充满矛盾的高二生活中..." + hide liuhongyu + hide yanhan + hide xuwei + + # 6. 核心问题 + scene black with dissolve + show text "{size=40}当所有人都通过标签认识你...{/size}" at truecenter with dissolve + pause 1.5 + hide text + + show text "{size=40}你该如何认识自己?{/size}" at truecenter with dissolve + pause 2.0 + hide text + + # 7. 游戏标题 + scene bg sunset with dissolve + show text "{size=80}{font=fonts/custom.ttf}青澜日记{/font}{/size}" at truecenter: + yalign 0.4 + show text "{size=25}——任懿涛的高中恋爱物语——{/size}" at truecenter: + yalign 0.6 + + play sound "audio/title_appear.wav" + with hpunch + pause 3.0 + + # 8. 制作信息 + scene black with dissolve + show text "游戏灵感来自真实事件" at truecenter with dissolve + pause 1.5 + hide text + + show text "任懿涛画廊真实存在:\nhttps://gallery.lizexuan.com" at truecenter with dissolve + pause 2.0 + hide text + + show text "按下任意键开始" at truecenter with dissolve + pause 1.0 + + return \ No newline at end of file diff --git a/game/audio/xiakering.mp3 b/game/audio/xiakering.mp3 new file mode 100644 index 0000000..091e953 Binary files /dev/null and b/game/audio/xiakering.mp3 differ diff --git a/game/fonts/AlibabaPuHuiTi-3-55-Regular.ttf b/game/fonts/AlibabaPuHuiTi-3-55-Regular.ttf new file mode 100644 index 0000000..a6eaf36 Binary files /dev/null and b/game/fonts/AlibabaPuHuiTi-3-55-Regular.ttf differ diff --git a/game/fonts/GenJyuuGothic-Normal-2.ttf b/game/fonts/GenJyuuGothic-Normal-2.ttf new file mode 100644 index 0000000..8990e9d Binary files /dev/null and b/game/fonts/GenJyuuGothic-Normal-2.ttf differ diff --git a/game/fonts/SmileySans-Oblique.ttf b/game/fonts/SmileySans-Oblique.ttf new file mode 100644 index 0000000..c297dc6 Binary files /dev/null and b/game/fonts/SmileySans-Oblique.ttf differ diff --git a/game/fonts/SourceHanSansLite.ttf b/game/fonts/SourceHanSansLite.ttf new file mode 100755 index 0000000..1924547 Binary files /dev/null and b/game/fonts/SourceHanSansLite.ttf differ diff --git a/game/gui.rpy b/game/gui.rpy new file mode 100755 index 0000000..868fc53 --- /dev/null +++ b/game/gui.rpy @@ -0,0 +1,453 @@ +################################################################################ +## 初始化 +################################################################################ + +## “init offset”语句可使此文件中的初始化语句在任何其他文件中的“init”语句之前运 +## 行。 +init offset = -2 + +## 调用 gui.init 会将样式重置为合理的默认值,并设置游戏的宽度和高度(基准分辨 +## 率)。 +init python: + gui.init(1920, 1080) + +## 启用对屏幕或变换中无效或不稳定属性的检查 +define config.check_conflicting_properties = True + + +################################################################################ +## GUI 配置变量 +################################################################################ + + +## 颜色 ########################################################################## +## +## 界面中文本的颜色。 + +## 整个界面中使用的强调色,用于标记和突出显示文本。 +define gui.accent_color = '#003366' + +## 当文本按钮既未被选中也未被悬停时使用的颜色。 +define gui.idle_color = '#707070' + +## 小的颜色用于小的文本,需要更亮/更暗才能达到同样的效果。 +define gui.idle_small_color = '#606060' + +## 当按钮和滑条被悬停时使用的颜色。 +define gui.hover_color = '#003366' + +## 当文本按钮被选中但非焦点时使用的颜色。当一个按钮为当前屏幕或设置选项值时,会 +## 处于选中状态。 +define gui.selected_color = '#555555' + +## 当文本按钮无法被选择时使用的颜色。 +define gui.insensitive_color = '#7070707f' + +## 滑条未填充的部分使用的颜色。这些颜色不直接使用,但在重新生成条形图像文件时使 +## 用。 +define gui.muted_color = '#6684a3' +define gui.hover_muted_color = '#99adc1' + +## 对话和菜单选择文本使用的颜色。 +define gui.text_color = '#404040' +define gui.interface_text_color = '#404040' + + +## 字体和字体大小 ##################################################################### + +## 游戏内文本使用的字体。 +define gui.text_font = "fonts/AlibabaPuHuiTi-3-55-Regular.ttf" + +## 角色名称使用的字体。 +define gui.name_text_font = "fonts/SmileySans-Oblique.ttf" + +## 游戏外文本使用的字体。 +define gui.interface_text_font = "fonts/AlibabaPuHuiTi-3-55-Regular.ttf" + +## 普通对话文本的大小。 +define gui.text_size = 30 + +## 角色名称的大小。 +define gui.name_text_size = 42 + +## 游戏用户界面中文本的大小。 +define gui.interface_text_size = 33 + +## 游戏用户界面中标签的大小。 +define gui.label_text_size = 36 + +## 通知屏幕上文本的大小。 +define gui.notify_text_size = 24 + +## 游戏标题的大小。 +define gui.title_text_size = 75 + + +## 标题和游戏菜单 ##################################################################### + +## 标题菜单和游戏菜单使用的图像。 +define gui.main_menu_background = "gui/main_menu.png" +define gui.game_menu_background = "gui/game_menu.png" + + +## 对话 ########################################################################## +## +## 这些变量控制对话如何在屏幕上逐行显示。 + +## 包含对话的文本框的高度。 +define gui.textbox_height = 278 + +## 文本框在屏幕上的垂直位置。0.0 是顶部,0.5 是居中,1.0 是底部。 +define gui.textbox_yalign = 1.0 + + +## 叙述角色名字相对于文本框的位置。可以是从左侧或顶部起的整数像素,或设为 0.5 来 +## 居中。 +define gui.name_xpos = 360 +define gui.name_ypos = 0 + +## 角色名字的水平对齐方式。0.0 为左侧对齐,0.5 为居中显示,而 1.0 为右侧对齐。 +define gui.name_xalign = 0.0 + +## 包含角色名字的方框的宽度、高度和边框尺寸,或设为 None 来自动确定其大小。 +define gui.namebox_width = None +define gui.namebox_height = None + +## 包含角色名字的方框的边界尺寸,以左、上、右、下顺序排列。 +define gui.namebox_borders = Borders(5, 5, 5, 5) + +## 若为 True,则名字框的背景将平铺;若为 False,则名字框的背景将缩放。 +define gui.namebox_tile = False + + +## 对话相对于文本框的位置。可以是相对于文本框从左侧或顶部起的整数像素,或设为 +## 0.5 来居中。 +define gui.dialogue_xpos = 402 +define gui.dialogue_ypos = 75 + +## 对话文本的最大宽度,以像素为单位。 +define gui.dialogue_width = 1116 + +## 对话文本的水平对齐方式。0.0 为左侧对齐,0.5 为居中显示,而 1.0 为右侧对齐。 +define gui.dialogue_text_xalign = 0.0 + + +## 按钮 ########################################################################## +## +## 这些变量以及 gui/button 中的图像文件控制着按钮显示方式。 + +## 按钮的宽度和高度像素数。如果为 None,则 Ren'Py 将计算大小。 +define gui.button_width = None +define gui.button_height = None + +## 按钮两侧的边框,按左、上、右、下的顺序排列。 +define gui.button_borders = Borders(6, 6, 6, 6) + +## 若为 True,则背景图像将平铺。若为 False,则背景图像将线性缩放。 +define gui.button_tile = False + +## 按钮使用的字体。 +define gui.button_text_font = gui.interface_text_font + +## 按钮所使用的文本大小。 +define gui.button_text_size = gui.interface_text_size + +## 按钮文本在各种状态下的颜色。 +define gui.button_text_idle_color = gui.idle_color +define gui.button_text_hover_color = gui.hover_color +define gui.button_text_selected_color = gui.selected_color +define gui.button_text_insensitive_color = gui.insensitive_color + +## 按钮文本的水平对齐方式。(0.0 为左侧对齐,0.5 为居中对齐,而 1.0 为右侧对 +## 齐)。 +define gui.button_text_xalign = 0.0 + + +## 这些变量覆盖了不同类型按钮的设置。关于可用的按钮种类以及每种按钮的用途,请参 +## 阅 gui 文档。 +## +## 这些定制由默认界面使用: + +define gui.radio_button_borders = Borders(27, 6, 6, 6) + +define gui.check_button_borders = Borders(27, 6, 6, 6) + +define gui.confirm_button_text_xalign = 0.5 + +define gui.page_button_borders = Borders(15, 6, 15, 6) + +define gui.quick_button_borders = Borders(15, 6, 15, 0) +define gui.quick_button_text_size = 21 +define gui.quick_button_text_idle_color = gui.idle_small_color +define gui.quick_button_text_selected_color = gui.accent_color + +## 您还可以通过添加正确命名的变量来添加自己的定制。例如,您可以将以下几行取消注 +## 释来设置导航按钮的宽度。 + +# define gui.navigation_button_width = 250 + + +## 选项按钮 ######################################################################## +## +## 游戏内菜单使用的选项按钮。 + +define gui.choice_button_width = 1185 +define gui.choice_button_height = None +define gui.choice_button_tile = False +define gui.choice_button_borders = Borders(150, 8, 150, 8) +define gui.choice_button_text_font = gui.text_font +define gui.choice_button_text_size = gui.text_size +define gui.choice_button_text_xalign = 0.5 +define gui.choice_button_text_idle_color = '#707070' +define gui.choice_button_text_hover_color = "#003366" +define gui.choice_button_text_insensitive_color = '#7070707f' + + +## 存档按钮 ######################################################################## +## +## 存档按钮是一种特殊的按钮。它包含一个缩略图和描述该存档内容的文本。存档使用 +## gui/button 中的图像文件,就像其他类型的按钮一样。 + +## 存档位按钮。 +define gui.slot_button_width = 414 +define gui.slot_button_height = 309 +define gui.slot_button_borders = Borders(15, 15, 15, 15) +define gui.slot_button_text_size = 21 +define gui.slot_button_text_xalign = 0.5 +define gui.slot_button_text_idle_color = gui.idle_small_color +define gui.slot_button_text_selected_idle_color = gui.selected_color +define gui.slot_button_text_selected_hover_color = gui.hover_color + +## 存档所用缩略图的宽度和高度。 +define config.thumbnail_width = 384 +define config.thumbnail_height = 216 + +## 存档网格中的列数和行数。 +define gui.file_slot_cols = 3 +define gui.file_slot_rows = 2 + + +## 定位和间距 ####################################################################### +## +## 这些变量控制各种用户界面元素的位置和间距。 + +## 导航按钮左侧相对于屏幕左侧的位置。 +define gui.navigation_xpos = 60 + +## 快进指示器的垂直位置。 +define gui.skip_ypos = 15 + +## 通知界面的垂直位置。 +define gui.notify_ypos = 68 + +## 菜单选项之间的间距。 +define gui.choice_spacing = 33 + +## 标题菜单和游戏菜单的导航部分中的按钮。 +define gui.navigation_spacing = 6 + +## 控制设置项目之间的间隔量。 +define gui.pref_spacing = 15 + +## 控制设置按钮之间的间距。 +define gui.pref_button_spacing = 0 + +## 存档页面按钮之间的间距。 +define gui.page_spacing = 0 + +## 存档按钮之间的间距。 +define gui.slot_spacing = 15 + +## 标题菜单文本的位置。 +define gui.main_menu_text_xalign = 1.0 + + +## 框架 ########################################################################## +## +## 这些变量控制在不存在覆盖层或窗口时可以包含用户界面组件的框架的外观。 + +## 通用框架。 +define gui.frame_borders = Borders(6, 6, 6, 6) + +## 用作确认界面部分的框架。 +define gui.confirm_frame_borders = Borders(60, 60, 60, 60) + +## 用作快进界面部分的框架。 +define gui.skip_frame_borders = Borders(24, 8, 75, 8) + +## 用作通知界面部分的框架。 +define gui.notify_frame_borders = Borders(24, 8, 60, 8) + +## 框架背景是否应平铺? +define gui.frame_tile = False + + +## 条,滚动条和滑块 #################################################################### +## +## 这些语句控制条,滚动条和滑块的外观和大小。 +## +## 默认的 GUI 仅使用滑块和垂直滚动条。所有其他栏仅在创建者编写的屏幕中使用。 + +## 水平条,滚动条和滑块的高度。垂直条,滚动条和滑块的宽度。 +define gui.bar_size = 38 +define gui.scrollbar_size = 18 +define gui.slider_size = 38 + +## 若为 True,则条的底图平铺。若为 False,则条的底图线性缩放。 +define gui.bar_tile = False +define gui.scrollbar_tile = False +define gui.slider_tile = False + +## 水平边框。 +define gui.bar_borders = Borders(6, 6, 6, 6) +define gui.scrollbar_borders = Borders(6, 6, 6, 6) +define gui.slider_borders = Borders(6, 6, 6, 6) + +## 垂直边框。 +define gui.vbar_borders = Borders(6, 6, 6, 6) +define gui.vscrollbar_borders = Borders(6, 6, 6, 6) +define gui.vslider_borders = Borders(6, 6, 6, 6) + +## What to do with unscrollable scrollbars in the game menu. "hide" hides them, +## while None shows them. +define gui.unscrollable = "hide" + + +## 历史 ########################################################################## +## +## 历史记录屏幕显示玩家已经阅读过的对话。 + +## Ren'Py 将保留的对话历史块数。 +define config.history_length = 250 + +## 历史屏幕条目的高度,或设置为 None 以使高度变量自适应。 +define gui.history_height = 210 + +## 在历史记录屏幕条目之间添加额外的空间。 +define gui.history_spacing = 0 + +## 所指定叙述角色的标签的坐标、宽度和对齐方式。 +define gui.history_name_xpos = 233 +define gui.history_name_ypos = 0 +define gui.history_name_width = 233 +define gui.history_name_xalign = 1.0 + +## 对话文本的坐标、宽度和对齐方式。 +define gui.history_text_xpos = 255 +define gui.history_text_ypos = 3 +define gui.history_text_width = 1110 +define gui.history_text_xalign = 0.0 + + +## NVL 模式 ###################################################################### +## +## NVL 模式屏幕显示 NVL 模式的角色所产生的对话。 + +## NVL 模式背景窗口的背景边框。 +define gui.nvl_borders = Borders(0, 15, 0, 30) + +## Ren'Py 所显示的 NVL 模式条目的最大数量。当要显示的条目多于此数量时,最旧的条 +## 目将被删除。 +define gui.nvl_list_length = 6 + +## NVL 模式条目的高度。将此设置为 None 可使条目动态调整高度。 +define gui.nvl_height = 173 + +## 当 gui.nvl_height 为 None 时,NVL 模式条目之间的间距,以及 NVL 模式条目和 NVL +## 模式菜单之间的间距。 +define gui.nvl_spacing = 15 + +## 所指定叙述角色的标签的坐标、宽度和对齐方式。 +define gui.nvl_name_xpos = 645 +define gui.nvl_name_ypos = 0 +define gui.nvl_name_width = 225 +define gui.nvl_name_xalign = 1.0 + +## 对话文本的坐标、宽度和对齐方式。 +define gui.nvl_text_xpos = 675 +define gui.nvl_text_ypos = 12 +define gui.nvl_text_width = 885 +define gui.nvl_text_xalign = 0.0 + +## nvl_thought 文本(由 nvl_narrator 字符表示的文本)的位置,宽度和对齐方式。 +define gui.nvl_thought_xpos = 360 +define gui.nvl_thought_ypos = 0 +define gui.nvl_thought_width = 1170 +define gui.nvl_thought_xalign = 0.0 + +## NVL menu_buttons 的位置。 +define gui.nvl_button_xpos = 675 +define gui.nvl_button_xalign = 0.0 + + +## 本地化 ######################################################################### + +## 该变量控制允许在何时换行。默认值适用于大多数语言。可用的值请参见 https:// +## www.renpy.org/doc/html/style_properties.html#style-property-language + +define gui.language = "unicode" + + +################################################################################ +## 移动设备 +################################################################################ + +init python: + + ## 该变量增加快捷菜单按钮的尺寸来使它们在平板和手机上更容易被按到。 + @gui.variant + def touch(): + + gui.quick_button_borders = Borders(60, 21, 60, 0) + + ## 该变量更改各个 GUI 元素的尺寸和间距来确保它们在手机上更容易被辨识。 + @gui.variant + def small(): + + ## 字体大小。 + gui.text_size = 45 + gui.name_text_size = 54 + gui.notify_text_size = 38 + gui.interface_text_size = 45 + gui.button_text_size = 45 + gui.label_text_size = 51 + + ## 调整对话框的位置。 + gui.textbox_height = 360 + gui.name_xpos = 120 + gui.dialogue_xpos = 135 + gui.dialogue_width = 1650 + + ## 更改各元素的尺寸和间距。 + gui.slider_size = 54 + + gui.choice_button_width = 1860 + gui.choice_button_text_size = 45 + + gui.navigation_spacing = 30 + gui.pref_button_spacing = 15 + + gui.history_height = 285 + gui.history_text_width = 1035 + + gui.quick_button_text_size = 30 + + ## 文件按钮布局。 + gui.file_slot_cols = 2 + gui.file_slot_rows = 2 + + ## NVL 模式。 + gui.nvl_height = 255 + + gui.nvl_name_width = 458 + gui.nvl_name_xpos = 488 + + gui.nvl_text_width = 1373 + gui.nvl_text_xpos = 518 + gui.nvl_text_ypos = 8 + + gui.nvl_thought_width = 1860 + gui.nvl_thought_xpos = 30 + + gui.nvl_button_width = 1860 + gui.nvl_button_xpos = 30 diff --git a/game/gui/bar/bottom.png b/game/gui/bar/bottom.png new file mode 100755 index 0000000..0b4c52d Binary files /dev/null and b/game/gui/bar/bottom.png differ diff --git a/game/gui/bar/left.png b/game/gui/bar/left.png new file mode 100755 index 0000000..fb0d377 Binary files /dev/null and b/game/gui/bar/left.png differ diff --git a/game/gui/bar/right.png b/game/gui/bar/right.png new file mode 100755 index 0000000..cd5e55c Binary files /dev/null and b/game/gui/bar/right.png differ diff --git a/game/gui/bar/top.png b/game/gui/bar/top.png new file mode 100755 index 0000000..58b23ab Binary files /dev/null and b/game/gui/bar/top.png differ diff --git a/game/gui/bubble.png b/game/gui/bubble.png new file mode 100755 index 0000000..3b23ff3 Binary files /dev/null and b/game/gui/bubble.png differ diff --git a/game/gui/button/check_foreground.png b/game/gui/button/check_foreground.png new file mode 100755 index 0000000..4113f1a Binary files /dev/null and b/game/gui/button/check_foreground.png differ diff --git a/game/gui/button/check_selected_foreground.png b/game/gui/button/check_selected_foreground.png new file mode 100755 index 0000000..b01f954 Binary files /dev/null and b/game/gui/button/check_selected_foreground.png differ diff --git a/game/gui/button/choice_hover_background.png b/game/gui/button/choice_hover_background.png new file mode 100644 index 0000000..51e4d33 Binary files /dev/null and b/game/gui/button/choice_hover_background.png differ diff --git a/game/gui/button/choice_idle_background.png b/game/gui/button/choice_idle_background.png new file mode 100644 index 0000000..9aa890c Binary files /dev/null and b/game/gui/button/choice_idle_background.png differ diff --git a/game/gui/button/hover_background.png b/game/gui/button/hover_background.png new file mode 100644 index 0000000..98a69ec Binary files /dev/null and b/game/gui/button/hover_background.png differ diff --git a/game/gui/button/idle_background.png b/game/gui/button/idle_background.png new file mode 100644 index 0000000..98a69ec Binary files /dev/null and b/game/gui/button/idle_background.png differ diff --git a/game/gui/button/quick_hover_background.png b/game/gui/button/quick_hover_background.png new file mode 100755 index 0000000..0ecc7c9 Binary files /dev/null and b/game/gui/button/quick_hover_background.png differ diff --git a/game/gui/button/quick_idle_background.png b/game/gui/button/quick_idle_background.png new file mode 100755 index 0000000..0ecc7c9 Binary files /dev/null and b/game/gui/button/quick_idle_background.png differ diff --git a/game/gui/button/radio_foreground.png b/game/gui/button/radio_foreground.png new file mode 100755 index 0000000..4113f1a Binary files /dev/null and b/game/gui/button/radio_foreground.png differ diff --git a/game/gui/button/radio_selected_foreground.png b/game/gui/button/radio_selected_foreground.png new file mode 100755 index 0000000..b01f954 Binary files /dev/null and b/game/gui/button/radio_selected_foreground.png differ diff --git a/game/gui/button/slot_hover_background.png b/game/gui/button/slot_hover_background.png new file mode 100755 index 0000000..f449bc5 Binary files /dev/null and b/game/gui/button/slot_hover_background.png differ diff --git a/game/gui/button/slot_idle_background.png b/game/gui/button/slot_idle_background.png new file mode 100755 index 0000000..3170f0a Binary files /dev/null and b/game/gui/button/slot_idle_background.png differ diff --git a/game/gui/frame.png b/game/gui/frame.png new file mode 100755 index 0000000..03bd2bd Binary files /dev/null and b/game/gui/frame.png differ diff --git a/game/gui/game_menu.png b/game/gui/game_menu.png new file mode 100755 index 0000000..01447ba Binary files /dev/null and b/game/gui/game_menu.png differ diff --git a/game/gui/main_menu.png b/game/gui/main_menu.png new file mode 100755 index 0000000..01447ba Binary files /dev/null and b/game/gui/main_menu.png differ diff --git a/game/gui/namebox.png b/game/gui/namebox.png new file mode 100755 index 0000000..c24135c Binary files /dev/null and b/game/gui/namebox.png differ diff --git a/game/gui/namebox_bg.png b/game/gui/namebox_bg.png new file mode 100644 index 0000000..efadb45 Binary files /dev/null and b/game/gui/namebox_bg.png differ diff --git a/game/gui/notify.png b/game/gui/notify.png new file mode 100755 index 0000000..03e071a Binary files /dev/null and b/game/gui/notify.png differ diff --git a/game/gui/nvl.png b/game/gui/nvl.png new file mode 100755 index 0000000..92e7afa Binary files /dev/null and b/game/gui/nvl.png differ diff --git a/game/gui/overlay/confirm.png b/game/gui/overlay/confirm.png new file mode 100755 index 0000000..0ff98f5 Binary files /dev/null and b/game/gui/overlay/confirm.png differ diff --git a/game/gui/overlay/game_menu.png b/game/gui/overlay/game_menu.png new file mode 100755 index 0000000..1068003 Binary files /dev/null and b/game/gui/overlay/game_menu.png differ diff --git a/game/gui/overlay/main_menu.png b/game/gui/overlay/main_menu.png new file mode 100755 index 0000000..c5cdd4a Binary files /dev/null and b/game/gui/overlay/main_menu.png differ diff --git a/game/gui/phone/bar/bottom.png b/game/gui/phone/bar/bottom.png new file mode 100755 index 0000000..0b4c52d Binary files /dev/null and b/game/gui/phone/bar/bottom.png differ diff --git a/game/gui/phone/bar/left.png b/game/gui/phone/bar/left.png new file mode 100755 index 0000000..fb0d377 Binary files /dev/null and b/game/gui/phone/bar/left.png differ diff --git a/game/gui/phone/bar/right.png b/game/gui/phone/bar/right.png new file mode 100755 index 0000000..cd5e55c Binary files /dev/null and b/game/gui/phone/bar/right.png differ diff --git a/game/gui/phone/bar/top.png b/game/gui/phone/bar/top.png new file mode 100755 index 0000000..58b23ab Binary files /dev/null and b/game/gui/phone/bar/top.png differ diff --git a/game/gui/phone/button/check_foreground.png b/game/gui/phone/button/check_foreground.png new file mode 100755 index 0000000..c334a43 Binary files /dev/null and b/game/gui/phone/button/check_foreground.png differ diff --git a/game/gui/phone/button/check_selected_foreground.png b/game/gui/phone/button/check_selected_foreground.png new file mode 100755 index 0000000..4985b41 Binary files /dev/null and b/game/gui/phone/button/check_selected_foreground.png differ diff --git a/game/gui/phone/button/choice_hover_background.png b/game/gui/phone/button/choice_hover_background.png new file mode 100755 index 0000000..0906717 Binary files /dev/null and b/game/gui/phone/button/choice_hover_background.png differ diff --git a/game/gui/phone/button/choice_idle_background.png b/game/gui/phone/button/choice_idle_background.png new file mode 100755 index 0000000..0b43428 Binary files /dev/null and b/game/gui/phone/button/choice_idle_background.png differ diff --git a/game/gui/phone/button/hover_background.png b/game/gui/phone/button/hover_background.png new file mode 100755 index 0000000..6264b8b Binary files /dev/null and b/game/gui/phone/button/hover_background.png differ diff --git a/game/gui/phone/button/idle_background.png b/game/gui/phone/button/idle_background.png new file mode 100755 index 0000000..6264b8b Binary files /dev/null and b/game/gui/phone/button/idle_background.png differ diff --git a/game/gui/phone/button/radio_foreground.png b/game/gui/phone/button/radio_foreground.png new file mode 100755 index 0000000..c334a43 Binary files /dev/null and b/game/gui/phone/button/radio_foreground.png differ diff --git a/game/gui/phone/button/radio_selected_foreground.png b/game/gui/phone/button/radio_selected_foreground.png new file mode 100755 index 0000000..4985b41 Binary files /dev/null and b/game/gui/phone/button/radio_selected_foreground.png differ diff --git a/game/gui/phone/button/slot_hover_background.png b/game/gui/phone/button/slot_hover_background.png new file mode 100755 index 0000000..f449bc5 Binary files /dev/null and b/game/gui/phone/button/slot_hover_background.png differ diff --git a/game/gui/phone/button/slot_idle_background.png b/game/gui/phone/button/slot_idle_background.png new file mode 100755 index 0000000..3170f0a Binary files /dev/null and b/game/gui/phone/button/slot_idle_background.png differ diff --git a/game/gui/phone/nvl.png b/game/gui/phone/nvl.png new file mode 100755 index 0000000..64afe88 Binary files /dev/null and b/game/gui/phone/nvl.png differ diff --git a/game/gui/phone/overlay/game_menu.png b/game/gui/phone/overlay/game_menu.png new file mode 100755 index 0000000..d66e519 Binary files /dev/null and b/game/gui/phone/overlay/game_menu.png differ diff --git a/game/gui/phone/overlay/main_menu.png b/game/gui/phone/overlay/main_menu.png new file mode 100755 index 0000000..7339a2b Binary files /dev/null and b/game/gui/phone/overlay/main_menu.png differ diff --git a/game/gui/phone/scrollbar/horizontal_hover_bar.png b/game/gui/phone/scrollbar/horizontal_hover_bar.png new file mode 100755 index 0000000..edf05c5 Binary files /dev/null and b/game/gui/phone/scrollbar/horizontal_hover_bar.png differ diff --git a/game/gui/phone/scrollbar/horizontal_hover_thumb.png b/game/gui/phone/scrollbar/horizontal_hover_thumb.png new file mode 100755 index 0000000..907a714 Binary files /dev/null and b/game/gui/phone/scrollbar/horizontal_hover_thumb.png differ diff --git a/game/gui/phone/scrollbar/horizontal_idle_bar.png b/game/gui/phone/scrollbar/horizontal_idle_bar.png new file mode 100755 index 0000000..3b27a96 Binary files /dev/null and b/game/gui/phone/scrollbar/horizontal_idle_bar.png differ diff --git a/game/gui/phone/scrollbar/horizontal_idle_thumb.png b/game/gui/phone/scrollbar/horizontal_idle_thumb.png new file mode 100755 index 0000000..907a714 Binary files /dev/null and b/game/gui/phone/scrollbar/horizontal_idle_thumb.png differ diff --git a/game/gui/phone/scrollbar/vertical_hover_bar.png b/game/gui/phone/scrollbar/vertical_hover_bar.png new file mode 100755 index 0000000..f522d9d Binary files /dev/null and b/game/gui/phone/scrollbar/vertical_hover_bar.png differ diff --git a/game/gui/phone/scrollbar/vertical_hover_thumb.png b/game/gui/phone/scrollbar/vertical_hover_thumb.png new file mode 100755 index 0000000..1a26610 Binary files /dev/null and b/game/gui/phone/scrollbar/vertical_hover_thumb.png differ diff --git a/game/gui/phone/scrollbar/vertical_idle_bar.png b/game/gui/phone/scrollbar/vertical_idle_bar.png new file mode 100755 index 0000000..8e0c61c Binary files /dev/null and b/game/gui/phone/scrollbar/vertical_idle_bar.png differ diff --git a/game/gui/phone/scrollbar/vertical_idle_thumb.png b/game/gui/phone/scrollbar/vertical_idle_thumb.png new file mode 100755 index 0000000..1a26610 Binary files /dev/null and b/game/gui/phone/scrollbar/vertical_idle_thumb.png differ diff --git a/game/gui/phone/slider/horizontal_hover_bar.png b/game/gui/phone/slider/horizontal_hover_bar.png new file mode 100755 index 0000000..215d5cd Binary files /dev/null and b/game/gui/phone/slider/horizontal_hover_bar.png differ diff --git a/game/gui/phone/slider/horizontal_hover_thumb.png b/game/gui/phone/slider/horizontal_hover_thumb.png new file mode 100755 index 0000000..318b79a Binary files /dev/null and b/game/gui/phone/slider/horizontal_hover_thumb.png differ diff --git a/game/gui/phone/slider/horizontal_idle_bar.png b/game/gui/phone/slider/horizontal_idle_bar.png new file mode 100755 index 0000000..3d1b090 Binary files /dev/null and b/game/gui/phone/slider/horizontal_idle_bar.png differ diff --git a/game/gui/phone/slider/horizontal_idle_thumb.png b/game/gui/phone/slider/horizontal_idle_thumb.png new file mode 100755 index 0000000..318b79a Binary files /dev/null and b/game/gui/phone/slider/horizontal_idle_thumb.png differ diff --git a/game/gui/phone/slider/vertical_hover_bar.png b/game/gui/phone/slider/vertical_hover_bar.png new file mode 100755 index 0000000..ed79dca Binary files /dev/null and b/game/gui/phone/slider/vertical_hover_bar.png differ diff --git a/game/gui/phone/slider/vertical_hover_thumb.png b/game/gui/phone/slider/vertical_hover_thumb.png new file mode 100755 index 0000000..2244568 Binary files /dev/null and b/game/gui/phone/slider/vertical_hover_thumb.png differ diff --git a/game/gui/phone/slider/vertical_idle_bar.png b/game/gui/phone/slider/vertical_idle_bar.png new file mode 100755 index 0000000..09f01b2 Binary files /dev/null and b/game/gui/phone/slider/vertical_idle_bar.png differ diff --git a/game/gui/phone/slider/vertical_idle_thumb.png b/game/gui/phone/slider/vertical_idle_thumb.png new file mode 100755 index 0000000..2244568 Binary files /dev/null and b/game/gui/phone/slider/vertical_idle_thumb.png differ diff --git a/game/gui/phone/textbox.png b/game/gui/phone/textbox.png new file mode 100755 index 0000000..7eb4c0c Binary files /dev/null and b/game/gui/phone/textbox.png differ diff --git a/game/gui/scrollbar/horizontal_hover_bar.png b/game/gui/scrollbar/horizontal_hover_bar.png new file mode 100755 index 0000000..edf05c5 Binary files /dev/null and b/game/gui/scrollbar/horizontal_hover_bar.png differ diff --git a/game/gui/scrollbar/horizontal_hover_thumb.png b/game/gui/scrollbar/horizontal_hover_thumb.png new file mode 100755 index 0000000..907a714 Binary files /dev/null and b/game/gui/scrollbar/horizontal_hover_thumb.png differ diff --git a/game/gui/scrollbar/horizontal_idle_bar.png b/game/gui/scrollbar/horizontal_idle_bar.png new file mode 100755 index 0000000..3b27a96 Binary files /dev/null and b/game/gui/scrollbar/horizontal_idle_bar.png differ diff --git a/game/gui/scrollbar/horizontal_idle_thumb.png b/game/gui/scrollbar/horizontal_idle_thumb.png new file mode 100755 index 0000000..907a714 Binary files /dev/null and b/game/gui/scrollbar/horizontal_idle_thumb.png differ diff --git a/game/gui/scrollbar/vertical_hover_bar.png b/game/gui/scrollbar/vertical_hover_bar.png new file mode 100755 index 0000000..f522d9d Binary files /dev/null and b/game/gui/scrollbar/vertical_hover_bar.png differ diff --git a/game/gui/scrollbar/vertical_hover_thumb.png b/game/gui/scrollbar/vertical_hover_thumb.png new file mode 100755 index 0000000..1a26610 Binary files /dev/null and b/game/gui/scrollbar/vertical_hover_thumb.png differ diff --git a/game/gui/scrollbar/vertical_idle_bar.png b/game/gui/scrollbar/vertical_idle_bar.png new file mode 100755 index 0000000..8e0c61c Binary files /dev/null and b/game/gui/scrollbar/vertical_idle_bar.png differ diff --git a/game/gui/scrollbar/vertical_idle_thumb.png b/game/gui/scrollbar/vertical_idle_thumb.png new file mode 100755 index 0000000..1a26610 Binary files /dev/null and b/game/gui/scrollbar/vertical_idle_thumb.png differ diff --git a/game/gui/skip.png b/game/gui/skip.png new file mode 100755 index 0000000..104092a Binary files /dev/null and b/game/gui/skip.png differ diff --git a/game/gui/slider/horizontal_hover_bar.png b/game/gui/slider/horizontal_hover_bar.png new file mode 100755 index 0000000..977f507 Binary files /dev/null and b/game/gui/slider/horizontal_hover_bar.png differ diff --git a/game/gui/slider/horizontal_hover_thumb.png b/game/gui/slider/horizontal_hover_thumb.png new file mode 100755 index 0000000..7887e20 Binary files /dev/null and b/game/gui/slider/horizontal_hover_thumb.png differ diff --git a/game/gui/slider/horizontal_idle_bar.png b/game/gui/slider/horizontal_idle_bar.png new file mode 100755 index 0000000..cd5e55c Binary files /dev/null and b/game/gui/slider/horizontal_idle_bar.png differ diff --git a/game/gui/slider/horizontal_idle_thumb.png b/game/gui/slider/horizontal_idle_thumb.png new file mode 100755 index 0000000..7887e20 Binary files /dev/null and b/game/gui/slider/horizontal_idle_thumb.png differ diff --git a/game/gui/slider/vertical_hover_bar.png b/game/gui/slider/vertical_hover_bar.png new file mode 100755 index 0000000..3e34196 Binary files /dev/null and b/game/gui/slider/vertical_hover_bar.png differ diff --git a/game/gui/slider/vertical_hover_thumb.png b/game/gui/slider/vertical_hover_thumb.png new file mode 100755 index 0000000..5661f43 Binary files /dev/null and b/game/gui/slider/vertical_hover_thumb.png differ diff --git a/game/gui/slider/vertical_idle_bar.png b/game/gui/slider/vertical_idle_bar.png new file mode 100755 index 0000000..58b23ab Binary files /dev/null and b/game/gui/slider/vertical_idle_bar.png differ diff --git a/game/gui/slider/vertical_idle_thumb.png b/game/gui/slider/vertical_idle_thumb.png new file mode 100755 index 0000000..5661f43 Binary files /dev/null and b/game/gui/slider/vertical_idle_thumb.png differ diff --git a/game/gui/textbox-bu.png b/game/gui/textbox-bu.png new file mode 100644 index 0000000..8fca6bb Binary files /dev/null and b/game/gui/textbox-bu.png differ diff --git a/game/gui/textbox.png b/game/gui/textbox.png new file mode 100644 index 0000000..78ef88a Binary files /dev/null and b/game/gui/textbox.png differ diff --git a/game/gui/textbox_bg.png b/game/gui/textbox_bg.png new file mode 100644 index 0000000..82cf516 Binary files /dev/null and b/game/gui/textbox_bg.png differ diff --git a/game/gui/thoughtbubble.png b/game/gui/thoughtbubble.png new file mode 100755 index 0000000..8d5d44b Binary files /dev/null and b/game/gui/thoughtbubble.png differ diff --git a/game/gui/window_icon.png b/game/gui/window_icon.png new file mode 100644 index 0000000..24b047d Binary files /dev/null and b/game/gui/window_icon.png differ diff --git a/game/icon.icns b/game/icon.icns new file mode 100644 index 0000000..20146c2 Binary files /dev/null and b/game/icon.icns differ diff --git a/game/images/aunt normal.png b/game/images/aunt normal.png new file mode 100644 index 0000000..091fe2c Binary files /dev/null and b/game/images/aunt normal.png differ diff --git a/game/images/bg black.png b/game/images/bg black.png new file mode 100644 index 0000000..adf30ac Binary files /dev/null and b/game/images/bg black.png differ diff --git a/game/images/bg classroom featryt.png b/game/images/bg classroom featryt.png new file mode 100644 index 0000000..23ee968 Binary files /dev/null and b/game/images/bg classroom featryt.png differ diff --git a/game/images/bg classroom morning featryt.png b/game/images/bg classroom morning featryt.png new file mode 100644 index 0000000..7ae7b52 Binary files /dev/null and b/game/images/bg classroom morning featryt.png differ diff --git a/game/images/bg classroom phone closeup.png b/game/images/bg classroom phone closeup.png new file mode 100644 index 0000000..1c3fef0 Binary files /dev/null and b/game/images/bg classroom phone closeup.png differ diff --git a/game/images/bg classroom wide afterschool.png b/game/images/bg classroom wide afterschool.png new file mode 100644 index 0000000..3a510ae Binary files /dev/null and b/game/images/bg classroom wide afterschool.png differ diff --git a/game/images/bg classroom wide rest.jpeg b/game/images/bg classroom wide rest.jpeg new file mode 100755 index 0000000..c20317a Binary files /dev/null and b/game/images/bg classroom wide rest.jpeg differ diff --git a/game/images/bg convenience store.png b/game/images/bg convenience store.png new file mode 100644 index 0000000..20eb09f Binary files /dev/null and b/game/images/bg convenience store.png differ diff --git a/game/images/bg corridor.png b/game/images/bg corridor.png new file mode 100644 index 0000000..386193c Binary files /dev/null and b/game/images/bg corridor.png differ diff --git a/game/images/bg meetingroom empty.png b/game/images/bg meetingroom empty.png new file mode 100644 index 0000000..aaf8e28 Binary files /dev/null and b/game/images/bg meetingroom empty.png differ diff --git a/game/images/bg meetingroom featlxw discarded.png b/game/images/bg meetingroom featlxw discarded.png new file mode 100644 index 0000000..58f1f7f Binary files /dev/null and b/game/images/bg meetingroom featlxw discarded.png differ diff --git a/game/images/bg meetingroom featlxw.png b/game/images/bg meetingroom featlxw.png new file mode 100644 index 0000000..cea91f0 Binary files /dev/null and b/game/images/bg meetingroom featlxw.png differ diff --git a/game/images/bg meetingroom meeting.png b/game/images/bg meetingroom meeting.png new file mode 100644 index 0000000..06f3e3f Binary files /dev/null and b/game/images/bg meetingroom meeting.png differ diff --git a/game/images/bg playground morning aerial.png b/game/images/bg playground morning aerial.png new file mode 100644 index 0000000..b031221 Binary files /dev/null and b/game/images/bg playground morning aerial.png differ diff --git a/game/images/bg playground twilight.png b/game/images/bg playground twilight.png new file mode 100644 index 0000000..5e979c6 Binary files /dev/null and b/game/images/bg playground twilight.png differ diff --git a/game/images/bg playground.png b/game/images/bg playground.png new file mode 100644 index 0000000..c3883d3 Binary files /dev/null and b/game/images/bg playground.png differ diff --git a/game/images/bg schoolgate featsyt.png b/game/images/bg schoolgate featsyt.png new file mode 100644 index 0000000..ab689c1 Binary files /dev/null and b/game/images/bg schoolgate featsyt.png differ diff --git a/game/images/bg sunset featsyt.png b/game/images/bg sunset featsyt.png new file mode 100644 index 0000000..73ac894 Binary files /dev/null and b/game/images/bg sunset featsyt.png differ diff --git a/game/images/lhy dialogue normal.png b/game/images/lhy dialogue normal.png new file mode 100644 index 0000000..fd5f7e8 Binary files /dev/null and b/game/images/lhy dialogue normal.png differ diff --git a/game/images/ryt dialogue embarrass pocket.png b/game/images/ryt dialogue embarrass pocket.png new file mode 100644 index 0000000..1b9316b Binary files /dev/null and b/game/images/ryt dialogue embarrass pocket.png differ diff --git a/game/images/ryt dialogue embarrass pocket2.png b/game/images/ryt dialogue embarrass pocket2.png new file mode 100644 index 0000000..01a85ad Binary files /dev/null and b/game/images/ryt dialogue embarrass pocket2.png differ diff --git a/game/images/ryt dialogue normal pocket.png b/game/images/ryt dialogue normal pocket.png new file mode 100644 index 0000000..1a76bca Binary files /dev/null and b/game/images/ryt dialogue normal pocket.png differ diff --git a/game/images/ryt dialogue normal.png b/game/images/ryt dialogue normal.png new file mode 100644 index 0000000..5eea9b3 Binary files /dev/null and b/game/images/ryt dialogue normal.png differ diff --git a/game/images/ryt hit.png b/game/images/ryt hit.png new file mode 100644 index 0000000..a643eec Binary files /dev/null and b/game/images/ryt hit.png differ diff --git a/game/images/ryt normal spec.png b/game/images/ryt normal spec.png new file mode 100755 index 0000000..6a2cf1c Binary files /dev/null and b/game/images/ryt normal spec.png differ diff --git a/game/images/ryt normal.png b/game/images/ryt normal.png new file mode 100755 index 0000000..5e3e274 Binary files /dev/null and b/game/images/ryt normal.png differ diff --git a/game/images/xingyu laughing 2.png b/game/images/xingyu laughing 2.png new file mode 100644 index 0000000..4fc76e2 Binary files /dev/null and b/game/images/xingyu laughing 2.png differ diff --git a/game/images/xingyu laughing big.png b/game/images/xingyu laughing big.png new file mode 100644 index 0000000..1125e47 Binary files /dev/null and b/game/images/xingyu laughing big.png differ diff --git a/game/images/xingyu laughing.png b/game/images/xingyu laughing.png new file mode 100644 index 0000000..0dcfc7a Binary files /dev/null and b/game/images/xingyu laughing.png differ diff --git a/game/images/xingyu thinking.png b/game/images/xingyu thinking.png new file mode 100644 index 0000000..e8a9ff9 Binary files /dev/null and b/game/images/xingyu thinking.png differ diff --git a/game/images/xingyu.png b/game/images/xingyu.png new file mode 100644 index 0000000..b58d64c Binary files /dev/null and b/game/images/xingyu.png differ diff --git a/game/images/yh camerabag.png b/game/images/yh camerabag.png new file mode 100644 index 0000000..ba5b5d0 Binary files /dev/null and b/game/images/yh camerabag.png differ diff --git a/game/images/yh first seen.png.discarded b/game/images/yh first seen.png.discarded new file mode 100644 index 0000000..d3eb43c Binary files /dev/null and b/game/images/yh first seen.png.discarded differ diff --git a/game/images/yh.png b/game/images/yh.png new file mode 100644 index 0000000..e23df1f Binary files /dev/null and b/game/images/yh.png differ diff --git a/game/libs/libs.txt b/game/libs/libs.txt new file mode 100755 index 0000000..12acf12 --- /dev/null +++ b/game/libs/libs.txt @@ -0,0 +1,6 @@ +The game/libs/ directory is meant for third-party libraries that ask to be +put in game/libs. + +When this file (game/libs/libs.txt) is present, Ren'Py will load all files +in libs before any other file in game/, and will ignore the first directory +name under game/libs when determining the order to load files. diff --git a/game/options.rpy b/game/options.rpy new file mode 100755 index 0000000..f85aaa0 --- /dev/null +++ b/game/options.rpy @@ -0,0 +1,205 @@ +## 此文件包含有可自定义您游戏的设置。 +## +## 以“##”开头的语句是注释,您不应该对其取消注释。以“#”开头的语句是注释掉的代码, +## 在适用的时候您可能需要对其取消注释。 + + +## 基础 ########################################################################## + +## 用户可读的游戏名称。此命令用来设置默认窗口标题,并且会在界面和错误报告中出 +## 现。 +## +## 带有 _() 的字符串表示其可被翻译。 +init python: + if renpy.emscripten: + # Web 版本等待所有资源加载完成 + config.main_menu_music_fadein = 2.0 + config.automatic_images_strip = [] + + +define config.name = _("莘澜日记") + + +## 决定上面给出的标题是否显示在标题界面屏幕。设置为 False 来隐藏标题。 + +define gui.show_name = True + + +## 游戏版本号。 + +define config.version = "dev0.0.6" + + +## 放置在游戏内“关于”屏幕上的文本。将文本放在三个引号之间,并在段落之间留出空 +## 行。 + +define gui.about = _p(""" +制作人员: +\n 剧情:lcd +\n 角色设计:xwhy +\n 程序:FL +\n 图像:FL +\n 感谢以下人员对项目做出的贡献:yh, wjj等。 +""") + + +## 在构建的发布版中,可执行文件和目录所使用的短名称。此处仅限使用 ASCII 字符,并 +## 且不能包含空格、冒号或分号。 + +define build.name = "XinLanDiary" + + +## 音效和音乐 ####################################################################### + +## 这三个变量控制哪些内置的混音器会默认显示给用户。将其中一个设置为 False 将隐藏 +## 对应的混音器。 + +define config.has_sound = True +define config.has_music = True +define config.has_voice = False + + +## 为了让用户在音效或语音轨道上播放测试音频,请取消对下面一行的注释并设置播放的 +## 样本声音。 + +# define config.sample_sound = "sample-sound.ogg" +# define config.sample_voice = "sample-voice.ogg" + + +## 将以下语句取消注释就可以设置标题界面播放的背景音乐文件。此文件将在整个游戏中 +## 持续播放,直至音乐停止或其他文件开始播放。 + +# define config.main_menu_music = "main-menu-theme.ogg" + + +## 转场 ########################################################################## +## +## 这些变量用来控制某些事件发生时的转场。每一个变量都应设置成一个转场,或者是 +## None 来表示无转场。 + +## 进入或退出游戏菜单。 + +define config.enter_transition = dissolve +define config.exit_transition = dissolve + + +## 各个游戏菜单之间的转场。 + +define config.intra_transition = dissolve + + +## 载入游戏后使用的转场。 + +define config.after_load_transition = fade + + +## 在游戏结束之后进入主菜单时使用的转场。 + +define config.end_game_transition = None + + +## 用于控制在游戏开始标签不存在时转场的变量。作为替代,在显示初始化场景后使用 +## with 语句。 + + +## 窗口管理 ######################################################################## +## +## 此命令控制对话框窗口何时显示。若为 show,对话框将总是显示。若为 hide,对话框 +## 仅在对话出现时显示。若为 auto,对话框会在 scene 语句前隐藏,并在有新对话时重 +## 新显示。 +## +## 在游戏开始后,可以用 window show、window hide 和 window auto 语句来改变其状 +## 态。 + +define config.window = "auto" + + +## 用于显示和隐藏对话框窗口的转场 + +define config.window_show_transition = Dissolve(.2) +define config.window_hide_transition = Dissolve(.2) + + +## 默认设置 ######################################################################## + +## 控制默认的文字显示速度。默认的 0 为瞬间,而其他数字则是每秒显示出的字符数。 + +default preferences.text_cps = 0 + + +## 默认的自动前进延迟。数字越大,等待时间越长,有效范围为 0 - 30。 + +default preferences.afm_time = 15 + + +## 存档目录 ######################################################################## +## +## 控制 Ren'Py 放置游戏存档的特定操作系统目录。存档文件将放置在: +## +## Windows:%APPDATA\RenPy\ +## +## Macintosh:$HOME/Library/RenPy/ +## +## Linux:$HOME/.renpy/ +## +## 该语句通常不应变更,若要变更,应为有效字符串而不是表达式。 + +define config.save_directory = "TheLittleTao-1769444170" + + +## 图标 ########################################################################## +## +## 在任务栏或 Dock 上显示的图标。 + +define config.window_icon = "gui/window_icon.png" + + +## 构建配置 ######################################################################## +## +## 此部分控制 Ren'Py 如何将您的项目转变为发行版文件。 + +init python: + + ## 以下函数接受文件模式。文件模式不区分大小写,并与基础目录的相对路径相匹 + ## 配,包括或不包括 /。如果多个模式匹配,则使用第一个模式。 + ## + ## 在一个模式中: + ## + ## / 是目录分隔符。 + ## + ## * 匹配所有字符,目录分隔符除外。 + ## + ## ** 匹配所有字符,包括目录分隔符。 + ## + ## 例如,“*.txt”匹配基础目录中的 txt 文件,“game/**.ogg”匹配游戏目录或任何子 + ## 目录中的 ogg 文件,“**.psd”匹配项目中任何位置的 psd 文件。 + + ## 将文件列为 None 来使其从构建的发行版中排除。 + + build.classify('**~', None) + build.classify('**.bak', None) + build.classify('**/.**', None) + build.classify('**/#**', None) + build.classify('**/thumbs.db', None) + + ## 若要封装文件,需将其列为“archive”。 + + # build.classify('game/**.png', 'archive') + # build.classify('game/**.jpg', 'archive') + + ## 匹配为文档模式的文件会在 Mac 应用程序构建中被复制,因此它们同时出现在 APP + ## 和 ZIP 文件中。 + + build.documentation('*.html') + build.documentation('*.txt') + + +## 执行应用内购需要一个 Google Play 许可密钥。许可密钥可以在 Google Play 开发者 +## 控制台的“Monetize” > “Monetization Setup” > “Licensing”页面找到。 + +# define build.google_play_key = "..." + + +## 与 itch.io 项目相关的用户名和项目名,以 / 分隔。 + +# define build.itch_project = "renpytom/test-project" diff --git a/game/screens.rpy b/game/screens.rpy new file mode 100644 index 0000000..a730fda --- /dev/null +++ b/game/screens.rpy @@ -0,0 +1,1622 @@ +################################################################################ +## 初始化 +################################################################################ + +init offset = -1 + + +################################################################################ +## 样式 +################################################################################ + +style default: + properties gui.text_properties() + language gui.language + +style input: + properties gui.text_properties("input", accent=True) + adjust_spacing False + +style hyperlink_text: + properties gui.text_properties("hyperlink", accent=True) + hover_underline True + +style gui_text: + properties gui.text_properties("interface") + + +style button: + properties gui.button_properties("button") + +style button_text is gui_text: + properties gui.text_properties("button") + yalign 0.5 + + +style label_text is gui_text: + properties gui.text_properties("label", accent=True) + +style prompt_text is gui_text: + properties gui.text_properties("prompt") + + +style bar: + ysize gui.bar_size + left_bar Frame("gui/bar/left.png", gui.bar_borders, tile=gui.bar_tile) + right_bar Frame("gui/bar/right.png", gui.bar_borders, tile=gui.bar_tile) + +style vbar: + xsize gui.bar_size + top_bar Frame("gui/bar/top.png", gui.vbar_borders, tile=gui.bar_tile) + bottom_bar Frame("gui/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile) + +style scrollbar: + ysize gui.scrollbar_size + base_bar Frame("gui/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) + thumb Frame("gui/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) + +style vscrollbar: + xsize gui.scrollbar_size + base_bar Frame("gui/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) + thumb Frame("gui/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) + +style slider: + ysize gui.slider_size + base_bar Frame("gui/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile) + thumb "gui/slider/horizontal_[prefix_]thumb.png" + +style vslider: + xsize gui.slider_size + base_bar Frame("gui/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile) + thumb "gui/slider/vertical_[prefix_]thumb.png" + + +style frame: + padding gui.frame_borders.padding + background Frame("gui/frame.png", gui.frame_borders, tile=gui.frame_tile) + + + +################################################################################ +## 游戏内屏幕 +################################################################################ + + +## 对话屏幕 ######################################################################## +## +## 对话屏幕用于向用户显示对话。它需要两个参数,who 和 what,分别是叙述角色的名字 +## 和所叙述的文本。(如果没有名字,参数 who 可以是 None。) +## +## 此屏幕必须创建一个 id 为 what 的文本可视控件,因为 Ren'Py 使用它来管理文本显 +## 示。它还可以创建 id 为 who 和 id 为 window 的可视控件来应用样式属性。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#say + +screen say(who, what): + style_prefix "say" + + # 主文本框 + window: + id "window" + background "gui/textbox_bg.png" + xalign 0.5 + yalign 1.0 + yoffset -30 # 距离底部30像素 + xsize 1400 + ysize 240 + + text what: + id "what" + xpos 60 + ypos 30 + xsize 1280 + color "#FFFFFF" + outlines [(2, "#000000", 0, 0)] # 黑色描边 + + # 名字框 - 悬浮在文本框上方 + if who is not None: + window: + id "namebox" + background "gui/namebox_bg.png" + + xpos 480 # 左右位置 + ypos 811 # 上下位置 (根据实际调整) + xsize 180 + ysize 50 + + text who: + id "who" + xalign 0.5 + yalign 0.5 + color "#FFFFFF" + outlines [] + + +## 通过 Character 对象使名称框可用于样式化。 +init python: + config.character_id_prefixes.append('namebox') + +style window is default +style say_label is default +style say_dialogue is default +style say_thought is say_dialogue + +style namebox is default +style namebox_label is say_label + + +style window: + xalign 0.5 + xfill True + yalign gui.textbox_yalign + ysize gui.textbox_height + + background Image("gui/textbox.png", xalign=0.5, yalign=1.0) + +style namebox: + xpos gui.name_xpos + xanchor gui.name_xalign + xsize gui.namebox_width + ypos gui.name_ypos + ysize gui.namebox_height + + background Frame("gui/namebox.png", gui.namebox_borders, tile=gui.namebox_tile, xalign=gui.name_xalign) + padding gui.namebox_borders.padding + +style say_label: + properties gui.text_properties("name", accent=True) + xalign gui.name_xalign + yalign 0.5 + +style say_dialogue: + properties gui.text_properties("dialogue") + + xpos gui.dialogue_xpos + xsize gui.dialogue_width + ypos gui.dialogue_ypos + + adjust_spacing False + + # 增强的对话文字样式 + color "#FFFFFF" + size 28 + outlines [(2, "#000000", 0, 0)] + line_spacing 8 + +## 输入屏幕 ######################################################################## +## +## 此屏幕用于显示 renpy.input。prompt 参数用于传递文本提示。 +## +## 此屏幕必须创建一个 id 为 input 的输入可视控件来接受各种输入参数。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#input + +screen input(prompt): + style_prefix "input" + + window: + + vbox: + xanchor gui.dialogue_text_xalign + xpos gui.dialogue_xpos + xsize gui.dialogue_width + ypos gui.dialogue_ypos + + text prompt style "input_prompt" + input id "input" + +style input_prompt is default + +style input_prompt: + xalign gui.dialogue_text_xalign + properties gui.text_properties("input_prompt") + +style input: + xalign gui.dialogue_text_xalign + xmaximum gui.dialogue_width + + +## 选择屏幕 ######################################################################## +## +## 此屏幕用于显示由 menu 语句生成的游戏内选项。参数 items 是一个对象列表,每个对 +## 象都有字幕和动作字段。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#choice + +screen choice(items): + style_prefix "choice" + + vbox: + for i in items: + textbutton i.caption action i.action + + +style choice_vbox is vbox +style choice_button is button +style choice_button_text is button_text + +style choice_vbox: + xalign 0.5 + ypos 405 + yanchor 0.5 + + spacing gui.choice_spacing + +style choice_button is default: + properties gui.button_properties("choice_button") + +style choice_button_text is default: + properties gui.text_properties("choice_button") + + +## 快捷菜单屏幕 ###################################################################### +## +## 快捷菜单显示于游戏内,以便于访问游戏外的菜单。 + +screen quick_menu(): + + ## 确保该菜单出现在其他屏幕之上, + zorder 100 + + if quick_menu: + + hbox: + style_prefix "quick" + style "quick_menu" + + textbutton _("回退") action Rollback() + textbutton _("历史") action ShowMenu('history') + textbutton _("快进") action Skip() alternate Skip(fast=True, confirm=True) + textbutton _("自动") action Preference("auto-forward", "toggle") + textbutton _("保存") action ShowMenu('save') + textbutton _("快存") action QuickSave() + textbutton _("快读") action QuickLoad() + textbutton _("设置") action ShowMenu('preferences') + + +## 此代码确保只要用户没有主动隐藏界面,就会在游戏中显示 quick_menu 屏幕。 +init python: + config.overlay_screens.append("quick_menu") + +default quick_menu = True + +style quick_menu is hbox +style quick_button is default +style quick_button_text is button_text + +style quick_menu: + xalign 0.5 + yalign 1.0 + +style quick_button: + properties gui.button_properties("quick_button") + +style quick_button_text: + properties gui.text_properties("quick_button") + + +################################################################################ +## 标题和游戏菜单屏幕 +################################################################################ + +## 导航屏幕 ######################################################################## +## +## 该屏幕包含在标题菜单和游戏菜单中,并提供导航到其他菜单,以及启动游戏。 + +screen navigation(): + + vbox: + style_prefix "navigation" + + xpos gui.navigation_xpos + yalign 0.5 + + spacing gui.navigation_spacing + + if main_menu: + + textbutton _("新游戏") action Start() # 开始游戏 + + else: + + textbutton _("历史") action ShowMenu("history") + + textbutton _("保存") action ShowMenu("save") + + textbutton _("读取游戏") action ShowMenu("load") + + textbutton _("设置") action ShowMenu("preferences") + + if _in_replay: + + textbutton _("结束回放") action EndReplay(confirm=True) + + elif not main_menu: + + textbutton _("标题菜单") action MainMenu() + + textbutton _("关于") action ShowMenu("about") + + if renpy.variant("pc") or (renpy.variant("web") and not renpy.variant("mobile")): + + ## “帮助”对移动设备来说并非必需或相关。 + textbutton _("帮助") action ShowMenu("help") + + if renpy.variant("pc"): + + ## 退出按钮在 iOS 上是被禁止使用的,在安卓和网页上也不是必要的。 + textbutton _("退出") action Quit(confirm=not main_menu) + + +style navigation_button is gui_button +style navigation_button_text is gui_button_text + +style navigation_button: + size_group "navigation" + properties gui.button_properties("navigation_button") + +style navigation_button_text: + properties gui.text_properties("navigation_button") + + +## 标题菜单屏幕 ###################################################################### +## +## 用于在 Ren'Py 启动时显示标题菜单。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#main-menu + +screen main_menu(): + + ## 此语句可确保替换掉任何其他菜单屏幕。 + tag menu + + add gui.main_menu_background + + ## 此空框可使标题菜单变暗。 + frame: + style "main_menu_frame" + + ## use 语句将其他的屏幕包含进此屏幕。标题屏幕的实际内容在导航屏幕中。 + use navigation + + if gui.show_name: + + vbox: + style "main_menu_vbox" + + text "[config.name!t]": + style "main_menu_title" + + text "[config.version]": + style "main_menu_version" + + +style main_menu_frame is empty +style main_menu_vbox is vbox +style main_menu_text is gui_text +style main_menu_title is main_menu_text +style main_menu_version is main_menu_text + +style main_menu_frame: + xsize 420 + yfill True + + background "gui/overlay/main_menu.png" + +style main_menu_vbox: + xalign 1.0 + xoffset -30 + xmaximum 1200 + yalign 1.0 + yoffset -30 + +style main_menu_text: + properties gui.text_properties("main_menu", accent=True) + +style main_menu_title: + properties gui.text_properties("title") + +style main_menu_version: + properties gui.text_properties("version") + + +## 游戏菜单屏幕 ###################################################################### +## +## 此屏幕列出了游戏菜单的基本共同结构。可使用屏幕标题调用,并显示背景、标题和导 +## 航菜单。 +## +## scroll 参数可以是 None,也可以是 viewport 或 vpgrid。此屏幕旨在与一个或多个子 +## 屏幕同时使用,这些子屏幕将被嵌入(放置)在其中。 + +screen game_menu(title, scroll=None, yinitial=0.0, spacing=0): + + style_prefix "game_menu" + + if main_menu: + add gui.main_menu_background + else: + add gui.game_menu_background + + frame: + style "game_menu_outer_frame" + + hbox: + + ## 导航部分的预留空间。 + frame: + style "game_menu_navigation_frame" + + frame: + style "game_menu_content_frame" + + if scroll == "viewport": + + viewport: + yinitial yinitial + scrollbars "vertical" + mousewheel True + draggable True + pagekeys True + + side_yfill True + + vbox: + spacing spacing + + transclude + + elif scroll == "vpgrid": + + vpgrid: + cols 1 + yinitial yinitial + + scrollbars "vertical" + mousewheel True + draggable True + pagekeys True + + side_yfill True + + spacing spacing + + transclude + + else: + + transclude + + use navigation + + textbutton _("返回"): + style "return_button" + + action Return() + + label title + + if main_menu: + key "game_menu" action ShowMenu("main_menu") + + +style game_menu_outer_frame is empty +style game_menu_navigation_frame is empty +style game_menu_content_frame is empty +style game_menu_viewport is gui_viewport +style game_menu_side is gui_side +style game_menu_scrollbar is gui_vscrollbar + +style game_menu_label is gui_label +style game_menu_label_text is gui_label_text + +style return_button is navigation_button +style return_button_text is navigation_button_text + +style game_menu_outer_frame: + bottom_padding 45 + top_padding 180 + + background "gui/overlay/game_menu.png" + +style game_menu_navigation_frame: + xsize 420 + yfill True + +style game_menu_content_frame: + left_margin 60 + right_margin 30 + top_margin 15 + +style game_menu_viewport: + xsize 1380 + +style game_menu_vscrollbar: + unscrollable gui.unscrollable + +style game_menu_side: + spacing 15 + +style game_menu_label: + xpos 75 + ysize 180 + +style game_menu_label_text: + size 75 + color gui.accent_color + yalign 0.5 + +style return_button: + xpos gui.navigation_xpos + yalign 1.0 + yoffset -45 + + +## 关于屏幕 ######################################################################## +## +## 此屏幕提供有关游戏和 Ren'Py 的制作人员和版权信息。 +## +## 此屏幕没有什么特别之处,因此它也可以作为一个例子来说明如何制作一个自定义屏 +## 幕。 + +screen about(): + + tag menu + + ## 此 use 语句将 game_menu 屏幕包含到了这个屏幕内。子级 vbox 将包含在 + ## game_menu 屏幕的 viewport 内。 + use game_menu(_("关于"), scroll="viewport"): + + style_prefix "about" + + vbox: + + label "[config.name!t]" + text _("版本 [config.version!t]\n") + + ## gui.about 通常在 options.rpy 中设置。 + if gui.about: + text "[gui.about!t]\n" + + text _("引擎:{a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only]\n\n[renpy.license!t]") + + +style about_label is gui_label +style about_label_text is gui_label_text +style about_text is gui_text + +style about_label_text: + size gui.label_text_size + + +## 读取和保存屏幕 ##################################################################### +## +## 这些屏幕负责让用户保存游戏并能够再次读取。由于它们几乎完全一样,因此这两个屏 +## 幕都是以第三个屏幕 file_slots 来实现的。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#save https://doc.renpy.cn/zh- +## CN/screen_special.html#load + +screen save(): + + tag menu + + use file_slots(_("保存")) + + +screen load(): + + tag menu + + use file_slots(_("读取游戏")) + + +screen file_slots(title): + + default page_name_value = FilePageNameInputValue(pattern=_("第 {} 页"), auto=_("自动存档"), quick=_("快速存档")) + + use game_menu(title): + + fixed: + + ## 此代码确保输入控件在任意按钮执行前可以获取 enter 事件。 + order_reverse True + + ## 页面名称,可以通过单击按钮进行编辑。 + button: + style "page_label" + + key_events True + xalign 0.5 + action page_name_value.Toggle() + + input: + style "page_label_text" + value page_name_value + + ## 存档位网格。 + grid gui.file_slot_cols gui.file_slot_rows: + style_prefix "slot" + + xalign 0.5 + yalign 0.5 + + spacing gui.slot_spacing + + for i in range(gui.file_slot_cols * gui.file_slot_rows): + + $ slot = i + 1 + + button: + action FileAction(slot) + + has vbox + + add FileScreenshot(slot) xalign 0.5 + + text FileTime(slot, format=_("{#file_time}%Y-%m-%d %H:%M"), empty=_("空存档位")): + style "slot_time_text" + + text FileSaveName(slot): + style "slot_name_text" + + key "save_delete" action FileDelete(slot) + + ## 用于访问其他页面的按钮。 + vbox: + style_prefix "page" + + xalign 0.5 + yalign 1.0 + + hbox: + xalign 0.5 + + spacing gui.page_spacing + + textbutton _("<") action FilePagePrevious() + key "save_page_prev" action FilePagePrevious() + + if config.has_autosave: + textbutton _("{#auto_page}A") action FilePage("auto") + + if config.has_quicksave: + textbutton _("{#quick_page}Q") action FilePage("quick") + + ## range(1, 10) 给出 1 到 9 之间的数字。 + for page in range(1, 10): + textbutton "[page]" action FilePage(page) + + textbutton _(">") action FilePageNext() + key "save_page_next" action FilePageNext() + + if config.has_sync: + if CurrentScreenName() == "save": + textbutton _("上传同步"): + action UploadSync() + xalign 0.5 + else: + textbutton _("下载同步"): + action DownloadSync() + xalign 0.5 + + +style page_label is gui_label +style page_label_text is gui_label_text +style page_button is gui_button +style page_button_text is gui_button_text + +style slot_button is gui_button +style slot_button_text is gui_button_text +style slot_time_text is slot_button_text +style slot_name_text is slot_button_text + +style page_label: + xpadding 75 + ypadding 5 + xalign 0.5 + +style page_label_text: + textalign 0.5 + layout "subtitle" + hover_color gui.hover_color + +style page_button: + properties gui.button_properties("page_button") + +style page_button_text: + properties gui.text_properties("page_button") + +style slot_button: + properties gui.button_properties("slot_button") + +style slot_button_text: + properties gui.text_properties("slot_button") + + +## 设置屏幕 ######################################################################## +## +## 设置屏幕允许用户配置游戏,使其更适合自己。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#preferences + +screen preferences(): + + tag menu + + use game_menu(_("设置"), scroll="viewport"): + + vbox: + + hbox: + box_wrap True + + if renpy.variant("pc") or renpy.variant("web"): + + vbox: + style_prefix "radio" + label _("显示") + textbutton _("窗口") action Preference("display", "window") + textbutton _("全屏") action Preference("display", "fullscreen") + + vbox: + style_prefix "check" + label _("快进") + textbutton _("未读文本") action Preference("skip", "toggle") + textbutton _("选项后继续") action Preference("after choices", "toggle") + textbutton _("忽略转场") action InvertSelected(Preference("transitions", "toggle")) + + ## 可在此处添加 radio_pref 或 check_pref 类型的额外 vbox,以添加 + ## 额外的创建者定义的偏好设置。 + + null height (4 * gui.pref_spacing) + + hbox: + style_prefix "slider" + box_wrap True + + vbox: + + label _("文字速度") + + bar value Preference("text speed") + + label _("自动前进时间") + + bar value Preference("auto-forward time") + + vbox: + + if config.has_music: + label _("音乐音量") + + hbox: + bar value Preference("music volume") + + if config.has_sound: + + label _("音效音量") + + hbox: + bar value Preference("sound volume") + + if config.sample_sound: + textbutton _("测试") action Play("sound", config.sample_sound) + + + if config.has_voice: + label _("语音音量") + + hbox: + bar value Preference("voice volume") + + if config.sample_voice: + textbutton _("测试") action Play("voice", config.sample_voice) + + if config.has_music or config.has_sound or config.has_voice: + null height gui.pref_spacing + + textbutton _("全部静音"): + action Preference("all mute", "toggle") + style "mute_all_button" + + +style pref_label is gui_label +style pref_label_text is gui_label_text +style pref_vbox is vbox + +style radio_label is pref_label +style radio_label_text is pref_label_text +style radio_button is gui_button +style radio_button_text is gui_button_text +style radio_vbox is pref_vbox + +style check_label is pref_label +style check_label_text is pref_label_text +style check_button is gui_button +style check_button_text is gui_button_text +style check_vbox is pref_vbox + +style slider_label is pref_label +style slider_label_text is pref_label_text +style slider_slider is gui_slider +style slider_button is gui_button +style slider_button_text is gui_button_text +style slider_pref_vbox is pref_vbox + +style mute_all_button is check_button +style mute_all_button_text is check_button_text + +style pref_label: + top_margin gui.pref_spacing + bottom_margin 3 + +style pref_label_text: + yalign 1.0 + +style pref_vbox: + xsize 338 + +style radio_vbox: + spacing gui.pref_button_spacing + +style radio_button: + properties gui.button_properties("radio_button") + foreground "gui/button/radio_[prefix_]foreground.png" + +style radio_button_text: + properties gui.text_properties("radio_button") + +style check_vbox: + spacing gui.pref_button_spacing + +style check_button: + properties gui.button_properties("check_button") + foreground "gui/button/check_[prefix_]foreground.png" + +style check_button_text: + properties gui.text_properties("check_button") + +style slider_slider: + xsize 525 + +style slider_button: + properties gui.button_properties("slider_button") + yalign 0.5 + left_margin 15 + +style slider_button_text: + properties gui.text_properties("slider_button") + +style slider_vbox: + xsize 675 + + +## 历史屏幕 ######################################################################## +## +## 这是一个向用户显示对话历史的屏幕。虽然此屏幕没有什么特别之处,但它必须访问储 +## 存在 _history_list 中的对话历史记录。 +## +## https://doc.renpy.cn/zh-CN/history.html + +screen history(): + + tag menu + + ## 避免预缓存此屏幕,因为它可能非常大。 + predict False + + use game_menu(_("历史"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0, spacing=gui.history_spacing): + + style_prefix "history" + + for h in _history_list: + + window: + + ## 此代码可确保如果 history_height 为 None 时仍可正常显示条目。 + has fixed: + yfit True + + if h.who: + + label h.who: + style "history_name" + substitute False + + ## 从 Character 对象中获取叙述角色的文字颜色,如果设置了 + ## 的话。 + if "color" in h.who_args: + text_color h.who_args["color"] + + $ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags) + text what: + substitute False + + if not _history_list: + label _("尚无对话历史记录。") + + +## 此代码决定了允许在历史记录屏幕上显示哪些标签。 + +define gui.history_allow_tags = { "alt", "noalt", "rt", "rb", "art" } + + +style history_window is empty + +style history_name is gui_label +style history_name_text is gui_label_text +style history_text is gui_text + +style history_label is gui_label +style history_label_text is gui_label_text + +style history_window: + xfill True + ysize gui.history_height + +style history_name: + xpos gui.history_name_xpos + xanchor gui.history_name_xalign + ypos gui.history_name_ypos + xsize gui.history_name_width + +style history_name_text: + min_width gui.history_name_width + textalign gui.history_name_xalign + +style history_text: + xpos gui.history_text_xpos + ypos gui.history_text_ypos + xanchor gui.history_text_xalign + xsize gui.history_text_width + min_width gui.history_text_width + textalign gui.history_text_xalign + layout ("subtitle" if gui.history_text_xalign else "tex") + +style history_label: + xfill True + +style history_label_text: + xalign 0.5 + + +## 帮助屏幕 ######################################################################## +## +## 提供有关键盘和鼠标映射信息的屏幕。它使用其它屏幕(keyboard_help、mouse_help +## 和 gamepad_help)来显示实际的帮助内容。 + +screen help(): + + tag menu + + default device = "keyboard" + + use game_menu(_("帮助"), scroll="viewport"): + + style_prefix "help" + + vbox: + spacing 23 + + hbox: + + textbutton _("键盘") action SetScreenVariable("device", "keyboard") + textbutton _("鼠标") action SetScreenVariable("device", "mouse") + + if GamepadExists(): + textbutton _("手柄") action SetScreenVariable("device", "gamepad") + + if device == "keyboard": + use keyboard_help + elif device == "mouse": + use mouse_help + elif device == "gamepad": + use gamepad_help + + +screen keyboard_help(): + + hbox: + label _("回车") + text _("推进对话并激活界面。") + + hbox: + label _("空格") + text _("在没有选择的情况下推进对话。") + + hbox: + label _("方向键") + text _("导航界面。") + + hbox: + label _("Esc") + text _("访问游戏菜单。") + + hbox: + label _("键盘") + text _("按住时快进对话。") + + hbox: + label _("Tab") + text _("切换对话快进。") + + hbox: + label _("上一页") + text _("回退至先前的对话。") + + hbox: + label _("下一页") + text _("向前至后来的对话。") + + hbox: + label "H" + text _("隐藏用户界面。") + + hbox: + label "S" + text _("截图。") + + hbox: + label "V" + text _("切换辅助{a=https://doc.renpy.cn/zh-CN/self_voicing.html}机器朗读{/a}。") + + hbox: + label "Shift+A" + text _("打开无障碍菜单。") + + +screen mouse_help(): + + hbox: + label _("左键点击") + text _("推进对话并激活界面。") + + hbox: + label _("中键点击") + text _("隐藏用户界面。") + + hbox: + label _("右键点击") + text _("访问游戏菜单。") + + hbox: + label _("鼠标滚轮上") + text _("回退至先前的对话。") + + hbox: + label _("鼠标滚轮下") + text _("向前至后来的对话。") + + +screen gamepad_help(): + + hbox: + label _("右扳机键\nA/底键") + text _("推进对话并激活界面。") + + hbox: + label _("左扳机键\n左肩键") + text _("回退至先前的对话。") + + hbox: + label _("右肩键") + text _("向前至后来的对话。") + + hbox: + label _("十字键,摇杆") + text _("导航界面。") + + hbox: + label _("开始,向导,B/右键") + text _("访问游戏菜单。") + + hbox: + label _("Y/顶键") + text _("隐藏用户界面。") + + textbutton _("校准") action GamepadCalibrate() + + +style help_button is gui_button +style help_button_text is gui_button_text +style help_label is gui_label +style help_label_text is gui_label_text +style help_text is gui_text + +style help_button: + properties gui.button_properties("help_button") + xmargin 12 + +style help_button_text: + properties gui.text_properties("help_button") + +style help_label: + xsize 375 + right_padding 30 + +style help_label_text: + size gui.text_size + xalign 1.0 + textalign 1.0 + + + +################################################################################ +## 其他屏幕 +################################################################################ + + +## 确认屏幕 ######################################################################## +## +## 当 Ren'Py 需要询问用户有关确定或取消的问题时,会调用确认屏幕。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#confirm + +screen confirm(message, yes_action, no_action): + + ## 显示此屏幕时,确保其他屏幕无法输入。 + modal True + + zorder 200 + + style_prefix "confirm" + + add "gui/overlay/confirm.png" + + frame: + + vbox: + xalign .5 + yalign .5 + spacing 45 + + label _(message): + style "confirm_prompt" + xalign 0.5 + + hbox: + xalign 0.5 + spacing 150 + + textbutton _("确定") action yes_action + textbutton _("取消") action no_action + + ## 右键点击退出并答复 no(取消)。 + key "game_menu" action no_action + + +style confirm_frame is gui_frame +style confirm_prompt is gui_prompt +style confirm_prompt_text is gui_prompt_text +style confirm_button is gui_medium_button +style confirm_button_text is gui_medium_button_text + +style confirm_frame: + background Frame([ "gui/confirm_frame.png", "gui/frame.png"], gui.confirm_frame_borders, tile=gui.frame_tile) + padding gui.confirm_frame_borders.padding + xalign .5 + yalign .5 + +style confirm_prompt_text: + textalign 0.5 + layout "subtitle" + +style confirm_button: + properties gui.button_properties("confirm_button") + +style confirm_button_text: + properties gui.text_properties("confirm_button") + + +## 快进指示屏幕 ###################################################################### +## +## skip_indicator 屏幕用于指示快进正在进行中。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#skip-indicator + +screen skip_indicator(): + + zorder 100 + style_prefix "skip" + + frame: + + hbox: + spacing 9 + + text _("正在快进") + + text "▸" at delayed_blink(0.0, 1.0) style "skip_triangle" + text "▸" at delayed_blink(0.2, 1.0) style "skip_triangle" + text "▸" at delayed_blink(0.4, 1.0) style "skip_triangle" + + +## 此变换用于一个接一个地闪烁箭头。 +transform delayed_blink(delay, cycle): + alpha .5 + + pause delay + + block: + linear .2 alpha 1.0 + pause .2 + linear .2 alpha 0.5 + pause (cycle - .4) + repeat + + +style skip_frame is empty +style skip_text is gui_text +style skip_triangle is skip_text + +style skip_frame: + ypos gui.skip_ypos + background Frame("gui/skip.png", gui.skip_frame_borders, tile=gui.frame_tile) + padding gui.skip_frame_borders.padding + +style skip_text: + size gui.notify_text_size + +style skip_triangle: + ## 我们必须使用包含“▸”(黑色右旋小三角)字形的字体。 + font "DejaVuSans.ttf" + + +## 通知屏幕 ######################################################################## +## +## 通知屏幕用于向用户显示消息。(例如,当游戏快速保存或进行截屏时。) +## +## https://doc.renpy.cn/zh-CN/screen_special.html#notify-screen + +screen notify(message): + + zorder 100 + style_prefix "notify" + + frame at notify_appear: + text "[message!tq]" + + timer 3.25 action Hide('notify') + + +transform notify_appear: + on show: + alpha 0 + linear .25 alpha 1.0 + on hide: + linear .5 alpha 0.0 + + +style notify_frame is empty +style notify_text is gui_text + +style notify_frame: + ypos gui.notify_ypos + + background Frame("gui/notify.png", gui.notify_frame_borders, tile=gui.frame_tile) + padding gui.notify_frame_borders.padding + +style notify_text: + properties gui.text_properties("notify") + + +## NVL 模式屏幕 #################################################################### +## +## 此屏幕用于 NVL 模式的对话和菜单。 +## +## https://doc.renpy.cn/zh-CN/screen_special.html#nvl + + +screen nvl(dialogue, items=None): + + window: + style "nvl_window" + + has vbox: + spacing gui.nvl_spacing + + ## 在 vpgrid 或 vbox 中显示对话框。 + if gui.nvl_height: + + vpgrid: + cols 1 + yinitial 1.0 + + use nvl_dialogue(dialogue) + + else: + + use nvl_dialogue(dialogue) + + ## 显示菜单,如果给定的话。如果 config.narrator_menu 设置为 True,则菜单 + ## 可能显示不正确。 + for i in items: + + textbutton i.caption: + action i.action + style "nvl_button" + + add SideImage() xalign 0.0 yalign 1.0 + + +screen nvl_dialogue(dialogue): + + for d in dialogue: + + window: + id d.window_id + + fixed: + yfit gui.nvl_height is None + + if d.who is not None: + + text d.who: + id d.who_id + + text d.what: + id d.what_id + + +## 此语句控制一次可以显示的 NVL 模式条目的最大数量。 +define config.nvl_list_length = gui.nvl_list_length + +style nvl_window is default +style nvl_entry is default + +style nvl_label is say_label +style nvl_dialogue is say_dialogue + +style nvl_button is button +style nvl_button_text is button_text + +style nvl_window: + xfill True + yfill True + + background "gui/nvl.png" + padding gui.nvl_borders.padding + +style nvl_entry: + xfill True + ysize gui.nvl_height + +style nvl_label: + xpos gui.nvl_name_xpos + xanchor gui.nvl_name_xalign + ypos gui.nvl_name_ypos + yanchor 0.0 + xsize gui.nvl_name_width + min_width gui.nvl_name_width + textalign gui.nvl_name_xalign + +style nvl_dialogue: + xpos gui.nvl_text_xpos + xanchor gui.nvl_text_xalign + ypos gui.nvl_text_ypos + xsize gui.nvl_text_width + min_width gui.nvl_text_width + textalign gui.nvl_text_xalign + layout ("subtitle" if gui.nvl_text_xalign else "tex") + +style nvl_thought: + xpos gui.nvl_thought_xpos + xanchor gui.nvl_thought_xalign + ypos gui.nvl_thought_ypos + xsize gui.nvl_thought_width + min_width gui.nvl_thought_width + textalign gui.nvl_thought_xalign + layout ("subtitle" if gui.nvl_text_xalign else "tex") + +style nvl_button: + properties gui.button_properties("nvl_button") + xpos gui.nvl_button_xpos + xanchor gui.nvl_button_xalign + +style nvl_button_text: + properties gui.text_properties("nvl_button") + + +## 对话气泡屏幕 ###################################################################### +## +## 对话气泡屏幕用于以对话气泡的形式向玩家显示对话。对话气泡屏幕的参数与 say 屏幕 +## 相同,必须创建一个 id 为 what 的可视控件,并且可以创建 id 为 namebox、who 和 +## window 的可视控件。 +## +## https://doc.renpy.cn/zh-CN/bubble.html#bubble-screen + +screen bubble(who, what): + style_prefix "bubble" + + window: + id "window" + + if who is not None: + + window: + id "namebox" + style "bubble_namebox" + + text who: + id "who" + + text what: + id "what" + + default ctc = None + showif ctc: + add ctc + +style bubble_window is empty +style bubble_namebox is empty +style bubble_who is default +style bubble_what is default + +style bubble_window: + xpadding 30 + top_padding 5 + bottom_padding 5 + +style bubble_namebox: + xalign 0.5 + +style bubble_who: + xalign 0.5 + textalign 0.5 + color "#000" + +style bubble_what: + align (0.5, 0.5) + text_align 0.5 + layout "subtitle" + color "#000" + +define bubble.frame = Frame("gui/bubble.png", 55, 55, 55, 95) +define bubble.thoughtframe = Frame("gui/thoughtbubble.png", 55, 55, 55, 55) + +define bubble.properties = { + "bottom_left" : { + "window_background" : Transform(bubble.frame, xzoom=1, yzoom=1), + "window_bottom_padding" : 27, + }, + + "bottom_right" : { + "window_background" : Transform(bubble.frame, xzoom=-1, yzoom=1), + "window_bottom_padding" : 27, + }, + + "top_left" : { + "window_background" : Transform(bubble.frame, xzoom=1, yzoom=-1), + "window_top_padding" : 27, + }, + + "top_right" : { + "window_background" : Transform(bubble.frame, xzoom=-1, yzoom=-1), + "window_top_padding" : 27, + }, + + "thought" : { + "window_background" : bubble.thoughtframe, + } +} + +define bubble.expand_area = { + "bottom_left" : (0, 0, 0, 22), + "bottom_right" : (0, 0, 0, 22), + "top_left" : (0, 22, 0, 0), + "top_right" : (0, 22, 0, 0), + "thought" : (0, 0, 0, 0), +} + + + +################################################################################ +## 移动设备界面 +################################################################################ + +style pref_vbox: + variant "medium" + xsize 675 + +## 由于可能没有鼠标,我们将快捷菜单替换为一个使用更少、更大按钮的版本,这样更容 +## 易触摸。 +screen quick_menu(): + variant "touch" + + zorder 100 + + if quick_menu: + + hbox: + style "quick_menu" + style_prefix "quick" + + textbutton _("回退") action Rollback() + textbutton _("快进") action Skip() alternate Skip(fast=True, confirm=True) + textbutton _("自动") action Preference("auto-forward", "toggle") + textbutton _("菜单") action ShowMenu() + + +style window: + variant "small" + background "gui/phone/textbox.png" + +style radio_button: + variant "small" + foreground "gui/phone/button/radio_[prefix_]foreground.png" + +style check_button: + variant "small" + foreground "gui/phone/button/check_[prefix_]foreground.png" + +style nvl_window: + variant "small" + background "gui/phone/nvl.png" + +style main_menu_frame: + variant "small" + background "gui/phone/overlay/main_menu.png" + +style game_menu_outer_frame: + variant "small" + background "gui/phone/overlay/game_menu.png" + +style game_menu_navigation_frame: + variant "small" + xsize 510 + +style game_menu_content_frame: + variant "small" + top_margin 0 + +style game_menu_viewport: + variant "small" + xsize 1305 + +style pref_vbox: + variant "small" + xsize 600 + +style bar: + variant "small" + ysize gui.bar_size + left_bar Frame("gui/phone/bar/left.png", gui.bar_borders, tile=gui.bar_tile) + right_bar Frame("gui/phone/bar/right.png", gui.bar_borders, tile=gui.bar_tile) + +style vbar: + variant "small" + xsize gui.bar_size + top_bar Frame("gui/phone/bar/top.png", gui.vbar_borders, tile=gui.bar_tile) + bottom_bar Frame("gui/phone/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile) + +style scrollbar: + variant "small" + ysize gui.scrollbar_size + base_bar Frame("gui/phone/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) + thumb Frame("gui/phone/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) + +style vscrollbar: + variant "small" + xsize gui.scrollbar_size + base_bar Frame("gui/phone/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) + thumb Frame("gui/phone/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) + +style slider: + variant "small" + ysize gui.slider_size + base_bar Frame("gui/phone/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile) + thumb "gui/phone/slider/horizontal_[prefix_]thumb.png" + +style vslider: + variant "small" + xsize gui.slider_size + base_bar Frame("gui/phone/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile) + thumb "gui/phone/slider/vertical_[prefix_]thumb.png" + +style slider_vbox: + variant "small" + xsize None + +style slider_slider: + variant "small" + xsize 900 diff --git a/game/script.rpy b/game/script.rpy new file mode 100755 index 0000000..3f4704c --- /dev/null +++ b/game/script.rpy @@ -0,0 +1,124 @@ +# 游戏的脚本可置于此文件中。 + +# 声明此游戏使用的角色。颜色参数可使角色姓名着色。 +define me = Character("任懿涛", color="#71b4e4", what_slow_cps=19, who_outlines=[(1, "#565656", 0, 0)]) +define xingyu = Character("陈星宇", color="#cff3ff", what_slow_cps=19, who_outlines=[(1, "#565656", 0, 0)]) +define lhy = Character("刘泓予", color="#ffc052", what_slow_cps=13, who_outlines=[(1, "#565656", 0, 0)]) +define lzx = Character("李泽瑄", color="#631e2c", what_slow_cps=18, who_outlines=[(1, "#875a5a", 0, 0)]) #631e2c +define xwhy = Character("徐卫浩宇", color="#9dffdb", who_outlines=[(1, "#565656", 0, 0)]) +define xiaowei = Character("林晓薇", color="#f4a7b9", what_slow_cps=22, who_outlines=[(1, "#565656", 0, 0)]) +define xiaowei_w = Character("薇风拂晓", color="#f4a7b9", what_slow_cps=19, who_outlines=[(1, "#565656", 0, 0)]) +define system_ = Character("系统提示", what_slow_cps=50) +define mom = Character("妈妈", color="#000000") +define yutong = Character("苏雨桐", color="#69cae7", what_slow_cps=17, who_outlines=[(1, "#717171", 0, 0)]) +define yh = Character("颜涵", color="#d4b8e0", what_slow_cps=18) +define me_w = Character("逍遥剑客", color="#71b4e4", what_slow_cps=19, who_outlines=[(1, "#565656", 0, 0)]) +define tongxue = Character("同学", color="#b8b8b8", what_slow_cps=20, who_outlines=[(1, "#2a2a2a", 0, 0)]) +define ganshi = Character("宣传部干事", color="#90c090", what_slow_cps=19, who_outlines=[(1, "#404040", 0, 0)]) +# ====== 角色数据字典 ====== + +# 任懿涛 - 指数0-10 +default tao_stats = { + "selfAcceptance": 0, # 自我接纳度 + "humorSense": 0, # 幽默感指数 + "studyStress": 0 # 学业压力值 +} + +# 刘泓予 - 指数0-100 +default lhy_stats = { + "affection": 0, # 好感度 + "trust": 0, # 信任度 + "empathy": 0 # 情绪共鸣度 +} + +# 陈星宇 - 指数0-100 +default xingyu_stats = { + "affection": 0, # 好感度 + "cooperation": 0, # 合作度 + "helpfulness": 0 # 帮助度 +} + +# 林晓薇 - 指数0-100 +default xiaowei_stats = { + "affection": 0, # 好感度 + "synergy": 0, # 游戏默契度 + "interactionFrequency": 0, # 互动频率 + "is_xiaowei_w": False +} + +# 苏雨桐 - 指数0-100 +default yutong_stats = { + "affection": 0, # 好感度 + "attention": 0, # 关注度 + "h_academicSupport": 0, # 学习支持度(hidden) +} + +# 颜涵 - 指数0-100 +default yh_stats = { + "affection": 0, # 好感度 + "understanding": 0, # 理解度 + "support": 0 # 支持度 +} + +# 徐卫浩宇 - 指数0-100 +default xwhy_stats = { + "affection": 0, # 好感度 + "reliance": 0, # 依赖度 + "helpfulness": 0 # 帮助度 +} + +# lzx - 指数0-10 +default lzx_stats = { + "infoOpenness": 0, # 信息开放度 +} + + +# ====== 可选:总字典管理(便于批量操作) ====== +''' +default all_characters = { + "tao": tao_stats, + "lhy": lhy_stats, + "xingyu": xingyu_stats, + "xiaowei": xiaowei_stats, + "xiaowei_w": xiaowei_w_stats +} +''' + +# 定义转换效果 +transform shake_rotate: + linear 0.1 xoffset -10 rotate -2 + linear 0.1 xoffset 10 rotate 2 + linear 0.1 xoffset -10 rotate -2 + linear 0.1 xoffset 10 rotate 2 + linear 0.1 xoffset 0 rotate 0 + +transform c1s2_ryt_pos: + xpos 0.67 + ypos 0.6 + xanchor 0.5 + yanchor 0.5 + +transform c1s4_ryt_pos: + xpos 0.6 + ypos 0.78 + xanchor 0.5 + yanchor 0.5 + +transform slide_right(distance=200, duration=1.0): + ease duration xoffset distance + +transform zoom_to_upper_right: + # 初始状态 + zoom 1.0 xalign 0.5 yalign 0.5 + # 快速放大并向左下偏移(画面看起来往右上移动) + ease 0.3 zoom 1.7 xalign 0.6 yalign 0.2 + + +# 游戏在此开始。 + +label start: + jump Chapter1_Scene1 + # 此处为游戏结尾。 + + return + diff --git a/game/tl/None/common.rpym b/game/tl/None/common.rpym new file mode 100755 index 0000000..2b55ce1 --- /dev/null +++ b/game/tl/None/common.rpym @@ -0,0 +1,1536 @@ + +translate None strings: + + # renpy/common/000statements.rpy:28 + old "Click to play the video." + new "Click to play the video." + + # renpy/common/00accessibility.rpy:28 + old "Self-voicing disabled." + new "机器朗读已禁用。" + + # renpy/common/00accessibility.rpy:29 + old "Clipboard voicing enabled. " + new "剪贴板朗读已启用。" + + # renpy/common/00accessibility.rpy:30 + old "Self-voicing enabled. " + new "机器朗读已启用。" + + # renpy/common/00accessibility.rpy:32 + old "bar" + new "栏" + + # renpy/common/00accessibility.rpy:33 + old "selected" + new "选定" + + # renpy/common/00accessibility.rpy:34 + old "viewport" + new "视口" + + # renpy/common/00accessibility.rpy:35 + old "horizontal scroll" + new "水平滚动" + + # renpy/common/00accessibility.rpy:36 + old "vertical scroll" + new "垂直滚动" + + # renpy/common/00accessibility.rpy:37 + old "activate" + new "激活" + + # renpy/common/00accessibility.rpy:38 + old "deactivate" + new "停用" + + # renpy/common/00accessibility.rpy:39 + old "increase" + new "增加" + + # renpy/common/00accessibility.rpy:40 + old "decrease" + new "减少" + + # renpy/common/00accessibility.rpy:134 + old "Self-Voicing" + new "机器朗读" + + # renpy/common/00accessibility.rpy:137 + old "Self-voicing support is limited when using a touch screen." + new "Self-voicing support is limited when using a touch screen." + + # renpy/common/00accessibility.rpy:139 + old "Off" + new "关闭" + + # renpy/common/00accessibility.rpy:143 + old "Text-to-speech" + new "语音合成" + + # renpy/common/00accessibility.rpy:147 + old "Clipboard" + new "剪贴板" + + # renpy/common/00accessibility.rpy:151 + old "Debug" + new "调试" + + # renpy/common/00accessibility.rpy:155 + old "Voice Volume" + new "语音音量" + + # renpy/common/00accessibility.rpy:163 + old "Reset" + new "重置" + + # renpy/common/00accessibility.rpy:167 + old "Self-Voicing Volume Drop" + new "机器朗读音量降低" + + # renpy/common/00accessibility.rpy:180 + old "Mono Audio" + new "Mono Audio" + + # renpy/common/00accessibility.rpy:182 + old "Enable" + new "启用" + + # renpy/common/00accessibility.rpy:186 + old "Disable" + new "禁用" + + # renpy/common/00accessibility.rpy:198 + old "Font Override" + new "字体覆盖" + + # renpy/common/00accessibility.rpy:200 + old "Default" + new "默认" + + # renpy/common/00accessibility.rpy:204 + old "DejaVu Sans" + new "DejaVu Sans" + + # renpy/common/00accessibility.rpy:208 + old "Opendyslexic" + new "Opendyslexic" + + # renpy/common/00accessibility.rpy:212 + old "High Contrast Text" + new "高对比度文本" + + # renpy/common/00accessibility.rpy:224 + old "Text Size Scaling" + new "字号缩放" + + # renpy/common/00accessibility.rpy:235 + old "Line Spacing Scaling" + new "行距缩放" + + # renpy/common/00accessibility.rpy:246 + old "Kerning" + new "Kerning" + + # renpy/common/00accessibility.rpy:267 + old "Accessibility Menu. Use up and down arrows to navigate, and enter to activate buttons and bars." + new "辅助功能菜单。使用向上和向下箭头进行导航,并使用 Enter 激活按钮和栏" + + # renpy/common/00accessibility.rpy:288 + old "Self-Voicing and Audio" + new "Self-Voicing and Audio" + + # renpy/common/00accessibility.rpy:292 + old "Text" + new "Text" + + # renpy/common/00accessibility.rpy:296 + old "Return" + new "返回" + + # renpy/common/00accessibility.rpy:306 + old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was." + new "此菜单上的选项旨在改善无障碍文本可读性。这些选项可能不适用于所有游戏,某些选项的组合甚至会导致游戏无法游玩。这不是游戏或引擎的问题。为了在更改字体时获得最佳效果,请尽量保持文字大小与原本相同。" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Monday" + new "{#weekday}星期一" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Tuesday" + new "{#weekday}星期二" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Wednesday" + new "{#weekday}星期三" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Thursday" + new "{#weekday}星期四" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Friday" + new "{#weekday}星期五" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Saturday" + new "{#weekday}星期六" + + # renpy/common/00action_file.rpy:26 + old "{#weekday}Sunday" + new "{#weekday}星期日" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Mon" + new "{#weekday_short}周一" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Tue" + new "{#weekday_short}周二" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Wed" + new "{#weekday_short}周三" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Thu" + new "{#weekday_short}周四" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Fri" + new "{#weekday_short}周五" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Sat" + new "{#weekday_short}周六" + + # renpy/common/00action_file.rpy:37 + old "{#weekday_short}Sun" + new "{#weekday_short}周日" + + # renpy/common/00action_file.rpy:47 + old "{#month}January" + new "{#month}1月" + + # renpy/common/00action_file.rpy:47 + old "{#month}February" + new "{#month}2月" + + # renpy/common/00action_file.rpy:47 + old "{#month}March" + new "{#month}3月" + + # renpy/common/00action_file.rpy:47 + old "{#month}April" + new "{#month}4月" + + # renpy/common/00action_file.rpy:47 + old "{#month}May" + new "{#month}5月" + + # renpy/common/00action_file.rpy:47 + old "{#month}June" + new "{#month}6月" + + # renpy/common/00action_file.rpy:47 + old "{#month}July" + new "{#month}7月" + + # renpy/common/00action_file.rpy:47 + old "{#month}August" + new "{#month}8月" + + # renpy/common/00action_file.rpy:47 + old "{#month}September" + new "{#month}9月" + + # renpy/common/00action_file.rpy:47 + old "{#month}October" + new "{#month}10月" + + # renpy/common/00action_file.rpy:47 + old "{#month}November" + new "{#month}11月" + + # renpy/common/00action_file.rpy:47 + old "{#month}December" + new "{#month}12月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Jan" + new "{#month_short}1月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Feb" + new "{#month_short}2月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Mar" + new "{#month_short}3月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Apr" + new "{#month_short}4月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}May" + new "{#month_short}5月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Jun" + new "{#month_short}6月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Jul" + new "{#month_short}7月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Aug" + new "{#month_short}8月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Sep" + new "{#month_short}9月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Oct" + new "{#month_short}10月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Nov" + new "{#month_short}11月" + + # renpy/common/00action_file.rpy:63 + old "{#month_short}Dec" + new "{#month_short}12月" + + # renpy/common/00action_file.rpy:258 + old "%b %d, %H:%M" + new "%m-%d %H:%M" + + # renpy/common/00action_file.rpy:395 + old "Save slot %s: [text]" + new "保存存档 %s:[text]" + + # renpy/common/00action_file.rpy:481 + old "Load slot %s: [text]" + new "读取存档 %s:[text]" + + # renpy/common/00action_file.rpy:534 + old "Delete slot [text]" + new "删除存档 [text]" + + # renpy/common/00action_file.rpy:613 + old "File page auto" + new "自动存档" + + # renpy/common/00action_file.rpy:615 + old "File page quick" + new "快速存档" + + # renpy/common/00action_file.rpy:617 + old "File page [text]" + new "第 [text] 页存档" + + # renpy/common/00action_file.rpy:675 + old "Page {}" + new "第 {} 页" + + # renpy/common/00action_file.rpy:675 + old "Automatic saves" + new "自动存档" + + # renpy/common/00action_file.rpy:675 + old "Quick saves" + new "快速存档" + + # renpy/common/00action_file.rpy:816 + old "Next file page." + new "下一页存档。" + + # renpy/common/00action_file.rpy:888 + old "Previous file page." + new "上一页存档。" + + # renpy/common/00action_file.rpy:949 + old "Quick save complete." + new "快速保存完成。" + + # renpy/common/00action_file.rpy:964 + old "Quick save." + new "快速保存。" + + # renpy/common/00action_file.rpy:983 + old "Quick load." + new "快速读取。" + + # renpy/common/00action_other.rpy:416 + old "Language [text]" + new "语言 [text]" + + # renpy/common/00action_other.rpy:786 + old "Open [text] directory." + new "打开 [text] 目录。" + + # renpy/common/00director.rpy:712 + old "The interactive director is not enabled here." + new "交互式编导器未能在此处启动。" + + # renpy/common/00director.rpy:1512 + old "⬆" + new "⬆" + + # renpy/common/00director.rpy:1518 + old "⬇" + new "⬇" + + # renpy/common/00director.rpy:1582 + old "Done" + new "完成" + + # renpy/common/00director.rpy:1592 + old "(statement)" + new "(语句)" + + # renpy/common/00director.rpy:1593 + old "(tag)" + new "(标签)" + + # renpy/common/00director.rpy:1594 + old "(attributes)" + new "(属性)" + + # renpy/common/00director.rpy:1595 + old "(transform)" + new "(变换)" + + # renpy/common/00director.rpy:1620 + old "(transition)" + new "(转场)" + + # renpy/common/00director.rpy:1632 + old "(channel)" + new "(轨道)" + + # renpy/common/00director.rpy:1633 + old "(filename)" + new "(文件名)" + + # renpy/common/00director.rpy:1662 + old "Change" + new "更改" + + # renpy/common/00director.rpy:1664 + old "Add" + new "添加" + + # renpy/common/00director.rpy:1667 + old "Cancel" + new "取消" + + # renpy/common/00director.rpy:1670 + old "Remove" + new "移除" + + # renpy/common/00director.rpy:1705 + old "Statement:" + new "语句:" + + # renpy/common/00director.rpy:1726 + old "Tag:" + new "标签:" + + # renpy/common/00director.rpy:1742 + old "Attributes:" + new "属性:" + + # renpy/common/00director.rpy:1753 + old "Click to toggle attribute, right click to toggle negative attribute." + new "点击切换属性,右键点击切换反面属性。" + + # renpy/common/00director.rpy:1765 + old "Transforms:" + new "变换:" + + # renpy/common/00director.rpy:1776 + old "Click to set transform, right click to add to transform list." + new "点击设置变换,右键点击添加到变换列表。" + + # renpy/common/00director.rpy:1777 + old "Customize director.transforms to add more transforms." + new "自定义 director.transforms 以添加更多变换" + + # renpy/common/00director.rpy:1789 + old "Behind:" + new "置后于:" + + # renpy/common/00director.rpy:1800 + old "Click to set, right click to add to behind list." + new "点击设置,右键点击添加到置后(behind)列表。" + + # renpy/common/00director.rpy:1812 + old "Transition:" + new "转场:" + + # renpy/common/00director.rpy:1822 + old "Click to set." + new "点击设置" + + # renpy/common/00director.rpy:1823 + old "Customize director.transitions to add more transitions." + new "自定义 director.transitions 以添加更多过渡。" + + # renpy/common/00director.rpy:1835 + old "Channel:" + new "轨道:" + + # renpy/common/00director.rpy:1846 + old "Customize director.audio_channels to add more channels." + new "自定义 director.audio_channels 以添加更多音频频道。" + + # renpy/common/00director.rpy:1858 + old "Audio Filename:" + new "音频文件:" + + # renpy/common/00gui.rpy:448 + old "Are you sure?" + new "您确定吗?" + + # renpy/common/00gui.rpy:449 + old "Are you sure you want to delete this save?" + new "您确定要删除此存档吗?" + + # renpy/common/00gui.rpy:450 + old "Are you sure you want to overwrite your save?" + new "您确定要覆盖此存档吗?" + + # renpy/common/00gui.rpy:451 + old "Loading will lose unsaved progress.\nAre you sure you want to do this?" + new "读取存档将会使未保存的进度丢失。\n您确定要继续吗?" + + # renpy/common/00gui.rpy:452 + old "Are you sure you want to quit?" + new "您确定要退出吗?" + + # renpy/common/00gui.rpy:453 + old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress." + new "您确定要返回到标题界面吗?\n此操作将会使未保存的进度丢失。" + + # renpy/common/00gui.rpy:454 + old "Are you sure you want to continue where you left off?" + new "您确定要从上次中断的地方继续吗?" + + # renpy/common/00gui.rpy:455 + old "Are you sure you want to end the replay?" + new "您确定要结束回想吗?" + + # renpy/common/00gui.rpy:456 + old "Are you sure you want to begin skipping?" + new "您确定要开始快进吗?" + + # renpy/common/00gui.rpy:457 + old "Are you sure you want to skip to the next choice?" + new "您确定要直接快进到下个选项吗?" + + # renpy/common/00gui.rpy:458 + old "Are you sure you want to skip unseen dialogue to the next choice?" + new "您确定要跳过未读对话,直接快进到下个选项吗?" + + # renpy/common/00gui.rpy:459 + old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?" + new "此存档是在其他设备上创建的。恶意构造的存档文件可能会对您的计算机造成损害。您是否信任此存档的创建者以及所有可能更改过该文件的人?" + + # renpy/common/00gui.rpy:460 + old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user." + new "您是否信任创建此存档的设备?只有当您是设备的唯一用户时,才应选择是。" + + # renpy/common/00keymap.rpy:325 + old "Failed to save screenshot as %s." + new "截图保存到以下位置时失败:%s" + + # renpy/common/00keymap.rpy:346 + old "Saved screenshot as %s." + new "截图已保存到以下位置:%s" + + # renpy/common/00library.rpy:257 + old "Skip Mode" + new "快进" + + # renpy/common/00library.rpy:344 + old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}." + new "本程序包含了由数个许可证授权的自由软件,包括 MIT 许可证和 GNU 宽松通用公共许可证。完整软件列表及源代码链接,请{a=https://www.renpy.org/l/license}访问此处{/a}。" + + # renpy/common/00preferences.rpy:295 + old "display" + new "显示" + + # renpy/common/00preferences.rpy:315 + old "transitions" + new "过渡" + + # renpy/common/00preferences.rpy:324 + old "skip transitions" + new "跳过过渡" + + # renpy/common/00preferences.rpy:326 + old "video sprites" + new "视频精灵" + + # renpy/common/00preferences.rpy:335 + old "show empty window" + new "显示空窗口" + + # renpy/common/00preferences.rpy:344 + old "text speed" + new "文本速度" + + # renpy/common/00preferences.rpy:352 + old "joystick" + new "手柄" + + # renpy/common/00preferences.rpy:352 + old "joystick..." + new "手柄..." + + # renpy/common/00preferences.rpy:359 + old "skip" + new "跳过" + + # renpy/common/00preferences.rpy:362 + old "skip unseen [text]" + new "跳过没见过的 [text]" + + # renpy/common/00preferences.rpy:367 + old "skip unseen text" + new "跳过没见过的文本" + + # renpy/common/00preferences.rpy:369 + old "begin skipping" + new "开头快进" + + # renpy/common/00preferences.rpy:373 + old "after choices" + new "选项后" + + # renpy/common/00preferences.rpy:380 + old "skip after choices" + new "选项后快进" + + # renpy/common/00preferences.rpy:382 + old "auto-forward time" + new "自动推进时间" + + # renpy/common/00preferences.rpy:396 + old "auto-forward" + new "自动推进" + + # renpy/common/00preferences.rpy:403 + old "Auto forward" + new "自动推进" + + # renpy/common/00preferences.rpy:406 + old "auto-forward after click" + new "单击后自动推进" + + # renpy/common/00preferences.rpy:415 + old "automatic move" + new "自动移动" + + # renpy/common/00preferences.rpy:424 + old "wait for voice" + new "等待朗读" + + # renpy/common/00preferences.rpy:433 + old "voice sustain" + new "维持朗读" + + # renpy/common/00preferences.rpy:442 + old "self voicing" + new "机器朗读" + + # renpy/common/00preferences.rpy:445 + old "self voicing enable" + new "机器朗读已启用" + + # renpy/common/00preferences.rpy:447 + old "self voicing disable" + new "机器朗读已禁用" + + # renpy/common/00preferences.rpy:451 + old "self voicing volume drop" + new "机器朗读音量减小" + + # renpy/common/00preferences.rpy:459 + old "clipboard voicing" + new "剪贴板朗读" + + # renpy/common/00preferences.rpy:462 + old "clipboard voicing enable" + new "剪贴板朗读已启用" + + # renpy/common/00preferences.rpy:464 + old "clipboard voicing disable" + new "剪贴板朗读已禁用" + + # renpy/common/00preferences.rpy:468 + old "debug voicing" + new "调试朗读" + + # renpy/common/00preferences.rpy:471 + old "debug voicing enable" + new "调试朗读已启用" + + # renpy/common/00preferences.rpy:473 + old "debug voicing disable" + new "调试朗读已禁用" + + # renpy/common/00preferences.rpy:477 + old "emphasize audio" + new "强调音频" + + # renpy/common/00preferences.rpy:486 + old "rollback side" + new "回滚侧" + + # renpy/common/00preferences.rpy:496 + old "gl powersave" + new "gl 省电" + + # renpy/common/00preferences.rpy:502 + old "gl framerate" + new "gl 帧率" + + # renpy/common/00preferences.rpy:505 + old "gl tearing" + new "gl 撕裂" + + # renpy/common/00preferences.rpy:508 + old "font transform" + new "字体变换" + + # renpy/common/00preferences.rpy:511 + old "font size" + new "字体大小" + + # renpy/common/00preferences.rpy:519 + old "font line spacing" + new "字体间距" + + # renpy/common/00preferences.rpy:527 + old "system cursor" + new "系统光标" + + # renpy/common/00preferences.rpy:536 + old "renderer menu" + new "渲染器菜单" + + # renpy/common/00preferences.rpy:539 + old "accessibility menu" + new "辅助功能菜单" + + # renpy/common/00preferences.rpy:542 + old "high contrast text" + new "高对比度文本" + + # renpy/common/00preferences.rpy:551 + old "audio when minimized" + new "最小化时的音频" + + # renpy/common/00preferences.rpy:560 + old "audio when unfocused" + new "未聚焦时的音频" + + # renpy/common/00preferences.rpy:569 + old "web cache preload" + new "网络缓存预加载" + + # renpy/common/00preferences.rpy:584 + old "voice after game menu" + new "游戏菜单后语音" + + # renpy/common/00preferences.rpy:593 + old "restore window position" + new "恢复窗口位置" + + # renpy/common/00preferences.rpy:602 + old "mono audio" + new "mono audio" + + # renpy/common/00preferences.rpy:611 + old "font kerning" + new "font kerning" + + # renpy/common/00preferences.rpy:619 + old "reset" + new "重置" + + # renpy/common/00preferences.rpy:632 + old "main volume" + new "主要音量" + + # renpy/common/00preferences.rpy:633 + old "music volume" + new "音乐音量" + + # renpy/common/00preferences.rpy:634 + old "sound volume" + new "声音音量" + + # renpy/common/00preferences.rpy:635 + old "voice volume" + new "语音音量" + + # renpy/common/00preferences.rpy:636 + old "mute main" + new "静音主要" + + # renpy/common/00preferences.rpy:637 + old "mute music" + new "静音音乐" + + # renpy/common/00preferences.rpy:638 + old "mute sound" + new "静音声音" + + # renpy/common/00preferences.rpy:639 + old "mute voice" + new "静音语音" + + # renpy/common/00preferences.rpy:640 + old "mute all" + new "静音全部" + + # renpy/common/00preferences.rpy:723 + old "Clipboard voicing enabled. Press 'shift+C' to disable." + new "剪贴板朗读已启用。按 Shift+C 来禁用。" + + # renpy/common/00preferences.rpy:725 + old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable." + new "机器朗读会朗读“[renpy.display.tts.last]”。按 Alt+Shift+V 来禁用。" + + # renpy/common/00preferences.rpy:727 + old "Self-voicing enabled. Press 'v' to disable." + new "机器朗读已启用。按 V 来禁用。" + + # renpy/common/00speechbubble.rpy:420 + old "Speech Bubble Editor" + new "对话气泡编辑器" + + # renpy/common/00speechbubble.rpy:425 + old "(hide)" + new "(隐藏)" + + # renpy/common/00speechbubble.rpy:436 + old "(clear retained bubbles)" + new "(清除保留的气泡)" + + # renpy/common/00sync.rpy:70 + old "Sync downloaded." + new "同步下载完成。" + + # renpy/common/00sync.rpy:184 + old "Could not connect to the Ren'Py Sync server." + new "无法连接到 Ren'Py 同步服务器。" + + # renpy/common/00sync.rpy:186 + old "The Ren'Py Sync server timed out." + new "Ren'Py 同步服务器已超时。" + + # renpy/common/00sync.rpy:188 + old "An unknown error occurred while connecting to the Ren'Py Sync server." + new "在连接到 Ren'Py 同步服务器时发生了未知错误。" + + # renpy/common/00sync.rpy:204 + old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out." + new "Ren'Py 同步服务器没有该同步副本。同步 ID 可能无效,或者可能已经超时。" + + # renpy/common/00sync.rpy:305 + old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself." + new "请输入您生成的同步 ID。\n切勿输入并非由您创建的同步 ID。" + + # renpy/common/00sync.rpy:324 + old "The sync ID is not in the correct format." + new "同步 ID 的格式不正确。" + + # renpy/common/00sync.rpy:344 + old "The sync could not be decrypted." + new "无法解密该同步。" + + # renpy/common/00sync.rpy:367 + old "The sync belongs to a different game." + new "该同步属于另一款游戏。" + + # renpy/common/00sync.rpy:372 + old "The sync contains a file with an invalid name." + new "该同步包含一个文件,其文件名无效。" + + # renpy/common/00sync.rpy:425 + old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?" + new "此操作将把您的存档上传到 {a=https://sync.renpy.org}Ren'Py 同步服务器{/a} 。\n您想要继续吗?" + + # renpy/common/00sync.rpy:433 + old "Yes" + new "确定" + + # renpy/common/00sync.rpy:434 + old "No" + new "取消" + + # renpy/common/00sync.rpy:457 + old "Enter Sync ID" + new "输入同步 ID" + + # renpy/common/00sync.rpy:468 + old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}." + new "此操作将联系 {a=https://sync.renpy.org}Ren'Py 同步服务器{/a}。" + + # renpy/common/00sync.rpy:498 + old "Sync Success" + new "同步成功" + + # renpy/common/00sync.rpy:501 + old "The Sync ID is:" + new "同步 ID 是:" + + # renpy/common/00sync.rpy:507 + old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}." + new "你可以使用此 ID 在另一设备上下载您的存档。\n此同步将在一小时后失效。\nRen'Py 同步由{a=https://www.renpy.org/sponsors.html}Ren'Py 赞助者{/a}赞助。" + + # renpy/common/00sync.rpy:511 + old "Continue" + new "继续" + + # renpy/common/00sync.rpy:536 + old "Sync Error" + new "同步错误" + + # renpy/common/00translation.rpy:63 + old "Translation identifier: [identifier]" + new "Translation identifier: [identifier]" + + # renpy/common/00translation.rpy:84 + old " translates [tl.filename]:[tl.linenumber]" + new " translates [tl.filename]:[tl.linenumber]" + + # renpy/common/00translation.rpy:101 + old "\n{color=#fff}Copied to clipboard.{/color}" + new "\n{color=#fff} 已复制到剪贴板。 {/color}" + + # renpy/common/00iap.rpy:231 + old "Contacting App Store\nPlease Wait..." + new "正在连接 App Store\n请稍后……" + + # renpy/common/00updater.rpy:415 + old "No update methods found." + new "未找到更新方法" + + # renpy/common/00updater.rpy:462 + old "Could not download file list: " + new "无法下载文件列表:" + + # renpy/common/00updater.rpy:465 + old "File list digest does not match." + new "文件列表摘要不匹配" + + # renpy/common/00updater.rpy:675 + old "An error is being simulated." + new "正在模拟一个错误。" + + # renpy/common/00updater.rpy:863 + old "Either this project does not support updating, or the update status file was deleted." + new "此项目不支持更新,或者是更新状态文件已被删除。" + + # renpy/common/00updater.rpy:877 + old "This account does not have permission to perform an update." + new "此帐号没有执行更新的权限。" + + # renpy/common/00updater.rpy:880 + old "This account does not have permission to write the update log." + new "此帐号没有写入更新日志的权限。" + + # renpy/common/00updater.rpy:966 + old "Could not verify update signature." + new "无法验证更新签名。" + + # renpy/common/00updater.rpy:1289 + old "The update file was not downloaded." + new "更新文件未能下载。" + + # renpy/common/00updater.rpy:1307 + old "The update file does not have the correct digest - it may have been corrupted." + new "更新文件校验失败。文件可能已损坏。" + + # renpy/common/00updater.rpy:1457 + old "While unpacking {}, unknown type {}." + new "解压 {} 时出现错误,文件类型 {} 无法解压。" + + # renpy/common/00updater.rpy:1928 + old "Updater" + new "更新程序" + + # renpy/common/00updater.rpy:1935 + old "An error has occurred:" + new "发生错误:" + + # renpy/common/00updater.rpy:1937 + old "Checking for updates." + new "正在检查更新。" + + # renpy/common/00updater.rpy:1939 + old "This program is up to date." + new "此程序已是最新版本。" + + # renpy/common/00updater.rpy:1941 + old "[u.version] is available. Do you want to install it?" + new "[u.version] 现已可用。您希望现在安装吗?" + + # renpy/common/00updater.rpy:1943 + old "Preparing to download the updates." + new "正在准备下载更新。" + + # renpy/common/00updater.rpy:1945 + old "Downloading the updates." + new "正在下载更新。" + + # renpy/common/00updater.rpy:1947 + old "Unpacking the updates." + new "正在解压更新。" + + # renpy/common/00updater.rpy:1949 + old "Finishing up." + new "完成。" + + # renpy/common/00updater.rpy:1951 + old "The updates have been installed. The program will restart." + new "此更新已安装。程序将重新启动。" + + # renpy/common/00updater.rpy:1953 + old "The updates have been installed." + new "更新已安装。" + + # renpy/common/00updater.rpy:1955 + old "The updates were cancelled." + new "更新已取消。" + + # renpy/common/00updater.rpy:1970 + old "Proceed" + new "继续" + + # renpy/common/00updater.rpy:1986 + old "Preparing to download the game data." + new "准备下载游戏数据" + + # renpy/common/00updater.rpy:1988 + old "Downloading the game data." + new "下载游戏数据" + + # renpy/common/00updater.rpy:1990 + old "The game data has been downloaded." + new "游戏数据已下载" + + # renpy/common/00updater.rpy:1992 + old "An error occurred when trying to download game data:" + new "尝试下载游戏数据时发生错误:" + + # renpy/common/00updater.rpy:1997 + old "This game cannot be run until the game data has been downloaded." + new "在游戏数据下载完毕之前,该游戏无法运行" + + # renpy/common/00updater.rpy:2004 + old "Retry" + new "重试" + + # renpy/common/00compat.rpy:467 + old "Fullscreen" + new "全屏" + + # renpy/common/00gallery.rpy:676 + old "Image [index] of [count] locked." + new "图片 [count] / [index] 尚未解锁。" + + # renpy/common/00gallery.rpy:696 + old "prev" + new "上一页" + + # renpy/common/00gallery.rpy:697 + old "next" + new "下一页" + + # renpy/common/00gallery.rpy:698 + old "slideshow" + new "幻灯片" + + # renpy/common/00gallery.rpy:699 + old "return" + new "返回" + + # renpy/common/00gltest.rpy:89 + old "Renderer" + new "渲染器" + + # renpy/common/00gltest.rpy:91 + old "Automatically Choose" + new "自动选择" + + # renpy/common/00gltest.rpy:96 + old "Force GL2 Renderer" + new "强制使用 GL2 渲染器" + + # renpy/common/00gltest.rpy:101 + old "Force ANGLE2 Renderer" + new "强制使用 ANGLE2 渲染器" + + # renpy/common/00gltest.rpy:106 + old "Force GLES2 Renderer" + new "强制使用 GLES2 渲染器" + + # renpy/common/00gltest.rpy:110 + old "Gamepad" + new "手柄" + + # renpy/common/00gltest.rpy:112 + old "Enable (No Blocklist)" + new "启用(无阻止项)" + + # renpy/common/00gltest.rpy:126 + old "Calibrate" + new "校准" + + # renpy/common/00gltest.rpy:135 + old "Powersave" + new "省电模式" + + # renpy/common/00gltest.rpy:145 + old "Framerate" + new "帧率" + + # renpy/common/00gltest.rpy:147 + old "Screen" + new "基于显示器" + + # renpy/common/00gltest.rpy:151 + old "60" + new "60" + + # renpy/common/00gltest.rpy:155 + old "30" + new "30" + + # renpy/common/00gltest.rpy:159 + old "Tearing" + new "允许画面撕裂" + + # renpy/common/00gltest.rpy:171 + old "Changes will take effect the next time this program is run." + new "更改将在下次运行该程序时生效。" + + # renpy/common/00gltest.rpy:178 + old "Quit" + new "退出" + + # renpy/common/00gltest.rpy:207 + old "Performance Warning" + new "性能警告" + + # renpy/common/00gltest.rpy:212 + old "This computer is using software rendering." + new "此计算机正在使用软件渲染。" + + # renpy/common/00gltest.rpy:214 + old "This game requires use of GL2 that can't be initialised." + new "此游戏需要使用 GL2 渲染器,但其无法初始化。" + + # renpy/common/00gltest.rpy:216 + old "This computer has a problem displaying graphics: [problem]." + new "此计算机显示图形时遇到问题:[problem]" + + # renpy/common/00gltest.rpy:220 + old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display." + new "图形驱动程序可能已过期或未能正确运行。这会导致图形显示缓慢或者错误。" + + # renpy/common/00gltest.rpy:224 + old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer." + new "{a=edit:1:log.txt}log.txt{/a} 文件可能包含一些信息,这些信息可以帮助确定您的计算机出了什么问题。" + + # renpy/common/00gltest.rpy:229 + old "More details on how to fix this can be found in the {a=[url]}documentation{/a}." + new "关于如何解决该问题的更多详情可以在{a=[url]}文档{/a}中找到。" + + # renpy/common/00gltest.rpy:234 + old "Continue, Show this warning again" + new "继续,下次仍然显示该警告" + + # renpy/common/00gltest.rpy:238 + old "Continue, Don't show warning again" + new "继续,不再显示该警告" + + # renpy/common/00gltest.rpy:246 + old "Change render options" + new "更改渲染选项" + + # renpy/common/00gamepad.rpy:33 + old "Select Gamepad to Calibrate" + new "选择要校准的手柄" + + # renpy/common/00gamepad.rpy:36 + old "No Gamepads Available" + new "无可用手柄" + + # renpy/common/00gamepad.rpy:56 + old "Calibrating [name] ([i]/[total])" + new "正在校准 [name]([i]/[total])" + + # renpy/common/00gamepad.rpy:60 + old "Press or move the '[control!s]' [kind]." + new "按下或移动 '[control!s]' [kind]。" + + # renpy/common/00gamepad.rpy:70 + old "Skip (A)" + new "跳过(A)" + + # renpy/common/00gamepad.rpy:73 + old "Back (B)" + new "返回(B)" + + # renpy/common/_errorhandling.rpym:758 + old "Open" + new "打开" + + # renpy/common/_errorhandling.rpym:760 + old "Opens the traceback.txt file in a text editor." + new "在文本编辑器中打开追溯报告(traceback.txt)。" + + # renpy/common/_errorhandling.rpym:762 + old "Copy BBCode" + new "复制 BBCode" + + # renpy/common/_errorhandling.rpym:764 + old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/." + new "复制追溯报告(traceback.txt)的内容到剪贴板并转换为 BBcode 以供诸如 https://lemmasoft.renai.us/ 等论坛使用。" + + # renpy/common/_errorhandling.rpym:766 + old "Copy Markdown" + new "复制 Markdown" + + # renpy/common/_errorhandling.rpym:768 + old "Copies the traceback.txt file to the clipboard as Markdown for Discord." + new "复制追溯报告(traceback.txt)的内容到剪贴板并转换为 Markdown 以供 Discord 使用。" + + # renpy/common/_errorhandling.rpym:800 + old "An exception has occurred." + new "发生异常。" + + # renpy/common/_errorhandling.rpym:829 + old "Rollback" + new "回滚" + + # renpy/common/_errorhandling.rpym:831 + old "Attempts a roll back to a prior time, allowing you to save or choose a different choice." + new "尝试回滚到先前的状态,使您可以存档或者选择不同选项。" + + # renpy/common/_errorhandling.rpym:834 + old "Ignore" + new "忽略" + + # renpy/common/_errorhandling.rpym:838 + old "Ignores the exception, allowing you to continue." + new "忽略异常,让您可以继续。" + + # renpy/common/_errorhandling.rpym:840 + old "Ignores the exception, allowing you to continue. This often leads to additional errors." + new "忽略异常,让您可以继续。但这通常会引起更多错误。" + + # renpy/common/_errorhandling.rpym:844 + old "Reload" + new "重新加载" + + # renpy/common/_errorhandling.rpym:846 + old "Reloads the game from disk, saving and restoring game state if possible." + new "从硬盘重新加载游戏,尝试保存和恢复游戏状态。" + + # renpy/common/_errorhandling.rpym:849 + old "Console" + new "控制台" + + # renpy/common/_errorhandling.rpym:851 + old "Opens a console to allow debugging the problem." + new "打开控制台,允许您对问题进行调试。" + + # renpy/common/_errorhandling.rpym:864 + old "Quits the game." + new "退出游戏。" + + # renpy/common/_errorhandling.rpym:886 + old "Parsing the script failed." + new "解析脚本失败。" + + # renpy/common/_developer/developer.rpym:39 + old "Developer Menu" + new "开发者菜单" + + # renpy/common/_developer/developer.rpym:44 + old "Interactive Director (D)" + new "交互式编导器 (D)" + + # renpy/common/_developer/developer.rpym:46 + old "Reload Game (Shift+R)" + new "重新加载游戏 (Shift+R)" + + # renpy/common/_developer/developer.rpym:48 + old "Console (Shift+O)" + new "控制台 (Shift+O)" + + # renpy/common/_developer/developer.rpym:50 + old "Variable Viewer" + new "变量查看器" + + # renpy/common/_developer/developer.rpym:52 + old "Persistent Viewer" + new "持久化数据查看器" + + # renpy/common/_developer/developer.rpym:54 + old "Image Location Picker" + new "图像坐标选取器" + + # renpy/common/_developer/developer.rpym:56 + old "Filename List" + new "文件列表" + + # renpy/common/_developer/developer.rpym:60 + old "Show Image Load Log (F4)" + new "显示图像加载日志 (F4)" + + # renpy/common/_developer/developer.rpym:63 + old "Hide Image Load Log (F4)" + new "隐藏图像加载日志 (F4)" + + # renpy/common/_developer/developer.rpym:66 + old "Image Attributes" + new "图像属性" + + # renpy/common/_developer/developer.rpym:70 + old "Show Translation Info" + new "Show Translation Info" + + # renpy/common/_developer/developer.rpym:73 + old "Hide Translation Info" + new "Hide Translation Info" + + # renpy/common/_developer/developer.rpym:78 + old "Speech Bubble Editor (Shift+B)" + new "对话气泡编辑器(Shift+B)" + + # renpy/common/_developer/developer.rpym:82 + old "Show Filename and Line" + new "显示文件名和行" + + # renpy/common/_developer/developer.rpym:85 + old "Hide Filename and Line" + new "隐藏文件名和行" + + # renpy/common/_developer/developer.rpym:141 + old "Layer [l]:" + new "层 [l] :" + + # renpy/common/_developer/developer.rpym:144 + old " (transforms: [', '.join(transform_list)])" + new " (transforms: [', '.join(transform_list)])" + + # renpy/common/_developer/developer.rpym:148 + old " [name!q] [attributes!q] (hidden)" + new " [name!q] [attributes!q] (hidden)" + + # renpy/common/_developer/developer.rpym:152 + old " [name!q] [attributes!q]" + new " [name!q] [attributes!q]" + + # renpy/common/_developer/developer.rpym:205 + old "Nothing to inspect." + new "没有可查验的对象。" + + # renpy/common/_developer/developer.rpym:216 + old "Hide deleted" + new "隐藏已删除项" + + # renpy/common/_developer/developer.rpym:216 + old "Show deleted" + new "显示已删除项" + + # renpy/common/_developer/developer.rpym:367 + old "Rectangle copied to clipboard." + new "矩形坐标已复制到剪贴板。" + + # renpy/common/_developer/developer.rpym:370 + old "Position copied to clipboard." + new "鼠标坐标已复制到剪贴板。" + + # renpy/common/_developer/developer.rpym:382 + old "Rectangle: %r" + new "矩形坐标:%r" + + # renpy/common/_developer/developer.rpym:385 + old "Mouse position: %r" + new "鼠标坐标:%r" + + # renpy/common/_developer/developer.rpym:390 + old "Right-click or escape to quit." + new "右键点击或按下 Esc 键来退出。" + + # renpy/common/_developer/developer.rpym:440 + old "Type to filter: " + new "输入关键字筛选:" + + # renpy/common/_developer/developer.rpym:556 + old "Textures: [tex_count] ([tex_size_mb:.1f] MB)" + new "贴图:[tex_count] ([tex_size_mb:.1f] MB)" + + # renpy/common/_developer/developer.rpym:560 + old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)" + new "图像缓存:[cache_pct:.1f]% ([cache_size_mb:.1f] MB)" + + # renpy/common/_developer/developer.rpym:570 + old "✔ " + new "✔ " + + # renpy/common/_developer/developer.rpym:573 + old "✘ " + new "✘ " + + # renpy/common/_developer/developer.rpym:578 + old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}" + new "\n{color=#cfc}✔ 已预载图像(良好){/color}\n{color=#fcc}✘ 未预载图像(糟糕){/color}\n{color=#fff}拖曳来移动位置。{/color}" + + # renpy/common/_developer/developer.rpym:628 + old "Click to open in editor." + new "单击以在编辑器中打开。" + + # renpy/common/_developer/inspector.rpym:39 + old "Displayable Inspector" + new "可视组件查验器" + + # renpy/common/_developer/inspector.rpym:62 + old "Size" + new "大小" + + # renpy/common/_developer/inspector.rpym:66 + old "Style" + new "样式" + + # renpy/common/_developer/inspector.rpym:72 + old "Location" + new "源码位置" + + # renpy/common/_developer/inspector.rpym:124 + old "Inspecting Styles of [displayable_name!q]" + new "正在查验 [displayable_name!q] 的样式" + + # renpy/common/_developer/inspector.rpym:141 + old "displayable:" + new "可视组件:" + + # renpy/common/_developer/inspector.rpym:147 + old " (no properties affect the displayable)" + new " (无任何属性影响可视组件)" + + # renpy/common/_developer/inspector.rpym:149 + old " (default properties omitted)" + new " (已省略默认属性)" + + # renpy/common/_developer/inspector.rpym:187 + old "" + new "" + + # renpy/common/00console.rpy:552 + old "Press to exit console. Type help for help.\n" + new "按 Esc 来退出控制台。输入 help 来查看帮助。\n" + + # renpy/common/00console.rpy:556 + old "Ren'Py script enabled." + new "Ren'Py 脚本已启用。" + + # renpy/common/00console.rpy:558 + old "Ren'Py script disabled." + new "Ren'Py 脚本已禁用。" + + # renpy/common/00console.rpy:741 + old "The console is using short representations. To disable this, type 'long', and to re-enable, type 'short'" + new "The console is using short representations. To disable this, type 'long', and to re-enable, type 'short'" + + # renpy/common/00console.rpy:813 + old "help: show this help\n help : show signature and documentation of " + new "help:显示此帮助信息\n help <表达式>:显示 <表达式> 的签名和文档" + + # renpy/common/00console.rpy:837 + old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n" + new "帮助功能可能会显示未记录文档的函数。请确认您想使用的函数或类是否已经被记录文档。\n\n" + + # renpy/common/00console.rpy:846 + old "commands:\n" + new "命令:\n" + + # renpy/common/00console.rpy:856 + old " : run the statement\n" + new " :运行此语句\n" + + # renpy/common/00console.rpy:858 + old " : run the expression or statement" + new " :运行此表达式或语句" + + # renpy/common/00console.rpy:866 + old "clear: clear the console history" + new "clear:清除控制台历史记录" + + # renpy/common/00console.rpy:870 + old "exit: exit the console" + new "exit:退出控制台" + + # renpy/common/00console.rpy:878 + old "stack: print the return stack" + new "stack:打印返回栈" + + # renpy/common/00console.rpy:900 + old "load : loads the game from slot" + new "load <档位>:读取该档位的存档" + + # renpy/common/00console.rpy:913 + old "save : saves the game in slot" + new "save <档位>:存储存档到该档位" + + # renpy/common/00console.rpy:924 + old "reload: reloads the game, refreshing the scripts" + new "reload:重新加载游戏,并刷新脚本" + + # renpy/common/00console.rpy:932 + old "watch : watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is" + new "watch <表达式>:监视该 python 表达式\n watch short:简短表征所跟踪的表达式(默认)\n watch long:按原样表征所跟踪的表达式" + + # renpy/common/00console.rpy:969 + old "unwatch : stop watching an expression" + new "unwatch <表达式>:停止监视该表达式" + + # renpy/common/00console.rpy:1015 + old "unwatchall: stop watching all expressions" + new "unwatchall:停止监视所有表达式" + + # renpy/common/00console.rpy:1036 + old "jump