Grinding Away

After a the first 8 hour day I’ve managed in a while I’m feeling pretty good about how today went.  Not a whole lot to show for it, but it was really productive and educational.

I spent way too long messing around with Website security stuff, (to the point that “CHMOD” is now officially in my vocabulary,) broke it once or twice, fixed it again, changed themes to something that actually works, (even though it’s broken a few of my plugins,) and gotten onto posting again.  Gives me a good feeling, and a brightened outlook.

Things are working with the Elemental Weaving prototype, and I hit the first milestone 3.5 hours ahead of schedule which is… disappointing.  While it means I picked up FlashPunk a lot faster than I expected, and developed a quick-n-dirty turn-based combat framework in a shorter time than I’d planned, it’s proof that my time estimation abilities are still terrible.

 

As the day draws to a close though, I can’t help but think about where I’ll be this time next week.  Lookout GDC Europe, I’m coming for you!

What should I ignore?

As I’ve been using SVN rather often recently, I figured I would try and make a little bit of a collection of files I ignore when using Mercurial so that I’m not running all over the place trying for the info on re-writing the files everytime I start a new project.  Hopefully it’s useful for you as well!

For the time being these lists are written in the ‘glob’ syntax.  Seeing as regex is much more powerful and generic, I’ll get around to changing it… One day 🙂

WPF [VS2010]:

*.opensdf
*.user
*.suo
*.sdf
*/bin/
*/obj/

Setting up Mercurial with BitBucket (and FlashDevelop)

Atlassian have already written up a great tutorial for the basics, but here’s my trimmed down, TIGJamAU specific version.

~INGREDIENTS~
TortoiseHG
Bitbucket Account
PuttyGEN
FlashDevelop

~METHOD~
1) Install TortoiseHG, FlashDevelop and create yourself a Bitbucket Account.

2a) Open up PuttyGEN and click the “Generate” button to create an SSH key.  Add in a Passphrase as well if you want.
2b)Click “Save private key”.  It’s an important file, so keep it somewhere safe.  Eg. TortoiseHG install directory or otherwise.  Don’t close PuttyGEN yet!

3a) From the Bitbucket Home Page, pop down the user menu under your username, and open your account settings.
3b) From the nav bar on the left select “SSH Keys” and paste the entire contents of the “Public Key for pasting…” in PuttyGEN into the box under “SSH Key” on the BitBucket page.
3c) Finally, using the button at the bottom of the page, add the public key to BitBucket.  You can now close PuttyGEN.

4a) Open up FlashDevelop and create yourself a new project.
4b) Under Tools > Project Settings, scroll down to SourceControl.  Under HG; check EnableHG, point “HG Path” to hg.exe in the Tortoise folder, and the “Proc Path” to thgw.exe.
4c) Close FlashDevelop again.

4.5) From the TortoiseHG folder, open up “Pageant.exe”, and open up the SSH key you created with PuttyGEN earlier.

5a) With TortoiseHG installed, you should be able to navigate to the FlashDevelop Project folder with Windows Explorer, right-click it, and select TortoiseHG > Create Repository Here.
5b) Check “Show in Workbench after init” and create.
5c) With TortoiseHG now open, we’re almost there. Right-click on the newly created repository on the right, and open up the Settings.
5d) Switch to the Global Settings tab, select “Edit File” at the top right, and enter the following:

[ui]
username = JOEBLOGGER <USERNAME@email.com>
ssh = “C:\Program Files\TortoiseHg\TortoisePlink.exe” -ssh -2 -batch -C

It is of course recommended that you change JOEBLOGGER to your name used for Mercurial commits, and alter the TortoiseHG path if appropriate.
5e) Save and close that, switch to the Repository specific tab, and once again, “Edit File”.  Input the following:
[paths]
default = ssh://hg@bitbucket.org/BITBUCKET_USERNAME/BITBUCKET_REPO
[tortoisehg]
cipushafter = default
defaultpush = all
closeci = True
The path for “default” can be found on the BitBucket project overview page.  The other settings make it easier to sync stuff from FlashDev.



And done!  Try commiting and pushing the project at this point, and if there’s any problems, write me in the comments.  (I might even get around to adding pretty pictures after the Jam is over.)

Abandoning Project 2

