Advanced Game Engine Design

Started by
41 comments, last by jpetrie 13 years, 6 months ago
Have a question if i am going down the right path.

I have a game engine working on for 6 years now. I started programming in sixth grade and was doing physics and trig in 8th grade. taught myself calculous so i could do the physics so hardcore love physics. but anyway this is a overview of my system ima not give everything away. does this resemble any system made so far, i bet someone else did it this way its easiest way and i dont know cause havent looked into it.

first 7 layers

Platform - Hardware dependent code, Data Types, Data Containers and so forth
System - OS dependant code
Mathematics - obvious
Object - Engines object layer for all objects
Module - Encapulates extendability of engine organizing everything into systems
Kernel - Cmon you know wtf this shit is
Application - Functionality to make apps and projects obviously at top

Then i have a 8th layer for extension
Scinter - user interface
Physics
Chemistry - friend thats engineer modeled fake chem and did the stitistical modeling and math for this but ima programming it
AI - all this has atm is Recurrent/Custom Artificial Neural Network that can recongifure in real time the confidence intervals/Activation function/Learning Algorithm(so can use multiple)/propagation rules(competative and full feedforward atm)
Script - Scrible based on the context free grammer of C
Graphics
Input
Sound
Networking

then for Windows and Linux i have 2 standard executables that are
Scloader - Windowed Graphical System Runtime Linker to load the game can run multiple games at the same time in one app
Scommand - Command line run time linker mainly for just setting up systems at first if you wanna avoid all the extra stuff of scloader to organize a system or if you want command line games or what ever

Then cause i have a module layer and i made all those extensions native to the system i abstracted 8th layer extension so they are linked at runtime to allow flexability then of course u can load up custom modules for ur game

then ima planning of doing addons like a music player or what ever that games or apps can load plus tools like all those fucking damn editors so fucking many

But also the application layer can also be reorganized so u can make ur own app executable if u wanna release a game and just wanna streight game and not all that extra stuff

I have a administrator module for only me of course you can image the awesome usefullness of this could do shit without premission and rights would just make it a open system which would obviously not work

But anyhow its fucking gigantic and havent made any games execpt like cell wars and little games, but done shit loads of mechanics and physics simulation

then i just at the splash screen i take a picture of the system using serialization and stream to file so to play a game just run the sof(scrut object file) and game ur game is running, this is the main way ima doing things i dont wanna make hundereds of executables

code is homebrewed except Standard template library containers
Dose it sound like ima on the right path just curious?

and ima writing a tutorial on my user interface all tutorials on this subject suck donkey balls seems ima only one who knows how to program

[Edited by - Scrut on October 12, 2010 10:43:50 PM]
Advertisement
I'm sorry, but I couldn't get through your post. I'm assuming you are in high school or above, and that you live in the United States (Phoenix, AZ). If that is the case then I recommend you at least make an attempt at employing correct grammar, using correct spelling, and avoiding profanity.

Remember your audience. Right now, I guarantee you are viewed as unprofessional, young, and amateurish. In the future, consider thoroughly analyzing what you say/write before you do it.
Denzel Morris (@drdizzy) :: Software Engineer :: SkyTech Enterprises, Inc.
"When men are most sure and arrogant they are commonly most mistaken, giving views to passion without that proper deliberation which alone can secure them from the grossest absurdities." - David Hume
wtf ever dude ima change the post but ima not even close to high school and just posted really fast. do you mean you cant understand what i am saying its english are u in 2nd grade? o and did you notice ima talking to humans so wtf am i the only one that just streight up says what i mean if that has some adult language then grow up and mature cause if this site is a bunch of kindergardeners then ima out of here?
This kind of high-level module overview doesn't really tell us much if your engine is like any other engine -- it's they way they interact and are used by the engine's different users that would determine that I guess.

Do each of the 7 (8?) layers depend on the underlying layers? Can you have an object without a module? Are these layers a conceptual convenience, or an actual seperation in the build (e.g. different libs)?

What kind of functionality does the "Module" layer provide?

Is Object a "game-object" type class, or a system-level class to do with memory manangement etc?

What's the difference between the Kernel module and the Application module?



Regarding Halifax2's post - it's true - if you want professional advice, then it's best to act professionally. If you write like an amature, you'll be more likely to be treated like one in responses.
It's not that hard to write "I'm" or "I'll" instead of "ima", or to use propper punctuation to avoid weird fragments like "its english are u" or "grow up and mature cause".
Quote:Original post by Scrut
and ima writing a tutorial on my user interface all tutorials on this subject

It's generally suggested that beginners not write tutorials. Leave it to experts that have researched thoroughly the possible approaches to a problem. Things like user interface design are very well understood, and while it might seem like you have made an awesome design you might want to hold off because you'll end up starting a new project later and iteratively find a better solution invalidating your tutorial.

Also that is kind of odd that you use a lot of profanity. Most children get over that around high school. Interesting.
I pretty much stopped reading here...
Quote:Original post by Scrut
Cmon you know wtf this shit is

... but I'm wondering how you managed to access the hardware given that your "Platform" module already takes care of that.

Anyways... this is all the information that I needed:
Quote:Original post by Scrut
But anyhow its fucking gigantic and havent made any games execpt like cell wars and little games, but done shit loads of mechanics and physics simulation

