Blog

RST, october 2013

October 3rd, 2013 (permalink)

Recent search terms update:

32 bit masking instead of 16 bit

Use eight hex digits instead of four.

"juho vesanen"

I've found Juho to be harder to reach than many CEOs I've known. I wonder what he's up to these days.

aesthetics on logic probes

Just the facts, ma'm.

atanua free full download

It always is. Sure, there's nags, but the downloads are full.

bit twiddling cx8 compiler

xc8 appears to be a 8-bit microcontroller C compiler. As long as you just keep to the 8-bit limits (i.e, "int" may actually be 16 or even 8 bit), normal bit trickery should work fine.

bitwise 1 3 7 15 31 63 127 255 1 2 3 4 5 6 7 8

Use the calculator in your computer. Switch it to "programmer" mode or some such. You're welcome.

can dos extenders be rewritten to use current memory addressing

Why? The applications that use said dos extenders can't really benefit from the larger memory space.. and the dos extenders run fine under dosbox.

complete project with source code of 2d l system and fractal image compression in c++ using opengl

Right.

convert ascii art to image.

Show on screen. Take screenshot. Save it.

disable direct draw hack

Delete, or rename, the direct draw hack dll(s).

game sprite jaggy

Call it "old-school" and charge more money.

good sols rule

Thanks!

hal meaning directdraw

Hardware Abstraction Layer. You talk to an API, API talks to various hardware. You get unified interface.

how to earn money in mmorpg project

That's the trick, now, isn't it?

how to run terra nova: strike force centauri

With dosbox.

interpolation for b in range (0,3):

You can do it directly, but I prefer scaling to 0..1 range first (and scaling back up later).

ludum dare rules

Yes, it does!

michael menz crest

Rest in peace.

u96 speech synthesizer windows

I wish. I had one in an old CP/M machine.

what does cd/dvd drive 'ide primary master mean' on virtualbox

IDE controllers can handle two devices, master and slave. PCs, including virtual ones, have several IDE controllers, first one being primary.

SoLoud

August 4th, 2013 (permalink)

I have this small game project I'm doing on my free time which I'm trying to get into such a shape I'll try to actually sell it. Goal isn't to become rich, but go through the process and get the experience. And maybe be able to call myself "indie" for realz.

I got to a point in the game where I realized I can't avoid adding sound no longer, so I looked at my options, and didn't really like any of them. So I figured, what the heck, and wrote SoLoud, a new, free, c/c++ audio engine for games. Hilights include extremely easy API and a speech synth. And quite probably some quirks, as it hasn't been stressed too much yet.

In other news, Assembly 2013 came and went again, and I didn't do much. I popped by, saw some old friends, tried the Oculus Rift (and was positively surprised).

This year also marked the 20th anniversary of Second Reality, and Future Crew released the source code. Some folk at Pouet immediately said that I must be working on a SDL port already.

I'm not.

Someone might wonder why this is. A couple years ago I was at an off-site meeting in my workplace and was, informally, talking to Trug regarding the upcoming anniversary, and the potential of an "updated" version. I pondered a bit about what that would mean.

Let's say we went all the way - having a live orchestra for the soundtrack, using 3d acceleration and re-visioning all of the effects; not just remaking, but thinking "what would this effect be, if it was designed today"; having new high-resolution artwork done, and so on..

Would it be a good thing to do? I think it would, still, be just a pale shadow of the original. The nostalgia factor is so strong, there's simply no way we could make a "modern" version that has the same impact the original had back then.

You can, however, enjoy the Second Realipony.

RST, june 2013

June 20th, 2013 (permalink)

Recent search terms update:

what is "fi" in dos programming

In some languages, 'fi' ends an 'if' block.

de-bugging the millennium falcon key

I think you're just supposed to bang the roof for things to run smoothly.

did someone solve the directdraw problem?

Which one?

does textmode consume less power?

Good question!

easiest way to interpolate

if (invalue > treshold) return 1; else return 0;

fan for blowing fog

Whatever rocks your boat, dude..

