Discord, Socializing, Moderation, and Events

Years ago I discovered the program Discord, a free server hosting software originally aimed at gamers but has since broadened its aim a bit. At first I was only interested in using it to keep in contact with a few friends and as a place to have voice chats during games, but as the years went on I broadened my own horizons a bit. I am an introverted person, as such putting myself out there and talking to people can be difficult for me. But eventually I found a community I clicked with. At first it was simply a server for a YouTube creator I liked, with several text channels relating to the various types of content they make (Overly Sarcastic Productions, if anyone is curious). But then the YouTuber started publishing their own webcomic, and shortly a new channel was opened for discussion of that comic. And my interaction began to ramp up.

Now that I had something I was interested in I could post more freely, and I did. Discussions of plot developments, talking about the world building, and giant posts about theorizing where things were going in the story. I was having fun, and finding people I got along with. Then one of the regulars told us all something fun: they were making a fandub of the comic, and had made their own server to organize it. Needless to say I shortly joined that new server as well. As time went by the server became more of a generalized “fan server” as the fandub went further and further on the back burner, firstly because the organizer needed to focus on college, but also because the pandemic complicated things. But the server’s shift meant it could keep going even without the fandub… with one small issue, the server master could no longer manage the number of members on their own.

With that in mind, Canine (the user name of the server master) put out a call for applications to be server moderators. I waffled for a bit on whether I would apply, finally squeaking in after the last minute. My thought process was simple “If I don’t like it I can quit. And besides, no guarantee I will even make it.” Not sure how other servers make the decision but on this server the mod candidates “campaign” for election, eventually culminating in the server members voting for who they want to be the moderators. However the final decision is in the hands of Canine, while he takes the vote into account (I think the vote and the final decision have always lined up so far) it is their server and they need people they can work with. As you can no doubt guess I made it, a bit under 2 years ago I became a moderator of the server. In the time since, a few changes have been made to the system: we added another election cycle  when we needed more moderators, leading to a twice yearly election with half the mods up for reelection each time. And Canine talking with the Moderators (not up for reelection) to decide who makes the cut. I have been the longest serving Moderator on the server and I seem to be doing a fairly good job.

Over time the server has taken on a bit of a life of its own. And one of the things we have started doing are semi-regular events. These range from holiday art events, to putting together a two year calendar spread, to several word games, and even book readings. And so, after gathering my courage, I started readings books for the server. twice a week I read from two books for an hour at a time, usually finishing 1-2 chapters per reading based on the book. I also record my readings… but for now that is just a “because I can” thing, as distributing those recordings could get me into trouble around copyright. But I have kept this up for over a year, so I am more than a bit proud of it… even if I only had one listener for a while, but an audience of one is enough to make it worth doing. In my capacity as a Moderator I have also helped a few others put on other events. Some were flops, most have been warmly received.

I am still an introvert. But I have found a place where I can be with people of like minds.

Finishing Touches

I once heard someone say something along the lines of “Finishing the last 10% of a project is harder than the first 90%” and, oh boy, am I feeling that. But why would that be? For me and my project there are several reasons, most of which feel fairly universal to creative endeavors. Even if the specifics get twisted a bit dependent on the medium.

The first bit is setting the details in stone. Throughout the project I have been putting in elements of the game and saying, “that is a temporary label/position/color, I can change it as needed.” But now that I am reaching the end those elements can no longer be labeled as “temporary” and need to have a final decision made about them. Now you might say “That is just putting off the work until latter. Why didn’t you do this stuff sooner?” And the reason is simple: a bunch of my “temporary” elements have changed significantly over time, some of them have even been removed all together. So, if I had “done it sooner” it would have been wasted effort. But now those decisions need to be made… And it is just as much fun as it sounds.

