Out of Date Tutorials

One of the greatest strengths of my generation (and the following generations) is that, by and large, if we don’t know how to do something, we just look it up. The internet has put most skill sets a few searches and minutes or hours of research away. Don’t know how to format that file for your presentation? The internet can tell you. Don’t know how to make a resume? The internet has plenty of examples. Don’t know how to change the oil in your car? The internet has plenty of tutorial videos, probably even has one for your make and model.

So why do I bring this up? Because there are plenty of programming things that I have no idea how to do. And so I go look it up. And I usually find a way to do what I am trying to do. Or a way to do a similar thing that gets the job done. Along the way I usually find at least one thing I wasn’t looking for, I didn’t know, and could be very useful.

So, onto the point. I have been getting close to the finish of my game… and finding these last few steps the most annoying, mostly by virtue of going in blind. The step I am working on now is integrating adds into my game, so that I can hopefully make some money from this. But, as the title suggests, the first tutorial I found to do this was out of date. The tutorial was less than a year old, and at first it only looked like some cosmetic UI changes had been made in the process since the tutorial was made. But… once I got to the coding part of the process, everything started returning errors. That is when I knew something was wrong.

But As stated above, I just searched again. Quickly I learned that the tutorial I was using was for version 3 of the integration and the current version was 4.3. Understandably the process had changed significantly. But a new tutorial was quickly found, and the fundamentals were largely the same. It just used different tools to accomplish the same thing. Importantly the new version did allow for more control. However even the old tutorial was not a waste of time. As I learned a useful bit of programming to do something I didn’t know how to do (but which I knew must be possible). And, as with the old tutorial, the new also taught me something I didn’t know. But more importantly this new tutorial explained why it would be useful. After all, simply knowing something is no where near as useful as understanding it.

Thoughts on Debt Forgivness

Seeing enough about this online that I feel I need to get my thoughts out somewhere. So please forgive me for dipping into politics for a hot second. I unfortunately cannot promise this wont happen again, but I will try to stay out of these fraught waters. So where to begin?

The start is usually a good place to start. Without diving into the minutia of the situation, Biden is authorizing debt forgiveness for a moderate portion of college debt. He is also implementing a few other relief elements for those struggling under the debts they incurred going to college. There are some limitations, such as income limitations meant to ensure those most in need of relief are those getting it. But with that base line established, why am I writing this?

Because so many people have so many stupid ideas about the situation. Plenty of people are/can have reasoned discourse on both sides of the issue. But so many loud, obnoxious, uninformed people are drowning out the reasoned discussion… and worst of all is that some of those people are in government. So second base line: where do I stand? I never had to go into debt for college, I was fortunate enough that my parents paid for my education, and I am unbelievably grateful to them for that. Even still I support debt relief for those suffering under the predatory loans so many got swindled into. Even with no direct benefit for me. I don’t think that one mistake, made between 18-20 years of age, should define the rest of a person’s life.

Now that we are all on the same page, for the reason I am writing this. I see two arguments against forgiving student debt touted around a lot. And both are just such vile garbage. The first is the idea of “I don’t want to pay for people to get ‘worthless’ degrees”. First off this is a straw man argument, because of these nebulous people we shouldn’t help anyone. Secondly, please tell me what a “worthless degree” is. I never see this phrase defined in the argument. Is it a degree that doesn’t pull in a lot of money? A degree that you think doesn’t add value? A degree that isn’t being used? To all of those I say: there is no such thing as a worthless degree, just as there is no such thing as worthless knowledge.

On to the second “argument” I see. “It would be unfair to those that already paid off their student debt.” What utter garbage. You might as well say you don’t want diseases cured because it would be “unfair” to all those who already suffered from them. Or that no one should ever get a raise above minimum wage because that would be “unfair” to those that only make minimum wage. Or even that we shouldn’t have cell phones because it is unfair to people like me that didn’t grow up with them. Utterly ridiculous right? Well, some people are so afraid of progress and change I am surprised they are even able to use computers.

