Fundamental Reconditioning

Selfie

Selfie

There is evidence–that I think most people are aware of at this point–that posting certain kinds of content on the internet is a sign of a narcissistic personality. Though I would argue that there is a certain breed of teenager that lacks the self-awareness to even know that this is arguably a bad thing. Duck faces in selfies are only a particularly visible manifestation of this weird tendency in today’s youth. A culture of young people brought up in the digital age without actually understanding what that means and being absolutely utterly clueless about how it all works.

Digital natives? Not a chance. Kids today don’t know how a computer works any more than grandma does. They know how to operate an interface. They understand how to swipe and to text and to post pictures. I have had students who had never actually realized that Clash of Clans is a computer program written by humans. Completely oblivious to the fact that computers are really stupid and need lots and lots of human hours by smart people to be made to do anything useful at all. Or anything entertaining. They don’t get this. When something goes wrong with their computer, they don’t know how to fix it.

One day, I had a drove of iPhone wielding sophomores eagerly awaiting new iOS version drop. Talking about how sweet it was going to be. The weird thing about this is that while I get that they were excited and had I an iPhone, I might have been excited as well, but I feel like we would have been excited for completely different reasons. They were excited because the icons were getting a makeover. The physical feel would be different. I would at least be able to temper my expectations with the knowledge that those sorts of changes are purely cosmetic. A software update is still just a software update. It’s just company doing its job, maintaining base code, expanding functionality, fixing security loopholes, or maybe introducing new ones for the government to exploit. It’s incremental. So what if the icons got a makeover? It’s still basically the same device with mostly the same functionality. What’s cool is the under-the-hood stuff. Or at least, it’s the stuff that I think is cool.

Lollipop gave the Android OS a new Java runtime which is arguably a huge step, but in the minds of everyone out there who has a Galaxy S5 holstered at his/her hip, it’s irrelevant. What do they care that apps will load faster or that ART has faster and less frequent garbage collection, or that it compiles to native machine code! They don’t. All they actually care about is that it seems different and maybe just a little better. Without the accompanything interface tweaks and reskins and the big Material Design push, they would not really be aware that anything had changed. It might feel smoother. It does feel smoother. But that would be it.

And arguably that’s the point. We build interfaces to sheild people from complexities. We as programmers build interfaces to sheild ourselves from complexities as well. It’s why we like frameworks. Frameworks keep us from rewriting the same boilerplate code every time we want to build a web page. Frameworks and IDEs increase efficiency dramatically, but they also make us lazy. Interfaces make us lazy. They make us forget (or not even be aware) that (for example) the tcp/ip stack is a monumental mess of poorly documented, convoluted spaghetti code.

spin-onehalf.com used to have a different theme that was written entirely by me in HTML, PHP, and CSS. It was really great in its heyday when I first built the blog, but it was time for a new interface. Something with a more modern look. And so I thought about building my own from the ground up again. But you know what? My heart wasn’t in it. So I used one of the WordPress defaults. And I don’t even feel bad about it.

Oh, sure I’ll customize it and put my banner ads back (which you people never click on anyway), and add personalized header bar and maybe some cool bootstrap stuff, but the underlying code will stay mostly as it is. I will save reinventing the wheel for another day. For another website. So it’s fine. I am being lazy. I am using an interface to get something done rather than putting it off. Am I no better than the selfie-posting teenager? Maybe a little bit. At least I have a bigger vocabulary.

Wo denkst du, du gehst?

He shoots, he scores!

dominantSpeciesGUI6

I don’t suppose that in the entire history of development diaries, there has ever been a more detailed one for such a tiny hobby project. I mean, I Kickstarted Shadowrun Returns and their dev diaries are often months apart. And they are a multi-million dollar project. As of this writing, there hasn’t been a peep from them since January.

Anyway, it’s not like people are reading this right now. This is something for me to preserve for posterity. Sort of a chronicle of my attempt to become a computer programmer and game designer in less than a year from scratch at the age of 31 (now 32). Call it a quest. From God. Or Shiva. Or Quetzalcoatl. Yeah, probably Quetzalcoatl.

Anyway, from the screenshot above, you can see that a scoreboard has been implemented, which reflects the variable starting point totals that you get with a random board setup. I think the colors look stupid at this point, but this isn’t about beauty, this is about functionality.

Also–and you can’t see this from the screenshot–the action board can now be dismissed at will by clicking the button on the bottom of the screen that looks like an eyeball. It’s actually a player pawn icon from the game board itself. The other two icons are currently placeholders for the two other dismissable/summonable HUD elements.

That’s where I’m at. Getting tedious, but still fun.

