• 12
• 12
• 9
• 10
• 13
• ### Similar Content

• With my design document relatively fleshed out, my mind is turning towards starting a prototype. As they say, the first step is always the hardest. This will be my first self-driven project, and that first step is looking awfully daunting. Does anyone have any advice on where to start? I know this is a very personal choice, but I'm interested to hear how more experienced devs approach that first step in development. For example, do you start small with something like the player movement and controls? Or do you prefer to set the stage a bit first by establishing a bit of the world space?

• Hi all,
I’ve nearly finished my C# WPF project (using VS2017) and am now thinking about deployment and managing updates. This is my first time doing this, and I wanted to run my current thinking past you to see if you can help, as I don’t think my current solution will fully work. I have drawn a quick mock-up of what’s in my head at the moment (attached).
My app needs to be able to update itself, but also to add in new content once I create it (this is in the form of small .zip files, ~100kb each, and due to the volume of these files [currently 3000, hopefully expanded up to 5000 in a years’ time] I have kept these separate from my project, i.e. not as Content). I welcome comments on this decision.
Due to keeping the content separate, this kind of broke my initial intention of “simply” using ClickOnce deployment, and letting Windows manage the updating for me, and so I’ve been thinking of how to manage i) initial app deployment, ii) ongoing updating of the app, iii) ongoing addition of new content.
I’m currently intending to use my *free* DropBox account to host all the files, I think this is possible. Does anyone know of any better web hosting I could use?
If you could refer to my attached diagram, what I’m currently thinking of is:
Deploying the initial version of the app using ClickOnce by Publishing to DropBox or wherever (my project A publishing to web host D). Users can then download the Installer from here, and install on their local machines as usual. This initial installation wouldn’t have any content (the 3000 zips) and so these would be pulled down to the local machine by the below step (the initial batch of 3000 zips would only need to be downloaded the first time the app is run, after then it’d just be new content that’d be downloaded):
Also, I have as a second Project in my overall Solution a small Updater app, which when run by the users will connect to DropBox and pull down an xml manifest of my project files and the content (I create this manifest myself), and synchronise any files which are newer. This Updater app will be downloaded and installed by the users too. In the diagram, I publish Updater app code C to web host G, downloadable by users. Please see below question:
Question: my main app and my updater app are two separate projects under the same Visual Studio Solution. Is it possible for me to build/publish these together so that the two executables are together in the same output (in the same folder)? The reason I have them separate is so that the main project’s executable file and any resource files can be overwritten by any new files pulled down by the Updater app without the Main app being open and locking these files out.
The 3000-zip Content on my PC (B in the diagram) I just manually copy over to DropBox (F), and keep these up-to-date when I create new zips.
Also, whenever I update my app code, I intend (this is probably the most painful bit) to manually copy the “\bin\release” folder contents from my PC (A) over to web host (E), so that the Updater app on user’s PCs can synchronise the executable and resource files with any newer versions I have created, without the user having to download a new version of the installer, and potentially uninstall/reinstall to go from v1 to v2 of the app.
This above bit I think is the least possible, as I have found out that just by moving the \bin\release\ executable and resources from one location to another on my PC, it no longer works if I double-click the .exe file, it only works from the project’s original \bin\release folder  . Is this expected? In my naivety I was thinking that once the user had installed v1 of the application "properly" using ClickOnce (and therefore their PC was checked for .Net framework etc) I could then just have my Updater overwrite the .exe and other embedded resource files (like bitmaps) with updates and it’d just work. I guess this would have worked with VS2005, but not with VS2017 hey.
So, after writing all that out, and thanks for reading this far, I guess that if it wasn’t for the 3000 zips, I could package all the above as ClickOnce, and let Microsoft manage the updating for me. I don’t fancy adding the 3000 zips to my project as Content [copy if newer] to enable this to happen, but I did fancy having a go at writing the standalone Updater package, which would synchronise the files between DropBox and the user’s PC, based on the xml manifest I create.
Any feedback you may have would be greatly appreciated, as this community has proven invaluable to me so far

