Monday, February 12, 2018

New pre-alpha build 0.2 is out!


New pre-alpha build is out. First of all we changed versioning. The version format is:

major . minor . build_number . revision

Each new public release will increment minor version by 1. In case we will release some hotfix the build_number and revision will change. Current version is: 0.2.6617.37417. The major version will change when we will reach stable release.

Most of the features in this build were made by two of the mod contributors Curtis and kuba45209 thanks a lot guys!

Changelog since 0.1 version:
  • Added synchronization of beer cases - when you drink beer your friend will see it disappear from the beercase. (Curtis)
  • Added synchronization of the light switches in players house. (Curtis)
  • Added synchronization of the weather. (kuba45209)
  • Added synchronization of the mailbox name. (kuba45209)
  • Doors are now identified by world position when opening instead of interaction ray. This one should prevent 'unable to find doors' error. (Curtis)
  • Fixed crash when entering game while another player is being in vehicle. (RootKiller)
You can download mod here.

Github tag here.

Have fun testing!


Sunday, January 14, 2018

Progress update #8 - Charity stream is over!


Another progress update! The mod development stream last 21 hours (instead of 24 because i was way too tired to work on satsuma assembling :D).  Thanks to everyone for viewing and donating - we managed to collect 355,48€ and all of this money was donated to donated to The Great Orchestra of Christmas Charity. Thank you again!

I spend something around 18 hours on the stream working on the mod - it was definitely the longest session I had with MSCMP code ever. What changed?

  • Pickupables spawning sync.
  • Support for debugging via Visual Studio.
  • Pickupables destroying sync.
  • Pickupable teleport sync. (to garbage for example)
  • Time and day sync.
  • Disable saving and loading game for players. (host save is being used)
  • Loading screen when joining session.

Detailed changes:

Now it's time to take some rest! :D

Thank you for your continuous support!

Friday, January 12, 2018

Development charity 24h stream!

Hello everyone!

It's time for another development stream - this time it will be special! We will stream development of the mod for 24 hours with enabled donations which will be later donated to The Great Orchestra of Christmas Charity.

Stream starts tomorrow (13.01.2018) at 12:00 CET, during the stream on official mod discord in StreamPublic voice channel you will be able to talk with developers of the mod. Stream will be available here:

Let's show the magic of modding communities, spread the word and let everyone know something like that will happen!
Thank you!

Wednesday, January 3, 2018

Let's make multiplayer together!


So it's my birthday! Yay! I'm one year older and I think it's time to make some adult decisions. As I'm totally overloaded with work life it's time to say that the development would definitely take longer than I expected at the beginning of the project (I know, it's nothing new - estimations at such early stages are always (very) far from the truth). Anyways don't be sad! I will definitely keep working on the project, but! Also the project is now open source! You can grab source code and develop from this link

Remember that this version is pre-alpha and it's not playable. You will definitely expect crashes and other bugs. I don't care about any bug reports at this stage so you just have to live with them.

What features does it have:

  • Sessions
    • When you continue/start new game session starts. (you can invite players via steam friends list)
    • You can join any player hosting session when you are in main menu and click JOIN in the steam friends list.
  • On foot sync
    • Walking
    • Running
    • Jumping
    • Pickupables grabbing (crashy and buggy - still work in progress)
  • Vehicles sync (WIP)
    • Position & rotation
I will try to post TODO list ASAP and update documentation for contributors.

Have fun!

Monday, December 25, 2017

Project status update!


So I think it's time to let you know what happens with the project. Since last progres update unfortunately I had no time to work on the project. In the recent days I was totally busy with my game project and of course my full time job as we were preparing World Of Trucks event to be pushed. I have no exact calendar when I work on the given project so I cannot promise you any progress update but don't you worry! The project is not dead and it will be definitely out. 2018 will be the year!

Also as you may notice I changed titles of previous blog post. So instead of counting development days it would be just "progress update #number" - just for a better reading. Unfortunately working everyday on the project is not that easy to do in the long term.

