jackhf吧 关注:10,388贴子:35,680

从代码角度分析对游戏的理解+改动经验

只看楼主收藏回复

前几天在调试slave属性时发现修补术只能做一次,回头翻源代码发现作者没写完...
版本(从f95zone) 2.2 original_no_loli
分别是以下几个字段:
slave['beauty']
slave['base_beauty']
slave_rate['beauty']


IP属地:上海来自Android客户端1楼2021-10-10 10:29回复
    (怎么改标题啊,此帖长期更)


    IP属地:上海来自Android客户端3楼2021-10-10 10:33
    回复
      之前的几个字段有能力的吧友可以探寻一下,那
      接下去就开始正题吧
      名词:
      引擎: 运行QSP文件进行游戏的应用程序 -- 失去了引擎,QSP文件本身不具有运行功能
      QSP 文件: 决定了游戏运作的方式, 这个文件将会被送至游戏引擎供其读取, 一般以*.qsp作为后缀
      IDE: 即集成开发环境, 可以编辑QSP文件的代码 -- 在例如像JackHF这种QSP游戏的IDE就是 [QGen.exe]
      代码: "是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。" -- 来自百度百科
      Save(存档): 各位绅士都懂, 在QSP游戏内一般以*.sav后缀名结尾
      (来到这里玩这个游戏的怎么会没有编程基础呢...是吧, 不是吗...QSP官方文档是俄文, 楼主所有编程信息全靠猜...所以不用紧张)
      ----


      IP属地:上海4楼2021-10-10 12:36
      收起回复
        声明:
        此贴吧仅为经验交流, 并非官方文档
        并且一些代码用法暂无官方文档佐证(俄文翻译不便), 有名词解释错误的地方请多指正 [:感谢]
        哒, 来说一下代码结构, 不必理解每句话的意思:
        首先我们进入 '#options' 这个Action, 其中包含了许多我们能在明面上看到的字段(例如这里的Breast Augmentation 按钮选项):
        --这里选用的例子是 '科技区' 的 '医院' 地点
        我们可以看到 $hospital_options[1] 这个字段内存入了多行代码, 是用于显示菜单而设

        (这里的func()的目标是调用 '$menu' Action并对其进行传参, 具体可再翻看 $menu 中怎么写的)
        其中包含多个分支, 绿色下划线为可点击选项, 灰色下划线为不可点击选项
        这里是菜单展示效果:

        游戏的资源量巨大, 因此我们需要一个过程Action去调取资源
        并且合理显示它们, 而不是资源在加载时:

        在'interaction_city' Action这里调取资源字段'hospital_options'转移至 'display_options' 中后, 在下一行将会跳转至( gt 命令) 'shop_general' Action
        请注意, 这里整体转移了一整个hosptial_options数组
        让我们移步至shop_general Action中:
        喜闻乐见, 这是dynamic命令, 这句命令的意义是执行 (已经被迁移至display_options中的) hospital_options所涵的func('$menu', ...)命令组

        这一句对应的效果?

        能看到这里的JH友, 恭喜你! 你已经入门了JackHF的菜单显示框架, 并且理解了数据从资源库走向前台的整个过程~
        我们来做个奇怪的尝试, 把最后那一句话注释掉, 然后f3重新在引擎内*读取修改过后的qsp文件*, 再次进入游戏, 看看进入医院会发生什么
        (千万要保存存档免得翻车了x)

        好耶! 验证了我们对菜单框架的探究
        你会发现在这个情况下游戏没有任何可交互按钮, 你无法从医院出去了


        IP属地:上海5楼2021-10-10 13:55
        回复
          接上之前的:
          注释方法是在行首添加感叹号, 这样你的整行代码都会失效, 但是比删除操作要更具有迂回余地
          也就是将14行改为
          !dynamic $display_options[sp_txt]


          IP属地:上海6楼2021-10-10 14:01
          回复
            在QGen中打开代码时请另存为其它Qsp文档, 方法是:
            --菜单栏Game -> Save As...
            --也可以按下ctrl+W
            ...并且你还要在引擎中手动读取QSP File, 方法是
            --菜单栏File -> Open File
            --也可以直接按下Ctrl+O
            这两种方法执行之前请确保你的存档没有问题
            (谁都不希望可爱的slave们数据损坏...)


            IP属地:上海7楼2021-10-10 14:06
            收起回复
              下一篇大概晚上更, 将会介绍我如何添加slave的美貌(beauty)的修改项
              暂且坐在了医院里, 名为"Cosmetic surgery"
              晚上是指什么...(明天晚上?后天晚上?大后天晚上?大大后天晚上?一个月后?一年后?)
              下面上图啦



              IP属地:上海8楼2021-10-10 14:17
              回复
                8楼是
                "如何添加slave的美貌(beauty)的修改项" 的效果图
                如果看不到8L证明度娘吞了x


                IP属地:上海10楼2021-10-10 14:19
                回复
                  求顶顶呗w~


                  IP属地:上海来自Android客户端11楼2021-10-10 14:27
                  回复
                    虽然看不到,帮顶


                    IP属地:广东来自Android客户端12楼2021-10-10 14:42
                    收起回复
                      我回来辣~继续更新


                      IP属地:上海13楼2021-10-11 23:36
                      收起回复
                        和上一次分析类似, 我们从可见的菜单文字入手:
                        在合适的顺序排列位置上加上我们的选项(Cosmetic Surgery)

                        这一组分支选项的意思是:
                        ---
                        当 星火 大于等于 3000 并且 slave 的初始美貌等级 小于等于 5 并且 康复期等待时长 小于 1 时:
                        显示一个可点击的整容术选项
                        反之
                        显示一个不可点击, 灰色的整容术菜单选项
                        ---
                        让我们复习一下qsp中的func()函数是什么吧~
                        (其实就是运行函数的函数啦, 个人理解)
                        func( 'Action名称', 第一个参数, 第二个参数, 第三个参数, 第四, 第五, 第六, 第七, ...)
                        在这里的Action名称为 '$menu' 就代表运行了名为 $menu 的Action对象 (作为函数运行的)
                        他在这里~~

                        在 $menu Action 对象中我们找到了形如 $args[数字] 的蓝色标记, 这就代表了刚才的...
                        第一个参数 = arg[0]
                        第二个参数 = arg[1]
                        第三个参数 = arg[2]
                        ...
                        (又及: $args是保留字,不要用作自己的程序的自定义变量名称)
                        参阅$main的代码第89行,(日后我将会深度分析)
                        ...你会发现, func( '$menu', 'interaction_city',...)将会遇到一个可交互菜单显示
                        相反, func( '$menu', 'interaction_city',...)将会遇到一个不可交互, 并且是灰色的菜单显示
                        两者的第二,三,四个参数分别代表了: 该选项的小图标, 该选项交互后的情景参数(存储在json中), 该选项的文字
                        json是个什么东西呢? -- 接


                        IP属地:上海14楼2021-10-12 00:28
                        回复
                          json也是一种存储轻量级数据的文件格式, 文件以*.json结尾
                          我们目前正在用到的是menu_item.json这个文件, 地址在 根目录\game\json\ 路径下


                          它包含了大多数在中间过程(例如子菜单和子菜单的子菜单) 需要传递给下一过程的量, 以整数的形式存储
                          我们可以回过去看到修补手术显示菜单的代码:
                          ---
                          func('$menu', 'interaction_city', $menu_item_SNeoplasty, menu_SNeoplasty, 'Neoplasty (250$)')
                          ---
                          (在 # options Action 中)
                          查阅json文件, 第三个参数 menu_SNeoplasty的是 3324
                          这一行指令就是对应了下一张图片中的判断, 数值居然也是3324

                          这样就完成了从 "显示菜单选项" 到 "响应交互" 的衔接
                          下面传上我的代码改动吧~ 相信小伙伴们能在不用了解句子基层原理的情况下轻松看懂代码运行逻辑

                          最后运行是不是出了点问题? 黑屏了
                          没错! ( 上机操作的吧友直接骂人了 )因为 在$yes 选项中的 $interaction_type 传参往interaction_screen_city也有需要改动的地方, 毫无疑问, 这是一个中间形态Action
                          不过上机操作的吧友还是有福利的, 因为
                          使用 "msg" 操作指令可以打印一些文字出来
                          例如
                          if interaction_city = xxxx :
                          msg "Hello world!"
                          end
                          那祝各位吧友调试愉快~武运昌隆
                          ---大概星期五之前再更几次吧, 今日太累了


                          IP属地:上海15楼2021-10-12 00:59
                          收起回复
                            补图


                            IP属地:上海16楼2021-10-12 01:01
                            回复
                              给资源被封了一天....已深刻反省
                              先在这里注明一下: 本吧杜绝一切资源贴
                              接下去会陆续更新~


                              IP属地:上海来自Android客户端17楼2021-10-14 09:51
                              回复