email sol follow sol wishlist Sol::News
S

Important note:

When linking to these pages, please use the URL:

www.iki.fi/sol/ - it's permanent.

RSS
(1,0) (1,3) (-2,-1) (3,-1) (3,-3) (-2,-3)

Video Production

April 10th, 2015 #

I did the keynote video for Ludum Dare 32.

This was my first "real" video production - there's a bunch of videos on my youtube channel but they're all mostly just screen captures of whatever stuff I have worked on. This time I had video recorded with a camera, separate audio recorder and bunch of video editing.

It was more work than I expected.

First, the equipment - I've wanted to buy a GoPro, but haven't really had a use case for it before, so this gave me the excuse to buy one. GoPro is a relatively cheap, rugged camera with full HD recording and a rather wide lens. The wide lens bit made it less suitable for this project than I had hoped, but more of that later.

Audio was recorded with my Zoom H1, which is a cheap but surprisingly good standalone stereo mic, which can also be connected to PC with USB and used as a PC microphone (unlike the gopro, which can only be connected to a PC as a USB disk drive). I did some further processing in Audacity, I felt the sound was too "thin", so I also ran the sound through some Guitar Rig filters, which unfortunately did end up making the voice sound like it's in a room instead of the outdoorsy green-screen thing I was going for. Oh well.

Talking of green-screen..

I set up a "ghetto" studio in my basement, using a green blanket as the green-screen. GoPro's very wide lens made the framing rather difficult - as a rule of a thumb you should have as much space between the people and the green-screen as possible to avoid shadows casting on the screen, but I had to place the camera rather close to the screen and squeeze myself between these to make the framing work at all.

Even at the distance you can see in the picture above the GoPro can see the whole blanket and actually even further, so after capture I only use cropped part of the video. This works out fine since GoPro captures at 1080p and the output product was 720p.

Framing was also rather difficult with the bare-bones GoPro Hero as it doesn't have a screen. I had to take some experimental photos and/or video, detach the camera from the tripod, run to my computer to download the stuff to see how the framing goes, do some adjustments and repeat until I was more or less satisfied with it.

I noticed from these edits that the lighting on the blanket was really uneven, so I set up more (and more) lights in the room to even things out. These naturally generated more and more shadows all around, especially since I couldn't have a lot of space between myself and the screen, but overall these new shadows were not as dramatic as with the original lighting setup.

Once the setup was done, I took a few takes and started working on the editing. I had to tear down the studio as the room is used for other things as well - such as drying laundry - so like in "real life", my studio time was limited =)

Unfortunately the first takes were rather bad, so I had to redo the shooting later on. I was ill a few times in between, including a rather long-lived influenza, which postponed the re-shoot uncomfortably close to the deadline. In the end I did end up setting things up again and did a few new takes. After that it was a matter of picking the take I hated the least and going with it.

I could have edited several takes together but, come on, it's just 3 minutes, I wanted it to be a single take.

Also, you may not notice, but the background forest is not a still image but video recorded from a forest nearby. It wasn't a particularly windy day, but you may notice some of the branches moving.

I used LightWorks, as it comes highly recommended, has some impressive things in its portfolio, and can be used for free as long as you're fine with some limitations (such as limited export formats). If LightWorks is representative of what Hollywood movie folk have to deal with, they have my pity. Seriously. This is version 12 of the software, and still it has really strange limitations and unintuitive actions.

Everything orbits around the idea of scrolling film back and forth and marking bits for deletion, etc. That bit works fine. Matching audio tracks? Okay, I'll just drag the audio sideways to match the 'click' signals together. Nah, we won't let you do that, instead let's reset the zoom to "I can see my house from here" and stop the drag. What.

Okay, so I get the audio matched by "cutting the film" of just the audio track eventually. Let's add fade in and out... uh. there's no such filter for audio.

So I ended up doing the "audio matching" in audacity in the end, re-importing the audio a few times. I didn't remove old imports because when you try to, you get a really scary warning dialog about it, and I wasn't about to start all this work from scratch, so I just lived with 10 copies of the soundtrack being in the project.

As for the video effects, well, some of it is a snap, other things less so. When things get a bit more involved you'll edit the filter chain.

