I had planned to take it easy during the 7dfps week and offer help and encouragement to people in the #7dfps IRC channel rather than focus on Dance (the expectation was that I'd have something playable that I was comfortable with, but that didn't quite happen
). That would have given me more time to focus on playing people's development versions and concentrate on gathering material for the 7DFPS article I'm planning to write for GamingOnLinux.com
Unfortunately, between getting Dance to a playable state and the inconveniently coinciding crises that needed my attention, I felt like I was less present in IRC than I was during the previous week.
After a bit of sleep catch-up, I spent what was left of my 8th day focusing on narrowing down performance issues. A red herring had pointed me towards an armature as being the sourse of my low frame rate, but it turned out to be the render-to-texture script I was using having been inadventently duplicated and called twice when I added the second overhead screen. I also implemented the animations I'd made previously (everybody is sideways because my armature's root bone had accidentally been rotated 90 degrees whilst I was creating it
) and worked on player orientation. Rather than implement direction interpolation I just decided to make the characters look at their current partner (there's snapping when partners advance, but it's not too distacting
). Oddly, applying the same rotation to the player's partner caused them to spin wildly, and the only fix I was able to work out had them continuing to look at their previous partner until they moved onto their next.
My 9th day was my four year and five month "lofversary", so I took the day off to do nice things.
I'd had some inspiration for my suit characters (which I felt were essential to give the game some visual variety
), and quickly popped them out on my 10th day, discarding my intention to have legs and elongating what I had as the torso to the floor. I also added a deeper pink to some of the dress characters' layers and added a corresponding rose to the suit character's model. I added the suit model to the corner statues, which rounded those out nicely. I'd also noticed that I had introduced a progression bug where I was accidentally sending the player's partner to the other side of the circle, which ate up more time than I'd care to admit given how small and silly the mistake turned out to be. On a whim, I thought I'd look at how tricky a GLSL bloom shader would be to implement. It turned out not very, and it added a nice softness that I felt was fitting. Wary of overdoing it (which is always what happens when you discover a new effect
) I toned it down a few notches from what I felt looked good.
On my 11th day, I had a quick chat with Anton, who said his schedule didn't look like it was going to ease up before the end of 7dfps. He had a quick try of Dance on Mac OS and reported some issues with keyboard and mouse controls. I took a quick look and was able to reproduce the latter on my MacBook Air and popped that onto my todo list. I also discovered that the overheads screen wasn't working properly and the bloom shader I'd written didn't work (huzzah for Mac OS
). The former I was able to resolve quickly (by packing the initial texture that was overwritten with the overhead camera's render into the .blend
). My Game Club cohord Syd gave me some feedback from running it on Windows, saying that everything aside from the bloom shader worked fine, though the mouse could do with some sensitivity adjustment (not being aware of what's "normal" is the price you pay for having a 6400 DPI mouse with adjustable resolution
). I decided to rework the overhead camera and make it orthographic for a less distorted view and made the screen larger and narrower to better show the dance floor without having the walls be visible. At this point I figured that I needed to be sure that I had a menu in place when I pushed something up for other people to check out (we'd gotten a lot of negative response from FLAT not having a proper menu system or way of restarting the game, and I wanted to be sure to avoid that
). I spent most of the evening researching how people do menus in Blender's game engine, and looked into a plugin called BGUI
, a UI widget library that I believe may have been written for Yo Frankie!
. Unfortunately, I had some issues with BGUI and two of the three examples it shipped with had errors on startup, so I put that aside to focus on less featured, but potentially less fiddly methods the next day.
Day 12 began with more menu work, though I ended up throwing away what I had as it didn't seem to be behaving the way I needed. I tweaked the default mouse sensitivity and asked Syd if she'd be interested in helping me track down a placeholder music track for the game. She very kindly obliged and rather quickly came back with Court Of The Queen
by Kevin MacLeod, a composer who releases music under a CC-By licence. Anton suggested that I should speed it up from 95 bpm to 105 bpm to make it a little bit snappier. I spent the rest of the evening focusing on key mechanics/aspects that the game was missing. I reworked player interaction so that now instead of providing a swap opportunity after every move, a new "wait" move made things less tedious and more observable. My Dad had included win checking in the prototype code he'd given me, but I refactored it to happen at the dancer level and only be called just before the player had an opportunity for interaction (no need to do it when partners haven't finished changing
). I also added an arrow indicator above the target player. I had trouble picking a material that was visible and also looked good , so I ended up making it a transparent black and gave it an animation where it rotated whilst growing and shrinking as it bounced up and down.
Since the countdown timer was due to run out at 10:00am on my 13th day, I pulled another all nighter, spending most of my time getting menus up and working. I had originally wanted to include an option to restart the current dance rather than generating a new one, but in the interests of cutting down the amount of work ahead of me, I pulled that out. I also wanted to tweak up the menu style, but again, in the interests of keeping things I went with what I had (something which ended up making the instructions and credits screens very cramped
). Once the menus were working I started playing the game through. It felt like everybody was a little stiff in their idle pose, so I added a little rocking back and forth, which happened to end up being in time with slightly sped up music that I implemented shortly afterward. The combined effect was great and significantly added to the "cuteness" of the NPCs, although the way I'd queued the animations meant that one frame of the idle animation ended up appearing between every dance step, which is pretty awful, but I figured it'd be better to leave the animation as it was and try to fix the queuing if I had time than get rid of it altogether. With a couple of hours left on the clock, I decided to spend time customising the dance sequences. I removed my simple test dance and added six of varying complexity. After playing through them, I removed three and reorganised the remaining ones into what's there now. I added some quick code to randomly select one of the three. With the target position being randomly selected, I felt that three patterns should give a bit of interesting variety for anybody who's excited enough to play a bunch of dances.
I sent my .blend uploading (no time for packaging :D
) and worked on getting a few images to go with my notes from each of my first seven days of development. Once my builds were up, I slept for 8 hours and uploaded the remaining daily posts in the evening.
The following day, I assembled some downloadable packages for Linux and Windows and invested some time into trying to troubleshoot the Mac issues, which seemed to be something at the engine level that I couldn't work around, which was hugely disappointing. I thought I might do some testing with slightly older versions of Blender to see if those bugs had been recently introduced (if so, then I could probably get away with distributing that instead
), but that would have to wait for another day.
Check here for downloads (when they become available) and other posts.