Uncategorized

Because this horse ain’t dead enough… a inquiry into the meaning and purpose of games

Words feel strange to me, and I find them difficult at times.

Years ago, made use of Webster’s/oxford dictionary to give of their definitions and pick it apart pedantically.

I have grown out of that.  I now give greater credence to a word’s origin. In my word origins, I try first to seek a non-Latin, non-Greek source of the word I wish to explore.

In English, after hundreds of years of borrowing, the Old English words often elude us. Old words like game, have such history – related to a old German word that means “glee.”

For the past 1000 years at least, a game gives us joy or causes us glee, if we take to heart the word origin.

At least, until we hit the digital age.

In the modern context, the commonly accepted working definition of “game” can be viewed as “a piece of interactive media.”

When I talk about “games,” I have portions of that definitino that I exclude, even when the Old English “something that makes you happy” definition might still apply or the modern “piece of interactive media” definition might still apply.

As with all beginnings of discussion, when I attempt to define something, I wind up mainly talking about what my definition excludes.

When I talk about games, the things I talk about:

  1. Has an initial state.
  2. Has rules by which that state may mutate.
  3. Requires choices on the part of the player.
  4. Has a way to measure relative success.

Mind you, the purpose of defining what game means provides a starting point for a discussion. Naturally, the definition changes over time.

Really, even the things that look a lot like games, for example jigsaw puzzles(which have an initial state, rules, does not requires choice… the pieces fit where they fit… the activity is finding them, and does not have a notion of relative success… just “done” and “not done” because an incomplete puzzle does not have much merit), can easily become games by setting up a stop watch and competing for time to completion.

You know what has always bothered me about blogs that I have written?

The end. I have made my point, but it feels incomplete somehow. Mainly due to the fact that it wasn’t plotted out in any way. That’s no way to write things. I might as well text or tweet or chat on twitch.

If I manage to keep blogging again, I want to return to the standard three point structure: intro, three points, outro, akin to an essay structure.  I don’t even know if that would work for this topic, and if it doesn’t work for this topic, then why did I write it?

In my writing, I also prefer to use e-prime. So I shall go back and replace forbidden sentences with other sentences that conform to the idiom of e-prime.

Game Development · Roku · Uncategorized

Unicorn and Star… Now With “Levels”

Today, I added the feature of levels to the game.

Each level has an increasing number of stars to gather.

Once all of the stars are gathered, the stairs appear.

Moving onto the stairs moves to the next level, and regenerates the maze.

The game, as such, is still quite fluffy and pointless, but I write for the audience.

Technically speaking, debugging the game on the Roku is primitive, and reminds me quite a bit of the process for writing games for the Cybiko.

Basically, I have my set of scripts written in BrightScript, which I put as somewhere between BASIC and Lua and a little heavier on the BASIC side.

The Roku has a web server on it that allows me to upload a zip file containing my scripts and content. If it upload successfully, it means that the code compiled without error. If not, I have a telnet session that let me know what line was wrong.

Those are straightforward to fix. In the case of a runtime error, however, I get a dump like this from the telnet console:

Current Function:
020: for row=0 to rows - 1
021: y=row*cellheight
022: cell = maze.cells[column][row]
023: screen.drawrect(x,y,cellwidth,cellheight,&h00ffffff)
024: screen.drawrect(x+4,y+4,cellwidth-8,cellheight-8,&h000000ff)
025: if (column=unicorn.x and row=unicorn.y)
026: screen.drawobject(x+4,y+4,context.resources.bitmaps.unicorn)
027: end if
028:* if (cell.star)
029: screen.drawobject(x+4,y+4,context.resources.bitmaps.star)
030: end if
031: for each direction in cell.doors
032: if (cell.doors[direction].open)
Type Mismatch. (runtime error &h18) in pkg:/source/play.brs(28)
028: if (cell.star)
Backtrace:
#1 Function $anon_1f(context As Dynamic, screen As Dynamic) As Void
 file/line: pkg:/source/play.brs(28)
#0 Function main() As Void
 file/line: pkg:/source/main.brs(10)
Local Variables:
context roAssociativeArray refcnt=2 count:2
screen bsc:roScreen refcnt=2
global Interface:ifGlobal
m roAssociativeArray refcnt=3 count:5
maze roAssociativeArray refcnt=2 count:6
columns Integer (2.1 was roInteger) val:16 (&h10)
rows Integer (2.1 was roInteger) val:9 (&h9)
cellwidth Integer (2.1 was roInteger) val:80 (&h50)
cellheight Integer (2.1 was roInteger) val:80 (&h50)
unicorn roAssociativeArray refcnt=2 count:2
column Integer val:0 (&h0)
x Integer val:0 (&h0)
row Integer val:0 (&h0)
y Integer val:0 (&h0)
cell roAssociativeArray refcnt=4 count:4
direction <uninitialized>

