How to make an AAA game in Unity (or fail badly)

@Billy4184 You mentioned that a game designer should not have to be a software engineer. In many ways this is already the case and the reason why the markets are so flooded with games.

A person who simply wants to be a designer can hire a programmer, artist and musician and pay for their game to be automagically created. This has already happened countless times and will continue to happen.

A person who is an artist can use these modern click and drag game dev tools to build games without writing any code themselves They can also write some simple scripts to customize things more. Both of these have already produced games countless times and will continue to do so. Neither case requires being a software engineer. Far from it. It requires only a micro focus on tick this box or write this simple 12 line script.

The only thing that would come out of people being able to build massive RPG and other style games as easily as they can build tiny mobile games today would be seeing the markets being flooded with these kinds of games.

And that would simply mean that folks like @ would need to spend even more time on graphics, music and custom programming to make his game stand out.

That is the ultimate point. If something is easy for everyone and has basically no barriers then well… some kind of “barrier” has to be created to separate the wheat from the chaff so to speak. So it would end up saving no time in the end. It could end up producing higher quality games all around possibly. But it would not save any effort and time because for folks to stand out they would still need to go beyond the norm.

Ultimately, in such a case it would probably take game dev right back to where it was and arguably close to where it is right now that the person who has the most money to pour into this will come out on top. Because if all of the other obstacles are removed then what is left?

Sure the ideas themselves are very important and this could certainly become the biggest factor in the success or failure of games in such a scenario. But even that is something that can simply be hired out. “Looking for awesome game ideas / game designs” or more likely “looking for full-time marketing person” because the biggest obstacle would likely be what it is already becoming… getting your game found in the oceans filled with games.

3 Likes

Maybe my last post was a little too long, because we’re skipping over quite a bit @GarBenjamin had to re-iterate.

In short your estimations are well off, I’ve seen some damn clever peep’s that never touched a game before who can pump out a nigh on custom D3 type of game in six months.

I’ve seen people with 2 or 3? Years experience bash out an MMO (between two people). Yeah not saying it was the best “MMO” I’ve ever tried, they wanted a better experience so dropped the engine they were with and re-did it / took on more staff members. The fact you could even prototype a fully functioning MMO in eight months is the scary bit… The core of it wasn’t some sort of poor attempt either, it had factions / quest lists / crafting / AC / decent sever infrastructure etc. etc.

After about a year, I was putting together DX frameworks. Never mind essentially “modding” with a pre-made engine, the fact of the matter is it’s not that hard anymore.

Yeah, probably they are the exception to the rule. For every one that can do this, there’s a thousand who can’t but out of the millions of developers there’s still plenty who can.

So that leaves me in an awkward position, where “average” or even quite complex games aren’t good enough. If it gets to the point where custom content production / really advanced and large games become extremely simple then I will literally give up. Because as said, one grain of sand in a massive desert.!

3 Likes

It depends on what kind of game we’re talking about. The mobile market has been absolutely flooded with simple games, but that simply raised the bar a bit higher. I don’t see what’s the problem with that, it’s a free world, and technology moves on, making things that were hard easy, and things that were impossible merely difficult. It’s up to vendors to establish a ‘quality identity’ if it becomes a problem for gamers, and I think that while Apple doesn’t necessarily police its app store sufficiently, it has at least proved that such a thing as a ‘quality identity’ is important to consumers, at least consumers of their phone technology.

On the average solo indie budget, they can only write small games this way, not anything like a passable indie PC game. Hiring people costs a boatload of money.

Not really, or not as much as one might expect, I think. First of all, code is not the only problem. There’s art as well, and sound fx, and overall amount of content, and so on. Even if all of the tools that I can reasonably imagine possible actually existed, it would simply bring the development time for a full-size PC game down from several years to maybe a year. This means a lot to people who are committed to making one, but is still a huge barrier of entry to people who are not serious.

And even and so, there’s still an unimaginably huge difference between making a beginner-level RPG and something like Uncharted 4, simply making it possible to build the framework easily, and generate content at 4-5 times the speed that it can be created now, does not guarantee that the game will be anything good whatsoever.

Not quite, he would get far more done in the same amount of time, and be able to spend the time that was previously spent in rebuilding frameworks in making the game stand out even further.

There is, and that barrier is game quality. All the tools in the world will never enable people to move beyond the limits of their own abilities to design a quality game. And why wouldn’t we want this barrier to be continuously rising? If it’s not, then gamers and the game industry are being let down. Don’t we want to move forward and be capable of new things?

That’s the way it’s always been, and there’s no other logical state of affairs. It’s called moving forward.

