But I'd love to try what you suggested. My first game goal would be to make the unfinished Wolfenstein 3d sequel "Rise of the Triad" -> http://www.3drealms....iginalspec.html
In looking at the source code for wolf3d, Carmack notes some interesting areas I'd love to explore, such as variable wall heights etc.
I'm not sure where you are in your learning, but I think this is too much of a goal if you just started. Here's my two cents about the whole questions about learning programming.
Learning programming up to the point of mastery can be divided into four major parts:
- The first part for the Average Joe is to learn the actual programming. For people who have never programmed in their life before, it actually is hard for them to grasp the concept of writing instructions. Computers follow instructions down to the exact steps. It doesn't question, it doesn't disobey. So programmers, must write the instructions correctly, line by line, and this is hard for Joe. If you ask Joe to write a code that "Ask for a number and print that number.", don't be surprised if Joe asked back "Shall I use for-loop?" I have experienced this first-hand teaching newbies programming.
Programming is a weird concept for Average Joe. Being able to compose instructions together that make sense, and make up a usable program, actually takes time to learn and master. Actually, I have observed that some Computer Science graduates can't still write a program from scratch. They can read code, they can change code, but they can't write it from scratch. Yes, the so-called programmers can't program.
- Joe's next hurdle is to master programming languages. This is all about "learning C++/Java/C/Python" and all that stuff. Knowing the syntax, what they do, and when to use them is no easy feat. This, by itself, may take a year or two for any programmer to master a language. Over the course of Joe's career as a programmer, Joe will find himself learning multiple programming languages.
- Then there's the third part, the library/API part. Learning this is similar to learning a programming language. As a matter of fact, some programming languages come with extensive range of API. Some others (like C/C++) don't. This is where Joe learns how to draw stuff on screen, how to play audio files, etc.
- The fourth part is to master software architecture. This require considerable amount of experience, and I'm pretty sure vary by person and experience. I have programmed for more than 20 years, and it's only just recently that I got *it*. By the time I got that "aha" moment, I have learned about 8 different programming languages, completed about a dozen personal games, and released about two-three commercial games.
Obviously, these four parts don't necessarily have to happen before one another. They are all learned simultaneously. You could go back to part 2 if you just picked up a new language, for example.
I think, only after you have mastered all four, of a particular programming language of a particular API, you are qualified to make an "engine". Knowing C++ inside out doesn't not make you qualified to make an engine in Java. I'm not saying you shouldn't make one. I'm not stopping you from making one as long as it's for your own personal use and learning purposes. It's a great learning experience. Just keep in mind that whether it's a "game engine" or a "3d engine", making it is no easy task, especially for the Average Joe.
As for prior knowledge, I've got a working knowledge and understanding of BASIC, and C. I designed and programmed the Command Line Interface of East-NSW TAFE college, and built a very very basic DOOM clone in QBASIC. The fourth image isn't my own work however, but that of Ken Silverman. I was toying around with his 3d engine written entirely in QBASIC which was quite fun to toy with, similar to the Wolf3d engine. Mind, the BASIC stuff like the Doom engine was done years ago when I was nearly a toddler so it's not fantastic, but I've re-invigorated my love for wanting to make an engine.
The API part is what I was curious about, that's what I always wondered about, as I never found anything in all of my C++ textbooks about how to actually *draw something* on the screen, even a single pixel. Regardless, I'm curious and eager to delve into it and see what I can come up with, but I'll be happy with getting one good solid program done, even if it's no more than a simple calculator. Progress motivates me, and getting started was always the hard part for me, but once I start making even a slight tinge of progress (ie, something actually works when I compile it!) then I tend to just steam along after that.