• 0

Who wants to help make a game?


Question

Ok folks, I'm working on a game.

I'm dead serious about this.

It's going to be a new MMOG, but unlike Evercrack or Ultima Offline it will be 100% dynamic (using technology based loosely on MUDs and MOOs). No more stagnant economy, or level dichotomy. No more waiting 6 months for new areas to open up. No more paying for a new expansion once a year.

I need a team of dedicated (and slightly insane) individuals.

I need programmers, artists, level designers, game designers, and of course testers (alpha testers for now, there will be an open beta later of course!) of all varieties.

This is an exciting possibility. Am I crazy? Entirely possible. But at the very least we're gonna give this thing our best shot.

Imagine a game universe where things change continually. New construction happens on a regular basis - daily or weekly new areas will open up.

Imagine having ALL the game players online whenever they want to be. No more "pick a server near you".

Imagine being able to make permanent changes to the game world. You set off a bomb, it blows up a building... the building stays blown up until someone fixes it.

Current direction of the game:

- One persistent universe. Yes, there will be multiple servers. But everyone is on all at once. The servers will represent different virtual aspects of the game world. Some servers will run NPC's exclusively, some will run geography (dungeons, etc.), some will provide other functionality.

- Graphics will be reminiscent of Baldur's Gate or DiZablo. 2D sprites with a 3D top-down isometric style.

- Game style is likely to be traditional swords-n-sorcery, although we might move it towards a more Final Fantasy-esque "steam powered" world. Not 100% sure yet, of course.

- Development language is pure Java. Not crapplet Java but real 100% honest-to-god-this-is-a-kickass-language Java.

Additional questions or comments? Direct 'em my way.

[email protected] (mail and MSN messenger)

gurm42 (AIM and Yahoo messenger)

453460 (ICQ)

- Gurm

Link to comment
https://www.neowin.net/forum/topic/22373-who-wants-to-help-make-a-game/
Share on other sites

Recommended Posts

  • 0

I, too, would really like to see it. I'm just ont convinced that the system wouldn't break on a regular basis as soon as you made a nasty enough change to the class. And how you'd read it in is WAY beyond me, you'd have to do all your own memory management. It just seems, at least on the surface, to go against so many of the improvements in modern programming languages, but maybe we're just missing something fundamental.

Wanna clue us in, Tom?

- Gurm

  • 0

Here's my input on this project. Not that everyone need to hear it... I'll make it short... cos I myself hate reading crap... :)

I have to stand on what Tom Server was saying. I agree with his understanding on the magnitude of the project task. I personally think that Tom was just reminding everyone the reality and weighing it with dreams. But one other fact seems to weight the outcome of this project. If infact Java is to be used in this project, I don't think this project is going to go anywhere. Sorry for the skeptitism. Java is not practical for a network gaming. It's too slow.

Don't take this personally when I say this. It takes a real genuine management to pull this off. If you can manage who will take care of what and who will take care of what sub-program, then I think you can pull it off. From the beginning of the thread, I did not see such management at work. If it is, he should request a person with specific skill for the available specific task needed. Management is the key to all successes in life. That's all I can say...

  • 0

You make a good point Krome.

Gurm, perhaps you should map out what tasks need to be accomplished, or if you aren't sure yourself, ask for someone to help map out a design. You said you're building off another MUD engine, so what would need to take place in order for it to meet your needs? If you know what the specifics are, it'll be much easier to recruit help based on those needs and the developers' strengths.

I thought about it in the shower, and I still can't figure out how you could load a class dynamically in C++. I don't think it is possible. Maybe Tom is mixing semantics. Exporting a class in a dynamic library is much different that what reflection accomplishes. You still need a class declaration in the client app so the compiler knows how much memory to allocate. Sharing data on the heap is not that big of a deal. Discovering new members of a class is.

Tom, please, kill my curiosity! :D

  • 0

Java is NOT too slow for network gaming. It IS too slow for the client side. Not because Java as a language is too slow, but because the graphics APIs thus far are.

If C# supports a sufficient amount of reflection, that might be a decent compromise.

I'm not building off a prior engine, I'm building off the theory behind a prior engine. I have a fair idea of what needs to be done, and how to dole out the work, but I was waiting for a substantial amount of interest and volunteers before I started seeing what everyone's strengths were and doling out tasks.

