-- Why buy Unreal 2 when.... ---

  • Two Factor Authentication is now available on BeyondUnreal Forums. To configure it, visit your Profile and look for the "Two Step Verification" option on the left side. We can send codes via email (may be slower) or you can set up any TOTP Authenticator app on your phone (Authy, Google Authenticator, etc) to deliver codes. It is highly recommended that you configure this to keep your account safe.
Status
Not open for further replies.

Metakill

Inhumane
Feb 18, 2000
2,430
0
36
Redwood City, CA USA
Hey, I didn't mean to discourage you. If you can program, you can do it. I wrote a real-time 3-D engine once ages ago, it was fun. Ignore people who say, "Why do it yourself when someone else is already doing it?". The act of doing it is valuable in and of itself.

But I would recommend you start small. Decide what's most important and develop that first. This is 'bottom up' programming, which is the opposite of how large teams (should) do it.

If you are going to allow limitless forward compatibility, you need to develop outside of a hardware context. To achieve that you should ise a language like java that provides abstractions of hardware and OS features. Don't worry about speed. You can optimize with C or assembly later, first make something you can work with anywhere.
 

Chris Hargrove

New Member
Sep 25, 2001
4
0
0
Chantilly, VA
www.legendent.com
I'm not going to get heavily into this discussion since it's basically a dead-end (people are going to do what they want regardless of what anyone else thinks). That said, I will throw in my $0.02 on a couple issues. Note that I'm not talking to the original poster specifically, but rather anyone interested in this subject.


1) Assembly.

Don't use it unless it's absolutely required. You should only even consider using assembly in small speed-critical inner loops (verified by a profiler; do not make guesses about this), where you're absolutely certain that no algorithmic optimizations can be performed instead, and where you're absolutely certain that you can beat the compiler-generated code (verified once again by profiling).

In an entire game this might amount to only a small handful of functions, nothing more, and they're only turned into assembly at the very end of a project when there are no alternatives. 99.9% of the time assembly is not your best option, because the development and maintenance time/cost of assembly code is much higher than that of C/C++ code, and at some point you hit the area of diminishing returns. The vast majority of the time you're better off finding ways to do algorithmic optimizations (the best code is the code that isn't executed) rather than jump into nuts & bolts prematurely.

Do not think of these opinions as coming from someone who doesn't know anything about assembly; I used to do demo coding back in the 386/486 days and I loved assembly back then, but things aren't the same anymore. Compilers are much better, and hand optimization is much harder with modern P3/P4 systems which have complex branch prediction rules and instruction prefetch queues large enough to make cycle counting a nightmare (not to mention that it's difficult to count cycles accurately in multithreaded OS environments anyway).

In short, don't touch assembly unless it's late in the project, it's the the only option, and you're absolutely certain that you know what you're doing.


2) Engines.

You cannot make an engine that'll last forever. What you can do is design your engine within a solid infrastructure that allows easy additions and upgrades (like replacing a renderer, or a scripting language) over the engine's lifetime. This will not keep the engine alive forever, but it should at least increase its lifespan.

Of course, a large factor in knowing how to write an engine like this is experience, so if this is your first major engine project (and by "major" I mean absolutely no less than 50,000 lines of C/C++ code at a bare minimum), then don't expect things to go smoothly. Even experienced engine developers take a nontrivial amount of time in design upfront usually, and if you're new to this you'll probably want to take even more.

BTW, I highly recommend building your infrastructure in a bottom-up component-oriented fashion, favoring composition more than inheritence (i.e. black-box reuse). With as diverse a problem domain as a 3D game, it tends to work out much better in the end. Feel free to white-box individual subsystems in the engine, that's fine, but treat the overall architecture as a layered set of components.


3) New developers, new projects.

"Never be afraid to share your dreams with the world, because there's nothing the world loves more than the taste of really sweet dreams." - despair.com's poster for Bitterness

Game development is rougher than most aspiring developers think, and they often don't realize how rough it is until it's too late. Start small and gain experience. Experience and time are your most valued assets, so take advantage of them or they'll take advantage of you.

--
Chris Hargrove
Senior Programmer, Legend Entertainment
 
Status
Not open for further replies.