But now for the bigger problem: actually getting my product on the market. And this comes with a bunch of questions. What platforms do I want to target? Do I want to charge for the game? Do I want to put adds in the game? Do I want to make a demo version? All these questions and I haven’t even gotten to the real problem (for me anyway): I don’t know what steps I have to take to get onto a given platform. I know I can just look it up, and in fact have looked up the steps before, but I respond to the process in one of two ways. Either I look at the steps and get overwhelmed, either by the number of steps or by things in the steps that I just don’t understand. Or I look that the process and go “Is that it? You must be hiding something. I must be looking in the wrong spot. Where is the real process!” And I know… I just “need to get over it” … Believe me I am working on just that, these are me problems and I am working on handling them. But in the meantime, I just keep pushing it off. What I really need to do is subdivide the problem and tackle the smaller parts, so I don’t get overwhelmed.

More Games to Play

Time for some more games I recommend playing.

Hades
Welcome to the world of Greek myth, the realm of the gods… or the realm one god in particular. You play as Zagreus, son of Hades, in your quest to escape the underworld and reach the surface, perhaps even go to Olympus to meet your aunts, uncles, and cousins. Speaking of your illustrious family, you won’t be tackling this challenge alone, the Olympians grant you boons as you progress through the levels of the Underworld. But… eventually you will die
And that is were the setting does extra duty, you see Hades is a rouge like game, meaning you are meant to paly again and again against randomized levels, getting different perks on each “run”. Most games in this genre have to somehow explain how you keep coming back to try again. But you are the son of Hades, Lord of the Dead, your “reresection” back home is treated as “another day, another death” by most of the denizens of the Underworld… Zagreus especially, who shakes off death about as fast as the blood from the pool he resurrects out of.
As you progress you will unlock new weapons to use, new boons to play with, and even make some semi permeant stat boosts between runs to make things more manageable. And on top of all that it even has some great interpretations of various Greek myths, and not just ones limited to the gods.

Slay the Spire
From one rouge like to another, but where Hades is an action packed brawler game, Slay the Spire is a deck drafting game. In Slay the Spire, you select a class that determines what strategies you can use in the run, for instance the warrior might go for a big armor or a high risk self damage strategy, where as the rouge might go with a cheap card strategy that relies on drawing a bunch of cards and unloading them all at once. But at the start you only have a basic preconstructed deck that shows off a few of the things your class can do, and as you progress (killing enemies, finding shops, and more esoteric encounters) you will have opportunities to add more cards to that deck… and even the opportunity to remove some cards to make your deck more consistent. But the spire has many mysteries, and many strange encounters.
For if you like the idea of rouge like games, but don’t like the twitch reaction speed elements. Or if you just like a well made deck crafting game.

Elden Ring
From the creators of Dark Souls, Demon Souls, Bloodborne, and Sekiro, comes the latest “Souls” game. For those that don’t know, this company has a reputation for making “hard” games where you die, drop your unspent experience/wealth, try to get it back and make more progress, die again, and repeat. Now you will notice I put “hard” in quotations, this is because the difficulty of these games is vastly overhyped. That is not to say the games are easy, far from it. These games certainly are hard… but they are fair.
Was there a trap that caught you off guard? Look for the telegraph and learn from it. Enemy came “out of nowhere”? Maybe dropped down on you? They were always there, and if you spot them early you might even get in some free damage. Boss killing you over and over? Learn their moves and the timings, almost no attacks are completely undodgeable.
But in Elden Ring a new wrinkle was added: an open world. In all the previous games there might be a branching path here or there, but the core game was pretty linear. In Elden Ring you can go off and explore for hours before encountering your first main story boss… or even skip that boss altogether if you explore enough. Or you might be out exploring and suddenly a dragon swoops down, taking out a bunch of other enemies, and starting up boss music. The good news is that these “overworld bosses” you can encounter at random can be run away from and they will stop chasing you… eventually.
As with most “Souls Like” games there is a top level story, a sub level story, and more world building than you can shake a stick at.
If you do decide to pick up this game I heard an anecdote that rings true in my experience: “You know you are in the right part of the game if the encounters are hard, but manageable. If the boss is beating you, but you feel you can win.”

