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.
For the first time ever in the history of PSO V1/ V2 and PC, quest drops will be editable. This definitely makes the game more fun to play. I’m excited! GREAT JOB!
Major congratulations are in order for BlueCrab for putting this together, as well as Lee for all the work he’s done in figuring out how PSO’s files work.
Before you get too excited Tream, pay close attention to the end of the post, where BlueCrab said that server-side drops aren’t enabled in quests at all yet, so passing the drop generation back to the client means that rares still won’t drop in quests. Adding that support will require a lot more work, and the basic freeplay drops still need a lot of testing, as BlueCrab already said.
In addition to echoing BlueCrab’s request for people to test the new drop system, I’ll also suggest that it would be a good idea to test with /legit mode enabled, so that the items you get are compared against the limits file. Even if you’re not that familiar with what should drop where, noting any instances where the items you find get flagged as illegitimate by the legit checker will be of great help, since all drops generated from Sega’s files should pass the check (if the implementation is correct). Hopefully no invalid items will appear, but opening up the feature to the general server population is bound to uncover some things that were missed.
Thanks to BlueCrab’s efforts, Sylverant continues to introduce incremental improvements to our PSO experience. 😀
Actually, the server-side drops aren’t checked against the legit checker as of yet. I guess I never thought about that. 😛
I’ll probably add that in sometime in the nearish future (possibly later today), but change the penalty associated with it in server-side drops (since it doesn’t make much sense to boot people out of the game if the server drops something invalid).
You’re right, but I guess that info wasn’t available at the time I posted the comment.
Anyways, kudos to Lee as well 😉
I didn’t change the post (other than to fix a few minor grammatical mistakes) since I posted it, so I guess you just missed it somehow. 😉
Anyway, the legit check is now run on the items dropped by the server, regardless of whether or not the game is in legit mode (since they really should always be legit). If it detects something invalid has been generated, it simply won’t drop in the game, and a warning will be spit out to the server-side debugging log. 🙂
You can still (of course) use legit mode for its other protections along with the server-side drops.
Oops, my bad 😀
Woa, well thought! Glad to hear. Cheers!
‘and to the best of my knowledge, the same basic algorithm to generate the items.’
If ives sent you the delphi routine I use from my calculator, it’s just the function i converted from the assembly in the xbox and pc clients of pso and should be 100% accurate anyway, even if it appears to have a signed value conflict and doesn’t know what to do with values below 32 lol….. blame sega.
[…] these updates, i want to say congrats to all that were involved in this, it’s not often that you hear that […]
Lots of updates! Thanks dude