• Register

Gamebryo engine (Bethesda's branch) reimplementation based on OpenMW and id Tech 4 sources

  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
Post article RSS Articles

If you've read the previous articles, you already know that the engine will support multiplayer and that the game framework architecture will be using the client-server model with an authoritative server. What that means is that the game state will be stored on the server-side while the clients will be simulating some parts of it locally to keep the gameplay responsive. Although, it is currently unclear whether the cell data should also be authoritative. The entities will be stored and processed on the server-side but the level/cell data can either be (partially) controlled by clients or kept fully authoritative (server-side).

There are two possible distinct implementations in mind:
1) Let the clients load cells data from their local game cache (Client-side level streaming);
2) Load the cell data on the server-side and send it to the clients forcing them to use the same cell data as on the server (Server-side level streaming);

For better understanding, some clarifications should be made. In both cases, it will be required for the server to keep track of the current cell each player is in and send cell/chunk loading/unloading commands to them. But, in the first case, we only need to send the command and cell's id to load/unload. Each client will load its local cell data from the file. That reduces the amount of data we need to send through the network but allows the clients to load their own versions of cell data, whether its the same as on the server or not. In other words, the client can have a modified version of a specific cell that the server tells him to load into memory from the file. And, even though that means that only this particular client will have a modified version of the cell without affecting anyone else, that's not the perfect solution, because it can cause some issues between the server and client communication and state synchronization.

In order to avoid that, one of the possible solutions is to make the world cells data authoritative by using the server-side versions of the game assets and sending that data over to clients in some kind of format for reconstruction on the client-side. So there will be some kind of cell cache from the server that clients will be using along with the cell streaming commands mentioned above.

The cell cache will be represented by some sort of collection of textual representation (like XML) of the cell received from the server that the client will reconstruct locally to use it for rendering purposes and for local simulation (including collision detection). This pretty much will work the same way as in, Minecraft, for example. The only difference is that the Minecraft server sends chunk data which holds the chunk's blocks data, while the cell will hold data about objects placed on it.

What are the benefits of server-side cell/level streaming? The main benefit is that it will allow all clients to have the same version of the cell/level and the whole map. It will be the same one as used by the server itself. And that also means that the server could have a modified version of certain cells brought by some mods, for example, that will work for all clients. Yes, this will allow server admins to install mods that modify the game map and those changes will be reflected on all connected clients! This won't be possible if we keep the cell streaming client-side only.

There is also a high probability that the server will have the same (or slightly changed in 1-2 cells) version of the world as the clients. In that case, we can make optimization and skip the server-side version download by caching the local version instead.

Engine Architecture Overview

Engine Architecture Overview

News 1 comment

Some brief explanation of new engine architecture

Why id Tech 4? (And some engine history)

Why id Tech 4? (And some engine history)

News

The reasoning of why id Tech 4 (BFG) is used as a base for the engine

Add game Games
F3GOATY (F3BFG)

F3GOATY (F3BFG)

Role Playing

Fallout 3 + Fallout New Vegas reimplementation using the reimplemented engine

Post comment Comments  (0 - 10 of 12)
BlackPhrase Creator
BlackPhrase

Any potential contributors around here? What prevents you from making contributions? Is the code too hard to understand? The lack of proper documentation? Or is it hard to understand what you can and cannot do without the Contributing Guidelines? Let me know!

Reply Good karma+1 vote
Guest
Guest

I'm just not sure what i need to compile it

Reply Good karma Bad karma0 votes
BlackPhrase Creator
BlackPhrase

Thanks for the feedback!
I'll update the README with info on that later

At this point, you either need SDL2 or nothing if you're targetting Windows (and don't want SDL2) + SBE libs
If building with the SDL2, you need to set up its path manually in CMake options
That's for the master branch
The dev branch will try to find the SDL2 package through CMake, but on Windows, you may have to do the same as I wrote above and set up its path manually
You can get SDL2's dev libs from here
Libsdl.org
You also need to clone this repo locally
Gitlab.com
and set the "SBE_LIBS_PATH" CMake var's value to that local path

I'm not sure if you will be able to compile it successfully, though, cuz the current master still targets x32, while the SBE-libs already modified for x64 support only, but you can try to use an earlier version of the repo. If I remember correctly, there was only an MSVC lib, so you might have to manually upgrade it with this
Openal-soft.org

You can try to build it yourself using both MSVC/MinGW on Windows - should be buildable both w/ and w/o the SDL2 support. It should also technically be buildable on Linux and macOS but haven't tested it yet. Don't remember OAL-Soft having libs for them, so you probably can build with OpenAL sound backend turned off (SBE_USE_OPENAL CMake var) and SDL2 turned on (SBE_USE_SDL CMake var)

Let me know about your results so I can fix the issues for the next release!

Reply Good karma+1 vote
Argoon
Argoon

Has a idtech 4 modder (non BFG), i'm very curious on how will you "marry" such different engines, not only on code philosophies but on capabilities, if you are able to do this, kudos for you.

Btw what GUI system will you use for this engine, flash?

Reply Good karma Bad karma+1 vote
BlackPhrase Creator
BlackPhrase

UPD: Though it's not fully decided yet, that might also be CEGUI, which was used by VaultMP and which codebase pieces we're also reusing in the engine. Or it might any other GUI lib with built-in XML support

Reply Good karma+1 vote
BlackPhrase Creator
BlackPhrase

It's not necessary for us to keep backward compatibility with id Tech4, so we're free to modify the whole codebase for our own purposes

Flash would suit better for an F4/F76 reimplementation as they're both using .swf for GUI. F3 and FNV are using .xml files for layout. OpenMW's devs chose MyGUI which supports them, so the plan is to use MyGUI too

Reply Good karma+2 votes
Argoon
Argoon

I would go for MyGUI as well or even IMGUI, flash is used on BFG but imo is more complicated to work with, there's also zero tutorials on how to make flash guis for that engine, is one of the reasons no one makes big mods for Doom 3 BFG.

Reply Good karma Bad karma+1 vote
BlackPhrase Creator
BlackPhrase

ImGui will also be supported, but only as a GUI for devs and used only for debugging purposes

Reply Good karma+1 vote
Eagle12687
Eagle12687

Yes! Yes! Yes! I will be able to play Fallout 3 on Linux! Fallout: New Vegas and Morrowind are my two favorite games!

Romans 4:4-5
“Now to him that worketh is the reward not reckoned of grace, but of debt. But to him that worketh not, but believeth on him that justifieth the ungodly, his faith is counted for righteousness.” (KJV)

Reply Good karma Bad karma+1 vote
omaranwar
omaranwar

how Can I Get this Engine?

Reply Good karma Bad karma+1 vote
Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account:

X