Anyhow, I'm going to try to be available as much as possible in #burningdesigns on dalnet. Anyone who wants to drop in and discuss this is welcome to - especially those who want to help.

If I'm not around, or not saying anything, IM me so my machine makes noise and I will come running.

- Gurm

  • 0

lol

it's Tom Servo, not Server :D

The 'class loader' wasn't written in C++, it was C. And it was all about modules exposing functions, see it as services (as MS would name it now). I just call it class loader coz someone else named it like that i think. I have to find the source code, coz it's like over a year ago I quitted it.

It mainly consisted out of a DLL loader which manages the loading, resolving/updating of entrypoints and calling the other modules back if one does unload. There was also a 'memory manager' which stored the data structures of each module, so they're preserved on unload. If you reload a newer module, it has to use the same data structures. It was pretty simple and only few lines of code, but was pretty robust. Each module announced its type and capabilities (which were a predefined set of constants).

E.g. in case of the MP3 decoder module, it would serialize stuff like the file handle, file position and various info about the file in a data structure and stuff it on the heap. Naturally the written modules should have been written with dynamic (un/re)loading in mind, coz you just cant rip some code out of memory and assume it working again after reload.

It worked this way (using the MP3 player as example). One module is the main module, which was the GUI. It looked out for a MP3 module with a set of functions it needed and 'linked' it. On start of playback, the MP3 module itself looked for an output plugin and a file reader, then started work.

You could make use of a derivation of it, when you write your server, as long the functions are threadsafe. A class ain't much different from a function that works on a data structure. Classes are just easier to use.

As said, you should avoid Java. It's pretty slow, at least my personal experience tell me that. You should also consider using .NET if you don't want to write native. Especially coz you can mix the languages, incl Managed C++. I compiled the Rotor version of it on FreeBSD and it works nice, the FCL ain't ported yet (which is on the way).

These days I don't program C anymore. I fell in love with C# and am writing my own IRC client in it atm (it was supposed to be a bot before) :D

  • 0

It makes sense now. Thanks, Tom.

I've been thinking about it still, it would take a lot of work to mimic reflection in C++, but it is probably doable. I'm not volunteering... lol. It would be an interesting case study, tho. It would probably kill any performance you would hope to get from C++.

Managed C++... (shudders) ewwwww! ;)

  • 0

Ahh Tom, this isn't what we're talking about. But you knew that, right? We're talking about reflection, and you're talking about dynamically hot swapping modules with similar exposed methods - something which while tricky and extremely useful, is not reflection by a long shot.

- Gurm

  • 0

Sorry if I'm not too familiar with the Java side of things, but..

Is dynamic class loading achieved via RMI? If so, isn't RMI a Java version of RPCs? I'm familiar with MS's version of RPCs, COM/DCOM. COM can be done through any MS supported language: C++, C#, VB, etc. What are the differences between RMI and COM? Advantages? Disadvantages?

From what I understand, both of these technologies achieve the same thing: Distributed computing. To me, that means:

  • Loading/unloading components/classes on the fly
    Accessing components/classes from basically anywhere
    No need to recompile old components

If those are some of the goals of this project, why should one technology be favored over the other? Is it because of actual technological limitations or user preference/experience?

Definitions for the acronymically challenged:

RPC - Remote Procedure Call (very old stuff)

CORBA - Common Object Request Broker Architecture (more current technology)

RMI - Remote Method Invocation

COM - Component Object Model (MS version of CORBA)

DCOM - Distributed Component Object Model (another MS technology)

  • 0

Oogle, what Gurm is trying to accomplish is quite different than RMI. Invoking a method remotely is only half the battle. Reflection is an API in the java.lang.reflect package. What it allows is the construction of new classes and modification of those classes' fields. It allows for on-the-fly discovery of the class interface, where as in RMI/RPC you have prior knowledge to the class interface you are working with. In COM/CORBA/et al, it is the onus of the component developer to publish and keep their interfaces immutable as to avoid breaking the client. In reflection, you aren't a fully aware of the classes capabilities, but you can discover what it can do during runtime.

