Kagamia / WzComparerR2

Maplestory online Extractor
MIT License
406 stars 132 forks source link

最新的 20230914 build 无法渲染 KMST 1.2.1161 的任何地图 #234

Closed HikariCalyx closed 11 months ago

HikariCalyx commented 12 months ago

尝试渲染地图会产生 error.log 文件。

[2023-09-14 23:42:52][Error][MapRender] Coroutine Error: System.AggregateException: 发生一个或多个错误。 ---> System.FormatException: 该字符串未被识别为有效的布尔值。
   在 System.Boolean.Parse(String value)
   在 Spine.Atlas.Load(TextReader reader, String imagesDir, TextureLoader textureLoader)
   在 Spine.Atlas..ctor(TextReader reader, String dir, TextureLoader textureLoader)
   在 WzComparerR2.Common.SpineLoader.LoadSkeleton(Wz_Node atlasNode, SkeletonLoadType loadType, TextureLoader textureLoader)
   在 WzComparerR2.Animation.SpineAnimationData.CreateFromNode(Wz_Node atlasNode, Nullable`1 useJson, TextureLoader textureLoader)
   在 WzComparerR2.MapRender.ResourceLoader.InnerLoadAnimationData(Wz_Node node)
   在 WzComparerR2.MapRender.ResourceLoader.LoadAnimationData(Wz_Node node)
   在 WzComparerR2.MapRender.MapData.PreloadResource(ResourceLoader resLoader, ObjItem obj)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.PreloadResource(ResourceLoader resLoader)
   在 WzComparerR2.MapRender.FrmMapRender2.<LoadMap>d__67.MoveNext()
   --- 内部异常堆栈跟踪的结尾 ---
---> (内部异常 #0) System.FormatException: 该字符串未被识别为有效的布尔值。
   在 System.Boolean.Parse(String value)
   在 Spine.Atlas.Load(TextReader reader, String imagesDir, TextureLoader textureLoader)
   在 Spine.Atlas..ctor(TextReader reader, String dir, TextureLoader textureLoader)
   在 WzComparerR2.Common.SpineLoader.LoadSkeleton(Wz_Node atlasNode, SkeletonLoadType loadType, TextureLoader textureLoader)
   在 WzComparerR2.Animation.SpineAnimationData.CreateFromNode(Wz_Node atlasNode, Nullable`1 useJson, TextureLoader textureLoader)
   在 WzComparerR2.MapRender.ResourceLoader.InnerLoadAnimationData(Wz_Node node)
   在 WzComparerR2.MapRender.ResourceLoader.LoadAnimationData(Wz_Node node)
   在 WzComparerR2.MapRender.MapData.PreloadResource(ResourceLoader resLoader, ObjItem obj)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.<>c__DisplayClass78_0.<PreloadResource>b__0(SceneNode node)
   在 WzComparerR2.MapRender.MapData.PreloadResource(ResourceLoader resLoader)
   在 WzComparerR2.MapRender.FrmMapRender2.<LoadMap>d__67.MoveNext()<---

降级回20230824 build,可正常渲染地图。但是,最新的活动地图(993233100)渲染存在明显问题。 image 以下视频的开头提供了这个地图的实际效果,仅供参考。 https://www.youtube.com/watch?v=hwKoKdBigdw

Kagamia commented 12 months ago

已复现,但是不存在"无法渲染任何地图"的现象。

现查明问题是由于新增地图部分组件使用了新的骨骼格式、命名方式,甚至是更新的spine版本,可能需要使用最新版spine SDK才能加载。

Map/Obj/2023LeafrePicnic.img/spine/flower/0/maple flower1.atlas, L78

01_big_flower10
  rotate: 270    <- error
  xy: 569, 7
Kagamia commented 11 months ago

Fixed in https://github.com/Kagamia/WzComparerR2/commit/fb79247787196317abf1c43de69582b6b18d4755, please checkout the latest verison.

nanochromatic commented 11 months ago

Tested the map with the latest build and it looks great, appreciate the quick fix!

Kagamia commented 11 months ago

Summary

  1. Nxon introduced a new data type RAWDATA last month, it is used to storage spine skeleton binary file (known as `.skel`) in KMST 1161.
  2. The new skeleton is created with spine v4.1.19, which is completely not compatible with v2 format and sdk.

What's changed in wcR2

  1. Update Kagamia/spine-runtimes, fork a new branch from origin/4.1, and merge all v2 code into it (under Spine.V2 namespace).
  2. Detect spine version by reading skel json/binary content, and decide how to read it.
  3. Support reading skeleton binary from RAWDATA.
  4. Handling spine v2 and v4 everywhere.