I own a small building downtown, and one of the units in that building is rented out to a fitness company that holds classes, the sort you might see taking place in a gym. Karate, cycling, Tae Bo, you know the sort of thing I'm talking about.
Well, the other day I was down there checking up on things, and a karate class was just finishing up. Now, there was an aerobics class of some kind called Physics in Motion, which was supposed to start right afterwards. Unfortunately, as far as I could tell, the instructor wasn't there. She simply didn't show up. Of course, the people taking the class were there, and they wanted their exercise!
Obviously, I too wanted them to have their exercise. I wanted their money! So I did the only natural thing that any reasonable property owner would do, which was to pose as a substitute instructor and lead the class myself. I gave a little spiel which proceeded in a manner similar to the following:
"So, everyone gather around, Physics in Motion is going to begin. Your regular instructor isn't here tonight, but apparently I'm some kind of fitness expert, so I'm going to lead instead. You see, in aerobics we move our bodies a lot, and I guess the basic idea is that you sweat a lot and therefore start burning fat or something like that. I don't know, but people do this stuff, so I guess it works. Anyway, today's animal is the speed leopard! Er... I think it was maybe the cheetah? Nevermind, let's get started."
So I started to jog very lightly in place, and the people enrolled in the class followed suit.
"This feels pretty good. Starting to feel the burn. Yeah, that's good! Getting in shape!"
We continued to jog in place like this for about a minute.
"Let's just keep this up! This is good! Nice form, everybody!"
Finally, someone said to me, "I don't think this is going to work."
Thursday, December 26, 2013
Tuesday, December 10, 2013
A Case for Emotional Correctness
First of all, Sandy Kohn's TED talk about emotional correctness is relevant to the present discussion, and in fact, prompted me to write it, though the thoughts that follow have been boiling in my mind-kettle for some time.
I intend to argue roughly that anger is counterproductive to serious debate about important controversial issues, and in fact, irrational.
When you feel very strongly about something and hold a very strong opinion about it, possibly on account of having conducted a careful and thorough rational analysis, it is easy to view those with whom you disagree as simply being unethical morons. That is, it's easy to feel justified in disregarding your opponents' opinions via a line of thinking that amounts to something like:
In my estimation, this is very common. However, I also consider it to be very rude, but also very counterproductive because it tends to cause the focus to be drawn away from exploring the issue and placed onto the goal of defeating one's enemies by any means necessary.
For instance, suppose Drew and Glenn are debating the issue of abortion and have this brief exchange:
Drew: I think abortion should be banned.
Glenn: So you support rising child homeless rates? I can't understand how you are willing to hold such a position!
Or possibly:
Glenn: I think abortion should be legal.
Drew: So you support the murder of babies? I can't understand how you are willing to hold such a position!
Both of these cases are problematic because in each case the indignant responder projects particular ethical assumptions on the other person, who probably doesn't make those assumptions. They also erroneously assume particular reasoning on the part of the other person (i.e. no one wants to ban abortion specifically because doing so will increase teenage homelessness, and similarly no one supports its being legal specifically because they want babies to be murdered). But unfortunately, this is not an extreme hypothetical situation. These are the sorts of things we actually hear people say with respect to this issue.
But suppose I am very, very, very convinced that my opponent's stance is completely immoral or incorrect. Am I justified in being angry at them for their immoral position? Possibly, but if you are so angry, then it is at least wise to make a conscious effort not to let it affect your performance in an intellectual debate.
However, I argue that it is better to avoid such anger when possible, and especially with respect to issues that are very controversial. The reason why is that it undermines the importance of the issue. If the opinions on an issue are divided roughly equally, even amongst intellectuals, then it stands to reason that there exist seemingly rational means of arriving at either opinion (for the sake of argument, let us suppose it's a binary decision in question). One's anger about the opposing opinion seems to imply a belief that the correctness of the correct answer is roughly obvious provided you think about it reasonably carefully. In essence, rather than saying (implicitly) "my opponent disagrees with me because of their use of a different argument, one which I consider invalid but which a reasonable person in their fallibility might consider valid, which is undesirable but still morally acceptable" you are saying (again, implicitly), as I suggested above, "my opponent disagrees with me not because of an ultimately invalid but seemingly correct argument, but rather because they are stupid or immoral or both, and this is bad, bad, bad!!!" However, given that it seems rational to assume that there exist apparently rational means of arriving at either opinion, the second attitude is actually likely an irrational one. It is the attitude of a person who presupposes that their own reasoning is not only flawless but also obviously correct to anyone who will hear it.
Am I saying that in debating important real life issues we should be emotionless robots? No, of course I am not. It is natural to become angry at what we perceive to be immoral attitudes. What I am saying is that it behooves us to rein in that anger and give the benefit of the doubt to those with whom we disagree and presume that their actual reasoning (of which we are initially unaware, since it is someone else's reasoning) is at least worthy of genuine examination, because it is by doing so that we dignify the importance of the issue under discussion.
Emotional correctness, as Sally Kohn puts it, supports this motive, and emotional incorrectness is in stark opposition to it. The example Kohn uses is a good one. Someone who claims to hate immigrants doesn't necessarily actually hate immigrants because they're just a hateful person who has chosen to be immoral and mean. It is probably because of some other emotion, such as fear, which we can easily identify with and understand. This is the common ground that Kohn seeks to find. I believe we should all seek to find it.
I intend to argue roughly that anger is counterproductive to serious debate about important controversial issues, and in fact, irrational.
When you feel very strongly about something and hold a very strong opinion about it, possibly on account of having conducted a careful and thorough rational analysis, it is easy to view those with whom you disagree as simply being unethical morons. That is, it's easy to feel justified in disregarding your opponents' opinions via a line of thinking that amounts to something like:
- On account of my careful and thorough reasoning, my stance is the ethical and rational one.
- Thus, if my opponent had considered the issue as seriously and as carefully as I have, then he or she would agree with me.
- My opponent disagrees with me.
- Therefore, my opponent has either failed to consider the issue seriously and carefully to a satisfactory degree or else has done so but nevertheless holds a different stance because he or she is unethical, irrational, or stupid (possibly some combination thereof).
- Engaging in a serious debate about an important issue without considering the issue seriously and carefully is itself unethical, irrational, and stupid.
- Ergo, my opponent is unethical, irrational, or stupid, and probably all three.
- Unethical and irrational morons do not deserve to be treated with respect.
- Therefore, I shall disrespect my opponent.
In my estimation, this is very common. However, I also consider it to be very rude, but also very counterproductive because it tends to cause the focus to be drawn away from exploring the issue and placed onto the goal of defeating one's enemies by any means necessary.
For instance, suppose Drew and Glenn are debating the issue of abortion and have this brief exchange:
Drew: I think abortion should be banned.
Glenn: So you support rising child homeless rates? I can't understand how you are willing to hold such a position!
Or possibly:
Glenn: I think abortion should be legal.
Drew: So you support the murder of babies? I can't understand how you are willing to hold such a position!
Both of these cases are problematic because in each case the indignant responder projects particular ethical assumptions on the other person, who probably doesn't make those assumptions. They also erroneously assume particular reasoning on the part of the other person (i.e. no one wants to ban abortion specifically because doing so will increase teenage homelessness, and similarly no one supports its being legal specifically because they want babies to be murdered). But unfortunately, this is not an extreme hypothetical situation. These are the sorts of things we actually hear people say with respect to this issue.
But suppose I am very, very, very convinced that my opponent's stance is completely immoral or incorrect. Am I justified in being angry at them for their immoral position? Possibly, but if you are so angry, then it is at least wise to make a conscious effort not to let it affect your performance in an intellectual debate.
However, I argue that it is better to avoid such anger when possible, and especially with respect to issues that are very controversial. The reason why is that it undermines the importance of the issue. If the opinions on an issue are divided roughly equally, even amongst intellectuals, then it stands to reason that there exist seemingly rational means of arriving at either opinion (for the sake of argument, let us suppose it's a binary decision in question). One's anger about the opposing opinion seems to imply a belief that the correctness of the correct answer is roughly obvious provided you think about it reasonably carefully. In essence, rather than saying (implicitly) "my opponent disagrees with me because of their use of a different argument, one which I consider invalid but which a reasonable person in their fallibility might consider valid, which is undesirable but still morally acceptable" you are saying (again, implicitly), as I suggested above, "my opponent disagrees with me not because of an ultimately invalid but seemingly correct argument, but rather because they are stupid or immoral or both, and this is bad, bad, bad!!!" However, given that it seems rational to assume that there exist apparently rational means of arriving at either opinion, the second attitude is actually likely an irrational one. It is the attitude of a person who presupposes that their own reasoning is not only flawless but also obviously correct to anyone who will hear it.
Am I saying that in debating important real life issues we should be emotionless robots? No, of course I am not. It is natural to become angry at what we perceive to be immoral attitudes. What I am saying is that it behooves us to rein in that anger and give the benefit of the doubt to those with whom we disagree and presume that their actual reasoning (of which we are initially unaware, since it is someone else's reasoning) is at least worthy of genuine examination, because it is by doing so that we dignify the importance of the issue under discussion.
Emotional correctness, as Sally Kohn puts it, supports this motive, and emotional incorrectness is in stark opposition to it. The example Kohn uses is a good one. Someone who claims to hate immigrants doesn't necessarily actually hate immigrants because they're just a hateful person who has chosen to be immoral and mean. It is probably because of some other emotion, such as fear, which we can easily identify with and understand. This is the common ground that Kohn seeks to find. I believe we should all seek to find it.
Thursday, October 24, 2013
Null Terminator - In the Presence of My Enemies
As I've mentioned before, I am producing an EP and a full length album for Galactitronic Super-Space-Composer Null Terminator. The last track I posted was from the EP, which should be released first, though I still have no idea when it will be completed.
Anyway, I felt like officially sharing another track, though this one had already been available. I simply had never really pointed it out on this blog before. This will be the third track from the full length. I should add that while the EP will probably be 100% composed by Null Terminator, this track is in fact almost completely my own composition, so on the full length I suppose I will be credited as co-composer, which is good, obviously, because I have been wanting to get into the professional musicdom for a long time now.
Anyway, I felt like officially sharing another track, though this one had already been available. I simply had never really pointed it out on this blog before. This will be the third track from the full length. I should add that while the EP will probably be 100% composed by Null Terminator, this track is in fact almost completely my own composition, so on the full length I suppose I will be credited as co-composer, which is good, obviously, because I have been wanting to get into the professional musicdom for a long time now.
Monday, October 14, 2013
Interval Permutations
Drew F. Nobile has written an article called "Interval Permutations" about how interval sequences can be permuted in order to produce different pitch class sets that are audibly related. Of particular interest is his example 18, a graph that depicts all of the possible relationships made by such intervallic permutation between tetrachordal set-classes. I have created my own version of this graph to emphasize the natural symmetry present:
Monday, July 8, 2013
Source Code for Uushuvud Released
I have made the source code for my 7DRL Uushuvud available here.
I wrote the code in the span of about five days, so don't expect masterfully clean code. This could surely be improved in many ways.
I wrote the code in the span of about five days, so don't expect masterfully clean code. This could surely be improved in many ways.
Thursday, May 2, 2013
Null Terminator - Electrotechnics
For those who don't know, I have been co-producing (approx. 75%) and co-writing (approx. 25%) the first full length album of the talented Galactitronic Space Composer/Superhero named Null Terminator for some time now. Half finished with it, work on the album has begun to suffer from the stagnation of creative momentum. This is for a lot of different reasons, but it's actually kind of fine, since I really ought to be keeping up with work on the other thing I'm writing music for anyway.
So I asked NT to write six tracks for an introductory EP to gently make the world aware of his music. I reasoned that such an album would be more easily completed than the full-length, and it would probably help to flush our clogged creative buffers.
Apparently, it was a good idea. Just a few days after I made the suggestion, he sent me the first new score, from which the following track is derived. This is really just a rough preliminary mix. I'm not really sure how the final cut will sound, but it'll probably be pretty much like this:
Tuesday, April 16, 2013
Outwitters: No Spawns! (Part Two)
Once more I am talking about...
...so if you are not deeply interested in this video game, then you might find this entry to be just a little bit boring.
Adopt the most aggressive position possible without endangering your units.
This is probably much more evident from my play late in the tournament than at the beginning, and in fact, I think the application of this strategy is perhaps most clearly seen in this penultimate game played on Sweetie Plains against !_elle_!. Thus, I felt that for the second entry of the Outwitters: No Spawns commentary series, a move by move analysis of my thought process in playing this particular match would be most appropriate. I’ll also provide a few comments on moves made by my opponent, but I’m mostly going to focus on why I made the moves I made and where I might have made better moves.
P1: !_elle_!
P2: TheGreatErenan
Map: Sweetie Plains
Turn 2 (Erenan): My primary point of thinking in my first turn is to ensure that my opponent cannot capture my medic, sniper, or runner. I don't think she would actually do any of these things, as this would be far too risky of a move for not being allowed to spawn new units, but I want to be absolutely sure they are safe.
So I work out the most aggressive hexes that her runner could have moved to on turn 1. None of these hexes are within reach of my sniper, so I decide to keep it where it is this turn. I think the best thing is to boost the runner and ensure the medic can't be reached. If she had advanced her runner as much as possible on the right side of the map, then she could theoretically capture my medic, so I move my runner in the way, boost it for safety, and hide my medic behind it.
I leave my heavy where it is and move my soldier to the wit space to ensure I'd have plenty of wits later on.
Turn 4 (Erenan): My opponent has had two turns now, allowing plenty of mobility, so I need to regain visibility in the center of the map. But where exactly should I put my runner? My opponent's runner can't capture it, so I need only consider her heavy, soldier, and sniper. Her sniper obviously can't be a threat at this point. Her soldier most likely stepped on the wit space in turn 1. If it didn't, it could theoretically be anywhere in the fog on the right side of the map. I doubted it would be very far up though, as this would be overly aggressive, and in any case, I suspected that I'd win out in the ensuing exchange if my opponent were to attack at this point. The heavy couldn't really be anywhere especially threatening. So I put my runner on my central spawn space, safe from the heavy, and almost certainly safe from the soldier.
After gaining visibility, it seems my opponent has not been too aggressive. Now, I need to boost my sniper, but I want to guarantee the safety of both sniper and medic. Her runner could be anywhere at the edge of the fog of war. I realize here that if I put my medic next to my sniper, then I can block her runner's access to it with my heavy. Seems like a good move to me, so I do it.
I advance my soldier. Strictly speaking, this move is a gamble, theoretically putting it within reach of my opponent's heavy. However, I decide that her heavy had probably been on the wit space in turn 1 and wouldn't be able to reach it, so I move my soldier a hex too far south, risking its safety for an extra five hexes of visibility and reach.
Turn 6 (Erenan): I start off with a visibility grab with my runner. Technically, this is putting my runner within reach of where my opponent's soldier could have been, but I decide to go for it anyway.
I've spotted my opponent's heavy! This is useful information. I know the furthest west her sniper could be, and I decide to assume that it was her soldier that took the rightmost wit space in turn 1. This makes her leftmost spawn a safe spot for my soldier, where it could not possibly be captured. So I move my soldier there. This was likely a mistake, as it reveals to my opponent my soldier's position. I suppose I could have put my soldier a hex to the northwest of the spawn space, and it would have remained in my opponent's fog of war. However, I still didn't know where her runner was, so I didn't know the extent of her fog of war, and I figured that with this move, she'd see my soldier anyway, so why worry about the spawn space?
As a side note, it could be that the appearance of an advanced soldier from the fog of war could potentially give one's opponent the idea that your forces in general are getting dangerously advanced. The goal here, I suppose, would be to throw your opponent into a panic in the hope that she would make a mistake upon which you may capitalize.
But I'm not thinking of psychological warfare here. I am only looking for the most advanced position possible where I can safely put my units. This space appeared to be safe.
In that sense, it seems clear that I have room to advance my heavy and sniper, so I do so. The medic comes along to ensure the heavy remains healthy.
Turn 7 (elle): Here it appears that the appearance of my soldier and heavy have prompted my opponent to move her forces in that direction in order to defend. Not a bad idea.
Turn 8 (Erenan): Now I know where my opponent's soldier is! However, I want some additional visibility on the right side, so I move my runner over to fill in some of that ground.
I don't spot any new units, so I'm still not sure where my opponent's runner, sniper, and medic are located. But I do know they're not on the right edge of the map.
On that note, my opponent has had four turns. This means her sniper could be near enough to take out my soldier if I don't move it. Advancing seems like a bad idea, so I retreat instead. My soldier forms a wall with my heavy, and I move my medic to buff the soldier. I'm careful to ensure it cannot be reached by my opponent's heavy or soldier.
I advance my sniper, as it seems perfectly safe to do so, and I gain nothing by leaving it where it is.
Turn 9 (elle): This turn appears to be done in the interest of gaining visibility on the right side, probably just watching out for my runner in the interest of protecting her medic, as she can already see my heavy and soldier, and she knows where my medic is (she saw it buff my soldier).
Turn 10 (Erenan): I advance my soldier to a point where it cannot be attacked by both heavy and soldier. This move was a mistake on my part. Clearly my opponent's sniper might have been capable of moving within range (in fact, it was). Nevertheless, I move my heavy forward to help if needed.
I advance my runner a bit more to gain that extra little inch of visibility, careful to ensure it cannot be within range of my opponent's sniper, which could theoretically still be hiding in the fog where it started. However, I spot the runner there instead. Now, I'll know exactly where her runner is on the next turn, even if it moves back into the fog of war.
Knowing where my opponent's runner is, I can easily calculate where I can safely put my medic and sniper.
Turn 11 (elle): My opponent moves her runner up and gains visibility of all five of my units. This is her chance. After gaining perfect information, and seeing that she could capture my soldier, she should attempt to work out who would come out ahead in a direct exchange of units. To me it looks as though she would win.
Very briefly, what would probably happen, as best as I can work it out:
She takes my soldier with her heavy and sniper
I take her heavy with my heavy and sniper
She takes my heavy with her soldier and sniper
I take her sniper with my sniper
She takes my sniper with her soldier
I cannot recapture with only a runner
She is left with a soldier and I'm left with a runner: elle wins!
But this doesn't happen. Instead, she leaves her units where they are.
Turn 12 (Erenan): I inch my runner forward, hoping to spot my opponent's sniper in the fog, but there's no sniper there.
I know where her runner, heavy, and soldier are, so I can work out safe spots for my soldier. I find an advanced position along the side where I know it cannot be captured, even if my opponent's sniper is right next to it. Her heavy, soldier, and runner cannot reach it, and the sniper alone doesn't have enough firepower. I find a spot where my medic could hop down to heal it if necessary (or the soldier could hop back up to be healed) where it cannot be reached by opponent's runner (it's blocked by my heavy).
I advance my sniper, which is still perfectly safe from harm.
Turn 13 (elle): My opponent moves her sniper toward where my soldier has just moved, probably a good idea.
She moves her soldier down on the right side. I'm not sure, but I figure she's watching out for my runner, which she knows is already over there somewhere. She doesn't spot it with the soldier, so she moves her runner over to where it was last seen. She finds it and attacks it, bringing it down to one health.
Turn 14 (Erenan): I return the attack upon my opponent's runner (might as well), and retreat it. I cannot ensure my runner's survival here. However, I make sure to put the runner somewhere as close to my sniper as possible. It seems here that if I move my sniper northeast one hex, then if my opponent were to follow my runner to finish it off, I would be able to move my sniper within range to recapture. So I follow this plan.
I now know where all of my opponent's units are except for her sniper, which could only be in one of a handful of still fog-covered hexes at this point. I work out where her heavy, soldier, and runner can reach, and I position my heavy and soldier in as advanced positions as possible where they yet cannot be captured.
I move my medic to a safe spot where it can reach either my heavy or my soldier if necessary.
Turn 15 (elle): My opponent wisely does not capture my runner. Doing so would have meant the loss of her runner as well. In this "no-spawns" game, losing your runner is a very bad thing. Visibility is extremely important.
Unfortunately, her runner's new position does not gain her enough information. She advances her sniper to the left without knowing for sure whether it will be safe there. She uncovers my soldier but cannot capture it. She already moved her heavy, soldier, and runner, so she cannot attempt to move them into position to recapture if I should capture her sniper. She might have benefited from moving the sniper first here, since then she could have moved her soldier and heavy to help take my soldier if necessary.
Turn 16 (Erenan): I know where most of my opponent's units are now, so it's easy to work out where the safe spots are. I see that if I move my medic down on the left side to heal my soldier, my medic will still be safe. Furthermore, I see that if I move my healed soldier forward to capture the sniper, my opponent will not be able to recapture. This seems like the opportune moment, so I buff my soldier and take the sniper.
I move my sniper to make room for my runner and retreat my runner a bit further to keep it safe until I can heal it.
My heavy is advanced as far as it can be without putting it in danger, so I leave it where it is.
Turn 17 (elle): My opponent moves her runner and attacks my soldier. I suspect that she thought my medic was adjacent to this hex and that it would be within range to capture it. However, I was careful to keep it out of range, so she attacks my soldier instead. Even attacking with her soldier as well isn't enough to take my soldier out, but she nevertheless moves her heavy in to help on the next turn.
Turn 18 (Erenan): I capture the runner with my soldier. Advancing my sniper and runner, I see where my opponent's heavy is, so I retreat my soldier and heal it, careful to keep my medic out of reach of my opponent's attacking units.
At this point, I realize that I can advance my heavy by a single hex without putting it in danger, so I do so.
Turn 20 (Erenan): I see my opponent move her heavy further away from the center, and I decide that the center is where this game will end. I heal my runner and move it to capture the medic. I advance my central attacking units and move my soldier up to support the offensive. At this point, my opponent has no good moves to make. On the next turn, I'll either capture one of her remaining two units or destroy her base.
Turn 22 (Erenan): The game is over.
Until next time...
Thursday, April 4, 2013
RE: Radiohead's "Pyramid Song": Ambiguity, Rhythm, and Participation
Music notation is descriptive. There is no single absolutely correct way of transcribing any piece of music any more than there is a single absolutely correct way to express particular fractions. 1/2 is 2/4 is 4/8 is 8/16. Not a single one of these is incorrect.
However, it behooves us to transcribe music in such a manner that it is readily understandable and indicates the correct feel of the music. A person reading and playing from the score, assuming they are reasonably capable on their instrument, should be able to reproduce the music accurately. With respect to this particular goal, certain ways of transcribing a piece of music are obviously better than certain others.
There have been inordinate measures of discussion concerning Radiohead's "Pyramid Song" from their album Amnesiac. It's an excellent song, definitely worthy of analysis, and given that the rhythm is relatively unusual for a piece of music written by a rock group, the amount of discussion is perhaps understandable. In fact, for as long as I've been aware of Radiohead, my opinion has been that, in spite of all the talk of their purported innovation and weirdness, the best things they have going for them are: first and most importantly, a firm sense of effective melodic and harmonic content; and secondly and slightly less importantly, a special talent for arrangement and production that lends their work a certain uniqueness and importance within the music world. They matter in a musico-historical sense, but not because they are weird or innovative (they aren't especially weird or innovative, in fact). They matter because of compositional prowess.
Having said that, "Pyramid Song" is a special example of a piece of music that uses nonstandard rhythms in an effective way that benefits the music significantly, rather than using them for the sake of being unusual. Melodically and harmonically, it is very well written. Rhythmically, it is also very well written, and unusual rhythms are definitely my compositional specialty. So to me, it is not surprising that it has generated so much discussion so consistently. The discussion apparently goes on even today.
In the March 2013 issue of Music Theory Online, Nathan D. Hesselink offers his thorough take on the song, compiling a comprehensive list of analyses of the song's rhythm. Unfortunately, the simplest and clearest interpretation in my estimation receives relatively little coverage. Two of the comments made under the mixed meter subheading hit the mark exactly, but none of the example images highlight these, though some are close.
In my opinion, the best way to write it is as follows:
Consistent cycles of 3/4, 2/4, and 3/4 throughout the entire song. The lengths of the five chords in each cycle are two dotted quarters, a half, followed by two more dotted quarters. It is swung, so that odd numbered eighth notes are twice as long as even numbered eighths, as though we were dealing with triplets. Thus, in terms of the feel of the music, the 3/4 bars have 9 atomic note lengths, while the 2/4 bars have 6. What I mean is that if you divide the 3/4 bars into 9 equal pieces and the 2/4 bars into 6 equal pieces, this is sufficient to depict every note in exact detail. The first chord is 5 atoms long, the second is 4, the third is 6, the fourth is 5, and the fifth is 4.
Thus, you could theoretically describe the music as cycles of 9/8, 6/8, and 9/8 as some have suggested. However, this requires tying notes together just about everywhere and needlessly complicating the score. It is far simpler to use 3/4, 2/4, and 3/4 and then plainly indicate the feel of the swing at the top of the score. This requires absolutely no ties, and correctly indicates what's going on.
Compare and decide for yourself. This...
...is technically equivalent to this...
Which do you prefer?
Friday, March 22, 2013
What Happens When You Complete "A Man and His Droid"
My dreams last night were weird. It's kind of a jumbly haze now, or perhaps a hazy jumble, but the main thing is that it's hard to express clearly what happened.
I think I was driving in a car with Randall Munroe and we were trying to get to the top of an extremely tall parking structure. For some reason, it was necessary to collect a variety of different species of octopuses on the way, and in fact, I think collecting these cephalopods and organizing them in some important fashion was somehow the means by which we were travelling up the structure. Frustratingly, they were bigger than regular octopuses, and they were angry and mean and hostile to us and kept trying to attack our vehicle. And to make matters worse, Randall and I couldn't agree on the order in which the many monstrous mollusks should be gathered. It was a losing arrangement from the get-go.
And then at some point I think we gathered enough of the eight-leggers to be awarded a private concert given by Robert Fripp. Unexpectedly, he was a stop-motion animated clay Fripp. And he had five torsos. And rainbow colored hair. And his hair was in the form of large bundles of wheat.
So that was fairly normal, but otherwise, I seem to recall that my dreams were weird last night. I just can't really remember any of the weird parts.
I think I was driving in a car with Randall Munroe and we were trying to get to the top of an extremely tall parking structure. For some reason, it was necessary to collect a variety of different species of octopuses on the way, and in fact, I think collecting these cephalopods and organizing them in some important fashion was somehow the means by which we were travelling up the structure. Frustratingly, they were bigger than regular octopuses, and they were angry and mean and hostile to us and kept trying to attack our vehicle. And to make matters worse, Randall and I couldn't agree on the order in which the many monstrous mollusks should be gathered. It was a losing arrangement from the get-go.
And then at some point I think we gathered enough of the eight-leggers to be awarded a private concert given by Robert Fripp. Unexpectedly, he was a stop-motion animated clay Fripp. And he had five torsos. And rainbow colored hair. And his hair was in the form of large bundles of wheat.
So that was fairly normal, but otherwise, I seem to recall that my dreams were weird last night. I just can't really remember any of the weird parts.
Saturday, March 16, 2013
7DRL Challenge 2013: Uushuvud (End of Day Five)
A rough Windows only version of Uushuvud is complete. You can download it here. I hope, I hope, I hope that it will run on your machine.
Glory! |
Controls:
Keypad/Arrow Keys: Move or attack adjacent enemies
P: Pick up items
R: Read books
H: Use health potion (restores 20 HP)
T: Use teleport potion (randomly teleports you somewhere within a ~60 cell x ~60 cell square area around your current location)
E: Use explode potion (hits all enemies within 5 cells of your location with fire)
X: End level (only valid in "end-of-level" temple (a big room with a small room inside with a lighter floor color))
Q: Quit (no confirmation dialog at all; this will immediately close the program)
Known issues:
- Swords appear as black squares. I haven't been able to figure out why.
- When you die, the program instantly closes. There is no "You died! Sorry!" screen or anything.
- The enemies get stuck on rocks and walls easily.
- The game is a little hard. This is a feature, not a bug. It's a roguelike.
- "Tablespoons" is misspelled in the partial apple pie recipe. You might say this is an issue so minor that a point on a "known issues" list isn't warranted, but think again! The pies come out tasting weird. Does this sound unimportant to you?
Tips:
- Don't accidentally press 'Q'. You will lose your progress.
- Pick up every potion in a level before travelling to the next one. This is especially true on early levels where the situation isn't very dangerous. You will need those potions later.
- The number printed before weapons and armor is the level of the item, not a quantity. I know it looks weird, but whatever...
- If you pick up a weapon or armor, you will discard your current weapon or armor. It is gone forever, so don't pick up equipment that's worse than what you already have.
- Try to avoid using explode potions on single enemies. The ability to attack multiple nearby enemies at once is valuable. Try to lure them together.
- The enemies get stuck on rocks and walls easily. You can use this fact to help you escape when running low on HP and potions.
- Beware of Gaums.
- Spears and axes are generally the best weapons, followed by swords and maces, then clubs, and finally daggers. However, when choosing which weapon to use, also consider the weapon's level. A 12 Dagger is better than a 1 Spear.
- Armor from worst to best: Leather, Iron, Steel, Tempered Steel, Perfect Steel
- Seriously, beware of Gaums. They are mean.
- When you level up, your HP increases and is restored to its maximum. Watch your EXP and consider whether health potions might be saved until after you level up.
- For that matter, keep an eye on your HP at all times.
- Have I mentioned to beware of Gaums?
- Good luck!
Friday, March 15, 2013
7DRL Challenge 2013: Uushuvud (Halfway through Day Five)
Things are coming together. Still not quite there yet, but it's looking good!
I'm going to be out of town for the weekend, so today is the last day that I can really work on this. That means if I succeed, this will be a 5DRL! If not, then oh well.
I think I can manage it!!!
Thursday, March 14, 2013
7DRL Challenge 2013: Uushuvud (Day Four)
There's actually not a lot left to do. Running into bugs now though, so I'm going to keep this entry very short.
7DRL Challenge 2013: Uushuvud (Day Three)
No screenshot today, but there will be probably be one tomorrow. You'll have to be patient. :P
My efforts for day three progressed smoothly. I spent a little time tweaking the level generation, but I kept this to a minimum and focused this time only on fixing real problems with it. Aside from that, I got my item and creature data into a much better state than it was in at the end of day two.
If I release the source code at the end of all this, then some might notice that I am hard coding all my data into tables compiled directly into the program and wonder why I'm doing this. The answer is twofold.
First, I'm used to programming for embedded systems with no file I/O at all.
Second, I'm trying to manage my time wisely. For this project, this means not mucking around with file I/O routines. It's a small game. There's no real need to have my data stored in external files. And there's not going to be any save/restore feature. You have to get through the game in a single go. So there's no file I/O, and I can spend my time working on other stuff.
Last time I tried a 7DRL, I got so carried away with level generation that I think I spent three or four days just on that. There wasn't enough time for everything else, and the game slipped past the seven day mark, and then the fourteen day mark, and now it's more like seven months.
I guess level generation is kind of my thing. I've already spent more time on it for Uushuvud than I had originally intended, but I just really wanted it to be good, even though it's a 7DRL project. That means, first and foremost: No unreachable areas.
My algorithm right now could theoretically produce unreachable areas, but I'm pretty sure it's about 1:10000 for that to happen, and probably like 1:80000 for an unreachable area with important stuff in it (the exit, the player's starting point, etc.). If I make another small change I'm planning that'll take me four seconds, it'll be more like 1:204800000, not really a concern. I'm tempted to write a quick check function that verifies a level has no unreachable areas before showing it to the player, but I really just want to get on with other stuff. Maybe if there's time at the end of development...
My efforts for day three progressed smoothly. I spent a little time tweaking the level generation, but I kept this to a minimum and focused this time only on fixing real problems with it. Aside from that, I got my item and creature data into a much better state than it was in at the end of day two.
If I release the source code at the end of all this, then some might notice that I am hard coding all my data into tables compiled directly into the program and wonder why I'm doing this. The answer is twofold.
First, I'm used to programming for embedded systems with no file I/O at all.
Second, I'm trying to manage my time wisely. For this project, this means not mucking around with file I/O routines. It's a small game. There's no real need to have my data stored in external files. And there's not going to be any save/restore feature. You have to get through the game in a single go. So there's no file I/O, and I can spend my time working on other stuff.
Last time I tried a 7DRL, I got so carried away with level generation that I think I spent three or four days just on that. There wasn't enough time for everything else, and the game slipped past the seven day mark, and then the fourteen day mark, and now it's more like seven months.
I guess level generation is kind of my thing. I've already spent more time on it for Uushuvud than I had originally intended, but I just really wanted it to be good, even though it's a 7DRL project. That means, first and foremost: No unreachable areas.
My algorithm right now could theoretically produce unreachable areas, but I'm pretty sure it's about 1:10000 for that to happen, and probably like 1:80000 for an unreachable area with important stuff in it (the exit, the player's starting point, etc.). If I make another small change I'm planning that'll take me four seconds, it'll be more like 1:204800000, not really a concern. I'm tempted to write a quick check function that verifies a level has no unreachable areas before showing it to the player, but I really just want to get on with other stuff. Maybe if there's time at the end of development...
Wednesday, March 13, 2013
7DRL Challenge 2013: Uushuvud (Day Two)
Everything is white right now, but it will soon be in multiple colors. I spent my first two days mostly developing the level generation for Uushuvud. It is now working to an extent that I consider acceptable. Aside from that, I spent a great deal of time working on the history of the game world and the relatively simple plot that will be present in the game. These are basically finished now. I can focus completely on programming at this point.
I have the beginnings of a data organization scheme for items and creatures, and I think my efforts for today will be focused on fleshing these out and possibly integrating them with the level data, getting items and monsters placed in the game world. If I have time, I'll try to get some basic monster and player movement in place, but we'll see how that goes.
Definitely on track to have this finished by Sunday!
Tuesday, March 12, 2013
7DRL Challenge 2013: Uushuvud
I hereby declare that I am entering 7DRL Challenge 2013!! My game will be called Uushuvud.
Screenshot to come. PREPARE YOURSELF.
Screenshot to come. PREPARE YOURSELF.
Wednesday, January 16, 2013
Outwitters: No Spawns! (Part One)
In my previous entry, I mentioned a
game called Outwitters. I started playing this game several months ago, and it instantly became my new favorite game. In the time since then, however, it has
nevertheless become even more and more interesting and enjoyable to me. I would
recommend it to anyone who enjoys turn based strategy games, on the condition
that they don't mind waiting for opponents to take their turns, an unavoidable
necessity of asynchronous online games. It is available on iPhone, iPad, and
iPod Touch and is free to download, though I highly recommend purchasing the
Uber Pack to gain all the additional teams aside from the bundled one (there
are four total).
I recently participated in a
fan organized tournament in which we imposed the restriction that we could not
spawn any units. We had to use only the units we were given at the start of the
game. One consequence of this was that managing wits was less important. Since
there were no spawns allowed, once a unit was captured, it was gone forever.
There was no replacing it. This style of play demands extremely cautious and
defensive strategies, which means that attacks were rare, and we focused on
moving our units around and buffing them with the medic. Eventually, we had
more wits than we could reasonably spend in a single turn. Soon enough, I
completely stopped thinking about how many wits I had and assumed I could move
and attack (or heal) with each and every one of my five units if I wanted to.
At the beginning of these games, this might not have been quite true, but by
turn 4 or 5, wits were no longer really much of an issue.
I had the thought to write up a
detailed analysis of my experiences, but in planning to do so, I realized that
if I went as in-depth as I really wanted to, then there would be more of
interest in these ten short games than I could reasonably cover in a short
amount of time. Therefore, I decided it might be better to do a short series of
writeups, providing in-depth commentary on a few select moments that I found
particularly interesting.
To start off, here's a really
critical moment from one of my last games as P2. It's from the endgame, the
last few exchanges between my opponent and myself. I was in the process of
sneaking my soldier along the bottom of the map towards my opponent's base when
units up north started capturing each other. If I'd gotten my soldier on his
way a turn sooner, things would have been much simpler, but as it happened the
timing made this a very tense move for me.
P1: harvarnold
P2: TheGreatErenan
Map: Long Nine
P2: TheGreatErenan
Map: Long Nine
We'll pick it up in Turn 8, probably the most precarious moment of the game on my end.
This is a really critical move. At
this point, I'm aware of the locations of all my opponent's units (I'd already
captured his soldier on an earlier turn), though he can't know exactly where my
soldier is. Anyway, I have some choices to make. Let's start with the easy
decisions: It seems clear that I need to capture the sniper with my heavy or
else my opponent would overwhelm me easily on the next turn. I don't have the
firepower to take out the heavy, so it has to be the sniper. In addition, it's
equally clear that I should then capture the medic with my runner, since if I
attack either the runner or the heavy, the medic would simply heal it on the
next turn, and I would have wasted my runner's attack power.
So I move my heavy to the space
southeast of the sniper and make the capture. I also move my runner northwest
of the medic and capture it. The placement of these two units is important.
The placement of both units should
be fairly obvious to seasoned Outwitters players, but I'll explain anyhow. By
putting the runner northwest of the medic, then if my opponent should decide to
capture my runner with his heavy, then he would have to move it away from my
base, which is a good thing for me because I am trying to delay my opponent's
attack on my base as long as possible.
As for my heavy, under very
different circumstances I might have placed the heavy northeast of the sniper
instead of southeast, so as to force the enemy heavy to move before attacking
mine and therefore having to spend that extra wit doing so. Additionally, that
way my opponent would not have had the option of first attacking and then
moving the heavy somewhere else. However, in this scenario it's clear that my
primary goal is to prevent my opponent from destroying my base. Placing the
heavy where I did prevents my opponent from moving the heavy next to my base,
thus gaining me an extra turn.
Now for the tricky part.
My soldier at the bottom of the map
is a tough call. Do I advance or do I retreat? I have to calculate very
carefully here. Do I have enough turns to spare to destroy the enemy base with
that soldier? Or do I need to move the soldier backwards to help defend the
base?
I first consider what would happen
if I advance the soldier.
First of all, I can tell immediately
that my opponent needs at least two turns to destroy my base. With only a
runner and a heavy, only four points of damage can be inflicted in a single
turn, but since my base still has five points, one turn won't be enough.
Unfortunately, with only my soldier
guaranteed an uninhibited attack on the base (and not until my next turn, at
that), it isn't immediately clear if I'll have enough turns at my disposal. It
depends upon whether I'll also have my runner available and what my opponent
does with the heavy and runner menacing my base.
So I have to consider every sensible
possibility for my opponent's next turn. Let's make some simple lists:
For the runner:
1. Move and attack my runner
2. Move and attack my heavy
3. Move and attack my base
For the heavy:
A. Attack my heavy (and move)
B. Move and capture my runner
Combining these lists, there are six
options to consider. Let's start with the easy ones.
I can obviously disregard 1B, since
it would be pure foolishness to attack my runner with his runner and then
capture it with his heavy, since the heavy can capture it unassisted. The
runner's attack would be wasted.
1A is also fairly simple to work out
my response: My runner is buffed, so my opponent can't capture it with only a
runner. Even if he tried to block my runner with his two units...
...this would put his heavy at least
a full two turns away from my base. That means I can at least get his base down
to one point before he gets his heavy to my base. Before that point, however, I
could move my runner somewhere on the left edge of the map where I can hop down
to hit his base, so that if my opponent doesn’t capture it, I’ll win on the
next turn. If he does capture it, it’ll take him another two turns to get his
runner back to my base, and in the meantime, I can slow his heavy down with my
own heavy to give my soldier plenty of time to finish the base off. 1A is
clearly a win for me.
Let's consider 2A:
If my opponent doesn't attack my
base on this turn, then it's clear that he'll need two additional turns to
destroy it. But this option allows me to attack the base with my runner, thus
giving me the extra point of damage necessary to win within only one more of my
turns. So 2A means a win for me, no matter where the opponent's runner and
heavy are placed or what they do on the following turn. I could comfortably
ignore the threat to my base and focus on attacking instead.
How about 2B:
This option basically leaves me with
the choice of whether I should capture the runner or attack the heavy. Since my
runner is gone, it'll take me at least two more turns to destroy the base with
my soldier alone. My opponent isn't going to let my heavy near his base if he
can help it, so if I advance and attack the heavy, then he'll capture it next
turn with his runner and heavy. Of course, this will prevent him from attacking
my base that turn, thus giving me the extra turn that I need to win. If I had
captured the runner instead of attacking the heavy, it's even better, because
then he won't be able to capture my heavy, thus allowing me to win easily on
the following turn. 2B is a win for me.
That leaves 3A and 3B. These are a
bit trickier, because the runner's attack brings my base down to four, putting
it in danger of being destroyed next turn if the heavy gets a chance to touch
it.
3B is perhaps the simpler of the
two.
If no one has attacked my heavy,
then it cannot be captured in the next turn, thus allowing me to move it west
and on the next turn move it next to my opponent's base for the win. The
heavy's capture of my runner means that it'll take two more turns to get it
next to my base, giving me the time I need.
3A is probably the trickiest of all.
If my opponent brings my base down to four points with the runner and keeps his
heavy within range of my base, probably by going around the north end of my
heavy...
...then ostensibly one more turn is
all he needs to win. I need at least two. So I need to make sure he can't
attack my base again with both heavy and runner. This can be done by blocking
the heavy’s movement forward with my runner and heavy.
However, this alone isn't enough. I
have to attack his heavy with both my heavy and my runner, bringing it down to
one point.
This is critical. On his next turn
he won't be able to capture both my runner and my heavy (his runner cannot
capture either unit in this case, as they both have two points left). On my
next turn, I'll be able to capture his heavy with whichever unit he doesn't
capture, thus forcing him to use only his runner to attack my base, which
obviously affords me the time I need to finish off his base.
So it seems that advancing my
soldier is a good idea. My opponent ended up using option 1A, but it doesn't
apppear that there was anything he could have done at this point to stop me
from claiming victory.
I didn't bother working out what
might have happened if I'd tried to retreat my soldier to help defend, but just
glancing at it, it looks to me as though it would have given my opponent a far
better chance at winning.
Under normal playing rules, this
game would have played out differently. We would have continued spawning
additional units, adding strength to our existing forces and severely altering
the tactical implications of the situation. Forcing the players not to spawn
any units makes the game significantly more like Chess. It forces the player to
think much more carefully about where his units can be placed without putting
them in danger. And if he puts them in danger, who will come out on top in the
ensuing exchange of units? It forces a player to consider where their opponent might have his units placed if they are still hidden by the fog of war.
Personally, I wouldn't mind at all if One Man Left officially implemented a "No
Spawns" game type in the Outwitters app and created some new maps
dedicated to this mode. Whether or not they do so is obviously entirely up to
them, but if they did, then I for one would regularly play it.
Until next time…
Subscribe to:
Posts (Atom)