Sunday, 21 October 2018

How to fork

For those who don't know "forking" is creating a new version of some open source project. But it's important to know also that this term is just a phrase or idiom which is something open source developers say when they don't want to listen to user feedback.

Forking is in theory possible, but it almost never works. Most of the open source projects are linux-based and this is actually a big obstacle for Windows developers. Often the problem is not in the main source code itself, but in required libraries which in worst case require compiling from the source. To remain sane it's best to be a linux user, but the irony is that only crazy people use linux. Those who think the government is watching them when they wrap their joyrod in tin foil while watching Alanah Pearce's cosplay videos for research purposes.

The second problem is that most open source projects are large. It's not easy to fork them just like that. You need to know how to program in the first place and then how to use some of the usual libraries like wxWidgets or whatever in the context of the project. The overall quality and structure of open source projects is poor, sometimes very bad, so it makes forking even harder when the source code is not that readable.

These two problems are the main reasons why we don't see forks. If it were easy we would see forks with projects like GIMP which is slow, buggy and badly designed. You wish someone would fix it, but nothing ever happens.

So why don't the developers listen to feedback and fix their projects? It's an interesting question which calls for wearing tin foil in whatever bodypart you want to. We do have many open source projects which are almost as good as commercial software, but never better. Big projects are run by foundations or similar quite shady groups of people and money is involved in the development in one way or another. Sometimes it feels like "they" don't want to make software better than commercial versions.

Forking is a smoke screen, it's a way to end the conversation about how to fix the project. I believe all bigger open source projects are monitored by people who don't want free alternatives to replace commercial software. They watch these projects and start to ruin them when they become too good. Just look at what happened to Blender 3D. They made the UI much worse and we still have to fight against that ridiculous right button select issue. Blender is run by a strange millionaire who is taking orders from no one, well other than his illuminati friends I guess.

Another strange thing indeed is that most of these so called free open source developers are millionaires. How did they get their money? Even Linus "Rolle" Torvalds is a multi-millionaire and he did what? He took some ancient unix source code and forked it to a new operating system. Where did his money come from? Who paid him to create an operating system which would never be a viable option for commercial systems, but would rather confuse everyone for empty promises.

I think the whole open source ideology was ruined by "them", the people who did not want it to succeed over commercial software. Let's hope that some day we will learn the truth and begin a new era of open source development.

Friday, 27 July 2018

Roguelike definition – what are we missing?

There is some debate about “the definition” of a roguelike. Some argue that a roguelike must meet a list of essential features, but even those features are different depending on who you ask. What I think we are missing is the feel of the genre. It’s easier to feel than you would think. When we see a platformer or a RPG we can feel it from couple of generic features. Platformers have platforms you jump on and role-playing games have a RPG system with character classes, stats etc.

I feel that the essential feature of a roguelike is a top-down tile map of the game world with turn-based tactical gameplay. The gameplay should also have some role-playing features, but to increase the feel it better have a complex role-playing system similar to Dungeons & Dragons system. When we look at a roguelike as subset of role-playing game it’s easier to get the proper feel about it. The difference between a regular RPG and roguelike is randomly generated game world and permadeath, although it’s possible for a RPG to have some random features and permadeath. In similar manner some roguelikes can have static locations and various ways to restore the character after death. Even the classical roguelike Nethack has ‘bones’ for giving back some items from a previous character.

ASCII graphics makes the game feel more like an old school roguelike, but it’s not a decisive feature. The reason roguelikes had ASCII graphics was mainly a technical limitation and in broad sense ASCII tiles are “graphics”, too. They are just a way to represent something. Some roguelikes implement both ASCII and tile modes which work interchangeably and make no difference to the gameplay itself.

It’s quite easy to feel when the game is not a roguelike. It may look like one, but it’s often missing the complexity and size of so called major roguelike. These games have their own genre title as roguelites, but in some cases it can be argued if they are simply adventure and/or (action) role-playing games with some roguelike features. Games like Spelunky are sometimes thought as roguelikes, but for me Spelunky feels a lot like platformer game, it just has randomly generated levels. Random generation is not a feature only for roguelikes, it can be used in all genres. What makes it a feature of a roguelike is the proper context.

