2010-05-28

General update

I've been lazy this week and not done any work on Whirligig. Hence the lack of updates here.

What I have been doing is playing Merentha again. Which is a MUD (an early multiplayer RPG, generally with far more involved systems than more modern MMORPGs).
Used to play it all the time, but it gets a bit of a grind so I play on and off since it's free.
No pretty graphics, it's all text-based, but the base gameplay is unrivalled by MMORPGs imo.

Err, that's pretty much it. I won't get any work done this weekend since I'm in Scotland for a stag do (not mine!)

The only real bit of news on Whirligig I guess I've for is that I started the shop on Monday then thought I had a serious UI problem, so I played Merentha whilst I thought it over and realised I didn't have a problem. :oP
Just need to put UI components together, but as I've stated before I don't enjoy that aspect of coding at all.

2010-05-22

A word on Gaming in general

Or at least my views on it.
This is an opinion post, you have been warned. ;o)

I'm going to delve into that pandora's box known as "games as art". It's been done to death I know.

Anyway, I came across this 15 minute presentation today:


I largely agree with this presentation. Games are a wonderful media with an amazing future. However I don't really expect them to be taken as art.

Personally games mean a lot more to me than a picture, tv program, movie, music or even a book ever will. And that's because it's both none of these whilst at the same time being all of these.

In a game you can combine a wonderful stylistic view (like Okami's) with visually dramatic story arc scenes (like Heavy Rain) whilst playing an epic sound track (too many to mention, just listen to some game soundtracks sometime) and having an over-arching story as long as a book without missing things out due to how long your audience is likely to want to sit in one spot (large JRPGs do this best, like the FF series). Oh, and it's all interactive as well. No other form of media can do all these things at once. Movies come closest, but lack the long-term story or interactivity.

This isn't to say games should be the only media. Personally I think they're by far the best around and they're almost the sole method I use now for 'proper' entertainment, but they'll always be a place for stories you don't interact in. For example, I still love a good book and I listen to music whilst coding as trying to play a game at the same time would be hard. But movies and TV have near no meaning to me. There's a handful I like, but it's not with the same passion I feel for a game. I struggle to find any film that engages me and TV is even worse. But that's a personal view of a fairly hardcore gamer. What I will point out is that many of those who criticise games don't play them. I do watch movies and TV, I just don't enjoy them anywhere near as much as I do games.

Now, despite all this, I still don't think games can be classed as art by most people and the simple reason is this: The definition of art is woolly. It will never be 100% certain.
In short, the fault lies in the people who define what art is, not in the games, which often inspire higher emotions than many, personally, for me, I'd even say all, forms of artwork.
This is why I've used the term "media" in here. Games are definitely a media, and in terms of entertainment media they have all others beat. In terms of engaging the user on an emotional level they have all others beat (assuming it's a good game) purely because they have interaction, which makes you feel in the story. No other medium can do that.

So, that's my take on the piece. Feel free to disagree in the comments.

2010-05-21

More boring UI progress.

Pretty much all the key in-game UI is now done. Although not thoroughly tested, which will come at a later date.

The in-game logic for the UI is also done, take this screenshot for example:

You'll note there's no "Fire!" button. This is because the player doesn't have enough of this projectile type (would need 12 -- 3 bounce split x 4 normal split).
I will add a message for these occasions at some point (so I guess the in-game UI isn't finished ;o))

Another quick screenie:


This shows an instance when the player can fire, just a three-way split with a normal shell.
When a player has an infinite number of a weapon type, the infinity symbol is used.

Not shown in these screenies is the shot/shell/projectile windows that now also have the numbers of each type left as well.
So, as I've been saying for the past few days. Shop next!

Quick edit: Yes, I do know the labels are wonky, I've just fixed that. ;o) I should also point out that the "Split At" tools only appear when a relevant shot type is selected and aren't there the rest of the time as they're not relevant. Prevents confusion. ;o)

2010-05-20

Quick UI taster

This is how far Whirligig has moved along:



As you can see, everything is labelled, the 'projectile', 'shell' and 'shot' types all have icons (although pretty crappy ones ;o)) Clicking on them opens a window like the shell type one shown, which is showing 'normal', 'bounce', 'double bounce', 'double split', 'triple split' and 'clusterbomb'.
A 'split time' counter has been added so you can see how that works.
Oh, and there's 3 players, which (as I think I stated) was possible back as far as the tech demo, I just used 2 players back then.