This is fine, nifty, and rather powerful, until you disconnect one wire and half of your graph disappears and you're in WTF-land, or you find that some boxes can't be wired to or disconnected, and there's no explanation on why any of the above happens. Eventually you start from scratch and get things working more or less, but it's rather frustrating.

Remember, I'm assuming we're talking world-class bleeding-edge stuff here. If this was some open source hobby project it would be great!

On the positive side, the software only crashed once during the whole 3-minute-video project, I did get the video out - with some glitches I could have fixed, but the biggest glitch is the acting which I can't do much about =). The green-screen stuff works great, even with my "ghetto" setup. My PC isn't exactly the highest of high end anymore, but the software only occasionally caused some hick-ups - most of the time it was smooth and did what I expected it to do. At least after learning not to try to do some things.

I didn't mean for this to be a rant about LightWorks, really, and it's not as bad as I may make it sound. I haven't tried any other video editing software, so I don't know if there's anything better out there - I know there's plenty of WORSE stuff, though.

But really, it's a great piece of software. Just not exactly what I was expecting.

Anyway, I hope you enjoyed this little piece of "behind the scenes", and have fun in Ludum Dare, whichever is the next one at the time you're reading this =)

Broken Telephone

April 2nd, 2015 #

A few days ago I got inspired about the idea of making a "broken telephone" based on soundex codes. I ran an English dictionary through soundex and stored various words for each code produced. The result can be found here - the result works, more or less, but it was a bit of a disapointment. As in, not funny.

The biggest technical challenge with the soundex was implementing the soundex algorithm itself. You can look at the page source for a javascript implementation.

Considering how to make it funnier, I figured that using a thesaurus instead might work better. I found a public domain English thesaurus, and made a similar database based on that. The result can be found here, and it's much better.

There was one fun technical challenge with the thesaurus - it was 25 megabytes, which is slightly big for a web page.

First, I pruned the dictionary from terms I can't use, ditching all multi-word terms. I also ditched any terms that did not have a definition. Finally, I stored the words by their index instead of longhand. The resulting json was 7.8M.

Since the indices took the largest part, I figured I could just sort the indices by the frequency they're referred to; the most frequent 10 would then take one byte, the next 90 two bytes, the next 900 three bytes, etc. The savings were pretty minimal (down to 7.1M). I removed that optimization and used delta encoding, where the current index is the sum of all previous indices; this worked much better (down to 5.1M). Doing both the sorting and delta yielded slight improvement, so I opted not to use it.

As an alternative, I considered encoding the indices in a string instead - since there are 25000 words in the dictionary, we'd need 15 bits. These encode pretty easily to three characters each. In array notation the minimum size one index can take is two bytes (number and comma), while in this notation it would always be three. The result was smaller (down to 4.4M), but the javascript would have been more complex, so I didn't feel it to be worth it.

The next step, which I didn't take, would have been to encode the indices at variable number of characters based on the index size; this would have made the decoder even trickier, so I didn't bother with it. Also, since the final file is run through gzip, compressing twice isn't a good idea.

So in the end I just opted to simply use the delta encoding. The result is still quite big (2 meg .gz file), but it's far from the original 25 megs.

ProcTree

January 15th, 2015 #

At some point in the past I wanted to have tree meshes in some project or another. I can't really remember what the project was. Point is, there weren't any good, free solutions for this out there.

Couple years ago I stumbled upon snappytree, or more precisely proctree.js that powers it. It's a liberally licensed procedural tree generation library, which unfortunately was in javascript.

I pondered on rolling my own at some point, then considered on just porting proctree to C, but due to my lack of javascript experience the first attempt failed miserably.

Fast forward to a week ago or so, I got inspired to try porting again (having played around with javascript via codecademy at some point in between), and voila: c++ port of proctree is here. It benchmarks at about 9000 trees generated per second on my machine, which should be sufficient for most uses.

I also wrote an editor for it called HappyTree. The sources to the editor (and link to a win32 binary) can also be found on the github page I liked above.

Microspikes

January 5th, 2015 #

This is a little product endorsement I've been meaning to write for several years, but haven't for one reason or another gotten around to it.

Kahtoola microspikes. Who honestly don't pay me to write this. I wouldn't mind if they did, but they don't.