There’s no such thing as removing all obstacles, there’s only removing obstacles for some specific thing. Expectations will simply rise soon after things become easier. Take VR for example, if it becomes more of a thing, the fact that it’s so immersive means people are going to expect much more high quality art, more interactible worlds, more detailed npc behaviour, more sophisticated games. And we indies always have to chase that but also be content with being the tail of the pack.

The crucial point for me is that many of the barriers of entry to games right now are largely artificial barriers, they are technical barriers, not barriers to game quality. If the market is saturated with crap games, that’s a problem with the market, and if it means anything to gamers then vendors will take advantage of the opportunity by implementing higher quality standards. There’s probably a bubble about to burst in the app market, but that’s the way it goes, in the aftermath hopefully the climate will be better for people serious about making quality games.

Well maybe I’m mixing with the wrong crowd, but they seem to be far and away the exception to the rule.

Like I said in my reply to @GarBenjamin , if a certain type of game that was previously difficult becomes easy, it means that a game that was practically impossible before becomes merely difficult. It means that you can spend the same amount of time and effort that you do now, and still make an exceptional game relative to the norm, because your time and effort investment gives you a higher return.

@Billy4184 Right now I agree. It is not so bad. I personally think it is already easy enough. Not that it is truly easy but when it is easy enough for millions of games to be created and a huge number of them by people with no prior experience… then yeah that means it is pretty easy already.

The thing I was getting at is you are talking about what sounded like ultimately your goal would be a way to push button and create AAA style graphics and everything else. In that scenario is what I am talking about.

1 Like

Sure, I understand … the same principles still apply though, until we can all create the universe with the wave of a wand. Because AAA studios would at that point be able to make something far beyond what our current idea of AAA is.

But like I’ve said before on this thread, I’m not so much fixated with AAA as such, as much as I am trying to simply describe what is significantly beyond the level of most indies. There’s also a huge divide between a studio with a few hundred million, and a studio with a few million, even though they are both probably not indie. So I’m not really sure how to describe myself.

Rest assured I’m not trying to say that indies will be in the same universe as Uncharted 4 anytime soon. But something like Mass Effect is, while not necessarily possible, realistic enough to warrant carrot status.

Also, in discussing this I’m trying to look at advantages we can create that are scalable, that don’t restrict us to simply aiming at a slightly better version of what we can do now, but enable us to start aiming at orders of magnitude higher scale, and so it’s useful to look at things in terms of how one would approach a goal that is still far over the horizon, and will be for quite a while.

Double post.

As much as I enjoy going back and forth over basic matters, what would actually benefit this thread is technical breakdowns, white papers, workflow methodology. Anything actually useful, opinions mean nothing and so do complaints, this thread picked up and started off well again and we’re going back round in circles…

BTW, so as said I’ve started the openworld thing again… I’m thinking city, building a procedural city generator in Maya to at least scope out the scene, this should at least enable efficient placement workflow.

2 Likes

Because it is more easy to discuss instead of going “hard work” :stuck_out_tongue:

3 Likes

Well I did try to start a rather technical discussion, which is how to design modular flexible code that can be re-used across games and genres. I think the issue came down basically to organisation problems, as @Martin_H pointed out it would be unpleasant to work in a code environment cluttered with stuff you don’t need.

In any case, I’m working on a versatile weapons framework right now, which is designed to be the basis for weapons in any genre of game. At the moment I have a very basic framework which includes things like assigning/removing weapons from ‘stations’ (carrying points), storing and accessing weapon groups, triggering different weapon attacks, and interfacing between weapons and the information sources for their firing conditions, etc. That last part is proving to be the most difficult, especially in terms of maintaining the hierarchy and keeping it clean and extendable, up to things like melee attacks. But I’m actually surprised at how much easier it is to think about the code when it becomes more abstract (it used to be only designed for space combat).

I hope to make a system that works all the way from my first mobile game or two, all the way to the Big Dream - so I’m really working on it already! :slight_smile:

2 Likes

I was at the dentist office previously so you all actually got a non-book post from me. I know I know! I should spend more days at the dentist! :wink:

Actually I think it would be cool to have some content generation tools that do for programmers what modern game engines are doing for artists. That would be very useful. Although I wouldn’t be aiming for AAA graphics it would just be nice to churn out decent quality graphics near instantly.

I do kind of see what @Billy4184 is getting at. Basically, if there were no obstacles and a person could decide today to make a game with the scope and quality of Skyrim and actually be able to do that in one year’s time yes it really would be a huge advancement in game dev.