Things change, and it isn’t always fair. I missed out on several things before my time and wish I was still a child for several things that came latter. On the other hand, because of when I was born I got several advantages that those born even 5 years latter might not have gotten. Life isn’t fair. But we can, and should, try to make it better for everyone. Even if that means we don’t see any direct benefit ourselves.

Fear of Complexity

For a long time now I have been afraid of learning new things. That might sound silly, but hear me out, I only recently really figured out the source of the fear. For a long time I blamed my reluctance to learn new things on my ADHD. Just a lack of ability to focus making it hard. And while that is partly true I recently figured out another part of the problem. As the title suggests what I am afraid of is being overwhelmed by complexity.

When learning a new thing I am afraid it is going to be too complex or involve things I just don’t understand. Just a nice fun mixture of “the fear of the unknown” and a large dose of “fear of failure”. So, what do I do? Delay, distract, and do anything else. I know this isn’t what I should do, and am trying to get better about it. But recently I have started to realize just how unfounded these fears are.

I think what really planted the seed of these fears is two fold. First is a longstanding fear of failure. Not too unusual, and something I have been at least somewhat aware of all my life. Gaming is both were I became aware of this fear, and a space I can fail safely to try and get over it. The second seed is a bit more unusual. That is when I tried looking up how to do various technical things in my programming education, it would seem that the articles I found would assume I new various things that I simply did not know. My most common response to these types of “help articles” was “If I knew that part I wouldn’t be here asking for help!”. And so I slowly associated looking for help with being made to feel stupid and incompetent.

But, throughout my time learning things I would occasionally run into a weird thing. I would be doing something and someone would take notice and praise my ability to do/understand that thing. But I would be confused. Because to me that thing wasn’t praiseworthy… it was easy. And it has taken me years to realize those praises weren’t empty platitudes, that I actually do have some talents. And nothing has underlined this more than when I pushed through to learn some new things recently. Rather than being overwhelmed or confused as I expected it was all so simple and easy to understand.

I am not completely over my fears yet. I still have a ways to go. But I can see the path forward. And who knows? Just as these new things may be simpler than I fear, the path forward may be shorter than I think.

What should a game designer learn?

What should a game designer study?
Yes.
But what experiences are beneficially to my game design?
All of them.

This was one of the more memorable conversations that took place in my game design class. Student was asking what supplemental courses to take (art, programming, animation, history, etc.). The teacher’s response could be boiled down to this: There are no experiences that can’t be useful to a game designer. So, what does that mean?

There are two main aspects to this, experiences and skills. I will start with experiences. Any experience can be used to influence game design. Perhaps a scene from a movie you watched gave you an idea for that nagging mechanic you are trying to figure out. Maybe your experience extending your running range influences how you design level up mechanics. Or you could even design an entire game to get across the sense of peace you experienced when sitting on a hill on a sunny day and got a whiff of some flowers. A designer, of almost any kind, draws on their life experiences to inform their design. So the more experiences you have, the more paints you have in your design paint kit. But where do you get the brushes to apply that paint?

That is where the skills you pick up come in. The broader your skill set the more of a game you can influence. For a very simple example a programmer with some basic art skills can make temp assets without going to an artist every time. Similarly a UI designer with some programming experience can figure out what the programming flow might look like while they are making the design. In short if you can expect what the next step in design is the better you can prepare for it and possibly save everyone’s time. Or even (as I am doing) create something completely by yourself.

What I have heard this skill distribution referred to is a T skill distribution. Meaning you have a basic understanding of everything in the pipeline, maybe even enough skill to help out on occasion. BUT that you have one or two specialties. The broad “base” of the T vs its tall central pillar. In this way, no skill you learn is wasted in the design space. Even seemingly unrelated skills can surprise you when they come up and are invaluable.

Hardware Maintenance

Early this week My long used laptop charger developed a fault. It still functioned, but part of the wire was frayed revealing the layer under the rubber coating. Not like it was sparking, but not something I wanted to take risks with either. So until I could get a new charger my work laptop couldn’t really be used as normal. So what to do with the day? Clean my keyboard.

 

