C# + AS3 + C++?

Recommended Posts

Hello friends! Do you find it strange that DICE is looking for Actionscript 2 and 3 UI Software Engineer for Frostbite engine? IIRC Flash is dead. 
https://www.disabledperson.com/jobs/10999821-ui-software-engineer-frostbite-commons
https://www.velvetjobs.com/job-posting/ui-software-engineer-frostbite-commons-101622-484454
and as beginner I wonder how they mixing editor (what is written on c#) with AS3 and c++? I know only about C# + WPF combination.
Also I'm going to develop my own engine and I started to think about how to make such editor and GUI like Frostbite has.
Thanks!!

Share this post


Link to post
Share on other sites

Scaleform is/was a standard UI tool for games, and it uses Flash/Actionscript.

I don't see them mentioning C# there. But even if they did use C#, it's not a big deal. An experienced programmer is expected to know multiple languages and adapt to new ones as needed.

Share this post


Link to post
Share on other sites

Frostbites various tools are written in C# using WPF, like Kylotan says there are some action script driven game UI frameworks which is probably where AS comes in rather than for the editor it's self.

Share this post


Link to post
Share on other sites

They use .net + C#/IronPython + WPF for their frostbite editor, so almost all the authoring tools (level editors, content editors etc...) are written in C# + Python running on top of .net and WPF is their windowing library of choice.

Here is a cool vid/presentation about it: Frostbite: Implementing a Scripting Solution for Your Editor (Youtube, GDC)

About AS* script: as Kylotan said so, Scaleform is/was a standard UI tool for games. As I know there is/was a fully fledged unreal engine (both for v3 and I think one probably exists for v4) integration and was the UI tool choice for many developers using unreal engine 3(/4?).
EA before starting to push frostbite as an internal engine for all their bigger studios was using unreal engine for various projects.

Jemme ninja :) !

Share this post


Link to post
Share on other sites
7 hours ago, Kylotan said:

I don't see them mentioning C# there.

Frostbite editor is written on C#, but a core of an engine (rendering system jobs, game code) on C++. Also I guess their subsystems c++ based too. 

"Our tools are written primarily in C# and Python; as the editor communicates closely with the engine pipeline you will also delve into C++ pipeline code on a regular basis."

http://www.dice.se/jobs/positions/dice-stockholm-code-senior-tools-engineer/


Also as you can see their tool's codebase in quite massive
https://twitter.com/repi/status/905815895246860288

Share this post


Link to post
Share on other sites
11 hours ago, Kylotan said:

Scaleform is/was a standard UI tool for games, and it uses Flash/Actionscript.

but Scaleform is dead too or it somewhere between the life and death. 
And I don't see here any Scaleform mention
http://www.mobygames.com/game/windows/battlefield-1/credits
I don't even see Havok here

Edited by Michael Davidog

Share this post


Link to post
Share on other sites
1 hour ago, Jemme said:

They used scaleform in some of there older games so maybe they still need to support it? but there modern games mostly likely use a custom framework?

yes, it's seems like they still using scaleform
http://www.mobygames.com/game/windows/plants-vs-zombies-gw2/credits
but why every credits of every title differ each other - some titles have a lot middleware and open source libs, but some just a few or none.
There is no defined standard for credits?

A lot here
http://www.mobygames.com/game/windows/mass-effect-andromeda/credits

but none here
http://www.mobygames.com/game/windows/star-wars-battlefront_/credits

DICE and EA are very strange guys. It's very hard to see what software and libs they using because of that.

Edited by Michael Davidog

Share this post


Link to post
Share on other sites

Different studios have different programmers and skills, they probably allow them to work with what there comfortable using.

I emailed Jason Gregory recently about tool chains, because it's relevent I'll share his responce.

"It seems to me that there are a lot of factors that go into a decision like which UI toolkit to use for building your game studio's tool chain. I can tell you what Naughty Dog does and why, but of course your mileage may vary.
 