And as we have christmas right now. Merry christmas to your all! I hope you spend it with your families and happy! (Unfortunatley I wasn't able to deliver some of you most wanted gift - but I will improve - I promise! 😇). And if you don't care about christmas - be proud of who you are, never give up on your targets and be happy!  💪

Thank you for your support!

Thursday, December 14, 2017

Progress update #7 - Pickupables are f*cking hard to get right. (Day 18)


Another progress update time! So after long hours pulling my hairs i'm somewhere half-way through the complete pickupables synchronization. I made this database of pickupables I mentioned in previous post. This is end of the fight, but definitely not end of the war I'm having with them. There are still a lot of bugs that needs to be fixed for example spawning of new pickupables does not work yet (for example items buying).

Commits since previous progress update:
  • Use interaction vector instead of player position to find doors to open.
  • Added object create/destroy play maker action hooks and callbacks.
  • Kill game process immediately after fatal error or assert.
  • Make dumping of the object to file a separate method in DevTools.
  • Use OnWorldWasLoaded instead of manually handling level change.
  • Moved game anim database from MPController to GameWorld.
  • Added pickupable spawn and destroy network messages.
  • Indent each component during transform tree dump so it can be collapsed in text editors.
  • Added basic nametags.

I needed to do something that I will finish fast and I will see the result to rest a little bit. Those will be toggleable and will definitely be improved with connection condition indicator.

  • Added rotation getter to network player class.
  • After picking up object snap it to player location for nicer transition.
  • Binding network message handlers is now possible from outside of network manager.
  • Added pickupables database.
  • Spawn network player after loading full world state.
  • Added missing using.
  • Air break uses key press instead of key down events to move character.
  • Added an method to teleport local player.
  • Teleport local player to network player when pressing F8. (debug only)

Now the plan is to fix all the bugs and move back on vehicle sync and polish it.

Keep your fingers crossed!

Monday, December 11, 2017

Progress update #6 - Commit time! (Day 15)


No progress update in recent days was caused mostly by my private life - don't worry the project is still alive and I'm not loosing my motivation!

So finally I found time to sit down cleanup code and fix some bugs. As you saw in the video I've attached to previous post - I had first working demo of pickupables sync. They are implemented in pretty nice way into the game so I could collect them pretty easily however there appeared to be few problems that I still need to solve.

For example there are few items that are destroyed depending on the calendar day you are playing the game on and my idea how to solve it is: there will be "items database" in the where I will store copy of all items that can be picked up and then on session join the host will decide which items should be spawned and where. Thanks to this if hosts game decides to kill some object during startup it will not be shown on other clients. Also this will be used to synchronize items buying/consuming etc.

There is still much more work - for example there are few specific items for example beer case that needs more detailed synchronization (bottles). It is also on my roadmap.

So to keep the tradition alive, the recent commit messages.

Added transform network message containing location and rotation.
There are more and more objects that require position+rotation combo to be synchronized. I've made common message that contains both of them so I don't need to include position and rotation separately in all the messages. Just time saver to not write both.

Instead of few arrays use objects to store initial state of the objects.
I was sending all network objects data in few separate arrays (ids, positions, and other stuff - each of them were separate). It is not the best for caching in modern CPUs as it needs to jump between various addresses in order to read it. Now it works fine but with more objects being send it will get worse so to fix this I made it now array per object type.

Also this change reminds me I need to start thinking about some workaround for MTU sizes as full world sync packet is getting bigger and bigger.

Added Public Release configuration.
No, unfortunately it does not mean i'm getting closer to the release 😢. As I'm writing debug code I'm also surrounding it with #if's so it would not be included into public release builds that I will send to you. I needed this configuration to make sure I do not have any references to those code in code that will ship later. Just for convenience.

Fixed dumping of the fields value is null.
Ye another result of codding without much sleep. I was referencing values even if those were null and because of that most of the objects were missing a lot of fields. Now I can interpret object dumps without any problem 💃!

Make DumpWorld static so it can be called from any place in code.
I need to dump whole game world sometimes to understand what game is doing.

Added game callbacks that can be used to track various game events.
Sometimes lifetime of the game object is undefined so i don't want to invalidate all callback when the object spawns or destroys. Instead I just have "global callbacks pool" that i can subscribe from any place in network code and don't care about game object lifetime.

Added game player wrapper.
Nice wrapper to hook into the player game object. For example to track object pickup and send it to network code.

Fixed unused variable warning in public release compilation.
I had declared one variable that was unused in public release builds. #if'defed it :-)

Implementation of GamePlayer wrapper.
Just an implementation of the game player wrapper I added before.

First iteration of object picking up synchronization.
Object pickup synchronization without stuff I mentioned at the beginning of the post + object throwing is behaving the same as dropping.

Do not include vehicle debug draw code in non public release builds.
Let's save some FPS for you 😼.

Thank you for your support!