I made this decompilation about 6 years ago. I don't even have this IDA project or even CPP version. All stuff i have right now is entirely rewritten to C# and unity shaders. But I can give you some insights of how mu handles these effects.
There are few methods that webzen's client use to render it's effects. MU glow can be compared to multiple passes in modern approach. Object is rendered multiple times with different blending options and texture parameters (like dynamic UV coordinates). In example for +13 effect object is rendered 5 times (base texture with color, +7 dynamic layer, +9 static layer, +11 dynamic layer and +13 dynamic layer). It's very inefficient, but makes great effect even on the oldest graphic cards. With modern card this can be easily implemented in one pass with shader.
Regarding cape/wings effects, it depends which effect you need. It's usually billboard texture rendered at specific bone of object. Some items even have additional bones with animations to handle such things. You can find this code by searching for texture IDs in code and placing BP while wearing items. It's not that hard to find actually. Another option is searching for item ID and trying with breakpoints.
I read them as-is. I tried with conversion, but it's black hole. You will end up with hundreds of issues every time you need newer Data folder from client. Writing code to load BMDs and map files is one time job. Also I can easily create Unity assets with this code, but I think it's worse than dynamic loading. The hardest thing is animation loading. Creating animation clips from code in unity is really painful, since unity lack documentation in this area.
You need public repository for such project, but you can't create it. You need stable platform to handle multiple branches, pull requests and good issue tracking.
Actually classic VBO layout is very easy to reconstruct from BMD file, and can be done in real time. You have to do it anyway if you want to convert BMD->FBX.
We are loading files to structs in multiple background threads, and creating unity Mesh class in main unity thread. The slowest part is AnimationClip class in unity. You can't create it in background thread, and it's a bit slow (especially SetCurve method). But it's still way faster than webzen's client.




Reply With Quote






