Monday, December 19, 2016

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!

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:

Also...please never burn letters. -_-;

Thursday, December 15, 2016

Whoa.  Just...whoa.

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?"


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

Ludum Dare starts in 17 minutes omgggggg By this time on Sunday I will have completed another game from scratch omggggg ahhhhhhhh

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).

It's hard to pick out a favorite to share with you all, so maybe I'll just pick a few over the next few posts.  Leigh and SPNTR have done a lot of Christmas music as well, which I always start listening to around this time of year -- there's some really good ones, including "Christmas Island" which I've heard at the mall sometimes!

Here's one that I have a very particular memory of:

I don't know if I was initially a big fan of this song, actually, but I distinctly remember a sleepless night that I spent on the east coast at my best friend's place when I was feeling quite melancholy.  I was actually just lying down on the floor listening to Leigh's songs on my phone, and this one came on which I hadn't heard in a while.  It's difficult to describe the feeling that the song brings, but perhaps you can understand if you listen to it yourself.

I lost my pink hello kitty bow hair tie last night, meaning I really only have one more of those left (the really old Cinnamoroll one).  These are really important and useful to me and I could do various things to try and cope, including kicking myself, trying to order more (can't find them anywhere), or even hoping that the next time I go to Puroland they will still have similar things available.  But in the end I think the only thing to be done is to let it go and accept that the time came.  I'm reminded very strongly of the parable of the "glass already being broken", which I heard a version of from my best friend a month or so ago.

That being said, nice bow hair ties are now #1 on my wishlist, haha.

I did a little bit more work on Rhythm Quest yesterday adding double-attack notes, but after I finished, I actually questioned whether that's something that I actually need in the game -- I'm not sure that it is.  I do think (?) that I need notes where you need to hit both buttons at once though, so I might try and give that a shot this time.  That's a goal for today, as well as finishing the livestream WIP that's almost done, doing at least one more Christmas letter, and dealing with some paperwork/forms.  I'll be going up to Mission City Swing tonight, definitely looking forward to that.

Watched another episode of the second season of Hibike! last night and omg *flail*.  I have no words for how strongly I appreciate it.

Also did some crying last night, about the past (what else?).  A good sort of cry though, not a bad one.  It is extremely vital to me to stay connected to the past...can't move forward unless I know that I'm still holding onto what's behind me, or at the very least know what I am walking away from.

I don't really do new year's resolutions very often, but I hope that in the coming year I can spend more time on other people and spend more time together with others.  I think that will be a big challenge given that everyone is just so busy with their own lives and priorities, but I'd like to at least try.  I really value availability and dependability.

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!

The most obvious change that you'll notice right off the bat is that there are only two tracks here instead of three, and only two buttons instead of three.  This is a pretty major change to the design, but one that I'm almost certain is right.

First off, there are two main reasons that the shield button was even there in the first place:
1) Using three buttons allows for more complicated gameplay and patterns.  Ripple Runner used three buttons to good effect (jump, ripple, flip).  Shield could potentially function differently from the other two buttons, just like Ripple Runner's flip, where you need to hold it down instead of tapping it (though my game as it stands is not set up for that).
2) Two different tracks didn't seem like it was giving the player enough choice.  I really wanted there to be a lot of replay value for playing a song through multiple times, and the whole idea was to have the player be able to sort of choose their own musical path.  Having a binary choice didn't seem like it gave the player enough options.