I think my ultimate concern with that kind of trend is that… inevitably the end goal of all of this kind of stuff would be that one day any person could make any game of today’s AAA scope and presentation quality within say 12 weeks time. I think a lot of the people who have come into game dev in recent years have this wish. And I guess I see that as a bad thing because all it would mean is the markets are flooded with bigger games and they really wouldn’t be judged on quality or skill of the developers because basically they’d all be the same quality more or less. If someone comes up with some wicked cool shader, lighting etc presto it goes into Unity 10 and every person now has that and it is all incredibly easy no thinking or skill involved to use it.

But… BUT… I do kind of see Billy’s thinking… I think… although games would no longer stand out due to @ (or nearly anyone around here) having much better quality graphics than my game (because remember we all get the same uber quality from a super simple workflow) or my game having much better AI than someone else’s game (because AI would all be drag n drop checkbox behaviors available to all people)… so they would not stand out on technical skills of any kind whether programming or graphics or music. So… ultimately it becomes a completely level playing field. I think that is what Billy and many others want to see.

And in this case ultimately it comes down the game design itself. Which I can see some good come out of that. I think a lot of games rely way too much on how they look to stand out. It’s probably one of the first things that many people think of when making a game. “I’m going to make an awesome looking game that will stand out above the majority”. Removing that from the equation then we are left with judging games purely on design. And success or failure becomes even more tied to marketing than it is today.

I can kind of see why people would like such a thing. I just think there will always be something that separates things something else you have to work on very hard and pour even more time into. I don’t think the effort and time ever decreases it only changes what it is poured into. In this scenario I think marketing would become even more important than it is today.

Alright… that’s it… I am out of here and you guys can get back to your AAA modular game system (which is a cool idea).

1 Like

I would caution you against this kind of approach. Overly generic code is the source of so much bad/annoying code.

There is so little in common between something like melee combat and spaceship combat, that chances are, at best you’d be making the absolutely easiest section of the code easier (or harder) without actually addressing the difficult bits.

These are usually the kinds of things that are built in a coding vacuum, once you try to actually put into practice you slowly transition from:
“oh this is awesome!”
into:
“oh man this is annoying”
then finally:
“holy crap this is awful”

Keep in mind that usually what these kinds of frameworks do is make the easy parts easier and the hard parts into a bloody nightmare.

5 Likes

You could be right, but so far so good.

The way I’m doing it is basically like this.

  • There’s a Weapons script that I try to keep totally generic, that is basically an interface between the weapons themselves and everything else, such as input managers.

  • In this Weapons script I do all of the abstract organization, such as loading the weapons to different carry points, handling weapon selection, activating/deactivating weapons, setting/getting weapon groups etc;

  • When a weapon of any kind is ‘used’, it basically checks if it’s use conditions are true, and if so, it fires/swings. It is totally responsible for handling the damage it inflicts, either inside the weapon code itself or the code of the projectile it fires;

  • Handling the use conditions are what really separate the identity of the weapons, and most threaten the generic nature of the framework. For example, I have locking weapons that depend on radar locks. So I created a different script called Weapon Computer that handles the use conditions for ILockable weapons, still through the weapons script. It generates a new LockSequence coroutine for each new ILockable weapon that is activated, and changes the lock state of the weapon when that state changes.

  • I also have gimballed weapons, that have to track the mouse cursor or a target or a lead target position (calculated by the Weapon Computer). So for now I have added a method in Weapons for getting and setting the aim position of an IGimballed weapon. Again, the weapon is responsible for the mechanics of aiming, it simply receives a point in space as input.

So far, it’s pretty neat and I don’t feel like I’m drowning in clutter. But if you can think of any more difficulties I might run into, such as with melee attacks (which i haven’t got around to in particular yet) I would appreciate it!

In general, the problem with generic systems is that they either do too little:

Or make too many assumptions on how it works to really be generic:

I’m not trying to criticize your system, just nothing that this is frequently the problem with ‘frameworks’. They need to make a lot of assumptions about how the game works in order to do stuff, and those assumptions just won’t be right in a lot of cases.

To me, it sounds like both of these could really just be:

public abstract class Thingie : MonoBehaviour{  public abstract Coroutine DoSequence(); }

And why would I want that?

3 Likes

Already I don’t like it. :slight_smile: In my space game, I have a Ship component that accepts fire commands and passes those onto to a weapons system, if the ship has one. That way you can add a player input component and a Ship component to the same GameObject for player’s ship. But you can also put a Ship component and an AI pilot component on the game GameObject for an NPC. In that case, fire requests come from the AI pilot.

So right away I don’t like the assumption that the weapons system has a relationship to an input manager.

My weapon systems component accepts command like “fire beam weapon”, “fire projectile weapon”, “switch weapons”, etc, but not directly via input. That way both NPC’s and the player can use the same system.