The problem of a flexible interpretation has been a saturation of the genre with games that in fact are not roguelikes. Some developers use the genre name in marketing, because it’s easier to get visibility for your game when you have a clear genre for it. When even developers think their game is a roguelike the genre has regressed from major roguelikes as standard to something else. It’s “acceptable” to define your game as roguelike when you have one or more features of a roguelike taken out of context.

Let’s be honest. We can all feel when the game is a roguelike. It’s all that matters, for both developers and players.

Wednesday, 2 May 2018

Nethack 3.6.1 thoughts

I think this release was slightly underwhelming. They fixed couple of things and it took two years. On the other hand it's understandable when you look at the mess which is Nethack's source code. It's not easy to maintain I would guess. Even so I was expecting more gameplay changes, new stuff etc. but it looks like they "freeze" this version branch and the next one will have more changes so people who want to continue play 3.6.x can do that. There are people who believe some specific version to be the only real Nethack.

The way player character's name is highlighted when your HP is not full is a nice feature, it's something you'll notice right away. Other thing I noticed is that $ keyboard command doesn't work when picking up items, but I did comment out "Finnish keyboard" section in defaults.nh, maybe I should try to comment it again to see if it works. In Finnish keyboard $ is typed as AltGr + 4 and some other keyboard commands are also different. Also, the .exe was acting strange way when I started it the first time, it hanged for like five minutes and then Windows 10 smartscreen catched it, but I ran it anyway. It may be just the smartscreen, it's warning about everything.

Even I'm whining I actually like Nethack. It's really the only roguelike game I'm playing even I'm not a good Nethack player. I know what happens in the game later, I've seen gameplay videos and tried in wizard mode, but I probably like the beginning before Quest more than anything else. It's the way things start to go, sometimes you get very lucky and sometimes you get hardships. The first time I tried this version I managed to blow up my pet with a gas spore, and then turned into a werewolf. I also learned something new: when you kick a pile of gold it scatters around. I had to try that to pick up only gold, because $ key doesn't work.

One of the reasons why roguelikes are nice games is that you don't have to win. At least it's what I think about the genre. Those people who want to win will push it through by learning strategies you need to win this game, but I think when you don't learn them it can be just as fun.

Tuesday, 1 May 2018

GIMP 2.10.0 review

The first impression is positive (using Win10 version). It's faster than before and seems to use only small amount of cpu resources which is really great feature for a paint program. In comparison when you run something like that awful Windows 3D Paint it's way much demanding for the processor. Gimp is quite large software with 8000+ files so it's surprising how snappy and fast it feels.

It's designed mainly for image manipulation, but I think it's missing an opportunity to be more than that. I would not use it for serious art design only for the reason it has a context menu in right mouse button. And you can't configure it to anything else. For painting it would make much more sense to have a secondary color, eraser or something like that in the right button.

It also could have a "tiled" grid to show tile areas (when drawing tile graphics) with regular grid you could configure to pixel size. It does have a small preview for image, but that preview could be configured to show a small area in repeated mode to preview tile seams. Those are perfectly possible features to have, but I just know they will never do it. Another obvious but missing feature is any kind of shapes including a line (which is hidden in form of shift+pen).

Strangely Gimp does have a new brush engine which is quite nice so it's weird that they support painting that way. Also, another strange thing is that you can't put color editing on tabs, but there is a palette for selecting colors. When you need a new color you have to edit it on a pop-up window each color at a time. All this makes the software feel like it doesn't know what to do. Is it only a image editor or is it also a paint program?

Monday, 16 April 2018

Planning a new PC

My current Windows PC tower has served eight years and it's an affordable Acer. Not bad at all, but looks like it's getting into the end of its natural lifespan. I've tried to clean it, but it's running quite hot and the HD is going to fail some day, because Windows 10 is rotating it all the time.

