Saturday, May 30, 2009

Finally! Preview Release!

I decided to release it as is as "preview". Whoo! Get it there:
Main page | Free preview | Full preview

I'm dead tired after setting up contracts, configuring the sales system, and so on, then double and triple checking the system, so I'd rather leave huge announcements and advertising for tomorrow or even monday.

Also, I uploaded a new youtube video of me using built-in editor.

The Editor doubles as cool artistic tool on its own that you can use to create interesting images. Just imagine how you can use it to enhance your PhotoShop or Gimp artwork, how you can combine it with your 3D graphics. Possibilities are endless. In 2007, I made a really sweet valentine's day card with essentially same technology (except I didn't have any real-time viewer back then; it took 20 seconds to render a frame, whereas now it takes less than 0.005 seconds) and it was well liked.

When you get bored of playing, you can create your own beautiful things.

Friday, May 22, 2009

Some new screenshots.

I'm mostly polishing the game now for the release. Fixing minor glitches, improving gui, etc.
Screenshots of some new "arena" (made by tweaking old one, but looks cooler IMO):

Screenshot from the 'arena' editor:

The table specifies parameters to the attractor. Attractor is given by polynomials like dx=x*x*a+x*y+b+x*z*c+x*d+y*y*e+... same for dy and dz, and cells in table specify coefficients a,b,c...
On top, you can see the factors (xx, xy, xz, x, ...) that are multiplied by cells in table.
Looks intimidating? I myself have no clue what particular set of parameters will look like until I try it! Which, by the way, means that you could tweak it as well as I can even if you don't know how it works. Results depend to tastes, not to technical knowledge.

I rarely enter parameters by hand, though - the "next fractal" button tries a lot of different random parameters until it finds something that seems interesting. Sort of artist AI. Like any today's AI, it is somewhat stupid, but gives good starting point for tweaking parameters by hand.

Monday, May 18, 2009

Another HD video.

There we go.

Some freezes in video were caused by video capture tool writing to disk.

Note: there appear to be some problem with youtube at the moment. If this video keeps loading but does not start, skip to 5 seconds.

I still did not figure how to capture sound from OpenAL correctly.

Encoding used (on file that I uploaded. Youtube itself does re-encode it over again, at lower quality):
glc-play Polynomial64-5125-0.glc -o - -y 1 |mencoder -demuxer y4m - -nosound -ovc x264 -x264encopts crf=22:frameref=3:bframes=3:threads=5 -of avi -o output_x264.avi
Original resolution was 1280x720 , and resulting bitrate was about 1 megabyte per second.

Sunday, May 17, 2009

New explosion effect...

Added some geometric-shaped fireworks...

(looks much better ingame than in static image, obviously)

It uses random polyhedra for firework's shooting directions.

Testing youtube HD.

Uploaded a short video of The Polynomial (game) in action, mostly to test Youtube HD. A lot better than regular youtube, but I still don't like how it compressed.
Video codec is made to work well for regular videos, like people walking and stuff, not for weird math imagery...