fan tape generator

Are you kids too lazy to record your own fan tapes these days?

games that make your own person and fun stuff

Aren't we being specific today?

how to draw to the screen using only dll calls

Well, technically, everything you do to put stuff on the screen on a modern OS goes through dll calls at some point..

i wanna make my own money system
  1. Make a limited amount of something with no intrinsic value. 2. Find people who find the thing of value. 3. Profit
layout für bachelor thesis

That varies from Schule zu Schule. Sometimes even inside one school, too.

pascal language discovered by whom

Discovered. You keep using that word. I don't think it means what you think it means.

sin interpolator

Yes, that's a pretty good metaphysical question. At which point can we say a sin has been commited? Killing a person just a little? Being unfaithful just a little? How would you interpolate from sin-less to sinned? Where's the treshold?

stories on time

Once upon a time the end.

survival guide
  1. Avoid dying.
what classes would i have to take to create my own web based mmo games

Business.

Android Native Development Kit Cookbook

June 19th, 2013 (permalink)

Hey look, a new book review.

Although the name contains the word "cookbook", which to me says the book contains lots of small snippets, this book is actually a pretty much well-rounded tutorial on how to use the NDK. It starts off with setting up NDK on Windows, Linux and OSX, as well as a walkthrough of a hello world project.

The book doesn't tiptoe around the fact that you really can't make a purely native application on Android; even if you use the "native activity", the java virtual machine is still there, behind the curtain. So it's a good thing the book covers the communication between the VM and native code in detail. There is also a chapter that covers the "native activity" approach as well, where you don't necessarily need to worry about the java side.. as much.

Personally, I've only used printf debugging and Eclipse for NDK applications, so it was nice to find a chapter that covers different ways to build applications as well as different options for debuggers.

Plenty of pages are devoted to threading, which I found a bit odd. The book also touches on a bunch of APIs one might want to use from NDK, like zlib, OpenSL ES, OpenMAX AL and OpenGL ES. While the intro to OpenGL ES may be helpful to some, there are complete books about this subject that are better sources for that information.

Finally, there's a couple of chapters covering porting existing C code (libraries and applications) to Android and NDK. These are mostly step-by-step explanations of how to port some specific examples, where I would have preferred to see more of a list of things to keep in mind, pitfalls, what works, what doesn't, that sort of thing.

If you're a desktop application developer and want to get your stuff running on your Android phone, and only want to buy one book, the topics of this book pretty much cover everything that you need to know.

Directx Wrapper

June 19th, 2013 (permalink)

Some time last year I realized I need a new monitor. My primary monitor at the time was so old, it required a special "reduced blank" refresh mode, practially meaning it was running at 56Hz, which annoyingly many games had trouble with. Some just forced the refresh rate to 60Hz, and the display went out of sync.

As an update, I wanted to explore something more than just plain new display, so I threw money at a 3d monitor, with Nvidia 3d vision glasses.

Back when ELSA was still around, they had wired 3d shutter glasses (you needed a 100+Hz CRT monitor to use them); I still have those glasses, but they naturally don't work on modern machines. Back then, Nvidia had drivers that let you watch OpenGL and directx apps with the 3d glasses.

Today? Not so much. Only dx9 and up are supported. They also quietly enabled quad buffer rendering on OpenGL drivers, probably to support whatever ID software is doing, but didn't activate the "auto-3d". Since I pretty much only use OpenGL for my hobby projects, I was disapointed that I couldn't just enable the glasses and watch my demos with them.

I did find an OpenGL to DirectX9 wrapper, and dropping that next to "the line age" binaries let me watch it with the glasses. The gotcha: only OpenGL 1.x is supported.

I tried some recent games with the glasses and pulling off stable 120Hz is pretty hard with bleeding-edge graphics. So I thought, hey, I'll just install Crimson Skies, that worked well with the ELSA glasses, it should run 120Hz with no trouble.

Unfortunately, it's a dx7 game. So, while it's still on Nvidia's stereo 3d supported games list, it doesn't activate the glasses at all. Bummer.

