ID:275947
 
Hello everyone, I've finally gotten sick of admining the Windows systems I had in the house and am in the process of forcing my wife and kids to use FreeBSD. I sadly lack any Win-fu, but know FreeBSD like the back of my hand. Well, I had everyone make up a list of "Stuff they ``need'' to do" on their systems, and both of the kids said they needed BYOND (I had never heard of it before) I told them not to expect it, but I would see what I could do.

Well, after investigating, imagine my surprise that I actually found a FreeBSD copy of BYOND!

Unfortunately of course, it's not really useable for playing games (which, also of course, is what the kids want to do with it) so I was wondering, is there anything I could do to help make a graphical DreamSeeker possible? I'm a professional C programmer, and I am familiar with C++ (I don't do C++ professionally, and am a bit rusty with it, but do use it in my hobby work). I also am familiar with porting software from Win32 to FreeBSD (as well as Linux and Solaris)

What I'm wondering is if there is anything I can do to help with the progress of this? ie: Write a library or two to provide the functionality that the graphical DreamSeeker needs. Of course, I am most definately not expecting access to the source... it would be nice, but *I* wouldn't give it to me, so I hardly expect anyone else to.

I'm perfectly willing to assign copyright to Dantom International and give them full control over the distribution of said libraries. My only interest here is getting the games my kids love to run on the systems I'm forcing them to use.
On a side note, a non-graphical BYOND is perfect for text mode games...but I don't suppose your children are into them.

-- Hopefully you can help, It'd be a benefit to the entire community to see it happen. In the mean time, you can always buy a Windows emulator for running BYOND (windows version) on, as coming out with new versions of BYOND always seem to happen only every other odd ice age.
Well, from what I have heard, you could create a terminal type thing made for byond. Taking what it normaly sends to a terminal and changing it to be more GUI friendly(Text Window/ Text Icons). I have seen people play around with it in windows, doing things like creating chatbots and a detached map. I would love to see a GUI for *nix/BDS. That would rock. I personally love my linux desktop, but have to run VMWare to program and test my byond games/demos/programs.
Unless you know how to flawlessly port BitBlt to a UNIX system, I doubt you can help all that much right now. In the future we may move on to OpenGL for our graphical support, at which point it wouldn't be much for the current developers to port a graphical client to other operating systems. Right now our graphics engine is based heavily on Windows-dependant systems.
In response to Nadrew
As Nadrew mentions, the gui-version of DreamSeeker currently relies heavily on windows-specific features. So at the moment, your children would only be able to access graphical BYOND games via a Windows box, or via emulation from something like VMware (though I am not aware of a FreeBSD port of VMware at this point). The FreeBSD, Linux, and MacOS X versions are pretty much limited to hosting games via DreamDaemon, or playing text-based games via DreamSeeker.

If you are interested in contributing to a *nix-based graphical client, the best bet would be to talk directly with Dan/Tom/Mike H/LummoxJr about it.

One method of contact can be http://www.byond.com/support/support.cgi or check back to see if one of those persons I mentioned above responds to this thread.

Good Luck! I, for one, would love to see a *nix-based DS gui.


In response to Nadrew
Nadrew wrote:
Unless you know how to flawlessly port BitBlt to a UNIX system, I doubt you can help all that much right now.

I wouldn't be quite so pessimistic. There's plenty that could be done now that would help speed along the effort of porting the gui to non-Windows systems. As Real_Deuce guessed, we can't give out the source code, but perhaps we can supply enough information that a usable gui shell could be created for us to hook into.

First of all, the Windows client does use BitBlt, but there's absolutely no reason why any other version needs to use that or emulate it. The BYOND source code is fairly well compartmentalized between back end and front end, so in theory any front end can be stuck onto the back end. The text clients for Unix are just that - an alternate front end for exactly the same back end as the Windows version. The drawing implementation in another gui client doesn't need to have anything in common with the current Windows implementation.

Of course, we gain quite a lot by using the same implementation across platforms. That's why, as you said, we've considered moving to OpenGL in the future. It would be nice to have more of the code shared across platforms so that updates don't have to be coded 3 or 4 times. If I had the time to start working on a gui for another platform (and how I wish I did!), I'd use OpenGL with a mind for portability.

That said, let me outline a little bit of what we'd need for a new gui client. If you (Real_Deuce) are, or the community at large is interested in creating a sort of gui shell that we could marry to the BYOND back end, we would absolutely welcome such an effort. It could make a fabulous community project. In the past, we've thought about publishing an interface and documentation for exactly all of the functions a user interface would need to implement. That way anyone in the community could make their own interface for any supported platform, relieving us from having to do it all. Unfortunately we haven't quite had the time to do it, and other things are higher priorities right now. But if someone were to create a shell that was actually usable, that could definitely help bump up the priority for us.

This is by no means a complete list, but it's a start; perhaps it will help you gauge whether you want to undertake such a thing.

The most obvious piece is that you need to mimic the basic controls in the Windows DreamSeeker fairly well. But this is a bit dubious, because in BYOND 4.0, that will change; game developers will have much more control over the interface, making it a much more dynamic entity than the fairly static window we have now. But hey, at least it's a start. For this you would need:
  • The map window, resizable, with the ability to draw arbitrary pixels/blocks and text.
  • Accept the following events in the map window:
    • Mouse movement
    • Mouse leaving
    • Left button down/up, right button up
    • Left button double click
    • Window expose events
  • Text output window, accepting basic HTML for formatting (<font>, <b>, <i>, <center>, <a>, and others...)
  • Stat and verb panels, dynamically created and updated, with clickable text/images
  • Command input box
  • Embedded browser element (maybe based on Gecko?)


I'm sure there's plenty else that I've missed, but a graphical shell implementing all (or most) of the above would be a fabulous start. In order for us to use it, it would necessarily have to use a license like the BSD license. Anything GPL we can't use due to the requirement to release all source code. And in the event that this does generate something we would want to use, we could certainly talk about terms of use.

The only other thing I would add is that we've thought about moving to a cross-platform widget library at some point. Something like wxWidgets looks pretty promising. If anyone decides to embark upon this project, we'd encourage you to use that or something like it, for maximum ease of porting.

If members of the community can produce something like this that's useful to us, I'll be very impressed! Otherwise, we promise we'll get to it Eventually(tm). :)
In response to Mike H
Mike H wrote:
Of course, we gain quite a lot by using the same implementation across platforms. That's why, as you said, we've considered moving to OpenGL in the future. It would be nice to have more of the code shared across platforms so that updates don't have to be coded 3 or 4 times. If I had the time to start working on a gui for another platform (and how I wish I did!), I'd use OpenGL with a mind for portability.

I personally think OpenGL would be the wrong way to go... unless you're adding full 3-D support. There's numerous lightweight graphics engines (most of which support OpenGL too) that can do the same with less work (SDK - http://www.libsdk.org/ leaps unbidden to mind)

The most obvious piece is that you need to mimic the basic controls in the Windows DreamSeeker fairly well. But this is a bit dubious, because in BYOND 4.0, that will change; game developers will have much more control over the interface, making it a much more dynamic entity than the fairly static window we have now. But hey, at least it's a start. For this you would need:
  • The map window, resizable, with the ability to draw arbitrary pixels/blocks and text.
  • Accept the following events in the map window:
    • Mouse movement
    • Mouse leaving
    • Left button down/up, right button up
    • Left button double click
    • Window expose events
  • Text output window, accepting basic HTML for formatting (<font>, <b>, <i>, <center>, <a>, and others...)
  • Stat and verb panels, dynamically created and updated, with clickable text/images
  • Command input box
  • Embedded browser element (maybe based on Gecko?)

I'm sure there's plenty else that I've missed, but a graphical shell implementing all (or most) of the above would be a fabulous start. In order for us to use it, it would necessarily have to use a license like the BSD license. Anything GPL we can't use due to the requirement to release all source code. And in the event that this does generate something we would want to use, we could certainly talk about terms of use.

Most of this (except for the full embedded browser) sounds pretty straighforward and doable... obviously, I'll need to play with the Windows client for a bit to tell for sure.

The only other thing I would add is that we've thought about moving to a cross-platform widget library at some point. Something like wxWidgets looks pretty promising. If anyone decides to embark upon this project, we'd encourage you to use that or something like it, for maximum ease of porting.

I'd be more likely to use fltk... http://www.fltk.org as I've used it in the past with good results.

If members of the community can produce something like this that's useful to us, I'll be very impressed! Otherwise, we promise we'll get to it Eventually(tm). :)

I'll try out the Win32 client and get back to you.
In response to Real_Deuce
You mean libSDL, right?
In response to Jon88
Jon88 wrote:
You mean libSDL, right?

Right, of course. http://www.libsdl.com/
In response to Real_Deuce
er, probably meant http://www.libsdl.org/ .org not .com

:)

(dang those top-level domain names!)
In response to Real_Deuce
Real_Deuce wrote:
I personally think OpenGL would be the wrong way to go... unless you're adding full 3-D support. There's numerous lightweight graphics engines (most of which support OpenGL too) that can do the same with less work (SDL - http://www.libsdl.org/ leaps unbidden to mind)

SDL is great, but I've heard that it can be a bit jerky when scrolling an entire screen at once (unless using OpenGL), which would be an issue for BYOND ... haven't tried it myself though, so I don't know for sure.

Most of this (except for the full embedded browser) sounds pretty straighforward and doable... obviously, I'll need to play with the Windows client for a bit to tell for sure.

Yeah, there's nothing particularly Windows-specific about the interface design itself.

I'd be more likely to use fltk... http://www.fltk.org as I've used it in the past with good results.

wxWidgets is a very nice library, but that looks good too. Six of one, half a dozen of the other. =)

I'd be more than happy to lend some of my spare time (when I have some...) to the project, if it's going to be an open thing rather than something you're planning to do yourself (either one is great).
In response to digitalmouse
digitalmouse wrote:
er, probably meant http://www.libsdl.org/ .org not .com

:)

Of course again. *sigh*
Tell you what, I'll stop posting URLs now and get to work. Once I get some initial stuff worked out, I'll start up a SourceForge project. My roadmap is basically this:

1) Layout the basic interface using FLUID with stub callbacks for the events Mike_T mentioned.
2) Whip up a few demo bits.
3) Put it up on SourceForge under the MIT licence (even less restrictive than the BSD one... bascially "Do whatever you like except claim to have written it")
4) At that time, allow others to help out (I'll just be using the basic Fl_Help widget for the embedded browser... which I expect to do a terrible job. I've never embedded Gecko, and expect it to be the trickiest and most questionable bit)
5) Hope for either some protocol specs, or a working *nix client to emerge from Dantom.

At the moment, my main system is churning away at rebuilding OpenOffice.org, so it'll probobly be Sunday before I get started.
In response to Real_Deuce
I Googled around a bit and found this - I'm not sure how easy it is to use, but it's nice that somebody's done at least some of the work. =)

Of course, that requires using wxWidgets... *shrug*