Most towers these days are quite bad, for example all these small form cases. You just know they are going to fail keeping everything cold enough and it's harder to add parts or replace them etc. They still make regular size towers, but prices have gone up quite a bit. I guess one reason is that thing with video cards and maybe memory chips, too.

My plan is a quad core i5 with internal video chip, and then get video card later if it's needed. HP or Lenovo, they both make towers in that price range (~800 €). I think Acer is soon releasing a new range of towers, at least there seems to be a new model in their homepage, which doesn't even look that ugly. I could wait, it's possible that Acer is going to be 100 euros cheaper than other brands.

I hate technology. It's weird, I know. I do like programming and game design, but everything tech related makes me just sad and depressed. In case of PCs you pay shit ton of money and there is always something. It's like gambling when you get a new PC. Is it going to be fine? Does it have some annoying feature or part you have to change?

There would be more options if it wasn't this gaming bullshit. I can't stand how ugly those gaming computers look even if they had good options for the price. Everything is angular so you can't even put anything on top of the tower. Maybe I will change this blog to a lifestyle blog, me complaining about everything tech related.

Wednesday, 4 April 2018

Teemu on Github?

Lately I've been again working on Teemu 1.3 which seems to be another neverending project. I have thought about putting it on Github, but it would be for no good reason at this point, since while the project can be compiled there is no gameplay yet. You can walk around and do stuff, but everything is a work in progress.

I'm not sure if this needs to be asked even, I could just put it there. I'm sure no one even cares if it's unfinished or not. However it could be somewhat interesting at least for myself to track changes I make in this kind of project which is way larger than The Prowler. Teemu is starting to reach a role-playing game with its RPG system stub placed in the code.

So I guess I might put it in Github after cleaning up the mess with namespace names (I made several namespaces finnish which was not that good idea after all). It obviously will ruin surprises I've been planning for the game, but again like no one cares. People wouldn't even notice it's there.

Tuesday, 20 March 2018

Follow The Prowler on Github

The procedural style project I've been talking about is The Prowler (project name). I decided to put it on Github:

Although it feels like I entered a rabbit's hole when introducing myself to Git. The process is automated in Visual Studio, but one thing I've not managed to figure out is how to remove .sln and .vcxproj files from the repository. When I look it seems I wrote vxproj to .gitignore, so there is one error. But .sln is in it and VS still wants to include it in the repository. There doesn't seem to be possibility to remove project files from VS project (which does sound a bit weird) same way as you would 'exclude' a file from the project (not in the project, but still exists as a file).

I guess it's ok to include project files for those who use Visual Studio, but if I study git for 34 years it could be possible to learn how to remove those files. It sure feels that nothing comes easy when talking about git, an open source... thing.

Now I begin to understand why open source developers never get anything done. They are just wondering all the time how to do something simple and trying to figure out the exact proper sequence of commands to use.

Wednesday, 14 March 2018

Modules with procedures

Experiences so far from a procedural C++ game project have been somewhat interesting. It's divided into modules which at the moment are Datatype, File, Function (for generic functions), Gui and the main module. Most of the code is in the Gui as you would expect. What I have learned is that procedural code seems to be "shorter" than writing classes, but it looks strangely messy. Maybe it's just that I don't quite know how to write clean looking procedural code.

Another interesting part is the Datatype class where I made a decision to use inheritance which may sound weird in this context. I'm using as much inheritance as I can, for example Rectangle class inherits from both Point and Size classes. And I have a feeling this is how I should have done this in the first place in my other projects as well. Using inheritance in this kind of limited context is easy and doesn't seem to have any problems this far. I had to name generic "Set" functions for Point to "Locate" and for Size "Resize" which is I guess better way to describe them. Using inheritance avoids repeating type of data and code for datatypes.

The graphics engine which is less than 300 lines of code in Gui can already display everything it needs: background tiles and letters with different colors. The next step could be the division of screen to three areas: gameview, message window and stats window.