I have a pair of mechanical keyboards for my two computers, and I had never cleaned them. I new the idea of how to clean them: remove keys, clean underneath, clean individual keys, replace keys. Fairly simple. But… I had no idea how to remove the keys safely. Then I got a special tool specifically for the job and it was off to the races.

Spent most of the morning cleaning my “work keyboard”. First removing the keys (carefully keeping them in order), then scrubbing under where they were. So much dirt, oil, and other detritus had accumulated that it took some work to get most of it out. Next up was blasting it all with a can of compressed air. As a side note, I’m not sure if I will ever get used to how cold compressed air cans get when in use. With the board itself (mostly) clean I moved onto the keys themselves. Nothing fancy for these, wipe them down with a wet cloth, then dry them with a dry cloth. Got the dirt rings off them and made them shiny again. Only took a few seconds per key, but that adds up for a full keyboard. Just put on a podcast and let the Zen of repetitive action take over.

While I was dealing with the keyboards a thought kept popping up in the back of my head. Near the end of dealing with the second keyboard I decided to check on that thought. And sure enough I was right. Turns out I had a spare charger that had been sitting in a box for several years. So now I have two clean keyboards and a charger in good condition. What happened to the old charger you may ask? Toothpick as a splint to keep that part from bending and some electric tape to keep it secure and safe. Not a pretty solution, but it works as a “new” backup charger.

With everything done, I replaced the keys and had a clean keyboard for the first time in… too long. The difference is like night and day.

And I Thought Making the Game was Complicated

So my game is approaching the point of being done. That is to say, while there is always something that can be worked on, it is feature complete and working. I just have a few more features to iron out, mostly quality of life improvements for the player. So, what’s next? Getting it into the hands of players (and hopefully monetizing the thing).

The problem is that actually getting an app on to an app store is a long and annoying process. At first I thought it would be simple: make a profile, submit app, get approval (after inevitable edits), app in store. Simple and straightforward right? Wrong. Even just a cursory glance at the actual process showed me it would be much more complicated than that. Lots of steps to secure the project, steps to make the submission secure, steps to make sure the app isn’t malicious. Add onto that an almost $100 cost to have the honor of being able to submit apps for Apple’s consideration.

At first all of this was paralyzingly overwhelming. Where do I even begin? What does any of this mean? What is going on? But then I calmed down enough to remember the simple fix to being overwhelmed: take it one step at a time. In this case I am aiming for both IOS and Android distribution, so just focus on one for now. Make sure I understand each step before moving on to the next. And try not to get sidetracked and add more to my plate.

Of course, when looking up tutorials on how to do this I found a tutorial on adding ads to Unity games. Something I need in order to monetize the game… Will this ever end?

Trepidation and Momentum

Often with my work I feel a sense of oncoming dread. Not quite full on fear, but anticipation of hardship that leads to anxiety. Hence, trepidation. I know I should ignore this feeling… But you try ignoring gut instinct. Not so easy is it? Usually this comes about when I need to make something new in my project or need to learn a new technique or skill. I just have this expectation that things will go badly. And the “logic” of my fearful mind is that: as long as I don’t start the thing, the bad thing won’t happen. I know this is foolish, I know it is nonsense… and yet…

So where does Momentum come into play? Momentum is the other side of the coin. Once I work myself up enough to get past my trepidation the coin turns to its side. No longer shackled by trepidation I can get work done, but I am not yet fully productive. But if I maintain this long enough I fully flip the coin to momentum. That is when I have gotten so into the work, done thing after thing without stopping, that I don’t have time for trepidation to set in. In that state I simply don’t have the time to think about “What if this goes bad?” and just get on with the work.

Sometimes my work slows down and the coin flips back to its side or even fully back to trepidation. But that is why it is “trepidation and momentum”. Like a rolling stone gathers no moss, once I get moving I have no time for trepidation.