There’s a lot of information here, and it is quite informative, but as with dumps like these, one has to learn how to read and interpret them.

Uncategorized

In Which A Grumpy Person Remembers He Has A Blog

Like most blogs ever, I forgot I had this one.

I was reminded this morning when I got a notification that someone subscribed.

Oh yeah…. I had a blog.  Let’s see if I can remember how to log in….

Oh hey… I can.

I should probably post something, but not a “sorry for not posting, and I’ll do better post.”

Here’s a screenshot of the game I’m working on:

ss20200226

And I took it fresh this morning.

You wanna watch me make it? I stream its development.

You wanna play a recent version (still in development, and not complete)? You can find it on itch.io.

And I’ve got other things on itch.io to play.

And I have rejoined Twitter.

I also keep a lot of code on GitLab.

There. Now if I don’t post for another two years, I mentioned pretty much everything.

Raspberry Pi · Uncategorized

Suddenly, I find myself using VIM

From time to time, I wander into very different directions. Last week, on a whim, I decided to buy myself a Raspberry Pi Zero W with the pins soldered in (because while I technically have the capability of soldering the pins, my practice with soldering is practically nil).

Also got a case, the joy bonnet (makes it like a game controller), and an mini HDMI adapter.

And in the last few days, I have done things that I never generally do. I’ve burned images onto SD cards, I’ve dinked with config files. I’ve puTTY’d and sudo’d.

In other words, I’d say I’ve been having a Flintstonian “gay old time.”

Originally, I had been thinking python, and indeed I had been learning python and pygame. After the number of languages I’ve learned and used over the years, I give python the following summation: “it’s a module based language about scope and indentation level(really, the two things are identical in python), and a rather useful ‘in’ operator”, and I’m certain I will be glad I familiarized myself with it.

But ultimately, I said to myself, “Why don’t I just use C?”

With a few brief tutorials, the syntax for gcc is elementary, and after employing a well chosen makefile template unnecessary.

So I now ssh over the network to the pi with puTTY, work in VIM with my .c files in tabs. It works fine, with an occasional :!make. I’ve got tmux on my list of things to get more familiar with.

Mostly, I’m reminded of when I was using Turbo Pascal 5.5 in High School in 1991. No intellisense. No real debugger except printf statements.

I even took a brief look at framebuffer coding. I cleared the screen white and gray.

Normally, especially with my day job, I’m looking for a simple high level library that does all of my work for me.

When I’m doing Pi stuff, I’m the exact opposite. I’ll certainly use a library. Heck, <stdio.h> is a high level of abstraction above the metal. But I like the low level stuff I get to do with ioctl. It dusts off a part of my brain that used to NEED to do these things.

And it’s fun. Plus, I’m not afraid of gcc or VIM or gpio pins or debouncing.

My coworker mentioned that I have all of the skills necessary to come up with a completely new arcade cabinet. I have woodworking tools. I have the ability to write code. I can wire up a breadboard to attach to joysticks and buttons to gpio pins.

I don’t know where this is heading me, but I know I won’t be any worse off for doing these things.

 

 

Uncategorized

F# is bad for Game Development

Yes. The title is misleading. I will explain.

It isn’t just F# that is bad for Game Development. It is just the functional programming language I’m most familiar with and can actually use “effectively”.

To be more complete…. functional languages are bad for game development.

I had two main problems with the F# community. First, I was told a number of times that my code wasn’t pure enough, functional enough, etc. Because it wasn’t, and could not be, because I was making games.

The second is because the group used terms like inclusiveness like a banner of pride, but is really a cult that expects normative behavior. This will be my final mention of this. Don’t talk to me about it, you will get a “cool story bro” at best or a “get off my lawn” at worst.

Back to functional languages being bad for games. Why do I say this?

It would be more accurate, and less accusative, if I were to state “game projects are a poor choice for functional languages”.

And even so, you might ask why.

Let us explore, for a moment, some of the things that F# and other functional languages are principally against:

  • Global state
  • Side effects

Games are pretty much nothing but state, and must be considered often as a whole. Even in a simple game like checkers, the state of the game must be considered as a whole. You don’t perform operations on pieces without regard for the rest of the board.

And video games primarily communicate with the user via graphics and sound, which are both side effects.

So games are made up of nothing but state and make all sorts of side effects as their very purpose.

This is not to say that it is impossible to make a game using F# or another functional language, but its sort of like making an imperative language do functional things. It wasn’t built with that in mind.

So like I said:

F# is bad for game development.

 

 

Game Development · Uncategorized

JetLag 2017 on GameJolt

ss01

Yes, that’s right. JetLag 2017. Like all the other JetLags, but in 2017.

Play it Here!

Naturally, when I make a new JetLag, it means I’m exploring a new platform for development, and 2017 is no different.

This years platform is Defold, a lua scripted scenegraph manager tool.

It touts itself as the “Ultimate Engine For 2D Games,” which is a lofty ambition.

Pedantically speaking, the world “ultimate” means the same thing as “final”, and non-pedantically, it means that there will never be a better one. Neither of these things are true, of course.

This version of the game sits up there on GameJolt, right next to JetLag 2016, made with a similar tool, Godot.

If you’ve followed my history at all, you will know that I’ve tried just about every tool there is, every platform there is, and most of the languages out there. You might ask the question, what am I looking for?

I’m not actually looking for anything. Certainly, I’m not looking for the “ultimate” anything. I learn things as an end unto itself.

 

Uncategorized

Angular JS and GameDev?

Two years and three days.

Yeah. Two years and three days since my last post.

I’ve been busy with my day job, mostly, but that doesn’t mean I’ve neglected my game development.

Since then, I put in a few Google Play games, one Ouya game.

And now I’ve gone and entered a game jam, and I’m about to enter another.

For the last few years, my day job has consisted of web development, and that naturally leads to the use of JavaScript frameworks.

One that I did not use in the course of my job was AngularJS, though I had heard a lot about it, and there is a larger community and I figured at some point I should learn it.

So after poking around, I wound up making Bottomless Pits and Potato Salad.

papsscreenshot

 

And I am now looking forward to the text jam coming up in a few days.

I’ve even started putting some of my old stuff up at itch.io.

One of these days, I’m going to try out Quintus, too.

And host the stuff on heroku.

Uncategorized

Splorr! (Opening and Closing Doors)

Splorr! Now has the ability to open and close doors!

And I think I’m doing to stick with the tap-fest that is my UI.

At first, I was thinking that I wanted to be able to have the player accomplish tasks with a low number of taps, ideally 1 tap for each action.

Then I realized that I don’t, actually. Let the player tap seven times to perform an action. It’ll make him feel like he’s accomplished something.

For example, I’ll take you through a typical action sequence upon entering a room.

In the following image, I’ve just entered a room:

At the moment, I’m facing a wall, the door I just opened and went through is behind me, and there is a passageway to the right.

I don’t want to go back to the room I was just in, so I decide to turn right and go through the passageway.

First, I tap the “Move/Turn” button.

Now I tap turn right to get the following:

Now that I am facing the right way, I move forward in two taps, first by tapping “Move/Turn”:

And then by tapping “Move Forward”, whereupon I will see the following status:

And now there is a closed door in front of me.  To open it, I need three taps.  First, I tap “Room”

Then I tap “Doors/Walls”

And finally tap “Open Door”.

And so, the game becomes a bit of a micro-managing tapfest, but I think that’s what I want.

 

Uncategorized

Stock Market Game Released

Today I finally got Stock Market published.

You can find the support page here.  It has a the googl play badge.

While still a long way from being highly engaging, these games are getting more complex as they get more “sophisticated”.

However, I’m still not done with the “show some text and push buttons” genre.

I am, however, rather sick of the games where the outcome of the game is totally random.

I might as well be making a slot machine game (which is actually on the list, btw, but as a graphical game).

In stock market, I have so far not seen any reason not to do the following:

Buy one stock of each type.

Click “end turn” until the game is over.

It isn’t like there is some data upon which to base how well a stock can do.

Which means I may as well not bother making a choice at all.

Games are about choices.  Well, compelling games are about choices.  Sometimes the only winning move is not to play.

Next on the docket: Splore!  Of course, it may not come out next, but I want to work on it next.

I don’t really want to say too to describe Splore, or I’ll tend to have a lot of text written about a game that doesn’t exist.  The basic idea is a text based HamQuest.

Uncategorized

Russian Roulette Completed

So, I managed to get RR done today.

Rather than my “one activity=one game state” idea that I used for GMN and RSP, I went with a single activity for everything, and using setContentView to change the UI for the states.

Generally, it worked extremely well.

Except.

The one edit text I was using (the one where you type in the number) first wouldn’t cause the soft keyboard to come up.

Fixed that.

Then the soft keyboard wouldn’t hide unless the “back” key was pressed.

No good.

Eventually, figured it out, mostly by googling code until finding something suitable at stackexchange.

Had to hide it myself.

Not a big deal, but it was not something I had to deal with when it was one activity per page.

Maybe that was the better way?

Dunno.