钢铁雄心4吧 关注:441,259贴子:8,038,644
  • 14回复贴,共1

11月11日开发日志:性能与模组

取消只看楼主收藏回复

今天是EU4开局第580年,一战结束106年。
吾日三省吾身:我搬这个干嘛,我存档打完了吗,后续DLC都锁国区了怎么买



IP属地:天津1楼2024-11-11 22:04回复
    制作组希望新的优化能保证新DLC下游戏不会更卡,并且表示本质和“忠诚试炼”DLC(TOA)时的改进相近(不是,当初有优化?
    跳过国策现在不会全球tag挨个国策检查,而是只检查可以被跳过的国策(全球这么多特殊tag和可跳过国策,搞这种东西无疑是动了屎山代码,搞不好会搞出一些啼笑皆非的BUG


    IP属地:天津2楼2024-11-11 22:09
    收起回复
      优化了“以力御暴”DLC(AAT)的国际市场和军工组织更新导致的巨量衍生装备对游戏卡顿的影响
      “现在让我们离开性能问题,来看看技术方面的一些新功能:新的模组制作功能。在开发过程中,我们厌倦了增加新提示框的请求,换而去思考如何让内容开发者自己编写提示框。虽然我们无法将Jomini的写法引入HOI4,但我们借鉴了一些灵感,使其可以在GUI和脚本文件中编写更复杂的提示框。”
      新版本加入了一个新的代码“绑定本地化(Bound localization)”,“允许你从脚本中绑定变量到本地化。这样我们无需打开源代码,只需更新脚本文件。”


      IP属地:天津6楼2024-11-11 22:14
      收起回复
        刚才那个代码的效果


        IP属地:天津7楼2024-11-11 22:15
        回复
          这个绑定本地化的代码可以递归——


          IP属地:天津8楼2024-11-11 22:17
          回复
            ——并且被用在了一些奇特的地方
            讲道理,不会做模组我看这些代码头就大,我更在意效果
            水坝增加15%最大工厂数、10%资源和15%建造速度,怎么说?反正国策生成的,还行



            IP属地:天津9楼2024-11-11 22:20
            收起回复
              “这引入了另一个新概念:本地化格式化器(localization formatters)。实际上,它允许你获取一些静态标识符的本地化文本属性(在本例中为“dam”也就是大坝建筑的状态修正)。格式化器的语法为`<formatter>|<token>`,如果有参数,格式化器还可以接受额外参数(如上述示例中的`INDENT`)。使用格式化器的好处在于,它们可以在任何绑定了本地化的地方使用(尽管某些地方可能需要额外的语境,本地化文档会有说明)。
              我们新引入的功能通常只能在源代码允许的特定位置使用,是为眼下的局限性之一。尽管如此,我们仍尽力减少提示框的需求,以提高功能的通用性。例如,现在可以在常用的`custom_effect_tooltip`这一effect、`custom_trigger_tooltip`这一触发,以及一些新加入的地方使用这些格式化器(如建筑数据库)。另外,我们还在GUI文件中加入了对这些功能的支持。
              现在所有的GUItype都支持新增的`bound_tooltip`。如果使用它,就可以绑定本地化文本。更有趣的是 `context_aware_tooltip`,它是一种带语境的绑定本地化,可以根据语境进行本地化。不过,这要求我们在源代码中提供语境,所以大多只能在新的位置支持(我们会尽量在GUI文件中说明其支持情况)。需要注意的是,这是递归的,如果父对象带有语境,本地化会递归应用到所有子对象。
              稍后,我们会深入解析国策树中新增“核心集团”GUI背后的技术。”
              对我来说这番话比高数还难懂


              IP属地:天津10楼2024-11-11 22:21
              收起回复
                动态地名的实现方式改了



                IP属地:天津11楼2024-11-11 22:23
                收起回复
                  国策导航现在可以直接导航到某一条线路上,而不是高亮特定国策。支持模组修改自定义


                  IP属地:天津12楼2024-11-11 22:26
                  收起回复
                    这个似乎比较重量级:国策内嵌窗口
                    这玩意类似于持续性国策窗口,但是GUI都是写在脚本里的。新版德国的“核心圈子”就是用了这个东西(BYD我还以为国策树预览里那个“核心圈子”是蠢驴PS上去的



                    IP属地:天津13楼2024-11-11 22:30
                    回复
                      瑞典人的代码课堂开课了,这部分我没啥好说的,以下都是日志原文:
                      定义一个新的内嵌窗口时,需要实现三个主要组件:内嵌窗口的定义、GUI定义、以及将其添加到需要显示的国策树中。我们从全新的构建块——内嵌窗口定义开始。
                      和HoI4中的大多数组件一样,不同的数据库位于不同的文件夹中。内嵌窗口位于`game/common/focus_inlay_windows/`文件夹中,我们可以如下定义第一个内嵌窗口:

                      这其实是一个可以正常工作的最小化示例,定义了一个ID为`nordic_alliance_inlay_window`的内嵌窗口,并指向名为`nordic_alliance_ui_window`的容器窗口。接下来我们继续添加更多内容,并定义GUI本身。

                      GUI组件本身不算新内容,但我引入了一些新的本地化功能作为示例。由于所有的国策内嵌窗口都以国策树所属国家为语境进行本地化,因此在编写本地化时可以自由使用这些新特性。我们有一个使用语境的`context_aware_text`来获取阵营名称。另一个使用绑定本地化将`NORDIC_COUNCIL_MEMBER`与参数`IN_FACTION`和`COUNTRY`本地化,分别得到`[SWE.NordicCouncilMemberInFaction]`和`[SWE.GetNameWithFlag]`的结果。同时,我还添加了一个`context_aware_tooltip`,悬停在领导人肖像上时会显示领导人名字。
                      接下来可以通过添加以下脚本本地化完成本地化(在`game/common/scripted_localisation`中):


                      IP属地:天津14楼2024-11-11 22:34
                      回复
                        并在loc文件中添加本地化键`NORDIC_COUNCIL_MEMBER`:

                        本地化完成后,我们只需加上国家领袖的肖像。为国策内嵌窗口定义动态图像,可在国策内嵌窗口的定义中完成:

                        名为`scripted_images`的条目包含将在国策内嵌窗口中使用的图像定义列表。在这个例子中,如果瑞典的当前国家领导人为`SWE_per_albin_hansson`,名为`Sweden`的图标将替换为`GFX_portrait_SWE_per_albin_hansson`。如果这个条件不成立,将检查`Sweden`中的下一项,以此类推,直到遇到一个条件为真的条目。示例中的最后一项(`GFX_blank_leader_portrait`)总是为真,因此在没有其他符合条件的情况下将作为默认图像。
                        现在只需做一些收尾工作。首先,我们将内嵌窗口的显示限制为当该国家组建或加入了北欧国家阵营时(即完成了`NORDIC_form_joint_alliance`)。其次,我们将窗口设置为只对拥有该国策树的国家可见(其他玩家无法查看)。


                        IP属地:天津15楼2024-11-11 22:36
                        回复
                          就这样,内嵌窗口的定义已完成。接下来只需将其添加到相关的国策树中:

                          然后cyan非常敬业地在日志里把这些图片全部敲了出来顺带汉化了注释,这里也搬了:
                          (定义窗口)
                          nordic_alliance_inlay_window = {
                          window_name = nordic_alliance_ui_window
                          }
                          ————————————————————
                          (定义GUI)
                          guiTypes = {
                          containerWindowType = {
                          name = nordic_alliance_ui_window
                          orientation = lower_left
                          size = {width = 400 height = 450 }
                          clipping = no # 避免内嵌窗口裁剪问题
                          background = {
                          name = background
                          quadTextureSprite = "GFX_tiled_window_1b_border"
                          alwaystransparent = yes
                          }
                          instantTextBoxType = {
                          name ="faction_name"
                          orientation = upper_left
                          position = { x = 0 y = 20 }
                          font = "hoi_36header"
                          context_aware_text = [Country.GetFactionName]
                          format = center
                          maxWidth = 400
                          }
                          iconType = {
                          name = "sweden_frame"
                          spriteType = "GFX_ascended_advisors_unappointed_frame"
                          orientation = upper_left
                          position = { x=55 y=107 }
                          centerPosition = yes
                          scale = 0.4
                          }
                          iconType = {
                          name = "Sweden"
                          spriteType = GFX_blank_leader_portrait
                          orientation = upper_left
                          position = { x = 40 y = 90}
                          context_aware_tooltip = [SWE.GetLeader]
                          scale = 0.2
                          }
                          instantTextBoxType = {
                          name = "sweden_text"
                          orientation = upper_left
                          position = {x = 100 y = 105 }
                          context_aware_text = {
                          localization_key = NORDIC_COUNCIL_MEMBER
                          IN_FACTION = [SWE.NordicCouncilMemberInFaction]
                          COUNTRY = [SWE.GetNameWithFlag]
                          }
                          }
                          # 以下瑞典条目的复制内容,适用于其他北欧国家。
                          [...]
                          ————————————————
                          (完成本地化)
                          defined_text = {
                          name = NordicCouncilMemberInFaction
                          text = {
                          trigger = {
                          is_in_faction_with = ROOT
                          }
                          localization_key = TRIGGER_FULLFILLED_PREFIX
                          }
                          text = {
                          trigger = {
                          always = yes
                          }
                          localization_key = TRIGGER_UNFULLFILLED_PREFIX
                          }
                          }
                          ————————————————————
                          (添加本地化键)
                          NORDIC_COUNCIL_MEMBER: "$IN_FACTION$ $COUNTRY|Y$已加入"
                          ——————————————————————
                          (定义动态头像)
                          nordic_alliance_inlay_window = {
                          window_name = nordic_alliance_ui_window
                          scripted_images = {
                          Sweden = {
                          GFX_portrait_SWE_per_albin_hansson = {
                          SWE = {
                          has_country_leader = {
                          ruling_only = yes
                          character = SWE_per_albin_hansson
                          }
                          }
                          }
                          GFX_blank_leader_portrait = yes
                          }
                          # 在此插入其他北欧国家的定义
                          [...]
                          ————————————————————
                          (设置窗口只对拥有北欧联合国策树的国家可见)
                          nordic_alliance_inlay_window = {
                          window_name = nordic_alliance_ui_window
                          internal = yes
                          visible = {
                          has_completed_focus = NORDIC_form_joint_alliance
                          }
                          [...]
                          }
                          ——————————————————————
                          (添加窗口到北欧国家国策树界面)
                          focus_tree = {
                          id = sweden_focus
                          [...]
                          inlay_window = {
                          id = nordic_alliance_inlay_window
                          position = { x = 6500 y = 1000 }
                          }
                          [...]
                          }


                          IP属地:天津18楼2024-11-11 22:41
                          回复
                            然后日志就到此结束了见鬼,完全没接触过写模组让我看这些玩意感觉比我当年大一上高数还懵逼
                            我其实更好奇核心圈子之类的机制能怎么被模组作者花样开发
                            明天还有最后一期日志:美工和成就,后天就更新了。不过非常散兵的是似乎除了季票能买以外,DLC锁国区,听说后续DLC也是
                            https://tieba.baidu.com/p/9208850357?pn=1 (奥地利日志)
                            特殊工程日志吧里似乎没有人搬
                            https://tieba.baidu.com/p/9219804744?pid=151072472771&cid=0#151072472771(匈牙利日志)
                            https://tieba.baidu.com/p/9223013721?pid=151081695629&cid=0#151081695629(史实德国日志)
                            https://tieba.baidu.com/p/9230710749?pid=151104852622&cid=0#151104852622(机制合辑)
                            https://tieba.baidu.com/p/9233818907?pid=151114120933&cid=0#151114120933(德国机制)
                            https://tieba.baidu.com/p/9241610099?pid=151138134707&cid=0#151138134707(突袭机制)
                            https://tieba.baidu.com/p/9244931770?pid=151148411397&cid=0#151148411397(比利时日志)
                            https://tieba.baidu.com/p/9252841304?pid=151174417529&cid=0#151174417529(比属刚果日志)
                            https://tieba.baidu.com/p/9254547372?pid=151180111908&cid=0#151180111908 (刚果日志QA)
                            https://tieba.baidu.com/p/9256174144?fid=3636154&pid=151185295931#151185295931 (非历史德国日志)
                            https://tieba.baidu.com/p/9258491370?pid=151193317749&cid=0#151193317749 (非史实德国日志QA)


                            IP属地:天津19楼2024-11-11 22:47
                            收起回复
                              IP属地:天津39楼2024-11-13 17:26
                              回复