dol吧 关注:143,640贴子:836,212
  • 8回复贴,共1

考试/成绩机制科普,兼谈简易源码分析

取消只看楼主收藏回复

大家好,今天看到一个问考试78%通过率怎么还一直失败的贴子,本着助xian人de为wu乐liao的精神我就去翻了一下源码,给出“考试难度每日刷新”的结论,然而在被汉化组内某搞整合包的dalao指出有误之后感觉先前的错误回答已经误导了一部分吧友,故重开一贴科普考试/成绩机制,此外还兼谈以下简单的源码分析
(未完成前请勿插楼)


IP属地:广东1楼2023-08-25 12:55回复
    首先是科目学习进度的获取:
    一堂课共1小时,分3段,每段耗时小于等于20分钟。若在某一段内选择专心听课,则【学科进度】(_lesson_progress)视乎这堂课剩余时间的分钟数增加不同数值:若大于等于20则【+4】,否则【+(剩余分钟数/5并丢弃小数部分)】。特别地,如果你在本堂课的最后一段时间内选择专心听课,则【学科进度额外+1】,以弥补最后一段时间不足20分造成的进度缺失。


    IP属地:广东3楼2023-08-25 13:14
    收起回复
      此后,当一节课的一个阶段结束后,将按照【学科进度】结算对应学科的【技能熟练度】,同时给角色加星。
      这一节的主要内容是根据【学科技能等级】对【学科进度】进行修正,将得到的值增加到对应学科的【技能熟练度】。相同的【学科进度】下,不同【学科技能等级】所能得到的【技能熟练度】增长是不同的。从F、D、C、B~A*分别有2.4,1.2,0.6,0.3的乘数,以体现水平越高越难提升的现实情况。
      同时还有另外两个修正:面部穿戴眼镜类配饰时可以获得1.2的增益,处于暴露状态也可以获得1.2的增益(游戏内多次提到果着学习效率更高)。
      以上修正均为叠乘,得到的数值直接加算到对应学科的【技能熟练度】。


      IP属地:广东4楼2023-08-25 13:22
      收起回复
        每周五学校会进行考试,考试能否通过取决于两个变量——对应学科的【考试难度】,以及【通过率】。
        基础【通过率】等于对应学科的【技能熟练度】。【技能熟练度】可以在“角色/Characteristics”→“学校成绩/School Performance”里查询,为一具体数值,与【技能等级】无关。【通过率】还可能被一些其他因素修正,例如考试时选择专注+5,惠特尼捣乱-5,对应学科老师高好感,作弊成功+10等。
        【考试难度】每周一凌晨0000刷新,为一个1(含)至100(不含)之间的随机整数。
        周五考试结算时,【通过率】大于等于【考试难度】即判定为通过考试。
        【技能熟练度】实时计算,在周五考试之前进行学习得到的【技能熟练度】增长也会应用到当天考试的【通过率】中,因此如果想要提高通过考试的几率,周五当天切勿摸鱼。


        IP属地:广东5楼2023-08-25 13:32
        回复
          此外,若每周周一处在学期内,则所有学科【技能熟练度】自动-7。学科【技能熟练度】的上限为200,下限为-107。
          如果某一学科的【技能熟练度】达到上限200,那么下周周一该学科会自动升级(A*除外:这种自动升级方法无法得到优秀)。
          如果某一学科的【技能熟练度】不大于-100,那么下周周一该学科会自动降级,除非无级可降。
          因此哪怕得了A*也请对学业上点心。


          IP属地:广东6楼2023-08-25 13:39
          回复
            科普部份完毕,接下来是一些简单的源码分析方法与心得分享
            首先,最好不要尝试直接对着html查询。html由sugarcube/twine源码编译而来,直接去查html往往会让你一头雾水。
            这里放一个dol的仓库链接:gitgud点io/Vrelnir/degrees-of-lewdity
            将源码clone到本地,参照文档内的做法配置环境。
            (什么,你不会英语看不懂?多专心听课吧)


            IP属地:广东7楼2023-08-25 13:45
            回复
              clone到本地的是一个(较为)复杂的文件结构,不要紧。用vscode打开仓库文件夹,然后在侧边栏检索,在不额外设置过滤条件的情况下vscode默认搜索全部文件。
              首先是要定位你想要找的地方。dol作为一个面向字符串编程的文字游戏,同一场景中逻辑、操作流程和文本是放在一块的,因此寻找对应场景的文本是第一选择。以考试为例:

              选择低频出现的语句(最好只在这个场景内出现,同时要避开人称代词和动态内容),这里选择“Pass chance”,找到对应代码块:

              P. S. 汉化版源码暂不公开,只能找到英文版源码,因此现阶段代码探究必须使用英语版


              IP属地:广东8楼2023-08-25 13:51
              收起回复
                如上图所示,发现关键变量$exam_chance($为变量名前缀),继续顺藤摸瓜,从众多搜索结果中筛出无关项(看内容和/或文件名),找到与考试通过相关内容:

                至此,已能了解到另一个隐藏变量$_subject + '_exam_difficulty'同在控制考试通过与否,接下来重复上述流程,按图索骥即可。
                此方法要求有一定代码基础,并要对sugarcube/twine语法有一定了解(例如了解widget是一种方法声明关键字,双尖括号代表方法引用等)。


                IP属地:广东9楼2023-08-25 13:55
                收起回复
                  本文到此结束,希望能启发更多人探索游戏机制,至少不要被弄的一头雾水(
                  当然,英语和代码知识是基础,前者尤为重要。推荐大家都去学学英语


                  IP属地:广东10楼2023-08-25 13:57
                  回复