With the weather in Finland being what it is, the streets are often deadly slippery during the winter. Oh sure, they do sand the ice (when they get around to it), but that doesn't really solve the issue. People don't slip on ice because it's slippery. People slip on ice because it's surprising that it's slippery. If you expect the surface to be slippery, you walk in a different way to avoid falling down.

In that kind of weather taking a 20+kg dog out for a walk can be stressful, because the dog has more traction than you do, and if for some reason or another the dog decides to start pulling you somewhere, it may be difficult to assert who's making the decisions.

But not with these babies. Oh no. While wearing these, you don't need to care where you step, or how. While other people are shuffling around carefully, you can just go past them with confident strides.

Pretty much the only surface that I've found to feel slippery with these on are metal manhole covers. I especially like walking on thick ice with these, as they bite in quite well. Another slightly problematic surface is near-zero degree snow, which may get stuck in the bottom of your shoes. That's not as big of a problem as you might think, though.

The biggest negative is that you can't walk indoors with these (with a straight face anyway), so entering a store requires you to take them off (and to carry a bag with you to put the wet things into while in the store), and to put them back on. Taking them off isn't much of an issue, but putting them on takes a bit more effort. With some practise that's not difficult either, but it's another small hassle.

At home we just use a thick doormat onto which we can step with the spikes, and don't bother taking the spikes off.

They're definitely more expensive than your average teeny-tiny spike rubber thingies you might use, but they're definitely worth it just for not having to care about slippery surfaces outdoors. And yes, you'll definitely have more traction than the dog, too.

Welcome to 2015

January 2nd, 2015 #

Welcome to 2015. To start off, here's the new year demo..

..with discussion on Pouet, and a short breakdown writeup for you making-of lovers.

Let's see what's going on with my self improvement tasks;

  • Writing. Apart from stuff on this site, SoLoud has a lot more documentation now. Should probably do other writing too. Not quite sure what, as of yet.
  • Music. Didn't really focus on this last year, "doodled" every now and then but didn't record much of anything. Drooled over some new Native Instruments synths, but haven't thrown money at them. Yet. Should spend a bit more time on this and get at least some simple song structure going.
  • Getting in shape. This hasn't played a big part so far, but is going to get more in forefront in 2015.

On the topic of getting in shape: Based on weight index my weight is "normal", but that doesn't mean that I'm in a good shape. I'm turning 40 this year (eek), and in my 5-year checkup they found some worrying figures. So I was put on cholesterol medication, on top of which I've started to use our basement gym a couple times a week. I'm working through the McGyver episodes, 30 minutes on exercise bike and 15 minutes on weights, to start with. I'm planning on keeping that schedule unless something exceptional happens (like being sick or on a trip somewhere).

With 139 episodes of McGyver total, that should be enough distraction at the gym for at least a year, even if I occasionally did three days a week.

On hobby project front, SoLoud remains the 'big' project, even though I haven't touched it for a few months now. There's still a plenty to do there. I'll probably update couple other projects that depend on SoLoud (game projects mainly) to push myself to add some of the missing features.

I've also started following Casey Muratori's excellent hand made hero series, where he streams building of a game from scratch with little to no offscreening, and following that has caused me to ponder a few other game types to build as well. Too many ideas, too little time..

I'll also probably dust off some other old projects of mine this year and release the sources. Cleaning up HORS for instance, and plugging SoLoud to it, might be a fun nostalgy trip. A lot of pages on this web site are in need of updating, even if just to add a notice that the information is out of date (like most of the emscripten tutorial).

I'm also planning on applying to study teaching, but I'm not holding my breath on that, as there's way more applicants than starting positions, and they prioritize people who already do lecturing on a professional basis (and my single course gig doesn't really count). The course I'm applying for is done completely remotely, and I could do it alongside my job. If I do get in, I won't have any trouble with free time this year, so not getting in may also be good news.

Atanua Finances

December 22nd, 2014 #

Atanua, my real-time logic simulation aimed at education launched as a purchaseable product a bit less than 7 years ago. I open sourced it a couple days ago, and now it's free for everyone to use (and hack).

During those 7 years I've tried various things to turn it into money, with varying degrees of success. The original idea was to have a small amount of big clients - namely, schools - who would pay a chunk of money for it, preferably annually. These clients would also drive the development via providing feedback and requests. For hobbyists, the program would be free.