At ND, we use primarily C# and Python Qt (pyqt) for tool user interfaces, and we also do a lot of HTML5 web-based interfaces for tools that "talk" to back-end databases etc. The reasons for this are partly because those toolkits were the ones with which the programmers were familiar. Also Python integrates well with Maya (which now uses Python as its primary scripting language)." - Jason Gregory
 
I guess the key bit is "which the programmers were familiar." , Allowing your team to use what there comfortable in is probably the most important thing to do as it keeps the team productive ithout having to find new employee etc.. As long as it doesn't heavily impact the quality or performance then it should be okay.
 

Share this post


Link to post
Share on other sites
21 hours ago, Michael Davidog said:

I started to think about how to make such editor and GUI like Frostbite has.

Some of the first steps are to hire a large team of experienced editor-developers, and spend several million dollars over multiple years on technology developed across multiple studios around the globe.

EA has an enormous body of tech tools and libraries that cover just about anything you want. They've been built up for game after game, from project to project for decades.  When I was working there I noticed and pointed out a date in a comment. It was from nearly two decades earlier, the comment stated that it was the third rewrite and they were hoping it would be the version that would solve all their issues.  The tool worked great, we were adding our own useful bit of functionality which would be added to the suite.

Share this post


Link to post
Share on other sites
9 hours ago, frob said:

Some of the first steps are to hire a large team of experienced editor-developers, and spend several million dollars over multiple years on technology developed across multiple studios around the globe.

EA has an enormous body of tech tools and libraries that cover just about anything you want. They've been built up for game after game, from project to project for decades.  When I was working there I noticed and pointed out a date in a comment. It was from nearly two decades earlier, the comment stated that it was the third rewrite and they were hoping it would be the version that would solve all their issues.  The tool worked great, we were adding our own useful bit of functionality which would be added to the suite.

I agree with you, but I want to be able to make things by myself. I know I can't match with EA and DICE, but I need to evolve.

Share this post


Link to post
Share on other sites

Evolve to do what? If you're a beginner you shouldn't be making your own engine until you have spent some time learning how to use existing ones. Certainly you shouldn't base your implementation decisions on other people's job adverts because their existing technology is, as Frob said, the result of many years of different projects and different directions which they now have to maintain, not the ideal form that others should strive to emulate.

Share this post


Link to post
Share on other sites
On 20.11.2017 at 12:36 AM, Kylotan said:

Evolve to do what?

To evolve as a programmer and engineer. To make better tech and understand how to implement particular algorithms from white paper and so on.

 

On 20.11.2017 at 12:36 AM, Kylotan said:

If you're a beginner you shouldn't be making your own engine until you have spent some time learning how to use existing ones.

But how Carmack, Sweeney and others did it?

 

On 20.11.2017 at 12:36 AM, Kylotan said:

Certainly you shouldn't base your implementation decisions on other people's job adverts because their existing technology is, as Frob said, the result of many years of different projects and different directions which they now have to maintain, not the ideal form that others should strive to emulate.

So their solutions and decisions they were made aren't good enough to be reimplemented by somebody else?
 

Share this post


Link to post
Share on other sites

Carmack and Sweeney did not start out making 3D engines as a beginner. They made much simpler software until they had learned enough to be able to move onto more complex topics, and they did not write an engine until they had written several games and learned which parts of the game were reusable and which parts were not. You should do the same.

The tools and technologies that you see in a job advert indicate that company's own particular interests, history, resources, politics, and limitations. They tell us very little about which technologies are good, or suitable for beginners.

 

Share this post


Link to post
Share on other sites

I'd recommend one of two routes:

  1. Download an engine like Unity and get making flashy-looking games quite quickly, learning the high level concepts quickly and coming back to the low level concepts later on;
  2. Download a framework like SDL or Monogame and make simple-looking games quite quickly, learning the low level fundamentals early, and progressiving to bigger 'engine' level ideas later.

Share this post


Link to post
Share on other sites
9 minutes ago, Kylotan said:

I'd recommend one of two routes:

  1. Download an engine like Unity and get making flashy-looking games quite quickly, learning the high level concepts quickly and coming back to the low level concepts later on;
  2. Download a framework like SDL or Monogame and make simple-looking games quite quickly, learning the low level fundamentals early, and progressiving to bigger 'engine' level ideas later.

Ok. So if I will start from first step the official engine documantation will be my first entry into game development? But what the main resource of tech and knowledge that guys at Epic games and DICE using? For example how they all figure out how to make 3d audio system? It's seems like there a very little information in the Internet and even less practical implementation in the C++. That's what makes me wonder every time..
Or maybe this is all about Bachelor/Master/PhD degree in computer science? Or maybe some cool books with code examples?
Unfortunatelly, I dont' have such degree - I'm self-taught.

Share this post


Link to post
Share on other sites

Learning and understanding math is probably the most important asset when developing engines, especially back then. People like carmack used papers and reference books like Computer Graphics: Principles and Practice when developing there engines.

Carmack used papers by Bruce Naylor when writing the BSP tree used by the doom engine. He popularized the use of different techniques within games that nobody did before or at least as far as I know.

To summarize, engines are built from the work of many different people, usually people who specialise in specific areas or algorithms. From there papers engineers when the resources become available implement them practically in three respective fields. And that's basically no it goes, there's books on graphics,physics,collision etc. And those books wouldn't be possible without earlier research and that research without earlier discoveries in math etc. So it goes way back

Share this post


Link to post
Share on other sites
1 hour ago, Jemme said:

And that's basically no it goes, there's books on graphics,physics,collision etc. And those books wouldn't be possible without earlier research and that research without earlier discoveries in math etc. So it goes way back

I agree. I noticed that game physics engines started to appear after 2 papers by David Baraff:
1. Analytical methods for dynamic simulation of non-penetrating rigid bodies;
2. Fast contact force computation for nonpenetrating rigid bodies;
Interactive Collision Detection – By Philip Hubbard
and Brian Mirtich, Impulse-based Dynamic Simulation of Rigid Body Systems.
That's all are very interesting topics for me. I'm interested in everything - graphics, physics, animation, audio, editor, visual node-graph scripting (a la blueprint), networking, etc. But if I want to dig in it seriously to make physics engine I will literately spend years for that and that will still far from "nice" physics engine. And I don't know what I should to do - just use tech from Epic games, Crytek, etc or try to link some kind of engine from available 3d party components (physX/bullet, vxgi, steam audio, etc)?
As Kylotan said I will start from just using other's tech right now. But I'm still interested in gathering more low-level information as foundation for future plans. 

1 hour ago, Jemme said:

Learning and understanding math is probably the most important asset when developing engines

So first I need to read "Eric Lengyel. Mathematics for 3D Game Programming and Computer Graphics"?

Share this post


Link to post
Share on other sites

I learned math from tons of different books and articles, lengyel book is very mathy in the sense it's quite difficult to understand for non degree people. 

This book is a bit easier for newer people:

https://www.amazon.co.uk/Foundations-Game-Engine-Development-Mathematics/dp/0985811749/ref=sr_1_1?ie=UTF8&qid=1512679107&sr=8-1&keywords=Eric+lengyel

I would say figure out your purpose for doing this, what exactly do you want to do this for? That answer will decide the path you take, for example if you want to be a render programmer just build a render , physics ? Then use someone else's render engine and just do the physics.

If you want to do everything then break it down for example I'm building a framework a bit like SDL and SFML but with more render APIs and custom physics. The key is that is NOT an engine it's not as big as something like unity or unreal but will be modern rendering etc.

You can then add the "engine" separately to supply scene manager , entity systems etc.

Splitting them apart makes it alot easier to develop.

Check SFML and SDL source, look at XNA structure and check out eberly engines:

https://www.geometrictools.com

 

Share this post


Link to post
Share on other sites
9 minutes ago, Jemme said:

That answer will decide the path you take, for example if you want to be a render programmer just build a render , physics ? Then use someone else's render engine and just do the physics.