Or maybe I’m misunderstanding you. :slight_smile: It happens.

A weapon should not be responsible for how to handle the damage it inflicts, since that’s just not very flexible. IMO it should only give a receiving entity data about it. An asteroid receiving damage data may need to react much differently then a spaceship’s shields. If the target’s shields are at 100% and the damage type only affects hull surfaces, then the target could determine that zero damage needs to actually be inflicted.

If I want to show accumulated damage from a beam weapon, I may want to save the last several hits per frame in the target’s data so that I can show an average damage number a couple of times per second.

So a game entity should be able to receive a message that a weapon hit, then decide how to handle it, otherwise you’re jamming that logic into the weapons systems. That tightly couples the logic to each game entity and reduces flexibility.

Or, again, I could be misunderstanding. :smile:

I do like the idea of a weapon computer calculating target lead position. As you probably remember, that’s a topic that’s near and dear to my heart. :slight_smile: I think there’s real value in something like that.

I’m a bit curious how I would adapt my game to such a system. I have “inventory items” that drive the specific stats on each weapon, so how would I tap into something so game specific? The currently active weapon affects things like critical hit chance, energy efficiency, and heat dissipation.

When firing, I have to communicate with an audio system, particle systems, line renderers, point lights, a heat system, the currently installed reactor for power drain, and several UI elements.

When even just changing weapons, I have to set the emissive properties of some materials, update the UI, and play sounds.

When equipping or unequipping, I have to spawn/despawn weapon barrel GameObject’s, tie into my inventory system and deal with several UI elements.

Kind of wondering how I’d tie all of that into a generic solution. There’d be so much wiring on both ends that I think I’d go mad. :slight_smile: There is such a thing as being too decoupled.

4 Likes

My suggestion - forget about “the weapon system to end all weapon systems” and just build things out in the simplest, most direct way possible.

You’ll end up saving tons of time and usually come up with a better system that’s easier to use and understand. This is advise I really wish more developers would follow in general.

Also, never ever try to predict your users needs until you have users. They’ll always surprise you. Playtesting in games and user feedback in software has a lot of similarity here. The things your users want out of a system can be quite different from what you think they are going in.

2 Likes

@Steve-Tack

Just calculate the SQR Magnitude of the of closest objects via a multiple variable array which has sub-parameters that automatically swap out <Wep Type (for DMG sub var), Surface type (or object type), distance from PJ to object and accuracy data). You can feed the array via YAML etc.

Reasons why? If a distance object, PJ will do less DMG, it will loose accuracy (randomisation offset variable), if the surface is hard it will do less DMG etc. etc.

Takes about 20 minutes to set up and is pretty performant, also you can re-use / share the base script for char interactions / enemies etc. It’s like really simple, doesn’t require that much coding.

Avoid the vector3.sqrmgn (whatever it is) command I’ve been told as it isn’t as performant in Unity, it’s not hard to calcuate the SQRM for objects though.

Swapping out stuff, use an enumerator tied to a function. I just use MM to be able to scroll through them and it works well enough… The particle “type”, MZ flash etc Decal type. is tied to the wep. No real reason for it not to be…

The collision array gets updated automatically with all the variables from the combat system, it is pretty much slot and play.

Hello!

I’m not a programmer, when I started i was over confident because I could implement features easily. I even get cocky because sometimes you see things in game and you are like “I could do better, why don’t they do this?” Then I go and implement it and it works! But like someone told earlier, coding is not software engineering, I collapse badly when I tried to make everything works together (I’m a game designer).

Things that non coder overlooked, such as sorting, menu and interruption are damn harder to figure out correctly on your own! Coding architecture is not the same as features, features are self contain puzzle, coding has little to do with it as it’s basically the interface to implement it, architecture is more about “logistics” and less of a puzzle, there is no inherent optimal state but trade off. At least in my worldview as a non coder who have only little experiences.

So I was tempt by modularity and start to learn about architectural concept like event driven design, object oriented design or component design, but to me they seems to always make things more complex by moving the difficulty elsewhere.

I end up eschewing modularity somewhat! if you think about it, the core of what you want to do is specific, you have a specific idea, a specific feature in mind for a specific project. Modularity generally make thing generic enough so everything can go with everything, the metaphor is “lego”.

But let’s say you want to make a specific car in lego or the taj mahal … at best you will have a blocky approximation because lego are block, their quality imprint the final design! but what if you want specifically to have the roundness of taj mahal dome? bad luck! That’s the same problem with kitbashing, if you have anything specific in mind you will only end up with an approximation, and that approximation depend on the quality of the “primitive”, so going modular is figuring out and designing primitive.