It took a while to realize that this strategy doesn't work (for small software, at least). Schools in general are either unwilling or unable to pay - either there's political reasons for software acquisition, decisions made "higher up", there may be a culture of "just use free stuff" (whether it's legal or not), or the budgets are just tight.

I actually sent mail to some schools that publicly used Atanua without paying, and just got answers "oh sorry, we thought it was free". Someone suggested that I should just target teachers, and ask them to pay personally, but in my mind the teachers are the good guys..

So I turned the licensing around. Fine. Schools are not going to pay. But I still want to know if Atanua is being used, so I gave free classroom licenses to anyone who asked - to make sure it's an actual school, I asked permission to use their logo on the website.

Some 150 schools applied for the free license. I don't know how many of those actually have it in use, but the interest was clearly out there. One school had a logo that looks like stylized "4ch"; probably standing for 4chan. I never posted the logo, but I sent the license anyway.

Later on I did a push to try to up-sell licenses to the schools. A couple replied that they'd love to, but nothing came out of it.

I clearly stated that the free license offer was for schools and not for individual students, but that didn't stop about 100 students from asking, regardless. Some wrote very, very long tales of how the software is vital for their future, but not vital enough to shell out the 25 eur I was asking.

There were a couple more memorable cases where people were requesting free licenses.

First was a 12 year old claiming to be a teacher. The misspellings in his email roused my suspicions, and I googled the person, finding the school where he was attending, his teachers, and so on. I accused him of the fraud, and the tale became more and more complex, including his "boss" emailing me (from the same email account, with the same misspellings). I forwarded the whole email chain to his school, to do with it whatever they wanted. I never got a reply, so I don't know if it lead anywhere.

The second case was a bit more professional: the person actually made a clone of his school's web site under another domain name and claimed to be a teacher there. Unfortunately a lot of the links were broken, but from a very quick glance the site might have been believable. I did find the original site though..

When I turned the licensing around, I figured I could do a sort of "pay what you feel its worth" system, with a bunch of tiers. Everybody just paid as little as possible. Over time I started dropping the cheapest options off, and finally just left two options, hobbyist and standard.

At least one "hobbyist" license was sold to a company name, with a company address. I guess the company had a hobby.

I tried various ways of promotion, including google ads, articles in trade magazines and web sites, discounts, giving out free licenses at contests (mainly ludum dare) and to people who made crazy things with it. None of the above has had any real effect in sales.

There's one thing I tried which did affect sales directly. And I hate that it did.

Nagware.

Every time I made the nag dialogs worse, the sales picked up. Seriously. That's the only single thing that I did that had a clear, undeniable change in sales.

There was one huge benefit from having the free "personal edition" licensing at the start; if you google for cracks for atanua, you'll find that there are tons and tons of links. I'm pretty sure nearly, if not all, of these are malware. I haven't found any atanua reg keys in the wild (not that I've actively looked), so I don't think piracy was ever a real concern.

In the end, Atanua had less than 10 sales a year, and the total sum I got was a bit over 1000 eur due to the various pricing points, tax and cc processor fees.

With that little commercial interest, I wasn't too motivated in developing it further. There were a few bursts of development where I added a few features that were most requested (including boxing and toggleable switches); these were caused by active teachers who emailed me and nicely asked for those features. But that was about it.

I could have left the software as is and cash in the hobbyist license per 2 months or so, but I don't think it's worth it. It was clearly not picking up commercially, so I figured it's possibly it might gain more success as open source. So here we go.

Whether that leads anywhere remains to be seen.

RST, 2014 Edition

December 19th, 2014 #

I haven't done these in over a year because google seems to have become better at filtering the crazy out of it, but here we go, have a 2014 recent search terms update:

faded white circle

Sounds like a pop album.

java bit mask hack 32

I kinda feel sad that something that's probably very basic in programming is considered a "hack" or "low level" these days.

"port from dos to windows" success rate

I have no idea what the success rate is, it probably depends on the persons doing the project (and their motivation).. and naturally the state of the original product.

ascii art 256 level grayscale ramp

How exactly are you going to turn (approx) 94 glyphs into a 256 level ramp?

bachelor thesis layout

Varies from school to school, and also from department to department.

