[Emulator/C++] Emulating Darkorbit Classic [WIP]

01/31/2021 03:06 Exenu#1
Hi everyone,

I've been developing an emulator the classic version of DarkOrbit (before the new client) for around a year now.

The Emulator will be precisely emulating the 2008/2009 era.

I won't bore you with the details on why I decided to emulate the classic version; so I will skip straight to the technical details of the emulator.

Note; Thread is still in progress and emulator is not released yet till main core gameplay is coded.

Source code:
[Only registered and activated users can see links. Click Here To Register...]
---------------------------------------------------------------

Technical Details

The Daemon Emulator is coded in C++17. Using the following libraries:
  • MYSQL C v5.6
  • Boost v6.6
  • OpenSSL v1.1
  • SFMT v1 (Customised)

Networking
- Using Boost ASIO with the capability of asynchronous operations.

Database
- Using MYSQL C - Using own wrapper class which supports synchronous/asynchronous queries.

Logger
- Using own Logger class which supports the standard logging configurations: INFO, WARNING, ERROR, VERBOSE, ASSERT.
- Logs to terminal console or/and file.
- Thread Safe.

Configuration File
- Using own configuration.
- Thread Safe

Thread Pooling
- Using own Thread Pooling class.
- Optimises existing running threads and their tasks; pushes/pops tasks to other threads depending on performance on said thread.
- Thread Pooling launches x amount of threads as default depending on your machine specifications (can be changed through configuration).
- Threads are split into types:
*Inclusive: Runs multiple tasks.
*Exclusive: Only runs one task.
*Critical: Launch new task on new thread ignoring hardware concurrency.

Design Flow
  • Maps:- Maps are separated into zones handled by a zone manager; zones can be multi-threaded for example; running 3 threads will designate 9 maps per zone - You can set this in the configuration option. Also maps are split into grids, each grid is independent and is dynamic (does not update if no there is no activity).
  • Packets:- Packets are split into three different stages: Player Thread, World Thread and Map Thread. This ensures thread safety, and off-loading the balance between the threads; for example a non-handled packet would be processed on player thread (first thread which comes in contact with the packet).
  • TOOD; More.
---------------------------------------------------------------

Progress

Strike = Completed.

Login into world
Movement System
Attacking System
Kill Credit
Surrounding Objects System
Interactive Events (Stations/Portals)
NPCS spawned in world
Cargo
Drones
Galaxy Gates
Team Death Match
SpaceBall

and more which will be added soon.

---------------------------------------------------------------

ScreenShots

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Any questions do not hesitate to ask!
01/31/2021 03:28 Eatforyou#2
Seems nice in the first look, maybe we will have a second 2008/09 server soon as competition with Spaceage, keep going with your project. :)

Regards,
Eatforyou
01/31/2021 13:24 #Heizer™#3
Finally someone with knowledge here once again. As @[Only registered and activated users can see links. Click Here To Register...] said above, first impression: Looks all nice; Wishing you good luck and have fun while creating your server.

~ Heizer
01/31/2021 17:35 gueuledange#4
Open source is cool but by making this public you will create a cancer of toxic noob-made-privateservers, there's already enough of those here :feelsbadman:
01/31/2021 18:38 xRaxo.#5
Nice! I want to play it and feel like 12 years ago...
02/04/2021 21:58 johnkiki#6
Nice project ! :D
02/04/2021 22:09 PNTX#7
Quote:
Originally Posted by gueuledange View Post
Open source is cool but by making this public you will create a cancer of toxic noob-made-privateservers, there's already enough of those here :feelsbadman:
yea thats the sad thing here. you cant release free stuff/sources.
someone is trying to make money out of it.
02/05/2021 01:59 Exenu#8
Quote:
Originally Posted by gueuledange View Post
Open source is cool but by making this public you will create a cancer of toxic noob-made-privateservers, there's already enough of those here :feelsbadman:
I hope not. My intention is to not create a server for my self, but should someone does use the emulator, hopefully they keep the credits !
02/05/2021 18:40 Requi#9
Quote:
Originally Posted by PNTX View Post
yea thats the sad thing here. you cant release free stuff/sources.
someone is trying to make money out of it.
License it properly and sue them if they violate the license.
08/15/2021 22:02 Exenu#10
This is still being worked on.

Currently working on the CMS.

[Only registered and activated users can see links. Click Here To Register...]
10/25/2021 21:09 Sumrak595#11
Quote:
Originally Posted by Exenu View Post
This is still being worked on.

Currently working on the CMS.

[Only registered and activated users can see links. Click Here To Register...]
link dead:в замешательстве:
11/14/2021 23:29 matiasmunk#12
Why so many namespaces, so many globals, and singletons?
12/19/2021 18:23 Exenu#13
Quote:
Originally Posted by matiasmunk View Post
Why so many namespaces, so many globals, and singletons?
Namespaces are a good standard to section your code, and also a great way to offer usability.

The core and game are separated from each other, as I use the core for my other emulator for other games.

Singletons are a great way to store important data which needs to be accessed throughout the code base, especially keeping track of all players and events.
12/20/2021 21:59 Healianth#14
Quote:
Originally Posted by Exenu View Post
Namespaces are a good standard to section your code, and also a great way to offer usability.

The core and game are separated from each other, as I use the core for my other emulator for other games.

Singletons are a great way to store important data which needs to be accessed throughout the code base, especially keeping track of all players and events.
Singletons are a bad idea, plain and simple. I've never had fun when working with a codebase that uses them and I have never found a good reason for using them myself. It's not hard to create a single instance and manage its lifetime manually.
03/23/2022 17:37 gueuledange#15
Any update on this project ?