So.. how about making a hack.. that reads in the dx7 calls from Crimson Skies.. and outputs dx9? I found out that someone had made a hack like that for Thief 2, but that was pretty limited hack.

I've done some directx wrapping before, and it's a lot of work. This time I figured I'd just wrap everything, instead of just hand-crafting every interface one by one. So I basically made a partial C parser that reads in the DirectX headers, and generates the wrapper code. The result is here, on github - I've used dx8.1 sdk with it, but other versions should work as well. There's also links to pre-generated sources and a binary dll if you want to log calls from a dx1-7 game.

When I then hit Crimson Skies with it, I found that it's not actually a dx7 game. The only dx7 call it does is to create one surface at startup and then delete it. I'd guess it's probably a dx5 game, and dx7 is just used for marketing purposes. It's a Microsoft-published game, after all..

At that point I got distracted by other things, so there's still plenty of work to do on the wrapper project.

Atanua Revival

June 19th, 2013 (permalink)

There's some people who keep poking me to improve Atanua. I'm really grateful for that, not in the least because it's made me make Atanua do things I had never imagined. And then people have used Atanua to create more complex designs than I could believe.

Unfortunately, these updates have often taken years for me to do, mostly because there's been relatively little financial interest in Atanua. Over a hundred schools all around the world have requested the free classroom license, but there's far fewer actual sold licenses.

The recent Atanua update round includes some of the more frequently requested features that I've, for some reason, fought against, like the "light background" mode. There's also some rather massive optimizations due to the orders of magnitude more complex designs people have been making.

I looked at the Atanua website and pondered whether I could, somehow, fit a small user guide to it. I decided to do a redesign and you can find the result here - the new site is roomier, lighter, css-based, etc. On retrospect, a bit hard to use from a phone, as the navigation somewhat depends on the hover efect, but still it's a refresh.

Right after I got the new website done, I found that my payment processor, Plimus, had changed its pricing so that it was completely prohibitive for me - basically, if I stayed with them, they'd have kept all the income, unless the sales improved about a thousandfold all of a sudden. So I ditched them and switched to BMT Micro, and offhand they seem like a much better fit for me; they accept many more payment options too, like PayPal.

I've long pondered about an "upsell" to the schools that have the free licenses, and I ended up setting up a "homework license" option. We'll see how that goes.

Finally, I set up a discount this summer - use ATANUASUMMER as discount code to get 25% off from the hobbyist and standard licenses, good until end of August. Spread the word!

Lots of Stuff Going On

May 3rd, 2013 (permalink)

You've heard the story before, in one form or other.

User downloads software. Finds bugs in it. Mails the author. Author says, "you've got the sources, fix it".

That's where the story usually ends. In this case, however, he did. Presenting, GalaXQL 2.1, by david_costanzo. If some mac developer would like to compile a new osx binary of it, that'd be swell - it shouldn't be a huge task, but with Apple, you never know.

I played through Divinity 2. It was a strange experience in that I felt bad about playing it.. like reading a very bad book but not being able to put it down.

I can't even point at what was so bad about it. Of course there were some obvious things, like having a character who can do billion points of damage with one spectacular hit after another, as well as having godlike lock picking skill, and still not being able to unlock wooden chests unless a specific key is found..

You can polymorph in the game, and the non-human form is supposed to be more powerful than the human form. Turns out, once you level enough, the human form is nearly immortal while the other form, even when skills are maxed out and the best equipment is used, pretty weak.

So naturally the game's last mission is in this other form, and it's an escort mission. Pretty much the ONLY escort mission in the whole game. The game auto-saves every now and then, but apparently if you let your escortee to get more than 10% damage before the last 30 seconds or so, you're screwed, since the last bit causes around 80% damage.

I ended up hitting the game with cheat engine until the escortee was invulnerable. Horribly frustrating.

When I got near the end of the game, I decided that I seriously would need to pick up some programming project again and do some coding. Conveniently, Ludum Dare #26 rolled along, so I made a game which is a training program for the keypad. My cps as reported by it is around 4.0; feel free to beat my score..

