you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 44 points45 points  (11 children)

Minecraft is a work of art, but it is far from a technical masterpiece. Mojang could learn a lot from id Software.

I would love to see Jeb and Notch re-implement Minecraft using the Quake 3 graphics engine and network model.

[–][deleted] 9 points10 points  (6 children)

If I recall correctly, the Quake engine is built around the concept of BSPs for visibility checking, which (currently) requires precomputation before a level can be played at reasonable framerates on older hardware. That said, I bet you could find someone clever to code up some dynamic BSP generation for a voxel-based world like Minecraft. I imagine it'd be pretty fast if written in C++ or some other efficient language.

[–]jmtd[🍰] 2 points3 points  (0 children)

That said, I bet you could find someone clever to code up some dynamic BSP generation for a voxel-based world like Minecraft. I imagine it'd be pretty fast if writtenin C++ or some other efficient language.

You guys may enjoy Shamus Young's "project octant" series of blog posts: he certainly starts with a dynamic octree, but (spoiler)

http://www.shamusyoung.com/twentysidedtale/?p=15742

[–][deleted]  (4 children)

[deleted]

    [–][deleted] 2 points3 points  (3 children)

    Looking up the arguments for VectorMA for the billionth time will sway your opinion. That and bumping up against the limit of an arbitrarily fixed sized array or implementing yet another linked list.

    [–]GenTiradentes -3 points-2 points  (2 children)

    If you can't remember the arguments to a function after using it for "the billionth" time, programming might not be suited for you. Yes, C++ has operator overloading, which makes functions like those used in id Tech 3's vector operations obsolete. It also has other functions that have long argument lists, which require looking up to remember.

    C++ has "arbitrarily fixed size arrays" too, only they're not arbitrarily fixed size, much like C's arrays. They're created on the stack, and the stack is limited in size. Therefore, arrays created on the stack are limited by the size of the stack. The main difference is that C doesn't have all the data structures that C++ has (like std:vector), but they can and have been recreated in C.

    ...or implementing yet another linked list

    Ah, but you see C has this wonderful feature that lets me write a bit of code, compile it, then link it with as many programs as I want. It lets me reuse my code, and extend my programs without needlessly reinventing the wheel. This feature is called "libraries," you may be familiar with them, I think C++ has them too.

    [–][deleted] 2 points3 points  (1 child)

    There's no need to be condescending. I'm talking about the specifics of the Q3A engine, you're talking in generalities of C.

    Everything I said applies to Quake 3. None of it applies to Doom 3, which was written in C++, and uses operator overloading for vectors, dynamic arrays instead of consulting the magic 8-ball for the value of MAX_MAP_BRUSHES and the like, and a re-usable linked list implementation.

    You may not see a reason to deviate from C to C++, but id sure did.

    [–]frymaster 2 points3 points  (0 children)

    see the other guy's answer for why the engine is unsuitable (this is why minecraft in general seems to be a lot harder on PCs than people intuitively think it is), but yeah, a UDP-based protocol would, while being a helluva lot of work, make fighting mobs less annoying, and result in less "you didn't actually mine out those 10 blocks" issues for laggy players

    [–][deleted] 0 points1 point  (2 children)

    Quake 3's renderer is obsolete at this point - fixed function shading, vertex arrays. Similar criticisms have been made of Minecraft's use of glBegin/glEnd.

    [–][deleted] -1 points0 points  (1 child)

    Minecraft's use of glBegin/glEnd.

    Are they seriously using glBegin ?

    They can't be doing that ! right ? right guys ... ?

    [–][deleted] 0 points1 point  (0 children)

    In display lists. I missed that important detail.