I think that is the largest consideration when choosing a platform for this project. I do think it would be possible to write something in C++ to acheive reflection, but it would probably perform no better than the Java implementation. .NET support reflection, too, and from what I've seen, .NET performs much better than Java.

  • 0

Neat. This reflection stuff looks like magic :)

I guess my only question now are use-cases and scenarios with regards specifically to this project? How would the main program handle these "unknown" classes? Will it query the class about what it does, and then "change" itself accordingly to use the unknown class' methods? Man, I wish there was a design doc to explain how this stuff fits in.

I love it when programs program themselves. That leaves me with less to do!

  • 0

There is obviously a level of tinkering which WILL break the system. A core set of classes must be left alone in order to maintain stability.

And of course in order to keep track of things, there will of necessity be a large database of currently loaded classes and objects based on those classes, in order to make sure you're not trying to dynamically load up a class that has a dozen critical objects already created.

And yes, obviously you can't just make a new class that nothing references and expect it to magically DO something.

An example would be that you want to make a new room. Each room is an object of type room. But THIS room is going to be a new type of room, of a derived class named "transporter_room". You make the new class, then you figure out how the user gets there, and hook the exit of the previous room to this new room.

All of this sounds pretty mundane, until you realize that the engine has no idea what a "transporter_room" is, and will have to go load it up off the disk, or over the network, or wherever you specify for a location.

Now, let's say that nobody uses the transporter room because the transporter function is broken, for whatever reason. You modify the class, recompile it, and tell the engine to reload it. Of course you have to go through and make sure that objects based on it get refreshed (and perhaps in some cases destroyed and re-instantiated), which is why you maintain the master table.

But you can see how powerful this can be. You don't need to know ANYTHING about the class. Not its interfaces, not its methods, not its members. You just pull it off the disk, and start using it.

The program can query this new class to learn its interface if you so choose... or, if you're actively maintaining this program as it runs (as would be the case here) you can simply begin using those interfaces, since they are known to you.

- Gurm

  • 0
But you can see how powerful this can be. You don't need to know ANYTHING about the class. Not its interfaces, not its methods, not its members. You just pull it off the disk, and start using it.

The program can query this new class to learn its interface if you so choose... or, if you're actively maintaining this program as it runs (as would be the case here) you can simply begin using those interfaces, since they are known to you.

Does "maintaining" mean modifying? If so, wouldn't reflection be unnecessary then? If you (not the program) are actively maintaining the main program to coincide with new or modified classes, couldn't you just use RMI or IDL to accomplish the same thing? Both ends (main program & new/modified classes) ARE basically "agreeing" to a set of known interfaces every time you modify the main program, right?

Besides that, it seems to me like you'll end up with this problem:

  • Create new classes.
  • Modify the main program to use those classes.
  • Add more classes
  • Remodify the main program to use those classes.
  • Change some classes
  • Remodify the main program AGAIN to be compatible with those classes.
  • etc.

Doesn't this defeat the idea of "plug n' play" components? If outside dev. people wanted to contribute and you allowed them to make their own classes and derive their own custom interfaces, you'd have to constantly keep maintaining the main program to adjust and use those custom classes. Eventually you'd get into a situation where outside devs. are complaining about your main program's lack of support for their classes and interfaces. Components should be made such that the outside dev. can make basically whatever class they want without having to ask you to modify your main program.

There are 2 ways that I know of that can remedy this:

  1. Define a strict set of KNOWN interfaces that all devs must follow (i.e. the CORBA way)
  2. Have the main program query the class for its interfaces and adapt on the fly (via reflection)

I've always thought that the 2nd way was impossible until weenur showed me this cool reflection stuff. Keep in mind that in order to make the 2nd way work as efficiently as possible, you'd have to also implement some AI algorithms to make the program learn about unknown classes.

  • 0

I found this neat article on reflection from the java web site.

http://java.sun.com/docs/books/tutorial/re...lect/index.html

It mentions that reflection should only be used "if you are writing development tools such as debuggers, class browsers, and GUI builders". So does that mean that the player will also be able to make their own stuff while they're playing, using the game itself as an IDE? That would make for some awesome (albeit unbalanced) scenarios. It would also make it unneccesary to include a lot of AI, because the player himself/herself is describing and using the stuff.

  • 0