The game was written in C/C++ and SDL and HTML-ized using Emscripten and you can also read my tutorial about using Emscripten in Windows. Yes, the tutorial is a bit unfinished, but then again, so's Emscripten. I've found that way more people have played my game in this LD (regardless of the record turnout again) than before, just because it's easier to play in a browser than standalone executable..

Another thing I picked up after way too long pause was Atanua. The version that'll be public in a few days unless I managed to break something will primarily include bug fixes and dramatic speedup of loading boxed designs (one design sped up from over 2 minutes to under one second).

Speaking of Atanua, one nutcase did go and made a game with it in Ludum Dare. 5865 chips, 9492 wires. Insanity.

I churned through 75 project Euler problems. Maybe I can stop now. After the first 50 or so the puzzles become more about math than programming, really. Getting to 50 also pretty much requires you to install a bignum library.

If for some reason you haven't checked out Strip Search, the penny arcade / loadingreadyrun web reality show for web comic artists, well.. maybe you should check it out.

I also have one "getting old games to run better on new hardware" project going, but it's too early to talk about it yet.. And no, I haven't made any progress on Spelurky since the last blog post. It's as if posting about projects on this blog causes them to stall.. =)

Speaking of projects.. long ago, when I was still working on CFL3 (yes yes, CFL5 is another project on the shelf..) which is a "virtual file system" of sorts, like DOOM WAD files of someone still remembers those, I designed the system in layers so that you can run data through a filter before it goes to the compressor. One of the filters was delta encoding, and that actually does help compress various forms of data (like raw wave audio). Back then I pondered about another kind of filter, basically bit transpose.

So you take 32 32bit words as a 32x32 bit matrix and rotate the bits by 90 degrees. This should, in theory, generate plenty of 0x00 and 0xff bytes for pretty much any kind of data, which, again, should compress better.

I finally got around to testing it after a discussion on Pouet, and ran test against the Canterbury corpus, combined with the Lena image as 32bit TGA, PNG and PSD, some floating point vector data, x86 executable and a MP3 file. As a result, pretty much everything compressed way worse than without the transform (including the various ASCII files in the corpus). The only file that compressed clearly better (the uncompressed 32bit TGA) didn't do so by much, and the best transform for it wasn't 32bit, but 8.

The first issue of Skrolli, a Finnish computer mag by hobbyists for hobbyists was published, and sold out. I'm still considering writing an article for it, but that takes quite bit of research, so we'll see..

Spelurky

April 4th, 2013 (permalink)

Lots of things have happened, but I haven't bothered to write an update..

Primarily, I suppose, I've been working on a roguelike:

More on this and lots of other things when I find the inspiration to write about it.. =)

Anyway.

It's been a while, so here's recent search terms:

8051 is a?

Number. It's not a prime, since 83*97=8051.

another way to say interpolate

You could try sticking your tongue to the roof of your mouth and get something like "intelpoleit".

applications of immediate mode addressing

Depending on the architecture, there may be some known addresses; for instance, in DOS you could get the current time tick by reading from a certain address. Other known addresses might be ram-mapped I/O ports, for instance. And when programming for microcontrollers, just about everything is a known address.

bachelor thesis layout

Varies from school to school. Sometimes even within the school.

black and white curves

Curves drawn with just black and white, or curves depicting black and white?

cheat for atanua

Press Alt.

free typing both name and cast a love spell on internet

I don't even.

how directdraw works

I'd hazard a guess that it performs some simple calculations itself, but mostly delegates work to graphics drivers through some well-defined interface.

print a diamond of starks in dev c++

I don't know what a 'stark' is. And I probably don't want to.

rifle case that connects to my backpack

..

what's immediate mode

Opposed to deferred or retained mode, immediate mode performs actions more or less immediately. Compare drawing a triangle now to adding a triangle to a list to be processed later.

why do we have to obey all the design rules

For the users to have a coherent experience across applications, without having to learn to use every single one all over again.

why smooth step have sine