Stardew Valley
And now for something on an entirely different wave length. Stardew Valley is a farming sim game. But don’t let the simplicity of that genre description fool you it is quite a bit more than that. To start the game, your character is tired of the city life and decides to take up their decides grandfather’s offer to take over an old farm in the town of Stardew Valley. To start off you are clearing the land of some weeds, planting your first crop, caring for them, selling them off when they ripen, and repeating. But soon you get enough money to start buying some upgrades to your land and house and you will start making some things to make your job easier, like scarecrows and sprinkler systems. Soon you will discover the mines that house ore for your crafting, but also monsters you have to defend yourself from in order to get that useful ore. Or maybe you got yourself a chicken coop or barn to raise some animals? Or maybe you are focusing on your relationships with the various townsfolk and seeing what stories they have to tell. Or perhaps you might have tripped over one of the more magical aspects of this town and started exploring where that leads. Plenty of things in Stardew Valley to keep ones attention.

What Would my Tutorial Have Looked Like?

A few weeks ago I discussed my reasoning for not including a tutorial in my game. But that was not a quick realization, and in fact I had a mostly operational tutorial at one point. But then I changed the UI layout and would have had to completely rework the tutorial… Anyway! So just to get it out there, what did my design for a tutorial look like?

Firstly My tutorial started with most of the (non-play area) buttons hidden. This was to limit the amount of information the player needed to take in at once. The first “level” of the tutorial was the most basic of basic patterns, the cross in the center of the play area. However I did three things to help teach the player. Firstly, I put some text up on screen explaining what was going on. Secondly, used the hint mechanics to highlight where the player was supposed to click. And finally, I disabled all the other play area buttons. This way I could introduce the player to the mechanics of what pushing a button did, while also allowing them to feel like they were making progress. I continued this pattern for a few “levels” moving the puzzle around to demonstrate that the point you click and the surrounding spaces toggled. But that the puzzle did not wrap around, meaning spaces on the edge affect fewer spaces than ones in the center.

After progressing to two move puzzles I introduce he “restart” button and stop disabling the nonrelevant buttons. This allows the player to mess up, to play around and still get back to the start, however I am still highlighting the correct moves for now. After a few of the basic two move patterns are introduced to the player I introduce the next button, the hint button. At this point I stop automatically highlighting the correct moves and let the player decide if or how many moves they want highlighted while also turning the needed moves up to three and (if I remember correctly, it has been a while since I looked at my old tutorial) finally four moves before the tutorial ended.

To summarize my tutorial set out to do four things. First and foremost I wanted to show the player what pressing any of the play area buttons did, some of my early playtesters were strangely mystified by this aspect of the game. Secondly I wanted to explain to the player what the “menu” buttons each did. Thirdly I wanted to introduce some of the more basic patterns found in this type of puzzle. And finally I wanted to introduce each element slowly, so as not to overwhelm with information.

Controlling Colors and the Night Sky

Something I have been struggling with for my game is this: What do I do for the background? For a long time this was a non-issue as I did not yet have a theme, but one day I decided it needed something more than just a flat color. I tried a few things, but none of them worked very well. Then I found the thing that works, an image in Unity can have a color applied to it and this layers over the existing colors. With colored images this can look horrible, but on a white to black gradient it looks fine. So I popped into PowerPoint, mad a square, and applied a gradient fill from black at the edges to white at the center. After a bit of playing with the ratios I found something I liked and put it into Unity.

Now my backgrounds are a bit more interesting than just a flat color. But I decided I wanted more than that, I decided I wanted the background to react to the current state of the game. As such I had the color progress through a progression of colors dependent on the ratio of moves taken to moves used to create the puzzle and going to black if you go past that number.

This was all well and good, but the sudden change left something to be desired. As part of creating the star fields I discovered a function to have one color fade into another. In the star fields I only used the fading for the alpha value that controls transparency. But for this I needed the actual color changing part of the function. This came with a minor hiccup as I discovered a quirk of the function. In Unity you can layer a color on top of an image, and this color fade function layers another color on top of that. Once I figured that out (took a little while to figure out why the colors didn’t look right) the solution was simple: in the set up for a given scene set the base color to white, then use the function to set the starting color with a transition time of zero. I now have the correct starting color and no extra colors muddying things up.