• When seeking a composer for your games, what is it that you will typically look for when hiring someone? What about their music makes you want to employ them? what do you look for in regards to professionality? I'm really curious as i'm seeking to get my foot in the door, but i want to know what i should be doing to impress you and get commissioned! thank you!

• What exactly would a gameplay programmer do within a firm? As I look at job postings to get a better idea it seems that they're largely responsible for laying the foundation code for the game. That is to say that they're in charge of making the inventory and weapons systems work. Then someone else would step in and flush it out with all the weapons the game is supposed to have and a third person would step in to make it look pretty. Naturally the programmer would have to maintain, update, and fix these systems as they grew, but most of the work is in lying the foundation upon which everything else is built. Is this a relatively decent understanding of the overarching job role or am I fiercely underestimating it?
• By drcrack

It is a combination of fundamental RPG elements and challenging, session-based MOBA elements. Having features such as creating your unique build, customizing your outfit and preparing synergic team compositions with friends, players can brave dangerous adventures or merciless arena fights against deadly creatures and skilled players alike.

This time with no grinding and no pay to win features.

We're still looking for:
1) 3D Character Artist
2) 3D Environment Artist
3) Animator
4) Sound Designer
5) VFX Artist

Discord https://discord.gg/zXpY29V or drcrack#4575

## Recommended Posts

Hello, so I wanted to get an opinion on the best ways to manage gameplay logic in a multithreaded manner.

After watching these two presentations :

It seems that the best approach is to create a dependency graph for object updating, and for any object that needs to access another object that isn't a dependency, a message should be constructed and called after the "multithreading" phase. I wanted to know if anyone had any experience with multithreading game objects in this manner, or if they have any other solutions.

##### Share on other sites
17 hours ago, ApochPiQ said:

Unless and until you have a proven difficulty with your actual game objects getting work done in 1 CPU tick, multithreading is not the right tool.

[...]

Seconded.

Most games I've worked on typically update game logic systems between 10-20Hz on a single thread without any impact to the gameplay experience. There simply isn't enough going on every frame for gameplay to consume that much CPU, especially considering that humans themselves are limited in how fast they can respond anyway. As long as the key player "interactive" systems are real-time responsive (rendering, sound, input, etc.), the game as a whole will feel responsive. Also consider that in any multiplayer game, network latency is going to mask a lot of it.

Certain gameplay-relevant systems that are more computationally expensive (AI, pathfinding, physics) can be multithreaded independently as previously mentioned, but again those are very specific, well-defined problem domains.

##### Share on other sites

Thank you both for your responses. I guess what you are both saying makes sense. I currently have a task system and have jobified my rendering and wanted to take a similar approach to gameplay logic. I might just be focusing too much on preoptimization and also wanted to start leveraging multicore in more parts of my engine.

##### Share on other sites
6 hours ago, AxeGuywithanAxe said:

for any object that needs to access another object that isn't a dependency

If you're accessing another object, that's a dependency

The method that I've typically seen used on console games (which need this because console CPU's are terrriiiiiblleeee):

Try to do a lot of one operation at the same time (batch processing).
e.g. instead of for each entity, DoSomethingRandomViaAVirtual()
use: for each A, DoAStuff; for each B DoBStuff()

When a particular batch operation is identified as being an actual performance issue, figure out how to move it over to the job system.
To begin with, this is as simple as:
jobHandle = DoAStuffOnJobs()
Wait( jobHandle )
DoBStuff();// this depends on AStuff

Then to improve it further, try to move dependant operations earlier in the frame so that the "Wait" operation above hopefully doesn't actually have to wait.
jobHandle = DoAStuffOnJobs()
DoCStuff();
Wait( jobHandle )//hopefully doesn't actually pause any threads because AStuff jobs naturally finished during CStuff
DoBStuff();// this depends on AStuff

##### Share on other sites
11 hours ago, Hodgman said:

If you're accessing another object, that's a dependency

[...]

Well the issue I was having was with intertangeled dependencies. For example, let's say you have entity a and entity b. Lets say that entity a has a weapon attached to it, and entity b is attached to entity a. Entity a has to be updated before the weapon , before entity b. That fundamentally means that you can't batch process entities because of this dependency, unless you constantly update the "entity" array to make sure all dependent entities are ahead of it. There are certain components that can be easily batch processed, i.e a navigationcomponent , or ray tracing though.

##### Share on other sites
10 hours ago, AxeGuywithanAxe said:

Well the issue I was having was with intertangeled dependencies. [...]

2

It means you've got to apply the single responsibility principle more thoroughly.

"Attaching" one object to another is a problem for a transform-hierarchy. The transform hierarchy can "attach" different entities to each other without caring what those entitys are; it just operates on transform-nodes.
(Side note: This is where people say "Aha! That's ECS!". No, that's following OO properly, composing entities out of simpler objects, and obeying SRP.)

You can batch-process the entire transform hierarchy so that the location of every entity is known, and then batch process your weapons afterwards.

Having complex entities that do many different things is the opposite of the batch processing that I'm suggesting

##### Share on other sites
10 hours ago, Hodgman said:

It means you've got to apply the single responsibility principle more thoroughly.

[...]

I don't necessarily understand how that would completely work then. How granular would your component system be? There can be dozens of different data dependencies that can exist between components and entities. Are you saying that you would not update on an entity basis , and instead update on a per component type basis? Let's say you have a skinned mesh component on one entity, and it performs animations, an entity attached to this entity would have to be updated after the skinned mesh component is updated. With your approach, how would you handle this? Would you update all of the components first and then batch process the entities based on their transform?

##### Share on other sites
1 hour ago, AxeGuywithanAxe said:

Are you saying that you would not update on an entity basis , and instead update on a per component type basis?

Well I'm using OO, not ECS so I don't have entities and components, just objects. Complicated objects ("entities") tend to be made up of simpler objects ("components").  I update objects in the order required by their dependencies.

1 hour ago, AxeGuywithanAxe said:

Let's say you have a skinned mesh component on one entity, and it performs animations, an entity attached to this entity would have to be updated after the skinned mesh component is updated.

If the animation update produces data that's consumed by the transform/attachment update, which produces data that's consumed by the weapon update, etc... Then yes, update animations first, and then update transforms/attachments, and then update weapons.

It can actually be illuminating to try to look at your code from a procedural or functional perspective. Especially functional w/ immutable objects -- try to imagine how you'd structure your code if every object was immutable (read only after construction). This is a lot more like math. In math we can't say:
x = x+1
Because that's simply false (for real numbers)... So a mathematician would write something like:
$$x_{t+1} = x_{t}+1$$
And then the code would have to be something like:
thisFrame.x = prevFrame.x + 1

This is an interesting way to look at your code because in the immutable style, it's always painfully obvious as to which "version" of the x variable is being consumed by any step. In typical OO code with mutable objects, it's not always obvious which "version" of an object you're interacting with, and it can be very easy to accidentally consume an object at the wrong point in the frame (e.g. updating animations after updating attachments).

So, I would recommend structuring your code in such a way that the required update order is as obvious as possible.
e.g.
UpdateA();
UpdateB();//uses results from A internally
Try to write your high level update loop more like:
a = UpdateA();
UpdateB(a);
As in this style, it's actually impossible to call UpdateB without calling UpdateA first.

IMHO, this is one thing that most ECS frameworks completely suck at, and a lot of traditional OOP code as well...

##### Share on other sites
8 hours ago, Hodgman said:

Well I'm using OO, not ECS so I don't have entities and components, just objects. Complicated objects ("entities") tend to be made up of simpler objects ("components").  I update objects in the order required by their dependencies.

[...]

1

Ah, so I think my method is similar to yours then. I don't use ECS , I use a main object (entity), that contains components , somewhat like ue4 . So I'm guessing that you update your entities and components at the same time then? Or do your components only contain data?