At the same time, I do think simplicity is important, especially I after watched this amazing talk from Unite earlier in the day (here's another interesting one).  I was already starting to try and draw up some sort of sprite for the shield notes, but there were a huge number of problems that were actually being created by the presence of the shield button and third track.  Let's list them out:

- I needed to come up with some sort of obstacle that made sense to require a shield for, but was also obvious that you couldn't use your sword for.  The best I came up with was some sort of spiky enemy, but it wasn't 100% intuitive why you couldn't just attack these enemies.  Projectiles would be a nice one, but unfortunately doesn't work because the obstacles need to be staying stationary (the player is the one that's moving)
- Not only that, but the visual range of the sword is bigger than that of the shield, so making both of the animations make sense given a certain distance from the obstacle is tricky.
- I'd probably make the player tap shield in time with the notes, but it doesn't really make logical sense why you can't just hold your shield up the whole time while running.  As mentioned above I could make the shield button function differently so that you =are= allowed to just hold it, but how would I convey that to the player intuitively?
- Having three tracks on the screen seems a little cluttered and there's kind of a lot going on on hte screen at once.
- Composing songs that are both cohesive yet have =3= different variations that all make sense when transitioning back and forth seemed like an incredibly daunting challenge the more that I thought about it.  It's also a lot of work, even if I can do it.
- I was already planning on having more complex obstacles, such as an enemy that requires a double attack (a la Melody Muncher), or spikes that have a flying bat over them so that you have to jump and then attack (a la Ripple Runner), plus notes that you have to hold down.  If I add in a third button to the mix, it starts to become too much to remember at once.  At best, you probably just give up trying to look at the visuals of the game and just focus on the colored diamonds, which becomes boring, and at worst you just get confused and frustrated.
- Visual (*and* musical) theming for the third area was always a little weak.  It was easy to think of ideas for two tracks (e.g. earth and sky, fire and ice, sun and moon, drums vs melody, normal vs halftime), but the third never really fit in.

So I thought to myself again and decided to critically evaluate whether the third button + track was really necessary, as it would be nice if I could get rid of it.  I decided that two buttons really is enough to have complex note charts -- Melody Muncher already proved that, after all.  And two different tracks also might be enough variation for the player.  It does limit you to binary choices, but at the same time there is something very clean and clear about having polarizing opposites that you choose from (e.g. Pokemon Red & Blue, Sun & Moon, Orcs vs Humans, any other faction vs faction game).  Not only that, but it allows me to create level designs and backgrounds that play off of these dichotomies like sun and moon, water vs fire, night vs day, etc.  It fixes all of the issues above and in the end leaves me with a stronger, more intuitive game that still has its core ideas more than intact.

So I'm super glad I came to that realization!  Just looking at the new layout already convinces me that I have a real game on my hands now (there's so much more space!).

So I spent some time refactoring away the third button (it wasn't that hard at all, to be honest), as well as rejiggering the backgrounds and layout so that there are only two tracks.

At some point when I was redoing the pivot for my player spritesheet I came to the realization that my center-pivoted sprites were all half a "unit" off.  As in, the "base" resolution of my game is 500x300 right now, but it's being upscaled 2x to 1000x600.  But the player sprite, as well as some others that are center-pivoted, were offset by one pixel in the 1000x600 rendering, so they didn't actually align with the original 500x300 grid.  I figured out that while Unity's sprite shader has a "pixel snap" feature and it works perfectly fine, it of course only snaps to rendered pixels at the 1000x600 granularity.  My solution in the end was just to put a 0.5 unit offset to all of my sprites that have a center pivot.  I could have used some sort of script that would forcibly clamp the rendering to be aligned with the 500x300 grid...but not only was that becoming a headache to do, but I also wasn't even sure I =wanted= to do that.  Particularly for scrolling and such, maybe it's better to use the finer-grained "half-resolution" pixels anyways.  So that's what I'm doing.

Along the way I discovered a Pixel Perfect Camera script that was released fairly recently in July for free.  With a bit of trepidation (you never know how robust these things are), I tried it out, and while the "Retro Snap" feature was causing some artifacts in my initial testing, it seems that the actual Pixel Perfect Camera script itself does pretty much exactly what I wanted in terms of scaling the camera view in integer multiples up to a certain size automatically.  (Now, it doesn't let you adjust those settings manually, but that shouldn't be a difficult extension to make, if I do even want that.  Again, maybe simplicity is best here)

So I ended up fixing my single-pixel-off issue, and along the way also got camera scaling, woohoo!  I refactored the camera controller so that it positions the player 20% of the way from the left of the screen, which should work fine for pretty much any reasonable resolution.  It's pretty cool to resize the Unity window and see the game scale up and down correctly in integer multiples.  Yay!

I also did some nice work on sound effects for jumping (in general), jumping successfully over spikes, slashing, and hitting an enemy, so those are all in.  Plus, you'll notice that the slashing attack looks WAY more polished now.  I've added a bit of minor screen shake when you hit an enemy, plus a new animated X pixel slash effect that I drew myself and put together real quick.  I'm attempting to use the ol trick where you draw a dark silhouette of the effect during the first frame before the actual animation, to increase the amount of contrast.

You'll also notice that I've added horizontal movement to the sword slash, which took some tweaking to get right but I think really makes it pop and feel satisfying.  Also, I reduced the size of the debug text, which was gigantic before.  Lastly, I tweaked Unity's audio latency settings a bit for better responsiveness.  It seems like it might be difficult to get super duper low latency without running into buffer problems, but so far it seems to be "reasonable".  We'll see what happens when we get it onto some other platforms as well. =X

The game is looking, feeling, and sounding a LOT better after these last bunch of hours that I sank into it.  Feeling pretty happy about it :)  Next up I might want to try implementing the other note types, as that should actually be relatively straightforward.  Then I'll try making an actual song and see what the gameplay really feels like!

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.

Simple edit to my Backdrop class lets me do parallax scrolling.  I also fixed some calculations with the scrolling, so now the ground is actually scrolling at the right rate and it doesn't look like it's sliding underneath everything, yay!  Ideally the final product will have multiple layers of parallax and maybe some additional elements in the foreground besides the ground as well.

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.

I now have a handy way of fading AudioSources to a given volume, with an optional callback that executes when it finishes.  Can be used on any AudioSource, you just call AudioSourceFader.Fade(audioSource, targetVolume, speed); and it takes care of the rest.  I'm using this for general music fading in my AudioManager as well now...BUT Rhythm Quest plays three music tracks at once, so that is in Rhythm Quest-specific code -- right now in the "dump it all in" GameController class.  We'll see if it ends up finding another home at some point.

Anyways, now I have a method that I can call on GameController which fades to one of the three bottom/middle/top music tracks that I have set up.  Just using placeholder music songs right now, didn't bother to make anything legitimate yet.

Not sure what's next...either getting the actual tracks set up and getting the player to be able to jump between them, or starting to add some actual notes/obstacles.  Lots of work to be done!  Things are going a lot more slowly than if I was just YOLOing everything, but the code is a bit cleaner as a result...not sure if the tradeoff is worth it to be honest.