I feel I'm generalist. Probably to make life easier, I want just to be able to make cool editor and combine all engine modules to make them interact each other in the complete and united engine, but with some kind of modularity in mind. I guess this is more  general programming experience than something special like physics (and probably I will learn a lot about computer science and software development).
Also according to "Game engine architecture" book boost library documentation is a place (maybe bad for beginner) to learn a lot about computer science. What do you think about it?

 

22 minutes ago, Jemme said:

I learned math from tons of different books and articles, lengyel book is very mathy in the sense it's quite difficult to understand for non degree people. 

Actually I have degree, but in mechanics not computer science. And right now I'm learning c++ and reading "Game engine architecture" book :)
 

 

28 minutes ago, Jemme said:

I'm building a framework a bit like SDL and SFML but with more render APIs and custom physics.

That's very smart idea! Yes, this is what I'm thinking about -- to make hardware- and API-agnostic layer on top of steam audio (or steam audio on top of API-agnostic layer?) to make cool audio system, take PAL and make physx/bullet abstraction layer, take Sony Editor and make mixture of woven together engine modules! But what knowledge I need to make framework a bit like SDL and SFML?
 

 

46 minutes ago, Jemme said:

You can then add the "engine" separately to supply scene manager , entity systems etc.

Probably I need specific knowledge to make it. But it sounds very interesting and doable! I would like to make platform independent layer and core systems. Scene manager- this is all about scene graphs? And I'll need to integrate some kind of COLLADA?

 

51 minutes ago, Jemme said:

Check SFML and SDL source, look at XNA structure and check out eberly engines:

https://www.geometrictools.com

Wow! Thanks! But I'm not sure I'll understand the code.

 

On 19.11.2017 at 11:57 AM, frob said:

EA has an enormous body of tech tools and libraries that cover just about anything you want

Yes! Looks like Frostbite is made up from a lot of EA and 3d party tech:
https://twitter.com/frostbiteengine/status/428983833921589248

