Initiate Mage
- Joined
- Mar 9, 2017
- Messages
- 61
- Reaction score
- 2
So to get started I wanted to share some things that I've thought of aswell as some things that I learned were a thing. Do I have experiance with any of this stuff currently, probably not. Do I know they are possible, absolutely. Will I do them, I'll damn well try.
Direct3D(Kinda Reasonable):
So to get into it lets start with something more reasonable, D3DX9_30.dll being replaced. windows has newer versions of the d3dx?_??.dll files inside "c:/windows/system32/" meaning we can get the more up to date DLLs for use with the client.
We also have alot of useful info on the forum already regarding modifying the cabalmain.exe. Stuff for disabling certain things and injecting our own DLLs. I'm sure with the right amount of expirementing we could in theory get the client to use newer versions of d3dx.
Maybe not to the extent of jumping from Direct3D9 to DirectX12 or vulcan, but possibly from d3dx9_30 to d3dx9_43 instead. MAYBE d3dx10_?? possibly, depending on if it has everything needed for the game to use.
The stuff regarding Direct3D could also be applied to the sound libraries used by the game aswell, meaning we could update the libogg.dll, libvorbis.dll and libvorbisfile.dll aswell(Given the age of this game I'm somewhat assuming these libraries are just as outdated as the d3dx version is, but I don't know about those 2 libraries yet to say without a sliver of a doubt)
Multi-platform(A little bit of a stretch but possible-ish):
Sure, its likely easy to get the game running on linux with something like wine. But I recently came across a thread from 2013 (here) that was touching up on the topic of "rewriting the game to work on android tablets" sure at first it sounds silly, and probably not useful. HOWEVER, it did remind me of another video I saw recently about creating a virtual machine from scratch using C++(
Maybe we could get around the lack of client source code, and instead make a virtual machine that simply replicates the stuff the game needs to run on windows. We could technically put the game on other things besides windows PCs this way.
New/Improved assets(already being done, but could be done on a massive scale? maybe as a collaborative effort):
So I'm no 3D modeler, and I hate working with both blender and 3DMax. But I've seen the stuff people have posted before on these forums where they have made their own new assets.
What if we take it a step further however? Like say taking the stock asset files for characters, mobs, armor, items, the levels, effects from skills, skill icons, and so on....and remastering them? If we get the improvements mentioned in the Direct3D section above done, we could also be more flexible in terms of how detailed models are for these things(lets face it, compared to modern games even MMOs, the graphics don't hold up to the newer stuff)
New features to the game(Possible but complex???!):
So a user recently told me that there are no source files for the client or the server. The only thing we have are compiled client and server, and then the few files that they use which are not compiled. But as we all already know, using tools like OllyDbg we've already been modifying the game client(And might I add that despite me jumping in only yesturday for the litteral first time using OllyDbg or even touching assembly stuff, I can see it isn't IMPOSSIBLE to hook anything we want to, just tedious and time consuming)
What if we do the hard work of using OllyDbg to force the client to load a dll that allows us to use lua to better extend the client(possibly also doing the same with the server aswell) LuaJIT is open source, already used in many games, and REALLY easy for first time coders to get started with(its where I started before moving to C++ later on) We could then use OllyDbg to get addresses of things we want to make accessible to lua, then we could have our injected dll simply expose it to lua.
We could also add a means of networking iinto this using sockets to allow for the server and client side lua state to communicate with each other. What does this allow us to do exactly? Well we could allow for potentially new things to be rendered on screen such as a HUD replacement, alteration of mobstats on the fly, maybe some event related stuff, we could likely also allow for other stuff I haven't even thought of. Getting LuaJIT forced into the client or server really opens ALOT of doors for new development in this game. Possibly also bringing more popularity to this game(Something I REALLY would love to see happen.
For those curious about LuaJIT:
Final thoughts:
So you are probably wondering why put in all this effort for a game this old and the original creators who already made a sequel to it, well logically it makes little sense. BUT it is technically all possible to do with enough time, effort and people working together. And I'm sure the people here love this game, especially if its still spoken about after all this time and people still make private servers for it.
So why not, lets give it a shot. Either for the benefits of having atleast some of the stuff above, or for the fun of doing it, or even for the learning experiance from trying.
I'd love to get people's input on some of these and also to know who all finds these ideas useful or interesting enough to also attempt one of them.
--------
EDIT: I later realized the video regarding virtual machines built in C++ isn't entirely good at explaining what I meant.
Basically the idea is to do what a DRM called Denuvo does. Taking x86 code and compiling it to a virtual machine's instruction set, and running those as it's own application. Basically you could take ANY x86 application and run it on the VM. So in our case we simply make it automatically load the cabalmain.exe and we can effectively run it almost anywhere that has enough hardware resources and storage space.
Direct3D(Kinda Reasonable):
So to get into it lets start with something more reasonable, D3DX9_30.dll being replaced. windows has newer versions of the d3dx?_??.dll files inside "c:/windows/system32/" meaning we can get the more up to date DLLs for use with the client.
We also have alot of useful info on the forum already regarding modifying the cabalmain.exe. Stuff for disabling certain things and injecting our own DLLs. I'm sure with the right amount of expirementing we could in theory get the client to use newer versions of d3dx.
Maybe not to the extent of jumping from Direct3D9 to DirectX12 or vulcan, but possibly from d3dx9_30 to d3dx9_43 instead. MAYBE d3dx10_?? possibly, depending on if it has everything needed for the game to use.
The stuff regarding Direct3D could also be applied to the sound libraries used by the game aswell, meaning we could update the libogg.dll, libvorbis.dll and libvorbisfile.dll aswell(Given the age of this game I'm somewhat assuming these libraries are just as outdated as the d3dx version is, but I don't know about those 2 libraries yet to say without a sliver of a doubt)
Multi-platform(A little bit of a stretch but possible-ish):
Sure, its likely easy to get the game running on linux with something like wine. But I recently came across a thread from 2013 (here) that was touching up on the topic of "rewriting the game to work on android tablets" sure at first it sounds silly, and probably not useful. HOWEVER, it did remind me of another video I saw recently about creating a virtual machine from scratch using C++(
You must be registered to see links
)Maybe we could get around the lack of client source code, and instead make a virtual machine that simply replicates the stuff the game needs to run on windows. We could technically put the game on other things besides windows PCs this way.
New/Improved assets(already being done, but could be done on a massive scale? maybe as a collaborative effort):
So I'm no 3D modeler, and I hate working with both blender and 3DMax. But I've seen the stuff people have posted before on these forums where they have made their own new assets.
What if we take it a step further however? Like say taking the stock asset files for characters, mobs, armor, items, the levels, effects from skills, skill icons, and so on....and remastering them? If we get the improvements mentioned in the Direct3D section above done, we could also be more flexible in terms of how detailed models are for these things(lets face it, compared to modern games even MMOs, the graphics don't hold up to the newer stuff)
New features to the game(Possible but complex???!):
So a user recently told me that there are no source files for the client or the server. The only thing we have are compiled client and server, and then the few files that they use which are not compiled. But as we all already know, using tools like OllyDbg we've already been modifying the game client(And might I add that despite me jumping in only yesturday for the litteral first time using OllyDbg or even touching assembly stuff, I can see it isn't IMPOSSIBLE to hook anything we want to, just tedious and time consuming)
What if we do the hard work of using OllyDbg to force the client to load a dll that allows us to use lua to better extend the client(possibly also doing the same with the server aswell) LuaJIT is open source, already used in many games, and REALLY easy for first time coders to get started with(its where I started before moving to C++ later on) We could then use OllyDbg to get addresses of things we want to make accessible to lua, then we could have our injected dll simply expose it to lua.
We could also add a means of networking iinto this using sockets to allow for the server and client side lua state to communicate with each other. What does this allow us to do exactly? Well we could allow for potentially new things to be rendered on screen such as a HUD replacement, alteration of mobstats on the fly, maybe some event related stuff, we could likely also allow for other stuff I haven't even thought of. Getting LuaJIT forced into the client or server really opens ALOT of doors for new development in this game. Possibly also bringing more popularity to this game(Something I REALLY would love to see happen.
For those curious about LuaJIT:
You must be registered to see links
Final thoughts:
So you are probably wondering why put in all this effort for a game this old and the original creators who already made a sequel to it, well logically it makes little sense. BUT it is technically all possible to do with enough time, effort and people working together. And I'm sure the people here love this game, especially if its still spoken about after all this time and people still make private servers for it.
So why not, lets give it a shot. Either for the benefits of having atleast some of the stuff above, or for the fun of doing it, or even for the learning experiance from trying.
I'd love to get people's input on some of these and also to know who all finds these ideas useful or interesting enough to also attempt one of them.
--------
EDIT: I later realized the video regarding virtual machines built in C++ isn't entirely good at explaining what I meant.
Basically the idea is to do what a DRM called Denuvo does. Taking x86 code and compiling it to a virtual machine's instruction set, and running those as it's own application. Basically you could take ANY x86 application and run it on the VM. So in our case we simply make it automatically load the cabalmain.exe and we can effectively run it almost anywhere that has enough hardware resources and storage space.
Last edited: