Why I can't write games anymore - a novella

Discussion about everything. New games, 3d math, development tips...
Post Reply
rogerborg
Admin
Posts: 3590
Joined: Mon Oct 09, 2006 9:36 am
Location: Scotland - gonnae no slag aff mah Engleesh
Contact:

Why I can't write games anymore - a novella

Post by rogerborg »

Pull up a chair and I'll tell ye a tale. A tale of back in the olden days, when men were real men, women were real women, and small fluffy compilers from Alpha Delorie were real small fluffy compilers from Alpha Delorie.

Back in the Day - about 1994 or so - I found myself with some free time on my hands. So I 'downloadorzed' (hey, it was a novel concept back then) Allegro and djgpp for my supa-phat new 486DX2-66 DOS/Win3.1 PC and decided that I'd write me a game.

Because I'm a sad Trekkie (please, nobody ever tell my daughter why she's named Miranda) I figured that I'd write a computronic version of Star Fleet Battles, easily the most complex board game ever devised by Man or Nerd God. I mean, that thing ships with Errata, Addenda, and Errata in the Addenda.

Bear in mind that at this point, I really had no idea what I was doing. Sure, I had a degree in Computer Science, but being from the Old Skoolz it hadn't taught anything as tawdry as how to actually, you know... write software. I'd hacked the bejeesus out of Netrek, but only to the extent of pwoning it with a 'borg client.

So I went in with an abundance of overconfidence, and no real knowledge of what I was doing, or how to achieve it.

And in about 8 weeks of finger-bleeding coding, I had a playable 2D game written in pure structastic C and debugged with printfs(), much as the Pilgrims must have done. It had no config to speak of: you created ship descriptions in human readable text files, using a 'unit X is based on unit Y' hierarchy, and likewise with scenarios. When you started it up, it presented a simple list of available scenarios. You selected one, and away it went.

But you know what? That primitive pile of junk implemented a significant subset of Star Fleet Battles. Cloaks, shields, damage control, phasers, photons, disruptors, plasma torps, drones, anti-drones, hellbores, fusion beams, expanding sphere generators, tractors, transporters, boarding parties, shuttles/fighters, tugs, pods, star bases, planets and ground bases, all 'modelled' in Windows 3.1 Paint then rendered in glorious spinny 2d-o-rama, replete with asplosions and Star Trek sound effects ripped from the bleeding belly of the burgeoning intartubes. It had AI that provided a moderate if predictable challenge, it had fleets and fleet commands, and it implemented all of my original requirements and a few more besides.

That was in 1994, when I knew nothing and had tools little better than sticks and rocks. In 2008, when I know vastly more about how to design, write and test software, and have tools that would make the 1994 me mess my pants... I honestly believe that I couldn't write that game again.

Want to know why not?

I know too much, and have too much.

I'd second guess myself on design, and design patterns. I'd agonise for weeks over the exact hierarchy of objects, interfaces and responsibility for implementing features, and then I'd change my mind and start over. I'd spend an age carefully abstracting away the presentation from the data so that I could change engines, then I'd spend another age using that flexibility to dither over whether to use engine X for its bells, or engine Y for its whistles. I'd agonise over whether a networked version should be architected as a multiplayer game with AIs, or a single player game with a coop/competitive mode. I'd type a line of code, then Google for an hour to convince myself that it was optimal.

I'd make posts like this rather than actually knuckling down and just writing code that implements the clear goals that I've set myself, because it's more rewarding to talk about it than to worry that I've picked the wrong way of doing it.

In 1994, I was Aquaman. Sure, all I could do was talk to fish, but dammit, when there was a problem to be solved that smelled even remotely piscine, I talked their little fishy fins off. Now I'm El Dorado. I have loads of powers, and can make up new ones as I go, but that just makes it harder to choose one and go with it. A marauding octopus! Should I read its mind? Shoot it with my eye lasers? Create an illusion of a sexy lady octopus? Should I grab it and teleport it to a sashimi restaurant? What to do... what do... oh, never mind, it's eaten Kairo.

So, as we grind and bump towards the conclusion of this senile shaggy dog story, do I have a point to make? A nugget of wisdom to impart?

I do.

First, don't listen to the 2008 Rogerborg. Now I only know what can't be done. I've forgotten what can be achieved though ignorance and determination.

Second, listen to the 2008 Rogerborg when he says to do as he says, and not as he does. If you have a game that you want to write, then write it. Just knuckle down and write it. Don't worry about how optimal your data encapsulation is, just bung everything into a structure and call functions on it. Write naive code, and don't give a stuff about optimisation or resource management. Get stuff on screen, and make it spin.

When you are happy, then you're done.

And here endeth the lesson.
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
bitplane
Admin
Posts: 3204
Joined: Mon Mar 28, 2005 3:45 am
Location: England
Contact:

Post by bitplane »

Ah, the fable of the old programmer. I love it! :)

I've been worrying about the design of my RPG game for what seems like an eternity, and had come to the conclusion that simple solutions just don't turn me on anymore.

Your story has given me a kick up the proverbial I needed. I'll keep the main design simple but modular, and build all the complexity into non-reusable parts that are ugly as sin but lots of fun to write. Most importantly, I'll have fun actually writing some code, and instead of agonising over the design I'll just make it go
Submit bugs/patches to the tracker!
Need help right now? Visit the chat room
hybrid
Admin
Posts: 14143
Joined: Wed Apr 19, 2006 9:20 pm
Location: Oldenburg(Oldb), Germany
Contact:

Post by hybrid »

Wow, I don't know what to say :o At least I wouldn't have expected this.

But I feel this is just the right attitude we need in this forum. Giving advices where possible, let others know where they should put more effort into and where not, and just say if we just feel uncomfortable with proposals. But never deny someone's plans or dreams to come true. I'll support any appropriate amount of scepticism, but after all we're in a time where almost everything is possible (and even happening).

So let's stick to some least standard, but then just do the thing's we have to do :D
FuzzYspo0N
Posts: 914
Joined: Fri Aug 03, 2007 12:43 pm
Location: South Africa
Contact:

Post by FuzzYspo0N »

I understand this feeling at least :>

I at least learned earlier on to make the game a game, and then make the game faster. It good to see members sharing what they have been through too...
dlangdev
Posts: 1324
Joined: Tue Aug 07, 2007 7:28 pm
Location: Beaverton OR
Contact:

Post by dlangdev »

thanks rogerborg for sharing your insight, i really appreciate them.

last night, late late night, i would call it probably an all-nighter type of thing. i was working on the creative side of the project and i saw myself standing inside the gameworld pasting textures to polygons. it was a nice experience, never in the history of my programming life would i see myself inside a 3d gameworld installing textures to quads. so, from there, standing...i could judge how much area a certain quad would be mapped before getting re-sized in order to set the correct visual effect--solving for correct magni-minification distance. the thing is, this type of work is entirely new.

moreover, the skillset requirement for gamemaking nowadays include a wide variety of technical and creative elements. with that big skillset requirement imposed, an ordinary developer (like me) would simply stand in awe at seeing how big the work is.

and i do understand the never-ending onslaught of n00bs forcing their aspirations on our doorsteps. their doe-eyed stare simply means they want to be part of this adventure, it's just that the tools inside their pockets aren't enough to make it a pilgrimage.

being that doe-eyed as them, i have signed myself up to be either praised or humiliated at an event, i won't tell because i still don't have enough work to show, so far most of what i've made isn't even up to challenge that game called fear.

anyway, i'm rambling. plus i need to get back to painting textures.
Image
Joe_Oliveri
Posts: 448
Joined: Tue Oct 05, 2004 3:24 am
Location: Boston, MA

Post by Joe_Oliveri »

I feel your pain. When I write code, I need it to be perfect. Down the shinny little comment above it. If my code isn't neat then I'm not happy. It's a downfall these days. It's more a programmers o.c.d. I guess.

Since I switch over to C# it's gotten a little better.

I'm all for going back to the just throwing a game together and make it work. It's really hard to go back.
Irrlicht Moderator || Game Designer
Learn the basics at </dream.in.code>
wildrj
Posts: 301
Joined: Thu Mar 23, 2006 12:49 am
Location: Texas/ Cyberspace
Contact:

Post by wildrj »

Lol man ive been having a similar problem on my opengl game engine.(will post about in the future) i ethier a think myself into a corner or code myself into a corner. Perfection is key to it but i cant seem to obtain it.
createuniverses
Posts: 1
Joined: Wed Jan 16, 2008 11:30 pm

coder's block

Post by createuniverses »

I bumped into this post from digg.com, and its great to read what you guys have written here, because it means I'm not the only one experiencing this "coder's block" on my personal projects.

I think we've internalized the message that decisions made early on can have a massive impact later in the project. We've probably seen lots of examples of ugly code and uglier workarounds, and decided we can do better.

Because of this, a lot of time is spent trying to get these decisions right. This leads to debilitating periods of endlessly trying to find the neatest, most concise and conceptually elegant way to represent something. You want your objects to be decoupled, atomic, simple and clean.