I had now settled on the technical side of things (mostly, I did do a couple other things I am very happy with. But enough technical stuff for now) and now I needed to choose my colors. I had been experimenting with colors for a while at this point, putting different color progressions in each scene. But to make a long story short I settled on two principles for the background colors. Firstly, I decided to stick to a blue primary coloration, as the sky is blue even at night (it only looks black because of all the “light pollution” from modern electric lights in cities) and as stated in the post about the stars I was now going for a night sky theme. Secondly, was that the colors would progress from light to dark and back to light, mimicking the progression from twilight to night back to the dawn. But with the twist that if you go over the target number of moves it quickly drops to a very dark blue, showing you got lost in the night.

Perhaps I will change some part of this again in the future. But for now I am happy with were I have gotten.

Game Recomendations

So I have recommended some webcomics, some books, and a specific author, now for my other big obsession: Video Games.

Going to go with a variety of choices here, the only real criteria being that I have played and enjoyed a given game. So here we go

Ghost of Tsushima
I am something of a Japanese history and culture nerd (thank Gaijin Goombah on YouTube for that) so a game that takes place during the Mongol invasion of Japan? YES PLEASE! You play as Jin Sakai, the young lord of the Sakai clan and nephew of the ruler of the island of Tsushima. After the first confrontation with the Mongols goes horrifically bad, most of the Samurai of the island are dead, with Jin being left for dead and only being saved when a female thief saves him. It is now your job to save your uncle and the island from the Mongols, but the strict way honor code your uncle taught you won’t work against this enemy, so Jin is forced to learn new strategies and make unsavory allies in order to save his home.
Gameplay wise the game is split into exploration, stealth, and combat. Most situations can be solved either by sneakily eliminating the enemy or charging in with sword drawn and a curse on your lips (although stealth is usually the better option most of the time, you can usually fall back on a brawl if things fall apart). Sometimes you are forced into stealth or combat (infiltration of a castle vs fighting on the front line of a siege) but you are fairly free to handle situations as you see fit. And all of this is not to mention that the game is drop dead gorgeous.

Monster Hunter: Rise
Want to hunt big monsters? Want to wield a giant sword while you do it? Or how about a lance that is also a gun? Or sour through the sky spinning a glaive at the monster’s unprotected back? Monster Hunter is all about it. The play loop is simple: Hunt monster, return to town, craft new weapons, armor, and items to help hunting bigger monsters, repeat. There is also a story in there, and a nice one too, plus a bunch of lore to justify hunting these monsters. But let’s be real, you aren’t here for the story, you are here for the mechanics. And Rise (like most Monster Hunter games) has a few unique mechanics to offer. Firstly is the wire bugs, allowing both for more mobility than in any other Monster Hunter game to date, and being a resource system for new big moves unique to each weapon. Speaking of weapon’s unique moves, the Switch Skills system allows you to swap out some of the moves on weapons to further customize your playstyle.
Rise is one of the most newbie friendly Monster Hunter games so far. That is not to say it isn’t hard to get into, Monster Hunter games are notorious for being hard to understand. But as long as you are willing to open a wiki or look up some guides on YouTube nothing is too arcane or shrouded in mystery that you cannot master it.

Elder Scrolls and Fallout
Just some good “comfort food” games. If you don’t know them yet… what rock have you been living under? These are more or less the base lines for modern open world games.