*ahem* Yes, those suggestions about reflection are just that - suggestions. As for continually updating the code, yeah. It'll happen. The idea is NOT to allow outside developers to create code. The idea is to be able to add to the game without shutting it down, or to be able to fix bugs without rebooting the server.

- Gurm

P.S. I _am_ open to suggestions for alternate ways to do this. The problem is that any non-reflection-based solution involves reading in massive amounts of data files. And every time you want to change how those data files are interpreted, you have to recompile the entire server. This is thoroughly time-consuming... UNLESS you set up a scripting language of sorts with very simple commands that build into bigger commands... and then you're basically building an interpreter and reflection. So why not just use what's already native?

  • 0
As for continually updating the code, yeah. It'll happen. The idea is NOT to allow outside developers to create code.
Allowing other devs to add to programs is just one advantage to componentization. Other more important advantages include easy upgradability and maintainance. I strongly recommend that you don't strive to make your program monolith in nature. It'll be built like a house of cards. As it get larger, it'll be harder to upgrade and it'll have a higher chance of failure.
The idea is to be able to add to the game without shutting it down, or to be able to fix bugs without rebooting the server.
Unfortunately, I realized just now how inexperienced I am with real-time systems when I did a google search on this idea. This problem isn't new. But the solution requires more knowledge than my BS degree education can currently provide. (pun intended :))
I _am_ open to suggestions for alternate ways to do this.
I did find some tech papers that deal with the topic. They're fairly high level, but it should give you an idea of what you're dealing with.

http://citeseer.nj.nec.com/update/485958

http://citeseer.nj.nec.com/update/433167

(Just click on the pictures to move to the next page)

  • 0

Ok, I'm on hiatus on Cape Cod until Monday (visiting friends/family), but I'll still check my e-mail if anyone needs to get in touch with me.

I looked into .NET last night (Border's cafe - a stack of reference manuals and a large Espresso. Gotta love it!), and it DOES seem to do the sort of reflection we need, albeit in a similar manner to Java 1.0 - meaning that we'd have to write an API around it, and precompile that API.

I'm more than willing to consider C# or J# as a viable alternative to Java. It would even allow us to write the client in C#, which would allow for code pushing and dynamic client updates as well.

Anyone else with an opinion on this - please either post here or e-mail me! We need to get the platform nailed down, and it seems that disparate schedules have prevented us from having meaningful dialogue in-channel.

Once we nail down the platform, however, we will be able to communicate more efficiently - the first engine prototype we build will have a chat, note-posting, and task logging system in it.

Oh, and the tentative working name for the engine, in case I failed to mention it before, is the "Persistence Engine".

- Gurm

  • 0

Would someone be willing to direct me to a good example or two of this style of game (that I can try -- hopefully at least with a free trial :))?

I have thoroughly enjoyed following this discussion. Not being someone who plays games very often, I am having trouble picturing the end result of this project. I don't even know if I have played this type of game before.

Of course I realize this project will try to create a more advanced game than has been done before. So some roughly similar examples would be nice.

  • 0

