Tumgik
anxietyofninfluence · 6 years
Text
In Balloon Kid, you play as Alice, who can fly using a pair of balloons. It's a platforming game, and like a lot of platforming games, you'll have to jump over lots of obstacles to avoid them.
There are two important differences between Balloon Kid and a normal platformer, though, one obvious and one subtle.
The obvious one is that Alice flies with balloons, so she never has to land. A normal platformer, like Mario, will jump up and eventually fall back down. In Balloon Kid, Alice will often go long stretches over water, where she needs to stay afloat.
The subtle one is that Alice will only come to a rest on her own if she is on the ground. In the air, Alice doesn't experience air resistance; if she is in motion, she will continue onward unless you tell her to move or she bumps into something. (Usually, she bumps into enemies.) On the other hand, Mario does get air resistance--if you let go of the control pad mid-jump, he'll slow down.
The combined impact of these is that Alice is rarely in a neutral state; she is almost never free of momentum. That's what makes Balloon Kid compelling. The game challenges you to manage her momentum, both vertically and horizontally, because she rarely has a piece of land to rest on.
2 notes · View notes
anxietyofninfluence · 6 years
Text
Stranded up the Ladder of Abstraction
I don’t know much about learning. Or proper coding standards, for that matter. I just wanted to jot down my thoughts (so I can correct them later).
On the ladder of abstraction, the lower rungs are more concrete, while the higher rungs are more abstract. This means that the lower rungs are smaller and simpler building blocks. When you start combining those blocks, you go up the ladder of abstraction.
(For example: in the Worry Dream example, a lower rung looks at a car at one point in time, while a higher rung looks at a car at all points in time at once.)
At work, we pull a lot of spreadsheets. This will summarize relevant data for internal staff or for our clients. So, I might be assigned this report: for such and such client, display all of their shipments in transit along with the sailing schedule. That report turns into this process: write a program to search the database for all relevant shipments, have the program output all of the relevant shipments to a CSV file, write an Excel macro to convert that CSV file to an Excel spreadsheet, schedule a task that will run the Excel macro once a day, and then add an entry to the crontab that will mail the Excel spreadsheet.
When I put it like that, it’s a mess, right? It’s a run-on sentence.
After the first 10 times or so doing this, I start to realize I’m doing the same thing over and over. I fall into a routine where I have my favorite way to do this thing or that thing. It doesn’t have to be anything important. For instance, this could just be a matter of how I indent lines of code in the program. Just little habits that I do every time.
This is where I get a sense that I’m stranded up the ladder of abstraction. I have the sense that I’m repeating the same process over and over, but I don’t know the constituent parts of the process.
In other words: the process I’m doing can be broken down into smaller bits. So, I’m not at the bottom of the ladder of abstraction. However, I don’t know how to pull my process apart into those smaller bits. In other words, I don’t know how to climb further down the ladder. I’m stranded partway up.
At this point, I try breaking things up into different functions. In programming, a “function” is a block of logic. It can be as big or as small as you like. So, I will try breaking things into smaller functions. For example: instead of one function that queries our database for shipments and then outputs the data, why not two functions: one to query the data, the other to output it?
In this process, I’ll accidentally break things up in a lot of ways that don’t make sense. I’ll go back and read these and kind of laugh to myself. But sometimes I’ll break up things in a way that I have an easier time understanding. I’ll keep these functions in mind and write similar code later.
After doing this about a million times, I’ve filtered my process down where I know I like to break it down in a particular way. I’ve forgotten all of the weird ugly functions that don’t make sense, and I reuse the good functions over and over. At this point, writing a report is awful. I know exactly what to do, and it becomes a rote process. This is what the bottom of the ladder of abstraction looks like.
In other words, I’ve gone from this:
Write a program to search the database for all relevant shipments, have the program output all of the relevant shipments to a CSV file, write an Excel macro to convert that CSV file to an Excel spreadsheet, schedule a task that will run the Excel macro once a day, and then add an entry to the crontab that will mail the Excel spreadsheet.
To this:
1.) Search the database for all relevant shipments.
2.) Output all of the relevant shipments to a CSV file.
3.) Write an Excel macro to convert that CSV file to an Excel spreadsheet
4.) Schedule a task that will run the Excel macro once a day
5.) Add an entry to the crontab that will mail the Excel spreadsheet.
I’ve done the original clunky process so many times that I can separate the individual pieces.
When I get to this point, my annoyance at work turns into imagination. Basically, walking to my car, I say, “I would really like if I never had to write another Excel macro again.”
Well, I wouldn’t have to write an Excel macro if I could write one macro that could convert all prior and future CSV files. Because I’ve done a million reports, I can confidently say I know the full range of report types. Some are plain spreadsheets, while others have graphs. Some spreadsheets have data formatted as text, decimals, or dates. So on and so forth.
So, I do some Googling, and it turns out Excel VBA has conditional statements. I can ask it to read the CSV file, and if the CSV file says “gimme a pie chart,” then it executes the Excel pie chart code. If the CSV file says “gimme a spreadsheet,” then it executes the Excel spreadsheet code. It doesn’t have to execute one static string of code.
This is when I’ve stepped back up the ladder of abstraction. I now have one Excel macro that handles multiple types of reports. (A macro on a lower rung would handle one type of report.)
And so, bit by bit, I abstract each of the five steps outlined above. When all of this is done, I can breathe a sigh of relief. I have escaped the boring dread of being at the bottom of the ladder of abstraction, and I’ve made the initial process much faster.
But when that’s done, I start seeing higher up the ladder. For instance, at this point, I’ve abstracted out the process for scheduling a report, so that any report can be scheduled for any time without having to write new code. So, could I add a method for on-demand report generation? What if our clients clicked a button on our site, the program scheduled an on-demand report for them, and it got back to them ASAP? A program that can schedule a report for any time is pretty abstract; a program that can schedule a report for any time from any source (whether programmatic, internal staff, or external clients) is more abstract.
I think it goes like this:
1.) I perform a big long process.
2.) I play with how I do it to break it down.
3.) I break it down so much that it’s annoying.
4.) I find ways to automate the annoying parts.
5.) Suddenly, new abstractions jump out of those automations.
It can take me years to get through this.
3 notes · View notes
anxietyofninfluence · 7 years
Text
Space and Meaning in Super Mario Odyssey
Meaning requires differentiation. The meaning of a word or concept specifies how it is unique from others. Differentiation requires commitment (https://youtu.be/1-ukgV00APQ). In order to be different, a thing--any thing--must commit to one state and not another. In Super Mario Odyssey, warping reduces Mario's spatial commitment. Using checkpoint flags, Mario can instantly warp nearby to any location in any kingdom. In this way, warping reduces the meaning of Mario's position. The interesting part is that you can play without warping. Games are complicated, I guess.
3 notes · View notes
anxietyofninfluence · 7 years
Text
Uemura’s Patterns
In an interview from Floor 25 vol. 5, called “Toaplan Forever,” Tetsuya Uemura says:
The shooting game I envisioned is over when you don't return to a checkpoint after a miss because you are no longer creating a pattern.
In shooting games, instant startback allows you to continue playing without losing progress in the level. So, you can get hit by one bullet and continue forward in the level.
A checkpoint sends you back to a fixed point in the level when you die. If you get hit by a bullet, you have to go back and restart from the checkpoint.
When Uemura says “you are no longer creating a pattern” when you don’t return to a checkpoint, this is because you haven’t dodged every bullet. Implicitly, he means that avoiding every single hazard creates a pattern. A checkpoint system forces players to fall into this pattern. As he says: "Well, you could say the shooting games I like to make are closer to puzzle games: games that require a strategy. They're made so you can't just go where you want but are required to take a specific route or can't continue."
Because space is rich, there are countless ways to dodge each bullet. I imagine that a “pattern” for Uemura includes all the countless paths around a bullet. Even if there are countless paths around a bullet, there are still more paths if you allow a player to hit a bullet and continue. In this way, he’s restricted the number of ways the player can play.
---
Note that I’m not familiar with how rank works in these games. It seems possible to me that dying and shedding rank would result in a simpler bullet pattern from the same part of the stage.
I don’t know what Floor 25 is.
See this thread about Toaplan over on System 11.
0 notes
anxietyofninfluence · 7 years
Text
Balloon Kid
I'm looking for folks who are a fan of the GB game Balloon Kid. Hit me up or like this post!
0 notes
anxietyofninfluence · 7 years
Text
Ad Hominem
Last week I had C-SPAN's talk radio playing in the car. The topic of the hour was environmental deregulation.
One woman called, somewhere between annoyed and indignant. She explained that only wealthy business interests could possibly support environmental deregulation. Unnamed individuals were selling our planet for short-term gain. She made a good point.
It wasn't until I got out of the car that I realized her argument relied on ad hominem: swapping an argument about an idea with an argument about a person.
The caller didn't talk about the ideas that inspire environmental deregulation. For example, if I told her deregulation could create jobs, what would she say? Maybe she would disagree. Maybe she would agree, but thinks the environment comes first. But there's no way to know. She rooted her argument not in the ideas, but in the person making the argument.
The caller's perspective brought me no closer to understanding the problem. Instead of understanding deregulation--what could be deregulated, what its impacts might be for good or for ill--I'm left with a (probably inaccurate) picture of someone who supports it. I don’t know why deregulation is bad.
When you make an argument, I want to hear you assess your opponent's ideas, not your opponent.
0 notes
anxietyofninfluence · 7 years
Text
I made a game
You can find it here. It’s an auto-runner, and you can play it on a desktop browser or on a smartphone.
The game contains six levels in all, although there is a level editor and a few enemies that didn’t make it into the final game.
I haven’t done any testing, all of the visuals are placeholder, and there is no audio. I’m currently considering putting time (and money?) into pursuing these things.
This is the game I posted about earlier this month.
1 note · View note
anxietyofninfluence · 7 years
Text
Gabor Maté, Boredom, Addiction
Last week, I wrote about boredom. I’ve been reading  Dr. Gabor Maté’s In the Realm of Hungry Ghosts, and he says this about boredom:
A sense of deficient emptiness pervades our entire culture. The drug addict is more painfully conscious of this void than most people and has limited means of escaping it. The rest of us find other ways of suppressing our fear of emptiness or of distracting ourselves from it. When we have nothing to occupy our minds, bad memories, troubling anxieties, unease, or the nagging mental stupor we call boredom can arise. At all costs, drug addicts want to escape spending “alone time” with their minds. To a lesser degree, behavioral addictions are also responses to this terror of the void. (p. 39)
Dr. Gabor Maté references “bad memories, troubling anxieties, unease,” which resembles Mihaly Csikszentmihalyi’s approach. Maté separates that from boredom.
He also mentions the desire “to escape spending ‘alone time’ with their minds,” something that Naval Ravikant fought against. Instead, he recommends simple awareness without distraction. For an addict, this can be difficult, because addiction also comes with guilt and self-rejection, as Gabor Maté writes.
0 notes
anxietyofninfluence · 7 years
Text
Mihaly Csikszentmihalyi, Naval Ravikant on Boredom
When I’m bored, I think about random stuff. In his book Flow, Mihaly Csikszentmihalyi, PhD calls this "the basic disorder of the mind":
But when we are left alone, with no demands on attention, the basic disorder of the mind reveals itself. With nothing to do, it begins to follow random patterns, usually stopping to consider something painful or disturbing. Unless a person knows how to give order to his or her thoughts, attention will be attracted to whatever is most problematic at the moment: it will focus on some real or imaginary pain, on recent grudges or long-term frustrations. Entropy is the normal state of consciousness--a condition that is neither useful nor enjoyable. (p. 119)
Based on my own experience, I don’t think this is the full truth. It seems strange Mihaly puts so much emphasis on the possibility that random thoughts turn to pain.
Regardless, I have definitely soothed boredom with junk media.
To avoid this condition, people are naturally eager to fill their minds with whatever information is readily available, as long as it distracts attention from turning inward and dwelling on negative feelings. This explains why such a huge proportion of time is invested in watching television, despite the fact that it is very rarely enjoyed. Compared to other sources of stimulation--like reading, talking to other people, or working on a hobby--TV can provide continuous and easily accessible information that will structure the viewer’s attention, at a very low cost in terms of the psychic energy that needs to be invested. (p. 119)
In other words, this means using media that doesn't make you think. For me, this is scrolling through Facebook or watching YouTube.
Mihaly’s solution is to structure your thoughts.
The better route for avoiding chaos in consciousness, of course, is through habits that give control over mental processes to the individual, rather than to some external source of stimulation, such as the programs of network TV. To acquire such habits requires practice, however, and the kind of goals and rules that are inherent in flow activities. (p. 120)
Here, Mihaly recommends giving thinking “goals and rules.” How does that work? His example:
Yet daydreaming [. . .] allows children (and adults) to rehearse imaginary situations so that the best strategy for confronting them may be adopted, alternative options considered, unanticipated consequences discovered--all results that help increase the complexity of consciousness. And, of course, when used with skill, daydreaming can be very enjoyable. (p. 120)
He’s actually got a whole chapter on this topic, but daydreaming is his first example. My daydreaming never approaches accuracy, but I have enjoyed it.
I find it easy to occupy my mind by finding programming problems and thinking about them. I like programming, and it gives me a goal to ponder. It’s easy to structure my thoughts when I use conflict.
Naval Ravikant (CEO, investor) strikes an interesting contrast to Mihaly in his appearance on Farnam Street (transcript here). He says that when we’re bored, we think about random stuff, which usually turns to past regrets or future desires:
The reality is if you walk down the street and there are a thousand people in the street, I think all thousand are talking to themselves in their head at any given point. They’re constantly judging everything that they see. They’re playing back movies of things that happened to them yesterday. They’re living in fantasy worlds of what’s going to happen tomorrow. They’re just pulled out of base reality. (p. 9)
He calls this your “monkey mind.” Naval, like Mihaly, warns against unstructured thought. But for Naval, daydreaming is the enemy (”playing back movies,” “living in fantasy worlds”). Instead, he advocates mere presence. He describes this in an anecdote about brushing his teeth:
If I’m by myself, like just this morning, I’m brushing my teeth and I start thinking forward to the podcast. I started going through this little fantasy where I imagined you asking me a bunch of questions and I was fantasy answering them. Then I caught myself. I put my brain in debug mode and just watched every little instruction go by.
I said, “Why am I fantasy future planning? Why can’t I just stand here and brush my teeth?” It’s the awareness that my brain was running off in the future and planning some fantasy scenario out of ego. I was like, “Well, do I really care if I embarrass myself on Shane’s podcast? Who cares? I’m going to die anyway. This is all going to go to zero and I won’t remember anything, so this is pointless.”
At that point, I shut down and I went back to brushing my teeth. Then I was noticing how good the toothbrush was and how good it felt. (p. 13)
This is difficult (as Naval mentions in the podcast). But, in my experience, it has been important to shoot for simple awareness.
One thing that helps is rolling down my car windows so I can feel the outside air. On slow days, I can hear grasshoppers by the highway. Awareness is about savoring your physical senses: how things feel, smell, all of that.
Facebook and YouTube also get in the way of simple awareness. Selfies can do this, too: trying to memorialize the moment for the future rather than enjoying it in the present. Not that selfies are evil, but it’s important to realize that I’m taking myself out of the moment.
I think it’s important to occupy my boredom meaningfully. This can mean thinking about things that make me happy. But it can also mean enjoying my sensory inputs.
TODO: Read Autopilot: The Art and Science of Doing Nothing.
0 notes
anxietyofninfluence · 7 years
Text
Trigger Finger
I'm working on a game called Trigger Finger.
It's an autoscrolling platformer developed with mobile platforms in mind, but it should run fine on a computer. So far, I've got two levels and a level editor. The graphics are entirely placeholder, and there is no sound.
The hero walks automatically. You can hold the CHARGE button to stop. Releasing the charge button shoots horizontally according to how long you charged. If you tap the CHARGE button, you can shoot without stopping. This allows you to stop whenever you wish. It also means charge shots come with commitment: you have to stay in place to charge.
The JUMP button makes the hero jump. There are two jumps: one without charging, and one while charging. Without charging, the hero will quickly hop forward. With charging, the hero will jump in place, but higher than a non-charging jump.
Splitting the jump like this simplifies control. If you want to clear gaps, that's the uncharged jump. If you want to hit a high enemy, that's the charged jump. Individually, these two arcs are easier to follow than one jump that is both high and fast. The fast jump also lets you modify the pace of the game, because the hero jumps faster than it walks.
Finally, boss fights occur in flight mode. You can drag up and down on the screen to move the hero up and down without any gravity. By releasing the screen, you can charge a shot, and when you touch the screen, the hero will shoot that shot.
Because you have to release the screen to shoot, shooting requires commitment: in order to shoot, you need to commit to one position for a period of time. I think I stole this from Other M's missile recharge.
I want to create four more levels, three alternate weapons, and a password system.
(I don't like the name Trigger Finger, but it was the first and last name I could think of.)
1 note · View note
anxietyofninfluence · 7 years
Text
Truth
Truth is what exists regardless of your perception. The Truth is, my shirt isn't blue; it just reflects light with a wavelength of 475 nanometers. But it's easier to just agree that light with a wavelength near 475 nm is blue. Also, the only way to interact with Truth is through perception.
0 notes
anxietyofninfluence · 7 years
Text
Abstraction
When you take a series of concrete instances and make an observation that applies to all of them, that's abstraction.
I PROGRAM FOR A LIVING
Say I want to multiply 3 times 4. Here's the most concrete function I can come up with:
3 + 3 + 3 + 3
This takes three and adds it to itself four times, and it will work in the one instance that you want to multiply 3 times 4. What if I want to multiply 6 times 4?
6 + 6 + 6 + 6
Here we go, a function that multiplies 6 times 4. All I had to do was copy and paste the original function and put 6 where I had 3.
To abstract from this layer, I would need a function that captures both my 3 * 4 function and my 6 * 4 function. Something like...
X + X + X + X
This function takes any number X and adds it to itself four times. If I tell X to be 3, I get 3 times 4; if I tell X to be 6, I get 6 times 4.
OVER-ABSTRACTION
Abstraction is a double-edged sword. It's great, because you can talk about multiple cases with one statement, making you concise. But it's awful because it's hard to know exactly what you're saying.
If I write down "X + X + X + X" on a piece of paper, I can't really make sense of what it does until I fill in X.
This means that when you go up a level of abstraction, it can be hard to get back to your concrete data. It's easy to misunderstand your abstraction.
For example, when driving around town, I encounter at least one person per day walking in the street without using a crosswalk.
One possible abstraction: "Most people in town jaywalk." I've collected months and months of people just walking out into the road and weaving between cars. So, it seems to me that most folks must do it. This abstraction is inaccurate, though, since I haven't actually seen a majority of people jaywalk--just a lot of people, which may end up being a minority of the town. (See the Chinese Robber Fallacy.) My set of experiences does not literally include most people in town.
Another possible abstraction: "Whenever I drive in town, I need to watch for jaywalkers." This one fits my experiences accurately. Day 1, I encounter a jaywalker. Day 2, I encounter a jaywalker. Day 3, nothing. Day 4, I encounter a jaywalker. So, it's fair to abstract out the day and say, "On day X, I might encounter a jaywalker."
THE POINT
Abstractions can be great. They show underlying similarities that relate sets of data. They can also be stretched and misapplied.
EXTRA NOTES
See this helpful "ladder of abstraction," not to be confused with linguistics. Apparently Less Wrong has a post on it, so I'll have to give that a read.
0 notes
anxietyofninfluence · 8 years
Video
youtube
New episode of Ninchronicles that talks about the first F-Zero game on Super Nintendo!
This superspeed racing franchise first showed up when the Super Famicom launched in Japan back in 1990.  You might know it as the origin point of Captain Falcon but he doesnt get a whole lot of screentime in this game!
The fantastic art of Captain Falcon in his retro outfit was done by @zanreosauce! Check out her video game company webcomic here!
7 notes · View notes
anxietyofninfluence · 8 years
Text
Video Games are Finite State Machines
Finite State Machines?
Video games are finite state machines. Some of you will roll your eyes for how obvious this statement is, but you saw the title above. Others might not be familiar with the concept of a "finite state machine." The concept of a finite state machine describes how software works. The idea is, you have one state, an action is performed, and you move into another state. In particular, each state is made up of various data. Then, when an action happens, that data is changed, moving into a new state. The Bank Let's say you go to the bank and open up a savings account. This is a state machine! You get a bank statement: it says you have $0.00 savings in your account, and you have a 5% interest rate. This bank statement is your state: the size of your savings and your interest rate. Then, you deposit $1.00. You get a new statement that says you have $1.00 in your account, and it has a 5% interest rate. This is your new state: $1.00 savings and 5% interest. You got to this new state with an action: the deposit. Finally, the end of the month comes, and your account accrues interest. You get a new bank statement: $1.05 savings and 5% interest. The action this time was the month ending: every time the month ends, the bank uses your savings amount and interest rate to determine your new savings amount. An Actual Video Game Video games are state machines, too. Their states are described in programming, but we can observe them onscreen. In Super Mario Bros., the state of the game would describe Mario's onscreen position, how many lives he has, what kind of powerup he has, so on and so forth. It would also say what level he's in and what the enemies are doing. Because the state of a video game is described in programming, the actions can be wide and varied. One action might be player input: for instance, when you hit the A button, Mario jumps. This carries the game into a new state, where Mario has a different position on the screen. And just like the bank account, certain actions happen without your input. Because Super Mario Bros. takes place in real time, each frame that's drawn is a new action. It will make time pass and eventually decrement the onscreen timer. If Mario has just begun running, time will also determine how fast he moves, because he builds up speed over time.
0 notes
anxietyofninfluence · 8 years
Video
youtube
New Ninchronicles from Wariofan63!
1 note · View note
anxietyofninfluence · 8 years
Text
Federation Force Multiplayer
These are examples of player actions where one player impacts another. I’ve been playing with my friends Adrian and Daniel.
1.) Before each mission, players can choose special one-use items to bring.
The item selection is finite and shared amongst the whole party. So, if there are 10 missiles, and one player takes 8, then the other players can only take 2.
Each player has a weight limit for these weapons. Players must find a balance between different items to make the most of the weight limit. One solution is to find "classes": ways that players can specialize in certain types of items. By giving all of a certain item to one player, that player can focus on using that particular item and excel in its use. This way, the items are better used than if they were spread evenly among players unfocused in their use.
For instance, Daniel is a medic of sorts, carrying as many healing capsules and shields as is feasible. Adrian, on the other hand, is the "warrior," taking super missiles whenever they are available.
Because MOD chips affect how certain items work, the player's MOD chip selection can suggest a certain "class." Note that the player can only use a precious few chips at one time: players are encouraged to use these wisely to define their role.
"Classes" are not strict because the player can determine their balance of item loadout. Adrian, Daniel, and I will often all take missiles, but Daniel might take fewer than Adrian and myself. Missiles are not useless for Daniel, but they are not his focus.
2.) Certain items impact players: healing capsules and shields (when pinned to a player).
3.) Certain doors require each player to step on a switch before opening.
4.) Just by putting multiple players in the same space, multiplayer is dynamic.
Two players can focus on one enemy/objective or split up to focus on multiple.
In "Slipstream," Adrian will push spheres, I will shoot enemy carriers, and Daniel will swap between both jobs.
In "Insurrection," one player in a mech must provide cover for other players who are travelling along a separate path outside of their mechs. Federation Force has a number of scenarios where players will be unevenly equipped, begging one player to cover another player (one player has to carry something, one player has the turret, etc.).
If an Omega Bruiser is focused on Adrian, I can walk to its back and shoot its weak spot.
In "Infiltration," if one player sets off the alarm, all pirates in the room are alerted, meaning all players must adapt to the alert.
Players can share information (if they are in the same room or have a voice chat program).
In "Cauldron," Adrian will yell out when Sawken is about to jump out of the water.
The voice commands are supposed to do this, I think.
There is no friendly fire, but player shots will dissipate harmlessly against other players. If Adrian shoots at something and I step in the way, I can block his shot.
0 notes
anxietyofninfluence · 8 years
Video
youtube
Level design analysis of Super Mario Land 2 - Wario’s Castle. Please hit me up if you have an interest in joining future discussions of Super Mario Land 2.
0 notes