Reviving Discarded Ideas

In game design it is an all too common thing to get an element 80% working, and then decide it doesn’t fit. Or perhaps it doesn’t mesh with who you are doing something else. Or you go in an entirely different direction. The point is that you will have many ideas that get left in the dust. Many might even be fully functional before you discard them. But how you discard them is important.

One piece of writing advice that has always stuck with me is to write the first draft. Then delete that draft and write it again. This stuck with me because I can see the logic of it, but it is so antithetical to how I do things. The logic is that now that you have done the thing it will be easier to do it again, but better this time. And it actually makes a lot of sense. But, a part of me is violently opposed to destroying my old work. If I ever try this piece of advice, instead of destroying the old work I would seal it away out of my reach.

Back to game design, I am a strong believer in making multiple “save states” of my work. These save states are snapshots of different points in development. Often when I make these I need to duplicate all the scripts and prefabs I use so that I can leave the old version alone and largely functional. But what does this have to do with reviving discarded ideas? Simply put, when I discard a piece of code I have written I very rarely delete it. Perhaps I comment it out. Or I leave it in an old version. Or I simply remove the script without changing it at all, just leaving it in a file somewhere for latter. What this means is that if I discard something. Then decide I need it after all later on. It’s always there, ready to be revived.

Eventually, I’m going to have a hell of a time cutting out all the extra files I don’t need in the final build. But in the mean time, I have the entire history of my design process at my fingertips. And that means that while an idea might be discarded, it isn’t gone.

Navigating the Web of Scripts

When I need to add a new feature to my game I need to code it in (Duh). But it isn’t always as simple as that makes it sound. Each scene is it’s own world and what I do in one scene does not always translate to another scene. No, if I want something to carry over I need to set it up special. Thankfully I long ago created an object that carries over between scenes, its entire purpose is to carry variables between scenes. But interacting with this object can get a bit weird at times.

One of the main reasons for this is that each time I load a scene my scripts have to go and find that object (Named dataHolder). And you might think this would be simple: “On start find thing” and it is… until it isn’t. You see I discovered something about the Start part of scripts. If you have more than one in a scene they all try to run at the same time. Doesn’t sound too bad, until Script B needs Script A to have set something up, but Script A hasn’t gotten there yet.

My solution? Have only one Start section in my “controller” script and have it access functions of the other scripts that run what their Start sections would have run. But how does this relate back to my dataHolder?

I needed a new variable for volume control, so obviously I would shove that in the dataHolder. But what would access it? Now the solution should be obvious to you, after all I just spent two paragraphs telling you why it is the solution. But my first instincts where to have the script that needed that variable go looking for it. But when that one variable turned into 2 or 3 variables and one needed to be translated from one form to another… not a viable solution. So shove it in the controller.

And I went to do that. And everything just seemed to work. Nice and simple, barely any programming involved. Makes me suspicious any time the solution is so easy. But this time I think it really was that easy. Because I put it in the right part of the interconnected web of scripts.

Rigidity of Design

Often times, when I design something that works I have a tendency of just using that over and over again. One example of this is to copy and paste parts of working code into new code. Usually I need to change something, but it makes for an excellent starting point. But this also applies to UI design. When I find a design that works I have a tendency to try and copy paste it everywhere else. I usually have to tweak it a bit for things like space constraints, but this has the upside of a unified design.

However… as you may have surmised from the title, there is a downside to this. And that is when the old design just won’t work for what I want. Now you would think the answer is simple “Just do something different” and yes it should be that easy. But then comes the “rigidity”. You see, I like the idea of the design being “unified”, of everything looking and acting similarly. So the idea of changing a design that has worked up to this point is a hard one to accept. And I struggled with first one idea that just would not work, then another that was somehow worse. But eventually I got it through my head to “just change the layout of the design”. This gave me the room I needed and actually helped differentiate a specific part of the design so that it wasn’t confusing.

So I guess what I have to say is this: Don’t get stuck in one way of doing things. Even if it works it isn’t always the best choice.