c++ program to implement a simulation of the children's game musical chairs. in this game, assume that we start with n children and a collection of n - 1 chairs.

Sounds like a fun programming homework.

can i create a windowed 3d program in dx7

Yes.

can kilrathi saga be played on windows 7

Yes.

cheats for bookworm popcap don't work anymore

Why would you cheat in bookworm..?

circle with triangle inside paranormal

Sounds spooky.

code to create child window to send message "hello"

Will MessageBox do?

fate of sol story

Not written yet.

hate israel

I don't.

how do display window with only client area c code winapi

Twiddle with the window flags a bit.

how does atanua (simulator) work ?

Virtual blue smoke.

how to cover a ball with paper neatly

First shred the paper to little bits, mix with some glue-like substance, and then paint the ball with the resulting pulp.

how to make a spell work

You mean in a game, right?

how to make a time in the logic lab

Usually by using some kind of clock source.

how to remove in .cfl file in unix

Extract all files and then re-build the cfl with only the files you want.

how to start off making an mmorpg

Make lots of smaller projects first.

i have ideas for an mmorpg what should i do?

Write a book.

magic bare bones tutorial

Umm.. magic the gathering maybe..?

magic spells that really work

Soooo, you're NOT talking about games then..

modeling natural fractal growth

Start off my modelling any natural process, and it kinda tends to follow from there.

my name is i was born 1997..... my hobby.... graduate years.... this my excellent cv

Seriously?

terra nova: strike force centauri source code

Oh, I wish.

what are instances in rendering

Re-rendering the same data with some variant parameter (like position/orientation/scale/skinning/color/whatever).

what is width and height

[flips table]

what type of application software do you think would be most difficult to learn +way

One that doesn't explain inputs and produces almost random output? Oh, I just described "dragon's lair" / "space ace".

write a c program that simulates a guessing game. each turn, you choose among nine possible guesses.

More homework! Yay!

x rise to power 0=1 sol pls

No.

By Grabthar's Hammer, What A Savings

October 22nd, 2014 #

I've been playing Skyrim. Sorry. Anyway, I noticed that it started getting more and more unstable, and this seemed to have something to do with the save games. I dug up the directory my saves went into, and removed most of the old ones (I had over 256 saves), and the game became more stable.

I also noticed that the saves take significant amount of space. The game is rather large and remembers every item you toss around in the wilderness, so big savegames are to be expected. Still, saves that take over ten megabytes are rather large.

Since my computer has saves from a bunch of games lying around, I figured it would be fun to compare the save sizes a bit. More on the actual data graphed later..

All of these values should be taken with 150ml or more of salt. This is by no means any scientific survey, due to several factors which I'll discuss shortly.

The save games for any single game seem to fall into certain categories:

  • Static size. Non-compressed static structure.
  • Approximately the same size but sizes fluctuate wildly. Probably stores the same things all the time run through a compression algorithm. Another possibility is that the number of serialized entities varies, but stays relatively constant. May also include screenshot which compresses in different ways.
  • Growing as you progress in the game. Elder scrolls games are good examples; the save game probably contains changes in the world state and the more the player mucks with the world, the more save data is needed.
  • Weird multi-file mess. Sometimes it's hard to say what's save data and what's configuration data, for instance.

In most cases I picked a "typical" file size (not the biggest, not the smallest), but for instance in "skyrim" not all saves are 13 megabytes. Instead, the game starts off with relatively small (still multi-megabyte) saves and the saves grow as you keep playing.

I haven't played through all of the games listed, which may affect the save sizes. Some sizes show early progress, others very late progress in the games. Some save sizes may be gross underestimates because I don't know what files to include in a single "save". Some saves may include several save states in a single file. And so on. Still, the results should give a rough ballpark of what we're talking about.

Here's the raw numbers:

GameSave in kilobytesNotes
Alan Wake450
Alpha Protocol50
Assassins Creed Brotherhood41
Batman Arkham Asylum64
Bioshock21200
Blackwell Deception1500  Saves grow as you progress
Blackwell Epiphany15000  Saves grow as you progress
Book of Unwritten Tales170  Wildly variable sizes
Borthers A Tale of Two Sons490
Botanicula0  <-- 16 bytes to be precise
Breath of Death VII24
Broken Sword Director's Cut7
Bully Scholarship Edition22
Crysis2500  Saves grow as you progress
Darksiders14
Dead Rising 2300
Dead Space412
Dead Space 2411
Dragon Age Origins500  Saves grow as you progress
Dust4
East India Company3400
Elder Scrolls Oblivion1100
Elder Scrolls Skyrim13000  Saves grow as you progress
Fable300
Fable 31000
Fallout38400
FalloutNV6000
FUEL200
GalCiv22000
Giana Sisters Twisted Dreams1
HotlineMiami256
Jack Keane and the Fire Within110
Jamestown4
JustCause820  May contain several save states
King's Bounty800
King's Bounty Princess1000
L.A. Noire118
Legend of Grimrock250
Legend of Grimrock 21900
Mass Effect20
Mass Effect 260
Max Payne1200  Save sizes vary wildly
Medal of Honor175
Metro 203330
Metro LL60
Mirror's Edge9000
Need For Speed Hot Pursuit540
OpenTTD90
Overlord22
Prince of Persia (new)210
Prototype17
Puzzle Agent500
Puzzle Agent 2760
Quest for Infamy665
Rainslick463
Red Faction Guerrilla1000  Save sizes vary wildly
Resonance4000  Saves grow as you progress
Sid Meier's Ace Patrol15
Sid Meier's Pirates!1004
Sid Meier's Railroads6400
Syberia73
Syberia270
Test Drive Unlimited 2150  various files, hard to tell what's the save
Torchlight2600
UnderGarden2
VVVVVV3
Wasteland22000  Save sizes vary wildly
Witcher15000  Save sizes vary wildly
Witcher 21700
XCOM Enemy Unknown900  Save sizes vary wildly

Some things of note. I think I played more Witcher2 than Witcher, which further shows that the kids at cd projekt red paid more attention to save size optimization the second time around.

Lots of games have WAY too big save files for what they are - the blackwell games are a good example of this. There's no way the adventure games would need all that saved state. Sid Meier's Pirates! also has surprisingly large saves, as does Max Payne and Mirror's Edge. Mass Effects appear to have well-designed save data, as does Batman Arkham Asylum.

Some of these save game sizes can be understood as plain laziness (if it's not a problem, don't fix it), others may depend on the game engine ("it just works that way"). Some games really do need a lot of save data ("but the player may want to come pick up that napkin two years later!").

Analysing Another Kid Game

September 9th, 2014 #

We've been playing a variant of a simple card game called "hunger" with Niklas. It has zero player agency, but it's a thing to play and it teaches numbers and comparing them.

The basic rules (that we've used) to play it are as follows:

Deal the whole deck more or less evenly to all of the players (three, in this case).

Each turn, every player plays the top card of their deck. The one with the highest value card (suit is ignored) gets the cards and puts them to the bottom of their deck.

If two or more players play the same value card, those players play another card until one has higher value card than the others. If a player runs out of cards during this process, they can pull a random card from another player.

Once one player runs out of cards, the game ends. The one with the thickest deck wins. We made this rule because playing this game one-on-one takes FOREVER.

So anyway, I decided to crunch some numbers, and made a monte carlo simulator for the game and ran 10 million games.

Aggregate results from a ten million random games:

ValueAverage
Turns per game (12-821)90.744
2-way collisions per game8.373
3-way collisions per game0.236
Card pulls per game0.101

The shortest game played in this set is 12 turns! This is possible because 2-way and 3-way collisions are included within the turn. It's theoretically possible (but rather unlikely) to have a 1-turn game.

Having aces (the highest value card) in your deck at start is a deciding factor on how well you'll do, as we see from the stats. If you start with N aces, you'll:

Nlosewin
083.725%1.216%
136.002%22.822%
29.986%51.378%
30.698%78.218%
40.000%94.578%

You can still win when starting with 0 aces, by running out of cards in a 2-way or 3-way collision, and being lucky enough to pull an ace from someone else.

Not winning with four aces is easier, since it's possible that the other surviving player has a thicker deck than you have (even though that's not likely). Losing when starting from four aces is still theoretically possible if someone pulls one of your aces after running out of cards in a 2- or 3-way collision, but this is so unlikely that it doesn't even show in the results.

You've Been, Thunderstruck

August 15th, 2014 #