Sunday, 11 March 2018

My 7DRL plans

I think there is 7DRL season going on at the moment, I'm not sure. While I'm working on my main three projects it could be "fun" to write a smaller game. The problem you have with larger projects is that they become less and less manageable which is something that just happens. For a reason.

I do have a fun plan for this "7DRL" project in which I'm trying to write C++ with procedural style (also known as C) but with some classes where they are the most logical solution. The code is going to be more "modular" as more functions can be stacked in one file, rather than C++ style two files per class.

I wouldn't do this without a great idea for gameplay which I have had for couple of years. For simplicity I'm going to use ASCII graphics with SDL2, similar to what I have in Teemu. In fact I'm probably going to use Teemu's GUI (+fonts) and change it to procedural style.

Another reason I'm doing this is that I really need some time off from my large projects.

Sunday, 18 February 2018

Language design: class

With my limited intelligence I had an idea to start designing my own programming language. There are some examples of the syntax in Roguetemple forums 'My language' thread that has had zero interest. I don't know, I'm pretty stoked about programming languages.

When it comes to really important stuff in a language it's how to manage data with functions and/or classes (or something else). My current understanding about class is that it's a nice theoretic idea which most often simply breaks in real life situations. That's why we have those getters and setters and the class can be exposed or it's not going to be neatly modular piece of code. Also in my experience inheritance is way harder than people think at first.

Functional style has different way to handle data which also is highly theoretic when you think about so called pure functions. In reality most functions are what experts call procedures in that they change whatever data is input to them.

My vast experience tells that both classes and functions have their problems and also both work better in different situations. The obvious question when designing a new language of course is there a way to solve those problems in some way? Or do they even need to be fixed, maybe they simply always exist no matter how you try to prevent them. It's like removing pointers from Java, did that actually fix anything important? Sometimes languages try to prevent the dumbness of programmers and they take it maybe a bit too far.

I've thought about one way to relieve data handling with something called resource block which is a collection of data that can be optionally limited to some classes. This data is like static data in C++ that it's initialized when the program is started, but it could be possible to change it. I'm using that kind of data in my C++ projects all the time, but there isn't any kind of built-in way to handle that data in C++, you have to use namespaces to hide it etc. By the way, I don't think I'm going to have namespace in my language, because I think it's fixing a problem that should not be a problem in the first place.

Monday, 5 February 2018

Code::Blocks 17.12

There is a new major version of Code::Blocks after a substantial amount of time passed from the previous version. It had only one small problem when I ticked off wxSmith plugin during install then ThreadSearch and lib finder didn't work (for whatever reason), but you can fix that without reinstall by removing those .dll files from the plugin directory.

In Windows we have a weird situation with C++ IDEs that there are only two of them: Visual Studio and Code::Blocks. There are others, but they are not that good. I've learned to use both VS and C::B at the same time for my projects. I think it's useful, because both compilers (VC and gcc) find different kind of issues from C++ code which makes it more portable and standards compliant. VC is much more loose about some rules, so it's good to double-check with gcc.

Since Bill Gates left Microsoft the company has been in trouble with Windows, because it's developed by morons, so the same fear is cast over development of Visual Studio. I think VS actually has some problems already, mainly it's becoming quite sluggish and slow in editor UI side. The best thing about VS is the debugger, I think many people agree me on that. It just works, unlike gdb. However I like C::B because it's faster in many things like loading projects and the editor UI is sharp. Since I don't use debugger that much I'm often using C::B.

I think the management window and projects tab could be better with split to headers and source files (for virtual folders also). It would be nice to somehow tag files (and folders) with different colors or other ways for various reasons like showing unfinished files with red color etc. Then you could show/hide files with those rules. I actually suggested this to the developers some while ago, but they didn't get it. Or as typical open source developers they just refuse to listen any feedback and ideas.

Thursday, 1 February 2018

The daily maze news