The window is busier than I'd like. I need to fit the number of shots/shells/projectiles on there yet, which will require some reshuffling. Also I've not implemented that part to the weapon-choice windows either. And still not started on the shop. Still, getting there slowly.

Minor update

Not a lot to report really, all current work is pulling together UI parts. It's pretty boring stuff.

Have I mentioned I hate UI work? ;o)
Unfortunately most of the rest of this project is UI work now. The only bit that isn't really is the AI and level generator.

The level generator will just create 3 (or half the number of players, whichever is lower) planets and make sure they're spaced far enough apart then randomly locate the players making sure they're never closer than 90 degrees on a planet.
There may be some occasions on small planets where players get placed close together, but these should be rare(ish).

The AI I'm unsure how to do... I think I'll just have the projectile report back how close to an enemy the shot was and have the AI adjust from there. I could probably write in a load of simulation code that would make the AI dead smart, but I think a simple "how near am I?" setup will work well enough for the level of game I'm aiming at this. Were it a commercial product I'd bung in several AI levels, including a genius one that never missed. ;o)

2010-05-18

Whirligig Update

Well I did write a fairly long post about this yesterday, but lost it, somehow.

Anyway, I took a small break over the weekend since I finished Hoshi early and yesterday I resumed Whirligig.

First thing I implemented was a shell type window to go along with the shot type window.
I should probably explain the shell/shot/projectile types at this point.