Audio - SOUNDR!OT (as it's internally called by EA according to "Game engine architecture" book, but DICE stated like it's their own audio engine
http://forum.i3d.net/threads/audio-tech-in-the-frostbite-engine-part-2.140075/ );
Animation - ANT + Granny;
Video - idk (Movie Player?) + Bink;
Physics - Havok + DICE destruction layer on top of it.
So it's seems like they used a lot of modules to complete engine very fast (I will make another topic about it later and relationships with Renderware and UE3). So what DICE has made it's rendering systems, game logic and editor. Right?

Share this post


Link to post
Share on other sites

Most still use of for editors, check out game coding complete, it has a pretty good editor section about using XML for objects , dynamic UI and communication with the engine. It's a. Great kick start to experiment with.:

https://www.amazon.com/dp/1133776574/ref=olp_product_details/146-9356820-0862526?_encoding=UTF8&me=

Unfortunately I haven't used boost, most would say STL is not good enough or boost isn't and use your on, but chances are the people that wrote STL know what there doing.i haven't bothered replacing STL yet but do use slot maps and things for hawing instead of there map.

To clarify the degree comment, I meant a pure mathematics degree rather than an applied field, for example my degree was computer animation (awful) they covered the bare minimum without showing how it works etc. Lengyel book focus alot on proofs and accurate math notation which can be good and confusing if you want to quickly learn and apply seeking many sources might help. I prefer drawing maths to understand it on a whiteboard or visualising things, although I would not recommend trying to visualise quaternions xD. Lengyel engine series book is alot cleaner and more of a best hits which is a great spring board.

Doing the framework just lets you separate talking to the computer and implementing structures to manage that communication. For example the engine doesn't care how stuff gets drawn, like dx11 or even a. Ray tracer it just wants to say draw this thing. And the framework doesn't care gown ngine structures a scene or scene graph it just gets given data and outputs a result.

Also the editor is a separate program but uses the engine but as a editor DLL version so in a way it goes:

Framework > engine > engine DLL editor layer > editor 

Specific knowledge can be gained from books, game cording complete has a big section on scene graph, a scene manager just stored scene and loads them etc.

The thing is alot of these company's built there engines along time ago and learned the ropes , then they just iterate adding and removing over time. Like fallout 4 is still gamebryo at its core there geck is still probably based on Todd's original core, although interns of usability engineering it's not a smooth tool to use....

You won't get to the same level as they have because it takes a long time and alot of people, so aim for something a bit more realistic for example make a framework to render this scene:

https://developer.nvidia.com/orca/amazon-lumberyard-bistro

Have some particle effects, some butterfly etc. Don't aim to have for example a full animation engine that lets you build and tweak themselves just make an animation engine that plays them back and blends them and that's it.

My advice would be if you really want a job in a specific engine filed focus on that, building a full engine isnt worth it without a very specific goal like portfolio or its part of some special commercial project like simulation of power plants or others.

Share this post


Link to post
Share on other sites
15 hours ago, Michael Davidog said:

Ok. So if I will start from first step the official engine documantation will be my first entry into game development? But what the main resource of tech and knowledge that guys at Epic games and DICE using? For example how they all figure out how to make 3d audio system? It's seems like there a very little information in the Internet and even less practical implementation in the C++. That's what makes me wonder every time..
Or maybe this is all about Bachelor/Master/PhD degree in computer science? Or maybe some cool books with code examples?
Unfortunatelly, I dont' have such degree - I'm self-taught.

Yes, certainly most of these people at top studios have university educations. They also bought and read a lot of books, and they also learned on the job (few people start their career at top games companies; most work their way through the industry into such positions). It's an ongoing process of education and learning overyears, which means there's no magic answer for newcomers where we can say "just do X and read Y and you're ready to code the best games".

Share this post


Link to post
Share on other sites
14 hours ago, Kylotan said:

university educations

Is it possible to replace it with something else?
But again if I want to learn all things I need just go through the process with them like intern?
 

 

13 hours ago, Kylotan said:

They also bought and read a lot of books

What do you think about this road map?
https://github.com/miloyip/game-programmer
 

14 hours ago, Kylotan said:

there's no magic answer for newcomers where we can say "just do X and read Y and you're ready to code the best games".

Maybe this is a dream but that's would be great if industry leaders will start to intensively comment their code by explaining some things with referencing to books/articles for more details and implementation. This code will be embodied in history as common and most influential. There will be a lot place for revision and improvement by community. Open standarts are the most effecient time-saving things:)

Share this post


Link to post
Share on other sites

Regarding university education, that depends on the location on the globe. In some regions the developers have no advanced formal education, and are entirely self-taught through online and physical resources.  In other regions of the globe a 4-year degree is a hard requirement.

Formal education does several things for you.  It requires you to learn topics you are not interested in, topics you may have never learned on your own. Instructors know things you don't know that you don't know; on your own you would never think to research a topic because you had no knowledge that the topic existed.  It is a large project with a lot of work, and for many people it is the first introduction of what it means to do intellectual work; the mental work most students experience is minor relative to the mental work most game programmers do on a daily basis.

 

Regarding a collection of books, that doesn't really make sense.  Every person is different, every project is different, everybody's needs are different. There are some book lists for specific technologies, some highly popular articles and web pages that people can read, but there is no universal checklist. There are some fields where rote memorization and repetition are at the core. In those fields a set of standard books can be the "most efficient" at teaching the thing.  But people learn differently, and people have different interests, and people learn different things.  A database developer, a graphics developer, an audio system developer, a tools developer, there is some overlap but much information and many skills are unique to each.

For specific technologies there are books.  There are book lists for algorithms and data structures and processes that are common across all languages; these are the core of Computer Science and they will always be applicable. There are book lists for learning c++, for learning C#, or Java, or other languages. There are book lists to help with linear algebra and with graphics libraries. There book lists to help with software patterns, with testing patterns, with client-server communications patterns.  Sometimes people's book lists will drop a few old books or add a new book. 

You should probably start with Google since there are often discussions here or on StackOverflow or Reddit or other sites with book list recommendations.  If you still can't find recommendations for a topic, we could likely help you find a book list on the topic.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now