Because sine is smooooooooooooooooth.

why we use interpolation

It's an optimization.

Litterae Finis

January 17th, 2013 (permalink)

It's reassuring to know that, apparently, I'm the best in the world in something, even if it's practically inapplicable to anything useful.

In other words, Litterae Finis, the demo I made with !Cube's music, won Text Mode Demo Competition 15.

There's a capture on youtube, as you can assume these days..

..although, again, you can download the binaries and watch it "for reals", if you want to. Here's the Pouet thread.

Like with the tAAt new year's demo, I've wrote a breakdown of the demo too. Warning: contains spoilers.

Oh boy. This is the worst flu I've ever had - or a chain of different flu-like symptoms, in any case. No flu can last for four weeks, can they?

Anyway.

I've been pondering on the OpenGL tutorials, and it's a tricky thing. The problem lies with the fact that OpenGL 3+ is very front-heavy; you need to know tons of stuff before you get to the good bits.

It's also a question of balance. On one end you have code with tons of OpenGL calls, and on the other end you say, here's an engine, just use it. I think I will have to write some kind of toolkit to jump over a lot of the complexity and to get the reader faster to the good bits, and then we can go back and see what the toolkit contains.

Still, it's a lot of work before I can even get started with the writing. There's a lot of cool stuff I'd love to write about, but you've got to start with the basics, and when it comes to OpenGL 3+, that's quite a lot.

Of course, I could just skip the basics, write a toolkit and hop directly to the good bits.

Tempting.

ps. I finally got around to writing in-page links to these news. The link is in the "#" after the date. Not quite a permalink, but close.

Twenty Thirteen

January 3rd, 2013 (permalink)

So.

Year rolled over, with no end of the world to speak of, although last year had plenty of .. history in it. Things are bound to get more interesting this year, for better or worse.

As I'm writing this, I'm suffering from the annual new year's flu (4th year in a row). This has been the worst flu I can remember, with the whole family (and everybody we've been in contact with during Christmas) being horribly ill for over a week.

Anyway.

Let's start with a shocking reveal that I've been behind the tAAt new year demos for a while, including the latest one which you can watch on YouTube:

..although you can download the binaries and watch it the old school way too, if you want to. Check the Pouet thread for download links etc.

And as a bonus, I've written a breakdown of the demo too.

Which, in a roundabout way, brings us to (one of) the reason(s) of writing this blog post at this time.

Last year, I wrote that I don't, in general, do new year's resolutions, but I'd give them a go. I tried to do a little bit of the following every day:

  • Some form of physical exercise
  • Some form of music
  • Some form of writing

As results go, the physical exercise was a dismal failure, if you don't count the 1-2 walkies with dogs each day, bicycling, carrying groceries with a backpack (no car here), managing a 3-year old boy, moving snow, taking said 3-year old to daycare on a bicycle (or a sledge, or carrying in some cases), making firewood and so on - you know, the normal every day stuff. I probably should try to do better this year.

The primary problem with this is to find a time slot for it. Maybe I will find one. I'd like to get back to the shape where I could do a hundred push-ups (which I managed due to the Ludum Dare dare some years back).

When it comes to music, I haven't really been able to play around every day, but I tried to find time, and I'm definitely better at it than I was a year ago. I also spent over 600 Eur on music-related things, including Native Instruments Komplete (for which I should have waited for a couple of weeks so I would have been able to use one of their frequent discounts), as well as Reaper and Renoise, both of which have their uses.

I probably should get my hands on some kind of dedicated audio interface, as using windows' audio has quite a bit of latency, and while using ASIO4All solves that, it also means that I can't get sound from other applications, which may be rather critical. For a lot of playing, the latency doesn't actually matter THAT much, but for drums it's a killer.

I also learned that there's a lot of stuff to learn when it comes to music.

I don't have all that much to show for, but you can check some oggs under the audio tab of this website. I'll probably post new ones there sometime.

