Holodance - jashan
So this is kind of a huge one, because the last patch update was in June 25, roughly 9 months ago. We did post some updates to the alphadev channels and also beta channels but announced them only via our Official Discord. But this current version will probably go to the default channel in a week or two, so it would be awesome if you could opt-in to the alphadev or beta channel, try it, test it and let us know what you think about it (ideally in the forum to keep things organized).

This is a really long list, so here are some of the highlights:

Settings / Themes / Game Mechanics / Presets
This has been completely re-designed to make the different game mechanics easier to find and activate. Also, we previously had quite a few implicit changes in the settings (e.g. when you activated Laserblades or Guns) that did make sense when we originally introduced them but became pretty annoying over time, as development evolved (like, choosing guns would always activate the balloons - but actually shooting drones is more fun than shooting balloons ;-) ).

We have consolidated almost all the settings into one screen (Settings / Style / Presets & Themes), and have added a few presets that set up everything in a consistent way that hopefully makes sense. After activating one of the presets, you can still fine-tune everything according to your likes and dislikes. Here's the current list of presets:
  • Casual Mode
  • Catch Orbs
  • Punch Drops
  • Slice Drops
  • Shoot Drones
  • Shoot Balloons

Gun Mechanic
We've had this in the game for a long time but polished it a lot during the last few months:

The explosions are now based on how perfectly you time shooting the drone. If the timing is perfect or near perfect, the explosion is very quick. If, however, the timing is a little off (a little too early, or a little too late), you get a longer explosion as a penalty. Before, the explosions were random and the longer explosions would unfairly obstruct the view. Now this is "by design" if your timing is off.

Also, all explosion effects were polished and optimized to work really well with the drone and gameplay.

The gun mechanic will still get proper support for sliders and spinners.

New Slider Visualization
This comes with the new OctaDrop theme (see below). We've had that theme in previous builds - but the slider visualization is new. It's true 3D: Sliders in the OctaDrop theme are now streams of the OctaDrop outline. ;-)

OctaDrop Theme
This now has its own hitsounds, also for sliders and spinners, and full support for punching and slicing as well as directionality. The OctaDrop theme will be the default theme for Beat the Rhythm but we'll also keep this as an option in Holodance as well. We're still polishing the OctaDrops and will make some of the mechanics more strict. But it's already close ... at least in our opinion ;-)

Improved Handling of Tempo Changes
Notes are now properly looking ahead so they use the tempo while they play for the buffered ahead spawning. Previously, the orbs were speeding up just when the tempo of the song already had increased. We need this for the original soundtrack of Beat the Rhythm which has quite a few tempo-changes, and even switches back and forth between 3/4 and 4/4 in one song.

Backend Server
This is currently only visible in the leaderboards that show up after a session. The leaderboard when you select a beatmap and the leaderboards in Story Mode are still the Steam Leaderboards, so currently, in some places, we have two different leaderboards, an old one, and a new one. That server not only has new leaderboards but will also let us do things like song ratings, beatmap ratings (in terms of "how fun is it"), and difficulty ratings and will also be used to host beatmaps you create with our upcoming beatmap editor. It will also let you do things like in-game "challenge me". The possibilities are literally endless, so this will evolve a lot over time.

Important: We might reset our backend server a few times until the release of Beat the Rhythm. But you won't lose your skill on such a reset ;-)

Scoring: Velocity and Directionality
In the first early versions of Holodance, the velocity bonus used the velocity on impact. Then, I thought using the maximum velocity between catching two orbs was a good idea. It wasn't. So that's reverted, and velocity on impact is what matters again. This is coherent with moving from primarily catching orbs to primarily punching orbs. You can still catch orbs - but punching is more fun and will give you the higher scores.

The OctaDrop theme also has directionality, so some of those drops will come at you with a direction (very short sliders in osu! beatmaps are converted into those directional drops). We had a rotation bonus but that never really felt right because how does wildly rotating your controller really matter in the game? Well, now that bonus is based on how well you are in tune with the rotation of the drop. Makes a lot more sense, doesn't it?

Tracked Appendages:
One really special thing about Holodance from the beginning was that you could also catch orbs with your head. One problem with this was that it gave you a bonus, so it does give you an advantage with your score - but not everyone enjoys this mechanic. So now, we're properly tracking which appendages you use: Two Hands (TH), Head and Hands (HAH), Head Hands and Feet (HHAF), Head Only (HO), Hands and Feet (HAF), Single Hand (SH), Two Feet (TF) or Single Foot (SF). And each gets its own leaderboard. While in principle, you could play each map in any way, maps designed for a specific gameplay style will also be preferable, so Beatographer will let you say what style a map was designed for. With guns, laserblades and bow and arrow, there are only single hand and dual wielding, or in the case of bow and arrow, obviously, only single hand.

We have started localization. We have quite a bit of Chinese already done, Japanese, Korean and Russian are there but very incomplete, and the translations we have were done using Google translate (so expect some weirdness). As many of the texts are still changing, we'll do a professional full translations when things have stabilized a bit.

Game Package Size
The game package has become much smaller, going from 9.5 GB down to 6.3 GB.

Lots of Bug Fixes and Unity Updates
A lot of bugs were fixed. A lot of new bugs were introduced by incrementally updating Unity, and then fixed (either by more Unity updates, or by implementing workarounds). But using Unity 2018.3 significantly improves the development process, especially due to the new nested prefabs workflow. I wish I had done this much earlier.

Also, ported PostProcessing from v1 to v2. As the color grading set up works differently in v2 compared to v1, there will be some changes in the color grading. Also, v2 has a new bloom effect that provides higher quality, at the cost of lower performance. But it has a "Fast Mode", which you can activate via the performance settings. We have both versions in a current builds, so you can easily switch between the two. But eventually, we'll remove v1 from the project.

