Repository navigation
v2.0 ~ Pop'n in 120Hz ?! Recording mode ?! REAL ms-based timing ?! ~
Version 2.0 is finally here, with a huge changelog and the "last hurdle" mostly cleared!
It also contains another insane contribtion from r2nk226, who made their practice mode even better than before and even added a crazy new "recording" feature :o
Thank you very much!
Fixes
<enhanced_polling>
As it turns out, enhanced polling has been broken on official releases since the very start :'( It was still improving input latency but the judgement correction wasn't working at all thanks to gcc detecting a clobbered register and restoring it to the "unfixed" state.
Special thanks to though for nagging me so much about this patch that I actually went and had another look at the code. This is how I could notice the bug, enjoy ms precision as it was meant to be :D
I also noticed it definitely doesn't work as good as it could on original SD BemaniPC without a ram upgrade, but I have great plans for that in the future! 1000Hz polling without the need for a new thread, and with negligible ressource consumption, stay tuned 👀
<local_favorites>
Local favorites was made to be working even without being logged in. However I noticed this was causing crashes at the end of the credit. This is now fixed.
<hispeed_auto>
- Several users brought up weird behavior with this patch, where every once in a while it would randomly set multiplier to x1.0 when selecting a new song.
It was indeed quite random (depending on where the chart data was loaded in memory). This is now fixed.
- Target bpm being kept for quick retry on soflan songs had weird side effects like the "temporary" multiplier carrying over when selecting another soflan song, or the multiplier being set to x0.0 when retrying a soflan song on default bpm
This is all fixed.
<custom_categ>
Another scrolling bug has been fixed in "ALL SONGS" subcategory for songs whose charts were spread across different packs. Should be the last one :p
Thanks to Cormano for the heads up
<practice_mode>
(r2nk226) No more playback speed issues for .2dx files not using 44100Hz samplerate.
New additions
<config_update>
A long overdue QoL feature which I kept postponing until now.
With popnhax.xml growing, it was becoming more and more annoying to rewrite the options after each popnhax update... well from now on the settings will be kept between popnhax updates!
Of course that doesn't automatically apply for the 1.x->2.0 update, but will do for any future 2.x->2.y
There is a workaround to apply this in your 1.x->2.0 though
HOW TO GET CONFIG UPDATE WORKING FOR 1.x TO 2.0
Only extract popnhax.dll to your contents folder, and run the game once.
It won't run because some options should be missing from your popnhax.xml, but the internal option file will be generated.
You can now do your full update (extract all files and overwrite), then it will perform the config update on next run and everything should go fine.
Technical details
popnhax.xml effective lines are copied to a new popnhax.opt file which is what ends up being parsed by popnhax.
popnhax will detect changes made to popnhax.xml and regen the .opt file when needed so keep using popnhax.xml to change your settings and do NOT edit popnhax.opt.
popnhax release packages now contain an empty file named _update. When popnhax finds this marker file, it will perform the config update, by first updating popnhax.xml with the values found in popnhax.opt when applicable, then perform the .opt generation.
It will also remove the marker file once the update has been performed.
Note: this also works with other .xml used as your config file (such as popn22_...xml or --popnhax-config option, although with the latest additions there's no much reason left to use multiple config files)
<recording_mode> ( <practice_mode> )
r2nk226 is back with a killer addition to the practice mode: recording mode.
You can record gameplay by pressing numpad 00 on the result screen. This will create a file in contents/rec folder.
On option screen, before playing a song, you'll hear a chime if a recording has been found for it and you can toggle between play or replay recording by pressing numpad 00 before launching the song!
Info will also be displayed on the practice mode menu.
Note: In recording replay mode, popkuns will be different, using assets provided by MUSE and Roganis so thanks to both of them as well :D
Note: As usual, please avoid using this while logged in. Scores should not be sent regardless, but better be safe than sorry.
<high_framerate>
This is the "last hurdle" I've been hinting at since early releases. I've always wanted 120Hz pop'n!
As you know, running pop'n in 120Hz resolution is possible but will cause sped up animations and menu transitions, and not at 120fps but rather ~85fps.
<fps_uncap> could unlock the internal framelimiter to give you proper 120fps but then the animations would be REALLY sped up.
This patch slows animations back down so that 120fps still feels like regular pop'n in the menus (except that you can still scroll song select menu very fast cause that's more convenient, and also provides feedback that you're indeed running in high fps mode :p)
Huge thanks to pulse for pointing out that afp animations (most character and menu animations) are loaded with the frametime as a parameter, that it was thus pretty easy to slow down or speed up, and actually showing me where the function was used. I just had to write basic math around that and the internal framelimiter to make it happen :p
I really can't thank her enough for all the reversing work she's done on pop'n in the past. Both her and Nagato definitely shaped how I now approach reversing in general, and popnhax as you know it wouldn't have existed without them, so huge huge huge thanks to them! :D
Note: There's a known issue with this patch (and framelimiter patches in general) which prevents the game from booting when using a real IO board. This will be fixed in a future release (as most cabs don't have 120Hz monitors in them anyways, I don't consider this bug should postpone popnhax 2.0).
Additional debug options
<high_framerate_fps> and <high_framerate_limiter>
<high_framerate> default behavior is to automatically fetch the framerate from your current resolution and disable frame limiter (like fps_uncap was doing).
with <high_framerate_fps> you can manually set the desired fps so that the framelimiter could be "adjusted" rather than completely disabled (for example I got good results with 120fps on a 144Hz resolution).
TL;DR I recommend setting your fps in high_framerate_fps for better results.
<back_to_song_select>
Technically not a new addition as the patch was already present in experimental patches, but it's now refined and has become a proper patch :D
All the sound issues it was causing have been fixed, and it's properly disabled in local/battle mode.
This can be used with or without pfree, it allows to go back to song select menu if you picked the wrong song (or if the timer has expired and you want another go :p)
Enhancements
<practice_mode>
(r2nk226) Song speed can now be set from 50% to 150% by 10% increments. Menu position has been adapted so that it can be visible in SD mode too.
<hispeed_default_bpm>
auto hispeed target will now reset to the default value at the end of a credit.
This should make the experience smoother when multiple people are playing on the same setup.
Thanks to James for suggestion.
< pfree>, <quick_retry>
There is now a confirmation sound playing when pressing numpad 8 or 9 on result screen. Thanks to r2nk226 for showing me the way with recording mode :)
<custom_categ>
This patch got a major rework as category creation is now merged with actual song injection.
Which means all additional songs are now properly detected regardless of their songid (ie. PC mixes omni songs are properly detected as customs)
This also means there's no need to know about songids to arrange your customs/omni tracks:
- Any pack will be considered custom by default
- You can exclude a pack from the customs by either making the folder name start with a underscore (e.g.
data_mods/_milo), or by putting a file named_excludeinside the folder - You can rename a subcategory by either renaming the folder, or by placing a
_name.txtfile inside containing the desired name
This allows for example to merge all milo1 milo2 milo_h tracks into a milo subcategory by creating a _name.txt file containing just milo, and copying that file into these 3 folders.
Additional debug options
<exclude_omni>
Now that all omni songs are properly detected as custom, there might be users who don't want to exclude them from version/level folders while some other users would still want to.
This allows you to choose if PC mixes omni should be brought back in the regular songlist or not :)
<partial_entries>
Some entries for omni revive one chart (e.g. 5 button chart) for songs that are still in the base game.
With this option you can decide if such songs should be regarded as custom (ie. appear in custom subcategories, be displayed with the custom format, etc..)
Removals
I also gave popnhax.xml a good cleanup, removing some of the debug options.
<disable_redirection>, <disable_expansions>
These options were useful when debugging omni at first but are pretty low level and not that useful anymore, and would confuse some users thinking "omni doesn't work I should change this" while they just don't have the correct patch file ffs...
<custom_categ_max_songid>
Not needed anymore given the new customs management design.
Note: custom_categ_min_songid has been kept because the 3000 limit (for CS and older hardware exxclusives) is crossed inside omnimix pack.
<survival_gauge>, <survival_iidx>, <survival_spicy>
hard gauge alteration modes were discarded since on the whole the feedback I got about this option was that the default setting was what felt the best.
<translation_debug>
This option was a bit too low level, people who need it know how to set it up :p