Skip to main content

Posts

Showing posts with the label dwarf-fortress

Act 3 Scene 1

Wait, what? The last post ended with completing Act1 Scene1, with hints to Act1 Scene2. Yeah, a lot happened since. Goblin Camp Some of the last work in the blog was about the Goblin Camp, a revival project of an abandoned source code, which in turn was inspired by a great game, Dwarf Fortress. Since then, I learned more about data structures, and object design patterns. With each enlightenment in programming, I was more and more aware why this code was abandoned multiple times by different groups. I became one of them. This doesn't mean my goal of marrying parallel programming with the great game concept is abandoned: ever since the last communication, I also took a course on GPU programming, and it is giving me new ideas and goals. It just would not be happening with the existing Goblin Camp. More on this in the future. And this concluded my Act 1. How about Act2 My Act 2 began with my Coop placement at Fundserv. It was truly a learning experience, in the best sense of the wor...

Project: Boost-free Goblins, part 3

Ready, Aim, and Fire After the battle-cry , and then calming down to make some preparation , I decided to take the shot. The target: boost::shared_ptr. To Action A quick search turns up that shared_ptr is supported in the STL's memory library since c++11. Well, that seems like an easy task. Let's take our script for a spin. tools/boostrm.sh shared_ptr memory Now I have a bunch of std::shared_ptr replacing the boost variant. Seems like everything is in good order. After pushing it into the github to have Travis CI do the honors of compiling it, turns out, some boost::weak_ptr, apparently derived from boost::shared_ptr, was being casted into boost::shared_ptr, and they are not compatible with std::shared_ptr since that's not what they inherited. Well, after a bit of research, it seems the weak_ptr has a STL version. It seems like weak_ptr needs to go, too. tools/boostrm.sh weak_ptr memory After another push into github, and another build run by Travis CI, it tu...

Project: Boost-free Goblins, Part 2

Last time at the goblin_camp The mad developers went on a warpath to rinse away Boost from the goblins. Loud yelling and crying was involved, 52 of them. But now that all the yelling is out of the way, how should we do this? Repetition, repetition, ... I am personally a very lazy programmer. If I can make computer do the job for me, I would have the computer do the job for me. While hunting down every instance of a library manually is doable in small number, as it was for cstdint, Other Boost libraries are more widely used and require much more effort scanning the text. Text. Text. Well, if we are talking about text-manipulation in sh ... Scripting my problem away My beloved hobby tools If it is not apparently already, I love automating tasks, and UNIX shell scripting had been my go-to solution for any binary scripting needs, especially in the days before I learned to program. This problem can be solved quite easily using few lines of scripts. Caveat We will be making a s...

Project: Boost-free goblins

The headache: Boost Don't take me wrongly: Boost library is a powerful set of tools for bleeding-edge technology. Much of it gets absorbed into the C++ Standard Libraries. The problem lies in our project being inactive for 7 years, which means it is relying on a library that is 7 years behind. Installing such an old library is a chore, and securing a pre-built package is problematic at best. The project is even incompatible with the later versions of Boost. It may have once given the original developers a powerful technology to propel their project in the past, but now we are stuck with clock stopped at 2011. Along with libtcod being stuck also in 2012, dealing with Boost is critical to bringing the project up-to-date. Options There are several ways to address the issue. Option 1 : Upgrade We can read each related source code, research how Boost has modified the relevant function calls, and either fix the expected return type or required input type, This may lead to mor...

Pick up where others left off

Digging through the dirt My fascination with the Goblin Camp, and by extension Dwarf Fortress, continues. One of the first thing the team did was to implement the initial setup of Travis CI to the repository: I made the issue and linked the account for it, and Robert figured out the configuration file and got it to do something. Our plan is to use this to tell us when, in fact, the game compiles properly. It is spamming me now that the build isn't working, but one day, it is going to show me a green light. The next task was to dust off the 7-year old libraries and implement spanking new ones, starting from Boost. So first, I researched on how boost is included into the repository. There seems to be largely three ways to go about it: system-wide installation, copying over the full source code, and using modular source code. First, just to see if it would work, I replaced the old /vendor/boost folder with the most up-to-date version of full boost. It did not work. Well, it co...

Me and the 7 Dwa.. I mean Goblins

Brief Introduction of the Dwarf Fortress The Dwarf Fortress is a well-established, closed-source, free game that has been continuously developed since 2006. It has inspired some of the most famous games, such as Minecraft. It is considered a rouge-like game, and it chiefly relies on ASCII characters to represent various parts of the game, although there had been many successful efforts to add more advanced graphics to make the game look more attractive. Despite the modest-looking graphics, the game is packed with many features including highly complex physics emulation (liquid and solid), path-finding of multiple characters based on various personal needs, and comprehensive mechanical construct emulation. Curiosity that is about the kill the Cat The game is closed source, so how it is designed and scaled is unknown to the public. That said, it seems to be a public understanding that the game, despite having many moving parts, is created to be a single-threaded program as was th...