We had some stuff fried due to thunderstorm, including bluray player, game console and my wife's PC. We spent a whole day, a lot of money and favors from very good friends to get stuff back together, mostly.. I'm still a bit unsure whether our video projector got damaged or if the game console is broken, but we'll see.

Anyway, fixing wife's computer required a new motherboard, which is a move win7 doesn't like. The system tries to load drivers meant for the old motherboard and bluescreens, and then goes through a lenghty automated repair cycle that doesn't work.

I got it finally fixed by googling around and finding this resource, which describes a mystical spell you have to give to the command prompt to get things working. Kinda like with linux, actually..

Anyway, here's how I went with it:

Step one: try to boot, fail, try to boot, go to the automated repair thing, cancel, pick advanced repair options (or some such), pick command prompt.

Step two: insert the new motherboard's driver CD in the drive. If you don't have a drive, copy the contents to a USB stick on some other computer. If that doesn't have a CD drive either, download the drivers off the net. Just make sure the driver media is somehow plugged to the computer.

Step three: all of the drive letters are jumbled. You need to find the drive letter of your windows installation AND the drive letter of your driver media (the CD or USB stick).

Step four: Cast this spell:


dism /image:c:\ /add-driver /Driver:X:\ /recurse    

..except that you need to replace c:\ with the drive letter of your windows installation, and X:\ with the drive letter of your driver media (CD or USB stick).

The command will go through the driver media and install all of the drivers to your windows installation; in my case that was over 450 different drivers. That takes a while.

Step five: reboot. This will also take a while.

Step six: wait for windows to rediscover all the devices in your system. This, again, will take a while.

Step seven: uninstall any applications related to your old motherboard (like cpu temperature displays or whatnot) that just throw errors if you try to run them.

Oh, and as a word of warning, I take no responsibility of any damage caused by following the above. I don't know what the heck the command actually does. It worked for me, though.

Cheap-Ass DIY Passive Mixer

June 21st, 2014 #

I have a slight problem with my audio gear. Namely, latency. Playing midi stuff through windows' normal audio interface introduces a huge latency. Using asio4all, I can get the latency down to below 10ms, but then I can't hear the system sounds, and getting asio4all going can be tricky when you're running a hundred apps and any of them might have audio open..

So I went and bought a cheap USB audio dongle, which I can use as a dedicated asio4all device. Which works quite fine, except that I have to move my headphones from one jack to the other, and I still can't hear system sounds.

The proper solution to this would be to buy a usb mixer (which will also work as a USB audio device), but those easily cost more than 200 eur which I don't have to spend. So I figured I might go with a low-end solution:

Googling around I found a bunch of schematics for simple DIY passive mixers. The values for the resistors vary a lot from one schematic to another, so I took a wild guess and went with 2kOhm resistors. The sleeves should be connected to ground, so I just tied them all together.

The result works. I do have to pump up the system volume a bit due to the additional resistance, but considering that I earlier had the volume at something like 2%, this isn't much of a problem. (I am happy, however, that I didn't go with 10kOhm resistors =)

The audio quality is probably also completely out the window, but I couldn't hear much of a difference. Your mileage may vary and all that.

Oh, the reason why those resistors are a good idea is that this way the different audio outputs don't talk (much) with each other, so frying electronics is less likely.

Tired of Saving the World

April 7th, 2014 #

Since Google seems to be filtering all the crazy bits out of the recent search terms, I haven't had that to remind me to post here.

Anyway, to the subject at hand.

As I was working through my backlog of games on steam, I found myself weary at watching yet another intro animation that describes how the world is going to be destroyed by one evil force or another and only you can save the world by collecting an oddly specific number of magic thingamabobs from around the world, while everybody else (most of whom are more experienced than you) seem to be otherwise occupied.

Yaawwwnn.

Another thing that really tires me are shopping lists. I went through a bunch of games I had not finished at one point and realized most of them I stopped playing when I hit a "shopping list".

With a shopping list I mean that at some point of your quest someone tells you that in order to progress, you need to do a, b, c and d, or possibly to collect a, b, c and d, or, let's say, seven magic thingamabobs.

I understand where these kinds of quests come from. They give the illusion of non-linearity to the player, or possibly just encourage the player to explore the world a bit in the order the player wants. But the prime problem is the same as with the world-saving master quest.

  • Why are the stakes always so big?
  • Why does the player have to do everything?
  • Why does the player's role have to be so important?

