Well, as you might have noticed from the Twitter feed (as well as from other places), I’ve been on a bit of a hiatus the past month and a half or so. This was due to many different situations, and was planned in advance of the drama that unfolded over the server rules (sorry to disappoint anyone who thought that the drama there scared me away or something).
Anyway, I’m still pretty much on hiatus from Sylverant, but I did decide to use a bit of my free time the past few days to work on a few things. So, I figured a status update is in order (especially since the last one was back in April). So, without further ado, here’s what’s changed since the last “monthly” update:
- Warning cleanup in the code.
- Added code for parsing the ItemPT.afs and ItemPT.gsl files for PSOv2 and the later versions (respectively). Thanks to Lee for lots of information about the format of these files!
- Fixed a few issues that could cause segfaults in the server code.
- Don’t show Blue Burst games to Gamecube clients.
- Added code for parsing the map data from PSOv2 (in addition to the Blue Burst parsing that was already in the code).
- When a client leaves a team, send them back to the lobby they came from, as long as its not full.
- Added code for parsing the ItemPMT.prs files from PSOv2 (later versions are not supported currently). Thanks to Lee for some valuable information on the subject!
- Fixed a potential crash for PSOPC clients when searching for someone by guildcard or choice search when they are in a team that has a name that is of max length.
- Made the results for guild card searches have all the same information they did on Sega’s server.
- Fixed an issue with /minlvl and /maxlvl where they were off by one.
- Added code to the random number generation stuff to support multiple streams of random numbers (one per thread).
- Added a –check-config option to ship_server to make it so you can check the validity of a configuration file without actually starting the ship server.
- Added in parsing for the ItemRT.afs file from PSOv2 (once again, later versions aren’t supported right now, although this shouldn’t be much of an issue).
- Fixed a few minor issues in the map parsing code for v2 and bb.
- Track when clients hit a monster on v2.
- Prevent a potential segfault if map enemy data is not loaded for a team.
- Added support for full server-side drops on PSOv1, PSOv2, and PSOPC (and partial support for the other versions).
- Added the /sdrops command to enable server-side drops.
Most of these are fairly boring updates, except the last two. These probably need a bit of explanation, which will come more fully later on. For a brief explanation, continue on (with the continue reading link, or if you’re already on the full story by reading below).
As it stands right now, only Iselia is running the server-side drop code (however, I expect that Altimira will probably soon be running it as well). Server-side drops on Iselia conform to the same set of data that Sega used in the game itself. I use the same data files, and to the best of my knowledge, the same basic algorithm to generate the items. The only (somewhat) meaningful difference between the client-side drops and my server-side drops on Iselia is the pseudorandom number generator used to govern it. Arguably, the PRNG that is used on Sylverant is much better (more random) than Sega’s was, and thus should produce more fair drops (albeit with the same rates that Sega’s files defined).
If you would like to test out this new functionality (and it could certainly use testing), please run the “/sdrops” command before creating a team on Iselia to enable it (you cannot enable it on pre-existing teams). Please report any oddities you may encounter while using teams with Server-side drops enabled so that I may investigate and fix them (this includes items being generated that shouldn’t be, as well as any disconnects or anything else that may happen along the way — of which there hopefully will be none, of course). The code for dealing with drops is quite large and complex, thus I fully expect there to be bugs in it still (I’m pretty much the only person who’s tested the full drop code thus far). The flag set by “/sdrops” will stay on until you turn it off (“/sdrops off”), you change ships/blocks, or you log off. The flag will not (currently) be saved to the shipgate with other preferences (although, it probably will in the future).
Each ship will be able to define its own list of server-side drops and will be able to regulate them as the administration of the ship sees fit. In addition, this functionality allows us to have events defined that could have special drop rates, if we see fit. These will be announced in advance (if we ever decide to do such a thing). I expect Vega to probably follow my lead with Iselia when they implement server-side drops there, and use the same data files that Sega did for client-side drops (whether they would take part in any special rates remains to be seen).
For all versions of PSO prior to Blue Burst, you will always have a choice whether to enable server-side drops or not (they are required on Blue Burst). If you do not enable the server-side drops, you would obviously not be able to take part in any special rates that the server would define.
Also, at the current time, PSOGC and Blue Burst do not have full support for server-side drops. This will come in time, once we’ve worked out any bugs in the v2 code. Also, server-side drops will be switched off when a quest is active, regardless of whether they were on before it was loaded. This will probably change in the future, but for the time being that’s how things are. Even when in-quest server-side drops are done, its likely that I will not enable them for Challenge or Battle modes, due to the general volatility of those modes.
Also, before anyone asks, no this does not mean that Dark Falz will start dropping Red Ring.
With that, I conclude this long-winded update, and go back on relative hiatus for a bit.