trevius |
02-13-2013 07:47 AM |
As now noted at the top of the first post of this thread in big red letters, Steam has updated the RoF download to the Jan 16th patch from Live, so it is no longer compatible with EQEmu.
It was a known possibility that Steam might start doing semi-regular updates to the client downloads. Hopefully if they continue, it is at least automated on their end (which I suspect it is), which should mean the dates it gets updated would be predictable. The current interval was about 2 months (RoF was added to Steam on 12-13-2012, and the earliest report of it being updated was on 02-11-2013). If the updates are every 60 days (which lines up with what we know so far), that would put the next Steam download update at about 04-12-2013. If it happens then, that should confirm their schedule, which should make it easier to plan for and make people aware of pending updates.
The EQEmu Dev Team is already discussing our options to make a solution for regular updates. The good thing is they are less frequent and hopefully more predictable than Live patches. The bad thing is it will require regular upkeep from the Dev Team to keep EQEmu working with Steam. As far as I know, Steam is still our best option for an easily and legally attainable client so I think it is worth the effort if we can streamline it.
I can get opcodes updated from patches fairly quickly now. And the ShowEQ team normally figures out the position update struct changes pretty quickly (which happen every patch), so those are 2 pretty big parts of making a client compatible that can be done quickly and easily. There will still be struct changes required here and there and those are not predictable and will have to be worked as they are found. At least by keeping up with them regularly, we shouldn't run into too many major changes for most of the updates which should limit the amount of work required for getting a new client fully compatible. The difference in time between the UF client and the RoF client was pretty long (over 2 years), which is why it is taking so long to get the RoF client fully compatible. By keeping up with the clients regularly, it will mean just a little work is required at a time and the new client will be complete unless there was a major overhaul of some system that requires major changes on our end (which shouldn't be too frequent).
My main concern is how to deal with having multiple versions of the same expansion all compatible with EQEmu. We can easily enough just copy the patch files in the source and make adjustments to the copies. But, that leaves us with potentially dozens of different patches to deal with eventually. This isn't really a problem until we try to implement a new system that we want to give all clients support for. For example, if we eventually add in Shared Tasks or the Expedition system, we would not only have to add structs, opcodes, encodes and decodes to Titanium, SoF, SoD, UF and possibly RoF, but we might also have to add them to 15 (made up number) other version's patch files as well. It would mean the same thing for any packet related fixes that get put in. This is nearly impossible to manage, and would probably lead to new stuff and fixes only being implemented into the latest client, which certainly isn't ideal if it can be avoided.
Another problem is that in order to support all clients properly, the dev team has to actually have all clients and test each one if the change might break something with certain clients. This is bad enough now having 5 or more installs at ~10GBs each, but at 20 installs that is just insane to even consider.
Since each client potentially has packet struct changes for packets that aren't already encoded/decoded, the patch files are just going to keep getting bigger and bigger even if there are only minor differences between the current client and the version just before it. One idea I have had so far (but not really sure how to implement) would be to have mini-patch files that only include the structs and encodes/decodes that differ from the client directly previous to it. So, if only the position updates and spawn struct gets changed, then those are the only structs and encodes/decodes we would need to put in there. If this is possible, it might resolve the issue with having to update multiple patch files anytime we implement a new system or put in a packet-related fix. We would just add the update to the main patch files for the expansion and the mini-patch files would inherit the update without needing to be touched.
Another possible (but less ideal) solution would be to only support something like 2 new client versions at a time. So, every 60 days (assuming that is the schedule for Steam updates), we would delete the client from 2 updates ago and add the latest one in its place. This way, people who already have the current client will not run into issues at all until the next update, and the latest/new version will be added and compatible ASAP so people getting the new download will be able to use it soon after the update happens. This solution would work, but is extra headache for players. It would mean players would have to download a new client at least every 60 days, and copy over their character files, maps, update their UI, etc. each time.
We could also possibly consider coding the packets that get sent out to be sent in the format used by the latest clients and then adding encodes to the older clients and removing them from the newer ones. This might make it easier to feed through the newer patch files, and would allow us to send all of the correct data from the server instead of having to fake it or put in hacks on the encodes and decodes for newer clients. It would be a pretty good amount of work and testing through. It would be good to do, but I am not sure that it would really help with the issue of having multiple patch versions to deal with.
No matter what the solution is; if we decide to start keeping up with the Steam updates, it would also mean all servers that want to allow the newer clients would have to update after each new client is added. Otherwise players running the latest client won't be able to play there, which would cause problems for all people new to EQEmu at that time.
Some of the goals for a solution are:
1. Minimal time investment required for devs to make new clients fully compatible.
2. Minimal work required to add new systems and packet-related fixes to previous clients.
3. Ability to continue supporting previous clients within reason.
4. Least amount of impact on Players.
5. Simplifying/automating the dev update process where possible.
Anyone that has ideas and is knowledgeable of the workings of the EQEmu patch files, feel free to chime in!
|