I'm about to embark on a journey where I let go of the typical way I program and try something radically different as an experiment. I've been programming for a little over 15 years now and I have grown tremendously, but recently I've felt like I haven't been as productive as I've been in the past. This feeling has become stronger watching Casey Muratori code live on stream for his Handmade Hero project. The man is just non stop pumping out code like there's no tomorrow with seemingly no effort. What's funny is that I feel I've been the same way when I was less experienced, but nowadays I feel like most of my time is spent on thinking on what should go where, how objects should interact, what should be private or protected, should I have a move constructor or delete the copy and assignment constructor etc. What I want to find out for myself with this experiment is whether I can be more productive in a large project over a reasonably long time following a new, or rather old, way of programming.
Every experiment needs an hypothesis! I'm not going to be all scientific about this, but I have an hypothesis. As you're learning to program, you're unfamiliar with a lot of concept and you make a lot of mistakes that you learn from. Often times you don't really know what the correct solution is, feeling like there is such a thing (there rarely is :(). You'll scour the internet and you find all sorts of patterns and paradigms, you'll love them and start applying them everywhere. If they don't fit the problem, you'll make it fit god damn it, silver bullets everywhere. Eventually you come to your senses and you start applying things where they fit instead of forcing it onto everything. You're experienced now, know what to do and when to do it, you make less silly mistakes and you only go "fuck, did I write that?" 9 out of 10 times now. Mistakenly you've attributed this success to the use of OOP, not the experience you've gained. That's what this experiment is about.
What I'll be doing and what not I will program a complete game (the one I've wanted to make for so long now!) without the use of OOP and some typical C++ features. If you're wondering what my definition of OOP is, I honestly don't know... or care much, but these are some of the things I'll be doing differently:
Solve the problem at hand in the most simple possible way, no generalizations until they're actually needed.
No more combining data with procedures, so no member functions.
No more templates, I want my compile- and turnaround times to be as fast a possible.
Start making use of some macros. I've been very opposed to using them before, but I will use them sparingly where they make sense.
Everything is public, yikes!
No constructors, destructors, copy/assign/move constructors. But what about RAII!? Well I did say radically different, so I'm going to give this a shot.
That's enough to give most programmers a heart attack. But I wonder, how many have actually tried programming in a different way after they've become experienced and how many just got set in their way? I love programming and I want to keep growing at it, that means sometimes you'll have to visit the no fly zones, just to test if your presumptions are (still) correct.
The week of awesome is over, although it was more like day of awesome for me due to an extremely busy period of my life. If you haven't checked my game out yet, you can download it here, will probably take you only 5 minutes to get through .
So, you have a day, maybe two, what do you do? Well I thought I'd make a text based game, no artwork needed there, never done one before, should be interesting (it was!). I had a lot of great ideas that I just could not get in with the limited I had, but I will list them here. First, lets talk about the theme; death is useful. The way I wanted to implement this theme was by having a sort of repeated day story element in there, similar to Day Break or more recently Edge of Tomorrow. A day that keeps repeating itself unless you solve some grand puzzle and in order to not having to repeat the entire game a gazillion times you could hit checkpoints where you'd start later on in the day after having solved a smaller puzzle before. Now personally, I thought that was a great idea, but have you ever tried creating a short story, where you not only have to think of the general story, but get all the details in like all the characters, what the environment looks like (D&D players know what's up) and all that jazz. That stuff takes time! Now add in the fact that you have to lay out all the different interactions with all the characters and objects and you got yourself a new life goal . So, unfortunately I didn't get any real puzzles in there .
Another thing I was toying with in my mind was adding in combat, where you'd have spells or special attacks with cooldowns that you'd be able to view on the side, maybe even add mana or some other resource. The combat wouldn't be just about spamming all your abilities, but using the right one in reaction to the enemy's actions. I wouldn't have shipped anything if I went for this, but might be interesting to do in the future.
Thinking about and creating my first text based game sort of opened a new world for me. The sexiest thing is, you can do anything in a text game, anything! Like if you wanted to do a flip, pick up a gun from the ground mid air and shoot a baddie in the face before you land...you could totally add that kind of stuff in without breaking a sweat. What's the action? Here's the result. The mind does the rest. That's what I find so appealing.
Maybe next year, maybe not, we'll see.
In case anyone got stuck, here's a spoiler on how you can get to the end: [spoiler]There are multiple ways to perform these actions, these are the more verbose ones look around -> look at dresser -> open another drawer -> grab key -> open door -> walk to end -> unlock right door -> enter right door [/spoiler] Also, things you might have missed: [spoiler]If you wait long enough before you say "I understand" you'll get two messages. You can also not confirm when asked to, wait long enough and you'll get a message, say no and you'll get another one. When asked to push the button, just writing push is not enough, you'll get a message if you do. If you wait long enough in the first room you'll hear things(happens once). You can "look outside"/"look through window"/"look at window" in the first room. If you wait long enough after finishing the game you'll get two messages. [/spoiler]
So I've gotten around to implementing input and a sort of state machine, For input I've implemented the Levenshtein distance algorithm to allow for typos or misspellings or even conjugations. It'll also allow for another interesting mechanic: I'm planning on putting some timer based events into the story, where you have to act fast or die, e.g. running away from something, but if you mistype the word run, you might stumble which may or may not result in your death. So I'm hoping that'll turn out to be a fun mechanic.
I should now be able to get some story going if I don't wander of implementing more stuff. Also, I've put in the splashscreen so I don't have to worry about that any more .
So, I've set up some initial ground work for my text based game. As I mentioned previously, I'm using the ImGui library. At the time of this posting there's no support for multi-line colored text, so I had to write that myself. I went for an approach where I can just place tags within a string to colorize sections of the string, much like html tags. Took me a couple of hours, but I'm sure it'll be worth it, not only is staring at a single color really boring, it's also hard to convey some information to the player without it. Like if there's some object the player should interact with, it makes it easier if it's colored within the text.
I ran into some interesting problems when implementing this. Say you have text with tags in them that you have to parse, this text also need to be broken up into lines manually, what would you do first? Splitting the text up for the colors first leaves you with chunks that may or may not fit on a single line, having to split up these parts again seems like a lot of work. The second approach is breaking the text up by lines first, but this time you run into the problem that the tags are still there so you'll end up with lines not filling the entire width. Oh noes!
I went for the second option, but on determining where to break the lines I keep the tags in mind. That means that every time I need a length or offset into a string I manually count said length or offset and ignore tags in the process.
Another thing was that ImGui is (obviously) an immediate mode UI library, which has it's drawbacks. I would have to parse tags and break up lines on every frame, which might not be a problem for the length of my game on modern day computers, but it felt wrong to keep it like that. So I implemented some retention for my multi-line colored text, I only have to parse tags and break lines once. Okay maybe that's not exactly true... once per window resize.
That's all for now, of to some gameplay programming!
I wasn't planning on joining this year due to time constraints, but seeing everyone getting their game on got me so excited, I just had to get into the fray! Considering my limited time, I've decided on doing a simple text based game. I'll only be able to work for a day or so in the weekend, but I think I can crunch something out in that time.
I'm planning on using C++ and this ImGui library. I've never used the library before, but it seems solid. As for the theme, I'm thinking death will be useful by getting clues when you die to progress through the game.
That's all for now, hope to post some progress tomorrow .
This week has been a blast! I was barely able to deliver anything, but I managed to get a grand total of 1 minute of simple gameplay in there . With the limited 4 days that I could work on this project and the direction that I went, I don't think that's too bad. Since my last entry I've added limited movement in the z direction to make things more interesting and I've created this level out of toy blocks. I think I've spent 40% of my time on creating models and animation, 40% on putting the level together and about 20% programming. So lets have a look at my final submission:
As you can see it's not much , the gameplay is very limited and the original idea of creating a diorama world was abandoned due to time constraints. I'm fairly happy with the end result though, just bummed out that the lighting on the main character isn't working well, I had to let that slide in order to get the rest in. If I could've worked on this for an entire week I probably would have had a richer world with a couple of extra gameplay elements in there.
I'm looking forward to playing all of your amazing entries in the next few days, my hat's off to you!
Download link to the game: https://www.gamedev.net/index.php?app=core&module=attach§ion=attach&attach_id=23989
This is my third day working on my game and even though I still have a few hours to go, I wanted to post an update as I didn't work on the game yesterday. Had to work for 9 hours and was pretty tiered from the day before so I've got a lot of catching up to do. Today I've created my movement and camera controller and it's beginning to look more like a game now, check it out:
So today I had the entire day to spend on this awesome competition. I've only been able to create my main character and some basic animations. Being a programmer, I'm quite proud of the character I managed to create. Using 3DS Max's CAT, creating animations was super easy! As I have to get up early for work this morning I'll keep this entry short, so without further ado:
The fur shader that I talked about in my previous entry luckily hides the fact that I can't texture at all! It's also not very visible at the moment, I need to play around with the lighting for that.
I hope you enjoyed this entry and as always, feel free to leave a comment or ask questions.
This is my first journal post ever so bare with me. Like some of you I'm trying to compete in the Week of Awesome here on Gamedev. The competition started 3 days ago, but I only managed to start today! My girldfriend is kind enough to help me out on the art side of things whenever she can. She has never done any artwork for games, but her skills with Photoshop and InDesignare quite profound.
The theme of this year's contest is Toys are alive. Like most of you, the first thing that came to me was Toy Story. Trying to think of a game to make, I found it hard to decide upon what type of game I wanted it to be. I'm leaning towards a platformer, whith a sort of sandbox style of gameplay within a physics based level. What I do know for sure is that I want to make it a 2.5D game and that I'll be using Unity to try and accomplish this. My girldfriend also had a great idea to build the level like a diorama, so I'm looking forward to how that turns out. For now, the title of the game is Diorama(might sound stupid to [s]non[/s]-native speakers, let me know in the comments!).
For the main character I had a stuffed animal in mind, so first thing I did today was work on a fur shader! There's so much tweaking that can be done for a furshader, I could't get enough of it. So I basically wasted a couple of precious hours today, but I'm content with the result:
Tomorrow I'll start working on the maincharacter and implement some basic movement, so I might get to show you some videos tomorrow.
I hope you enjoyed reading this as much as I've enjoyed working on this! Feel free to leave a comment or ask questions and I'll try my best to answer them as soon as possible.