<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1997144270228310388</id><updated>2011-07-29T10:49:17.329+02:00</updated><category term='ludum dare'/><category term='design games tools'/><category term='design'/><category term='game design'/><category term='games'/><category term='code'/><category term='tools'/><category term='skepticism'/><title type='text'>Anders Elfgren</title><subtitle type='html'>Gamer, developer, skeptic.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-7637882854951423626</id><published>2009-12-10T21:54:00.003+01:00</published><updated>2009-12-11T11:48:17.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design games tools'/><title type='text'>Announcing CAKE - Character Animation Kickass Editor</title><content type='html'>&lt;div&gt;I've had in mind a while now a project unlike what I usually do. I've wanted to make an XNA library for 2d animations, suitable for for example creating animations for a stick figure type character, or indeed any 2d character.&lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;A week ago or so, my friend Victor, who I pretty much always do my games with, suggested that we do a game for a new contest that's out there (can't remember the name or url off-hand). I suggested an idea I've had for a while: basically a game where the PC constantly runs jumps and does cool stuff from left to right on the screen while potentially fighting off baddies and stuff. The inspiration for the game is one of the last scenes in Wanted, where he's running through the factory shooting down people left and right. Good stuff. :)&lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;So, CAKE. If you ask any of my friends what I like, you're likely to hear "Cookies". And cakes and cookes are kind of related. And the words that make up the acronym kind of makes sense. So there you go. &lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;So yeah, I pretty much instantly started working on an editor that could produce animations for the game. I started by rigging the skeleton as a ragdoll, essentially, using the 2d XNA physics engine FarSeer, but that had some complications that were just too annoying. I didn't really want to build my own skeleton code and inverse kinematics because it seemed like a lot of work. But I started doing some math on paper and realized that it wasn't very hard at all.&lt;br /&gt;&lt;br /&gt;So, here it is, in its current state of glory:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZrLyBfR1j0w&amp;amp;hl=en_GB&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ZrLyBfR1j0w&amp;amp;hl=en_GB&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;It &lt;span style="font-weight: bold;"&gt;is&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;neat, isn't it?&lt;br /&gt;&lt;br /&gt;While it can do the most important stuff, here are some of my plans:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Get it up on google code under some nice license.&lt;/li&gt;&lt;li&gt;Create an accompanying animation library with support for transitions, blending and more.&lt;/li&gt;&lt;li&gt;Wrap the current gui in a "proper" WPF application. I really don't want to try and code guis with a bunch of widgets using XNA.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mirrored animations/rigs.&lt;/li&gt;&lt;li&gt;Tutorials&lt;/li&gt;&lt;li&gt;More datadriven.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Separate rendering code from animation code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use all of the above to create a cool game. :)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Wish me luck. :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-7637882854951423626?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/7637882854951423626/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/12/announcing-cake-character-animation.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/7637882854951423626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/7637882854951423626'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/12/announcing-cake-character-animation.html' title='Announcing CAKE - Character Animation Kickass Editor'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-6722856197738801239</id><published>2009-12-10T20:29:00.002+01:00</published><updated>2009-12-10T20:39:50.730+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skepticism'/><title type='text'>Is promoting alternative medicine evil?</title><content type='html'>I've been meaning to write this blog post more or less ever since I finished my last one. It ended along the lines of "these people claim their acupuncture can cure lots of stuff - that's evil!" It felt a bit strong, I guess, and is easily misinterpreted as "alt-med practitioners are evil!", which isn't how I feel.&lt;br /&gt;&lt;br /&gt;It's not the people who are evil. I'm sure the girl in the counter is very nice and no doubt believes in that what she's selling works.&lt;br /&gt;&lt;br /&gt;It's more about the general notion of not using the scientific method in order to verify claims which, when it comes to medicine, actually is kind of evil, I think. It's evil because I believe that it causes people to choose treatments that aren't effective over ones that are based on science and thus &lt;strong&gt;potentially&lt;/strong&gt; are effective. Note that I don't think that science based medicines are &lt;strong&gt;always&lt;/strong&gt; effective for &lt;strong&gt;everyone&lt;/strong&gt;, but I do believe that the &lt;strong&gt;chance&lt;/strong&gt; to get a better treatment increases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-6722856197738801239?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/6722856197738801239/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/12/is-promoting-alternative-medicine-evil.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6722856197738801239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6722856197738801239'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/12/is-promoting-alternative-medicine-evil.html' title='Is promoting alternative medicine evil?'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-3500509391281225870</id><published>2009-11-24T18:43:00.000+01:00</published><updated>2009-11-24T19:43:16.540+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skepticism'/><title type='text'>Acupuncture in Edinburgh</title><content type='html'>&lt;div&gt;&lt;/div&gt;This kind of pissed me off.&lt;br /&gt;&lt;br /&gt;I went to Edinburgh the other day and took a stroll in the St James shopping center. I noticed a desk with banners saying something like "We can cure lots of problems", and there were examples of low sperm count, among other things. I looked a bit closer and realised that they do it using acupuncture and herbs.&lt;br /&gt;&lt;br /&gt;I walked up to them and took a pamphlet, in which they list a whole bunch (~100) of diseases they claim they can cure. The asian girl behind the counter asked if I was interested in anything. I asked them "Do you actually claim that you can treat all of these with acupuncture?" to which she replied "Yes". I'm generally unconfrontational, so I just told her that I wanted to think about it first, and left.&lt;br /&gt;&lt;br /&gt;Now, as far as I understand, the evidence for if acupuncture works or not is unclear at best. If there is anything it can help with, it's back or neck pain, but I don't think there's any conclusive evidence for that even. And I mean help with, as in "do more than the placebo effect". I could have called them on that, but I didn't. I don't really have anything to back it up with except from what I've heard from the SGU, or read on Science Based Medicine. Unlike homeopathy, which is just ludicrous, it's not hard to imagine how acupuncture would actually work, "scientifically".&lt;br /&gt;&lt;br /&gt;What I don't like is that I am &lt;span style="font-weight: bold;"&gt;sure&lt;/span&gt; that they haven't looked into the science at all before thinking it is ok to tell people that "Hey, I've got the cure for you!". That's dangerous, stupid, and just a little bit evil, I think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-3500509391281225870?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/3500509391281225870/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/11/acupuncture-in-edinburgh.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/3500509391281225870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/3500509391281225870'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/11/acupuncture-in-edinburgh.html' title='Acupuncture in Edinburgh'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-7366662774387553036</id><published>2009-11-23T23:42:00.002+01:00</published><updated>2009-11-24T19:29:22.763+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='skepticism'/><title type='text'>My impressions of NEoN</title><content type='html'>&lt;div&gt;&lt;/div&gt;NEoN, in case you don't know, stands for North East of North, and is what I think they call a "Digital Arts Conference". Basically, it's the closest thing I've been to to a games conference. Perhaps excluding SGA evenings, if they count. (I don't think they do. But they're fun. :) ).&lt;br /&gt;&lt;br /&gt;This year was the first time NEoN was arranged so there were some problems, but on the whole I'd say it was pretty cool. Ok, lets go through it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The bad&lt;/span&gt; (not necessarily superbad, just bad enough to warrant a note)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The audio was kind of crappy. Sometimes, one of the loudspeakers would give off a buzzing sound when the talker was talking. Extremely annoying. When Bad Luckey was interviewed, it was almost as if he didn't have a mike. It's not that he talked quietly (which he did, and that's ok), it's that they could've cranked the volume up a bit.&lt;/li&gt;&lt;li&gt;I got interviewed on Saturday morning about what I thought so far but either I sucked, or they forgot about it, or they haven't had time to upload it yet, or something else entirely, but the interview is nowhere to be found. Give me my minutes of internet fame!&lt;/li&gt;&lt;li&gt;The food. It was ok, but nothing more. Ok, the bacon and egg sandwich on Saturday morning were really good. But then, they had bacon.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;The Friday talks &lt;/span&gt;(in order)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Realtime worlds. Shame David Jones couldn't do the talk, but Colin and EJ handled it really good. Saw some things I hadn't seen before. I enjoyed it because it gave me kind of the same feeling I had from working at Avalanche: "I work for a cool company, on a cool project - awesome" :)&lt;/li&gt;&lt;li&gt;Paolo Barone on Microsofts up-and-coming techs. Cool stuff, though admittedly I've seen most of it before.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Bad Luckey interview. While the questions were good, and the interviewer also good, Bad was quite unenthusiastic and unfortunately not that good of an interviewee. Maybe he was just tired or something.&lt;/li&gt;&lt;li&gt;Al Mooney, showing off Adobe tech. If it weren't for the fact that it was a good and funny talk ("PEARLS" was a gem!), I would've almost been pissed off because it was nothing but a sales pitch for Adobe's new products.&lt;/li&gt;&lt;li&gt;Eaon Pritchard's (workshop) talk about ads and marketing using new/social media. Started off a bit slow, but I really enjoyed it. He said some things really worth remembering.&lt;/li&gt;&lt;li&gt;Mark Daniels, New Media Scotland... I'm not sure I remember this one actually. Sorry!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Saturday talks&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Alice Taylor talked about how she's bringing BBC TV education to the internet and being quite successful at it. I really enjoyed this talk - it was great. :) I especially liked when she said, and I'm quoting from memory, so, uh, don't quote me, "Forty percent of kids in the UK today are atheists - which is amazing!" and something about "teaching kids about nonsense such as astrology". My skeptic heart got all warm and fuzzy! I didn't know they were responsibly for the Science of Scams web site, which is pretty cool since that means it's government funded and stuff - I guess?&lt;/li&gt;&lt;li&gt;Dr. Joe Halliwell.. uh... don't remember, sorry!&lt;/li&gt;&lt;li&gt;Simon Parsons. For some reason I don't think I liked this talk. It might just've been that I wasn't listening to what he was actually listening due to hunger/tiredness. But I just got the feeling that I didn't really agree with what he was saying.&lt;/li&gt;&lt;li&gt;Colin Anderson, Denki. Great talk! Funny, smart. Essentially about how ideas aren't what's important: it's the team. His "proof" was Pixar: their ideas are kind of crazy, but they still manage to do it, and do it extremely well. &lt;/li&gt;&lt;li&gt;Richard Scott, Axis Animation. Good talk, though it might have been better if it was more of a talk and less of showing movies they've made.&lt;/li&gt;&lt;li&gt;Tommy Tallarico. Best talk of the conference, I'd say. Very inspiring - he essentially got into the games business by driving to LA (or something) with nothing, being homeless and sleeping on the beach until he stumbled upon a job because he happened to be wearing a games t-shirt. His talk was straight from the heart, with no slides or anything. Also, he said religion is a bunch of bullocks. Thumbs up!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I wasn't entirely sure after Friday that I thought it was worth it (£115 I think), but the talks on Saturday were really good and I'm pretty sure I'll go next year if I have the chance.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-7366662774387553036?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/7366662774387553036/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/11/my-impressions-of-neon.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/7366662774387553036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/7366662774387553036'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/11/my-impressions-of-neon.html' title='My impressions of NEoN'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-6751975575800933585</id><published>2009-11-23T21:44:00.000+01:00</published><updated>2009-11-24T19:43:58.769+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skepticism'/><title type='text'>Why I don't believe in creationism, homeopathy and astrology</title><content type='html'>I've noticed that, when reading articles, columns, blog posts, or watching debates or clips about, for, or against creationism (aka ID), I could see why people would believe it.&lt;br /&gt;&lt;br /&gt;From my point of view, it is obvious that the earth is five billion years old - or whatever - and that believing that it is only 6000 years old seems stupid and ignorant. Every evidence I have heard of points to this fact. Geology and astronomy point quite a big finger at it.&lt;br /&gt;&lt;br /&gt;I have of course heard 'evidence' for it being six thousand years old; the Noahs flood being the cause of the Grand Canyon, for example. When it comes to dissing evolution (which is intimately related, even though it kinda shouldn't be), I (and many with me) have probably seen 'em all.&lt;br /&gt;&lt;br /&gt;But for some reason I tend to think that creationist arguments are crappy arguments. The same goes for other 'theories', such as astrology. Or medical claims such as homeopathy. Why do one group of people think one thing, and another think a completely different, mutually exclusive thing?&lt;br /&gt;&lt;br /&gt;One side,&lt;span style="font-weight: bold;"&gt; at least one side&lt;/span&gt;, has to be wrong. And it is not even the case that one side is sure enough that they call it a fact, and the other side are just kinda sure but still sitting on the edge, waiting for the evidence. (Obviously, those exist as well, but ignore them for now). No, both sides not only think, but &lt;span style="font-weight: bold;"&gt;know&lt;/span&gt; that they are right.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How can anyone be so sure about anything, when a HUGE group of people are sure about the opposite?&lt;br /&gt;&lt;br /&gt;I guess that's where skepticism comes in. As a skeptic, one tries to understand all the evidence before coming to a conclusion. Hearing and learning about logical fallacies so that you don't &lt;span style="font-weight: bold;"&gt;argue in the wrong way&lt;/span&gt;. (Topic for another blog post :) ). But it is not about throwing up your hands and saying "Beats me! Noone could know!". Its saying "Look, obviously you can not be certain about anything, but the evidence &lt;span style="font-weight: bold;"&gt;do point in that direction&lt;/span&gt;, so that is what I think seems like the best bet right now". Even a skeptic can be extremely certain about something, it just takes a large amount of compelling evidence for it.&lt;br /&gt;&lt;br /&gt;Ok, so why do I think that skepticism is the way to go - and why am I skeptic of the things named in the headline, and not their opposites? (Lets ignore that there are more than one opposite to creationism for now as well).&lt;br /&gt;&lt;br /&gt;It's not because I believe scientists to be perfect human beings that are always right. It's not because I think that science is done in a lab and that that in it self would give some credence. It's not because someone has analyzed everything mathematically and come to an undisprovable (or whatever the correct word is..) conclusion.&lt;br /&gt;&lt;br /&gt;Here it is: Because I think &lt;span style="font-weight: bold;"&gt;the scientific method is the shit&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;You're probably agreeing with me, or thinking "Wait, wasn't that all the things he just listed?". No.&lt;br /&gt;&lt;br /&gt;I remember when I was in chemistry, or possibly biology class in high school. My teacher explained that science is based on empirical data. I didn't know what that was, but when he told me that it was about relying on statistics and tests, I felt a bit let down. "That's no way to prove something", I thought, hoping that science had more to do with logically deducing facts given certain other facts. But even though I've seen rocks fall a million times, I can't use that to &lt;span style="font-weight: bold;"&gt;prove&lt;/span&gt; that rocks will always fall!&lt;br /&gt;&lt;br /&gt;I've changed my mind about that now. I've realized that testing and evaluating is the only way of finding out whether or not something is worth believing in or not. (Obviously, sometimes you don't know much but you have to make a decision and just base it on your intuition or gut reaction, but the those aren't the types of issues I'm talking about here)&lt;br /&gt;&lt;br /&gt;Here's a crash course in the basics in the scientific method.&lt;br /&gt;&lt;br /&gt;1. You have an idea.&lt;br /&gt;2. You come up with a way to test the idea.&lt;br /&gt;3. You test it.&lt;br /&gt;4. If it seems to work, the idea gets a little credibility. If not, it loses some.&lt;br /&gt;5. You figure out how to toughen the controls, or how to test things differently. (Basically, you make sure that the result you were looking for didn't come from something else)&lt;br /&gt;6. Go to step 2.&lt;br /&gt;&lt;br /&gt;If your idea turns out to pass a lot of tests, then it gets a lot of credibility. If it passes MANY tests, it might even become a theory.&lt;br /&gt;&lt;br /&gt;Well, that's the gist of it - there are more things to the method (falsifiability, peer review etc.) but in principle: If you had a good idea, it will generate positive tests, otherwise not.&lt;br /&gt;&lt;br /&gt;I don't have to believe scientists because they are scientists. I believe them because by using the above method, you will find sooner or later find solid answers. And there's no other way of doing it - that I know of. Maybe aliens have mastered another method that works for them, but I highly doubt it.&lt;br /&gt;&lt;br /&gt;It doesn't really come down to who I believe. It comes down to who I believe actually do use the scientific method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-6751975575800933585?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/6751975575800933585/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/why-i-dont-believe-in-creationism.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6751975575800933585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6751975575800933585'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/why-i-dont-believe-in-creationism.html' title='Why I don&apos;t believe in creationism, homeopathy and astrology'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-3330054183270356879</id><published>2009-08-24T22:38:00.006+02:00</published><updated>2009-08-24T22:50:41.016+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Tools: "Design As You Go"</title><content type='html'>This is a reply to &lt;a href="http://toolssig.wordpress.com/2009/08/24/reason-1-of-6-design-as-you-go/"&gt;this IGDA blog entry&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The problem discussed is that time is often not given to designers of tools to prepare a proper design before a tool gets implemented - instead the developer is left on its own to try and realize what he or she &lt;span style="font-weight: bold;"&gt;thinks&lt;/span&gt; the tool is about, hoping that in the end, when the users get it, they'll be happy and say "&lt;span style="font-style: italic;"&gt;Yes, this is exactly what we wanted!&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Tools teams very rarely get the full support of management, and game teams can’t be stalled waiting for tools to be completed.  The unfortunate sentiment among those in power is that there’s no time for tool design.  Get it done and get it done now.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The programmer has a vague idea of what to do, and without ever writing it down or validating his thoughts with the end users in any formal way, begins to implement the design from his own mind.   He still thinks about it a great deal.  Perhaps 75% of his time is spent thinking and only 25% is spent typing.  There are probably still many  unanswered questions, but as the tool begins to take shape, some answers may start to become more obvious one by one.  The tool seems to practically design itself, but in reality, design is going on quite informally.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;In my experience (three years of tools development at Avalanche Studios), it is VERY difficult to understand all the requirements of a tool before you start to use it, or even starting the implementation. Often while writing the core code structure for a new tool, I come up with questions such as "&lt;span style="font-style: italic;"&gt;Wait a minute, here's a case we haven't thought of, I wonder how this should be handled&lt;/span&gt;". It's not necessarily about finding problems you hadn't thought of, it can also be that you realize that something can be done in a much smoother way (user interface-wise), e.g. "&lt;span style="font-style: italic;"&gt;Hey, wouldn't it be cool if...&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;The way I found myself working at Avalanche Studios (I currently work at Realtime Worlds) was to begin, of course, by talking to the designers before the tool was designed. Or in fact, be part of the initial design/requirements phase - often, as a programmer, one can see things in different ways and come up with new (and sometimes better) ideas for the design.&lt;br /&gt;&lt;br /&gt;But to have the interaction between you (as a developer) and the designer stop there, is to fail. Whenever I made a new tool (or fixed/improved an old one), I'd be talking to the designers several times each day to discuss it, show them my progress and adjust the implementation and design thereafter. It's not uncommon to utter phrases like "&lt;span style="font-style: italic;"&gt;After looking at the code that I'm using, I've realized I can solve it this way instead -  it will work like this and that instead, and it will take me this and that much longer (sometimes shorter!) time to implement, and these are the ramifications of doing it that way&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;Obviously you should always spend &lt;span style="font-weight: bold;"&gt;some&lt;/span&gt; time before implementing a tool to make sure that there is a thought behind it, and that you know what the requirements and design is. I do however think that the time can vary a great deal depending on the circumstances.&lt;br /&gt;&lt;br /&gt;I also don't mean to say (if it sounds like it) that the changes to a design always originates from the coder, looking at his implementation and having an idea. Often - again, in my experience - the designer will change his or her mind after seeing the tool, realizing that it wasn't &lt;span style="font-weight: bold;"&gt;quite&lt;/span&gt; what he or she was after! That is, no matter how much time you spend on figuring out the requirements before you start working on the tool, you will always find something that you will want to change afterwards. Finally, since changing a tool &lt;span style="font-weight: bold;"&gt;after&lt;/span&gt; you've implemented it is a waste of time, doing the code-designer dance every day is the best way to reach the target with a minimum of wasted time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-3330054183270356879?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/3330054183270356879/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/tools-design-as-you-go.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/3330054183270356879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/3330054183270356879'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/tools-design-as-you-go.html' title='Tools: &quot;Design As You Go&quot;'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-1587760833256319289</id><published>2009-08-11T14:19:00.005+02:00</published><updated>2009-11-24T19:42:20.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>The context.</title><content type='html'>This post is about a concept so simple that it writing a blog post about it really seems like a waste of blogging, but I think, really isn't: &lt;span style="font-weight: bold;"&gt;The context&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now, I'm sure that there are many names for it, but that is the one I've heard and am using.&lt;br /&gt;&lt;br /&gt;Let me start by describing the problems that I've had during my time of writing games. I'm going to use the example of what games I've written for PyWeek looks like, because they are (by necessity :) ) quite simple in their architecture. However, the context concept can be used in a game of any scale, or written in any object oriented language. A common way to update a main loop for my games is to do something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;while True:&lt;br /&gt;   deltatime = self.timer.getdeltatime()&lt;br /&gt;   self.graphics.update( deltatime)&lt;br /&gt;   self.physics.update( deltatime )&lt;br /&gt;&lt;br /&gt;   for actor in self.actors:&lt;br /&gt;      actor.update( deltatime )&lt;br /&gt;&lt;br /&gt;   if self.stateManager.gameFinished():&lt;br /&gt;      break&lt;br /&gt;&lt;br /&gt;print "game quit"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, this works fine. But later in the process you realize that you have an actor (say a LaserTurret) that requires access to the graphics module, because it wants to shoot a laser, and you don't want to throw a call to glLine in your actor update loop, because it's supposed to handle game logic and not have to know that you're using OpenGL, right? The solution?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You modify the update function in your Actor classes to take an additional graphics parameter.&lt;/li&gt;&lt;li&gt;You make sure that your actor classes (or maybe just the Laser) gets a reference to the graphics module on creation, and then stores it for use during the update loop.&lt;/li&gt;&lt;li&gt;You make graphics into a Singleton, or something equivalent - like a global variable.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The first is a pain in the ass, if you have a lot of actor classes, which so far I have tended to have. The second one means that you have to modify the initialization of actors and perhaps make a special case for the LaserTurret, and you have to store the reference to graphics - probably not very expensive (memory wise), but still, if you have a thousand turrets... The third solution is just plain ugly. ;)&lt;br /&gt;&lt;br /&gt;Also, both solutions have the problem that the &lt;span style="font-weight: bold;"&gt;next&lt;span style="font-weight: bold;"&gt; time&lt;/span&gt;&lt;/span&gt; that you want to access something from your actors, you'll have to do it all over again.&lt;br /&gt;&lt;br /&gt;So, the real solution: Pass a &lt;span style="font-style: italic;"&gt;context&lt;/span&gt; to the update functions. As I said, this is so simple that it shouldn't need mentioning, but I've worked on many games and have used all of the three solutions listed above, and I for some reason I never thought of using a context. So what is a context? Well, it's just a class that contains whatever you would like your systems and actors (or whatever you call them) to know about during their update - and even their creation/initialization.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Context:&lt;br /&gt;   def __init__(self, deltatime):&lt;br /&gt;       self.dt = deltatime&lt;br /&gt;&lt;br /&gt;#....&lt;br /&gt;&lt;br /&gt;context = Context( self.timer.getdeltatime() )&lt;br /&gt;#.....&lt;br /&gt;while True:&lt;br /&gt;   #.....&lt;br /&gt;   for actor in self.actors:&lt;br /&gt;      actor.update( context )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, if you want to make sure that your actors have access to graphics, simply add graphics to your context and you are done! Just that simple fact makes contexts a better solution than the three listed above.&lt;br /&gt;&lt;br /&gt;One objection could be made that in the first and second solution, you can make sure that different game systems only have access to the things that they require access to - for instance, lets say you have a CloudSystem that is responsible for moving some clouds around on the sky, animating them depending on some various states but other than that not really interacting with anything else. You would perhaps like it to access graphics, but not physics.  Well, and I'll get back to this, &lt;span style="font-weight: bold;"&gt;you can have multiple context classes&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;This is especially useful if you are making a threaded game. Perhaps you don't want something mucking with the physics world while you're updating it? Well, if you had made physics into a Singleton, you wouldn't have much control over that, other than telling yourself and your teammates, and hope for the best. The same basically goes for storing a reference to it.&lt;br /&gt;&lt;br /&gt;There are a couple of ways to solve this with a context, but to take an example, you could split your actor list into two: One that doesn't require access to physics, and one that does. Then create two context classes and pass the appropriate instances of them to the two lists. Another solution is for the actor class to get an additional function, say &lt;span style="font-weight: bold;"&gt;UpdatePhysics&lt;/span&gt; and pass the context with physics to only that function. Thus, contexts can be used to &lt;span style="font-weight: bold;"&gt;restrict access&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When I first heard the name &lt;span style="font-style: italic;"&gt;context&lt;/span&gt;, I thought that it was a bit of a strange name; but in fact, it is a very good name, and here's how I think about it. When you pass a context to an update function, you're telling the instance that "Here! This is what you need to know about the world and the parts of it which you may examine and change. You don't need to know where it came from, and you don't need to know anything else about it either for that matter! &lt;span style="font-weight: bold;"&gt;This is your context&lt;/span&gt;. "&lt;br /&gt;&lt;br /&gt;To clarify a bit more why it is a good name: It turns out that there is one more thing that makes using a context useful. You can essentially sweep the rug out from under an actor and replace it with another rug before it notices. As I hinted, the object shouldn't really know anything about the context, except for what it provides. At least this feels quite natural to me, but perhaps it is not always practical, but lets imagine that in your game the context user doesn't need to assume anything about it. You could then have, say, a &lt;span style="font-style: italic;"&gt;ProgressSystem&lt;/span&gt; that shows how much of the level has been completed in a progress bar on the screen. If it's update loop simply took the context, compared the number of killed monsters versus the number of total monsters, convert it into a percentage and show it. When you change the level, you don't need to create a new ProgressSystem, you don't need to call &lt;span style="font-style: italic;"&gt;self.progressSystem.setLevel( self.level ),&lt;/span&gt; you wont have to do anything except modify the context so that it refers to your new level.&lt;br /&gt;&lt;br /&gt;Now, some of the examples I have used are a bit silly, but ignoring that I hope you've seen the light.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-1587760833256319289?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/1587760833256319289/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/context.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/1587760833256319289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/1587760833256319289'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/context.html' title='The context.'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-4142136325037753110</id><published>2009-08-05T13:40:00.002+02:00</published><updated>2009-08-05T13:43:21.605+02:00</updated><title type='text'>Firefox plugins that rox</title><content type='html'>Here's the plugins for Firefox that I use - some are good, some are invaluable.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Download Statusbar&lt;/li&gt;&lt;li&gt;FabTabs&lt;/li&gt;&lt;li&gt;GooglePreview&lt;/li&gt;&lt;li&gt;PDF Download&lt;/li&gt;&lt;li&gt;Split Browser&lt;/li&gt;&lt;li&gt;Tree Style Tab&lt;/li&gt;&lt;li&gt;Undo Closed Tabs Button&lt;/li&gt;&lt;li&gt;URL Fixer&lt;/li&gt;&lt;li&gt;WOT (Web of Trust)&lt;/li&gt;&lt;/ul&gt;If there's only one plugin I could recommend, it's Tree Style Tab.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-4142136325037753110?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/4142136325037753110/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/firefox-plugins-that-rox.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/4142136325037753110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/4142136325037753110'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/firefox-plugins-that-rox.html' title='Firefox plugins that rox'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-2868489899014281350</id><published>2009-08-02T10:52:00.005+02:00</published><updated>2009-08-02T11:35:43.960+02:00</updated><title type='text'>Good bye Avalanche Studios, Hello Realtime Worlds!</title><content type='html'>So today is Sunday on the last week of my employment at Avalanche Studios. I started working there on the 2nd of May, 2006, and it's been awesome. Totally awesome. It was my first (non-summer) job and I learned *so* much there. Unfortunately, we had some bad luck with the economic crisis and had to do cutbacks, and when I wasn't let go when people who had worked longer than me, the union complained and here I am. I guess this is one occasion where the union made no-one happier.&lt;br /&gt;&lt;br /&gt;Here's a list of who lost out because the union got involved:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Avalanche, because they lost me.&lt;/li&gt;&lt;li&gt;Me, because I lost Avalanche.&lt;/li&gt;&lt;li&gt;Everyone who competed for the jobs I applied to.&lt;/li&gt;&lt;li&gt;Sweden, cause I'm no longer generating taxes.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Here's a list of who gained:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Realtime Worlds.&lt;/li&gt;&lt;li&gt;The union, because they can pat themselves on the back for doing what's right. ;)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So, about Realtime Worlds - why them?&lt;br /&gt;&lt;br /&gt;Well, here's why.&lt;br /&gt;When I found out I was being let go, I sent out applications to Blizzard, Obsidian, and perhaps some more. To my utter delight (I went around the office high-fiving everyone) Blizzard got back to me and asked when I could have a phone interview with them. Well, I told them and never heard back from them. In retrospect, what I apparently should have done, is to give them specific times and not just say "anytime is fine". Didn't hear from Obsidian but I think they're having a project cancelled so no biggie there.&lt;br /&gt;&lt;br /&gt;I went to Bioware's site and tried to apply there, but their application process was horrible (had to register via EA's job site) so I said screw them - a shame really because working at Bioware would be cool.&lt;br /&gt;&lt;br /&gt;I also went to an interview at Starbreeze which is a little bit more close to home. :)&lt;br /&gt;&lt;br /&gt;Around this time I got an email from Realtime Worlds telling me basically "Hey, found you on LinkedIn, are you interested in a tools job?". Well, yeah, so I sent them the CV. :) I also got in touch with Lionhead through a friend's recruiter, and thought that Lionhead would be awesome to work at - I'd heard that it was a good place from several friends. So I was excited about that and had a phone interview with them on the same day as I had a phone interview with RTW. The interviews went great and a little later Lionhead asked me to come to them for an interview in person.&lt;br /&gt;&lt;br /&gt;I also got in contact with Codemasters through a friend who works there and went there for an interview which went really well. As did the interview with Lionhead - I had a really good time and liked the interviewers. Later that evening, I got an email from RTW asking me to come to them for an interview as well and they had booked the flights and in the process gave me a small vacation - pretty sweet. Whereas Lionhead asked me to book the plane tickets myself, RTW booked the tickets, arranged for a driver to pick me up (and drop me off) at the airport, and made it so that I went there on Tuesday, had the interview on Wednesday, and went home on Thursday. I'm not sure if it was intentional or not, but it did give me time to walk around town (Dundee, Scotland), talk to some people and generally relax and just enjoy myself. I'm not saying that Lionhead did a bad job by letting me doing the ticket ordering - just that RTW was awesome!&lt;br /&gt;&lt;br /&gt;I had the interview, which ended with me giving a small presentation on Candy Time, of which the interviewers said something like "That might've been the best presentation I've seen on an interview" which was cool! They said they were usually pretty quick and would get back to me soon. The next day I was at the airport and decided to check my email - and they had given me a job offer!&lt;br /&gt;&lt;br /&gt;The next day I got an offer from Lionhead as well, and a bit after that, a promise for an offer from Codemasters. I contacted Starbreeze and they then got back to me with an offer as well, so now all I had to do was pick and choose.&lt;br /&gt;&lt;br /&gt;This is how I basically reasoned:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lionhead: Awesome place, great game I'd be working on, liked the people. But, I was a little afraid that I was only going to code C# and that I wouldn't see much of the game engine - i.e. just making tools.&lt;/li&gt;&lt;li&gt;Codemasters: Has friends there, liked the people, game seemed cool, but, I hadn't heard as much good about it as Lionhead and RTW. (Note - I haven't heard bad things, but I've heard a lot good about LH and RTW). Plus, working at Lionhead just seems cooler! Sorry :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Starbreeze: I've got a lot of friends there who wanted me to come work for it, it's closer than any of the others, and the work I'd be doing there seemed &lt;span style="font-weight: bold;"&gt;really&lt;/span&gt; fun! But, I felt that this is my chance to try something a little bit more exotic.&lt;/li&gt;&lt;li&gt;Realtime Worlds: Seemed like a really nice place, they have something like 20 different nationalities which is cool, their tools sounded very varying and interesting, their games seems really interesting, and Dundee was awesome! Oh and I liked the people there, too!&lt;/li&gt;&lt;/ul&gt;It wasn't an easy choice - though it was mainly between Lionhead and RTW. In the end, why I picked RTW was perhaps my gut feeling more than anything else - I just really liked being in Dundee.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-2868489899014281350?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/2868489899014281350/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/good-bye-avalanche-studios-hello.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/2868489899014281350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/2868489899014281350'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/good-bye-avalanche-studios-hello.html' title='Good bye Avalanche Studios, Hello Realtime Worlds!'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-6995390766432394537</id><published>2009-08-02T00:59:00.004+02:00</published><updated>2009-11-24T19:42:20.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Starting a new game project</title><content type='html'>Inbetween playing Civ IV and Bionic Commando, and cleaning/tidying the hell out of my apartment, I've been thinking more and more about starting a new project. I've got various ideas in my head for what I want to do, and right now I'm settled on starting the implementation of one of my most favorite old ideas, what I call "&lt;span style="font-weight: bold;"&gt;Real&lt;/span&gt;" - basically a roleplaying game that emphasizes realism in the belief and hope that that will be fun (of course) by employing new tactical choices and actions that doesn't necessarily make sense in a 'traditional' RPG system.&lt;br /&gt;&lt;br /&gt;Anyways.&lt;br /&gt;&lt;br /&gt;The techs I'm going to use are these:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Python-Ogre&lt;/span&gt;, because it's the fastest way to get a 3d game up and running. Perhaps XNA can be matched in speed, but the power you get from Ogre is something you'd probably have to spend a lot of time implementing in C#.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Git&lt;/span&gt;, because it's the new hip thing and I wanna try it out. ;)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pylint&lt;/span&gt;. Well, I'm gonna try it anyways.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Eclipse &lt;/span&gt;with &lt;span style="font-weight: bold;"&gt;PyDev&lt;/span&gt;, because I don't think there's a better Python API right now.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Windows&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It's a fricking huge project so I'll have to try and implement one feature at a time, I guess.&lt;br /&gt;&lt;br /&gt;One of the most interesting parts about making games, in my opinion, is the "core architecture" which kind of binds all the parts together. In short, stuff like the game loop, game states and transitions, and how you make sure that the graphics module doesn't know shit about the physics engine, etc. After creating a lot of games I'm starting to get a hang of how I like to do it, but I always like trying new ways to see if I can find something that works better.&lt;br /&gt;&lt;br /&gt;Hopefully I will feel like writing more about that soon. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-6995390766432394537?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/6995390766432394537/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/starting-new-game-project.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6995390766432394537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6995390766432394537'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/08/starting-new-game-project.html' title='Starting a new game project'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-3977360246181214219</id><published>2009-06-14T12:49:00.003+02:00</published><updated>2009-11-24T19:42:20.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Candy Time and a possible explanation for crashes</title><content type='html'>I just read &lt;a href="http://blogs.msdn.com/shawnhar/archive/2009/06/12/soundeffect-changes-in-xna-game-studio-3-1.aspx"&gt;this entry&lt;/a&gt; on Shawn Hargreaves blog, and I think I know why &lt;a href="http://video.msn.com/video.aspx/?mkt=en-nz&amp;amp;vid=cb6fc5e0-a0ad-4cb3-a864-5dba4d3ecd6f&amp;amp;wa=wsignin1.0"&gt;Candy Time&lt;/a&gt; had problems with crashing every now and then.&lt;br /&gt;&lt;br /&gt;We'd spent a lot of time optimizing it using Microsoft's &lt;a href="http://en.wikipedia.org/wiki/CLR_Profiler"&gt;CLR Profiler&lt;/a&gt;. We managed to get the memory allocations during gameplay down *a lot*. I think in the end, the game allocated &lt; 500kb during one level, which isn't that bad I think.&lt;br /&gt;&lt;br /&gt;However, we still got crashes on the Xbox when we tried to play sounds.&lt;br /&gt;&lt;br /&gt;From the blog entry:&lt;br /&gt;&lt;blockquote&gt;There were two problems:  &lt;ul&gt;&lt;li&gt;Because the Play method did not know whether you were going to store the return value, it had to allocate a new SoundEffectInstance each time, so &lt;span style="font-weight: bold;"&gt;fire &amp;amp; forget sounds created garbage&lt;/span&gt;.    &lt;/li&gt;&lt;li&gt;The only way we could tell the difference between fire &amp;amp; forget vs. create &amp;amp; configure usage was by noticing if the garbage collector tried to reclaim a SoundEffectInstance that was still playing. But .NET garbage collection is not deterministic! This worked ok as long as GC occurred regularly,&lt;span style="font-weight: bold;"&gt; but the better optimized your game was, the less frequently GC would run&lt;/span&gt;, in which case fire &amp;amp; forget sounds might not be reclaimed often enough, so the system would run out of voices. &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;So, it seems CT might have crashed because we didn't allocate enough memory...? :D It would be interesting to rebuild CT with XNA Game Studio 3.1 and see if it really would fix the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-3977360246181214219?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/3977360246181214219/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/06/candy-time-and-possible-explanation-for.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/3977360246181214219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/3977360246181214219'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/06/candy-time-and-possible-explanation-for.html' title='Candy Time and a possible explanation for crashes'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-400421836167628838</id><published>2009-05-06T22:00:00.004+02:00</published><updated>2009-11-24T19:42:20.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Communicating with an C++ application from a web browser</title><content type='html'>Ok, here's my first post with some real code tips and tricks. :)&lt;br /&gt;&lt;br /&gt;A while back I was asked at work to make it easier for our designers to "connect" the errors in our export logs with the actual objects in our tree view in our world editor. Our first idea was to hash the internal paths of the objects (they look something like {GUID1}/{GUID2}/{GUID3} ), show that hash in the export log, and allow the designers to copy it and paste it in some dialog in the editor.&lt;br /&gt;&lt;br /&gt;Luckily, I got a better idea before I had time to start. If you've used Spotify, or played our game The Hunter, you might have seen and clicked on links that looks like &lt;a href="spotify:track:0IjAJpQ7gkXjgtTxqyJSfZ"&gt;spotify:track:0IjAJpQ7gkXjgtTxqyJSfZ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well, I thought. Why not make our errors into clickable links that will center the camera, inside the editor, on the erroneous object?&lt;br /&gt;&lt;br /&gt;Since I hadn't done anything like it before, I first &lt;a href="http://stackoverflow.com/questions/785598/how-to-send-a-link-to-an-application-like-spotify-does"&gt;asked a question&lt;/a&gt; on Stack Overflow. The answers I got weren't very specific but got me on the right track. Basically, there are two parts. Or three.&lt;br /&gt;&lt;br /&gt;First, the app needs to register itself in the registry, &lt;a href="http://msdn.microsoft.com/en-us/library/aa767914.aspx"&gt;like this&lt;/a&gt;. It took some googling to find out how to use the windows register functions, but they were pretty straightforward. By adding this to the registry, your application will launch when a link with your custom url protocol is clicked.&lt;br /&gt;&lt;br /&gt;Secondly, the app needs to detect that it's been started from a browser. Obviously quite trivial, just check the command line for "/uri" or however you chose to customize it.&lt;br /&gt;&lt;br /&gt;Third, you don't actually want to *start* your application - it should already be running! Instead, when you've detected that you got started from a hyperlink, you need to detect if another instance of the application is already running. After that, you need to pass the command line to it. Here's how I did it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;bool ShouldContinueStartEditor( const std::string&amp;amp; command_line )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    // Check if this instance was spawned from a web browser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    if ( command_line.find( "/uri" ) != std::string::npos )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        // Try to find other instance of JustEdit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        HWND wnd = FindWindow( "AV_MainFrame", NULL );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        if ( wnd )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            COPYDATASTRUCT cds;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            NEditorCopyData::SCommandLine data_to_copy;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            strncpy( data_to_copy.m_CommandLine, command_line.c_str(), sizeof(data_to_copy.m_CommandLine) - 2 );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            cds.dwData = NEditorCopyData::ECommandLine; // function identifier&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            cds.cbData = sizeof( data_to_copy );  // size of data&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            cds.lpData = &amp;amp;data_to_copy;           // data structure&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            SendMessage( wnd, WM_COPYDATA, NULL, (LPARAM) (LPVOID) &amp;amp;cds );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        return false;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return true;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;"AV_Mainframe" is the name of the hwnd. If you happen to be using WTL, you can declare it like this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DECLARE_FRAME_WND_CLASS("AV_MainFrame", IDR_MAINFRAME)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, in your window class, you need to handle the WM_COPYDATA message like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;MESSAGE_HANDLER(WM_COPYDATA, OnCopyData);&lt;br /&gt;LRESULT OnCopyData(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL&amp;amp; /*bHandled*/);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;LRESULT CMainFrame::OnCopyData(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL&amp;amp; /*bHandled*/)&lt;br /&gt;{&lt;br /&gt; PCOPYDATASTRUCT cds = (PCOPYDATASTRUCT) lParam;&lt;br /&gt; if ( cds-&gt;dwData == NEditorCopyData::ECommandLine )&lt;br /&gt; {&lt;br /&gt;  NEditorCopyData::SCommandLine* command_line = static_cast&lt;neditorcopydata::scommandline*&gt;( cds-&gt;lpData );&lt;br /&gt;&lt;br /&gt;  const char* internal_path = strstr( command_line-&gt;m_CommandLine, "/uri" );&lt;br /&gt;  if ( internal_path != NULL )&lt;br /&gt;  {&lt;br /&gt;   // Do your thang&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/neditorcopydata::scommandline*&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And that's pretty much all there's to it. Oh, this is what the copy data namespace looks like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;namespace NEditorCopyData&lt;br /&gt;{&lt;br /&gt; enum ECopyDataMessages&lt;br /&gt; {&lt;br /&gt;  ECommandLine = 0&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; struct SCommandLine&lt;br /&gt; {&lt;br /&gt;  char m_CommandLine[512];&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Hope someone is helped by this! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-400421836167628838?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/400421836167628838/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/05/communicating-with-c-application-from.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/400421836167628838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/400421836167628838'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/05/communicating-with-c-application-from.html' title='Communicating with an C++ application from a web browser'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-8491758013019536013</id><published>2009-04-21T22:37:00.002+02:00</published><updated>2009-04-21T22:52:37.866+02:00</updated><title type='text'>Conclusions of blogging so far...</title><content type='html'>Here's my thoughts on what I've thought about blogging since I started (like, ten days ago..)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I like writing. I used to write more when I was in school (pre-Chalmers), because, well, they make you. ;) But I always liked it. And I'm one of those who always write too long forum posts and emails. At least I used to be, but I'm getting a bit better at it I think.&lt;/li&gt;&lt;li&gt;Writing is good for me. Since I haven't written much except for instant messages, emails and code for a number of years, I've gotten a bit sucky at it. Seems I was much better at English in "high school" (we call it gymnasium in Sweden). This might be a good way to keep my writing skills and vocabulary up to speeed.&lt;/li&gt;&lt;li&gt;Writing about stuff I've given some thought to seems to make things a lot clearer for me. When I'm just throwing thoughts around in my head, it's harder to see the problems with them. This was most noticeable (for me) with my post on a dialogue system. Even before I was finished with it, I realized that the graph I'd drawn and the nodes I had in mind was lacking important stuff. So I'll probably write an update on that later on...&lt;/li&gt;&lt;li&gt;I doubt my blog is very interesting, so far. I mean, for an outsider. Oh well, I'm getting up to speed I guess. If blogging makes &lt;span style="font-weight: bold;"&gt;my&lt;/span&gt; life easier, then that'll probably be good enough for me.&lt;/li&gt;&lt;li&gt;So far, I've been writing stuff down off the top of my head. Perhaps the blog posts would be a better read if I thought them through a bit more first, like I'm sure Mr. Atwood does. Not sure that's how I wanna write though.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-8491758013019536013?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/8491758013019536013/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/conclusions-of-blogging-so-far.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/8491758013019536013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/8491758013019536013'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/conclusions-of-blogging-so-far.html' title='Conclusions of blogging so far...'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-6743357008921777055</id><published>2009-04-21T00:00:00.001+02:00</published><updated>2009-04-21T00:01:31.540+02:00</updated><title type='text'>Recording the development process of a game</title><content type='html'>Pretty neat! Maybe I should do this for PyWeek or the next Ludumdare.&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=HLFC40lIRA4&amp;amp;fmt=22&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-6743357008921777055?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/6743357008921777055/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/recording-development-process-of-game.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6743357008921777055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6743357008921777055'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/recording-development-process-of-game.html' title='Recording the development process of a game'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-6692096985269330301</id><published>2009-04-20T19:51:00.004+02:00</published><updated>2009-04-20T20:18:56.639+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ludum dare'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Run away little bouncies!</title><content type='html'>That's the title of the game I made for Ludumdare. The LD blogpost for it can be found &lt;a href="http://www.ludumdare.com/compo/2009/04/19/run-away-little-bouncies-is-completed/"&gt;here&lt;/a&gt;. I spent about 12 hours in total: 2 hours on Saturday, and then more or less constantly between 13 and 23 on Sunday.&lt;br /&gt;&lt;br /&gt;Twelve hours, for one person, to make one game. Pretty cool compared to AAA-games. I'm guessing JC2 will have had somewhere between 2000 and 4000 man months (very rough estimate). Let me whip out Python:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;&gt;&gt;&gt; 2000 * 25 * 8 / 12&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;33333&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;This means that we put in (at least) 30'000 times as much work into JC2, than I did to RALB. Is it 30000 times better? Well, it isn't really something you &lt;span style="font-weight: bold;"&gt;can&lt;/span&gt; compare, is it? :)&lt;br /&gt;&lt;br /&gt;But it does bring me to some kind of quick Post Mortem for RALB.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cocos2d&lt;/span&gt;&lt;br /&gt;Was it worth it, compared to going with pyglet? I was a bit skeptical at first, seing as how it is more of a framework (and less of a strict API) compared to pyglet. This is of course it's intention, it's just that I like to have control of my games' flow.&lt;br /&gt;&lt;br /&gt;And well, to be honest I did try to use as little of it as possible. I created a GameScene which I made sure got a call to it's update function each frame using a Repeat action - the only action I ended up using. From that update, I did all the calling of stuff myself, in the order I wanted to. Except for one little thing; my input class got events at the start of the frame it seems, before my update got called. And yes, "seems" is the correct word, because stuff like that is a bit harder to verify when you're out of the loop (pun intended).&lt;br /&gt;&lt;br /&gt;Still, I did like the scene transitions, they allowed me to take my game and create an intro scene and a gameover scene in probably just 30 minutes with some fun transition effect inbetween.&lt;br /&gt;&lt;br /&gt;I did some animation frames for some of the objects, unfortunately I didn't have the time to implement them in the game. Too bad, it would've prettified it a bit. :)&lt;br /&gt;&lt;br /&gt;For smaller games like this, I'd probably use cocos2d again. If I were to start a bigger Python project I might go for pyglet though. Or of course Python-Ogre, if it had to be 3d.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;pymunk&lt;/span&gt;&lt;br /&gt;My friend Victor's creation - a Python binding for Chipmunk worked pretty much right off the bat. Only caveat was that it didn't work unless you install it, but I'm guessing that'll be fixed as soon as he gets around to it.&lt;br /&gt;&lt;br /&gt;Victor came over on Sunday to work on his game while I worked on mine, that was a lot of fun. :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The result&lt;/span&gt;&lt;br /&gt;Well... To sum the game up: I guess that's what you get for 12 hours of work. The main problem, I think, with it, is that the controls are pretty sucky. I thought it would be a cool blend between physics puzzle, strategy, and action. It would've probably been better with being just one of them.&lt;br /&gt;&lt;br /&gt;I'm pretty happy anyways, it was my first Ludumdare and I got to try a new Python game library.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-6692096985269330301?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/6692096985269330301/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/run-away-little-bouncies.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6692096985269330301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6692096985269330301'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/run-away-little-bouncies.html' title='Run away little bouncies!'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-2380967866840514493</id><published>2009-04-18T12:12:00.002+02:00</published><updated>2009-04-18T12:17:31.674+02:00</updated><title type='text'>Ludumdare has started!</title><content type='html'>Forty eight hours of stressful game creation! Theme for this time is "Advancing wall of doom", and I've got an idea. Never entered this competition before, so we'll see how it goes.&lt;br /&gt;&lt;br /&gt;I've also never used cocos2d so that'll be interesting. I've started a little (gotta go to play other games in an hour) and so far it's... too early to tell. :) But it's not going as smoothly as one might've wished. Oh well.&lt;br /&gt;&lt;br /&gt;Anyways, my idea is to have basically an "asteroid field" on which there are a bunch of furry balls jumping up and down in anxiety, because there's a huge wall (of something) coming their way. So the player has to steer a space ship around, picking up objects that can be used to build bridges between the asteroids, allowing the furries to escape through a portal, or something.&lt;br /&gt;&lt;br /&gt;Current name: &lt;span style="font-weight: bold;"&gt;Run Away Little Bouncies&lt;/span&gt;. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-2380967866840514493?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/2380967866840514493/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/ludumdare-has-started.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/2380967866840514493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/2380967866840514493'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/ludumdare-has-started.html' title='Ludumdare has started!'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-24584044312148895</id><published>2009-04-15T22:29:00.000+02:00</published><updated>2009-04-15T22:30:38.176+02:00</updated><title type='text'>Unbelievable regexp.</title><content type='html'>Just saw this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;def is_prime(num):&lt;br /&gt;     return not re.match(r"^1?$|^(11+?)\1+$", "1" * num)&lt;/blockquote&gt;Wow. :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-24584044312148895?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/24584044312148895/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/unbelievable-regexp.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/24584044312148895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/24584044312148895'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/unbelievable-regexp.html' title='Unbelievable regexp.'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-504675230196967167</id><published>2009-04-13T12:57:00.008+02:00</published><updated>2009-04-13T13:30:07.231+02:00</updated><title type='text'>A dialogue graph for an adventure game.</title><content type='html'>Braid-author Jonathan Blow&lt;a href="http://braid-game.com/news/?p=383"&gt; asked other game developers&lt;/a&gt; for examples of how a dialogue system might be stored. Now, seems to have an RPG in mind, whereas we will probably go for a "standard" adventure game, which probably makes things easier for us.&lt;br /&gt;&lt;br /&gt;This is how I imagine we need to make ours. First, the requirements.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Each "conversation" should be a graph, not necessarily a-cyclic.&lt;/li&gt;&lt;li&gt;The "main" nodes is the lines which the characters will say, e.g. "Y halo thar!"&lt;/li&gt;&lt;li&gt;There need to be nodes for &lt;span style="font-weight: bold;"&gt;checking&lt;/span&gt; the value of some variable.&lt;/li&gt;&lt;li&gt;There need to be nodes for &lt;span style="font-weight: bold;"&gt;modifying&lt;/span&gt; the value of some variable.&lt;/li&gt;&lt;li&gt;There need to exist a sort of global database of variables.&lt;/li&gt;&lt;li&gt;The variables probably only need to be an integer, although it's possible that string variables could be useful (if not only for making it easier to script).&lt;/li&gt;&lt;li&gt;There need to be nodes for sending events to the game, to play sounds or play animations.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Now, about the database. It would probably be neat if it were hierarchical, in a way. Although it doesn't really need to be stored that way, but for scripting and having stuff like auto-completion in a script editor, it would probably be nice. Consider variables such as these:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;village.hasPCentered (0-1)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;village.blacksmith.stock.swords.count (0-*)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;player.numberOfTimes.hasAskedPrettyPleaseWithSugarOnTop( 0-*)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In an imagined editor, these would not need to be created before-hand in some xml file or whatever. Instead, the user can simply type in the name of new ones. To the designer, they're just strings, and how they are stored in the database isn't really of interest.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kCCrjEzBn2Q/SeMfIsUD0CI/AAAAAAAAAAc/uR2m8ue-Q7w/s1600-h/DialogueGraph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_kCCrjEzBn2Q/SeMfIsUD0CI/AAAAAAAAAAc/uR2m8ue-Q7w/s400/DialogueGraph.png" alt="" id="BLOGGER_PHOTO_ID_5324133418676768802" border="0" /&gt;&lt;/a&gt;That's pretty much what I imagine the editor might look like.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Green rectangular boxes are &lt;span style="font-weight: bold;"&gt;dialogue &lt;/span&gt;nodes. They contain a string, or possibly an id linking to a string. Whatever. It should probably also automatically connect to the appropriate talk sound to be played.&lt;/li&gt;&lt;li&gt;Orange, rotated squares are &lt;span style="font-weight: bold;"&gt;variable checking&lt;/span&gt; nodes. If the variables in D validate, then both C and E are presented as dialogue options for the player, otherwise just C is.&lt;/li&gt;&lt;li&gt;Blue boxes with rounded corners are &lt;span style="font-weight: bold;"&gt;variable modification&lt;/span&gt; nodes. Whether or not these should be the same as &lt;span style="font-weight: bold;"&gt;event sending&lt;/span&gt; nodes&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;, I'm not sure. For instance, multiple conversations may influence the same variable, and if you want a piece of music to be played when the variable reaches a value, you'd either have to add the same event node to all of those conversations. Not sure what the best solution is here.&lt;/li&gt;&lt;/ul&gt;An example for the above graph might be...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A: PC says "Hello", NPC says "Hello there, want to buy a banana?"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;B: PlayAnimation: "CheckWalletForMoney"&lt;/li&gt;&lt;li&gt;C: Nah, not really.&lt;/li&gt;&lt;li&gt;D: If ( player.inventory.money &lt;&gt;&lt;li&gt;E: Sorry, can't afford it.&lt;/li&gt;&lt;li&gt;F: NPC says: "Ok", PC says: Bye!"&lt;/li&gt;&lt;/ul&gt;Pretty bad and lame example, but.. Something along these should probably be enough for a classic adventure game. :) Oh, and there shouldn't be a line from B to F. Heh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-504675230196967167?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/504675230196967167/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/dialogue-graph-for-adventure-game.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/504675230196967167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/504675230196967167'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/dialogue-graph-for-adventure-game.html' title='A dialogue graph for an adventure game.'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kCCrjEzBn2Q/SeMfIsUD0CI/AAAAAAAAAAc/uR2m8ue-Q7w/s72-c/DialogueGraph.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-8715621101210223522</id><published>2009-04-12T12:33:00.003+02:00</published><updated>2009-04-12T13:09:39.125+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skepticism'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>A skeptic game?</title><content type='html'>I've thought about what it would be like to combine skepticism and game development, and pretty much came to the conclusion that trying to base a game play mechanic on skepticism just doesn't work. Well, it's certainly possible - I had some ideas, it's just that they sounded really boring to me.&lt;br /&gt;&lt;br /&gt;But I've been talking to some friends recently about making a point-n-click adventure game, and when I woke up this morning I had some ideas on how to add a skeptical touch to the story. Nothing about the game is defined yet, (I first heard of the game idea this week :) ), but it seems we might go with a space adventure for a couple of reasons - but basically because in space, everything goes. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So what I though was... if you're a skeptic you've probably heard the phrase "Keep an open mind, but not so open that your brain falls out", which is pretty funny. :) And I thought that, maybe one of the planets you visit have a species that used to have a culture that were as nonskeptic as possible, going for all kind of pseudo science, and that the finest virtue was to keep an "open mind". Until some bad doctor one came up with a treatment to "cure" skepticism (if that's even in their vocabulary ;) ). And the treatment was something along the lines of opening up their craniums, which led to their brains falling out, and &lt;span style="font-weight: bold;"&gt;ever since, they are now holding their brains in one of their hands.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From there, they could perhaps go two routes: One being that they understand that pseudo science and superstition is bullcrap, and they turn to skepticism and live happily efter after. Or, they go the exact opposite of where they started, and start preaching &lt;span style="font-weight: bold;"&gt;close mindedness&lt;/span&gt;. :) Exactly how that works, I don't know. :D But I kind of like option #2 better since it's less of shoving down a moral lesson of how skepticism is the best thing in the universe, and more of letting the player think for himself.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Second idea was that perhaps, after the PC wakes up in a spaceship with amnesia and looks out the window, he/she realizes that he/she's smack in the middle of a huge starfleet moving towards a planet. The player later finds out that they're an alien species that are 100% rational - which happens to be bad in this case because they've been told through generations and generations of the True Way Of Life And How To Achieve The Afterlife, and since they *know* that it is true, they roam around the universe "telling" other planets about it. Since this is more of a bash on religion than pseudo science, it's pretty much needs to be very tactfully written. ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyways, I'm not sure if either of these are good or funny ideas, but there are a lot of fun stuff and quotes you could use from the skeptical community so it might be a good idea to at least think about. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-8715621101210223522?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/8715621101210223522/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/skeptic-game.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/8715621101210223522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/8715621101210223522'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/skeptic-game.html' title='A skeptic game?'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-2096870316526412640</id><published>2009-04-10T20:37:00.004+02:00</published><updated>2009-04-10T21:08:07.229+02:00</updated><title type='text'>Another fifteen minutes of fame as a game developer :)</title><content type='html'>I was recently &lt;a href="http://www.fz.se/nyhetsarkiv/?id=32208"&gt;interviewed&lt;/a&gt; by the Swedish gaming site fz.se about what I think are good ways to get into the industry and becoming a game developer (this part focused on programmers). Me and three other programmers were interviewed, although separately so I didn't know what the others' responses would be. Turns out, we answered more or less the same things - unsurprisingly really. :) Before the interviews were posted, I was afraid I'd say something completely up the walls.&lt;br /&gt;&lt;br /&gt;Anyway, I thought I should clear up a couple of things and answer a comment or two.&lt;br /&gt;&lt;br /&gt;I agree with Petter's comment about going to a higher education teaches stuff that you might not otherwise learn yourself, for instance how a computer really works when it's actually shuffling the ones and zeroes around. Learning how to program on your own is completely doable, because you only really need to get started with a simple tutorial and then there's really nothing standing in the way for larger projects. Start with Hello world, advance to Tetris and a couple projects later, you can create puzzle games, strategy games, whatever suits your fancy. But to actually start learning about transistors, NAND gates and what-have-you takes both an additional set of interests, and (I would guess) better googling skills than "C++ tutorial". :)&lt;br /&gt;&lt;br /&gt;Another question had to do with what you need to get discovered, and then what you need to get hired. I think it came out pretty clearly, but just to reemphasize: You need work samples - a portfolio. When I got hired, I had perhaps.. six or seven game projects on my resumé, of varying quality and complexity.&lt;br /&gt;&lt;br /&gt;In a comment to the article, &lt;span style="font-weight: bold;"&gt;slartibastfast&lt;/span&gt; said that we'd all missed to say one important thing: that in order to get a job, you need &lt;span style="font-weight: bold;"&gt;balls&lt;/span&gt;. You can't just sit around all day working on stuff - at one point or another you just gotta apply for a frickin' job. :) I agree. When I got asked to come to an interview, I didn't hesitate for a second (which is kindof unlike me, I guess. :) ).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;dofilusåkaffe&lt;/span&gt; said:&lt;br /&gt;&lt;blockquote&gt;It'd be nice to have a job playing games all day. The ultimate job!&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;There are two parts to this comment. :) First is - most of us (and not just programmers) doesn't play the games we work on during work hours. Of course, if you've implemented a feature you're gonna be testing it to see that it works correctly. You'd be surprised at how little of the Just Cause 2 (which Avalanche Studios is working on) I've played. Of course, it's a big, huge f-ing game to begin with. :)&lt;br /&gt;The second part is, which &lt;span style="font-weight: bold;"&gt;Angellus&lt;/span&gt; already explained pretty well: there is such a position in the game industry and it's called Quality Assurance. And while I'm sure they like their job (I interact with them pretty much daily), don't forget that it actually &lt;span style="font-weight: bold;"&gt;is a job&lt;/span&gt;. ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A final note: My answer to what I guessed working in the industry almost sounded like I think it's "just ok". It's not. It kicks ass. There.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-2096870316526412640?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/2096870316526412640/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/another-fifteen-minutes-of-fame-as-game.html#comment-form' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/2096870316526412640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/2096870316526412640'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/another-fifteen-minutes-of-fame-as-game.html' title='Another fifteen minutes of fame as a game developer :)'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1997144270228310388.post-6636333707274973885</id><published>2009-04-08T21:42:00.000+02:00</published><updated>2009-04-08T21:42:07.311+02:00</updated><title type='text'>The purpose of this blog.</title><content type='html'>I think Jeff Vogel said it pretty well in his &lt;a href="http://jeff-vogel.blogspot.com/2009/03/welcome-to-jeffs-ego-pit.html"&gt;first blog post&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Hello. I am Jeff Vogel, and this is my blog. I have noticed, over the last few years, that many other successful Indie game writers have their own blogs. They tend to be full of interesting thoughts. I have lots of interesting thoughts too. About game design, about running a games business, about things I feel are funny, and so on. So here they are. I hope some people read them, and that this isn't a gigantic waste of time.&lt;/blockquote&gt;&lt;br /&gt;I don't own a game company of my own, but I work for one, and I've been making games with friends literally since I learned how to program. Sometimes I get ideas about games, game design, game programming, and other stuff regarding game development, so hopefully this will be a place for me to write stuff down. :)&lt;br /&gt;&lt;br /&gt;I'm also a skeptic. But I'm much more of an newbie and an amateur. On the other hand, it's a very entertaining hobby that always sparks thoughts and emotions. I'll be using this blog to rant about skeptic stuff too.&lt;br /&gt;&lt;br /&gt;Blogs with two different topics (in this case: games and skepticism) is rarely a good idea for the reader. Well, so fricking what? This is &lt;span style="font-weight: bold;"&gt;my&lt;/span&gt; blog. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1997144270228310388-6636333707274973885?l=anderselfgren.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://anderselfgren.blogspot.com/feeds/6636333707274973885/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/purpose-of-this-blog.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6636333707274973885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1997144270228310388/posts/default/6636333707274973885'/><link rel='alternate' type='text/html' href='http://anderselfgren.blogspot.com/2009/04/purpose-of-this-blog.html' title='The purpose of this blog.'/><author><name>Srekel</name><uri>http://www.blogger.com/profile/07324938919606033926</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
