Thread: i've basically stopped game programming

  1. #1
    Banned
    Join Date
    Jan 2003
    Posts
    1,708

    i've basically stopped game programming

    I have been feeling bored with 3D game programming...I got so damn far on my own in just high school, more than most college students, but the intensity of it all just broke me down after a while...but then I started watching some interviews with John Carmack, and he was starting to talk about all of this technical stuff about optimizing stencil shadow volumes and re building binary space partition trees without regenerating vertices, and a 'general triangle re-optimizer', and I didn't realize how far I had come until I watched that interview and knew exactly what he was talking about. I wish game programming had ANY appeal left, because I basically just hate it now, but yet I've got SO DAMN FAR ON MY OWN. Nowadays you basically have to write a Doom3 renderer with all of the intense graphics stuff in order to have written something worthwhile (and, yes, I know of 3 people that are doing just that with much success) and it's just lost all of the fun, because now when I add something I don't think "wow, hey, that's neat" instead I think "wow, that sucks, I should've written something better, heck I didn't even INVENT this because somebody has already programmed this before...i suck"
    Last edited by Silvercord; 03-02-2004 at 08:30 PM.

  2. #2
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Hey man games are not just about graphics. Lots of modern games have great graphics but just plain suck. So do your best on the graphics but if your game is fun and addicting then haven't you accomplished your mission??

    No one cares if it uses the newest algos or the fastest. They only care if its stable, fun, and addicting.

    Take heart, bud, and get back into it. We need ya.


  3. #3
    Registered User caroundw5h's Avatar
    Join Date
    Oct 2003
    Posts
    751
    don't get discouraged man. I think your falling into all the hype about gaming. Check this out. Hopefully you feel better after.


    By the way: This quote
    and just to show off, here's some of my ray tracing code for colliding particles against brushes in a binary space partitioned world!
    is classic. I wanna use it for my signature or something. it shows just how much ou know, and the code you poseted was pretty nice too.
    Last edited by caroundw5h; 03-03-2004 at 09:55 AM.
    Warning: Opinions subject to change without notice

    The C Library Reference Guide
    Understand the fundamentals
    Then have some more fun

  4. #4
    Emotionally Unstable DarkViper's Avatar
    Join Date
    Oct 2002
    Posts
    343
    i like that article, its inspiring realy
    ~DJ DarkViper signing out
    ----------------------------------------
    My Site:
    Black Jaguar Studios

    Languages:
    Fluent English, Starter German, HTML, Javascript, Actionscript, Intermediate PHP

    Verteran Despiser of: ASP, Java, BASIC, Pascal, Cobalt

  5. #5
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Excellent article and having grown up with those games I agree wholeheartedly. Games today lack a lot of gameplay. There is more gameplay in some of the old games that barely took up 128KB of ram than there are in some of the gigantic 250MB behemoths that rule your hard drive today.

    Great graphics, sounds, algorithms, AI, pathfinding, visual effects, cutscenes, etc.,etc. do NOT make a good game.

    Live by it or die by it. Many companies have chosen the latter.

    IMHO it seems that limited budgets and resources often lead to higher quality, intuitive, ingenious, well-thought out entertainment products - this includes movies as well. When you give a director everything he wants, we find out that everything he wants is not necessarily everything that makes a good movie, game, song, or whatever it is.

    Try to code a fun, addictive game in less than 128 KB. If you can do it then I believe you have prob mastered the art of making games and have earned the right to use all the modern resources available to you.

    Case in point: I loved Nintendo's RC Pro Am so much that I went out and bought a used Nintendo system, used controllers, and a used RC Pro Am game just so I could once again play it. Isn't that what it's all about?
    Last edited by VirtualAce; 03-03-2004 at 05:26 PM.

  6. #6
    Registered User impactBlue's Avatar
    Join Date
    Mar 2004
    Posts
    5
    nice article. hey Silvercord, stick with it man. i'm a senior cs major and taking my first graphics course this semester and it sounds like you probably know more than 90% of the students in my class (and actually half of em are grad students). just keep setting your goals higher and higher (geezz i probably sound like your parent but seriously your like ahead of most people so don't throw that away). anyway, i'm new to this board (my first post); like i mentioned previously i'm taking my first comp graphics class and will be probably seeking a lot of help here in the near future

  7. #7
    Programming Sex-God Polymorphic OOP's Avatar
    Join Date
    Nov 2002
    Posts
    1,078
    because now when I add something I don't think "wow, hey, that's neat" instead I think "wow, that sucks, I should've written something better, heck I didn't even INVENT this because somebody has already programmed this before...i suck"
    Yeah, that's been happening to me a lot lately as well. It's discouraging. What helps, for me at least, is developing projects in a unique manner and adding more abstraction, so even though stuff you've done produces results similar to other people's, you know that your design is probably completely different, and can usually be much better. I've found that the way to enjoy game programming (or any complex app) is to embrace the design over everything else.
    One example that I've done this year for our project is n-dimensional systems. I've started doing all calculations and data storage modular through templating by dimension and type. So, I can do n-dimensional binary space partitioning (2D, 3D, 9D, etc), and have completely n-dimensional collisions, all optimized at compile time through metaprogramming.
    Sure, other people can make games, and other people have done binary space partitioning, so completing it is gratifying yet still lacks some, but by taking the concept and adding a twist to it to take it to a higher level, you get much more gratification from the fact that your design is unique and modular.
    The same logic goes for any type of programming, not just games. I strongly feel that when you program, you have to think of your code design as an art and treat it as such, otherwise it can seem like a creative but mundane task that has already been done before by other people. If you look at it as an art, you know that you can produce something similar to someone else, but in a completely different style. When you think about it like that, it makes your projects seem much more interesting, at least it does for me.
    Unfortunately, only programmers get to see the artistic side of coding, which again can be discouraging. It's just something you have to get comfortable with.


    also, I remember that exact thread from your signature!!! Gotta credit Leeman_s

    http://cboard.cprogramming.com/showt...g&pagenumber=4

  8. #8
    Banned
    Join Date
    Jan 2003
    Posts
    1,708
    First off you guys are all awesome, very supportive and very cool.

    About what poly said, I always have an extremely difficult time making a great design. I don't actually use too many hacks, but the way I code is usually very simple. I cannot seem to come up with a very flexible and object oriented system, I wish I could, but I can't.
    I can effectively use polymorphism and inheritance to an extent. For example, every object that has a Position and a collision hull in my engine is a WorldObject, such as ammo boxes and enemies, and they all have to override some pure virtual functions such as a TouchFunc (what happens when you touch it, i.e a door opens when you touch it), FrustumTest (how to determine if this object is visible, i.e with a bounding box or a sphere, or not rendered at all), and a simple Update function (for example, moving objects such as sliding doors update the amount of time they have been moving). I've got a very modular design in this case which makes it easy to add new entities, and subsequently I've a very interactive engine, but I can't make larger templated systems. I think if you read my code (which I can post a link to if you want) you will find it's dangerously messy (i.e i use extern way too much, but it works).

    EDIT:
    Oh, also, I remember the last thing I worked on : skeletal animation. my mind basically exploded when I tried to tie simple artificial intelligence together with the animations! I've programmed a matrix class, and it is functional enough that I can do all transformations in software if i need to, but I ran into so many problems with it.

    also, I remember that exact thread from your signature!!! Gotta credit Leeman_s
    Yeah, the ray casting thread. I actually went to that thread to get a picture of BSP that you posted, because I have to make a presentation in Information Systems Technology about something, and I'm doing a project about building a 3D world, and I am enjoying explaining this stuff to people that are actually amazed at simple things (i.e how complicated a rotation matrix looks to a newbie)...that has been helping me get a more generalized feeling about this programming stuff, along with the support from you d00ds
    Last edited by Silvercord; 03-04-2004 at 10:11 AM.

  9. #9
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    I'm in the same boat as you Silvercoord. I cannot make complex polymorphic objects/systems. I will get so far and then I'm like wouldn't it just be easier to drop this inheritance/protection crapola? Often for me it seems the C++ more gets in the way than it helps but perhaps it is the way I'm using it. Time and time again I find that games do lend themselves to C++ but I'm leaning more and more towards a mixture of C and C++. For instance in my 2D scroller engine I ran into siginificant problems concerning DirectInput and the mouse. The mouse IMO should be a global object. If not you gotta pass the object to every stinking thing that needs to use the mouse which is a pain. Plus the mouse only uses one interface object from DirectInput so to derive the mouse from a DirectInput class would be a waste. So what I did was transform the DirectInput class into a struct and then placed a pointer to that struct in the mouse class. Not the best design probably, but it works for me and as long as it works for the user - who cares how I accomplished it?

    C++ gets very confusing after a couple of inheritances and because of this I rarely get very deep with it. Plus C++ does not lend itself very well to be used in assembly language which I use quite a bit where I need speed. And I've heard time and time again that you needn't use assembly to gain speed only better algos but I'm telling you its not true. Profile after profile has proven that the correct use of assembly at the correct place can make a ton of difference - even on today's super fast systems.
    Also from an assembly point of view it seems to me that C++ would use quite a few redundant calls not to mention calls that need not be used at all. Every time you call you lose speed because of the stack frame overhead, etc. Look at some virtual functions in C++ and trace how many calls you are doing. It is quite scary. As to how this fleshes out in the actual assembly code is rather hard to trace but there are more calls in C++ based on my limited disassemblies.

    My theory is use what works. If an array works, then use it rather than a vector. If a BST works best then use it, but not all structure problems lend themselves well to BST's. Do you care how the nails got driven into the wood that your house is made of? No. Just the same, no user or gamer is ever going to care how you did it, just that they like the end result.

  10. #10
    Programming Sex-God Polymorphic OOP's Avatar
    Join Date
    Nov 2002
    Posts
    1,078
    Originally posted by Silvercord
    Yeah, the ray casting thread. I actually went to that thread to get a picture of BSP that you posted, because I have to make a presentation in Information Systems Technology about something, and I'm doing a project about building a 3D world, and I am enjoying explaining this stuff to people that are actually amazed at simple things (i.e how complicated a rotation matrix looks to a newbie)...that has been helping me get a more generalized feeling about this programming stuff, along with the support from you d00ds
    Ha, cool! I did a presentation like that for my high school senior year english class (we were allowed to choose any topic, but had to give an oral presentation for 40 minutes, so I did it on game development). It's awesome explaining programming and math stuff to people when they know nothing about it.

  11. #11
    Banned
    Join Date
    Jan 2003
    Posts
    1,708
    Bubba, I have run into similar problems, but I actually mimic the quake2 engine in terms of sharing resources...I've got a 'GameExport' class which links together all of the main objects that ever need to be used, and I just extern to it in every single file that needs to reference to it

    Code:
    class GameExport
    {
    public:
    	FPS_t	mFPS;
    	BSP		*mpBSP;
    	Player	*mpPlayer;
    	Frustum	mFrustum;
    	GameExport();
    
    		
    		void		HandleCommands();	//Goes through saved commands and acts on them
    									//Need some way to store parameters to commands, probably with
    									//a simple templated class 
    	
    		void		(*pGameCycle)(void);
    		
    		void		(*pRenderScene)(void);
    
    		int			CheckKeyBoard();
    		
    		void		CheckMessages();
    		void		AddMessage(int);
    		void		RequestMapChange(char*);
    		void		ChangeRenderFunc(int); //changes pRenderScene to the memory address given
    		void		ChangeGameCycleFunc(int); //changes pGameCycle to the memory address given 
    		
    		void		ParseEntities(std::vector<VWorldObject*>*);
    		
    		void		SetEntityTeaming(); 
    		void		ShutDown();
    		void		KillEntities();
    		void		KillBSP();
    		int			MapChange(char	*newmap); //Do anything to prevent re-loading the current? 
    		int			StartUp(char	*mapname);
    
    		std::vector<VWorldObject*>	mvWorldObjects; 
    		std::vector<int>			mEngineCommands;
    		char	*pCurrentMap;
    		char	*pNewMap;
    		int		IsStateTrue(int);
    		inline	void	SetState(int);
    		inline	void	DisableState(int);
    		GlobalVars	mVars; 
    		unsigned	int	mGameStates;
    		HDC			hDC;
    		HWND		hWnd;
    		trigtable	mTrigTable;	//This builds sine and cosine tables upon startup -*
    };

    that's another thing, i am bad with globals, I don't even use private in my classes. However, C++ is great if you use it properly, and technically yes there's some overhead, but it's a tool, and the cost is reasonable.


    Poly, how's digipen treating you? I'm going into Engineering next year, I didn't even end up applying to digipen.

    EDIT:
    poly, do you want to see the presentation when I'm finished so you can see where I used your picture? It's a very dumbed down project so "normal" people can understand it
    Last edited by Silvercord; 03-04-2004 at 08:45 PM.

  12. #12

  13. #13
    Registered User
    Join Date
    Mar 2004
    Posts
    13
    Just to lend my 2 cents, I have no real idea about what you are talking about yet (although I'm learning, its time consuming), but for the complicated object systems, an excellent idea is to use a singleton, this way all you don't actually need globals at all, and so much can be managed between anything.

    In case you didn't know, a singleton is a special type of class that has its default constructor set to private, so you can only create a new one via a pointer. THe constructor in return, creates one new instance of the clas the first time its called, then returns that instance every other time. It's remarkbly efficent, and works quite well, I've seen it used a few times, and I highly reccomend it, it could solve a lot of problems .

  14. #14
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Except that the only time I see to use one....you'd could do just as well w/o a singleton.

    It seems they are used just to keep the app in the C++ realm and nothing more. The same can be accomplished via the structures already provided with C.

  15. #15
    Banned
    Join Date
    Jan 2003
    Posts
    1,708
    thunder a singleton is one of those things that is pretty neat but doesn't ever seem to be absolutely necessary. In my engine, I just have a gameexport class, and I only make one instance of it. Works fine.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. how do the game engine and the api interact?
    By Shadow12345 in forum Game Programming
    Replies: 9
    Last Post: 12-08-2010, 12:08 AM
  2. 20q game problems
    By Nexus-ZERO in forum C Programming
    Replies: 24
    Last Post: 12-17-2008, 05:48 PM
  3. HELP!wanting to make full screen game windowed
    By rented in forum Game Programming
    Replies: 3
    Last Post: 06-11-2004, 04:19 AM
  4. Game Design Topic #1 - AI Behavior
    By TechWins in forum Game Programming
    Replies: 13
    Last Post: 10-11-2002, 10:35 AM
  5. My Maze Game --- A Few Questions
    By TechWins in forum Game Programming
    Replies: 18
    Last Post: 04-24-2002, 11:00 PM