games and code code it, play it
Map project complete
January 6th, 2008

I finished Map project (Part 1, Part 2) in XNA and learned some things while making it.

I didn’t know why every game in last few years is made in 3D. Of course, first person shooters, some first person RPGs and various simulators should be 3D. They were faking 3D look even when there was no 3D hardware, 3D acceleration was made for such games. Programming first person games in 3D simplifies the conversion from game logic to a screen presentation. First person games are programmed with three dimensions in mind and every dimension really matters. It’s clear, 3D allows these games to be better.

But there are games which, when converted to 3d, gain almost nothing. Let say, RTS games. Most of the time they are played top-down, from bird’s eye view. In such mode, they are essentially 2D games. Units, buildings, terrain, interface – everything is two dimensional. Even graphics looks worse. Automatic mipmaping cannot be better then graphics which artist designed and optimized to be seen from birds eye. So why they keep doing it in 3D?

Making a Map project in XNA i learned why: 2D is totally and completely obsolete. They are no tools, hardware, software, tutorials, samples… nothing for 2D. Everything stopped somewhere on surfaces and sprites. It’s possible to make small games like Snakes or Arcanoid but anything complicated and nice looking like strategy games is almost impossible. All image processing is done in the CPU which limits the graphics effects while the new 200$ graphics card has nothing to do. Once you embrace 3D style, you’re staying there. There is no way back.

Maps in games
December 28th, 2007

Maps are base for every game. FPS, RPG and platformers have levels. Racing games have tracks. Adventures have rooms. Strategy and simulation games have maps.

I’m especially interested in terrain for strategy and god games. There is something fascinating in creating a region or whole world as a base for a game. When a game presents me an empty terrain it just begs me to start developing it and fill it with paths, roads, fields and houses. Some of the games that are representing this concept are Civilization, Railroad and Transport tycoon, Sim city and Caesar. They differ mainly at scope. Civilization is played on the whole world. Railroad and Transport tycoon’s terrain is some region and Sim city and Caesar are focused on building only one city. Common point is a starting, empty map.

2D grid

All began with simple colored two dimensional grid. Games like Civilization, Sim City and Railroad Tycoon allowed us to cover the terrain from an empty wasteland or few scattered villages to the metropolis.

Civilization Sim city

Isometric view

Almost all strategy and god games in 90’s were isometric games. Isometric view combines depth of 3D view with precision of 2D view. I kinda have a nostalgia for this technique, most beautiful and playable games I know are isometric games. Sim City 2000, Caesar 3, Pharaoh, Transport Tycoon, X-COM, Age of Empires are all presented in isometric view.

Sim city 2000 Civilization 2

3D view

After 3D graphics conquered the world of FPS, every later game was made in 3D. I was very disappointed. With third dimension came camera controls and good deal of time is spent fiddling with the camera. Also, 3D technology is developed and optimized with FPS in mind where player can only see terrain from close. Strategy god like views are complete opposite – they require view from above and cover big terrain. Texture mipmaping instead of sprites caused blurred picture from distance instead of pixel to pixel precision. All screenshots for these games looked nice but when you actually need to move around such terrain it can be frustrating. Largest problem with transition to 3D is that detail are hard to spot when your view is blurred.

Caesar 4 Civilization IV

2.5D

There’s only one game i know which applied 2.5D view: Sim City 4. This looks to me like sweet point between depth and beauty of 3D view and precision of isometric view. Game is actually 3D but has fixed view angles and zoom levels. This eliminates the need for camera handling and enable the artist to draw detailed textures in fixed sizes.

Sim City 4 Sim City 4

Ever felt like that? I often do. I’m using a PC for very different purposes. Music, graphics, development, games, internet and writing are some of my interest. Each of them requires me to have few applications installed: from simple tools like music players and format converters to development environments and office suites. So I’m constantly juggling with about hundred software products.

We all know that software is never finished. It is constantly in development. Features are added, interface is changing, bugs are corrected and product grows. In ideal world our software with time would be better, easier to use and more reliable. In ideal world.

