- Joined
- Jan 28, 2009
- Messages
- 8,516
- Trophies
- 2
- Age
- 33
- Location
- London
- Website
- gbatemp.net
- XP
- 13,835
- Country
Pretty. It's being developed by the same guys being COP on DS. And I think we all know how that turned out...
http://www.iron-fall.com
I love it how people go nuts whenever they read "Assembly", as if using Assembly was equal to pushing the machine to its limits and getting the best performance, as if the concept of coding something in Assembly poorly was a completely alien one. Moreover, you can use coding prowess to great lengths, but if you have no artistic talent whatsoever, you'll end up with something that's technically advanced and yet horrible.
SDK's and function sets were created so that coders wouldn't have to deal with low-level functionality, Assembly is something you reach for when the SDK is insufficient and does not provide a necessary effect. Coding something in Assembly from the ground-up, including pre-existing effects already offered by the SDK isn't clever - it's smashing your head against a wall instead of using a door.
By going full-on Assembly, you completely disregard established coding standards in favor of a vague premonition of "better performance" which you may or may not reach.
This is all very true, however... I develop my point further later.Actually... a human can optimize better than a compiler. How are you supposed to use SIMD instructions, or other low level ops that cannot be used in a high level programming language? Intrinsics are just "prettier" assembly.
...and the 3DS's SDK is aimed at one platform. None of the issues you outline above apply to it in any way because the SDK's function set was created with one device in mind, it's already pretty damned optimized and it exists for the sole purpose of cutting down coding time. Let me give you an example:And I disagree that by going "full on" assembly, you disregard established coding standards. For example, a piece of optimized software I'm comfortable using, LuaJIT, has an interpreter that is written entirely in assembly on supported platforms (ARM, x86, MIPS, others...), but does its author disregard established coding standards? No. The author of LuaJIT is capable of optimizing at a level a compiler can never reach, because he knows the platform (and these are generic platforms!) in-and-out. A compiler is generic. It can't know that you're targeting this one architecture where X feature is faster than Y feature under Z circumstances. In such a case, through profiling and human ingenuity, a good programmer can drop down and write the correct code--sometimes using assembly, when the need arises--and write code that would otherwise be too slow.
printf("Hello World!");
My point is not "using Assembly is a sign of bad development", my point is "using Assembly where it doesn't need to be used" is.Now, I'm not necessarily defending this game. I'm just arguing your points about using assembly being the signs of a bad SDK or whatever.
That's...kind of embarrassing if that's the best the 3DS is capable of.
...and the 3DS's SDK is aimed at one platform. None of the issues you outline above apply to it in any way because the SDK's function set was created with one device in mind, it's already pretty damned optimized and it exists for the sole purpose of cutting down coding time. Let me give you an example:
That's...kind of embarrassing if that's the best the 3DS is capable of.
And I agree wholeheartedy with what you're saying as well - there's only so much optimization the SDK can go through to squeeze out performance and going beyond that threshold does require speaking directly to the hardware using a low-level language, the lower the better.I don't need to be explained what printf does. In any case, even the best compiler doesn't know all the outside circumstances that arise during execution of the code. It can guess, but it can guess wrong. This happens more often than you'd think. A compiler can't optimize a matrix multiplication beyond basic collection of intrinsics, but it can't do much more than that. It takes hand-written assembly to ensure that a matrix multiplication is as fast as can be. I doubt Nintendo's SDK even provides matrix multiplication methods, either, to further this example. Game engines tend to roll their own, regardless.
And regardless of Nintendo's optimization abilities of their compiler, it's not going to know that a cache miss here as a result of an extra instruction is going to slow down this tight loop by over half. This is where a profiler and a good eye comes in. And what happens when the compiler generates suboptimal code? You have to write it yourself.
In any case, I do agree with your last statement.
Dual-screen rendering at 60FPS in 3D (top-screen) while pushing some fancy effects.That's...kind of embarrassing if that's the best the 3DS is capable of.
But... rendering 3D on both screens is something the standard SDK does... It's not something "weird", it's not like with the DS which only had one 3D engine (Main Engine was capable of 3D, Sub Engine was not) where you had to copy frame buffers to get 3D on both screens, this device does it natively. Then again, it is at 60 FPS and with a lot of detail, so that part of it is impressive.Dual-screen rendering at 60FPS in 3D while pushing some fancy effects.
It's pretty impressive, all it needs is some actual art-direction.
Looks pretty cool would be cool to see games like that with a lot of enemies on the screen at once.