Wednesday, February 27, 2008

Rejigging the workplace events

The original kudos game would have a very generic description of your day at work. basically, you randomly had a good or a bad day, and it just said "it was a bad day, and you got these tips, and hey, you got promoted".
The new one will be much better, in that it will reference your actual job, and the text will be job specific.
That means it will say "Today at the happy snacks restaurant, the customers were really friendly and you had a great day", and then that day at work will have carefully tailored effects on you, so the good days make you feel good and the bad days make you feel bad, but also, you can have stressful work days, boring work days, etc etc.

This has required some re-jigging of the way things are done, with new 'workplace events' which are basically different potential work days depending on your career. I'm also having some meta-categories, such as 'office job' where some events will apply to all of them, like boring meetings. When the whole system is in place, I'll be in a position to just sit there and write out a whole bunch of text that hopefully helps in a small way to make people feel like their characters life is different if they chose to be a helpdesk technician rather than a top chef.

Some people say that kudos shouldn't concentrate too much on work, as that's not a fun part of peoples lives, but I think pretending to have a different job to your real one is kind of cool, and not many games have a main character who is a biochemist or a human rights lawyer.

Tuesday, February 26, 2008

Keep Fit Code

I thought I had a horrid bug in kudos, uncovered as I reworked a lot of the games work-related stuff to be script, rather than code based.
But it turns out the sim is just a big cleverer than I recall. I wondered why when I applied a certain value to the characters tiredness, they didn't get that tired, but it turns out that tiredness is modulated by the level of fitness. People who go to the gym aren't so tired if they walk to work etc.
What's a bit bad is that people who have tiring jobs aren't getting fit from them, which presumably, you should do.

In any case, getting the game to be more scriptable is a good thing. Whereas previously the effects of each job came froma spreadsheet, now they are individual scripts. This means a LOT of scripts, but I auto-generated them from the old data, so it's no big deal.

Monday, February 25, 2008

Overthinking the design

I'm trying to get a 'big picture' design for the new version of Kudos. I'm aware of the fact that I have no specific 'direction' for the new game. It currently seems to be 'Kudos, but way better looking'.
That will probably help it to sell, but I want it to be more than just a polished revamp. I want the game to be better and more interesting, and more accessible.
This isn't proving easy.

It's tempting to just junk big sections of the game and concentrate on a smaller subsection for the sake of making it easier to learn, but I'm not sure that's the best approach. I'm currently toying with making the game more about dating and romance, or more about socialising and night-life.
At the end of the day, I shouldn't get too high brow about it. It's a game where you pretend to be someone else and choose different options to see what happens. It's a strategy game, not a large hadron collider.

As I stroke my chin and consider what to change about the game, I'm fixing some GUI things and improving some of the interface bits. I know I'll probably junk the 'social kudos' screen, as it was a bit out of place anyway. I might also junk a few of the more esoteric purchasable things, such as the bow and arrow.

Friday, February 22, 2008

Code Snippet of the day:

from kudos 2:

bool SIM_FoodMemory::IsBoringChoice(std::string foodname)
//return true if we ate the same food more than once in the last 14 days
int recentmatches = 0;
iter it;
for(it = Items.begin(); it != Items.end(); ++it)
SIM_FoodMemoryItem* pitem = *it;
if(pitem->FoodName == foodname)
int diff = SIM_GetSim()->GetTurnCount() - pitem->TurnConsumed;
if(diff < 14)

if(recentmatches > 1)
return true;
return false;

Thursday, February 21, 2008

Printscreen can make you look a dork.

And today I notice someone posting screenshots of what he claims are a bug in democracy 1 (a VERY old version of D1) on my forums. Turns out his desktop sized screenshots clearly show the link to a torrent of the game on his desktop. What a dork.

A quick email search shows he certainly didn't buy the game from me.

His only other forum post was a review, presumably written by him, giving the game 5/10.

Account deleted.

WTF is wrong with these people? I don't give it a damn if my game isn't running perfect for you if you have a pirate copy. the chances are, its bundled with all kinds of crapware that I know nothing about. you might as well go complain to rolex about the quality of the dodgy watch you bought from a bloke in the pub.

It amazes me that people can't see that if they steal a product, they have lost ALL ability to influence the business that makes it in any way whatsoever.
Pirates are commercially invisible. your desires, opinions and likes are totally irrelevant to people. We don't make stuff for you, nor will we ever do so. We spend our time dealing with those honest people who buy our stuff.
My next game, and all future projects, are aimed at the 30+ audience. I give up on 'da kidz'. I hope they enjoy pirating the few games still aimed at them.


Wednesday, February 20, 2008

Crazy Support Request

A day or two ago, I got an amazing email along these lines:

"I pirated your game from a torrent site. The patches on your site do not seem to work, and I think I have found a bug [bug details]. is there a patch for this?

What a moron.

My answer was just to tell the guy to sod off. But apparently this was a bit too vague, as he emailed me again asking if there was any chance of tech support.
In case he is not alone, and some other people have not got this through their heads...
Pirating a game is NOT POPULAR with the people who make that game for a living. We do not 'understand your reasons' or 'turn a blind eye', or 'appreciate that you liked the game and might buy the next one'.
If you shoplifted, and the shoplifted item was faulty, would you go back and complain?

I dread to think how this guy will get on in the rest of his life. Such a sense of entitlement, without any concept of right or wrong makes someone totally unemployable. Thankfully, most people are honest, and *do* buy my games when they like them.
A big thanks goes out to all those honest people who have kept me in business. I really appreciate it.

Tuesday, February 19, 2008

Another digg needed

It's that time of year for press!
All diggs appreciated :D