The third point, some form of writing, is trickier to judge, as writing is large part of what I do every day; but I can't honestly say I've succeeded in it. I should be able to do some kind of creative writing project. Maybe a new tutorial series? (the Argon-Selenium OpenGL tutorials maybe - my project name for a modern counterpart of the Neon-Helium tutorials). Google plus and twitter have also taken their toll of my writing budget, as it's so much easier to just hammer something away on a social network and get over it. Instant gratification and all that.

Looking back, I have plenty of unfinished projects; the speech synth, an audio library, evolution shooter, etc. Apparently I didn't even manage to do a single Ludum Dare entry last year either.

One thing I did do, however, is a TMDC entry. I've heard that the quality of the entries was very high this year, so I'm hoping I don't finish last =)

And now, since this has been long overdue, recent search terms:

"all of the following interpolation techniques are based on weighted averages, except one. which one?"

It never quite ceases to amaze me how many people seem to be delegating their homework questions...

"write a program that displays a checker-board in which each white and black cell is a jbuttonwith a background black or white,"

...to Google. How these ended up on my site is another mystery.

"im,jikuyyu ui"

So's this.

alesis q49 + virtualbox

Never tried. I suppose it should work like any other USB device though?

answers to galaxql 2.0

Yeah yeah. At this point I fear it would probably be a re-designed GalaXQL 3.0 as during the project I figured out how I should have made it in the first place, and it was far too late to change at that point. Since there's no incentive for me to actually make GalaXQL 3.0, though, don't hold your breath. (Feel free to give me incentives though).

arb_instanced_arrays tutorial

Damn you, minecraft.

atanua for mac

Since Apple stopped supporting me, I stopped supporting Apple. So it's kinda mutual.

Less snarkily, I have no financial incentive to support Atanua on macs, and Apple keeps breaking builds.

bachelor thesis layout

Varies from institution to institution.

can dev c++ game have save feature

Yes.

can using artwork instead of words be more beneficial?

In what way?

can we do division by using char data type in c using bitwise operation

Yes-ish? Everything's a bitwise operation eventually..

could i use galaxql as the basis for a game

I suppose.

dangerous spells

All of 'em.

debugging the millenium falcon pythagorean theorem

The what?

diablo 3 resolution 320x200 hack

Wha..?

difference between plotpixel and putpixel in computer graphics

Wh..?

drawing a cube from a shader

You mean a geometry shader?

easy way to do interpolation

Simplify range to 0..1.

explain the (when one teaches two learn)

If you don't get it, you've never truly taught anyone.

how i design a logical circuit for traffic lights using gates on atunua

This was a fun find; seems like someone's giving some real schoolwork based on Atanua =)

how to convert an image to a specific color palette

Depends on what you mean.. tone mapping or mapping to a specific N-color palette?

how to convert to text mode in photoshop

Photoshop has no text mode.

how to read files from a different folder in sdl tutorial

fopen("different_folder/file.dat","rb");

how to render lots of cubes

Damn you, minecraft.

i wanna make my own working game board

Working how?

if i don't own an ios device and i want to program unity ios

With difficulty.

in my cv which is correct national service done or finished

Who cares, as long as the point gets through.

include d3d.h what does it do?

Includes, or tries to include, the file called "d3d.h".

israel you are in my chair sitting

What?

most common magic effect in games

I'd guess healing. Or if you mean visuals, probably fade to white. Or particles. Dunno.

pitfalls of immediate mode gui

They make easy things very easy, but they make hard things very, very difficult.

sdl tutorial finland guy

I actually laughed out loud.

terra nova sfc source port

One can only hope.

vbo cubes lot of

Damn you, minecraft.

what are the things i need to get sol

What's this, spice girls?

what does regeneration do in typomagia

The monsters heal while walking. Normally there's no healing.

what is analytics.sol file doing on my pc

No idea, sorry.

what is text mode screen better?

Hardly anything-

what is width and height

...

what things do you need to make your own game

Time, imagination, possibly some skills, but skills can be learned if you have time, and imagination.

where is segment vesa

I kinda recall it may be remappable, but usually the video memory segment, A000, is used.