In our world this isn’t so. Every now and then I need to stop using software I used that far and find a new solution. It seems that every piece of software have some sweet point in it’s development when everything works as it needs to, when it looks good and when bugs are at minimum. In ideal world I’ve mentioned before this would be the version 1.0. In reality, this is the last good version.

Development team did what they wanted to do: make a great software. Problem now is what to do next. If software is great then they don’t need to do anything with it except some minor changes like adapting the software to new hardware or operating systems. They also want to add some new features their competitors already have. And that’s the time they started “the death drive”.

Here’s the list of software i abandoned after it was “improved”:

  • ICQ
  • ACDSee
  • Windows Media Player
  • Adobe Acrobat Reader
  • Nero Burning ROM
  • Paint Shop Pro
  • Scanner/printer drivers

Adding a feature makes software bigger. Also, new features are never added with the efficiency of original ones. Software core is rarely written so that it’s extensible without limits. That makes it slow before any feature is added. Rather, it’s designed to support existing features and planed future ones. When unplanned feature is implemented, it’s probably only duck taped to the existing core. Nobody wants to change the core and this is a no-no deal. If you change the core you could break what’s already working fine. If you just duck tape a new feature on the existing core you can never fully integrate it and it can’t be efficient like existing features. And when you add too much…

You can see things are getting out of hand when file archiver becomes backup tool. When FTP client look more and more like web site manager. When image viewer tries to take care of your photo workflow. When instant messenger offers a collaboration tool. Actually, whenever a software main purpose cannot be explained in one sentence it tries to be something it is not.

PySync: the simple backup
December 8th, 2007

I’ve successfully replaced almost every application I had in windows with alternative one available in Linux. Firefox, Thunderbird, Open Office, Pidgin, gEdit, GIMP, GwGet, KMyMoney, Amarok, VLC media player and Brasero are installed on my system and they have all features I need. There is only one application I don’t have suitable replacement for: SyncBack.

Syncback is freeware application for Windows useful for keeping content of some folder synchronized. I used it to backup all my documents from disk to disk in case of hardware failure. It is really simple: choose a source and destination folder to keep synchronized, make a schedule and your data will be regularly duplicated with only modified documents actually transferred.

On Ubuntu I couldn’t find any application to replace simple but powerful Syncback. In this case one of a major Linux weaknesses surfaced: lack of general purpose applications. Some programs are too feature bloated and some are too specialized.

I needed some exercise in Python, high level scripting language, so I decided my first project will be PySync: the simple synchronizer written in Python. Although I’m writing it to solve my own problem I’ll try to make it usable for others.

PySync page

Ubuntu as my desktop
December 5th, 2007

For more then ten years i was perfectly happy with Windows as my only operating system. I like when things improve and Windows was improved in each version. Hardware compatibility, overall stability, security, user interface: they all changed for better in each version of windows. I was resistant to XP for some time, mostly for dumbed down interface and some hardware problems. They are all fixed now and I’m perfectly happy with this OS. I can do my work, i can have fun and i can store my data.

I was using Windows 2000 for 5 years. I switched to windows XP only when new programs refused to work on it. Direct X SDK, Photoshop and drivers for many new hardware required XP (SP2). Availability and support of Windows 2000 also ended. That means that I’ll soon be forced to move on Windows Vista. And i don’t like to be forced.

I’m pretty sure Microsoft will patch Vista and speed it up in some time and when I’ll be forced to move on Vista it will be one nice and fast OS, like XP was when i finally moved on it. Problem is that XP was released year after Windows 2000 and made the good OS better. Vista was released 6 years after XP and made some things better and most things worse.

In case MS don’t succeed in making Vista a great OS i want to have another choice. Some time ago I tried some Linux distributions on virtual machine and now I installed Ubuntu 7.10 as dual boot to XP. My plan was to have XP as my primary OS and Linux as test OS which I can freely explore and test. If something goes wrong I can always use windows.

Soon I had another plan. Since NTFS is now read/write supported on Linux, I could use all my data without problems. Plan B is to try and use Ubuntu as my primary OS. For that I need to have all my hardware recognized, Office tools, internet browser, mail reader, instant messenger, music and video player installed. Ubuntu had all these out of the box (or to be precise, CD image). I just started using it.