It’s everywhere, pixels, voxels, textures, polygon, shaders, instruction are all primitives. But they never end up generic enough so you always have competing model that works with trade off on some domain better than other, it lead to an explosion of framework, and the model themselves are extended ad infinitum.

To stay with the lego metaphore, if you want to make a car, you need to introduce wheel part which is a specific part, and to make wheel works with the system you need axle brick to interface with other brick, so genericity is down. It’s the same with language where instructions need to be added continually to cope with new problem etc …

That’s why I eschew thinking in generic modula pieces and start thinking more about containing the specificity in a manageable way, the metaphor I come up with was the “circuit board” or “frame”. Basically it’s a way to separate the features from the architecture. Basically in a project how things are assembled is the specificity of that project.

SO features where self contain and agnostic, they take input and give output, I plug them in a circuit board that handle all the “links” and routing of data and the subscribing (instead of having the features subscribing themselves) when necessary. SO I had all the necessary code in a single place too look at, and frame can be embedded into each other through input and output, so I could separate domain easily. Now I could test and create features and architectures separately with less headaches.

HOWEVER

Modularity can be embraced, it’s just a very different set of problem it is solving. Another way to work is not to start against the primitive by having specific idea to approximate (top down approach) but to think within the quality of the primitive given (bottom up) which can also lead to surprinsing results and less headaches. The reason kitbashing works is not because we want something too specific but because we works toward a broader goal. And this exploratory way of creating stuff with stuff can lead to surprising discovery and new quality height!

Here is Hawken, one of the first “AAA” quality indie of its time, it’s entirely made with kitbashing piece that are the same for the environement and the mech …


Still looks good IMHO, put it on pause and search the repeated parts that was scale and swapped.

3 Likes

This is pretty intense insight for a non-coder. Lot of truth here.

1 Like

To come back to an earlier mentionned problem. Let’s break down that specific problem to see how we can solve it. Assets!

Here are the different type of assets I can think of, sound, music, GUI, environment, character, code, animation.

We can evaluate assets along those criteria:

  • quality
  • coherence
  • expressiveness
  • optimization
  • exactness
    Some of them are interdependent.

Generally when making a project we need to evaluate assets along these criteria and the importance in the game, for example grass might not need to be expressive, background character might not need to be expressive, character on the rendered billboards don’t need to be optimized, etc … The problem is specificity most of the time, that’s where the cost of asset make a project expensive. If you choose a realistic game, it’s easy to get coherence as there is plenty realist asset, the common denominator is reality. Making a cartoon game in a specific style finding asset that match the style might be harder, you have a problem of coherence, though you might find asset that is coherent with the environment. Exactness is tricky, let say you want to make a fighting game, you found the perfect character and the animation has high quality, but the kick is too slow and not at the right height, you need to adjust it for gameplay, it’s not the right match, that’s a problem of exactness.

All those problem point to a hidden cost of assets, plenty quality assets in all style won’t be enough to make a game with specific ambition. The hidden cost is art direction. Art direction is the design of style, atmosphere and tone, AAA design spend a lot of time on art direction, with their budget you could do maybe 5 games with the same amount of TECHNICAL polish, and they do! Most AAA have a lot of waste in revision of assets until they find that sweet spot of art direction. Studio who were just competent simply disappeared (this generation the number of studio has gone from ~120 to around ~20, that’s one order of magnitude less) as it mean they would have a very bland game.

So can an indie compete? yes and know, if time was frozen and the industry trend and quality didn’t improve, yes you would spend a lot of time front loaded pre production to reduce risk and define exactly what you need and then ramp up production … except in this time and age the industry would have move out to something else and you would be obsolete. There is an adage and a curse in this industry that say you have to run to stay at the same place.

BUT things is about to change rather radically and we don’t know where it will lead us. Remember when Billy said he dabble with neural networks and to not bother … well there was a recent and rapid change in this field that will impact how we create assets forever.

Here just one example of this

BTW the stuff is free here: GitHub - alexjc/neural-doodle: Turn your two-bit doodles into fine artworks with deep neural networks, generate seamless textures from photos, transfer style from one image to another, perform example-based upscaling, but wait... there's more! (An implementation of Semantic Style Transfer.) (but it’s all code no interface) It also generate texture by using a single example :slight_smile:
At the time of this video the algorithm was 100x slower than now and it is still improving (they aim at real time) :slight_smile: it’s a revolution in the making.

This kind of technique will allow to alleviate the asset problem as expose above :wink: Machine learning is about to revolutionize production!

You can learn more about the general technique (references, codes and sources in the description of the videos)