OBLITERATE PAIN AND SUFFERING IN THIS THRILLING ACTION-PACKED AVOID-‘EM-UP! WATCH AS YOU BREATHE LIFE INTO YOUR THANKLESS ENEMIES, OR DON’T! AFTER ALL, THEY DIED FOR A REASON AND I mean you’ve got a lotta stuff going on in your life
Failing isn’t something I do often, and it’s kind of because I don’t try.
In regards to my career, I think it’s understandably harder to fail quickly with video games in particular because that medium is 1) very complicated and 2) extremely young. So, the technology to do something quickly isn’t really there, making it take a while to get anything remotely playtestable by others. So you kind of just end up on that route of “workworkwork and don’t test” from the get-go, and it’s probably hard to break out of that.
However, making video games isn’t the only medium in which I struggle with failure — I tend to avoid failure in most areas, not just video games. For example, I almost never ask girls out. I’ll admit that I’m getting better at talking with strangers (and I kinda love it because I love psychology), but I still only talk to strangers that are doing nothing but stand next to me and do some menial task like scan the barcodes on my groceries. I guess I just have this assumption that I’m inconveniencing people if I stop them from doing what they’re doing, and that talking to me wouldn’t be NEARLY that good of a substitution for what they were doing. If that were true, I’d feel awful — and since that’s a possibility, I never try. Another example is that I have difficulty starting a building in Minecraft because I keep second-guessing myself and assuming it’ll look crappy — if I build anything, then I have this potentially ugly-looking thing on my area which is hard to take down. Who wants that, right? (God that rhetorical question is worded so generically Tony (but don’t delete it — it makes you uncomfortable so you should keep it in there for people to judge (and hey I guess if you explain long-windedly in this parenthetical statement that you did it on purpose, maybe they’ll like you for it anyway! Idiot)))
I’m very egotistic. And I feel like my ego is threatened if I present something that doesn’t wow people, and so I end up being not okay with failing in the slightest amount if I’m putting out whatever it is I’m doing for the public to see. This is probably because for some reason I have VERY low self-esteem — so if I pour my heart and soul into a thing and it gets judged poorly then I feel completely horrible. Because of this, I conceptualize everything to death because no one can judge me if I keep it all to myself in my brain. I also end up never taking sides on an issue — I’ll just present the things I’ve observed and provide as many counterarguments as possible.
A potential solution to this is, when working in a field I’m not familiar with, to start with small projects. Maybe it wouldn’t feel so heavy and personal if I just do something small because it’ll feel like “Meh whatever I just did it for funsies”. (Wow I’m writing this in Google Drive and it accepts “funsies” as a valid word and that makes me smile) Any amount of negative criticism on a relatively small thing won’t affect me so cripplingly because I didn’t invest so much into it.
Another issue is that maybe I think that people will think the thing I create is all I have to offer — that that is the BEST I could do. One solution could be for me to just explain to people “Look this thing is old so ignore it” or “I’m just starting out and trying stuff and I know this sucks but I just wanted SOMETHING”.
I also want to do something suddenly amazing to get recognition — it’ll make it seem a lot more dramatic and meaningful if it comes out of nowhere. One solution (you used that phrasing already Tony) is for me to just keep my failing restricted to my friends and family. They’ll understand and probably love me anyway regardless, so if I fuck up with a thing I’ve made, I probably won’t lose anything major.
But holy wow, I still feel like my relationship with those friends and family would be worsened for some reason if I did that. I guess it’s just that I have trust issues. Again, it comes back to me thinking I’ll inconvenience people by wasting their time with something dumb. A solution to THIS is that, if it doesn’t take that long for them to experience the thing I made, then I won’t be wasting their time very much.
I should probably start putting time constraints on the things I make. Hopefully that’ll force me to not dwell on them so much.
I can’t think of a good conclusion to this post but I’m going to consciously not come up with one. Wait crap that was kinda good damn it Tony
For a while now, I’ve been trying to figure out a cheap and simple way to create shadows in a 2D environment in order to find out if a point light source would be casting light on a given point. It wasn’t until recently until I sat down and thought about it for a while and realized it would be best for me to start by using convex shapes, because this allows the calculations to make a lot of assumptions about the shapes they’re dealing with.
After brainstorming a few options, I figured out that you can create a shadow with a convex shape by just using the point light’s position and the position of the two most “extreme” vertices of the shape. But how do we find these two vertices?
For every vertex (vert1) and every other vertex (vert2), create two lines: one going from vert1 to the point light, and one going from vert2 to the point light. Then, test the angle between the two lines. The two extreme vertices are whichever two verts create the biggest angle. (Since we’re just comparing angles, we don’t need the actual value, so we can substitute the angle formula with (eee!) the dot product between the two lines. In this case, the smaller the dot product, the larger the angle. A -1 dot product in this case would be 180 degrees. Since the shape is convex and the light is hopefully outside the shape, the angle will never be greater than 180 degrees anyway.)
Once those two vertices are found, we need to create the three yellow lines shown below, which define one shadow per shape per light.
To perform collision with these lines, we need to do half-space tests with all three of them. If they are behind all three, they are not being affected by that point light.
Since the half-space test uses a line normal and a point on the line, it would be best to store the normals for the lines, not the lines themselves. (Storing the third normal is simply an optimization; you can still calculate it if you have your two vertices.) Also, be sure to store LeftVert and RightVert in their proper places: a simple dot product check can be used to determine whether the vertex is on the left or right side of the light.
Since we’re dealing with convex shapes, we can get away with just one line going between the two vertices because the line never passes through open space. However, using the line going directly between the two vertices does create an issue: in the image above, the points in the red circle here are technically lit. But, keep in mind that those points are also inside the shape, and two solid objects should realistically never be inside each other anyway. (Obviously this check will need to be changed when it comes to rendering, but I find it works well in regards to collision checks.)
Beyond that, there are optimizations that can be done to reduce time spend on collision checks. For example, if the line segment joining the two extreme vertices is not touching the circle that defines the reach of the light, you don’t need to create the shadow. Also, a more complicated optimization is to not create a shadow if it’s completely encompassed by another shadow, like in the image above.
My team and I have completed Gold for Dead of Knight!
More information about the game as well as a gameplay video can be found at Full Sail’s Game Project Web Portal.
Download it here.
Platforming 101 is a quick little game I made about jumping on platforms and not dying while doing so. Will my ground-breaking game ideas ever cease?
So the goal of the game is to jump on as many platforms as possible to get points. However, to actually reap those points, you have to navigate back down to the ground. It’s a little tough doing so, because the platforms you land on disappear, and if you fall too fast when landing, the game ends. The general tactic is to leave some platforms behind for your trip back, or have another path to take down. Take the picture above, for instance. In order to get those potential 16 points (indicated by the red number), you’d have to traverse up the platforms to your right and climb down on the right side of the screen. Dropping down from where the character is now is way too far to survive.
Mostly, this game was just a means for me to get some experience working with XNA, and I learned a bunch of tiny things while I made it. For example, I didn’t even know that by default, every Windows Game you make (with Visual Studio, at least) uses 100% CPU of one of your computer’s cores by default. Pretty silly, right? But I fixed it, and now I feel slightly smarter.
Download it here.
This game requires XNA.
Credit goes to David Brown (a Full Sail University teacher) for the input and state systems, and someone named Jeff for the XNA-friendly RectangleF class.
Dead of Knight is a 3D, side-scrolling Hack ‘n Slash game that my classmates and I are working on for our Final Project at Full Sail. Our team consists of 9 programmers, 8 artists, and 3 producers, and there’s a lot of time we spend working with each other and talking about the design of the game, what tasks we want assigned, what we need accomplished from one another in order to add a feature, etc.
The game obviously heavily features hacking and slashing things, so we decided that game won’t have many environmental hazards. Instead, it focuses on the different enemies you can fight and the attack system you use to take them out.
You have four attacks: Basic, Stun, Fast, and Grab. The Basic attack is your bread and butter. Decent range, medium speed, yeah yeah. The Stun attack is fairly slow, but sends out a shock-wave that completely immobilizes enemies for a short amount of time. The Fast attack is very… fast, and deals a ton of damage to only one or two enemies.
However, both the Stun and Fast attack take away your own health, so that’s where Grab comes into play. The Grab picks up a single enemy, disabling them and draining them of their life. While it makes you a sitting duck when being performed and is not very efficient at actually taking an enemy out, it is the only means of refueling your health, so it must be incorporated into your combat if you want to use your full repertoire of moves and stay alive.
…So anyway programming code code program time. The areas of the game I’ve been mostly working on are the input and collision systems. Working on the input system mostly means dealing with the combos: how to chain moves together, how the window of when you can press the next button to go to the next move actually works, you know.
As for the collision side of things, I’m responsible for making the objects in the game know how to react to one another based on what types of bounding volumes they have. For the code to be neat and clean and still have multiple bounding volume types, the collision system needed to work in such a way so that if you call the basic check collision function, the objects will react accordingly regardless of which two bounding volumes were involved. …So I made it like that. Yay.
Anyway, my team and I worked on the game’s design for a month before starting to actually create it, and as of now, we’ve been coding it for about another month. We’ve just finished Core and started working on Alpha, so it’s not that shiny yet, but I’m still pretty proud of what we have so far.
Yeah, I wanted to wait a day or two before posting this because people might not take it seriously if I didn’t.