Now I have greatest dual boot system I ever had. Clean installation of XP with Visual studio and associated tools and free space and fast system for games. On the Linux system I have everything else.

Jade empire: beauty of simplicity
November 10th, 2007

I’m a big fan of d20 system and I like to play tabletop Dungeons and Dragons and computer games like Baldur’s Gate which utilize this system. I always preferred d20 system over others like in Elders Scrolls series or Diablo. The reason for this is probably that I like when things are somewhat complicated but well defined. I enjoy exploring all possibilities of the system, discovering hidden opportunities and huge number of options when shaping your character. I like how you can take role of stupid barbarian, evil magician, devoted paladin or sneaky thief.

Jade Empire is inspired with Wuxia, Chinese martial arts genre in literature and cinema, on the west known mostly from kung fu movies. Everything is here: wise teacher, gifted student, dance-like combats and hints of supernatural. Most important Wuxia elements are beautifully translated into computer game. The game bounces you from combat to dialogs and back where you can apply your conversation or fighting skills.

Stats

When I’ve heard of Jade Empire, game from BioWare: creators of Infinity Engine, I expected more stats and dices, this time set in eastern mythology. I was wrong. The game has most simplified character attributes system I ever saw. There are only three main stats your character has: mind, body and spirit. Those three then affect your chi, health and focus and when combined they form your conversation skills: intimidation, charm and intuition. You can also learn new fighting styles and spend some skill points to improve them. There are many different styles but you’ll probably want to decide which you want to improve. Inventory system doesn’t exist. You can have only one weapon at the time, armors are not in the game and plot items are used automatically when you need them. All this simplicity results in minimum time you spend studying your character sheets – you are in action non stop.

Fights

I never enjoyed computer fights. Mortal combat style was too complicated for me: all those keyboard combinations spoiled the fun. Instead of fighting I was guessing keyboard combinations. In Baldur’s gate fighter characters are too stiff, they stand toe to toe and just punch each other. Elder scrolls games and Diablo are just click fests with bare minimum of strategy. Jade empire has found sweet point. You circle around your opponent approaching them carefully, trying to hit them or exploit their misses. You can hit them with quick assault, powerful charged attack and area blast. While in fight you can spend Chi to bring more power to your attacks or focus to increase your speed (in game seen as slowing your opponents, like bullet time).

Dialogs

Conversation is the most important aspect of tabletop games. Huge set of rules are there for players to follow them but most of fun is created with witty dialogs, powerful speeches and humorous comments. Time when computers could simulate conversation has not yet come. For now, we must be satisfied with choosing one answer from few predefined responses. They generally vary from good to evil and most of the time you get what you asked for. Be rude and you’ll provoke some fights you could avoid, be nice and you can get some information. In Jade Empire dialogs work just like that. Sometimes results of dialogs depends on your conversation skills and if you are good at some of them you’ll get some kind of reward. Nothing revolutionary but it drives the story forward.

Conclusion

After Fallout 2 and Baldur’s Gate 2, Jade Empire could be the third RPG I’ve ever finished. I’m immersed in the story and I actually like to fight in this game.

Operating systems and me
November 3rd, 2007

I was thinking for some time about writing about operating systems i used. Today I saw the article by Shamus at Twenty Sided which urged me to finish it.

DOS 6.22
At the time i was using DOS computer was just gaming machine for me. I squeezed the last megahertz from my 386 to accommodate more and more demanding games. I liked the way DOS wasn’t getting in my way: >cd games >cd war2 >war2 weehee.

Windows 3.11
I liked them, nice icons and colors. Finally i could do some real work on a computer when I installed Office and Visual Basic. Also, i saw Solitaire and Paint for the first time. BTW, Paint and Notepad didn’t really changed from then, aren’t they?

Windows 95
With Pentium on my desk i was finally able to install them. I remember having problems with IRQ ports, IO controllers and some other things i shouldn’t have a problem with. This produced many mixed feelings. MS implemented great new things like right click context menus and control panel. BSOD was also ever present and unforgettable.

Windows NT 4.0
Network!

Windows ME
I had few clients then using Windows ME and i remember only problems. I heard they were nicknamed as Mistake Edition. Also they cleared the way for XP.