Full Chronological Changes List:
  • Sliders: Now also play a hit sound the first time you touch them. Not having this was mildly disorienting.
  • Sliders: A completely new way to visualize Sliders - they are now streams of the OctaDrop outline.
  • Directional Drops: Part of the black magic hackery for the tracers is that very short sliders are now automatically converted to directional orbs.
  • OctaDrops: Moved spawning particle closer to player to prevent interference with screens.
  • Leaderboards: We had two release on alphadev with the new OctaDrops where we had storing your scores to the leaderboard disabled (because the new OctaDrops tracers, which are a new visualization for sliders, were still very experimental and I wasn't perfectly sure they wouldn't give you ridiculously high scores ;-) ). This is all safe now, so leaderboards are stored again.
  • Orbs / Drops / Flying Notes: We did some major refactoring to clean up years of adding cool things and make the whole thing much more modular. Still not quite perfect working towards that.
  • Directional Orbs: Moved logic that converts sliders into directional orbs from our new Tracer implementation to the beatmap parser which is a much more appropriate approach and solves several issues we've had previously.
  • OctaDrops: Orbs that were missed now properly dissolve instead of just disappearing; or worse, bumping to the floor causing plenty of physics action (we still have this for the old orbs).
  • Core Engine: Notes are now properly looking ahead so they use the tempo while they play for the buffered ahead spawning. Previously, the orbs were speeding up just when the tempo of the song already had increased.
  • Directional Orbs: We now use both, a minimum time and distance for sliders to determine whether we convert them to directional orbs. Only if both criteria are met, the slider is converted to a directional orb.
  • Core Engine: In some maps, we have fairly massive streams which both is a problem for visibility of the next notes and also can be a performance issue. For that, we now keep track of the distance and time between the current note and the next note, and if they are too close, we can use alternative visualizations. With this, we could even convert streams into sliders, which is more appropriate when we focus on punching instead of catching (with orbs; obviously you can't punch a slider).
  • Flatscreen UI: Fixed a bug that we have had in the game since forever which caused sliders and range sliders (the UI element) to not work when trying to control them via mouse. The problem were our UI audio events that didn't properly bubble the events. Interestingly, this only caused an issue with dragging - everything else always worked just fine.
  • OctaDrop Tracers: Now flash in and out like the full OctaDrops.
  • OctaDrop Tracers: Now have much improved particle effects for tracers - instead of emitting a turquoise old-style particle effect at the end of a tracer, you now get particles emitting from the catchers based on the catcher velocity during following the tracer, and one final effect based on the completion, and emitted from the catchers, at the end.
  • Main Score HUD: This went through a few iterations, from the "big smiling face" via the more sci-fi style HUD that we use in all the new environments. The truth, however, is that the tech we used for this was never really designed for that purpose (it was a good test-case for what can be done with our ScoreFlash Asset Store package, though). For the new Beat the Rhythm "Triggered" environment, we now have a shortcut that simply puts the information into UI elements that are part of the environment. This is not quite as flexible, so the old approach will remain for where we need the flexibility. But step by step we'll move some of this UI into appropriate styles and places for the environments where we can do that, which are most.
  • Main Score HUD: Fixed small glitch that caused the score per drop / slider to not be shown for sliders until the next note was caught again, after a note was missed (only in the special new shortcut approach).
  • Flatscreen UI Part 2: Range sliders were actually still broken, the fix for normal sliders didn't work for those. Reason was that for some unknown reason a OnPointerUp was sent, and Range Sliders used that to reset the state. They no longer do, and so now they work.
  • Localization: Started globalizing (= preparing for localizing) the UI. Used Google Translate to Chinese for testing. This is a pretty big one, including re-baking some of the fonts - there is still a lot of work to do ... but I made some really significant progress.
  • Beat the Rhythm / Beat Challenge: Fixed Gun Mode (using drones and showing the orb score huds). Particles still don't show up.
  • Play Area Calibration: Combined World Rotation / Movement and UI Rotation into one Element, added reset for the rotation (for some reason, only the position got reset, essentially making reset not have any effect on world/ui rotation). Also added a Recenter-Button - but only for hardware that actually has Recenter (we currently only use standing / room-scale setups).
  • Localization: We're currently in the process of localizing the whole game. We won't localize the voice acting in Story Mode for now, but all texts in the UI and messages during gameplay will be localized. For now, we start with Chinese. Japanese, Korean and Russian will follow very soon. If you want the game in your language, please let us know!
  • Analytics: Slowed down sending some of the analytics so they will hopefully get through more reliably.
  • Performance: Significantly reduced allocations, especially with the new OctaDrop theme and the new tracers.
  • Music Library: The "range sliders broken on flatscreen UI broken"-fix caused a new bug in VR, where clicking a button in a list would start dragging and basically scroll to the beginning of the list on each click. That issue only was on the alpha channel but boy was that an annoying one. Fixed.
  • Music Library: There was one super-annoying bug that sometimes occurred where you'd click on invisible panes and instead of getting what the button you clicked on shows (e.g. Favorites), you'd get what the button at the same location in another screen shows (e.g. Genres). This should be fixed now. Also, panes reacting to pointing and button presses when they are actually hidden below you should no longer happen.
  • Community Server: To cut dependencies on Steamworks, we are building our own community server for leaderboards, player state, achievements and also most popular and so forth. This is a larger project but we're making progress - players are now registered with the server ;-)
  • Gun Mode: Removed trails and multiplier rings from gun. Those looked pretty dumb and didn't really serve that much purpose.
  • osu! beatmaps: Fixed a bug that kept the slider velocity multipler of inherited timing points when there was another timing point. osu! handles this differently: Each timing point resets the multiplier to 1x and you need another inherited timing point to change it (if you want to change it). This had created issues with our Eternity map (Eternity is the last song of Beat the Rhythm and now I'm kind of glad I'm still using the osu! beatmap editor to build this one because our own, native beatmap editor isn't ready, yet)
  • osu! beatmaps / procedural maps: Fixed a few pretty nasty issues that caused wrong counts of total notes, especially with the new OctaDrop theme, which could, among other issues, trigger a "full combo" in the middle of a song.
  • Difficulty: This is a rather "hot" subject because we use the calculated difficulty as basis for the skill and style level. There were some rare cases, where the difficulty would use outdated data. While we still do display this outdated data, we make sure to use the actual mapping data, with any tweaks (e.g. the quick repeaters replaced with actual orbs in the OctaDrop theme), for the final calculation that will be used to determine skill and style levels.
  • New leaderboard UI: Finally upgraded the leaderboards to our new UI style (we had this integrated with the new UI style for quite a while - but it was very very hacky). The Steam leaderboards, however, still use the old UI (and will eventually disappear).
  • Smart Leaderboards: The new leaderboard lists are simplified and have less information and automatically show the most relevant entries: If you are in the top 10, the top 10 are shown. If you are below that, the top 1 and, depending on the number of entries available in the leaderboard, top 10 entry are shown, then the two ranks directly above you, and the ranks below you. This is linked to the new leaderboard community server. The leaderboards also show how your score has changed compared to your last session.
  • Tracked Appendages: One really special thing about Holodance from the beginning was that you could also catch orbs with your head. One problem with this was that it gave you a bonus, so it does give you an advantage with your score - but not everyone enjoys this mechanic. So now, we're properly tracking which appendages you use: Two Hands (TH), Head and Hands (HAH), Head Hands and Feet (HHAF), Head Only (HO), Hands and Feet (HAF), Single Hand (SH), Two Feet (TF) or Single Foot (SF). And each gets its own leaderboard. While in principle, you could play each map in any way, maps designed for a specific gameplay style will also be preferable, so Beatographer will let you say what style a map was designed for. With guns, laserblades and bow and arrow, there are only single hand and dual wielding, or in the case of bow and arrow, obviously, only single hand.
  • Hitsounds and Effects: The OctaDrops and Laserblade/laserbeam deflection have new hitsounds, and the gun also has a new gun sound.
  • Gun Mechanic - Shooting Drones: The explosions are now based on how perfectly you time shooting the drone. If the timing is perfect or near perfect, the explosion is very quick. If, however, the timing is a little off (a little too early, or a little too late), you get a longer explosion as a penalty. Before, the explosions were random and the longer explosions would unfairly obstruct the view. Now this is "by design" if your timing is off.
  • Gun Mechanic - Shooting Drones: All explosion effects were polished and optimized to work really well with the drone and gameplay.
  • Tracers (Sliders) & Spinners: Added possibility for looped sounds while following tracers and spinning spinners. For now, this is only used by the OctaDrop theme and we use the same loop for both.
  • OctaDrop Orb Theme / New Slider Visualization: Fixed a bug that caused sliders where you didn't catch the head caused a miss, breaking the combo. Finally, the new OctaDrop theme is fully working as intended ;-)
  • Added a little "cleanup phase" before and after each song, to avoid nasty things (framedrops) from happening while playing songs. This drops into the compositor; we'll probably remove that once we switch over to Unity 2019.1 which has incremental garbage collection.
  • File Scanners (MP3 / osu): In earlier versions of our file scanners, there were quite a few cases that could cause inconsistencies in the data, so we had a "do a full rescan every week" logic, that would make sure that if there were inconsistencies, they would be remedied within a reasonable time. That was added a long time ago, before we had a button to do a "Full Rescan", which does the exact same thing but by clicking a button. Also, inconsistencies should now be rare and really only occur when you change the library sources (add or remove local osu library, or local music and so forth). Long story short: We don't do automatic full rescans just because a week has passed. If you change the sources, do a "Full Rescan". Also, if you run into "Beatmap not found" errors when trying to start a song - do a "Full Rescan".
  • Community Server: Prepared logic for popular and recently played.
  • Story Mode: Fixed a long standing bug that caused all start/stop events to be called twice in Level-01.
  • Music Library: Fixed issue where locally loaded images were flipped upside down.
  • Music Library: Fixed a few more issues with image loading, some of which were introduced during the current iteration.
  • Leaderboards: Fixed problem that caused player avatar images to not be loaded.
  • Fixed issue that caused total notes to be off by one (one too few), which also resulted in full combos being triggered when players missed exactly one note, and this also threw off the leaderboard logic.
  • OctaDrop Theme: Polished hitsounds.
  • Player: Fixed issue that player height and player chest height (this is where the target area is) was not stored correctly.
  • Music Library: Fixed RecentlyAdded sorting issue (the most recently added songs were at the end of the list).
  • Audio Files (osu! beatmaps and local music): Fixed an issue that would have songs muted half way into the song. This was fairly rare but it did happen with a few osu! beatmaps, in particular when the audio files were mono. This should no longer happen now.
  • Music Library: Improved error message when beatmap files are not found (which is usually a result of changes to the folders and no 'Full Rescan' having been done).
  • Leaderboards: Fixed nasty issue that broke the "per beatmap" leaderboards
  • Added initial Oculus SDK support, using Oculus Integration 1.32.
  • Made controllers work properly with native Oculus support (tracking, position offsets, buttons).
  • Made haptic feedback on controllers properly work with native Oculus support.
  • Proper support for Dash (Holodance automatically goes into pause when Dash is activated).
  • Adapted loading screen to native Oculus SDK ... but that doesn't work too well because OVROverlay apparently is kind of buggy and also it seems the Oculus compositor lacks quite a few nice features that the SteamVR compositor has (fading things in and out conveniently, suspending rendering, working reliably).
  • Oculus Guardian system is now properly used to determine the Play Area.
  • Fixed broken Player Height check when using native Oculus SDK.
  • Now the haptic intensity slider also has the expected effect when using native Oculus SDK.
  • Fixed several issues in the loading screen when using Oculus SDK.
  • Fixed remaining issues with loading screen when using Oculus SDK: The progress and floor hadn't shown up; we had used a single texture for the logo instead of the 3D multi-billboard logo we used in SteamVR; there was no fading (in SteamVR, we crossfade, with Oculus SDK, due to limitations in the API, we have to fade out, switch to the compositor, then fade back in); and the overlays were in the wrong locations when entering levels where the player platform is not located at the origin (e.g. Paradise Beach).
  • Initialization on Game Load: Avoid unnecessary wait times.
  • Loading Screen: Fixed a really annoying bug that caused one progress bar to start up with the Beat the Rhythm color theme.
  • Music Library: Added UI-based universal keyboard. This still needs more input options but at least it's a start.
  • Native Oculus SDK: Fixed head gameplay objects not being tracked when not using SteamVR.
  • Music Library: Fixed theme-issue with keyboard that caused exception spam which also resulted in severe performance degradation.
  • Fixed automatic performance settings for 2080 (Ti), 2070 and 2060
  • Ported project to Unity 2018.2.20f1 - it was a bit of a hassle but it seems that almost nothing broke, so that is quite nice.
  • Ported project to Unity 2018.3.3f1. More hassles, and a few things did break (including a few fairly nasty crash bugs), but it seems there's nothing we can't handle.
  • One of the things that caused crashes was that we frequently used MeshFilter.mesh instead of MeshFilter.sharedMesh, when actually not really needing a new Mesh instance. Changing this not only fixes those Unity 2018.3 crash bugs but also slightly improves performance.
  • Story Mode almost completely broke in 2018.3.3 ... fixed all issues that I found: No audio, no voice acting, first orb thrown by Pritvitej didn't work, high five, fist bump, stroking and tickling didn't work, and a few more.
  • Another crash occurred more sporadically when storing the sessions; this is now hopefully also fixed.
  • Changed all Rigidbodies to "Continuous Speculative" which should be both, faster and more reliable.
  • Removed Slider/Tracer Themes because we only had two themes, and the non-default one was broken.
  • Added option to disable the orb trail particle effects (Themes / Orb Trails (Particles))
  • Ported project to Unity 2018.3.5f1, which fixed one extremely nasty "system crash" bug that happened both with the built game and the Unity editor: When closing the game, it would freeze for a while, then other running applications would randomly crash, the screen would go black, and usually, a hard reset would be required to continue working. This bug was specific to Unity 2018.3 and didn't occur on 2018.2 or 2019.1.
  • Ported PostProcessing from v1 to v2. As the color grading set up works differently in v2 compared to v1, there will be some changes in the color grading. Also, v2 has a new bloom effect that provides higher quality, at the cost of lower performance. But it has a "Fast Mode", which you can activate via the performance settings. We will have both versions in a few builds, so you can easily switch between the two - but eventually, we'll remove v1 from the project.
  • Major shader and shader keywords cleanup.
  • Major texture cleanup; took full game from 9.3 GB down to 6.3 GB. This should also speed up some of the level (environment/stage) and avatar loading times.
  • Using current velocity instead of max velocity (since last punch) for calculating the bonus. Using maximum velocity made sense when "catching" - but we're back to punching, and there, the current velocity on impact is best.
  • Made laserblades shorter - 80cm are long enough (that's just the blade).
  • Rotation is now based on direction of punch / slice vs. direction of the orb. With all themes except OctaDrop, the expected direction is "forward" (the opposite direction into which the orb is flying).
  • Finally, finished implementation of slicing.
  • Completely re-designed "Themes" UI: Added six presets (Casual Mode, Catch Orbs, Punch Drops, Slice Drops, Shoot Drones and Shoot Balloons). This also no longer makes arbitrary changes when changing the mechanic (it did this before - that's what the defaults are used for now).
Holodance - jashan
Hey everyone,

just in case you missed it: Holodance takes part in the Steam Lunar New Year Sale, so if you don't have it, yet - now's a really good time to get it at a 50% discount (so that's $9.99 instead of $19.99). Please let everyone else know! ;-)

And those coming in from the sale: The default branch has received no updates in the last 6 months because we've been building our own server backend ... but we have a pretty long list of changes, including the long awaited native Oculus support on the beta-branch.

So, if you want to try something new, or if you use a Rift - make sure to opt-in to the beta. If you have never opted-in to a beta, check the Product Beta section in this guide.

A lot of work went into the Octadrop and Guns game mechanics, so be sure to check those out! Also, we're getting new leaderboards :-)

If you are really courageous, try the alphadev-branch: That's the bleeding edge of development and has been updated almost daily during the last two weeks.

And if you have any question - make sure to post them into the Holodance Steam Community forums, or join our official Holodance Discord.
Holodance - jashan
This was (and still is) a big one! I actually knew we needed our own backend server for a very long time: One reason Holodance is still only available on Steam is because I heavily relied on the Steamworks backend for leaderboards, achievements and keeping state for players (i.e. progress in the game, mostly for Story Mode). In order to let you play with people on other platforms, like Oculus Home, Windows Store or PlayStation Network, we either need to use a third party service (there are some, like PlayFab or GameSparks, or roll our own.

With our second game, Beat the Rhythm VR, we not only want cross-platform but cross-game: All the community features, like leaderboards, song and beatmap quality rankings, session streams and so forth should be consistent and shared among both games, so that we can have one (hopefully) large community for both games, instead of two smaller, isolated player communities.

And there’s another thing: I’m still working on our own in-VR beatmap editor and the fun with that really only starts when you can conveniently share your hard mapping work with your fellow players. Which opens a whole other can of worms and tricky challenges that need to be faced.

Having our own backend server solves a lot of these issues; even if solving some of these issues makes developing that backend server significantly more complex than just a leaderboard-system.

A little Personal History

Before I started working on VR games full-time in 2015, after several years of doing it “on the side” (since 2007), as freelance software-engineer I had a really decent income. Which was really cool! But that was due to taking whatever software-engineering project came along. That was still kind of fun. But when I’m totally honest, this wasn’t really what I was here for, and I had known that for sure at least since 2007 … but really, as a hunch much much longer. Most of my time, I spent working with databases, Web frontends, early Java days mobile apps, some of which I developed from scratch on my own, some large and complex systems that had grown over many years, that I worked on in small teams.

One reason it took a long while to get started with this was because I knew I’d be facing some old demons when getting back into this, and I honestly wasn’t looking forward to that. While I know I can do these things, and actually do them quite well, I’d honestly rather have paid someone … except I know how much that would cost, and we have to be super-careful with our budget (2018 was twice as good as 2017, and 2017 three times as good as 2016 — but we* still have very little liquid cash and roughly €100K open loans … also, it’s not so hard to double and triple your revenue when you start from a base of roughly €10,000 … per year … revenue).

*we currently actually only means me, working from my basement to be able to sustain the company

When I finally did get started, I first spent a lot of time figuring out which technology stack to use, and learning to use that technology stack. That was fun — I love learning new things, and in terms of server backends and Web development, I was living at least 10 years in the past, probably more like 15 years. Eventually, I got it rolling and we have now had the new leaderboard and progress tracking on the alphadev branch of Holodance for a little while, we also already use it for a little side project based in Beat the Rhythm that I did for money called Beat Challenge or 节奏激战 (this one’s currently only available in China, for the Lenovo Mirage AR headset), and the internal builds of Beat the Rhythm. This is on the beta now for Holodance, so by the time we release Beat the Rhythm, it will have been in production for a little while (you may have noticed that we just pushed the release of Beat the Rhythm from “Fall 2018” to “Spring 2019”).

It’s done … well … almost!
(and we all know what that means ;-) )

The hardest parts are done. Obviously, there is still a lot more work on this end, but I am super-happy that the foundation is there and I can now build out the various systems step-by-step, one at a time.

There was a price to pay: One of the things I really enjoy about developing games is that it’s an incredible creative and lively process. Sometimes, I have an idea of my own, or a request coming in from a player in the middle of the night (Hello Discord), start coding in the morning, and can play test this new idea in the afternoon, to share it with you in the evening. Then, of course, there’s usually several days, sometimes weeks, sometimes months of polishing until it behaves in the most fun way — but it’s usually a fun process that involves designing game play mechanics, coding, visuals and effects, sometimes audio.

I have been missing that during the last few months, and after my last meditation retreat, I took a little break from the server work to play with something new. That will go into Devlog 3, so stay tuned!

One (fairly big) concern …

One final thing, also to get a little discussion going: Until recently, I wanted to use the game play data that we have been keeping on player’s PCs to rebuild the complete history on our server. In other words, upload your game sessions, rebuild the leaderboards from that, basically “migrate” everything. Technically, this is possible, and I could still do it … but there are a few concerns:

  • First of all, it does add a lot of complexity. There are a lot of things to be taken care of, and it would add a significant amount of time just to set up a reliable synchronization mechanism that can handle years worth of gameplay data without interrupting gameplay. We also changed the data format a few times, so that’s also something to be careful about.
  • Then, that data is not necessarily complete or reliable: You can disable recording the movement data, or you might have deleted the GameData folder — when it’s gone, it’s gone. So, the restored history would not be as complete as one would wish for.
  • A related issue: Without the movement data, there is a bit of potential for cheating by messing with the session data. With the new system, we’ll only record your session for the leaderboards if you opt-in to including the movement data. That way, cheating becomes near impossible. But handing that for lots of past (and partially incomplete) data is quite tricky.
  • Finally, there’s the privacy issue: I honestly don’t feel comfortable uploading up to three years of gameplay sessions to a new system without asking (and under current EU privacy laws, that would be illegal, too). But when I ask, I kind of invite people to cheat (say “no” now, mess with the data, then say “yes”). This is much easier with current / future data that is generated while playing.

So, at the moment, I lean towards making this a fresh start, probably even with a few resets during beta, to be able to polish how we store things without having to carry the burden of migrating. When I made some changes to how scoring works, player feedback on “wiping the leaderboards” was fairly positive — Holodance is still in Early Access, Beat the Rhythm not even released, yet, so that kind of thing is not totally unexpected. But still, it’s something I’m not taking lightly (which is also the reason why I haven’t updated the default-branch and only did alphadev- and now beta-updates for about six months).

Let me know what you think!
Holodance - jashan
When we started developing Holodance, which was originally called "Holodance Episode 1: Dancing with Dragons", after a few early prototypes, we fairly quickly moved into what is now called Story Mode and then, a lot of time went into building environments, modeling and animating dragons, voice-acting, making it all work together.

Of course, we also did polish the actual gameplay mechanics, added the target grid, added various ways of showing you how your score came about and even added orb themes and orbs with different shapes and materials.

But there were always a lot of other pressing things that needed to be done: Free Mode, properly handling osu! beatmaps, a music library so you could conveniently find music that you enjoy playing. Procedural mapping. More environments. Laserblades, guns ... lots of stuff a lot of people (including myself) enjoy.

Long story short, for Beat the Rhythm (and most of this work also immediately goes into Holodance), I'm kind of going back to the drawing board - with almost three years of VR rhythm game development (and playing ;-) ) experience. What I'm striving for is figuring out the most fun ways to interact with the music - and building the design and visual effects (and later also audio-effects) around that.

I have already talked a little about the new "orb theme" that we're building for Beat the Rhythm, which is also already available in Holodance in the V0.9.0b10 release notes.

Here's quick look a little tool I'm building to improve iteration times, test various color schemes and different ways of "dealing" with those orbs (if you click it, you get to the full YouTube video):

Let us know what you think in the comments!

Full Release Notes
  • Beat the Rhythm: Small Fixes in BtR Octagonal Drops (now called OctaDrops) - sliders and spinners are no longer completely broken with this theme but they are still using the old style and logic; that will change soon (and be also available for the old orb-themes).
  • Fixed file paths: Originally, we kept everything next to the game folder - but this does not work on all platforms, so this was now changed to a more appropriate location. Existing game installations should not be effected (spoiler alert - they were and the change that made this happen went live with the previous release, ooops :-/ ).
  • Cleanup: Removed "resources" which are automatically included in the builds, even if not used or not even working on a given platform, quite aggressively. I had done some of this before - but unfortunately, those changes got reverted in one of the updates.
  • Fixed file paths 2: Due to an earlier change, Configuration.json could land in Holodance_Data instead of the main game folder (the parent folder of Configuration.json). This no longer can happen - we now use the game folder again, and also do some cleanup in case players had run this version. If you made changes in Holodance_Data/Configuration.json and also had the file in the original location, Holodance will use the original file again and clean up the one in the wrong folder. If you only had the file in the wrong folder, Holodance will move it to the correct location and use it from there.
  • Beat the Rhythm "Octagonal Drops" / Octadrops: Major work on making appearing, disappearing and slicing those octagonal drops look awesome.
Holodance - jashan
This is another fairly small release but it fixes one important issue and adds something fun:

It's kind of common to use 32-bit integers to store scores. In fact, it is so common that this is also how they are stored in the Steam leaderboards. The problem: We keep track of an accumulated score, each session can give you up to a few million, and (this is not a problem but awesome): We have some very active players. So, currently, three players "hit the ceiling" when it comes to the accumulated score: MechanicaL, koolaide95 and liqiyang.

This version changes how that score is stored internally, and also added a little hacky patch to at least display the correct score in-game, even when it's above 2,147,483,647 (maximum value a signed 32-bit integer can have).

While I was at it, I also added a first version of our "Game Progression" page:

The numbers in parenthesis are your rank in the leaderboards ... and yes ... we've had Style and Skill leaderboards for a little while but they are not shown in the game, yet.

You can view your progress at any time either via Pause or Game Settings:

... and ... I figured you'd usually want to see this right after playing a session, so I also included this pane in the after session stats, and re-arranged the layout a little:

So, while this is still kind of a small update, I hope you'll enjoy this new feature. Eventually, Game Progression will also let you access various leaderboards (which will also get a major visual polishing round), become more graphical and give you more convenient access to the different game mechanics.

Meanwhile, I'm also working on native Oculus and Windows VR (aka WMR) support, and multiplatform and making very nice progress there as well.

Full Release Notes
  • Accumulated Score: As we were using integers to keep track of the accumulated score (32-bit signed, to be precise), the maximum possible accumulated score was 2,147,483,647. We currently have three players (MechanicaL, koolaide95 and liqiyang) who hit that limit. Internally, this update moves tracking that score to a floating point value, which lets us go into numbers of any size - at the expense of some precision. The problem: Steam's leaderboards also use int. But with a little hack, we can display your actual score even there.
  • Game Progression: At any time via the settings, and also after each song, you can now check some progression stats: Your accumulated total score, how many notes you have caught (orbs, sliders, spinners), how many sessions you played (playing the same song multiple times counts multiple times), how many full combos or perfect sessions you have had, how often you started the game, and your current skill and style level, as well as the last skill / style level. Accumulated score, and skill and style level also have your current rank in the leaderboards.
Holodance - jashan
So, this has been kind of an embarrassing one, tbh: I love Mixed Reality, a lot, and we have done plenty of Mixed Reality videos in the past. But during development, I don't always get to to MR-stuff ... and it turned out that both our 3rd party Mixed Reality integrations (LIV and MixCast) were both broken. Sorry everyone!

The other thing is something that during my vacation, I realized that Beat the Rhythm (and optionally also Holodance) might become much more interesting if we allowed beatmappers to define orbs for specific hands (as it was introduced by Audioshield), and specific directions (as it was introduced by BoxVR). Obviously this doesn't mean that we'll drop our orbs that you can take with any hand, in any direction ... but the "new thing" is not even an orb anymore. It's modeled as an octagonally shaped drop:

While we may still polish the design, the idea should be quite obvious: Due to the drop-like shape (which has direction), which is emphasized by the outline, the direction is immediately obvious without needing arrows or anything like that. Also, if you have followed the development of Holodance for a longer time, you noticed that we added outlines around the circles because we had visibility issues in bright environments. This shape doesn't have those issues.

One thing you don't see here, yet, is that we can also place symbols for 2x, 3x, 4x, long combo, almost full combo and combo. Those will be very simple (two dots, three dots, four dots, like dice, and a more or less filled square) and will be placed depending on the direction so that they are always inside the dark area (and with the same color as the outline).

With osu! maps, in many maps, there are a lot of very short, straight sliders that never really worked well in Holodance (they were basically just orbs in terms of gameplay). Those will become directional drops. The others will be straight (like the center one). Also, we have 5 colors, so head, hands and feet can be "assigned".

A very early prototype of this new "orb theme" is in this build - and while this is quite early (don't play this with sliders or spinners, yet, it's broken for those), I think you'll like the "physicality" of the behavior.

Full Release Notes
  • Orbs will be Drops: Well, not always, but a work in progress "orb" theme is now available in the Theme selection - it's called "Beat the Rhythm 2" and either play it with the Casual mechanic, or manually disable Sliders and Spinners if you want to try this.
  • Added a Privacy button to Pause and Settings that for now lets you opt-out of Analytics and get the data that has been collected. Eventually, this will become its own area with more settings - especially our upcoming community features will be quite interesting in that regard.
  • LIV SDK Integration: Updated to SDK version 0.1.1. Also fixed an issue with the foreground transparency layer.
  • MixCast Integration: Fixed issue that the MixCast button didn't show up in Streamer Mode even when it should have showed up. The way this works: You need to have either a 3rd controller or a Vive Tracker, or a driver that emulates that third controller / tracker active. Then, when you activate Streamer Mode, and activate the "Mixed Reality" camera, the MixCast button will appear.
Holodance - jashan
Full Release Notes

  • Music Library: Fixed another issue that could cause caching to fail.
  • Music Library: Random now immediately delivers 7 songs instead of just one.
  • Music Library: May have fixed the issue that caused panes to go crazy after songs (disappearing, being stuck under the play area). This issue happened sporadically before, and I haven't done the "full big refactoring" that was supposed to fix this issue, yet ... but I may have found a single cause that triggered most of these issues, and if that really was it, it's now fixed.
  • Removed Unity Analytics for now, to comply with GDPR. UT has released an opt-out plugin just today but I kind of doubt that this will work reliably for VR and I'm leaving for a vacation in just a few hours. Also disabled HW statistics.
Holodance - jashan
This is a fairly small release and I'm pushing it immediately only because it should fix the audio-stuttering that we've had in the previous release, which caused us to revert to a version before that. In case you still experience audio-stuttering issues, please let me know!

This version still doesn't work with SteamVR beta but Valve is aware of the issue and we know the cause already. From the looks of it, it's something that they will fix in SteamVR / OpenVR, and so far, I haven't found a way to work around this issue from my code. Valve fixed the SteamVR beta crashbug with SteamVR Beta Updated (1526522336)

Update 2018-05-17: There was an issue with caching - that is now fixed in this same release. I did a "hotfix" ;-)

Full Release Notes
  • Level 07 / Submarine Nightmare: Reduced how often the submarine shows up - before, it was about once every 45 seconds. Now it's only once every 4 1/2 minutes.
  • Level 11 / Asteroids: The Asteroids originally just moved and eventually would distribute into outer space. Now, they re-appear after exceeding a maximum distance. This can cause asteroids passing through each other close to the player but that seems like less of a problem than eventually, all asteroids being gone. Adding collisions between the asteroids, while certainly being quite interesting, would create quite a few problems so we don't do this for now ... but maybe some day.
  • Leaderboards: We are now shadowbanning in-game leaderboard entries by players that cheat. If you still find any leaderboard entries that look like something is wrong, either in the accumulated scores, or on a specific beatmap - please let us know (screenshots with the title visible help a lot finding those quickly).
  • Performance Settings: Anti Aliasing setting is now persistent.
  • Mutant Club: Fixed issue with light textures that were causing little "circles" appearing mid-air.
  • UI: Pushing UI back into VR now works without workarounds (pause / unpause did restore it before - but that's not needed anymore).
  • Fixed Audio Stuttering issue
  • Fixed issues with the old "smiley-style" Score HUD.

Holodance - jashan
UPDATE (2018-05-17): This was fixed in SteamVR beta today, SteamVR Beta Updated (1526522336). Kudos to Valve for fixing this so quickly.

... because it will crash Holodance on startup. This does not happen with the current default (non-beta) SteamVR branch. I'm filing this with Valve and will try to come up with a workaround. The crash does not happen immediately but during initialization, so we're probably calling something in OpenVR that worked before, and now no longer works. Other games may or may not be effected depending on whether or not they call that broken function (I don't know which one it is, yet).

I also pinned this in the forum.
Holodance - jashan
Most important change with this release: We have activated HDR and tuned down some of the bloom and glowing effects. It still may be too much in some environments and also with the dragon stripe emission glowing. Let us know what you think (obviously, bloom has to be active in the performance settings, and this is an effect that has quite an impact on performance, so if you're on lower spec hardware, you'll probably want to avoid it).

This also has a little fix in Story Mode: The strip emission glowing didn't work for Vayusah in Level 2 - now it does ;-)

Another important change: Sliders are more forgiving now in terms of where you actually follow them. So being a little ahead or behind the sphere (on Z, which means back/forth) is okay now. I think this doesn't necessarily make the game easier but make it feel more fair and less frustrating. We'll have more work done to the sliders over time.

The gun mechanic has also been polished a little, and the previews in the Music Library should no longer cause performance issues (and also work much more reliably).

Also, we now have the meta-data of all ranked osu! maps from 2007 to 2018-03, so that's more than 12,000 songs now, and quite a bit more than 60,000 beatmaps for you to play with.

You can now also pull the Music Library to the flatscreen UI which may be useful to set up favorites (and soon playlists). This feature is still very raw and unpolished but I use it during development and felt it may be useful to you, too. Most importantly, you may have to restart the game after you pulled the UI to the flatscreen because pushing it back to VR seems to not work that well, yet (you may be able to fix that by pause / unpause but I haven't tried).

Also, we removed the "Holodance Impact Timer". This was really old, and causing trouble. Let us know in case you miss it. I think the other Impact Timers are all much better and spending time keeping that old thing working seemed like I'd better spend this on other things with higher value.

Finally, we have done some work on Beat the Rhythm, and the orb theme we have created for Beat the Rhythm is already available in Holodance. This will still get more polishing but I think it's already fun to play with. For some more information on how Beat the Rhythm compares to Holodance, check out this posting. TL;DR: If you are happy with Holodance, you don't need Beat the Rhythm (but you can support us by getting it, of course). The environments and songs we have created specifically for Beat the Rhythm will be available as addon for Holodance.

Full Release Notes
  • Mutant Club: We had added a "lightshow" to this environment a long time ago but for "some reason", it never worked. Turns out the issue was that our light show controller usually "forgot" the settings on startup - so it's kind of strange it ever even worked for the Retro Clubbing Environment. This is now fixed and more reliable (was actually in previous release already).
  • Sci-Fi Attack: This originally had a fog effect that we had disabled because we couldn't support different fog settings in different environments and needed the one in Retro Clubbing. For Beat the Rhythm, we needed yet another variation and meanwhile, different fog settings are properly supported by our fog effect.
  • Activated HDR which mostly improves the quality of the bloom effect we're using.
  • Sliders: Made Sliders more forgiving on the Z-axis. One thing that could be really frustrating with Sliders was that they were very strict "on the Z-axis", in other words, you really had to push the controller into the orb while following it. This is now quite a bit more forgiving, so if you have the controller a little behind the moving orb in the slider, or a little before, it will still count. For 2D-sliders as we have them in Free Mode / osu! support, being as strict as we were didn't really add anything interesting to the gameplay, so it was only frustrating, without adding anything - so we changed it.
  • Moved prewarmed objects back to -10000 so they won't be visible in environments that let you look through the floor (Trippy Tunnels, Asteroids, to name two where this is the case).
  • Gun Mechanic: When interpolation was active (which it is by default), the orbs only reacted to correct aiming during their "active" phase, which is a short time before the actual beat. While for regular orbs, this helps improve performance and does not have any noticeable effect, it could be irritating with the gun mechanic, so for that mechanic, this is disabled. TL;DR: Now, orbs and drones used for the gun mechanic will always react to correct aiming by showing the target indicator and a short haptic impulse.
  • UI: Fixed scrollbars (again). They only could be pointed at at the handle - instead of in the whole area, which made quickly jumping to a position impossible. Now this works again.
  • Analytics: Major redesign of how we use analytics - this will give us much better insight into what features / options are used and what people may not even discover. Also improved device tracking.
  • Target Area 4x3 (Standard): Made this quite a bit wider because the narrow area felt quite limiting with the radial source. In fact, this was limiting with normal orb sources as well.
  • Beat the Rhythm (but available in Holodance, too): Casual Orb Theme for Beat the Rhythm done except for Slider paths (the outlines and flat paths don't look well). Gun Orb theme done (except for sliders and spinners - but don't have those for the gun mechanic, yet).
  • Performance: Removed an issue introduced by MixCast that caused 0.6kb allocation each frame. This significantly reduces the number of hiccups during gameplay.
  • Game Initialization: Cleanup and better defined states.
  • Music Library: Moved to persistent selection paths - first step: Mode and search moved over to new data structure.
  • Music Library: Added meta-data for osu! ranked maps 2017-12 and 2017, 01-03. Fixed issues with preview loading.
  • Music Library: Improved progress during "Full Rescan!" - previously, we had "Calculating Reference Stats" which looked like it got stuck because the greater part of it didn't have it's own progress. Now, we have three steps "Calculating Stats", each with its own progress.
  • Local Music: Changed how beatmapSetId and beatmapHash are calculated. This may break lookups for recently played and favorites (but should not).
  • Music Library: Made caching and previews (images and audio previews) much more robust.
  • Flatscreen UI: The flatscreen UI now has a button "Pull UI to Flatscreen". If you click this while any UI is active, that UI is transferred from VR to the flatscreen. This can be very useful with the Music Library, if you want to set up favorites, for example. You can also push the UI back to VR (but that may be currently broken).
  • Story Mode, Level 2: Vayusah's Stripes did not glow up with the rhythm. Now they do again :slightly_smiling_face:
  • Audio / Level Loading / Avatar System: Fixed issue that caused the level environment sounds to start playing during a session when the Avatars were loaded right after a song was started, resulting in environment sounds and actual gameplay song to be playing together. (edited)
  • Impact Timers: Removed Holodance Style because it was buggy and ugly. I hope no one will miss this one. We also override your setting for the update back to the default (FullCircleUp) but you can change this back to any of the others if you prefer.

Search news
Oct   Sep   Aug   Jul   Jun   May  
Apr   Mar   Feb   Jan  
Archives By Year
2019   2018   2017   2016   2015  
2014   2013   2012   2011   2010  
2009   2008   2007   2006   2005  
2004   2003   2002