silksong-coop-mod 0.4.84 → 0.4.87

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
@@ -1921,7 +1921,145 @@ exe 旁边放一个 dll,让游戏启动时连带加载它。这是所有同类
1921
1921
  · 跟着玩家走的部件不改(不跑房间那边的复制品认的“玩家”是自己,不一定是怪盯着的那个人)。
1922
1922
  · 不只香炉:全游戏大约 10 种怪、170 处左右这样每帧摆的部件都一起改了。
1923
1923
 
1924
- ※ 以上一百二十八条【没有实机验证过】。
1924
+ * 【遭遇战里那种会飞、能拼刀的小怪你这边不出来;有的房间里会飞的虫子只有一边看得到:修了】(0.4.85)
1925
+ - 原因:
1926
+ · 两边的游戏给房间里每只怪编一个号,靠这个号认出“是同一只”。号是按怪的名字和它在房间里的位置算的。
1927
+ · 有些怪在房间刚加载时,游戏会随机给它一个“远近”(只决定谁画在前面),两边随机出来的不一样,
1928
+ 同一只怪在两边就被编成了不同的号。跑房间那边说它出来了、动了、挨打了,另一边对不上号,
1929
+ 复制品就一直不出来,你打它也传不过去。
1930
+ · 不是网络的问题,网再好也一样。
1931
+ - 现在:
1932
+ · 编号不再算“远近”,只用名字和平面上的位置。全游戏的房间都查过了:这样不会有两只怪撞成同一个号。
1933
+ (按以前的算法,有一个房间里原本就有 2 对怪撞了号,撞号的那只两边都不同步;现在也没了。)
1934
+ · 受影响的一共 21 个房间、993 只:大多是之前说过的沙虫堆(沙里一下一下冒出来的那种),
1935
+ 另外就是这种会飞的小怪,还有几只别的。
1936
+ · 所有怪的编号都变了(两边算法一样,所以两个人必须用同一个版本,和以前一样)。
1937
+
1938
+ * 【平时藏在地里、有人走近才钻出来的那种小怪,你这边一直站在外面摆着攻击的样子:修了】(0.4.85)
1939
+ - 原因:
1940
+ · 这种怪藏起来靠的是一段“藏着”的动画,房间刚加载时放一次,之后一直保持,直到有人走近。
1941
+ · 以前跑房间的那一边,要等“这个房间由谁跑”定下来以后,才开始把怪的动画发给另一边;
1942
+ 房间刚加载那一下放的动画没发出去。另一边的复制品自己不放动画(都等跑房间那边发),
1943
+ 于是一直显示房间存档里那张图,这只怪存的那张正好是攻击的样子。
1944
+ - 现在:
1945
+ · 定下来由这边跑房间的那一刻,把每只怪“当前在放的动画”发一次(和“它开没开着”一样),
1946
+ 之后才进房间的人也能拿到。
1947
+ · 不只这种怪:所有一进房间就摆好一个姿势、之后很久不变的怪都一样。
1948
+
1949
+ * 【比试、回忆里的战斗:一个人倒下整场就算输了:改成两个人都倒下才算输】(0.4.86)
1950
+ - 原因:
1951
+ · 这类战斗里倒下,游戏本身不算真死:不掉钱、不留茧,直接算你输,把你放回游戏定好的地方。
1952
+ 以前这个 mod 对这种倒下完全不管,所以一个人一倒下,这一场就当场算输了:
1953
+ 和你们比试的角色已经算自己赢了,另一个人还在跟它打。
1954
+ · 比试的角色会告诉游戏“输了的人在它旁边醒来”。以前只有跑房间的那边听到了这一句,
1955
+ 另一边输了的人会回到椅子上醒来。
1956
+ - 现在:
1957
+ · 和所有首领战一样:一个人倒下先躺下,等队友来拉(和平时一样的拉法);两个人都倒下才算输。
1958
+ · 两个人都倒下以后,各自的游戏照游戏本来的样子处理:不掉东西,回到游戏定好的地方。
1959
+ 比试输了,两个人都在那个角色旁边醒来。
1960
+ · 所有“输了不算真死”的战斗都这样,不只比试;回忆里的战斗也是。
1961
+
1962
+ * 【有的会说话的角色,只有一边能跟它说话(比如骑虫子的骑士):修了】(0.4.86)
1963
+ - 原因:
1964
+ · 有些角色说话和打架用的是同一套控制,这一套只在跑房间的那边运行,另一边看到的是照着演的复制品。
1965
+ 以前在复制品身上按“对话”,你这边的游戏会把这一整套从头跑起来,从那以后你这边就多了一个
1966
+ 自己行动的它。所以实际上只有先进房间的人能正常跟它说话。
1967
+ · 骑虫子的骑士:能对话的那个部分,是房间刚开始时由它自己打开的。以前这种部分不复制,
1968
+ 后进房间的人那边一直关着,根本没有对话入口。
1969
+ · 骑士在两场之间休息的样子,名字里带着骑士的名字,以前被当成了要同步的那只骑士,
1970
+ 结果也只有跑房间的那边能跟它说话。
1971
+ · 有的角色打架时不能对话、停下来才能对话。以前“现在能不能对话”只在跑房间的那边切换,
1972
+ 另一边一直是房间刚加载时的样子。
1973
+ - 现在:
1974
+ · 两个人都能在自己的游戏里跟它说话,各听各的台词(听没听过也是各记各的,和所有角色一样)。
1975
+ 说一段、停一下再接着说一段的,整段都只在说话的人这边,另一个人不会被拉进对话。
1976
+ · 说完话以后它要做的事(比如开打),跑房间的那边也照做,两边一样。
1977
+ 说完话直接开打、不先把操作还给你的,也照原版的方式把操作还给你。
1978
+ · 你说话的时候,跑房间那边的人看不到它在跟你说话,只看到说完以后的结果。
1979
+ · 只会说话、不会打的角色,每边各自运行,和其他只会说话的角色一样。
1980
+ · “现在能不能对话”两边一样了。
1981
+ · 所有这样说话的角色都按这个来,不只骑士。
1982
+
1983
+ * 【角色当面问要不要打(比试之类)时,一个人选“是”就开始了:改成两个人都选“是”才开始】(0.4.86)
1984
+ - 原因:
1985
+ · 全游戏查过,角色当面问“要不要打”的一共 4 处。以前和平时的选项一样,谁先选“是”就开始了,
1986
+ 另一个人可能还没走过来。
1987
+ - 现在:
1988
+ · 和请求援助一样:一个人选“是”以后,停在选项上等;另一个人会收到一条消息,
1989
+ 要自己去和同一个角色对话、也选“是”,才一起开打。
1990
+ · 任何一个人选“否”,或者 45 秒内另一个人没选,就当两个人都没答应。
1991
+ (比交祈愿等得久,因为另一个人要先走过去、听它说完。)
1992
+
1993
+ * 【网络卡一下以后,有的东西一直不同步(比如怪在一边已经死了,另一边一直活着):修了】(0.4.86)
1994
+ - 原因:
1995
+ · 10-09 的日志里,你这边有一段 19 秒什么都没收到。这段时间里朋友那边发出的东西一样都没有到,
1996
+ 之后也没有补发:那边已经打死的怪,在你这边一直活着。
1997
+ · 走 Steam 中转时,“必须送到”的消息靠 Steam 保证送到,这个 mod 自己不补发;Steam 扔掉的就没了。
1998
+ · Steam 自己的说明里写着:连接 10 秒没动静就算断了,下一次发东西时自动重连,
1999
+ 重连时还没送到的“必须送到”的消息直接扔掉,不另外通知。而这个 mod 要 30 秒没动静才算断线。
2000
+ (那次是不是这样丢的,日志里看不出来;但这种丢法是确实存在的。)
2001
+ · 另外查到:以前如果某一次要发的东西打包出错,这一份会一直留着,之后每次都出同样的错,
2002
+ 从此什么都发不出去,但连接看起来还在。
2003
+ - 现在:
2004
+ · Steam 改成 45 秒没动静才算断(比这个 mod 的 30 秒长),不会在 mod 不知道的时候自己重连、扔东西。
2005
+ · 不管是什么原因丢的:只要有 3 秒以上什么都没收到,恢复以后马上向服务器再要一次“这个房间现在是什么样”:
2006
+ 谁在房间里、哪些怪已经死了或关掉了、在哪、在放什么动作。漏掉的死亡会补上;
2007
+ 怪正在做的事不会被打断重来;血量也照跑房间那边的改,你刚打出去、还在路上的那几下照样算(见下一条)。
2008
+ · 反过来也补:跑房间的那一边如果有 3 秒以上什么都没传到服务器,恢复以后服务器会让它把整个房间现在的样子
2009
+ 再发一次(每只怪开没开着、在哪、朝哪边、在放什么动作、血量、状态),记下以后再让房间里的另一个人照着改;
2010
+ 怪身上的各个部分(碰撞、图层、颜色之类)也各自再发一次。
2011
+ · 卡住的那几秒里打出去的攻击也不会丢:恢复以后照样扣血,只是晚一点(你得还在那个房间里;见下一条)。
2012
+ · 打包出错时,只丢掉出错的那一项(日志里写是哪一项),其余照常发出,不会再从此什么都发不出去。
2013
+ · 日志里会写卡了多久(Packets arrive again after …),收到读不出来的包也会写一条警告。
2014
+
2015
+ * 【网络卡过以后,两边怪的血量对不上,卡一次差一点,越打差得越多:改了血量的同步方式】(0.4.86)
2016
+ - 原因:
2017
+ · 以前血量是按“这一下扣了多少”发给对面的。只要有一条在路上丢了,对面就一直少扣这么多,
2018
+ 怪活多久就差多久;卡的次数越多差得越多,首领战打得久就更明显。
2019
+ · 跑房间的人(先进房的那个)一离开、由另一边接手时,接手那边会拿自己这份可能已经差了的血,
2020
+ 当成怪真正的血接着打。
2021
+ - 现在:
2022
+ · 跑房间那一边说了算:怪的血一变(不管是谁打的、回血还是换阶段),就把“现在还剩多少血”发出去,
2023
+ 连同“队友打的已经算进去了多少”。
2024
+ · 另一边打怪还是当场扣血,不用等;发出去的是“我一共打掉了多少”,不是“这一下多少”。
2025
+ 丢了一条也没关系,下一条里全都有;跑房间那边没回话,就隔一会儿再发一次(先每秒一次,十次以后每 5 秒一次),
2026
+ 直到它收到为止。
2027
+ · 另一边看到的血 = 跑房间那边说的血 − 自己打了、对面还没算进去的那部分。
2028
+ 所以不管中间丢过什么,只要收到最新的一条,两边就一样。
2029
+ · 卡顿以后补房间状态(上一条)时,血量数字也一起改对,不再只补“死了”。
2030
+ · 房间换人管时,接手的一边先把自己现在的血告诉大家,大家从这个数接着算。
2031
+ · 审查时还查出一个以前就有的问题:房间加载完以后才出现的怪(生出来的、后加载的),两边记的
2032
+ “这个房间换过几次人管”可能不一样,不一样时一边打的血另一边收不到。现在后出现的怪也用房间当前的这个数。
2033
+ · 卡顿以后补房间状态时,只有跑房间那边说“已经死了”的怪才会在你这边死掉;血是 0 但还活着的怪不会被弄死。
2034
+
2035
+ * 【两个人都离开房间再回来,打死的怪又回来了,刷新比单人频繁得多:修了】(0.4.87)
2036
+ - 原因:
2037
+ · 原版里,坐椅子才会复活的普通怪死的时候,会在这个房间的存档里记一笔“已死”,下次进房间读到就不出现;
2038
+ 坐椅子或死亡会清掉这些记录。
2039
+ · 联机时只有跑房间的那一边(先进房的人)记对了。另一边显示的是复制出来的怪,它死时“已死”记在了对不上的
2040
+ 名字下面;房间里原本那只怪在那一边一直关着、从没读过存档,离开房间时还会把“活着”写回去,
2041
+ 连这一边以前记下的“已死”也冲掉。
2042
+ · 两个人都离开以后,下次谁先进就按谁的存档加载;先进的是没记对的那一边,怪就全回来了,两个人都看得到。
2043
+ · 一个人在别的房间打死的怪,另一个人的存档也不知道。
2044
+ · 队友坐椅子时你所在的房间,本该下次加载时刷新,可离开时里面已经死了的怪又被写回“已死”。
2045
+ - 现在:
2046
+ · 不跑房间的那一边:被关着的原怪和复制出来的怪都不再往存档写;复制的怪死了,就用原怪的名字记“已死”。
2047
+ · 两人存档:坐椅子会复活的怪在一边死了,马上记进另一边的存档,不管另一个人在哪个房间。
2048
+ · 队友坐椅子或死亡时你所在的房间:已经死了的怪离开时不再写回,下次进来就刷新。
2049
+ · 已经记乱了的:普通怪在下一次坐椅子以后两边就一致了。
2050
+ - 没变的:
2051
+ · 任何一个人坐椅子或死亡,两边的怪都会刷新(之前定的规则),所以刷新的机会本来就比单人多。
2052
+ · 坐椅子也不会复活的特殊的怪:两个人都在场时打死的,两边都记;一个人单独打死的,只记在自己的存档里,和以前一样。
2053
+
2054
+ * 【从上面的平台下来时被“空气”打到:原因还没找到,加了记录】(0.4.86)
2055
+ - 原因:
2056
+ · 以前日志只记死亡,不记每一下挨打,所以那次是什么打到了朋友,两边的日志都看不出来。
2057
+ - 现在:
2058
+ · 每次掉血,日志里写一行 [Hurts]:掉了多少、被什么打的、它属于哪只怪、当时画面上画没画出来、
2059
+ 它在哪、你在哪。只写日志,不走网络,不改玩法;一分钟最多写 30 行。
2060
+ · 再遇到的话,把那次的日志(BepInEx\LogOutput.log)发过来,就能看出是什么。
2061
+
2062
+ ※ 以上一百三十七条【没有实机验证过】。
1925
2063
 
1926
2064
 
1927
2065
  六、出问题的话
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # silksong-coop-mod 0.4.84
1
+ # silksong-coop-mod 0.4.87
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
@@ -14,4 +14,4 @@ The BepInEx loader is included, so the install needs no network access at all.
14
14
 
15
15
  The multiplayer mod is the work of [Extremelyd1](https://github.com/Extremelyd1/SSMP). This is a modified copy
16
16
  that adds a shared two-player save; please do not take questions about it to the original author. Distributed
17
- under the GNU LGPL 2.1 - see `LICENSE`. Built from https://github.com/Candy-649/SSMP at `54f57bf`.
17
+ under the GNU LGPL 2.1 - see `LICENSE`. Built from https://github.com/Candy-649/SSMP at `280802b`.
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.84",
3
+ "version": "0.4.87",
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)",