Projectile types determine the size of destruction (there's 4 sizes).
Shot types determine whether the projectile will split after it's fired and into how many subsequent projectiles (1-5). The length of time before splitting can also be set.
Shell types determine what the projectile does on impact. This is the most complex and consists of bouncing (once or twice) or splitting (2 or 3 times) or a clusterbomb which explodes at the impact point and fires 4 other shots off.

I now need to finish building the GUI for these (timing for split shots and projectile type need implementing) then put together a shop.

The shop is needed because you will start with a limited number of each projectile. The only thing you'll have inifinite of is normal/normal/normal. Although this can all be changed in the options.

Basic gameplay will consist of a series of rounds (1-20). The shop can be set to be available mid-round or only at the end of each round.
After the rounds various stats will be shown with a 'score' winner, a 'kills' winner and a 'rounds' winner.

I don't think that's as clear as my original post about all this, unfortunately. If you've any questions, leave them in the comments and I'll try and clarify. Or you can wait a few days and I'll post some screenshots hopefully. ;o)

2010-05-14

Hoshi release!

I'm releasing Hoshi today, earlier than I originally planned because, well, it's done.

Without further ado, you can download it from here (~800KB).
And a picture of the final version:


I'm uploading a video of it running at the moment, will take some time because my connection is broken horribly right now, but will add a link to that when it's done.
Edit: Video is here.

On with Whirligig now, with a release date looking around June 15th, but that's not set in stone.

Feel free to comment with any bugs. AFAIK there aren't any, but if there's anything large enough I'll fix it and re-release.
I haven't done all the fiddling about with OpenAL that I intended to. There are some checks in there but I've no idea if they're enough, so you may need to install OpenAL as well. Downloads are available from creative here. Linux users should have it in their repo somewhere, but I'm not 100% on that.

Discussion on future projects

Since I've effectively finished Hoshi now, which is effectively project 2 but will be the first released, I thought I'd better start looking at ideas for future projects.

I do have a fairly large accumulation of game ideas, but most are too big for a month project and are more in the 6 month to 2 year time frame which I'm best staying away from for now.

So, what will fit in a month? Well, I have a ideas for 2 platformers, but I lack the graphics and level design experience to manage these properly in a month. Both would (ideally) need level editors which would be a project in and of itself.
So, I'll be leaving these for now, but I'll come back to them.

So I've decided on two relatively boring concepts for projects three and four and I'll give you the reasoning for them:
Project three will be an arena shooter (player in the middle of a single room with a gun that can shoot in 8 directions with enemies approaching from every direction). I estimate this will take around 2 weeks to write the code, but the sprites will take a long while as I'm hopeless at pixel art, but the entire point of this project is to improve that aspect.

Project Four will be a single-room-platformer. Classic examples being Manic Miner or Jet Set Willy from the 8-bit era. Again I'm not expecting more than around 2 weeks to write the main code and another week for a level editor. Some artwork will be re-used from project 3 (I may make this a sequel of sorts). The primary goal of this project is to experiment in level design and see what I can learn.

So, there you have it, projects three and four. Estimated (but not solid) release dates will be mid-July for 3 and mid-August for 4.

2010-05-13

That was easy

It's, err, sorted.
Sound is working.

I haven't tested for systems without OpenAL yet. I think I have enough checks to stop an outright crash but I need to be sure.
I also haven't added the "sound effects on/off" line in the options, which needs doing as not everyone likes retro beeps and whistles. Might add a volume control to that as well, will see.

But yeah, the game is pretty much finished. I'll make a video later demonstrating the sounds and um, guess I'll release it once I've checked the OpenAL stuff and added that line to the options screen.

It's done!

That is, everything but the sound is.
I may not finish the sound by Sunday (should do, but I can't be 100%), in which case I'll release this version on Sunday instead.
Also, things may go terribly wrong with the sound on various systems, so I'm going to have to abstract it away and try and check for errors at runtime then run with a "null" sound driver if things go wrong.

Doing the additional checks is probably what will take up most of the time.
I'll be using sfxr to make the effects, which is exceedingly good at making retro noises, which fits in with the whole theme Hoshi goes for.
I'm going to try and recreate the original sound effects as closely as possible, but that may not work 100%, will have to see.

2010-05-12

Progress

Had a busy evening.
Most of the options menu now works. It's klunky horrible, horrible code, but it works.
It's completely centred on Hoshi, which means I can't re-use this menu code. Something I realised late today. Given the choice I'd do the entire thing differently, but it's close enough to completion  now to not be worth redoing. Next time I make a non-mouse menu I know what to do at least.

So what works?
 - Resolution changes (only 2 resolutions are supported, but you can change these to whatever you want in the options, initially they're set as 800x600 and 1280x800).
 - Moving to/from fullscreen. It's not ideal, OpenTK doesn't do this particularly well and I seem to lose a fair whack of performance (which I believe is actually Windows' fault), but it's there.
 - Changing between keysets and joystick.
 - Resetting the high score.

What's to implement?
 - Custom key changes.
 - Sound effects on/off (implementing sound first is a bit of a must for this one. ;o))

Additionally I added a refreshrate variable to the options file, so this can be changed by hand. It's set to 60 by default, which will be fine for TFTs but is generally unpleasant on CRTs.

Also: Options are saved on exit, not on change. So if you change some options then manage to crash the game (I've not managed it yet) then they won't be saved and neither will your highscore.
I know highscore editing is simple, but really, who benefits? ;o)

Also found and squashed a bug earlier where it was possible to spawn a bazillion enemies on level 1 and so use that to significantly boost your score. Whoops.

Still looking good for a Sunday release anyway. I worked out earlier that I'll have written the entire game in 26 days (started it on the 20th of April). Pretty sure that's a good achievement. :o)

Just a quick teaser, image of the options screen:

More on Joysticks

Slowly working through the Options menu. I really hate UI design.

The good news is the UK election is sorted. I'm not convinced it will last more than a couple of years, and things aren't exactly how I'd like them, but they'll do. We shouldn't be running off invading any more countries illegally for the time being anyway. :oP


Anyway, Joysticks.
I have Joystick support implemented and working. It feels fine to me, but I don't like joystick controls on this sort of game personally.
I edited the OpenTK source to implement it in the end with a semi-clumsy hack.
I'm fairly certain it's badly optimised, but it work for now. I'm not looking to break any optimisation records with Hoshi. ;o)

I'm not extensively testing it. Random unplugs etc are undefined. It's mostly there as a testbed for future projects among which will probably be platformers, for which joystick support is a must.

2010-05-11

Another update

I've spent the afternoon avoiding the Options menu. I really hate UI coding, it's so full of potentially tricksy pieces.

Instead I've fixed all the niggly bugs and added explosions to ship deaths, including the player, with a seconds worth of delay after dying so you can watch the remains of your ship fly into the unknown.

So yes, everything is now drawn correctly at the edges of the Arena and I've removed those horrible red lines. Passage between one edge and another should be unnoticeable.

I've made some minor changes to balance.
Enemy ships now have a variable amount of shield power depending on the wave. Up to wave 5 you'll always insta-kill them. At wave 6 they'll take 2 shots, at wave 11 they'll take 3, 16 they'll take 4, etc.

I don't think there's anything else to add at all to the game itself now. Balancing tests still need to be done, but I think that should be fair enough. Getting past Wave 11 will require considerable skill I suspect, but that was true on the original Foray as well. I think the furthest I ever got on that was around wave 15.

Hoshi video

Managed to finally take a video of Hoshi.
As I said before, this is near finished game-play. There's still cleaning up to do and I'm still having performance issues in full-screen for some reason, which is why this is an 800x600 recording, not a 1280x800 as I'd like, but it still gives a good example of what the final game will look like.

I die rather suddenly at the end and accidentally start a new game immediately. Will have to look at that.

Nearly done!

Hoshi is finished for all intents and purposes. With the exception of the Options menu.
All other bugs are niggling:
 - Boss AI currently gets confused and sometimes lost due to lacking position-correction. This only happens whilst escort ships are still around, once they're dead the AI works. The position correction is easy to fix, hopefully the AI is as well.
 - Stars are still somewhat confused from my X axis mix-up, this is easy to fix.
 - Enemy AI does still get confused with arena borders. This should be easily fixable.

Additionally I'm having second thoughts about the 3-shots-to-kill enemies. It shows off the shield animation better, but they're a bit of a pain to kill.
I may drop it to two shots and make it so only 3 need to crash into you in rapid succession to kill you instead of the current 4.

So, I should have an RC tech demo by the end of the day.

2010-05-10

Quick Hoshi update

Obviously the election stuff has dragged on a lot longer than I thought it had and in between a friend's birthday party and the Spanish Grand Prix I got near enough no code done this weekend.

However, today I've had quite a productive afternoon, so I'll outline what now works in addition to before.
Firstly there's a menu:

Which is fairly basic, but will do for now.
Options still doesn't work, but most of the basic framework is in there, just needs fully implementing.

I've finished adding the final few pieces of game code, which means the game actually plays now as it will when finished, that means all AI (including boss), special bullets and wave re-plays are implemented.
However there's no indication what wave you're on, nor score indicator (although both are stored internally).
I'm expecting to have everything implemented either tomorrow afternoon or Wednesday at which point I'll have a choice.

First, I could just release it at that point, however there will be no sound implemented. Sound is a bit of a funny area with OpenTK. It uses OpenAL, which is a separate download on Windows and may require the player to go do download and ./configure things on Linux, which is less than ideal.
Also, OpenAL breaks 64-bit support on Windows, which means telling the application to run in 32-bit mode. There's no 64-bit version of OpenAL for Windows as of this moment and it's possible there won't be in the foreseeable future.
I may be able to get round these at some point in the future but right now it's a bit of a show stopper for sound effects.

I do have a solution, but it's not ideal.
Distribute multiple binaries.
It's fairly easy for me to create a non-sound binary alongside one with sound. I just don't call OpenAL in the no sound one and so it will run with most compatibility.

There's a further solution to all this, and that is compiling and distributing an OpenAL DLL and linux shared object alongside the executable. I'd rather not go this route just yet though as compiling OpenAL soft under Windows is somewhat daunting, but it would fix the 32/64-bit issue.

Another word on Joystick support. If you followed the link I made in my last post you'll not that Fiddler said the issue was fixed in OpenTK's svn. I've downloaded and compiled that and I'm still having the same issue at the moment. This is unfortunate but not seriously threatening. I still have my full keyboard support which will be fine on any keyboard that allows 3 keys to be used at once (all, else ctrl-alt-del wouldn't be usable ;o))

So that's where I stand. I'll go get Score and Wave notifications implemented so I can work on the Options screen tomorrow.

2010-05-06

Well that explains a lot.

All my X co-ordinates have been oddly reversed in Hoshi. Just worked out my camera wasn't orientated properly... Having text backwards isn't conducive to the user experience.
Bleh.

2010-05-05

Joysticks

OpenTK pulled the old joystick code near the end of last year without me noticing. This essentially means Hoshi won't have joystick support like I wanted unless I cobble together a custom version of OpenTK.

This isn't a disaster, but it's annoying as I wanted to introduce Joystick support for some of the other games I have planned as well.
This is the exact post detailing the new input methods. You'll note the last post is "this won't be ready for v1.0."
Unfortunately the old code was pulled as part of the process of implementing the new, so whilst OpenTK will wave a flag and say "look! I has a stick!" it won't let you actually read any useful information from the joystick.

So that's about half a day wasted on that. :o(
Arse. And I drew a joystick icon as well.

2010-05-04

Work on Hoshi

Been busy watching election stuff again. :oP
That'll all be over on Thursday.

Anyway, I'm having a minor crisis with control mechanisms.
Essentially I wanted things to be as simple as possible. In the old versions there were a singular set of keys: Z, X, right shift and enter (for left, right, thrust and fire respectively). These are generally not considered "nice" keys under todays standards (although personally I still think they work fantastically for pretty much any game when you use ' and / for up/down as well, but anyway), so there's another keyset that in the tech demo is configured as left and right cursor, Z and X (I think). The fire/thrust aren't ideal really, but good enough for the tech demo.

So, what's the problem exactly? Well, I have a left, right and enter key, and even a potential "back", but no up/down.
Because I want an options screen, I need a basic menu. A basic menu ideally needs an up/down and definitely needs clear keys.

Initially I just thought "oh, I'll add an up/down", but that could confuse matters when the user goes "what do up/down in the game?" The answer would be "nothing, they're purely for menu navigation"... Seems a little silly.

Next thought was "I could do a left/right menu with cool slanty text", which would work but involves coding up another UI element and drawing the text sideways which will all take time which I'm running out of.

So, I've decided on this:
Menu navigation will all be done through the cursor keys. Game play will have custom keys definable in the options.
Oh, also I'm adding basic joystick support.
On the main menu they'll be a notice in the top-left of the screen with pictures of cursor keys, enter, escape and a joystick to indicate that's how you navigate the menu. Heading to the options screen will let you redefine the in-game keys.

The tech demo actually has the ability to redefine the keys in its options file, but that's not a lot of use unless you know the OpenTK keycodes. There's a few other options I forgot to mention that I'll go through now:
If you open the file that is in AppData (C:\Users\\AppData\Local on Vista/Win7, C:\Documents and Settings\\Application Data on XP I think) then you can change these options.

First off is 'fullscreen'. Changing this to 'true' will attempt a fullscreen mode.
Next you have an X and Y resolution, changing these will do the obvious.
Arenasize changes the size of the arena. Making it very, very small is untested, I don't suggest doing so. Making it very large will just mean it takes longer to catch up with the enemy ships. Again this is untested. The radars should still work, but again, untested. :oD
StarsInTheSky and Layers changes the number of stars on each of the parallax star layers and obviously the number of those layers.
StarSize is a value passed directly to OpenGL to change the size of points. I've not stuck to this everywhere in the code so changing it might not make a difference. Large values will look silly, 1 will make the stars hard to see and anything smaller than 1 will default to 1.
UseKeySet determines which set of keys to use. Currently 0 is the standard cursors with Z and X, 1 is the Z/X/enter/shift layout I mentioned previously that I prefer. 2 will default to the cursors with Z and X again and will become the 'custom' key set when implemented.
Once joystick support is implemented, this value will also support -1 for the joystick.
Back and pause will always be Escape and 'P'... Pause works but has a bug in that you can still rotate and fire in the tech demo.

2010-05-02

Design decisions

I said I'd talk about why I'd decided to use C# and OpenTK, so I'll do that here. Along with why I'm developing reusable code, which is something of a two-edged sword if you're not careful.

Why C#?
To be blunt, because I can get from clicking "start project" to a working OpenGL window in under 2 minutes. With OpenTK installed on the system there's minimal messing around with dependencies etc, etc.
On top of that, .NET has a very, very rich network of libraries. VB also has access, but it's not as flexible a language. There are other options for adding useful libraries to C/C++ but you have to take time to set things up, which can take a long time and there's also issues with linking things so they'll "just work" on other people's machines. C# with always "just work" on a Windows box and with mono installed will most likely "just work" on both Linux and OS X as well without requiring me to release 3 copies of the game.

Why OpenTK?
Once C# was decided on, there were several things I could use for games programming. The most obvious is XNA, which is Microsoft's release and is easily portable to the X-Box 360. However, it's Windows only and is based on DirectX, which I've never particularly liked.
SDL.NET was another possiblity, but this works in 2D and seems to be abandoned in recent years. It was more active around .NET 1.1 than any other time and much of the coding harks back to that era, C# and .NET have moved on since then.
Tao is another possibility and would be a solid choice, but again it looks abandoned.
So that brings me to OpenTK, which has almost direct calls to OpenGL, contains a very quick and easy class called "GameWindow" (which allows that 2 minute setup I spoke about), contains maths classes that are almost (but not quite) directly portable with XNA, has support for sound playback and has extensive input support for keyboards, mice and joysticks. It also supports these features across both Windows and Linux, with most supported on OS X (I think sound playback and joysticks are a bit iffy, but I have no Mac to test them on).

Also note, I'm discounting anything that isn't free here.

Reusable code
Working out how much of a game to make reusable is more complex than it first appears.
For example: You could build an entire game engine that could be used for multiple games, but it should be pointed out that this is a large project in and of itself and if you just want to write a game then it's advisable to write a game-specific engine which will be much less flexible, but you're more likely to complete.
For my Game-A-Month project I've hit somewhere in the middle ground. Certain parts of my games will be reusable, but the game itself will be built largely from scratch each time.
The main part that is reusable is are the user interface components. Specifically this is a lump of code that contains the decision making for what is happening in the game at the moment, making sure things that are supposed to be rendered are so and those that aren't, aren't, making sure when a key is pushed the game takes the right action, etc, etc.
In Whirligig it deals with where and what the mouse has clicked on, who's turn it is and what to display on the screen at any moment. It will also deal with the main menu and shop when those are implemented.
In Hoshi it just deals with the basic rendering right now and not a lot else, although it also knows when the player dies and deals with ending the game; this bit of user interface is particularly clever as internally user interfaces lie on a stack, the first on the stack is the 'main menu' then you stack whatever else the user visits as you need it. When the user finishes with the user interface it just pops the stack and the user is automatically returned to the previous interface. If the stack is empty the game ends.
This allows me to very quickly knock together a group of components I want rendering into a user interface, chuck it on the stack and have a game prototype. This is the stage both Hoshi and Whirligig are currently at. When I want to add a main menu, I just create the menu as a separate interface and when the user selects "play game" just push my 'prototype' interface onto the stack. When the game ends, the stack is popped and control drops back through to the main menu.

Other components are designed to work with this interface and mostly consist of fairly mundane things like windows, labels, buttons and progress bars (all showcased in Whirligig) which inherit an interface called IUIElement. This interface allows me to create and add a new element to a user interface very quickly. For example, the radars took ~30 minutes to knock up in the end and the energy bar not a lot longer, then I just use an AddControl() call on the interface and they're rendered the same as anything else.

This is all very useful, but I take some performance hits for it. Interfaces suffer some nasty performance problems and once I start developing more complex objects I will certainly start using less of them (right now every render object uses one for it's main render cycle, this is VERY BAD as it generates unnecessary allocation and therefore garbage collection calls for every object in every render cycle -- 60+ times a second -- which severely impacts performance and may be the reason I'm having issues recording a video). Hopefully project #3 (which I'm looking at a plaformer idea I have for) will have less of these.

There are other small elements that I'm making reusable, small things like the OpenGL texture upload code, which I'm just doing quick'n'dirty right now, text drawing is done through the .NET image subsystem to a texture then uploaded with a transparent mask, this isn't perfect (rapidly changing text would be bad for this method) but works for what I have right now.
When I write a simple audio subsystem (which I'll be doing in the next couple of weeks for Hoshi), that will be reusable as well.

Hoshi tech demo

Hoshi is moving rapidly, I've now got a tech demo ready which you can download here (557KB).

The aim is simply to kill all 20 ships. The AI is fully implemented but not properly balanced yet and they sometimes shoot in mysterious directions. However they do usually target your direction and despite having no swarm mechanics do tend to act in a swarm-like behaviour.
I've mostly been playing against 50 ships when doing testing and that can prove quite difficult. You shouldn't reach 50 ships for a long while in the main game though.

Tips are to just keep moving as much as possible, but not TOO fast or you'll outrun your bullets and run the risk of smashing into ships. If you die (energy bar is at the bottom) the demo will exit. You only get one life. ;o)
Currently things go a bit weird at the edges of the level. For one the AI will get confused and start flying in the opposite direction, ships on the opposite side won't be drawn and bullets don't have "move to correct side" parts attached. So, if you see a big red line, I suggest flying away from it, although nothing will go spectacularly wrong if you don't.

In other news, I did a fair bit of yesterday and today's development under Linux, where the game just runs. I'll write a post about my reasons for choosing C# and OpenTK (this being a main one) at some point. For now, you can see what it looks like here, ignore the tearing, that's just a vsync issue. I'd not quite got the radar implemented there, so no red spots.

I tried to take a video of the tech demo earlier but ran into some issues unfortunately. I'll try again later though.