Sakuna: Of Rice and Ruin
This game is one part 2D side scrolling beat ’em up and one part shockingly accurate rice farming simulator, yes really. You are Sakuna, you are a Kami and as the daughter of a Kami of agriculture and a Kami of War you have inherited both of your parent’s affinities. As such, you gain power by bringing in a harvest of rice and you gain the resources to harvest that rice by going out and fighting demons. But you have to manage your time fighting because managing your rice field is a surprisingly demanding task and how well you do that determines how good your stats will be.
On the story end the game isn’t lacking either. Sakuna at the start of the story is a lazy, spoiled, arrogant, Kami. But after a chance encounter with a group of humans (a large cowardly man who is knowledgeable, but fails at most of his endeavors. An energetic, rebellious, boy and a shy, reserved girl. A baby. And a Western religious missionary.) Sakuna is forced to live on an island of Demons, tasked with subduing said demons. All the characters undergo a myriad of developments and the story intersects with the mechanics in surprising ways. And finally as with my first pick, it has a surprising amount of fairly accurate (if twisted for story purposes) references to real world things, mostly how the Japanese viewed the Kami, but also daily life and Western Missionaries.

 

I still have plenty of games to recommend, but this is enough for today.

Old Code. When to change it and when not to

As part of my comment pass on my code I started to notice a few parts of my code I should change. Most of these changes were along the lines of removing superfluous {} pairs in for/if/while statements. These got in because when I am first writing the code I like to have them for definition of the areas and because I am never sure how large a given statement will get. So better to just put it in at the start than to figure out where I need it latter.

However, in going through the code again I realized I could remove a fair number of lines of code(around 10-20 lines in my longer scripts), making things a bit cleaner. I also realized that a small for loop should be in its own function, and called by the game as needed, rather than being in the update section constantly being run.

Now on to the bit of code that sparked this post.

When I was first making this game I had a bunch of ideas. These included having a level editor and being able to share level codes. As such I needed to create a “password” system for these codes. Something that would be abstract enough that a casual user might not realize what was going on but that also carried the relevant data. Then I realized that the base game (all out) was basically a 25 digit binary string. If I took that string and split it up into 4 digit sections (with a trailing 1 or 0) I could then convert those to base 16 (0-9, a, b, c, d, e, and f for the additional numerals). This solved both problems of making the passcodes look like gobbledygook while also preserving the data I needed. (I was also a bit proud of figuring out how to do all the math on my own without using any sources)

When creating the Match puzzle variant it was a simple matter to append a second string for the end state as well as the original start state. Decoding it was a bit more challenging, but simple enough. With all that in place I went about making the 200+ levels for each game mode using this passcode system. By this point I had already abandoned the idea of a level creator, or of ever letting the player see any of these passcodes, but I had a system that worked, so why change it?

Then I made something for which the system would not work.

I created what I call the “Chromatic” version of the puzzle, where each box has 4 states (one “off” and three different “on” states). By the way, it is called chromatic because at first I used different colors to differentiate the states, but quickly changed that as soon as I remembered color blind accessibility, back on target.

The observant have already seen the problem. While the base and match puzzles were basically binary strings of on or off, this new puzzle type didn’t share that simplicity. However, this did not present the problem one might think it would. I simply had the puzzle generate 25 digit codes with 0-3 to indicate a given button’s state. simplicity itself.

Now back to the present. I was looking over my code and re-discovered this discrepancy. The function that interpreted codes for two of my puzzle types was well over 100 lines long, and the function in my “chromatic” puzzle for the same purpose… was less than 20 lines. So I immediately thought “should I just replace this old, outdated, code?” And the answer I came to was: no.

There are two reasons for this. First the less important reason: The code still works just fine. That is not to say it couldn’t work better, but it is functional and not causing issues, which means I don’t have a good argument against the more pressing issue. That being, how long it would take to replace it. Replacing the actual code wouldn’t take much time at all 60-80% of the job would be simple copy and paste work. The real problem is that I have a bit over 400 level codes between the two level types that use this old passcode system, and I would need to either convert them all or make new ones. And that is simply more time and energy than making this “upgrade” is worth.

If I ever find a more pressing reason to make the change I will take that time to do it. But until then this side grade is not worth the several weeks of effort it would take to accomplish.

So when do you not change old, outdated code? When the effort to do so outweighs the benefits of doing so.