silksong-coop-mod 0.4.110 → 0.4.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/INSTALL.txt CHANGED
@@ -3436,7 +3436,136 @@ npm 的包会自动备份;N 网的包请按上面 A 的第 1 步自己备份
3436
3436
  · 这条【没有实机测过】。
3437
3437
  · 两个人都装 0.4.110 才有这个改动。
3438
3438
 
3439
- ※ 以上二百二十条【没有实机验证过】。
3439
+ * 【小怪被你打中以后,你这边看起来被击退得比原版远很多】(0.4.111)
3440
+ - 现象:10 月 18 日你说,有些来回走的小怪(比如小蚂蚁)被你打中以后,你这边看起来被击退了很远,原版的
3441
+ 击退其实没有那么远。日志没有留下。
3442
+ - 原因:你打中怪的时候,你这边先自己把击退演完,不然要等她那边回消息,怪会先往你身上撞一下。之后要等她
3443
+ 那边也做完这次击退、发回消息,一般零点几秒。以前等的这段时间里,你这边的怪站着不动,她发来的位置先压着
3444
+ 不用。可是怪被击退的时候并不会停下脚步,在她那边一直在走。消息一回来,你这边的怪一下子滑到她那边的位置:
3445
+ 怪本来就在往远离你的方向走的话,看起来就像被打飞了很远;往你这边走的话,又会被拉回来一截。滑的速度是按
3446
+ 等之前和等之后的两个位置算的,里面有整个击退,所以停下之前还会再往前冲一点。
3447
+ - 现在:等的这段时间里,压着的位置照样拿来用。她那边发位置的时候顺带说一句“你的击退在我这边已经把怪推了
3448
+ 多远”,你这边从位置里减掉这一段,剩下的就是怪自己走的路,你这边的怪接着走这段路。消息回来以后,从你这边
3449
+ 怪当时站的地方平滑接上她那边的位置,接着走的速度也只算怪自己走的那部分。两边击退的差别(比如一边撞了墙
3450
+ 一边没撞)一般很小,会平滑掉。
3451
+ - 你这边先演击退的怪都按这条走。等的这段时间里,如果你这边的怪正被别的东西带着动(被你打到时你这边先演的
3452
+ 招式、自己飞出去或掉下去的那一段、你的技能吸着它),就照旧由那些东西带着,不加怪自己走的路。
3453
+ - 注意:
3454
+ · 这条【没有实机测过】。下次打来回走的小怪时,看击退的距离是不是和原版差不多,消息回来的时候怪有没有突然
3455
+ 滑一下或者往回拉。
3456
+ · 怪被你打到墙边、它在她那边又正往这面墙走的话,等的那一下你这边的怪可能会陷进墙里一点,消息回来就出来。
3457
+ · 包的格式变了:两个人都必须装 0.4.111,一新一旧的话消息会读错。
3458
+ · 多出来的流量:你打中一只怪以后的两三秒里,这只怪的每个位置多带十来个字节。
3459
+
3460
+ * 【她打中兽蝇 boss 以后,她那边的 boss 停在原地不动了】(0.4.111)
3461
+ - 现象:10 月 18 日 14:42 左右,你开房间打兽蝇 boss,她打中 boss 以后,她那边的 boss 就停在原地不动
3462
+ 了,只在原地扭(她说“在原地咕涌”)。你这边是正常的。
3463
+ - 原因:她打中怪的时候,她那边不等你这边回消息,先自己让怪做被打的反应。怪身上不止一套流程,这只 boss
3464
+ 有一套很小的流程,被打以后走到“通知一下”这一步就停住,后面没有路了。以前她那边要等你这边的这套流程
3465
+ 离开这一步,才算这次反应结束;可它永远停在那一步,反应就一直没结束。反应没结束的时候,她那边的 boss
3466
+ 不跟你这边的位置走,于是定在了原地。被打以后会走进这种死路的流程,游戏里有 36 种怪有。
3467
+ - 现在:先自己演的反应走到一步“后面没有路、该做的都做完了”,而你这边的同一套流程也在这一步,就算结
3468
+ 束,她那边的怪马上接着跟你这边走。抓人、招式、对话、每个人自己演的结尾这些,结束的办法不变。
3469
+ - 注意:
3470
+ · 这条【没有实机测过】。下次打这个 boss,看不开房间的那个人打中以后,boss 还会不会定住。
3471
+ · 两个人都装 0.4.111 才有这个改动。
3472
+
3473
+ * 【你离开房间以后,她那边空中的精英怪从天上飘走了】(0.4.111)
3474
+ - 现象:10 月 18 日,你们一起打一只会跳到空中再扑下来的精英怪,你先出了房间,她那边看到它从天上飘走
3475
+ 了,再也没下来(她说“他怎么从天上飘走了”)。
3476
+ - 原因:你一走,这个房间交给她那边接着跑,怪从你这边最后的状态接着演。怪会把“要追的玩家”记在自己身
3477
+ 上,这是它前面的步骤(比如休息的时候)记下的。接手的时候,数字、开关这些会从你这边带过去,“记的是哪
3478
+ 个物体”带不过去,她那边这只怪又从来没走过那几步,所以这一格是空的。你走的时候它正在空中,这一步是
3479
+ “飞向要追的玩家,飞过头了再落下来”,要追的是空的,它就带着跳起来的速度一直飞走了。
3480
+ - 现在:接手的时候,怪身上“要追的玩家”这类格子如果是空的,就填上接手这一边的玩家,和游戏自己一开始
3481
+ 填的一样。只填怪自己会拿玩家去填、又从来不查它空不空的格子:有的怪在同名的格子里记的是它要打的别的
3482
+ 怪、要飞去的地方,空不空它自己要拿来判断,这种不动。
3483
+ - 注意:
3484
+ · 这条【没有实机测过】。下次有人在怪跳到空中的时候离开房间,看留下的人那边它会不会落下来接着打。
3485
+ · 两个人都装 0.4.111 才有这个改动。
3486
+
3487
+ * 【兽蝇 boss 冲着你来,砸地板却跑去砸她那边,来回转向】(0.4.111)
3488
+ - 现象:10 月 18 日你说,她开房间打兽蝇 boss 时,你这边看到 boss 在砸地板和不砸之间反复转向;之前还说
3489
+ 过换房主的时候也会这样。
3490
+ - 原因:怪追哪个玩家,由开房间的那一边决定。决定以后,怪身上看向玩家、追玩家、量和玩家距离的动作会被
3491
+ 改成对着它要追的那个人。可是这份动作名单漏了不少,漏掉的仍然对着开房间那个人自己的角色。这只 boss
3492
+ 追你的时候,脸朝你、也追你,可冲刺前对齐的高度、冲刺什么时候算冲过头,看的是她;砸地板的第一下砸在你
3493
+ 这边,后面两下找的是“离她最近的完好地板”,于是转身去砸她那边;钻进岩浆再冒出来,也冒在她脚下。换房主
3494
+ 以后,看的就换成了新房主自己的角色。上一条精英怪的“飞向玩家”“飞过头了没有”也在漏掉的名单里。
3495
+ - 现在:把游戏里所有会同步的怪查了一遍,按原来的规则补上了这一类:
3496
+ · 只用来看向、追、量距离的 18 种动作,以后都对着怪要追的那个人;
3497
+ · “找离某个东西最近的物体”“把某个东西记下来”“读位置、读高度、从某处往下探”这 6 种什么都会用到的
3498
+ 动作,只有在它看的正好是玩家的时候,才改成怪要追的那个人;它把结果记在哪一格,永远不改;
3499
+ · 动作看的格子里记的如果不是玩家(比如它要打的别的怪、它瞄准用的标记),就不改成玩家;每次用到都按
3500
+ 格子当时记的东西重新判断,不会改过一次就一直对着玩家;
3501
+ · 直接作用在玩家身上的动作(抓人、推人、扣丝这些)不在里面,照旧只对每个人自己这边的角色。
3502
+ - 你问原版会不会把地板砸到只剩一块:这只 boss 每一招固定砸三下,同一招最多连着出两次;地板碎了以后要
3503
+ 大约 6.85 秒才长回来;有人掉进岩浆的时候,碎了的地板马上长回来,所有地板 2 秒内砸不碎。离开房间时两
3504
+ 边对比过地板,是一样的。按这些数,连着两招砸六下,地板会少到只剩一两块,具体看每一下砸得多快,我没在
3505
+ 原版里实测过。修了上面这个以后,后面两下会砸在它追的那个人那边,不会再两边都砸。
3506
+ - 注意:
3507
+ · 这条【没有实机测过】。下次打这个 boss,看它追你的时候砸地板是不是都在你这边、冲刺是不是冲着你;换
3508
+ 房主以后还会不会来回转。别的怪追你的时候,看它是不是一直对着你、不再忽然转去追她。
3509
+ · 两个人都装 0.4.111 才有这个改动。
3510
+
3511
+ * 【boss 召唤出来的小怪,一出来血条就不满】(0.4.111)
3512
+ - 现象:10 月 18 日你说,兽蝇 boss 有一次召唤出来的小怪,刚出来血条就不是满的。
3513
+ - 原因(从代码推出来的,日志里没有记血量):这种小怪死了不会真的消失,游戏在它死的同一瞬间就把血加满、
3514
+ 收起来,等 boss 下次召唤再放出来。你打出去的伤害要零点几秒才到她那边;如果小怪在这之前已经被她打死
3515
+ 了,晚到的伤害就扣在了收起来、加满了血的小怪身上,下次召唤出来就少了这一截。
3516
+ - 现在:开房间的那一边,这种死了还会再出来的怪死掉以后,到它重新能被打到之前,收到的伤害只记下来、不扣
3517
+ 血:这段时间谁也打不到它,到的都是它死之前打出去的。网络消息没有改。
3518
+ - 注意:
3519
+ · 这条【没有实机测过】。下次两个人一起打 boss 召唤的小怪,看再召唤出来的时候血条是不是满的。
3520
+ · 晚到的伤害要是卡在很长的网络断档里,等它到的时候小怪已经又被召唤出来了,还是会扣上去。
3521
+ · 两个人都装 0.4.111 才有这个改动。
3522
+
3523
+ * 【一起进 boss 房间,你黑屏出来还在门口,她已经在两三步外;怪多的地方掉帧】(0.4.112)
3524
+ - 现象:10 月 18 日你说,你们一起进 boss 房间,你黑屏结束时还在门口,她已经走出两三步;怪多的地方明显
3525
+ 掉帧。
3526
+ - 查到的(你今天 14:00 到 16:09 的日志和她 14:59 那份):
3527
+ · 平时换房间你和她差不多:同样的 25 次换房间,你黑屏约 0.9 秒,她约 1.0 秒,多数是你先进新房间。
3528
+ · 14:44 第二次进那个 boss 房间时,你 2.2 秒,她 1.3 秒,她早出来大约 0.9 秒,就是那两三步。同一个门
3529
+ 两分钟前你只要 1.1 秒;这次游戏自己读房间和模组那部分都慢了一倍多,是那时整台电脑变慢了,14:49 和
3530
+ 16:08 也是这样。电脑为什么变慢,日志里看不出来(不记温度和频率)。
3531
+ · 那场 boss 你这边平均 39 帧,每 10 到 30 秒还会卡住 0.26 到 0.45 秒(游戏在清理内存);她那边一次卡
3532
+ 顿都没被记下来。模组每帧自己的代码大约 1.2 毫秒。
3533
+ · 模组给每只怪各挂 3 到 4 个钩子(播动画、回收物件、开关物件、死亡),每次换房间都要一个个新做出来,离
3534
+ 开时再一个个拆掉;同一处挂得越多,再挂一个越慢。打斗时游戏每切一次动画,都要穿过每只怪的那一层。
3535
+ - 现在:这 4 个钩子改成所有怪共用一个,用到时查是哪只怪,每只怪原来怎么处理都不变。换房间时模组那部分
3536
+ 会少一块,打斗时每次切动画只过一层。网络消息没改。
3537
+ - 注意:
3538
+ · 这条【没有实机测过】。省下多少要看下次的日志(换房间那几行里“entities made in”后面的毫秒数)。
3539
+ · 万一改坏了会很明显:两边怪的动作对不上、复制品凭空消失、进房间时怪突然闪出来、怪死了另一边不死。
3540
+ · 这是各自电脑上的改动,谁装了谁受益。
3541
+ · 电脑整个变慢的那几次,模组能省下的只是一部分。想看是不是发热降速:打 boss 时开着任务管理器,在
3542
+ “性能”里点 CPU,看“速度”打完以后是不是掉得很多。
3543
+
3544
+ * 【联机打 boss 时每隔十几二十秒顿一下,单人不会】(0.4.112)
3545
+ - 现象:10 月 18 日你说单人不卡,联机打 boss、怪一多就掉帧。你那场 boss 打了 4 分半,日志里游戏清理了
3546
+ 8 次内存,每次停 0.26 到 0.45 秒;在安静的房间里要好几分钟才清理一次。
3547
+ - 查到的:
3548
+ · 清理内存是新产生的“垃圾”攒够了才触发的。游戏用的运行库记不了“谁产生了多少垃圾”(它的源码里那两个
3549
+ 计数直接返回 0),所以是读代码一处处找的,下面的数都是从代码估的。
3550
+ · 模组在你这边打斗时每秒大约产生 1.4 到 2.4 MB 垃圾,安静房间约 0.7 MB。大头是:每个网络包都把所有消
3551
+ 息种类的列表重新生成一遍;每收到一条数据就新建几个小对象;每帧都跑的存档检查和 boss 房间检查里有排
3552
+ 序、查询和拼字符串;挂在游戏里的几个钩子每被调用一次就新建一个对象,哪怕根本用不上;地图图标每帧把
3553
+ 所在区域的房间名一个个读一遍。
3554
+ · 有两次卡顿是模组自己的代码:进房间几秒后,比对两边房间状态的检查一口气把整个游戏的状态机和存档物
3555
+ 件翻了一遍,卡了 146 毫秒;你被拉起来以后,boss 房间那部分卡了 86 毫秒,这次没找到原因。
3556
+ - 现在:
3557
+ · 上面这些都改成复用同一份东西,或者只在真要用时才做。怪的表现、网络消息、日志都不变。估计你这边打斗
3558
+ 时模组产生的垃圾能少一半左右,清理内存的间隔会相应变长。
3559
+ · 比对房间状态的检查改成每帧只翻一点,不再一次翻完。
3560
+ · 她开服务器的那边,转发每条怪物更新时新建的对象也少了很多。
3561
+ - 注意:
3562
+ · 这条【没有实机测过】。下次打同一个 boss,看日志里 [Frames] 开头、带“memory cleanup”的那几行,隔多
3563
+ 久出现一次,和这次的每 10 到 30 秒比。
3564
+ · 游戏自己打斗时也会产生垃圾,清理内存不会完全消失,只是隔得更久;每次停多久主要看电脑快慢。
3565
+ · 那次 86 毫秒的原因没找到,再出现的话日志会记下是哪一部分。
3566
+ · 万一改坏了会很明显:联机时对方或怪不动、不更新位置,两人存档配对出错,地图上对方的图标位置不对。
3567
+
3568
+ ※ 以上二百二十七条【没有实机验证过】。
3440
3569
 