Apparently your "game engine" is fucking gigantic and you haven't made any games. No, your not going down the right path.
Thread of the year, looking forward to your tutorials.
[size="1"]
very good questions indeed sir! well here we go ill try and explain it to you im not grad student so ima use the wrong terms i know it, please do not judge my programming skills by how i word stuff.

---------

Do each of the 7 (8?) layers depend on the underlying layers?
Each layer depends on the layers bellow it, so 3 depends on 2 that depends on 1.

---------

Can you have an object without a module?
O YES of course glad u asked. if you use the scloader or scommand then ur project is forced to be placed in a module and any object if on the IObject tree or not would be in a module, but your module can load a dll with Scrut::System::CModule which is diff from Scrut::Module::CModule which is a object module for the engine.

If your project is a exe then yes you can have any object you wanted outside of a module, like a piece of trash even if you wanted, inside the project that from scruts view would be external to the engines core BUT REMEMBER that would give you some seperation on the side of functionality cause the engine loves objects and modules cause u can just impliment in your executable's project and load it into the engine on startup/load or at any point it doesnt matter it can do all that stuff. then you got the engine handling objects not in modules that that other systems in the engine can manipulate like scripting systems by cheating and using the addresses to jump where ya want instead of identifiers.

And also if you couldnt have a object without a module or forced 100% of the time into using IObject base class then thats just plain limiting and stupid.

---------

Are these layers a conceptual convenience, or an actual seperation in the build (e.g. different libs)?

Layer 1 and 2 and 8 are actually contained in additional libs, resolved at build of course, that way you can change any code for those by substitution of the .lib and can easily do a build for linux then windows with scrut.lib and scrut_linux.lib and scrut_windows.lib ya know. 3, 4, 5, 6, 7 are in Scrut.lib static linked library. and layer 8 the extensions are in a additional library. So there ya go with the seperation of the build.

But i would say its also a conceptual convenience and actually if you were to sift threw the code you notice that i did it this way so objects need not and have no access to stuff they cannot use like i wanted to make there be no way even if i messed up( wouldnt build ) for me to manipule something in the kernel to the scripting engine or anything from low level to high level without the higher level handling the interaction ya know obviously a higher level can references a value in the lower level and that would cause data from low level to manipulate higher level functioning and execution. The layers came from me designing the system abstractly and express functionality/behavior and permisions ya know and yes each layer has its own namespace so i dont clog the global namespace with everythihng plus without namespaces then i couldnt have two CModule classes( one in system layer and one in module layer ).

---------

What kind of functionality does the "Module" layer provide?
Module layer depends so hardcore on the object layer of course and extends the functionality of the system to extendable at runtime, yes i know you can load up a dll with Scrut::System::Module and allocate objects from within the dynamicly linked module, but that would require some extra code in the game cause the engine doesnt allow system to access module directly from lower level to higher level, so you would need to add that so the higher level referenes the lower level and adds the functionality. so to get around this i make module layer. really when we get down to it, it is just a library instances of factories(allocation and deallocation along with alive and dead object lists)\builders and so forth like a object library organizing your interfaces for you. but it doesnt force the objects to be used in a specific way, mearly allows a open ended number of objects to be accessable by the streaming system and by hardcode so u can by hardcoding make a call and see if a object is possable to be created or yeah if you know streaming and serialization then yeah allowing the objects that can be used to be dynamic is a must for a system that doesnt have to be coded specificly for one game, or just plain deal with to much dependency on game specific code.

---------

Is Object a "game-object" type class, or a system-level class to do with memory manangement etc?

Well here we go. all layers bellow the object layer cannot have interfaces implimented using IObject base and thats alot of system objects like threads\dlls\containers used in the system and i can go on and on. but all code in the module and stuff above object i try and use IObject base and organize stuff into systems so IObject does allow message propagation thru the systems but also yes its MAIN functionality that i was at first using it for was Memory management. But sense i use the sof files alot(serialized objects streamed to files so a Scrut Object File) i like to use IObject base alot so i can always take snap shots of the system and just load up whatever whenever i want.

---------

What's the difference between the Kernel module and the Application module?

Well i can answer this in no time. its about the level of abstraction as the entire system is abstractly organized. The Scrut::Application Layer( it is not a module btw not even close the layers are not implimented using module ) includes the highest level you can go which is Initialization\Run\Destruction. basicly i like it this way so you just use Scrut::Application::IApplication::CWindowApplication as a base for your app in your executable and just overload initialization\run\destruction methods. the kernel is more concerned with handling whats happening in the now as far as execution goes. like it has a task manager and handles the lists of Scrut::Module::CModule instances and really uses the Mediator Design pattern ya know by allow all those messages to propagate to the correct places and allows everything to live together nicely and neatly. but thats what the kernel spends alot of its time doing if you wanna get down to it.

---------
ok layer 1 would have asm code in it um ok that was easy
and btw i dont expect to have my tutorial posted just thought it would be cool so was ganna give it a shot and if it was then maybe it will help someone, and yes i would not say one bad word in it, OK OK OK im sorry ill remember my audience yes i know we do not need potty mouth language sorry

This topic is closed to new replies.

Advertisement