Ich bin die Dunkelheit, du bist die Sterne.

Ladies and Gentlemen, we have a HUD

dominantSpeciesGUI5

Every time I click ‘run,’ there’s a very high chance that the program will throw some sort of exception. And, since I’m a n00b, there is a likelihood not statistically different from 100%, that the exception will be a nullPointerException. I don’t know why. Apparently, every time I declare a new variable, I have this annoying tendency to forget to initialize it. Considering I initialize all instance variables to null, and then just tell myself that I will initialize them in the constructor (or elsewhere), I just forget. In the case of this HUD, there are some arrays that are supposed to be, basically, null. At least for the time being. So I have a subroutine that generates sprites to render and if it doesn’t find anything there that needs rendering, it throws a nullPointerException. I fixed it though. The program no longer tries to generate sprites if nothing is there to be generated.

Anyway, what I wanted to say, was that, since I’m always expecting the program to crash on load, when it doesn’t and, indeed, works exactly how I want it to, my heart does this weird little leap and there is a sharp intake of breath. It’s pretty neat. I’m shocked and then elated. And then I remember there’s so much more work to do.

What you’re seeing here on the right is the worker-placement board. This is important since this is, technically, a worker-placement game. It’s the place where the players take turns choosing actions to perform each round. It looks complicated, but it isn’t. The super neat thing is that the action-board renders independently of the game board. I can move the game board around and the action board stays still. There are two or three more things to add to the UI and then I can start implementing more functionality. And little things like game rules.

Ich wünschte, du wärst schöner zu Tieren.

Elements.

dominantSpeciesGUI2

Just a quick update. Once you get this stuff figured out, it seems to move along quite nicely. The elements are now rendering, as is the initial glaciated hex. Next task is to get player pawns rendering and then I will add the HUD.

I should point out that, while I can’t show you here, I can drag the board around with the mouse by right clicking, which is pretty neat. I can also zoom in and out with the mousewheel which is even neater.

It’s not completely smooth yet, but the crazy thing is that I know how to make it more fluid but it’s a low-priority task. What that means is, my workflow has become priority-based. There are multiple things that I know how to do and I can prioritize. This is very different from my usual hobbies (like writing fiction), where there’s a more or less linear progression. I could jump around from scene to scene, but I usually don’t. It’s a strange feeling and it has forced me to keep a small notebook full of things that need to be accomplished.

And here’s the kicker: when I get bored with one task, I can actually move on to something else for a while, which is something that is something that I could never really do when writing fiction. About the only thing that I could do when writing to alleviate a boredom-block would be to go back and edit (which is certainly not a bad thing to do, and is something that I honestly enjoy from time to time, it’s just… this feels very different.

Anyway, things are moving.

Nur das Licht fantastisch.

All the little creatures!

dominantSpeciesGUIpoc

The data structure which will represent the game is, for the most part, complete. Of course, this is the mathematical model that represents the state of the game at any particular time. Specifically, the very beginning. The functions and interactivity are not there yet. All the user can do right now is open the game, start a new game, interact with an option panel to determine the number of players, their colors and respective animals, and then begin the game, after which the randomly generated world will appear.

Remember, this is just a board game, so there is not procedural generation here. The terrain tiles are drawn from a deck of tiles (in Computer Science terms, it’s a Stack!).

But this is huge for me. The damned thing is rendering. From here, my path is clear. Establish game states, demand input from the user, and start keeping score. The UI is proofed. I know how it will work. I can present the world to the user. It’s… really something special for me.

I have also added a new feature to my workflow on this project. Git. It’s…remarkable in many ways. I wanted to install a git repository here on this domain, but since this is a shared hosting plan (the cheapest possible plan available), and I would have to pay about 3 times as many dollars for a VPS, I cannot do it. I’m not sure I’m up to the task of running a VPS, to be completely honest. So I’m hosting the git repository over on assembla and it is working out just fine. They aren’t charging me any dollars and it has completely changed the way I work on this project.

I used to talk a lot of politics and even discuss some science on this blog. I haven’t in quite some time. That’s not because I’m not still interested in politics. I am. I just hate it right now. Maybe later this week I’ll expound on that a bit. But I might not.

Be advised: New link on the sidebar to Sean Froyd PhD, a colleague and friend who blogs way more than I do and often has interesting things to say. I’ve been involved in some of his projects in the past. And there’s also the possibility of joint work in the future. So he’s up there on the bogroll!

Ninja edit to the Bogroll: Notes from the Apocalypse. Some very interesting projects from my good friend Dr. Quaddle, a doctor after my own heart.

Überprüfen Sie sich, bevor Sie sich zu ruinieren.