So, I’ve been giving it a bit of thought yesterday and today, and I’m thinking two things at the moment.

   Firstly, even though I’m rather enjoying the dev challenges and the complete control that programming with C++ brings, I’m starting to find I’m wasting more and more time focusing on things that I don’t want to be.  In the past couple of days I’ve spent time studying design patterns and the source code of other games to try and figure out how I should be coding my own stuff.  As the end result, I’m not focusing on the fact that at the end of all this, I want to focus on design, and not development.
   Having development skills and understanding the way games can be implemented is important, and even more so if I want to create my own project from scratch.  That being said, it is currently taking too much away from the time I want to allocate to designing – my target area in the Games Industry.  And so, being fed up with Abstract Factories, draw order, object lifetime management, manager classes and annoying angle calculation implementations, I’m going to start a new project in which I can focus more on design, using a tool-set and with an end goal that facilitates this.

   Secondly, as some of you already know, stuff has been pretty heavy in life at the moment, and as a result I’m having a bit of a rough time concentrating on programming.  As such, I’m wondering if a holiday of sorts at the moment is in order.  Today I’ll consider what I’m tackling for the next project, and look at how we go forward from here.

Final Build

* Finally with a little bit of interactivity. Left-click places the monkeys on the field.  Other than that though, nothing special.

Working Weekends

Today was relatively productive.  Not really talkative lately, sorry about that!
Probably doesn’t help I should’ve been in the shower 15 minutes ago…
Nevertheless, enjoy!

Latest Stable Build

Yep, got enough work down to upgrade to 0.1!

12 Hours Late

So yesterday was a really shit day.

Last Build

Okay, so normally I don’t post debug builds, mostly because they’re a little annoying, but it’s a little less boring than the release build – Just try pressing [F1] for a bit of prettiness.

A New Project – What do you want?

So, I’ve been doing a little bit of fluffing around the past two days, looking at what exactly I want to tackle as the next project.

Design

In terms of the design I’m looking at either of a Tower Defence, a little strategy game, an RPG or a Trading Card Game.  As of yet, I’m not a fountain of ideas, but I know they’ll come.  I have a few ideas for each of them though.
Feel free to vote in the comments!

Timeframe

At the moment I’m a little unsure about the timeframe, but it’ll most likely be a two-week project with around 6 person days when I look at it realistically.  Unfortunately the lack of response from the German University hasn’t helped at all.
Last day (as it currently stands) will be 16th of March – Hey, hopefully it’ll be a nice birthday present for my brother! 🙂

Goals

My targets are as follows;

  • Implement minimum of one user-noticeable feature by the end of every working day
  • Setting targets at the start of every day for the day ahead, to avoid scope creep and give myself short-term goals
  • Monitor time-planning and review achieved / attempted vs. planned
  • Minor: Develop some form of editor (something I haven’t even considered so far)

Sirtet: Post-Mortem

So, that went interestingly…   I meant to get this written up a weekend ago, as I promised, but unfortunately planning and organisation fell through.

H4 First Feeling:
Mostly I learned a butt-load about scoping and organisation, which in all honesty, was what I was aiming for.  I would like to have a beautiful polished game to offer, but I don’t think that was a realistic goal… Mostly because it was over-scoped!

Developing for today:

A lot of what went wrong, was that I coded for what was to come.  While I am actively concentrating on trying to code minimums and then alter as needed, there is still so much modularity within the code structure that is a) superfluous because I never used it, and b) “extra” functionality.  While I know that these “extra” functionalities can make the difference between a good game and a great game, if I don’t have a game to offer, then it’s the difference between good nothing and great nothing – multiplying zero by one million is still zero.

Learning ClanLib and C++:

It was a good first project for really getting going in ClanLib and C++.  I’m pretty sure that the next C++ project I get into will get off the ground a bit quicker, as I really feel that my understanding of the pros and cons has increased, my ability to utilise the language to achieve my goals has grown, and as I mentioned earlier, I also know now why people don’t use C++… ClanLib is also good but is really still a relatively young framework.  One downside is that it is completely 2D: the rendering order for objects must be controlled from my side of the code as the concepts of Z-Depth don’t exist.  A con, that is a little annoying.

Version Control Softwares:

Oh man.  I am never working without this stuff again.  The amount of times comparing revisions saved my arse, or the ability to test out extremities with the security that undoing everything is just one click away is fantastic.  I am really glad that I took on learning a little about the stuff for this project, because I can’t wait to keep using it in future.  With a little more understanding behind me now, I’m also really glad that I went with Mercurial.  One of the greatest features is the ability to version things locally.  I’m under the impression that SVN, for example, doesn’t offer such functionality.  Working in the train, where I didn’t have the internet available, is a prime example of the benefit of the local versioning.

Scoping:

A benefit of using a low-level language such as C++ helped my a little with scoping.  It still needs work mind you, and I really need to concentrate on the goals of a project so that I don’t get too sidetracked and develop unnecessary rubbish.  Sometime developing unnecessary rubbish is fun, but it is, as the name suggests, rarely an important or worthwhile use of my time.

Schedule:

One thing I really noticed is that as many people suggest, attempting to brute-force a product with man-hours rarely works.  I really need to make sure that I get moving in the breaks I schedule – cleaning and cooking are things that I don’t really mind doing, so it shouldn’t be too hard – and stay away from the screen as much as possible.  That being said, I’m pretty impressed with how hard I can be on myself.  I really feel like taking on self-employment as a full-time job could work for me… in the sense of organisation.  Whether or not I have the entrepreneurial spirit that a friend of mine has so recently made me envious of, is something I’ll find out a little further down the road I guess.

Organising:

One thing that I never thought I would need was a calendar.  Man, some people (see: me) are idiots!  Blocking out time with GCal was one of the greatest things I tried out.  It really helps to not only know when to work, but when not to work, and as a method of showing myself how little time I actually have.  It failed towards the end and I am certain that it was a major factor in the reduced productivity.  As I mentioned above, throwing man-hours at a problem doesn’t help if they aren’t organised.  Towards the end, when feeling like I hadn’t done enough work, I did just that, and lost focus, and wasted heaps of time.  Lesson learned!

Final Words:

I was hoping that the final product would resemble a infinitely configurable version of Tetris, however what I have has fallen far short of that.  That being said, the goal of project had little to do with the final product – it was a learning experience.  I’m not trying to make a sell-able game, or even a portfolio piece, it was an exercise in learning about self-organisation, taking my biggest bite of C++ so far, looking at a couple of new tools for games dev, and most importantly, a “test of the waters” to see if I could one day do this as a full-time thing.  So naturally, with no predefined fail-conditions, I feel that the project was a success! 😉

The End of Day One

So I’m knocking off a little earlier today, as I’m heading over to a friend’s house for dinner.  Unfortunately haven’t got anything much interesting to show for the last 8 hours, but I have finally managed to set up ClanLib, Mercurial (with TortoiseHG, VisualHG and BitBucket,) and the DirectX SDK. (That last one was a pain in the butt!)
I was hoping to get it all down a little earlier and actually have started work on something already, (I’d set aside an hour for these tasks that took me the whole day…) but I’ve learnt a bit about setting up and using free Revision Control Server repository, and the associated softwares.  It did take me a while to figure out all the ignore/unfollow/revert features, and there’s still lessons to be learned no doubt.  So I guess I can eat happy knowing that hopefully the half-day I have tomorrow will actually turn over some results.

For those that are interested, here’s what my setup now looks like:

Today’s Pain Point?

   Firstly, forgetting to extract the ClanLib includes confused me (I’d extracted the external dependencies but not the library itself… /facepalm), but the massive one is that installing DirectX SDK (June 2010) will give you problems if you install it today.  It’s a requirement for ClanLib, so I couldn’t do without it.  The problem is that if you’ve updated the VC++ Runtimes, which is handled automagically by Windows Update, there is no way of installing the SDK.  It requires uninstalling the updates, installing the SDK, and then reinstalling the DirectX SDK.  Did I mention the error message recommends closing all open programs and trying again?  After a couple of restarts, I did a web search and found it’s a ridiculously infamous problem that Microsoft haven’t yet fixed.  I can only hope that for those to come, it gets fixed soon!

Going Indie

So Tuesday was my last day at work as an Intern at SAP in Germany, and now, with nothing better to do, I’m giving indie games design and development a go.
In the next couple of months I’m aiming to finish off a small Tetris clone I started last year, and be at least half-way through an Android app for jogging.

First stop: Setting up.

Environment

Wanting to continue dev with ClanLib, I’m installing Visual Studio 2010 once more, and as something new, looking at some SVN options.  At the moment, BitBucket looks to be offering the strongest free option, although we’ll see how that goes I guess.  (Others considered are Beanstalk and Assembla)
As I’m really new to managing SVN stuff myself, I’m finding the BitBucket tutorial on Mercurial AND Git to be most helpful.  Step-by-step walkthrough of connecting, installing and setting everything up to work with the repository.  Really good in that they use both, giving me a chance to work out which I prefer, although looking at the online comparisons is giving me the idea that Mercurial is going to be better suited to my uses.

After going through the initial stages, Git appears a little more fiddly and less friendly than Mercurial (at least when comparing Git Bash & GUI to Tortoise,) which has influenced the decision to give Mercurial a run.  So far the BitBucket tutorial has been really great giving a couple of options and grounding me in the basics of all the stuff that I don’t want to have to think about.

Coming from a background of using TFS in a large team environment, I’m also looking at VS integration, so that’s the next step – giving VisualHG a whirl, and seeing how well everything plays together.  However, right now it’s 13:05, and I need a break from the computer screen!