1. Project Heartbeat
  2. News

Project Heartbeat News

News roundup #9 - PH update, Surprises, Project K & more

Good morning, this is not a typical news post, as there isn't much about PH in here, just an update on me and how I'm doing.

A few weeks ago I released 0.19, the first post phoenix major update, it fixes many long standing bugs.

The update went well, sales have been boosted by the steam rhythm game fest and the fanatical bundle, so I'm quite happy in that sense.

I honestly haven't worked much on anything since that released, a few bug fixes here and there but nothing major, I feel a bit physically down recently.

I always debate how much I should share about my personal life in these updates, this is not my personal blog (I'd make a separate category for that if anything) but I feel like the things listed here are relevant to development as they have an effect on my productivity and ability to work on the game(s).

This is also made worse by the fact I'm a solo developer, so any personal happenings have a full stop effect on work on the game.

Project Heartbeat




Project Heartbeat is popping off hard, as I told you guys before, I will be working on some new features soon, rush notes are likely to be the next big feature to add to the game.

I would then like to work on the archival format.

I was thinking of using some of the LOD'd terrain mesh stuff from Project K to make the game's default background into a real 3D scene with 3D visualizer effects, not sure how well that would work but it would be very fast and probably be a nice thing to add.

I also have to re-review the replay system which I parked for now, essentially the way it worked was by capturing raw input actions and replaying them, it was more complex than it had to be because I wanted to know the hardware origins of each input so as to have the ability to analyze the inputs per-device. A simpler and more reliable approach could be to capture the final input events after being processed by the game, but this would mean losing some data.

As a middle ground we could do like Trackmania, which captures both actual game-affecting final input events and raw hardware input events, but only have the first one be used for actual replay playback.

The raw input events can be used to analyze replays by the community without compromising repeatability.

And yes, I am aware of multiplayer issues, I'm working on them!

[h2]New PH content coming!?[/h2]

YES!! There's three new songs coming to the game, as well as a new built-in skin (that doesn't replace the original one we all know and love), more news soon. Two of them are Eurobeat classics /).

[h2]Project Surprise[/h2]

I'm working on a PH related project that will be announced when it goes out of early access, don't worry, it's not Project Heartbeat 2.

Project K


Project K is my new game side-project, so as to not pollute this blog post with non-PH stuff you can find the full version here.

Health update


As some of you may know, I spend a lot of time in bed not doing anything, I used to blame this on depression (and it probably is still at fault somewhat).

It has been discovered in a recent blood test that I have a major deficiency in vitamin B9, aka Folate, which means I have probably been in need of a supplement for a long time but it wasn't discovered until now.

This would actually explain many things, such as my constant tiredness and difficulty losing weight, hopefully by taking folic acid supplements I can be back to normal in a few months, hopefully.

I would like to apologise for not finding this out earlier and the effect its had in PH development.

Personal update


Due to personal happenings I've not worked much on PH recently, again as this isn't strictly PH related I posted about it on the patreon post.

See you soon, hopefully for 0.20 or the end of early access?

Project Heartbeat 0.19 now available: Bugfixes, adjustments, and more

Welcome to this funky update, including not so many new features and a truckload of bug fixes!

New song: The nostalgic messenger


[previewyoutube]https://youtu.be/itBQ5pVuFN8[/previewyoutube]

This is a song that has been in the works for two years, thanks to mvluna for the charting, to Cusi for the music and to RheaBee for the artwork!

Song list changes




After a lot of iteration and input from the discord I finally came up with a design I like.

