Another PSOBB Server Implementation

Xenon

Member
Hey guys,

Just wanted to share a side project I've been working on. I've wanted to build a PSOBB server since the days I played on Schthack so I've been writing my own implementation when I have free time. I'm learning by picking apart the sources of Tethealla, Newserv, and Sylverant, so my progress is pretty gated by my willingness to sit down with my notes and dig. I was pretty active in the modding community around the tail end of when Sega's servers were still live but these implementations were released before I even knew how to code; I'm getting into this pretty late. Thus far I've written a decent patch server and am currently working my way through the character portion of the login server (which is a challenge, as each server handles the specifics pretty differently).

My project is totally open source, you can find it here if you're interested: https://github.com/dcrodman/archon. The patch server is written in C++ (really mostly C) and I've switched over to Go for numerous reasons, so I still need to port my earlier work.

Some features/stuff I've laid the groundwork for or can already claim:
  • Cross Platform (If you can install Go and run MySQL, you can compile the server)
  • Multithreaded (Goroutines make this way easier)
  • Scalable and Efficient
  • Easy to Configure (uses JSON files)
  • Stable
  • Robust and Clean Architecture
Feedback, contributions, etc are more than welcome! I'm not at all familiar with the tools that were written for performing various tasks nor do I know much about the work that's been done on the client side (I don't have much reverse engineering experience) so any info there is really helpful. I know there are notes on the protocol around somewhere but I'm mostly working off of my own observations from the awesome work that Sodaboy, Fuzzier, and BlueCrab have all put into their servers (and to whom I owe an outrageous amount of credit). That said, details on the protocol are also greatly appreciated!

It's far from ready but now that I'm out of college I've been able to put time into it a little more consistently and development is moving along pretty steadily. Hopefully it ends up a worthwhile contribution to the PSOBB community (Sorry for the long post)!
 

Chuk

Member
In case you were still looking for a basic onverview of the PSOBB protocol, I mostly use this one

http://sylverant.net/wiki/index.php/Cat ... r_Protocol

It's not complete and sometimes contains small errors but overall I think it's useful to know where you need to start digging. I asked tofuman to add a similar page on this website that can be edited by people but I don't think it's done yet.

As for your server, I must admit that I don't have any experience with th Go language but it seems quite close to C at first glance. What part of the server is working so far? (I'm writing a C# version atm, but it's still in a much earlier stage than yours atm)
 

Xenon

Member
Thanks, I've actually had that one bookmarked for a while but it doesn't cover much of the BB protocol and there are enough discrepancies between the DC and BB that I've been hesitant to use it. BlueCrab used to have another wiki up mostly dedicated to BB, unfortunately wikia was apparently going to start charging him for it so he took it down. I've been meaning to start one from my own notes (which I believe are accurate since everything seems to work so far) but it's kind of on the back burner.

Go is a simple (and also rather unusual) language, I spent a few days learning it before I jumped in and started archon. I've found it to be something of a niche language, but it maps really well to the sorts of problems I've needed to solve for this project. Thus far the patch server is more or less fully working, though I still need to port it to Go for the sake of uniformity since I was using C++ when I started it. As for the login server, I think I'm about 3/4 of the way done. I still need to figure out how to handle the character defaults, how best to store the character data (I'm trying to avoid a blob), and what packets I need to send after the character creation flow.
 

Broomop

Member
Avoiding blob is much needed. :D if anyone remakes a server this is a MUST! there's no need for the blobs.
 

Xenon

Member
I think I'm just going to end up storing the character fields individually, though there are a couple I still haven't'the figured out how to store yet. The character defaults are also a pain, Newserv uses flat files (one per character) and Tethealla seems to just lump (and store) everything in binary form and then index into it using the character type from E5. I'd like the stats to be easier to change but doing that cleanly is an interesting challenge.
 

Broomop

Member
it shouldnt be hard just map the layout to the database. like its seperating it in teth once its read lol.
 

Xenon

Member
For anyone keeping an eye on how this is doing, the patch server is completely finished and the login server only has the default inventory and techniques left to do. I'll go and backfill those once I know the exact format and how they're used. Next up are the Shipgate and Ship servers, the latter of which I expect to be the most interesting and by far the most troublesome :D
 

Sodaboy

Administrator
Staff member
Good job! Nice to know another person who is working on PSO, especially someone who is local to me too.
 

Xenon

Member
Thanks! Glad to know there's interest around it. I'm doing my best to keep the installation docs up to date on Github and the code well commented to encourage people to poke around, but there's only so much one can do until I start working on the ship server.
 
Top