I think its best to internalize a different message - its better to build early and make a mistake, than not to build anything at all. You can redo the whole thing with a different approach, with a deeper appreciation of what is important and how to do it better next time, and the journey is much more enjoyable and interesting as a result as well, because we get lots of feedback along the way (feedback in the form of running the thing you're making)

For example: I was interested in neural networks years ago, so I built a neural network simulator back at uni, (or "college"). It worked, I played with it a bit, then I abandoned it. Months later, I made another one - the architecture was much improved, I was able to more easily create experiments with it. Then, I made one more - I built it so I could add and remove the neurons and connections on the fly, during simulation and during the training of the network.

After each iteration of making a new simulator, I appreciated more deeply what was involved and what was important to include and facilitate in the next version. I appreciated more deeply what part of the artificial neuron was important to represent faithfully in order to make an interesting simulation.

Unfortunately, since then, I've tried to make sure I've got what I'm making perfectly conceptualized before I begin coding.
This is unreasonable, because you can only conceptualize it properly once you've learned about it by playing with it and making stupid mistakes with it. Thats how humans learn.

Happy coding!

Greg
http://createuniverses.blogspot.com/
rogerborg
Admin
Posts: 3590
Joined: Mon Oct 09, 2006 9:36 am
Location: Scotland - gonnae no slag aff mah Engleesh
Contact:

Re: coder's block

Post by rogerborg »

createuniverses wrote:its better to build early and make a mistake, than not to build anything at all.
I hereby commit to reciting this ten times before responding to the next AAA RTS FPS MMORPG Project Announcement. ;)
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
kburkhart84
Posts: 277
Joined: Thu Dec 15, 2005 6:11 pm

Re: coder's block

Post by kburkhart84 »

rogerborg wrote:
createuniverses wrote:its better to build early and make a mistake, than not to build anything at all.
I hereby commit to reciting this ten times before responding to the next AAA RTS FPS MMORPG Project Announcement. ;)
I'll have to remember that one :D
fmx

Post by fmx »

great bit of wisdom from your little story rogerborg

reminds of an Orange ad I often see at cinemas: "its not about the message. Its about the man and his journey delivering it"
( http://www.youtube.com/watch?v=2iArICKWF9k )

ofcourse, as a job (and projects with a specific goal), it should be ALL about the 'message', and getting it done QUICK, regardless of HOW...

Great stuff

:D
BlindSide
Admin
Posts: 2821
Joined: Thu Dec 08, 2005 9:09 am
Location: NZ!

Post by BlindSide »

This is true, and its sad to say it but if we all could just see past the OOP and UML and write in buggy C-style code debugged using printf's, we would be 100x more productive.

(Also if we stopped browsing the forums or chatting on IRC too much :wink: .. hehehe)

Cheers, and your right, when I first started with Irrlicht I would piss out a complete game or 2 like it was nothing. Sure they were buggy, sure they didnt have state of the art effects or shaders, but these days im stuck thinking which class inherits what, and how to handle my entity updates.

Its a pain in the butt. :P
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Vsk
Posts: 343
Joined: Thu Sep 27, 2007 4:43 pm

Post by Vsk »

Umm, soreless.
All have its utility, nothing in sotware development is used just because is in the "fashion".
UML OOP, patterns, RUP, MDA, sotware factories of microsoft. It all has created becasue NEED. Need is relative, need is a word that must be used: "in this cotext I need..". Sotware were getting bigger, requisits from clients more bigger and complicate, and there were every day more clients, old process starting to no respods to the new NEEDS, so new models for sotware development were borns. (And of course enterprise directors wont to make more money in short time ;) )
Just like now, some models don't contemplate new needs so news are born.
Becasue they are useful if you NEED IT, they are not if you don't and even are a bad decisition.
Should I use "Use case diagrams" (sorry for my english) for contemplate game requeriments? I think don't.
Should I use RUP for a indie game development? if you do you are crazy :wink: ´.
Should I take RUP, modified and scaled (as always) and used for a big game development with great human resoursece? . Maybe, there are some parts that can be very usefulls. There are part that NOT AT ALL.
Should I even use OOP for game devopment :shock:? (I think it will be a waste if we don't). But of course allways if we need it. For example Sweeny from Gear of Wars use OOP but has great part of code wirtten in functional programming (another amazing programming approach if we NEED IT).

When I've apply just for fun UML or part of RUP (a little tiny part of course) for some personal game dev, I never had the problem of don't finish becasue of them, in the other hand, it make my lief easyer and allows me do think that it'll take more time in the other way.
And when I've not finished one was just becasue I quite becasue "time fun was over".
But anyway all this is up to the personal capabilieties of everyone, we all are differents, has differents abilities and problems.
I can not conceive in my mind some approach to any software that don't use somoe top-down approach in granularity. And this is because in other part of my life I think in the same way. It is how my brain works.
Some other friends of mine are compleyt differents. They don't need abstractions, they don't need "some black box" approach and they achieve the same goal in the same time.

All is relative and has it good and bad use and is our responsability to chosee when each of them should be use.
Post Reply