
And now it is available on the App Store.
Finally, I've released an iPhone game. About time.
by noreply@blogger.com (Simon Wittber) at March 10, 2010 05:07 AM

by noreply@blogger.com (Simon Wittber) at March 10, 2010 05:07 AM
Anyone have recommendations for places to stay in Singapore?
Heidi and I will most likely be there for a few days in May (on our way back from Thailand). Looking for nice but not too fancy (what’s that? 3-4 stars) in a good location (walking distance or good access to public transport).
In related news… any recommendations for Beijing? (I might be there in June)
Update: I’m all caught up on Singaporean history thanks to this:
I couldn’t get to the annual Game Developers Conference (GDC) in San Francisco this year, so instead have to read about it.
In the last 24 hours, I’ve seen 3 huge announcements that directly relate to tools, platforms and technology that I use.
First, Unity Technology announced a new version of Unity3D with support for Xbox 360, Playstation 3 and Android coming soon. Next, Microsoft announce XNA 4.0, a significant upgrade to .NET based game framework. Finally, Sony announce that they are releasing PhyrEngine for the PSP!
Why do these announcements matter? Because I do contract work in Unity, original games for the Xbox 360 with XNA, and I’m currently building a technology “platform” to allow my games to run on the PSP/PS3 - so every platform/toolset I use is being upgraded.
So much craziness, I can’t keep up! And that’s just day one of a five day conference!!
by noreply@blogger.com (Simon Wittber) at March 09, 2010 08:17 AM
OMG, nearly a full month without a blog post. What the?? Why the blog silence?
Amongst other things…prototyping! I’ve been exploring a game idea by working on a simple, potentially throw-away prototype.
In bygone days, game developers would write game design documents to describe a game they wanted to build. Once the document was complete, they’d build the game. The problem is, not all game ideas are created equal, and you don’t usually find whether the game will be any good or not until the game is built. Over the last few years, as game development tools and technology have improved and gotten easier to quickly build games, it’s become more common to bypass the design document, and build a rough prototype of the game to test our the ideas at the core of the game.
And that’s what I’ve been doing. I started with a small idea about a platformy action game, and I’m exploring that idea to see if their is potential for a full game.
Oh, and I entered Star Hammer Tactics in the 2010 DreamBuildPlay competition. It’s one of about 155 entries. Wow.
My boyfriend and I went over to the Coastal Park Motocross Track to watch a friend race and take some photos. This was my first attempt at sports photography and boy, was it fun! I still have quite a lot of practice to do before I’m really happy with my shots, but I think I did ok for a first attempt. If anyone has any feedback or suggestions, please comment.
Volunteered to do a live painting at Coopers Sunday Green today. Was pretty fun, and motivation to solidly paint for a few hours. This piece went from concept to ‘completion’ (although I need to fix it up in parts – especially the hands) in about 4 or 5 hours, including a digital mockup.
Just over a week ago I was approached by Brad from Revert Entertainment, management for local epic virtuoso post-everything proggers Tangled Thoughts Of Leaving, to do a gig poster for their first show of 2010. I was really super super busy this week but I really dig what the band does and on the agreement of having creative freedom how could I turn it down
.
NOTE: You can download TTOL’s releases for free here and here.
The band had an image of an astronaut fighting an octopus in space, and gave me free reign to reinterpret that, and so this is what I’ve ended up with!: 
And here’s the process:
This is an alternate colouring (pink instead of red) – I really liked it colour-wise as well as the idea of all the bodily fluids being smooshed into a pinkish goop, rather than just blood.. client didn’t like the pink so brought back in the red:
Made a bit of progress of the Earth Deity artwork. It’s deviating from the digital mockup a bit. I think I need more mark-making utensils…
I’m working on product branding that will require a series of emotional caricatures.
To be honest, I’ve never really been very good at caricature. I find it difficult to capture all the subtle nuances of the subject without just adding a lot of detail. So my drawings end up looking alright… but nothing like the people I’m trying to capture.
Fortunately, my work next week mostly just requires stylised cartoon imagery. So it doesn’t really demand that the image is identifiable as a specific person. Also, it’s all going to be lightly stylised only (no heavy caricatures) meaning that it’s a little more like stuff I’m a bit better at.
Anyhow, here are some practise sketches that I did yesterday and today.
It’s me!… kinda:
I emphasised the wrong visual cues in this one: my face isn’t really super thin, and my hair is big in a different way. It’s also the wrong sort of smile (“huh?” rather than “hey”). Gah… moving on… here’s the work-in-progress if anyone is interested. I find it easiest to sketch different colours for different surfaces (eg. hair) and then break it out into layers later on:
After deciding that I’m probably too close to me to be objective in drawing myself, I went through some old photos looking for other interesting faces. I decided upon this photo of Tone doing the “Blue Steel” look (from Zoolander) at iParty 2.0. I tried for fewer, cleaner lines, and basic blocky shading:
Then I added in some colour:
Better I think… but I’m still not really feeling the emotion. I can probably add some spin lines or other iconographic elements in the background, but I want to get as much as I can from just the main figure…
I guess that I’ll just have to keep practising!
Went sketching at the Museum of WA today. Started the day with a great local artist, Jenna Downing, in the ‘regular animal’ section. I’m sure she’ll post her sketches up soon, and they’re epicgood. She’s much better with a pencil and pad than I am – she actually renders details! ha, I was busy trying to cross-reference with my sweet little animal anatomy book that arrived yesterday. It’s not as lame as it looks on the cover though, it actually has bone/muscle structures and comparisons.
Anyway, I continued drawing after lunch with JessieBessieSipes in the Dinosaurs exhibit. This was a little tougher since they were all animatronic and moved around. Especially the triceratops – That thing looked like it desparately needed a bathroom.
Heidi and I signed up for six month memberships down at the Albany Leisure and Aquatic Centre (our nearest sports centre).
We went to a few classes together including KiMAX by RADICAL FITNESS. I hadn’t been to gym classes before, so it was pretty interesting. Check out this video to get an idea of what I’m talking about:
It’s garish in the same way that almost all sports equipment (especially running shoes and cycling wear) is garish, but it’s also functional. I was pretty tired at the end and a little sore the next day.
I finally had my fitness appraisal just yesterday (since moving to Albany, I seem to spend a lot of time back in Perth) and I’ll receive my personalised fitness regime next Monday.
I mentioned that I don’t want to bulk up, so Terri (fitness instructor) is putting together something with a lot of aerobic “body weight” training – which means that I won’t really be using much of the equipment – which makes me wonder why I’m going to a gym.
Anyhow, I noted rock climbing and parkour (or in my particular case, very amateur gymnastics) as things that I would like to get better at. I didn’t mention anything about weight loss since she was pretty proactive in saying that it’s not required (I’m on around 15% body fat apparently).
I also didn’t mention the term “totally ripped”… maybe I should have…