Windows 2000
Now we’re talking about operating systems. I had them 6 years on my computers at home and work. Finally realy stable, supported all modern hardware, combined features from WinNT and Win98.

Windows XP
Not long time after release i already had too much negative experiences with XP. Problems with hardware drivers, activation system, interface tailored for beginners, hardware requirements… Too colorful. I resisted for very long (until 2006). Now when every driver is written for XP and with SP2 on place, with internet full of tips and tricks and stronger hardware i finally settled with XP and using them without problems. Also, I accepted that OS can look nice (now i even have background picture).

Vista
What i see from occasional encounters is that they have many under the hood changes which will be important after few years. What’s surprising to me is how Microsoft can spend a lot of time and money to improve user interface measuring how users act in their interface and then they can screw up globally with hundreds of message boxes.

Backward compatibility
October 25th, 2007

Microsoft products were most of the time backward compatible. You could open all your code written in older versions of Visual Basic with newer versions. That allowed smooth transitions from version to version of Windows and Visual Basic. Developers were happy to have new features while not having to fix their old code. Microsoft was happy for all their upgrade fees and they didn’t need to support older versions.

That all worked for older developers who only upgraded. I started using VB from version 3 as hobby but i have done some real work only on version 5 and 6. Backward compatibility was only burden for me: i didn’t have any old code with which i could have trouble upgrading while VB could be much better language if they didn’t care about backward compatibility.

This practice was broken with the release of .NET platform. This time you couldn’t just upgrade any code, instead you got the list of unfixed issues and many large projects remained in VB 6. While petitions were set up appealing Microsoft to continue supporting VB6, VB.NET was modern and clean language i embraced immediately.

Now i have several large project written entirely in .NET and i can’t imagine upgrading them with the same procedure like it was from VB 6 to VB.NET. Looking forward, Microsoft has broken backward compatibility once and they could do it again. Then I’ll be some old developer and I’ll write petitions to Microsoft begging them to continue supporting .NET for few years while some new kids will enjoy new and more powerful .AI platform, with new language C~ (C-tilde) and modern VB.AI clean of .NET leftovers.

Killer feature or feature killer?
September 20th, 2007

One of the biggest decision I’ve met as a project manager was to decide what to hard-code and what to make customizable.

My company were selling and supporting software from a foreign developer which had limited customizability for the end user. While they covered most scenarios for users in their country, our users always demanded one more feature which we couldn’t provide for them. As we were expert in the field we started developing our own software. We had some bits and pieces from previous works but all in all – we wrote software from scratch.

Based on our experience we wrote a feature list which contained about 200 core features. After five years, some features still didn’t make it in our software and I’m perfectly happy with this – if we covered them, we wouldn’t finish our software – never.

One such killer feature was form designer. User would have option to design his own form for data entry end editing just like programmers do when programming for windows forms. Marketing staff wanted it to make presentations to clients with real documents and fields users already had, managers wanted it because it was cool and programmers wanted it as they thought that once they finished it users will do their own design. I discarded it.

It would be difficult to code it to cover whatever users wanted on the form but that wasn’t the main reason why i refuse to make it. Once you had the form designer you removed a big work of customizing application for user from yourself but you lost much of the usability you could provide to users on their demand. For simple things like coloring a field if some condition is met you must make changes to a form designer and soon you have application bloated with options almost nobody needs.

Instead, we built application for every user. Core functions were coded in kernel and were same for all users but user forms were inherited and changed to every user needs. Such approach enabled us to be fast to provide any customization needed while keeping core project design and structure together.

In the end we never had request for form designer. After all, we are the experts and we should design database and front end for users. Business systems shouldn’t be a toy for some ambitious administrator, it should be designed and implemented by experts.

The end of DMOTR
September 8th, 2007

I followed this comic for a year, occasionally getting looks from my colleagues at work and request from my family to explain what’s so funny.
It was great experience: first you read the comic which set a theme about some D&D problem or custom, then you associate yourself with the situation and then you read comments from other users, all while following familiar story from Lord of the Rings movie.
I just love geek humor and DMOTR is one of the best examples of it. Great work.