All of these are relatively easy to fix.

First, I don't think it's always necessary to save the world. If you've played Full Throttle, for instance, the stakes are much lower, and by making them more personal, they have much more impact than your generic world-saving.

Infinity is boring. It doesn't matter if you're about to be crushed by an infinitely large boot or a half-ton one, but the half-ton one you can understand, and it feels much more threatening.

The second and third points can be solved by making the player feel like he's not the only one doing something, and also not necessarily giving the player the most important task. The Half-Life series actually does this at points.

Let's say a voodoo medicine is needed to cure the teacher of the village. Others go and find the exotic and dangerous ingredients while you're tasked to get water (and a bucket to carry the water in, and so on and so forth). While doing that, you also bring wet towels to ease the teacher's pain and discuss various matters with him.

By making the stakes more manageable, they become more personal and have stronger emotional impact. By giving the player a less-central role, the tasks again become more personal. While not the most important, the others' efforts would be wasted. And while not being alone, the player gets a feeling he's really helping, doing something he can understand.

New Year, Blah Blah

January 17th, 2014 #

Okay, it's been a new year for a while. Time to update the site..

First, here's the traditional new year's demo for the two of you who hasn't seen it yet..

I also started writing more "making of" articles, you can find those under the new Breakdowns category.

I cleaned up and published my TextGL code, which I used in "Litterae Finis".

And now, for no reason whatsoever, let's look at a game design.

There's a co-operative children's board game I've played recently. The premise is that there's four fruit trees. Every turn, players roll a die; if sides 1-4 come up, the player picks a fruit from the tree related to that side. If side 5 comes up, the enemy in this game, the bird, takes a step forward. The final side of the die lets the player choose which tree to pick a fruit from.

Oh, and if a tree is already empty, you don't do anything.

If the bird takes five steps, it gets to the garden and eats the rest of the fruit. If the players manage to pick all of the fruit before this happens, they win.

So I thought to myself, how much agency do the players actually have, and what's the probability that the players win..

So instead of working out the math, I wrote a small simulator for the game and ran a million randomized games to see what the result is.

The only place where the players actually make any decisions is when the final side of the die comes up, i.e, which tree to pick from. If you always pick from the tree with the least fruit, the likelihood of rolling empty trees gets higher, and thus the likelihood that you roll a bird comes up more. On the other hand, if you always pick from the tree with the most fruit, the reverse is true.

Now, if you do the good choice always, your chances of winning are about 63.1%, and if you do the bad choice, you end up winning 55.5% of the time. Totally random picks win at around 59.7% of the time.

Since it's a kid's game, it makes sense that the game is rigged to make the players win most of the time, but not so much that the bird doesn't have a chance at all. You also can affect how the game goes, but only slightly.

For the heck of it, I also ran some tests to see how the number of steps the bird has to make affects the results, and I'm pretty sure the game designers did the same, as the five steps is such a clear sweet spot.

stepsbadrandgood
1096.7%97.5%98.1%
993.8%95.1%96.2%
888.9%91.0%92.6%
781.5%84.2%86.5%
670.0%73.8%76.8%
555.5%59.7%63.1%
438.1%42.5%45.9%
322.2%25.0%27.7%
29.3%10.8%12.2%
12.1%2.6%3.0%

So there.

As for new year's resolutions, I think I'll keep the trio I've used for some years now; let's see which ones I manage to upkeep this time..

  • Writing. Doing it right now. Also the "breakdown" articles. Other stuff? We'll see.
  • Music. Still "doodling" on the midi keyboard every now and then, should dedicate some time to record stuff too..
  • Getting in shape. This is (still) mostly a scheduling issue - I need to dedicate some part of the day for this and make it a routine or I don't get anywhere with it again..

There are of course other things I'd love to do, like code a zillion different projects and finish one of my indie game projects and get it out there and make SoLoud much better and.. .. but those will happen if they will, and since I really WANT to get those done, they have higher probability of happening than, say, getting in shape.

And no, round is no shape for a human to be.

 

Older news have been archived here.

Site design & Copyright © 2015 Jari Komppa
Possibly modified around: April 10 2015