The new design features difficulty lists that are easier to read at a glance, this will also be used for score based filtering (the individual difficulties that don't match the filter will be greyed out).

Currently the difficulty colors are either hardcoded (for the 5 canonical difficulties) or generated from a hash function, you will be able to set your own difficulty colors in the future though.

There's also a much requested unsubscribe button!



On another note, when scrolling through the song list (specially when wrapping around) you will now see some placeholders, these are there to prevent having empty spaces and to give you something to look at while the short scroll finishes, this prevents having to load all the song UI elements.

OOB system




This is something i've wanted to do for a while, basically, I want to have system that lets you configure basic PH features right on first start, such as the note skin or the health system. You can also just skip it and use the defaults like before!

New judgement graphics




Judgement graphics have always sucked in PH, they were nothing more than labels, i finally got around to designing new ones, I also made the combo count use some new number graphics as well, might use them for the score counter on the top right too, who knows.

Stats tab




The results screen now has a new fancy stats tab, I hope you guys like it! It was made with help from the PH discord and specifically from Steven, I still plan to make some cosmetic improvements.

On another note, the stats and the graph tab now do their math using a multi threaded task system, so they should no longer stall the game.

Results screen changes




I made some changes to the results screen based on user feedback, I hope you like them, there's still one more feature I want to add to it, but that will come later.

Pulsating buttons


I did some workaround to allow having animated buttons, the animation is rudimentary but works pretty well I think.

Slide note behavior changes


I have made the slide notes match the behaviour in the brazilian girl's game, specifically I made it so that it won't give you a WORST until its at the end of the window.
It's a bit hard to explain, but you'll understand when you try it.

Video player improvements


The video player subsystem has been improved and it now supports different playback speeds, so you can have videos in nightcore more and in the editor when changing the playback speed.

Range sliders redesign




The range sliders in the options menu have been redesigned to be much nicer and more usable by mouse.

Bug fixes


  • Fix not being able to move the start of sustain notes in the editor
  • Fix workshop browser not using the adequate input actions
  • Fix gamepad list display in options menu
  • Fix mouse auto hide behaviour
  • Fix song cache dialog overflowing
  • Fix song list song container clipping
  • Fix video scaling in editor playtest
  • Fix first time playing a song in the editor not setting stream position correctly.
  • Fix crash on negative duration songs
  • Fix content reloading showing a black square in the middle of the screen.
  • Fix scripts and midi loader popups having wrong column expansion settings
  • Fix offscreen sustain line drawing
  • Fix scripts and midi loader popups having wrong column expansion settings
  • Fix some practice mode stupidity
  • Fix laser renderer not being deleted with groups in the editor under some circunstances.
  • Fix editor shortcut creation
  • Fix running editor scripts
  • Make video downloads using audio only actually only download audio
  • Fix code editor font
  • Fix Game showing wrong emblem in progression list
  • Fix video restarting without notes in practice mode
  • Fix practice mode exit focus issues
  • Add subtick functionality to some missing places
  • Improve universal scroll list clipping and performance.
  • Switch to comfy-like heuristics for grouping slide chains (hopefully)
  • Removed old task queue and switch song filtering and sorting to use new engine features
  • Fix skin editor serialization
  • Fix skin editor font editing
  • Fix skin editor outliner right click menu not showing up in the correct location
  • Fix song list not selecting song when returning from gameplay session
  • Fix song start scheduling fucking with practice mode when first entering it
  • Fix some sort options not working properly
  • Fix practice mode sometimes causing stray note groups to exist
  • Use new video player playback speed mechanism in video player
  • Fix taill preview images overflowing music player thumbnail
  • Fix diagonal and full width snapping in the editor
  • Fix workshop browser filter by difficulty
  • Fix "Deselecting all difficulty filters breaks difficulty displays" and "the text above the filtered songs still says "(0-10+)" regardless of what the filter actually is"
  • Improve lyric phrase timeline item behavior
  • Various minor fixes to windowing
  • Fix sorting by highest score
  • Add a few resource pack things and generate mipmaps
  • Fix a few minor memory leaks
  • Fix content dir selection
  • Fix holds in autoplay
  • Fix: Disable and enable UI as needed for the tempo map tutorial.
  • Fix: Make sure autoplace works when moving notes around.
  • Port Arc tools to Godot 4 editor
  • Fix leaderboard score alignment Fixes #98
  • Fix some more buffer behaviour leftovers
  • Fix autoplay not doing holds properly
  • Fix histogram lines usign placeholder values Fixes #101
  • Fix auto translate triggering for percentage delta label. Fixes #102
  • Fix editor transform preview on export
  • Fix Full Width and Diagonal Step Arranging.
  • Fix potential memory leak in tabbed container
  • Fix star filter not working in workshop browser
  • Fix failure to start practice when song assets aren't loaded
  • Fix main menu bg swap not happening when returning from playing a song
  • Fix Song menu doesn't remember previously highlighted song
  • Fix options sections having a default scroll that made them cut off
  • Fix some more editor stupidity
  • Fix timeline scrolling and make more shortcuts visible to the user.
  • Fix opening charts by double clicking.
  • Fix order of arc and circle tools.
  • Disable minimap while area selecting.
  • Fix angle arrange again.
  • Fix timeline stealing clicks
  • Fix song list folders and workshop tab not working and resetting respectively
  • Fix some options menu spacing issues
  • Remove invalid deserialized charts from in-memory metadata
  • Fix sort prop not being applied to filter songs task
  • Reset scale up/down shortcuts properly.
  • Fix circle size sliders.
  • Fix zooming in the script editor.
  • Fix scrollbar issues when resizing editor modules.
  • Fix latency tester
  • Fix error cleaning up thumbnail requests
  • Improve & fix workshop automatic download after subscription
  • Fix rare main menu news list error
  • Fix note scaling in practice mode with custom note scales
  • Fix issue when mashing accept on restart
  • Fix crash on startup on some linux distros


Other minor changes


  • Adjust note hit effect and slider piece particles
  • Make use of new videoplayer.process_while_paused
  • Improve gamepad list display in options menu
  • Add practice mode video seek debouncing
  • Make importer replace chart check be checked by default like in 0.17
  • Replace results screen share to twitter with score URL copy
  • Add the ability to filter and sort in folders
  • Added appear animation to confirmation windows
  • Improve workshop item thumbnail behavior
  • Add subtle shadow to most labels
  • Generate mipmaps for song assets


Future


Some personal issues have prevented me from pushing this early, I managed to cause myself a neck contracture (I barely get out of bed recently so it's starting to affect me) and my grandma is in a coma, which is for sure not good for spirits, the doctors say she has porphyria.

Regarding Swansong: I have completely stopped working on it and I'm unlikely to resume it, as the people that were going to help me make it a reality are unable to work on it anymore, unfortunate, but it is what it is.



I have instantly pivoted to working on another kind of game, a less niche one, tailor made for consoles (particularly switch/switch2) so I can hopefully make some money, I don't want to talk about it until I have something to show though, I wouldn't want to disappoint again, but if you are around in the discord you probably know what it is.

On a more positive note, sales have been insanely good recently, so I'm very happy with that, I finally have some air to breathe financially!

See you next update, which will hopefully be the one that gets the game out of early access. Oh! about those rush notes I owed you... Soon!

Enjoy this picture of my late grandpa's work van and my MR2 to top off this update:

News Roundup #8 - Marching towards full release!

(originally posted to the EIRTeam patreon)

Hello people, long time no see! I have been working a lot on PH recently, fixing up stuff and finally adding new features, I hope you guys like what I've been cooking.

Most things are bug fixes, a detailed changelog of which will come when I release the next stable patch!

Song list changes




I pushed some experimental song list changes, after a lot of iteration and input from the discord I finally came up with a design I like, there are some minor bugs here and there still, but I think i'll be able to solve those.

The new design features difficulty lists that are easier to read at a glance, this will also be used for score based filtering (the individual difficulties that don't match the filter will be greyed out).

Currently the difficulty colors are either hardcoded (for the 5 canonical difficulties) or generated from a hash function, you will be able to set your own difficulty colors in the future though.



On another note, when scrolling through the song list (specially when wrapping around) you will now see some placeholders, these are there to prevent having empty spaces and to give you something to look at while the short scroll finishes, this prevents having to load all the song UI elements.

These will be updated to the new song list item design when it is finalized.

OOB system




This is something i've wanted to do for a while, basically, I want to have an out of the box system that lets you configure basic PH features right on first start, such as the note skin or the health system. You can also just skip it and use the defaults like before!

New judgement graphics




Judgement graphics have always sucked in PH, they were nothing more than labels, i finally got around to designing new ones, I also made the combo count use some new number graphics as well, might use them for the score counter on the top right too, who knows.

Replay work




While they aren't ready yet, I've been working on replays, I laid some of the ground work for them, most of the stuff involved making the holds and other parts of the game more deterministic.

Unfortunately, this also means the removal of the venerable rollback on unpause functionality, I hope this doesn't bother you guys too much, but it was going to be extremely hard (or impossible) to get it to work otherwise.

Stats tab




The results screen now has a new fancy stats tab, I hope you guys like it! It was made with help from the PH discord and specifically from Steven, I still plan to make some cosmetic improvements.

On another note, the stats and the graph tab now do their math using a multi threaded task system, so they should no longer stall the game.

Pulsating buttons


I did some workaround to allow having animated buttons, the animation is rudimentary but works pretty well I think.

Future




We are well on our way to going out of early access, I will do a small update to stable with the new features and bugfixes soon (tm), then I'll finally work on rush notes and then we might be ready for release, I hope.

It's really been a terrible month for me, at least I'm glad phoenix ended up coming out as good as it did, my motivation is on the ground but at least I get stuff done on a daily basis.



I am once again at a complicated crossroad, I feel very demotivated and things aren't getting better, I fear for my future. I've been trying to learn some 3d sculpting too, let's hope that comes out good.

I didn't work much on Swansong, I've actually spent a lot of time playing Ghost of Tsushima (great game btw).

I feel sad when I play games because I feel like I should be working, but when I look at the real amount of time I spent playing vs working I actually should probably work less and play more, but I don't enjoy it as much.

Life may be hard, but I'll figure it out.

See you soon, lads!

Project Heartbeat Phoenix Update: Now available

"After 10 thousands years in development, hopefully, it will have been worth the wait!"

Ladies and gentlemen, the time has come. We've gone through an insane amount of hardships together over the last year and this is the culmination of that work. Welcome to Project Heartbeat Phoenix.

Welcome home, rhythm game enjoyer


Project Heartbeat Phoenix is the most far-reaching update we've made ever since the game released back in March of the seemingly cursed year that was 2020.

This update touches every aspect of the game and improves upon it, not only is the engine brand new, so is the input system, the video decoding, the steam integration, the multiplayer, the rendering code, everything has been meticulously revamped to harness the power of the great Godot 4.

This update won't really blow your mind with fancy bells and whistles, as there aren't that many new features, what it provides however is an incredible improvement to the bare essentials, never before seen consistency and world-class rhythm game technology, this will not only improve the game, but also my ability to expand it in 1.0, let's get into the details.

The new approach




As some of you may be aware, in this year since the last major update I started a Patreon, this has not just resulted in a much-needed help to sustain myself (PH isn't profitable at all, with me not earning minimum wage most months) but also it has allowed me to have a "reason" to work on engine extensions that can be shared between different games.

The result of this is the new Steamworks, input glyphs and FFmpeg modules I developed for the engine, these are open source and available on the EIRTeam GitHub for everyone to use!

If you want to help me out further monetarily check out the Patreon, this is obviously optional and doesn't get you many benefits other than a different color in the discord.

New content


[h2]New song: Versos perversos[/h2]

[previewyoutube]https://www.youtube.com/watch?v=L9slqe57vUQ[/previewyoutube]

Licensed from the great Andrés Alguacil, AKA elBokeron, Versos Perversos is a relatively popular Spanish meme rap song that I added because I personally like it much, luunah decided to make an extra hard difficulty named "Lunatic", this won't become the norm but it's just a nice plus.

This is a collaboration I've been wanting to do for a while, I actually obtained permission from Andrés back in 2021 to use his work, but life and Project Heartbeat got a bit on the way.

The art was made by @Psycho_Loli on twitter. Please check out her work!

Charted by luunah and lino.

[h2]New song: War zone[/h2]

[previewyoutube][/previewyoutube]

Touhou Eurobeat, the source of all great things in Project Heartbeat, here's another Eurobeat song from our friends at Grazepoint, based on an original Touhou Project song, this was arranged by WORLDWIDEWOLF with vocals and lyrics from Timothy.

The artwork was made by our great resident artist @Guinii4 please make sure to check out her work!

[h2]The new game engine[/h2]

Phoenix uses the new Godot 4 game engine, the result is increased performance, more renderer options and less headaches for me, yay.

[h2]The star of the show: Subtick system[/h2]

[previewyoutube]https://www.youtube.com/watch?v=8EgtpCrbdSg[/previewyoutube]

While working on what would later become Phoenix I had an idea, could we possibly make the game more consistent if we applied the same technology valve's Counter-Strike 2 uses for subtick input? The answer as it turns out, is a resounding yes.

You can learn more about how it actually works in the video above, I plan to do a few deep-dive tech videos describing how it actually works eventually ;)

Currently subtick is only used for gamepads, but I plan to add kb/m support in the future, and perhaps even touch support.

[h2]Input system[/h2]



The input system has been replaced by SDL, this will finally rid us of strange issues the game was facing since release. Yes, this also means Steam Input finally works well with the game! Long-gone is the need to go into options to change your current controller manually, now you can even play using two or more controllers at the same time! (not sure why you'd do that, but you can).

[h2]New input glyphs[/h2]



I decided to revamp the input glyph system used in the game, as mentioned before this is part of the three open source projects that I launched the patreon with! The new glyphs are nicer (courtesy of valve) and it also supports better keyboard glyphs.

[h2]Discord rich presence[/h2]



I've reworked how discord rich presence works, it will now show the album art for workshop songs! It's also much more reliable and doesn't depend on Discord's stinky proprietary libraries :D

[h2]Multiplayer revamp[/h2]



Multiplayer has been completely rewritten from scratch, the new code is more reliable and robust, it should allow for doing more complicated things like using modifiers or different per-song variants in the future!

[h2]New website[/h2]







While already announced, the new website was developed as part of the development of Phoenix, I revamped the design, added many fancy new features, such as personal best history, search and more.

[h2]Real 3D GUI[/h2]



In old Project Heartbeat the way the UI was made was by drawing two textures offscreen and then putting them on a bunch of 3D planes as textures. This had its share of inconvenience and performance issues, it also didn't allow any form of antialias or the ability to sample the background.

With the new rendering code I wrote, we now have a real 3D interface inside PH, this allows me to use MSAA x2 on the main menu for crisper rendering and also saves you a lot of power consumption, specially important for handheld devices like the Steam Deck, I've seen battery life of up to 6 hours on my own machine.

As I said before, the new real 3D GUI also allows me to read the background of the image, this means I can finally do the frosted glass effect I always wanted to do, I think it looks very pretty, I might make it configurable in the future, so please let me know what you think of it.

[h2]Video decoding improved[/h2]



I rewrote the video decoding code we used, by taking heavy inspiration from the way Osu! does things but with a few twists.

You see, videos don't really come in RGB form, they usually come in a pixel format known as YUV.

The human eye is actually much worse at distinguishing colors than it is at distinguishing various shades of brightness, what most formats do is that they cut the pixel data into a big luminance channel and two smaller chromatic channels. Essentially this means that instead of needing three full resolution images for each color channel (R, G ,B) you can instead get away with a big image for luminance and two smaller ones for color information, and your eye is none the wiser!

Unfortunately, graphics cards can't really display YUV data directly, due to this the conversion had to be done on the CPU which was computationally expensive, there are some graphics API extensions that exist but there's not much reason to use them now that we have compute shaders.

And such is the approach used in Phoenix, it uses the massive parallel power of your GPU to convert YUV video into RGB, in practical terms, this means that converting a frame to RGB takes 43 microseconds instead of 7 ms on a powerful computer, which is a 160 % improvement.For now this technique is only available on the Vulkan and DirectX 12 rendering backends.

I also added the ability for video playback in nightcore mode, I hope you guys like it.

[h2]True Vulkan and DirectX 12 support[/h2]

Old PH used a compatibility layer known as ANGLE to translate the original Godot 3 OpenGL calls into Vulkan (and formerly, dx12), this was fine, mostly, but PH now uses Godot 4, which has native Vulkan support.

I have decided against making DirectX 12 the default on windows, due to some potential memory leaks in the Godot code that were reported to me, but you can still try it if you want.

On the long run, PH should get native vulkan DXGI present so we can ditch DirectX altogether, but that's currently out of my expertise since I'm a bit of a Vulkan noob hehe.

OpenGL is still supported, at least for a while, but it's actually likely to perform worse on most systems, so I recommend not using it.

[h2]Results screen revamp[/h2]



I redesigned the results screen, thanks to input from NeoRash, I think the new design is quite nice, now it shows more information than before.

Future




I am very excited (and honestly, nervous) about this release, this is basically the work of a full year condensed into a single update, gives me the same feels the initial release back in March 2020 gave me, it's a good feeling to finally be productive again.

Regarding Swansong, I haven't had much time to work on it obviously, but I already know what things I will be exploring when I inevitably return to it, but obviously my focus always remains on PH, specially since I expect an inevitable wave of new and interesting bugs with Phoenix.

See you in the next update where PH will finally go out of early access!

I would also like to thank steven for all the bug testing and hunting he has been doing, and the various analysis he ran on the game.

Project Heartbeat Phoenix Update: Release date announcement



Mark your calendars: May 20th is the day Project Heartbeat Phoenix releases to everyone!

Project Heartbeat Phoenix is our biggest release yet, featuring a new engine, improved performance and a first of it's kind subtick system.

Love will never be the same.