As an experienced mmorpg gamer (I've practically played them all) and a programmer, I wouldn't mind helping you as well. However, this is a fairly major project, and without a financial backing, it wont be easy. Either way, I would love to help.

  • 0

I would also program the server platform for the .NET framework. Especially coz this leaves more freedom to the programmers. If someone wants to code stuff in Fortran.NET he shall do so. Same for me, refusing to program J# or Java. ( :D )

I think also there's Pascal.NET, so the Delphi programmers feel comfy.

  • 0

I have looked into C#, and its reflection DOES seem sufficiently robust to support what we are looking for. However, some wrapper code would have to be written which already exists in the Java 1.x API. I'm not opposed to writing this, especially if it would let us target the increased speed of the .NET platform. Additionally, this move would eliminate the need to have the server written in one language and the client in another. Thus, if we wanted to enable load-sharing on the client side, writing the client in C# as well as the server would certainly facilitate that process.

I _do_ still need to discuss it with the entire programming team. Folks, give me a ring on messenger, or drop into the channel. We all need to talk, and I know that working out disparate schedules is a pain, but it DOES need to happen.

- Gurm

  • 0

Ok, here's the skinny.

Everyone who wants to be on this team, report to:

http://pub34.ezboard.com/bburningdesigns

Sign in, introduce yourself in the greeting thread, and we'll get this show on the road.

Also, ongoing realtime chat is happening in:

#burningdesigns on Dalnet.

- Gurm

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • First time clicking on a Sayan Sen article after he started making clickbait, vague headlines recently. Didn't read, just came here to say the headline doesn't look like very cheap, vague clickbait this time. Are you okay?
    • Good review, and yeah the benchmark breakdown is pretty clear but also a little messy in a good way. It’s kinda interesting to see where the RX 9070 GRE slides in between the 7800 XT and the 9070 XT , especially when it comes to AI tasks and Blender style workloads. The side by side with Nvidia’s RTX 5070 and 4070 makes it feel obvious just how competitive the mid range GPU scene has gotten lately, and that’s great for creators and gamers too since you can pick based on your priorities rather than only chasing one single thing.
    • That's it. I finally uninstalled Firefox because they often keep pushing buggy updates, only to test them later and make users suffer. No longer is it my alternative browser to Edge. What a waste of energy. Firefox is bad for the environment, just like Chrome (wasting RAM/energy).
    • Microsoft Weekly: new Surface, Windows 11 26H2, and more by Taras Buria This week's news recap is here, with Microsoft announcing Windows 11 version 26H2, launching new Surface devices powered by Snapdragon X2 processors, GTA VI preorder date and cover art, fresh Windows 11 preview builds, a quirky phone-sized e-reader with a physical dial, and more. Quick links: Windows 10 and 11 Windows Insider Program Updates are available Reviews are in Gaming news Great deals to check Windows 11 and Windows 10 Here, we talk about everything happening around Microsoft's latest operating system in the Stable channel and preview builds: new features, removed features, controversies, bugs, interesting findings, and more. And, of course, you may find a word or two about older versions. Windows 11 version 26H2 is now official. Alongside Windows 11's new preview builds released this week, Microsoft confirmed version 26H2, which is coming later this year as an enablement package based on the same platform as versions 24H2 and 25H2. A newly published blog post details what IT admins should do to prepare for the upcoming launch. Next, we have new Windows 11 bugs. Users report that this month's security updates for Windows 11 cause all sorts of issues, including BitLocker bugs, OneDrive issues, black screens of death, and third-party integration in Office apps. Microsoft has not confirmed those yet, but it acknowledged other issues with its operating system. What Microsoft has confirmed is a bug where Recycle Bin delete prompts display internal file names instead of actual ones, and a year-old Windows JScript compatibility bug caused by security-focused engine changes. Moving to more positive news, Microsoft and Adobe are working on improving Windows performance in popular creative apps like Photoshop. Thanks to SPGO optimizations, users can expect up to 20% better performance. Finally, we have a few useful articles that can help you recover your PC or make it perform better. For one, we published a guide detailing what to do if your computer cannot boot after a clean Windows 11 install. There are two important steps you can try to get your system back to working in no time. Additionally, there is a more detailed guide on various CPU performance modes that could notably improve performance. Windows Insider Program Here is what Microsoft released for Windows Insiders this week: Builds Canary Channel Builds 28120.2315 and 29613.1000 These two builds include a new built-in audio driver, improvements to audio Settings, and more. Dev Channel Builds 26300.8697 and 26220.8690 Not much is available here. Some File Explorer improvements, Start menu enhancements, bug fixes, and more. However, build 26300.8697 is now officially marked as version 26H2. Updates are available This section covers software, firmware, and other notable updates (released and coming soon) delivering new features, security fixes, improvements, patches, and more from Microsoft and third parties. This week, Microsoft announced its newest Surface devices powered by Qualcomm's latest Snapdragon X2 processors. There is the 12th-gen Surface Pro and the 8th-gen Surface Laptop. Both devices feature little to no visual differences compared to their predecessors from 2024, and most changes hide inside, including a better processor, faster graphics, enhanced NPUs, and more. The Surface Laptop also received a new haptic trackpad. Mozilla is currently working on a major Firefox redesign, and earlier this week, it published a roadmap of upcoming features and highlights of the upcoming "Project Nova" rework. Files, one of the best file managers for Windows 10 and 11, has been updated in the Preview channel with a long-requested feature. Tree View is finally available in version 4.1.4, allowing you to quickly browse deeply nested folders without leaving the main view. In addition, the update improved the Windows Fonts folder, allowing you to preview each font without opening the default viewer. Rufus, another useful Windows 11 utility, also received a notable update. Version 4.15 arrived as beta with important fixes for silent Windows 11 installation. It also includes patches for ARM-based Windows PCs, OneDrive removal improvements, and more. Here are other updates and releases you may find interesting: Microsoft faces shareholder lawsuit over masking AI costs and slowing Azure growth Microsoft now allows you to tweak Visual Studio to new extremes Microsoft brings Planner Agent to all Microsoft 365 Copilot users Microsoft fixes one of Excel Copilot's most frustrating limitations Microsoft will finally let you sign in to Edge with a Google account Here are the latest drivers and firmware updates released this week: NVIDIA 610.62 with support for Empulse and various fixes. Reviews are in Here is the hardware and software we reviewed this week Earlier this week, we reviewed the DuRoBo Krono, a portable, phone-sized e-reader with some interesting physical controls. This device has an Apple Watch-like dial for page turning, frontlight adjustment, and more. Software is simple and no-nonsense, but it also lacks some useful features and customization. Overall, the device proved interesting, but not flawless. On the gaming side Learn about upcoming game releases, Xbox rumors, new hardware, software updates, freebies, deals, discounts, and more. Forza Horizon 6 received two big updates this week. Alongside the Series 2 content update, developers pushed plenty of bug fixes and balancing tweaks. However, they also had to acknowledge the Eliminator CR-farming exploit and shut down the online mode temporarily. Luckily, only a few days later, another fix arrived, which re-enabled Eliminator and patched the exploit. Microsoft announced new games for Game Pass subscribers. Those include EA Sports FC 26, Junkster, Call of Duty: Vanguard, Abyssus, RV There Yet?, and more. Some existing games are leaving the catalog, so be sure to check out the full list here. New games are also available for GeForce NOW subscribers, and they include Embers of the Uncrowned Demo, Aphelion, Megastore Simulator, OPERATOR, Citizen Sleeper, and more. Rockstart Games had plenty of GTA-related news this week. For one, the company gave GTA V players another free update. Those still playing the game on Xbox One and PlayStation 4 are no longer required to pay $40 to upgrade to the latest-gen version. More importantly, Rockstar Games revealed the GTA VI cover art and announced the preorder date. The Epic Games Store is giving away two games: Citizen Sleeper and Roboeat. These two titles are up for grabs until next Thursday, but if they are not up to your taste, you can always check out the latest Weekend PC Game Deal issue, which is usually full of discounts and specials that let you save a lot of money on new games. Great deals to check Every week, we cover many deals on different hardware and software. The following discounts are still available, so check them out. You might find something you want or need. GEEKOM X16 Pro at GEEKOM - $1,119.67 | 17% off Acer 4K Webcam for PC/Mac with All-Metal Unibody Sculpted - $59.99 | 14% off Samsung 990 PRO SSD 2TB - $369.99 | 42% off Nothing Ear Wireless Earbuds Bluetooth - $73.15 | 51% off PowerColor Reaper AMD Radeon RX 9070 16GB - $579.99 | 17% off This link will take you to other issues of the Microsoft Weekly series. You can also support Neowin by registering for a free member account or subscribing for extra member benefits, along with an ad-free tier option.
  • Recent Achievements

    • Week One Done
      Supreme Spray LV earned a badge
      Week One Done
    • One Month Later
      Genuinetonerink- Dubai earned a badge
      One Month Later
    • Week One Done
      Genuinetonerink- Dubai earned a badge
      Week One Done
    • One Year In
      hhgygy earned a badge
      One Year In
    • Week One Done
      AMV earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      514
    2. 2
      +Edouard
      171
    3. 3
      PsYcHoKiLLa
      84
    4. 4
      Steven P.
      74
    5. 5
      Michael Scrip
      72
  • Tell a friend

    Love Neowin? Tell a friend!