The maze routine itself works, but it has to match in the rest of level creation. The way I accidentally solved it in the labyrinth level (the only level using maze for now) was make the maze routine "continue" from itself, the tiles it has created in previous "hives". A hive is one instance of maze diggers which are the corridors of the maze left by replicating diggers.

Sometimes it happens that everything runs into a dead end, usually a digger winding on itself. The fix for that is create hives until X number of tiles created. I found out that the number of available wall tiles divided by 3 gives a good result. The reason for that only roughly 50% of maze area is floors, the rest of it is walls. Not a surprise there. But if you divide it only by 2 it seems that the routine can't fulfill the requirement of mazes to create and runs into an endless loop.

There are some questionable things in this method where I'm first creating couple of rooms and then shooting mazes from walls of those rooms. Most important question: are rooms always connected by mazes? For number of test runs it seems to be true, but I have a feeling it could fail in some rare situations. If it happens it's still possible to check each room for connections and create them later with manual style, but I'd rather wish the maze routine work in reliable way.

Sunday, 21 January 2018


The structure generation of Cornucopia is ready, but still needs some tweaks like room types and interior generation. Maybe the smallest room size could be 5x5 rather than 4x4, because smaller rooms tend to squeeze themselves into strings of rooms which don't always look that great.

The green rectangles are yards. It's a feature that can come after a room (as the yard of the room) or as first feature. I think it's a rare, well, feature in roguelikes to have yards in the dungeon.

After those tests I added two different room types randomly to make it more colorful and it does work quite nicely, when you have more room types than just one. At the moment there are only three features: room, yard and corridor, but I think it already looks nice. The interior is more important than the "shape" of the feature anyways.

This routine is probably going to replace 'small room' routine used in various level themes and I like the idea of "layered" generation starting from basic dungeon and then adding stuff like this.

If there is one thing that bugs me it's that backyard in bottom right corner of the screenshot. It doesn't seem to have a door connection which could be some kind of rarely occurring bug. So maybe it would be wise to create important stuff like stairs only to the basic cave area.

Saturday, 20 January 2018


It was somewhat cold this morning (-15C) but also foggy which is quite rare at least in here. It's creating some spectacular looking frost on trees:

As imaged using my potato Fujifilm X10. Frost is like strings of crystallized snow which I guess is formed when that warm foggy air is attached to end of the string in wind. Or maybe I'm just guessing.

About that Cornucopia generator. I've fixed double walls which is generating quite nice looking rooms, since some of them become irregular (not strictly rectangular) and also made the corridor creation. In that I realized you can't create corridors before the next feature is made so corridors need a special routine to allocate their space with Restricted mask type. The only things left are different sizes for each feature type which has complicated the routine somewhat, but in the end it will be useful to have, and then determining which kind of rooms the generator is creating.

Friday, 5 January 2018


Finally starting to get somewhere with the feature creator which there is a class Cornucopia for it, because my naming skills are perfect. I had problems with reverse connections and the way next feature is adding a connection to previous feature later. I have two examples to show with rooms as features. Later features can be anything, but mostly corridors. The minimum size of rooms are 5x5 tiles, but they could be as small as 3x3 to squeeze them in smaller spaces.

This first example is actually a very rare "failure", because it has five starting points (rooms) as feature parameters, but no clones at all! I was amazed when I saw this, but it's possible that rooms are made in a place where they can't clone, because they can be only made in a solid rock, not on top of the basic dungeon which is a drunken walk generated cave. However, when you increase starting points it's less likely for this to happen.

This second example is more from extreme end where almost all free space is used by clones that all started from five starting points. It's possible to reduce this kind of generation by giving each feature less than 3 exit points to only clone from 1 to 3 directions randomly. Also the percentage value of created floor tiles can be a limit to the amount of features.

Sadly, this routine is far from ready. One problem seen here are double walls between rooms which are the result of features looking for free space without generating over the existing room walls. But it's possible to remove double walls later and expand the space of one of two rooms sharing a wall.