Friday, February 15, 2008

Something Missing From C++

One feature I'd like to see is some way of declaring some data as being readabale by anyone but not writeable. Something like the 'friend' thing.
So if I have some thing called 'NPCHappiness' I could declare it read only, and anyone could get at it from any class, but nobody could change it.
As it is, we need to bung it a tedious 'GetNPCHappiness()', and make it private.
I know stuff like visual assist makes this easier, but its still untidy to my eyes. Am I missing something?

Thursday, February 14, 2008

Work History

Stuff done today:

Redid the post-it sticky notes for kudos 2 (working title)
Tidied up some of the Crossword code to make it look less awful.
Brightened up the end of day message dialog.

Wednesday, February 13, 2008

DIGG it dude

I wrote this article for bit-tech:
And naturally I think it would be l33t to get people reading it :D, so if you have an account at digg, feel free:
Much appreciated :D

Now I have much work to do...

Saturday, February 09, 2008

Kylotonn and Frogster

I don't who who the fuck these companies are, but they are NOT the developer and publisher of Democracy 2, contrary to what page 125 of PC Gamer UK magazine says :(


In fact, right now, the ONLY way to get this game is direct, through me. If anyone else is selling it, they are thieves, please tell me.


Just read some of the most retarded embarrasing juvenile bullshit on slashdot I've read for a while. How is it that kids apparently intelligent enough to operate a keyboard are incapable of realising that taking stuff that inst yours and you haven't paid for is wrong, and that colleges not wanting to have their networks used for piracy are not TEH EVIL CENSORSHIP FASCISTS!!!!1111.

Thursday, February 07, 2008

So what is NLP Then?

In reference to an earlier blog post, NLP is Neural Linguistic programming. It's used a lot in therapy, but it can be used in all sorts of ways. basically its a way to communicating information, interpreting peoples emotions, controlling your own emotions, and giving out information by means of indirection.
If you have ever watched Derren Brown seemingly read peoples thoughts or persuade someone to do something weird without any effort, that's NLP (he is awesome at it).

Amazingly, I do not use NLP to hypnotize people into buying my games. (It's an interpersonal real-life thing anyway, not something you can do using HTML). The way I use NLP is to (try to) control how I feel. Anyone who knows me in real life who thinks I am a completely hyper arrogant confrontational git, should have known me before I started reading about NLP :D.

It takes a while to really 'Get' NLP, and its easy to be very sceptical of it, but the simplest and easiest principle of it is that the way you look, sound and stand/sit are a reflection of your emotions, but you can reverse the process. In other words, if you are miserable, adopting a happier posture, expression and choice of words when you talk etc, can actually have the effect of changing your emotional state.
Simply put, it's hard to stay miserable when you are smiling :D. Once you have done it a bit, you realise how its entirely a matter of choice how you feel. Nobody can make you angry, they can only give you excuses or justifications for anger.

NLP is very useful. It has some interesting techniques such as 'anchoring'. Anchoring allows you to tie emotions and memories to a physical action. I can rub my hands in a certain way and effectively be back on a balcony at a breakfast table in Costa Rica.
I used to do it a lot in meetings :D.

Wednesday, February 06, 2008


Some days, when you read some of the insulting abusive bullshit that gets hurled at you for being anti-piracy, you can be so glad you know a little NLP.

The funniest thing is, the people who get on my tits probably have crap jobs they hate, and which they work long hours in :D
I have no boss, no schedule, no annoying line managers, no commute and can work when I feel like it.
I had a long pub lunch with a mate today, then played an RTS game all afternoon.
And when I came back from lunch, I'd sold 5 games.
*contented sigh*

Saturday, February 02, 2008

Alpha Channels and File Sizes

Danger! Geeky programming talk ahead...

I finally got around to taking a look at using a different file format for the images I use that have alpha channels. Alpha channels are basically an extra 'invisible' layer of information in an image (like a picture of a character) that tells the video card how transparent each pixel should be. You can have 1 bit alpha (show it or hide it) and variable alpha (for partly transparent stuff). The trouble with variable alpha is it uses up a lot of memory.

When you make downloadable games one major concern you have is the installer size. You don't care that much how big the installed game is, nor do you care how much video memory you use (within reason), but anything over 40-50 MB can get expensive to host yourself. (I just hit my 500GB/month limit for the first time this month). If you think you can get **unlimited bandwidth hosting*** for just $9.99/Year!!!11111, then you are wrong. Those sort of adverts aren't for proper, reliable, fast server hosting like a games website really needs. Bandwidth hosting for a site like mine is hundreds or even thousands of dollars a year.

So... we need to store our character images in a format that is small when packed into an installer, so one which compresses well. JPG compresses very well for photo-style images (using lots of colors). BMP can also compress well if you have less gradients and lots of blocked out areas of color. PNG is a popular format with great compression.
The thing is, although JPG compression is great, its 'lossy' meaning it can be blurry. The compression I used to use was DDS, which is also lossy, and also blurry. Now... with a photo style image, this isn't very visible, but if you start to blur alpha data it can get very very horrid, with black or white or wobbly outlines around images where they look especially crap.

So......... The solution seems to be to load in a JPG (or PNG or DDS) with the actual color information in it, and then after the event, load in the alpha data totally separately and squash them together in video memory. This is what I finally got working today. Effectively the code does this:


It seems a bit complex, because if you are normal retail-based or console based game coder you probably think 'sod that' and just use the same format with built in alpha and just zap it straight in. I guess its one of those bits of fiddly code that you only need to do for downloadable games.
I'm off to try it on Democracy to see if I can shrink the demo size. These bandwidth bills aren't funny...