In other news, I added plenty of new features and bug fixes, though them are not very visible in the video. You can see zoom (right mouse button zooms for sniping), and also some fancy firework explosion (which didn't show in youtube resolution very well). The game's progressing quite nicely. You can email me if you want to be notified of updates.

Ahh, and also. Many of you asked how it is played. Currently, like a space shooter - you fly around, shoot up red stuff, and collect green stuff. Though I'm working on several alternative gameplay styles (like exploring&collecting). Also, I'm thinking how to tie gameplay with scenery generation so that gameplay would also result in progressively more and more interesting scenery. Maybe, you would be collecting items that you find attractive and shot up items that you don't like, driving the evolution of shapes :-) .

Wednesday, May 13, 2009

Patterns (programming)

[skip this post if you're looking for news on my game Polynomial]

Design patterns remain to be a hot topic in programming. After much consideration, I decided to hop onto pattern bashing bandwagon with some hopefully original arguments.

First, what exactly is a design pattern in programming? Wikipedia: "a design pattern is a general reusable solution to a commonly occurring problem in software design." That's good, but watch out: "A design pattern is not a finished design that can be transformed directly into code".
That's it, pattern is like c++ template class or lisp macro or c# generic, but written in English and instantiated by hand. The very antithesis of reuse. Only in technical writing you can actually refer to some English description and thus reuse a pattern.
Manually duplicated functionality is bad. It beats having no functionality, but it is still far worse than truly reusable, finished design. You should try to find or make finished design rather than just duplicate things by hand. Maybe even switch to programming language which is expressive enough for such reusable solution, or if you're some real smart fella, invent your own programming language.

But if patterns are bad, what's about design pattern books, you might ask? Surely, those are written by people who know it all? [I don't think so, but well, I'll take that as true]

Thing is, the best selling programming books are not the technically best books. It is the book that makes you feel better about yourself that sells well. Design pattern books fail squarely in this category. You read such book, and you feel good and smart that you previously (re)invented many solutions to common problems; and it does not make you feel bad that you did not make your solutions truly reusable. And since it made you feel good you go on preaching, same as for bible or other religious meme.
Sure, the book can be very informative - after all it does contain list of solutions to common problems (which you might not even recognize as problems requiring a solution) - but those solutions are unfinished and are not reusable from programmer's perspective; you're better off with a library like boost that implements those things in reusable way.

The worst part is advice to new programmers, "do patterns". No. Use a language which is powerful enough to express solutions to common problems, so that those can be transformed directly to code; ideally, with libraries rich enough so that you won't have to reinvent wheels. Do pattern only when programming language does not permit you to reuse one solution.

To add real life example here. In my projects, I use "observers" a lot. Observer is something that watches a variable and is notified by changes. Long ago, my programs typically would have code that was observing keyboard state, other code that was observing textbox value, and so on. That's following observer pattern. When it started becoming a pattern, I made few template classes for data, events, and observers, and refactored most of the code, which allowed for greater flexibility and interoperability between components, as well as cut down the code size. I still use observers, but no longer as pattern - I just use observer and observable templates instead. [edit: by templates, I mean, specifically, C++ 'templates', a powerful language feature for writing that sort of stuff just once. Not some ctrl-c ctrl-v edit edit. If you're using C# you can use generics, if you're using lisp you can use "macros" (and do it in a zillion ways), and I heard even Java has generics now too]

Saturday, May 9, 2009

Wow, StumbleUpon is great.

Yesterday, I properly announced my game development for first time. Thousands hits on the website from stumbleupon, snowballing almost immediately.
Thanks for the nice response! It greatly boosted my confidence that the game is worth it, and improved the motivation. It is always a problem with such projects - after several months of work, when the work seems to go on and on, you invariably start losing confidence that you'll make it, start worrying about marketing, and so on.
It really looks like you could just work to make the product as good as possible these days, without wasting much effort on marketing, and just publish a page and people will come.

Just what the hell.

I normally do not post any political commentary here, but I'm going to make an exception. I was looking at various new anti-net neutrality legislations in Germany, said to be made "to help fight child pornography".
What the hell. You'd almost think they were lobbied into this by some 'child porn producers association', whom complained that online CP is hurting their profits. "Our determination to fight child pornography" my ass. What happened to determination to fight child abuse? It happens in real life, you need rather difficult investigation to identify the pedophile bastards, and you need to send in some police for arrest, as opposed to asking ISP to shut down something and afterwards pretending it didn't happen.
Censoring the Internet is just silly. It is like combating evidence for the crime(photos) rather than crime itself(child abuse). It is a distraction from real issue. It does not free any children from any basements.

Link to another dude's rant on same topic

Friday, May 8, 2009

New page on my website.

Added a page about my upcoming game.
Also added couple new levels to game, the nicest one looks like this:

Wednesday, May 6, 2009

More screenshots.

While manually fiddling with settings for environment generator for my upcoming game, I discovered some interesting-looking type of strange attractor.

It shows bifurcations right in itself. My understanding is that an roughly elliptical orbit drifts along the line, varying properties of the orbit itself, turning the chaos "on" and "off".

Also, public beta version of the game is coming along somewhere soon.

Monday, May 4, 2009


So, I've been working on sound support for my game. I couldn't find OpenAL EFX extension initializer, so I generated one myself using grep and awk. Here it is.
Use InitEFX() to initialize EFX extensions. You can also use HasEFX() in the code to check if EFX is supported (and has been initialized). After successful call to InitEFX() , you can use EFX functions which are listed in efx_proc_list.include.h (it declares function pointers in header by defining P macro, and defines and initializes them in C file) .

game development.

For past several months I've been working on computer game. As it is nearing release, I'm going to start blogging about it.
Game looks like this:

It is, basically, a 3D space shooter with all the scenery and models generated using mathematical equations (see mathart section on my website).

There is rather old youtube video of that game.

I'll be blogging more about this - stay tuned.