by andyhawkins@ozemail.com.au (Andy Hawkins) at March 02, 2010 11:29 PM
Ideal position: -0.897 -0.443C source code follows:
Mesaured position: -0.890 -0.421 [diff:0.029]
AlphaBeta position: -0.898 -0.442 [diff:0.001]
Total error if using raw measured: 1.522438
Total error if using a-b filter: 1.059981
Reduction in error: 69%
/** A simple alpha-beta filter example by Adrian Boeing
www.adrianboeing.com
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
float alpha; //alpha value (effects x, eg pos)
float beta; //beta value (effects v, eg vel)
float xk_1; //current x-estimate
float vk_1; //current v-estimate
} AlphaBeta;
void InitializeAlphaBeta(float x_measured, float alpha, float beta, AlphaBeta* pab) {
pab->xk_1 = x_measured;
pab->vk_1 = 0;
pab->alpha = alpha;
pab->beta = beta;
}
void AlphaBetaFilter(float x_measured, float dt, AlphaBeta* pab) {
float xk_1 = pab->xk_1;
float vk_1 = pab->vk_1;
float alpha = pab->alpha;
float beta = pab->beta;
float xk; //current system state (ie: position)
float vk; //derivative of system state (ie: velocity)
float rk; //residual error
//update our (estimated) state 'x' from the system (ie pos = pos + vel (last).dt)
xk = xk_1 + dt * vk_1;
//update (estimated) velocity
vk = vk_1;
//what is our residual error (mesured - estimated)
rk = x_measured - xk;
//update our estimates given the residual error.
xk = xk + alpha * rk;
vk = vk + beta/dt * rk;
//finished!
//now all our "currents" become our "olds" for next time
pab->vk_1 = vk;
pab->xk_1 = xk;
}
double frand() {
return 2*((rand()/(double)RAND_MAX) - 0.5);
}
int main(int argc, char *argv[]) {
AlphaBeta ab_x;
AlphaBeta ab_y;
double t; //time
double x,y; //ideal x-y coordinates
double xm,ym; //measured x-y coordinates
double xnoise = 0; //noise we are inserting into our system
double ynoise = 0;
double m_error = 0; //total error (measured vs ideal)
double ab_error = 0; //total error (ab filter vs ideal)
#define DT 0.1
//intialize the AB filters
InitializeAlphaBeta(1,0.85,0.001,&ab_x); //x position
InitializeAlphaBeta(0,1.27,0.009,&ab_y); //y position
srand(0);
for (t = 0; t < 4; t+=DT) {
//our 'true' position (A circle)
x = cos(t);
y = sin(t);
//update our simulated noise & drift
xnoise += frand()*0.01;
ynoise += frand()*0.01;
//our 'measured' position (has some noise)
xm = x + xnoise;
ym = y + ynoise;
//our 'filtered' position (removes some noise)
AlphaBetaFilter(xm,DT, &ab_x);
AlphaBetaFilter(ym,DT, &ab_y);
printf("Ideal position: %6.3f %6.3f\n",x,y);
printf("Mesaured position: %6.3f %6.3f [diff:%.3f]\n",xm,ym,fabs(x-xm) + fabs(y-ym));
printf("AlphaBeta position: %6.3f %6.3f [diff:%.3f]\n",ab_x.xk_1,ab_y.xk_1,fabs(x-ab_x.xk_1) + fabs(y-ab_y.xk_1));
//update error sum (for statistics only)
m_error += fabs(x-xm) + fabs(y-ym);
ab_error += fabs(x-ab_x.xk_1) + fabs(y-ab_y.xk_1);
}
printf("Total error if using raw measured: %f\n",m_error);
printf("Total error if using a-b filter: %f\n",ab_error);
printf("Reduction in error: %d%% \n",(int)((ab_error/m_error)*100));
return 0;
}
Rich (aka. Deceptikong) made this fantasitc timelapse video of last Saturday’s Sundowner (click through to the original for high-res):
Let’sMakeGames.org Sundowner from Deceptikong on Vimeo.
Thanks to everyone for coming and thanks Rich for the video (it makes me feel all warm and fuzzy)! Look out for our next event in a few months time!
More oil painting action. Started the Earth Deity painting on an acrylic underpaint. Blocking in some shape out in my studio (backyard).
And more work on the Psychopomp.
I didn’t mean to spray drips on the left side, or by the hand… Had too much turps.
It’s getting close to ‘done’ though. The skin parts and hair are done, just clothing, mothbits and the orbs. Might add some graphic kinda linework, too.
Been pretty busy lately, but just whipped up a digital sketch for sketching’s sake.
Got my grant application into DCA on Friday. I’m pretty much only eligible for the Development grant. I feel like I’m a great candidate though, pursuing this ‘new’ digital art-form.
I’ve looked into other funding bodies and there’s not a whole lot of support available to artists after training. One key factor is the course I’ve applied isn’t accredited (no degree or formal recognition etc) – it’s completely practical and very specialised, which is exactly what I need!
There’s also a Skills and Development grant I’m eligible for through the Australia Council. I believe that’s an annual grant though (due August), and for activity starting next year. Bleh. This course wasn’t even announced when the last round of funding was due, making the lengthy grant turnaround highly inconvenient.
We’ve finally had our Internet connection upgraded from 512kbps to around 1-2mpbs. It’s still not that much, but the speed increase is noticeable. Hopefully this means that I will be able to do some web development work from home in Albany!
In other news, I bought Heavy Rain while in Perth (thanks Jason for the $74 tip). It’s an interesting take on interactive drama with clear heritage in adventure games. Unfortunately it’s incredibly buggy so far. Seriously, how did this thing make it past QA?!
Some "Lego" I bought in Hong Kong at a street market recently. Space Lego + cheapfakes + Hong Kong is pretty much my personal nexus of awesome.
You can buy this stuff on ebay very cheaply too, and it's compatible with the real bricks. I can't really tell much of a difference in quality. The idea of Lego is too good to be monopolised - I wonder if anyone has tried 3d printing lego parts?
I am really looking forward to when those "fake" Android phones & tablets start to perform better (and cheaper) than the official stuff. The smart thing about Google's Android strategy is that they benefit from that kind of Wild East tech cowboyism. It's like if Windows 95 had have been Free Software instead of pirated globally.
Last night the boyfriend swiveled around in his office chair and said: “I think we should find a hobby that we can do together.”
What a great idea! Don’t get me wrong – we like a lot of the same things. We both like computers and games, and we both frequent Gizmodo and Engadget at least twice a day (I do Gizmodo, he does Engadget). But we just don’t have a hobby that we can call “ours”.
So we started thinking. I suggested starting a website or blog together, but he said our ideas about these things are so different that it wouldn’t work. He says he likes to keep things simple and I like to go over the top and sink my teeth into a big project. This is true. I suggested that we could start building things together, like bicycles…anything. But he noted that when he was fixing up his motorcycle, I helped but didn’t really get into it with a passion and that I don’t have a mechanic’s mind. He’s probably right.
Our hobby had to be fun, but not something that required a lot of time as we both work and he only has one day off per week between his job and uni. We both liked the idea of doing photography together, but he said that he can’t afford to buy a camera right now, although it’s an option for later.
Then I suggested geocaching. I’ve never gone geocaching before, but it has always sounded fun and we talked about it briefly a few months ago.
“That’s a really good idea!” He said. “That would be fun.”
I filled him in on some of the geocaching basics, or what I’ve read about it, anyway. We got so excited about trying geocaching together that we decided to go right that minute. It was somewhere around 10pm. I downloaded the free Geocaching Intro app for my iPhone and it showed us three nearby geocaches, each about 1.5 miles away. So off we went in his car, hunting for our first cache. Unfortunately as you can guess, as amateurs going out in the dark to find a micro cache, we didn’t actually find anything. But we got so close to two of the caches! The first was in a bit of bushland near a park in a neighborhood. Unfortunately the compass was pointing us straight into the bush, which was surrounded by what looked like an electric fence. Not only did we stand to get zapped, but it was so dark that we couldn’t actually see a thing. We decided to come back to this cache this weekend, in the daylight this time, and hop the fence.
We then moved on to another cache nearby. The description said that this geocache was tiny. The map led us to a tiny, cozy looking neighborhood with a small park. We got more and more excited as we followed the compass – 50 feet, 38, 21, 10, 7, 3, 0! I waved the boyfriend over – “It’s here, it’s somewhere around here! We’re right on top of it!”
We scoured that spot and everything around it for what must have been 15 minutes. I shone my flashlight app into the trees, we looked under the wheelie bin and rummaged through the bushes. To an onlooker we probably would have looked like two crazy people having a mental breakdown at a park.
Eventually we gave up and decided that trying geocaching for the first time in the middle of the night probably wasn’t a good idea. We aren’t quitting, though! We’ll just stick to looking for treasure during the daytime in the future.
Three Google executives have been convicted of invasion of privacy for a video they didn’t record, appear in, or review. The video showed a group of kids bullying a child with Down Syndrome. Of course any sort of bullying is a horrible thing that should never go on, but blaming three individuals from a search engine who had nothing to do with the video is ridiculous. There are so many videos out there indexed by Google that can be considered inappropriate and in many cases they are sickening, but expecting a search engine to go through each video one by one is ludicrous and wrong. There are many opinions which I would consider sickening being expressed in text out there, but search engine executives aren’t being sued over them. Instead of finding a scapegoat (or three) who had nothing to do with an act to blame, prosecutors should focus to bringing the actual bullies to justice and getting the victim help. You see photos, stories, and videos of dead people, wars, fighting, abuse, embarrassing incidents, and so much more out there. A search engine is meant to be a source of information and a tool to gather data. Forcing search engines to remove content depicting inappropriate acts is like sweeping these acts under the carpet and punishing 3 executives of a search engine for something they had nothing to do with is akin to just wanting to find someone, anyone, to take the blame.
Sydney are claiming that they’re hosting the first Global Game Jam Event in Australia.Just because you can get sweet usec timestamps on Ubuntu and Vista doesn’t mean the same library will get any decent resolution times out of windows XP.
The default ruby mysql library doesn’t deal properly with > 32bit database ids.
If you want to use > 32bit database primary id’s. Sleep on it. You might not really want to (especially if you get hit by the above point -_-;)
by Fiend (noreply@blogger.com) at February 24, 2010 12:24 AM
A psychopomp guides newly deceased souls to the afterlife, and is the subject of my first (and largest) contribution to the Mythology exhibition.
I’ve decided to give oil painting a crack, and just spent the night painting with Richard Healy, who’s provided some useful input on the process of oil painting. He’s pretty great with the oils.
Anyway, here’s what I’ve been working on today. It’s something big like 48″x48″, and still a work-in-progress, but thus far I’m quite proud of my second ever oil painting! My first was a 6″x8″ picture of an apple. I think I was 9 years old at the time.
As the sun sets on a significant period for the Perth game development community, Let’s Make Games has decided to run a sundowner so that everyone can catch up over a drink and a BBQ.
Details:
Here’s a handy Google Map (click the markers for more information):
View BBQs at Matilda Bay in a larger map
We apologise for the late notice compared to our previous events (a number of us have been distracted by recent matters), but we hope to see you there!
Update: Facebook event page.
Just some quick comments and photos.
It’s been great spending time down here with Heidi (and my sister who is visiting). I have a feeling that these six months will pass very quickly.
What the heck is that? A whale fetus?!:
And then she said “I’m not beached, I’m just sunbathing!” (har har):
Koala’s are really cute! Or it is a Tasmanian Devil?:
It may not look like it, but we’re pretty high up (something like 40m):
The tree-top walk is less “Crouching Tiger, Hidden Dragon” than I imagined:
My power-up rage obviously charred the inside of this tree:
Heidi managed to run through this tree, but it was a bit of a stretch (har har):
My sister tried diving through it, but she got stuck:
Note: I love cheesy photos. Look forward to more of them!

by noreply@blogger.com (Simon Wittber) at February 22, 2010 08:37 AM
I realise now one improvement or change I could have made to my thesis.
It isn’t actually important that the player character can’t speak, so much as it is important that the tragic hero doesn’t listen. That is hubris- pride that they know what is right, that they will ignore any warning that anyone will give them. They believe they are above fate (or karma, or whatever law of balance etc you want to think about).
Whoops, I could have ended up with a Creative Component I actually thought was any good, and recieved better marks overall
Ellenby noreply@blogger.com (Simon Wittber) at February 22, 2010 03:05 AM
I remember when I took a unit on writing for film, how we were told, “Don’t tell me, show me.”
Well, I think this needs to be expanded upon for the sake of differentiating between films (or tv shows) and games.
Books: Tell me.
Film: Show me.
Games: Let me find out for myself.
It may seem obvious, but when this is properly understood, will we really have any need for epic cut-scenes that do anything more than literally set the scene? I’m not talking about getting rid of all cut-scenes: for example, the intro for Left 4 Dead is highly effective at showing a variety of scenarios and special infected, while hinting at ways of dealing with them. In that sense, “show me” has superceded “tell me,” while remaining short and setting the scene. We do need some sort of introduction, some sort of illustration of how to play, but first and foremost, we should encourage players to feel more involved than watching a film.
Ellen4x - y + z = 7Then we can re-write them as:
4x - 8y + z =-21
-2x + y + 5z = 15


#include <stdio.h>Producing this output:
int main() {
//a sparse way of representing the equations
float eq[3][4];
eq[0][0] = 7/4.0; eq[0][1] = 0; eq[0][2] = 1/4.0; eq[0][3]= -1/4.0;
eq[1][0] = 21/8.0; eq[1][1] = 4/8.0; eq[1][2] = 0; eq[1][3]= 1/8.0;
eq[2][0] = 15/5.0; eq[2][1] = 2/5.0; eq[2][2] = -1/5.0; eq[2][3]= 0;
float x,y,z;
x=1;y=1;z=2; //initial guess
//10 iterations of gauss-seidel
for (int i=0;i < 10;i++) {
x = eq[0][0] + eq[0][2]*y + eq[0][3]*z;
y = eq[1][0] + eq[1][1]*x + eq[1][3]*z;
z = eq[2][0] + eq[2][1]*x + eq[2][2]*y;
printf("%f %f %f\n",x,y,z);
}
return 0;
}
1.500000 3.625000 2.875000
1.937500 3.953125 2.984375
1.992188 3.994141 2.998047
1.999023 3.999268 2.999756
1.999878 3.999908 2.999969
1.999985 3.999989 2.999996
1.999998 3.999999 3.000000
2.000000 4.000000 3.000000
2.000000 4.000000 3.000000
2.000000 4.000000 3.000000
by Adrian (noreply@blogger.com) at February 19, 2010 05:58 PM
#include <math.h>
#include <stdio.h>
#include <saturn.h> //include the saturn profiler
double func1(double x) { //do some maths
return sin(x)*cos(x);
}
double func2(double x) { //do some more maths
return pow(x,3);
}
int main() {
double x=0;
double z=0;
startSaturn(); //being profiling
for (x=0;x<100;x+=0.01) {
z+=func1(x)+func2(x)*tan(x);
}
stopSaturn(); //end profiling
printf("z:%f\n",z); //make sure compiler doesn't throw our computations away
return 0;
}
g++ x.c -finstrument-functions -lSaturn -m32 -O2
Undefined symbols: ___cyg_profile_func_enterThis comes from the -finstrument-functions option : it requires a special hook for each function - this is provided by saturn, so you must link with it.
ld: warning: in /usr/lib/libSaturn.dylib, file is not of required architectureAgain, either you forgot -lSaturn, or you have remembered it, but are using a 64 bit OS/chip. Specify '-m32' to force 32bit mode.
Undefined symbols: _startSaturn
by Adrian (noreply@blogger.com) at February 19, 2010 05:55 PM
Reshaped the deity, added a few plants and cattle for a bit of scale. Will push the depth so the deity looks like it’s just coming in from the distance, exaggerating the scale.
AB = B – A
tFirst = 0
tLast = 0
for all planes:
denom = N dot AB
dist = d – N dot A
t = dist/denom
if (denom>0 )
if (t>tFirst) tFirst = t;
else
if (t
if (tFirst>tLast)
No Intersection
by Adrian (noreply@blogger.com) at February 18, 2010 03:55 PM
If we had paid the employees, there was no more money for operations. - Marty Brickey
Mr Brickey said he had personally invested $8 million in the company, as part of about $30 million in capital required to launch and maintain the Interzone business for the past four years.
After being directed to your article I felt it was necessary to offer some corrections... IZ has not received millions in funding.
In March 2007, Interzone received $500,000 in state government funds as part of a three-year deal announced by the then industry and enterprise minister, Francis Logan.
But Mr Brickey said this had not been paid in full, claiming to be owed more than $120,000.
However, after what’s occurred during the past 12 months, he said he would be happy to never return to WA.
"Eight of our major investors are already independently retaining council (sic) in Perth and are reading (sic) to strike hard and fast at anyone committing tortuous (sic) interference, slander, or liable (sic) against the company"
zaphodity
February 16, 2010 at 10:36 PM
If I were you guys I wouldn’t be sitting around posting poison comments.. I’d be having a serious round table talkies about how we were going to put Marty’s balls well and truly through the wringer.
Insider
February 17, 2010 at 1:34 AM
Zap, you might be in for a bit of a surprise on whose balls are going to be put through the ringer. You all want your day in court and i can guarantee your going to get it.
by noreply@blogger.com (Simon Wittber) at February 18, 2010 10:47 AM
I’ve been floating around word of my upcoming Mythology group exhibition. It’s scheduled to open on 17th April but I haven’t made any promo material yet. I want to produce a series of reinterpretations. As such, I’ll be depicting mythological deities common across many cultures in a more contemporary context.
Here’s something I’m working on:
This is just a thumbnail.
Also I may revert the earth deity to look more like I’d originally intended:
A bit less humanoid and more disjointed and cumbersome.
import random
def to_be_or_not_to_be():
return random.random() 0.5
by noreply@blogger.com (Simon Wittber) at February 18, 2010 01:58 AM
#define wxUSE_GLCANVAS 1
source: C:/OpenCV2.0. Press Configure a few times and generate the solution files.
bin: C:/OpenCV2.0

source: C:/lib/MRPT/mrpt-0.8.0
binaries: C:/lib/MRPT/mrpt-0.8.0/makefiles/MSVC9
by Adrian (noreply@blogger.com) at February 17, 2010 04:04 PM
The other night I got my portfolio submission into The Art Department, a new practical course offering the top tier of arts education in the digital realm.
There’s a new page up if you’d like to see what I submitted. It’s mostly things on my portfolio website, plus a bunch of drawings.
Anyway… If accepted I’ll be out of here come June. I’m a little daunted by living costs in San Fran though. My budget thus far contains scary numbers. ha :S
Last week was full of ups and downs in the Black Lab.
On the not so good side of the ledger, I had to pull Star Hammer Tactics out of peer review. I discovered a problem with one of the single player scenarios near the start of the game. It wasn’t a crash bug or anything nasty, just some data was missing that made the scenario almost impossible to beat. I figured that would possibly lead to bad reviews, so decided to take the game out of review and fix the problem. Although it was a 10 minute fix, there is a rule with the XNA Creator Clubs that games pulled from peer review (whether by the author, or as a result of a failure) cannot be resubmitted for 7 days. Therefore, I’ve had to wait around until this week before I can resubmit.
The time has been put to good use though! I’ve been making some excellent progress on building a game engine for the PSP. I can’t really go into much detail about it at this stage. NDA’s and all that. But I will say that it’s been great fun, and it’s interesting to have to program so “close to the metal” again - just like old times!
Lesson learnt pulling Star Hammer from peer review : Do not underestimate the value of QA (Quality Assurance). I realized that I need to expand my thinking about what “job roles” are important in building a game. My core skill is as a programmer, so obviously I understand the value of programming. I think of art and sound as being important - pretty obvious really, since a game is experienced by vision and sound. Also, there is an important role for marketing and promotion (if it’s a commercial release). This starts before the game is finished, but goes up a few gears when the game is finished. Although I’ve always been very aware of the need for QA, it never really registered how important it is. Developers can get too close to their creations to see problems, or changes to a system in the game can have flow-on effects in other parts of the game. A few years ago, Puzzle Quest on the PSP was released with a bug that caused a bit of angst amongst fans. If people are paying for a game, I think it’s fair to expect it to work and be playable to the end! So, note to self, need to work out a better solution for regular playtesting.
Finally, on a personal note, it was sad to see the implosion of Interzone Games Perth Studio. I have a number of friends who have worked, or until last week, did still work at that studio. I hope it all works out.
static EventHandlerUPP gQuitEventHandlerUPP; // -> QuitEventHandler
static OSStatus QuitEventHandler(EventHandlerCallRef inHandlerCallRef,
EventRef inEvent, void *inUserData)
{
OSStatus err;
err = CallNextEventHandler(inHandlerCallRef, inEvent);
if (err == noErr) {
*((Boolean *) inUserData) = true;
}
return err;
}
static OSStatus EventLoopEventHandler(EventHandlerCallRef inHandlerCallRef,
EventRef inEvent, void* inUserData)
{
OSStatus err;
OSStatus junk;
EventHandlerRef installedHandler;
EventTargetRef theTarget;
EventRef theEvent;
Boolean quitNow;
static const EventTypeSpec eventSpec = {kEventClassApplication, kEventAppQuit};
quitNow = false;
// Install our override on the kEventClassApplication, kEventAppQuit event.
err = InstallEventHandler(GetApplicationEventTarget(), gQuitEventHandlerUPP,
1, &eventSpec, &quitNow, &installedHandler);
if (err == noErr) {
// Run our event loop until quitNow is set.
theTarget = GetEventDispatcherTarget();
do {
err = ReceiveNextEvent(0, NULL, kEventDurationNoWait,
true, &theEvent);
if (err == noErr) {
SendEventToEventTarget(theEvent, theTarget);
ReleaseEvent(theEvent);
}
/// Run application code
RunOurApplicationCodeHere();
} while ( ! quitNow );
junk = RemoveEventHandler(installedHandler);
}
return err;
}
static void RunCustomApplicationEventLoop()
{
static const EventTypeSpec eventSpec = {'KWIN', 'KWIN' };
OSStatus err;
OSStatus junk;
EventTargetRef appTarget;
EventHandlerRef installedHandler;
EventRef dummyEvent;
dummyEvent = nil;
err = noErr;
if (gEventLoopEventHandlerUPP == nil) {
gEventLoopEventHandlerUPP = NewEventHandlerUPP(EventLoopEventHandler);
}
if (gQuitEventHandlerUPP == nil) {
gQuitEventHandlerUPP = NewEventHandlerUPP(QuitEventHandler);
}
if (gEventLoopEventHandlerUPP == nil || gQuitEventHandlerUPP == nil) {
err = memFullErr;
}
if (err == noErr) {
err = InstallEventHandler(GetApplicationEventTarget(), gEventLoopEventHandlerUPP,
1, &eventSpec, nil, &installedHandler);
if (err == noErr) {
err = MacCreateEvent(nil, 'KWIN', 'KWIN', GetCurrentEventTime(),
kEventAttributeNone, &dummyEvent);
if (err == noErr) {
err = PostEventToQueue(GetMainEventQueue(), dummyEvent,
kEventPriorityHigh);
}
if (err == noErr) {
RunApplicationEventLoop();
}
junk = RemoveEventHandler(installedHandler);
}
}
if (dummyEvent != nil) {
ReleaseEvent(dummyEvent);
}
}
by montdidier (noreply@blogger.com) at February 14, 2010 05:42 PM
~2 months ago I had to suspend my position at Interzone Games due to unpaid superannuation and shaky payroll. This week it all came crumbling down…
A growing collection of quotes and links about Interzone Games, Big Collision Games, Michael Turner, Marty Brickey and Greg Chadwell.
The summary as I understand it:
This week, Michael Turner from the US office, came to Australia to take the intellectual property for the game. The game would then be finished by another company in the US.
This is while the company has around $1.6 million of Australian debt which includes unpaid Australian business tax, unpaid payroll tax, unpaid employee wages and entitlements and unpaid employee superannuation.
When Mike was met with questions as to how these debts will be resolved, he left the premises. He then came back that night after dark and changed the locks of the building. He barred employees from their workplace (personal belongings still inside).
This was met with peaceful protest and many questions that went unanswered. Then the media were contacted and the police were called by both parties, etc etc.
Most notable was the climax yesterday where employees were ordered off their own workplace by a spokesperson of the Department of Commerce?!
The link above has many links to news reports please check em out if only to bump up exposure ![]()
It was quite surreal seeing it laid out on the ABC News last night. :/
Lots of em!
Was painting up this environment concept with the intention of making it folio-worthy, but no. I just couldn’t get past how cliché it is, so it shall remain as yet another speedpaint. I feel the composition, lighting and narrative is pretty good though. I wanted to indicate something had escaped, but not what.
adduser (name)And perhaps add the user to admin group:
sudo usermod -a -G admin (name)Then you need to make sure gcc, g++ have been installed, and the system is up to date. Having wget and a browser are always handy too. With ubuntu we can use apt:
sudo apt-get updateNext, we need to ensure we have our linux header files. Find out your linux version:
sudo apt-get install lynx
sudo apt-get install gcc
sudo apt-get install g++
uname -rAnd install the linux headers, eg:
sudo apt-get install linux-headers-$(uname -r)Now we need a symbolic link to this for the CAN driver to compile.
/usr/src/linux-headers-2.6.31-14-generic-pae/include/linux/version.hSo you need to make a new symbolic link there:
cd /usr/src
sudo ln -s linux-headers-2.6.31-14-generic-pae linux
cd ~/Then extract:
wget http://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver.6.15.tar.gz
tar -xvf peak-linux-driver.6.15.tar.gzNow we are ready to compile! (and install the libraries)
cd peak-linux-driver-6.15
make cleanNow we can load the driver (if it isn't already):
make NET=NO
sudo make install
cd driverAnd we are all done!
sudo /sbin/modprobe pcan
cat /proc/pcan
cat /dev/pcan0
cat /dev/pcan1
console1: cat /dev/pcan32console1 will receive:
console2: echo "m s 0x111 2 0x12 0x34">/dev/pcan0
m s 0x00000111 2 0x12 0x34 310146 619
by Adrian (noreply@blogger.com) at February 12, 2010 09:16 AM
using UnityEngine;
using System.Collections;
public class SpatialHash
{
private Hashtable idx;
private int cellSize;
public SpatialHash(int cellSize) {
this.cellSize = cellSize;
this.idx = new Hashtable();
}
public int Count {
get { return idx.Count; }
}
public ICollection Cells {
get { return idx.Keys; }
}
public void Insert(Vector3 v, object obj) {
ArrayList cell;
foreach(string key in Keys(v)) {
if(idx.Contains(key))
cell = (ArrayList)idx[key];
else {
cell = new ArrayList();
idx.Add(key, cell);
}
if(!cell.Contains(obj))
cell.Add(obj);
}
}
public ArrayList Query(Vector3 v) {
string key = Key(v);
if(idx.Contains(key))
return (ArrayList)idx[key];
return new ArrayList();
}
private ArrayList Keys(Vector3 v) {
int o = cellSize / 2;
ArrayList keys = new ArrayList();
keys.Add(Key(new Vector3(v.x-o, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x-o, v.y-0, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y-0, v.z+o)));
keys.Add(Key(new Vector3(v.x-0, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x-0, v.y-0, v.z-0)));
keys.Add(Key(new Vector3(v.x-0, v.y-0, v.z+o)));
keys.Add(Key(new Vector3(v.x+o, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-0, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x-o, v.y-o, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y-o, v.z+o)));
keys.Add(Key(new Vector3(v.x-0, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x-0, v.y-o, v.z-0)));
keys.Add(Key(new Vector3(v.x-0, v.y-o, v.z+o)));
keys.Add(Key(new Vector3(v.x+o, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-o, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x-o, v.y+o, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y+o, v.z+o)));
keys.Add(Key(new Vector3(v.x-0, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x-0, v.y+o, v.z-0)));
keys.Add(Key(new Vector3(v.x-0, v.y+o, v.z+o)));
keys.Add(Key(new Vector3(v.x+o, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y+o, v.z-0)));
return keys;
}
private string Key(Vector3 v) {
int x = (int)Mathf.Floor(v.x/cellSize)*cellSize;
int y = (int)Mathf.Floor(v.y/cellSize)*cellSize;
int z = (int)Mathf.Floor(v.z/cellSize)*cellSize;
return x.ToString() + ":" + y.ToString() + ":" + z.ToString();
}
}
by noreply@blogger.com (Simon Wittber) at February 12, 2010 04:37 AM
by noreply@blogger.com (Simon Wittber) at February 12, 2010 12:27 AM
One of my favourite programming tasks is to create a program in under 4k. This is something the Demoscene excel at (see scene.org awards).by Adrian (noreply@blogger.com) at February 11, 2010 10:18 PM
Drishti has three parts, the renderer, the importer, and the painter. We only covered the renderer and importer. 

You can edit the transfer functions to explore the volume. The 2D version depicts the gradients of the data set, and takes a bit of playing around with before you get used to it. You can left/right click to shift the points, add points, make curves, etc throughout the selected volume. Space will bring up additional color maps. You can add new transfer functions to highlight different parts of the volume. The two sliders on the side can be used to set the alpha, and 0.5 each for a gaussian influence instead.

by Adrian (noreply@blogger.com) at February 11, 2010 10:02 PM
Did this family portrait commission for my uncle’s 50th. They requested a portrait (30″x40″) of them all walking, holding hands and provided a handful of references to work from.
Getting a likeness in faces is no light task! Especially in full colour, over-shading/lighting can warp the face and make it look off even if all the features are correctly positioned.
Here’s a closer look at some faces.
Seriously, what is wrong with you Interzone Entertainment?!
First this story breaks out on Kotaku and tsumea that you’re sending Mike Turner down to pick up assets from the Perth Studio so that you can contract someone else to finish the game (rather than pay existing staff what they are owed in unpaid wages, entitlements, and superannuation).
Now I’m hearing reports that Mike has turned up in the dead of the night to change the locks (which I assume was done illegally given that Mike just recently resigned as company director, and I can’t imagine that the building owner was informed) and take all the computers.
He was stopped by the police. The police!?! What are you doing Mike? Seriously, what the hell are you doing? Please come to your senses and stop playing any role in this insanity. Anyone asking you to perpetrate illegal or questionable actions probably hasn’t got your best interests in mind.
Update: Okay, I’ve calmed down now. I’m not making any claims regarding the authenticity of this information or the legality of any actions taken by any individuals. This just completely blew my mind. Read up on it elsewhere.
by Adrian (noreply@blogger.com) at February 10, 2010 09:01 PM
by Adrian (noreply@blogger.com) at February 10, 2010 08:19 PM