Xmas letters 2016: Almost done! I have 23 written, maybe only one or two more to go :) Then we can move onto phase 2, packaging and getting all these babies ready to be shipped!
Monday, December 19, 2016
Saturday, December 17, 2016
Connecting with the Past
Originally posted on FB in response to a posting of (link):
Sorry!!!! This came out as a super long rant because I feel extremely strongly about certain things. I know this is totally unsolicited and I don't mean any of this as a reply to your post, but I just had to write my feelings about the past.
As someone who values availability and dependability but also as someone who NEEDS to live with a constant connection to the past, I have mixed feelings about these tips. I do think that it's important to realize that if you are not actively being cared about and cared for then no amount of "false availability" should illusion you to believe otherwise. We have many tools available to us which help us connect with the people with whom we have genuine relationships. However those same tools also sometimes promise that we can connect with those who will =not= provide us with their love, care, time, and connection. They cannot. I think it is important to make this distinction, and doing so will allow you to realize who and what really matters in your life, and refocus to avoid cognitive dissonance.
At the same time, the past is vital to my human experience (especially as an ISFJ and Si-dominant), and I think it is also important to understand how to live in connection with it. Just because something is not a part of your life anymore does not mean that it is not still important to you in the present. After all, the most precious possession I own is the boxes of letters that my friends have written to me over the years. Even things that hurt you or scarred you can still have important meaning and value, and it would be a disservice to yourself to let go of them. There are many memories and friendships that I had in the past that I could not carry forward to this moment in time. Thinking of these things often makes me sad, but to let go of them would be letting go of a part of myself. I really believe that not everything should or even can be brought to closure. There are some things that you should learn how to live with.
It's really funny that this set of tips mentions going through your phone contacts and purging the ones that you don't stay in connection with, because I have a different ritual that I do for myself. Every once in a while, I would go through my list of phone contacts and call the ones that I didn't stay in connection with, even though I wish I could. Because I still care about those people and want to hear their voice. Even if they are not the same people whom I was once friends with, connecting with them is, in a way, connecting with my past. Even if they do not answer, leaving them a message is still "talking to them", in a way. I have another habit where sometimes when I am feeling troubled and lost, I will read through the letters from my boxes (or old blog entries). Remembering the past helps to ground me and comfort me in times when I can't seem to find my way. I do the same thing with my voicemails as well. It is an incredible feeling to be able to hear the voice of a precious friend whom I can no longer reach, but who was always an important part of my life. Even when I cannot physically talk to or hear the people from my past, I still have my own "mental sanctuary" where I sometmies meet with them. To say nothing of the Christmas letters that I write every year.
I have a friend who I write to every year for Christmas and her birthday, and she has written to me too, every year, including this year. I no longer see or talk to this person, nor do I even chat with this person online or even know how they are doing right now. But the fact that she still keeps this tradition alive is extremely meaningful to me. I wish that more people could be like this.
I said in the beginning that it's important to understand what is important vs not important in your life. I think that extends to your past too. There are countless things about your past that are extremely worthless and not worth remembering at all. I don't save all of my receipts from stores because they don't bring any meaning to me whatsoever. However, there are other things that may be really special and meaningful to you. ***BUT they can only be important to you if you spend time connecting to them.*** This is why digital photos are so much harder to be meaningful than old photo prints. It is because digital photos get thrown into a huge archive which would rarely ever get looked at. But with physical prints, you are already forced to look over them once after they are developed. And it is much easier to flip through a 20-page photo book than a 2000-photo folder. They are much easier to treasure. This is why it's important to make sure that you decide what from your past is important and what is not. So that you can spend time cherishing the things that are important, and not let all of those other things get in the way.
If nothing else, perhaps a short story will speak my emotions for me, about rememberences for the past: https://www.behance.net/gallery/17861329/Comic-Chalk
Also...please never burn letters. -_-;
Thursday, December 15, 2016
I may have posted this before, but I was looking for this specific passage because it's a really good one and found it again. It's a really apt way of describing how I approach life.
"It seems so obvious that it's kind of silly I even have to say it, but things just always seem to go more smoothly when you know exactly what you're doing. There's really nothing quite like having your own private map for how to do things--the more I study and work on the areas I'm interested in, the more I develop this ability to connect my experiences to everything else I've done, and the process just builds and builds. I don't even mean for it to happen that way--I guess I just know what kinds of things I like, and I know what makes me comfortable and what doesn't, and I know that the more I plan my life around setting myself up to work in areas I know I'm confident in, the more I'm going to succeed and the more in-depth information I'm going to have about the skills I specialize most in. I think one of my greatest strengths is that I know what I'm good at, and, perhaps even more importantly, I know what I'm not good at, and I have the good sense to know when to avoid the latter. I don't understand why people insist on haphazardly jumping into things they don't have any idea how to handle properly. What's the point? If you don't know what you're doing, aren't you just bound to fail?"
From http://personalitycafe.com/isfj-articles/386546-isfj-jungian-cognitive-function-analysis.html
This whole writeup is actually extremely informative. It even outlines the growth of the ISFJ type, which starts with relying on dominant Si, then progresses through auxiliary Fe:
"If Fe goes undeveloped and leaves SiTi to handle the majority of cognition, the ISFJ is prone to feelings of terror that his trusted support network will fall out from under him at any given moment. Trusting others to handle important tasks becomes an uneasy endeavor at best. Since the feeling of trust and security upon which Si depends so heavily is never connected in any meaningful way to the bonds and relationships defined by interaction with others, the SiTi loop ISFJ feels that no one but himself can ever be depended upon to bring him the sort of consistently reliable experience his dominant function necessitates that he have access to. Without a way to describe or objectively designate his feelings for others or theirs for him, no sense of faith in upholding mutual responsibilities can form--he must do everything for himself, or risk total ruination through the failure of other less reliable individuals to uphold their agreements and obligations. If you want something done right, you have to do it yourself--or risk facing the unknown, totally unprepared--which, of course, represents Si's worst fear of all."
For me I believe this is what I often referred to as the "rut" that I suffered through high school, and, to a large extent, college as well. This also relates to me trying to use an underdeveloped sense of Fe, where I =thought= I was using Fe and empathizing with others, but in reality I was only doing it through my own rigid Si-based internal map. So I was thinking a lot about others, but only under =my own= terms and views. I became very frustrated at the shallowness of my connections, to the point of martyrdom.
Then we come to Teriary Ti:
"As ISFJs find themselves so singularly focused on developing their internal maps of experiential impressions and defining their directions in life based on the kinds of experiences these maps point them toward, at some point in life it follows that they should begin to ask the question: What if the map is wrong?
Dealing with this possibility is, to Si, unfamiliar (and therefore frightening) enough that most ISFJs defer almost exclusively to Fe in determining the answer: If my impression of how something is has somehow misled me or given me wrong information, surely I can count on the people to whom I hold cultural and familial bonds to remind me that I've lost touch with what our community finds most important. Surely, by listening to the ethical consensus of those to whom I feel closest, I can discover and rectify the problem when my own desires conflict with the institutional customs and values by which my relationships to others are given objective meaning and definition. Unfortunately, however, the savvy ISFJ will invariably notice situations in which neither Si nor Fe seems to offer any reasonable solution. Despite Si's inherent preference for that which has come to define its comfort zone ("If it ain't broke, don't fix it!"), at some point the ISFJ will be forced to evaluate situations in which her community's collectivized ethical norms will strike some part of her being as somehow fundamentally flawed, even if these norms are consistent with the kind of experience she has built into Si's vast internal database as the familiar and consistent standard she has come to trust."
I can't talk about all of them, but these situations have definitely come up in life.
And of course, inferior Ni:
"Last but not least, the Achilles' Heel: many of the typical complaints others have about SJs (and especially ISJs) can be traced to manifestations of inferior Ne. On a surface level, Ne opposes everything Si holds dear and considers vital to maintaining a healthy outlook: while Si would encourage us to find exactly what we're looking for on our internal maps before setting out to find it, Ne takes a somewhat different approach: that the most interesting things in life are usually surprises.
It should be relatively obvious by now that Si doesn't like surprises. It wants complete information and it wants time to sort through every piece of the information given and compare it to the sense of static, internal consistencies by which everything in its worldview is granted stable meaning and significance. Until you can relate a given piece of information to something you already know, until you can show where it would fall on the map you already have, Si not only has no use for it, but is actually threatened by its imposing presence among the already-sorted information by which its identity and worldview are defined. Inferior Ne seems to throw a wrench into that identity itself: By encouraging the ISFJ to ignore what he knows and instead let loose and actually enjoy a constant influx of new and unfamiliar ideas from as many different unconnected sources as possible, Ne seems to attack everything the Si mindset holds as important or meaningful. Rather than carefully compare each nugget of data to every other piece of data we already hold, each new piece of information seems to suggest even more connections to even further-reaching outwardly defined patterns that continue to change the meaning and threaten stable interpretation the more we indulge them."
"Exploration in the name of expanding one's comfort zone, so that one never has to leave it--whether or not the self-actualized ISFJ realizes this is what he's doing, it makes his experiences that much more complete, and his life that much more well-rounded and fulfilling."
Ah heck, just read the whole thing. It really describes my type to a tee.
Friday, December 9, 2016
Rhythm Quest Update 10 - Back to the Drawing Board
This'll be the last update on Rhythm Quest for a short while!
As a bonus, instead of an animated gif, I actually have a full 60fps video (with music!) to show off this time. Here it is:
A bunch of things have been tweaked and added! First of all, we have actual music now, hooray! I started trying to make a real song with the two-track idea, which was pretty interesting. Also, the scroll rate is higher now, so things are moving faster.
I've also added support for compound notes, like attack-attack and jump-attack! I decided that the attack-attack notes weren't actually serving much purpose (more on that later), but you can see the jump->attack notes here. Also! There are yellow "uppercut" notes where you need to press both buttons simultaneously. (I don't have a separate animation for that yet)
I've also done some small tweaks to the UI as well as the audio sync. As expected, it might be a pain getting the audio to sync correctly across multiple platforms, but on the plus side, I at least have it working very nicely on either PC or iOS (just not both at the same time yet). That's right -- I've run my demo on my phone and it works great! It actually looks extremely smooth, as it runs in 60fps but also probably makes good use of the higher resolution to smooth out the screen scrolling by not having the "retro snap" behavior described in my earlier update. So that's great! Latency is very responsive as well, so yay!
I've reached the end of my 1.5-week sprint on Rhythm Quest and I'm pretty proud of what I've made so far! However, with my current prototype I've noticed some design issues that I need to rethink. You can see my notes below on the issues, as well as me rethinking what made Ripple Runner and Melody Muncher intriguing and what I should be striving for with Rhythm Quest.
Essentially I'm not sold on the multiple-track idea after seeing it in action and actually playing around with it. It seems like more of a distraction than anything, and while it IS cool to think that you can hear different variations on the music during a second playthrough, that doesn't really make your first playthrough (arguably more important) any better. In practice it's probably most straightforward as a player to just stay on one track the whole time and ignore the junction points. What's the motivation for switching?? I could of course add some actual incentives, or do other things like hide the non-playing track altogether, but I think the problem is a little more fundamental than that, and I don't feel like I NEED the multiple track idea to make a fun music game that builds upon my previous successes and plays to my strengths. Initially I reasoned that it would feel really cool to be switching between the two different tracks mid-song but I find that that's not the case. I also reasoned that it adds extra replay value, but with the effort that went into making a double-track song I could have just made two normal songs instead! That's sort of sad as this was one of the main ideas underpinning the game initially, but I think it's important to realize that the game will probably be better if it doesn't turn out to be the exact game I set out to make.
The other issue is that I'm not sold on the two-button actions and the actual gameplay being interesting enough. I know that runs a little contrary to what I said before because Melody Muncher was PLENTY complex and that only used two buttons, but I think there's an important difference in that Melody Muncher actually involved some pattern-recognition and "mental processing" in terms of translating the obstacles to button-presses, and that mental translation step was actually extremely nontrivial. Ripple Runner has the same idea, though to a lesser extent. On the flipside, the current design for Rhythm Quest has almost none of that in that the colored diamonds tell you quite plainly what you need to press and when, which makes it boil down to a "normal" rhythm game with only 2 buttons, which is hardly interesting at all!
So those are two things I'm aiming to fix with a redesign. I do think that the "running to the right and clearing obstacles" idea works well and want to keep that, and I'm actually quite happy with the graphical style so far (though I've received a complaint that the character resembles Kirby too much). Attacking the enemies to the music cues, along with the corresponding sound and visual effects, is actually extremely satisfying already. But I'll probably ditch the multiple-tracks idea, and also try to come up with something that involves more vertical motion, probably involving jumping a la Ripple Runner or Bit.Trip Runner. I think that two (or possibly three) button controls works well on a touchscreen, but I think it would be better if I didn't spell out the button presses plainly and added some level of challenge in parsing the music. I could also take a page from Rhythm Doctor and Bit.Trip Beat in terms of making obstacles that travel toward you at different times. I do also think that focusing more on the obstacles themselves rather than abstract "notes" will differentiate the game a little more as well.
So there's a bunch of brainstorming to do in terms of how I'll lay out the levels, what kind of obstacles to feature, what kind of gimmicks to have, how to introduce vertical movement, etc. In the end it might end up as some sort of ripple runner + melody muncher mishmash. There's a lot of different possibilities!
But for the time being, I'll be setting that all aside, as tonight is the start of Ludum Dare and I'll be cranking out a completely separate game in 48 hours! After that I'll have a brief day of rest and then it's off to my new job! That week will also be my crap-crap-crap-cram-cram-cram week for xmas letters, so I anticipate lots of letter-writing being done on the train ride to work. We'll see if I can come up with some good ideas for Rhythm Quest in the meantime.
Also! I'm finally going to go through with dying my hair! (not all of it, mainly the ends) I've always been conflicted but think it's time to finally try it out. I've always loved reddish colors on hair but think I might go with something blue to match my color styles better. I don't know, it's really hard to choose, to be honest.
Wednesday, December 7, 2016
Also! Ludum Dare is coming up in just TWO DAYS holycrap. I'm not sure how this one will go, but for now I'm hoping to just relax and just let it happen, not stress out about it. I haven't done a solo entry in a while, and I've also never done a solo entry using Unity, so it should be pretty exciting! It'll definitely be fast-paced given that I'll only have 48 hours...I'll need to be sure stock up on groceries beforehand!
Not sure if I'll be making it to Jammix on Friday...leaning towards no because of LD, but we'll see.
SPNTR/Leigh Nash, lost hairties
A lot of people may not know this about me but in addition to listening to a bucket load of electronic music I'm also a big fan of Sixpence None the Richer and Leigh Nash. I think I rediscover every couple of months how good this music is for my soul (which you'll know if you've been following closely, haha). I think it's been etched into my past, especially since I spent so much time listening to some of these songs, back when I was still using my ipod mini (good times!), especially during times like french AP "class" which was not really "class" so much as me just doing work (or taking naps) in a room by myself (true story).
Tuesday, December 6, 2016
Rhythm Quest Update 9 - Redesign!
Didn't do any work on Rhythm Quest yesterday, so today I thought that I would go ahead and implement the shield notes for the third button and doing some work on sound effects, maybe even other types of notes. Actually, I ended up doing a completely different set of work than I set out to do!
Sunday, December 4, 2016
Rhythm Quest Update 8 - Attack Animation
These animations take forever.....
Also just holding one of the run frames for use as a jump animation for now. Also I finally bound the buttons to keyboard keys so that I can play with my keyboard instead of my mouse now! Also added a few more particles to enemy deaths.
The sword slash is working, though it will definitely need some tweaking in the future if I want it to really feel right. One thing that's important in these sorts of games is to really minimize the "wind-up" animation time before the actual action happens, as that can lead to a weird perception of "lagginess" if it's too long (made that mistake in the original version of Melody Muncher). I'm using 2 frames of windup right now, which I could potentially cut down to just one if that's too much, but we'll see.
It still doesn't really feel fun, but I'm guessing that's probably because the music is just two bars repeated over and over again and the notes don't match it at all. On the plus side, it's *looking* better and better.
I might actually be ready to try making a real song at this point, to see how it all fits together. Other important things I need to do are to do the shield notes, as well as add repeated notes and hold notes. But maybe I can just go ahead and make a song even without any of those? I can always re-chart it later...
Also missing are sound effects, which are pretty important as well. Maybe those will go in before I start working on music. Reminder to self that I should also experiment with a minimal screen shake effect upon hitting an enemy (a la Melody Muncher).
Rhythm Quest Update 7 - Character Animation
There are still a number of things that need to happen before this can feel like an actual "game". In the game dev process there is always this point in a game's life where it finally becomes FUN and everything comes together -- my focus now is to try and work on the things that need to happen in order to get to that point. One of them is that I need to actually have character animations for attacking, jumping, and shielding (I decided that "shield" will indeed be the third action, since I couldn't think of anything better).
Out of all the work that needs to be done for putting together a game, art is by far the one that I struggle with the most. I definitely took a number of hours trying to work out what the (first) character will look like and come up with something that I could actually animate successfully. I tried a few humanoid figures, none of which worked at all, spent a long time wondering how the heck I came up with the Ripple Runner sprite (which works just fine), considered just re-using the Ripple Runner character and coloring it differently, and then finally managed to get something working with a Kirby-like design:
It certainly took way longer than I would have liked, but I'm pretty happy with how it's working now.
Friday, December 2, 2016
Rhythm Quest Update 6 - Jump Notes, Switch Notes, Particles
It's starting to actually look like something!
I've moved the diamond markers to be in the middle of the "floor" of each section which seems like it works out a little more nicely. I also got rid of the silly vertical line and now have an empty diamond outline. Unfortunately it moves up with the player when you jump (and it's not supposed to), but that'll be an easy fix.
I've implemented the switch notes, drawn in the jump notes, and even added some basic particle effects for when you hit each note! It's starting to actually look like a game now!
Rhythm Quest Update 5 - Backgrounds
Decided to take a detour from coding and spend a little bit of time trying to figure out colors for the level backgrounds. These are just rough sketches for now and everything will have to be redone, but I'd like to at least get something in place so that it feels "real".
A short note on screen scaling and pixel art -- unfortunately trying to get pixel art to display nicely on varying device resolutions is a bit of a nightmare. Fortunately my game is flexible and I think it will work out fine if I just offer up a lot of buffer space on the top and bottom of the screen, since it's not important that I have a specific resolution or viewing rectangle. The "native" pixel resolution is 500x300 but in addition to enlarging the viewport, I'll also allow for custom screen scaling options. So if you're playing with a resolution of 1000x600, the automatic screen scaling will scale everything up by 2, but you might also have the option of just leaving everything at 1x. There's probably no reason you'd want to, since it would look terrible, but that's the plan, anyways. None of that is implemented right now but the only thing it really affects is that I'll have to make sure I create my backgrounds with the capability for extra room on the top and bottom.
Attempt #1. Trying to use around 4 colors per section. I added the third touch button and moved the buttons slightly lower on the screen, and also made a background for the UI. I was pretty sure from the beginning that I wanted the bottom track to be some sort of cave / dungeon theme, and the top should probably be some sky area, but I didn't know where that left the middle section. Looking at this, the colors just look kind of ugly and not very consistent, especially the blue-purple shade of sky in the middle.
That's already looking at lot better. I simplified the palettes and just used different shades of a single color for each track. As an added bonus, each section now has its own distinct color identity which will help me color-code the buttons to the tracks for when you switch.
Seeing the game this way let's me actually try to reason about whether it even makes sense to display all three tracks at once, which is something I'm not sure is entirely necessary. I'm actually beginning to wonder if I should instead show only one track at a time, but whenever a junction approaches, I should display it as a three-way branch, and then you actually take a different "path" through the level. That could definitely offer a better feeling. Unfortunately, it's also a lot more pain to implement. The problem with the "branching" ramps is that I want the capability to have notes almost right after the branch point happens, so you actually need to be able to see all of the three possibilities that are coming up so you can prepare for the notes on the track that you select. That's initially what led to this layout.
I think this layout is good if switching is very frequent, but bad if you're on the same track for a while and only switch occasionally. Hmm...I'll have to reconsider the design again. I could even have the other tracks swoop up and down, for example if you go to the middle track, then the top track actually moves up almost out of the view, and the bottom track moves down almost out of the view. Then they reappear again only when you are about to hit a junction.
Rhythm Quest Update 4 - Notes!
We have notes!
We're actually starting to implement core functionality now, which is good! I have a NoteManager which is keeping track of notes across my three different tracks. The notes are loaded in via Levels which are now being loaded via text strings like ".... A... A.A." for easy editing. The level loading could maybe use some additional work eventually, like loading from json/text files or something...ideally I'd be able to change the levels on the fly and reload without restarting playback -- that'd be the ultimate iteration tool! Should be doable, but I have other things to focus on for now.
I can now detect whether notes are within the "hit" window, as well as when they're too far past and become a "miss" -- although for the latter case I don't have them actually doing anything yet. I also need to handle "inactive" notes that are not on your current track correctly...
But importantly, you can now press the red "attack" button and you'll hit a note if it's there! Note is an extendable abstract class (currently I'm just using "BasicNote"), which is good because I'm later going to have 2-note combos as well as held notes.
The blue button will eventually be "jump", but right now I have it triggering a track change to the bottom track to test that. In the real game you won't be able to trigger track switches at any time -- you can only do so at certain junction points / transition downbeats that are marked in the song with some sort of fancy flashing thingy.
I also added a debug display to the upper-right which I can use to display whatever I need to. Hooray!
Another very important improvement I did has to deal with the scrolling/timing calculations. I wish I could say that getting the scrolling to work correctly is as simple as just setting the character's X position to the current time of the audio track. You CAN do that, and I was doing that before, but the audio sample position isn't updated at the same cadence as Unity's regular frame update loop, so you get stuttering if you do that.
So I want to "sync up" the timing to the beginning of the song using audio sample timing information, but then for actually updating the timing per-frame I need to use the regular Time frame timer, not the audio sample information (with some sort of sanity checking to make sure that it doesn't drift too far). I hacked together something quick to "sort of" make it do that, but it's not robust by any means and will probably have to be revisited.
The white line in front of the character represents the point at which you actually want to hit the notes (i.e. line up the "diamond" shape of each note to the line). I'll have to experiment with different ways to visually show this -- for example, bars may make more sense than diamonds.
It's starting to actually look like something now, which is good! I didn't have as much time today as I did yesterday to work on things, but we still made OK progress. Gotta keep this up...
Thursday, December 1, 2016
Xmas letters: 10 down, ~15 to go!
Today was not too shabby at all! I started on Rhythm Quest and spent a bunch of time doing good work on that, cooked lunch and dinner for myself, wrote a Christmas letter, watched some anime, even did the laundry...
Here's hoping that we keep this up for tomorrow...
Rhythm Quest Update 3 - Music Tracks
No GIF this time since all I worked on was audio stuff.