3441
3570
 
3442
3571
  六、出问题的话
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # silksong-coop-mod 0.4.110
1
+ # silksong-coop-mod 0.4.112
2
2
 
3
3
  The files a player needs to install a two-player co-op build of **SSMP**, packaged so they can be fetched from
4
4
  a mirror that is reachable inside mainland China. This is not a Node library: nothing here is imported or run
@@ -15,4 +15,4 @@ The BepInEx loader is included, so the install needs no network access at all.
15
15
 
16
16
  The multiplayer mod is the work of [Extremelyd1](https://github.com/Extremelyd1/SSMP). This is a modified copy
17
17
  that adds a shared two-player save; please do not take questions about it to the original author. Distributed
18
- under the GNU LGPL 2.1 - see `LICENSE`. Built from https://github.com/Candy-649/SSMP at `78ae026`.
18
+ under the GNU LGPL 2.1 - see `LICENSE`. Built from https://github.com/Candy-649/SSMP at `f6f80a4`.
package/SSMP/SSMP.dll CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silksong-coop-mod",
3
- "version": "0.4.110",
3
+ "version": "0.4.112",
4
4
  "description": "Offline installer payload for a two-player co-op build of the SSMP Silksong multiplayer mod. Not a Node library.",
5
5
  "license": "LGPL-2.1-or-later",
6
6
  "author": "Candy-649 (https://github.com/Candy-649)",