Skip to content

Releases: CrazyRedMachine/popnhax

v2.5 ~ user request edition ~

20 Apr 13:35

Choose a tag to compare

It's been a while!
Version 2.5 inlcudes a couple features I worked on based on user requests, as well as stability improvments.

Credits

Special thanks to all users who submitted requests and feedback :)

Fixes

<patch_db>

Automatic patch generation has been broken for some players depending on whether a bootstrap.xml file was present in prop folder and other unknown conditions. The patch generation system has been slightly reworked and should be more stable/reliable now.

New additions

<judgement_display_offset>

You can make the game display the judgement text higher or lower according to your personal preference.

Thanks to c353 for the suggestion

<hide_lift>

Lift option can automatically hide the area below the judgement bar.

Note: this can work even with hidden_is_offset/show_offset patches. However if you DON'T use hidden_is_offset, then manually setting a hidden+ value will take priority.

Thanks to yumemi for the suggestion

<datecode_prop_parsing>

(when using force_datecode "auto") popnhax can parse bootstrap.xml/ea3-ident.xml/ea3-config.xml looking for the most recent datecode in order to use it.

This should simplify the data update process for people not using multiboot setups.

Thanks to azui for the suggestion

See you next time for more goodness :)

v2.4 ~ missing fixes edition ~

16 Nov 23:41

Choose a tag to compare

Version 2.4 is more of a bugfix/improvement release, you'll have to wait for new features. In the mean time these additions were worthy of a quick release. enjoy :)

Credits

Thanks to r2nk226 for practice and rec mode as usual, thanks to mon for ifs_hook 🙏

Fixes

<patch_db>

ifs_hook has been updated to v3.3. If you've been encountering random black screen red text with error 5-1509-0000 lately, this should fix it.

<force_unlock>

It recently came to my attention that force_unlock without patch_db has been broken for a while. This is now fixed.

The game also added a new flag which caused some songs to disappear on some setups. This is now properly handled, all songs should unlock properly.

<local_favorite>

stability fix, an error message would wrongly appear in the logs with later versions of the game.

Enhancements

<practice_mode>

Last but not least, practice mode has been fixed and improved thanks to r2nk226

Record Mode

Record mode now supports popn28 properly, enhanced polling as well as R-random.

The code has been slightly rewritten and optimized for reduced memory load.

Practice Mode

  • Renamed the menu item from REGUL SPEED to CONSTANT
  • Changed the message from "Scores are not recorded." to "NO CONTEST"
  • Fixed an issue where, when using speed change, record playback, R-random, or CONSTANT, scores and medals are now cleared before score submission
  • Enabled opening and closing the Practice Mode menu with NumPad 7
  • The menu will now close during gameplay
  • The menu will be forcibly displayed on the results screen
  • Optimized the process for speed change
  • Speed change, R-random, and CONSTANT can now only be changed during song selection and when the menu is displayed

v2.3 ~ hardware offload?! Quick boot ?! Attract mode has evolved again?! ~

02 Oct 21:06

Choose a tag to compare

Version 2.3 is there with better compatibility and a couple nice new features.

Credits

Special thanks to gingerchris for bringing to my attention that lights were actually not working in attract mode.

As usual, thanks to all betatesters :)

Fixes

A lot of patches have been rewritten for stability~. Should be compatible with more versions of the game now.

Enhancements

< tachi>

popnhax now comes with the correct msvcr100.dll bundled, and libcurl is loaded dynamically when one of the tachi patch is enabled. This should allow you to just disable these patches and not have any compatibility issue with your OS in case you had trouble with v2.2

<enhanced_polling>

enhanced polling now supports my new "PopnIO v2" pcb, which implements the real io board protocol, but also additional features including hardware offload. It is automatically activated when popnio.dll is present in the contents folder and enhanced_polling is active.

This allows a very stable and very reactive enhanced polling even on bemanipc hardware with very little overhead.

Rather than using a separate thread ingame, the ioboard itself takes care of measuring how long each button has been pressed for, and the protocol features new ways to communicate with the io so that you can retrieve the immediate input state (whereas it seems like the real ioboard gives you a last known state, which can be up to 10ms in the past... insane).

<attract_ex>

when you have a hispeed_default_bpm set, attract_ex will use it as a target value for its multiplier, instead of using x4.0

New additions

<attract_lights>

Attract mode will have all lights working, including button lamps for the autoplayed notes!

Note: button light duration is pretty short for now, and long notes aren't handled properly, that will be fixed in a future release, along with yet other new attract-mode related stuff... far from being done yet x)

<attract_interactive>

You can now TAKEOVER the attract mode autoplay!! :)
Press any button other than red to enter interactive mode. You can now play the song yourself (including red button).

Note: If you stop pressing buttons for a while, autoplay will resume.

Note: If you don't use attract_full, attract mode timer stops during interactive mode, and resumes with autoplay.

<quick_boot>

Last but not least, you might have noticed the game takes a long time to boot (black screen before the self-test comes up), and that it is even longer when you have a lot of custom packs.

This patch reduces that black screen duration down to a couple seconds no matter your songlist total size.

See you next time for more goodness :)

v2.2 ~ Autopin ? Revamped Attract Mode ?! Kamaitachi integration?! ~

18 Jul 19:54

Choose a tag to compare

Version 2.2 is there with some nice new features as usual :)

Credits

Tachi integration uses libcurl to perform the requests,
jsmn, jsmn-find and chash to parse the json data.

Enhancements

<high_framerate>

If you play high framerate without timer freeze or event mode, you might have noticed the timer is faster than usual. A new patch has been added to slow it down
Note: it is automatically enabled when high_framerate is on.

Additional debug options

<force_slow_timer>

You can use this option to force slowing down the timer even without high_framerate. This is useful if for some reason you want to play at higher framerate but cannot use the high_framerate patch

New additions

< autopin>

Small QoL feature to save precious seconds, you can have popnhax enter your pincode for you.

Note: this is a 0/1 bool value. Do not enter the pincode directly in popnhax.xml. it requires you to enter your pincode in a separate _pincode.secret file as plain ascii.

Note: This hook has a 30sec cooldown, so that you can enter your actual pin if the one from the file is wrong. This also implies that if you quickly exit from the pincode screen and scan a new card in less than 30 seconds you won't trigger autopin right away... this definitely won't happen on normal use, so I'm fine with just leaving a cooldown

<attract_ex>

This will pimp the attract mode demo songs a little. It will play the EX charts instead of the Easy ones, and at x4.0 Hispeed for a flashier attract

<attract_full>

If you're frustrated by the songs being cut short when you leave your cab running, then this patch is for you. Attract mode will now play the full songs.

I'm not even close to being done with attract mode customization, I actually have a pretty cool goal in mind for cab users, so stay tuned 👀

<tachi_scorehook>

This is a scorehook for kamaitachi, which will send your score to the configured tachi server after each song played.
Note: this won't apply to "aborted" songs (ie. quick retire or quick retry during song).

It supports multiple user profiles based on your Popn Friend ID, just like local favorites does.

config file format

Config file is a json file with two keys, "key" for your apikey and "base" with the base tachi server address.

The config file should be named _tachi.default.conf or _tachi.<friendid>.conf and placed directly into the contents folder.

There is also legacy compatibility with an "url" key containing the direct-manual import url so that you can keep using your old silent-config.json file data.
(ie. rename your old silent-config.json to _tachi.default.conf and it should work, or _tachi.678945671234.conf if you want it to apply only on your account with friend id 6789-4567-1234).

Note: _tachi.<friendid>.conf files take precedence over _tachi.default.conf, but the default conf will still apply to remaining accounts and to guest plays.

_tachi.default.conf example file

this is the basic structure for reference

{
	"key": "<your api key goes here>",
	"base": "https://kamai.tachi.ac"
}

Additional debug options

<tachi_scorehook_skip_omni>

When this setting is enabled, the scorehook won't send omni chart scores to the configured tachi server.

Note: This setting affects omnimix charts only (removals and CS/older hardware exclusives, ie. songids <= 3400).

Custom charts (songid > 3400) are never sent.

<tachi_rivals>

This allows you to see your rival scores ingame (e.g. see scores and ranking on song select and result screen...), as if they were all playing on the same server as you.
It uses the same config files as the score hook.

Note: While kamaitachi allows you to add up to 5 rivals, Pop'n only supports a maximum of 4, therefore your 5th rival cannot be displayed ingame.

v2.1 ~ Omnimix v3?! QoL pushed to the maxxx ~

27 Jun 07:50

Choose a tag to compare

Version 2.1 is there with a couple bugfixes and a HUGE QoL improvement regarding omnimix

Fixes

< pfree>, <quick_retry>

Fixed a crash that could happen sometimes when pressing numpad 8 or 9 on result screen.

<quick_retry>

Fixed quick retry "option select loop" with AC Tsumtsum Medley.
This song was a special track in usaneko (unlocked by scanning a Tsum mascot on the reader), with some unique quirks: there is no chara option, no ojama, and only the jacket displayed, so it doesn't go through the same option select screen loading code, where the patch was installed.

Note: holding 8 in order to skip option select screen works in a slightly different way for this song only, on kaimei/unilab the transition is not as smooth looking (short black screen showing), and the jacket is also misplaced (looks like the part of code allowing to hide the regular option screen and display only the centered jacket is gone), but it's working fine at least.

<local_favorites>

Fixed a softlock that could happen when pressing 9 on song select screen while playing as guest.

<skip_tutorials>

Fixed a crash that could happen on mode select screen with some versions of the game.

Enhancements

<patch_db>

!!! POPNHAX CAN NOW QUICKLY GENERATE THE PATCH FILE !!!

No more loading the dll with IDA and using a python script to generate the patch file when a new popn update drops, and no risk of loading the wrong one for your data :)

The code has been optimized so it only takes 2 to 3 seconds on the old SDcab bemanipc hardware (and is pretty much instant on modern hardware), so you don't even need to store the patches files anymore, it's no biggie to let popnhax regenerate them on launch! (off topic dev rant: tfw windows doesn't have fmemopen nor open_memstream :( )

Note: If you don't collect patch files anymore then you won't be able to let popnhax autodetect the datecode based on music limit value. So make sure to either rename your popn22.dll or edit your ea3-config file to reflect the correct datecode.

Additional debug options

<patch_xml_dump>

You can use this option to write the generated patches to a file (in case it doesn't work and requires modding).

Note: patch_db will always look for a matching patch file in data_mods folder. Patch generation is only done when no matching file is found.

This means that if you dump the file then mod it, the modded version will be loaded instead.

<force_patch_xml>

This is the new name for patch_xml_filename

Useful technical details

If you ever used ida_find_addrs.py with IDA you might have noticed it contains an offset blacklist. The current blacklist has been included in popnhax code, but you can create a text file named "patches_blacklist.dat" in data_mods folder to add new "known bad offsets" without having to recompile popnhax.
File format is plain text with just one offset per line, e.g.

0x100be154
0x100be346
0x100bed91

The engine (libdisasm) is a full x86 disassembler so it should always be possible to adapt patch generation so that it keeps working in the future, just like we had to adapt the python script when unilab debuted.

<local_favorites>

Additional debug options

<local_favorites_path>

You can now set a custom folder to store favorites rather than using data_mods. This is especially useful if you want to mount a network share to access your favorites from anywhere.

<config_diag>

Not an option in the xml, but popnhax will now display more specific errors when it fails to load your config file.

popnhax: config update: xml has changed. Regenerating opt file
popnhax: FATAL ERROR: failed to load popnhax.opt. Running advanced diagnostic...
            <score_challenge __type="bool">1</score_cgyjlenge>
ERROR: score_challenge: opening tag doesn't match closing tag (<score_challenge> vs </score_cgyjlenge>)
            <audio_source_fix __type="u8">0</audio_source_fix>
ERROR: audio_source_fix: unexpected type (expected bool, got u8)
            <audio_offset __type="s8">500</audio_offset>
ERROR: audio_offset: invalid value (should be an integer between -128 and 127, got 500)
ERROR: required option custom_categ not found
            <custom_exclude_from_version __type="bool">15</custom_exclude_from_version>
ERROR: custom_exclude_from_version: invalid bool value (should be 0 or 1, got 15)
            <custom_exclude_from_level __type="bool">0<custom_exclude_from_level>
ERROR: custom_exclude_from_level: malformed closing tag (should be </custom_exclude_from_level>)

Removals

<patch_xml_auto>, <patch_xml_filename>

patch_xml_filename has been renamed to force_patch_xml.

patch_xml_auto has been removed as it's just the default behavior when force_patch_xml is not set.

v2.0 ~ Pop'n in 120Hz ?! Recording mode ?! REAL ms-based timing ?! ~

09 Jun 08:14

Choose a tag to compare

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 _exclude inside the folder
  • You can rename a subcategory by either renaming the folder, or by placing a _name.txt file 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 k...

Read more

v1.11c ~ Custom categories?! Unlimited favorites?? ~

03 May 20:54

Choose a tag to compare

v1.11c bugfix: Some custom packs musicdb.xml caused a scrolling bug in subcategories. This has been fixed, sorry for inconvenience.


Still no 2.0, as it requires something I haven't even started working on yet x)
But since I still worked on some cool stuff, might as well make a new release

This is also the first release to feature custom assets, which have been made by LEEKS, thank you very much!

Fixes

<auto_hispeed>

1.10 release unfortunately broke compatibility of this patch with game versions before unilab... this is now fixed

New additions

<auto_diag>

Not an option in the xml per se, but extra sanity checks are performed on boot which should help with the most common user mistakes

It will detect if you're running the dll from modules subfolder, or if you're running the dll from contents while a newer version is present in modules

(so you can stop pretending popnhax doesn't work X_X lol)

<local_favorites>

As you might know, Pop'n allows you to "add/remove a song to favorites" on result screen by pressing numpad 7...
but you're limited to 30, after which new favorites overwrite the oldest ones :(

Well, not anymore! This patch will allow you to manage the favorite category through local files written/read in data_mods/<ver>.<friendid>.fav (eg. 27.213254658798.fav for unilab on an account with friendid 2132-5465-8798).

This way each account has its own favorites (and a separate file per game version so that I don't need to filter out songids that are not present ingame :p)

Press 7 as many times as you want on as many songs as you want, there seems to be no limit to the favorite number this way!

Note: This also allows you to use favorites even if your server doesn't support them, EVEN in full offline mode without login! In which case the file will be named <ver>.default.fav

Technical details

File format is just one songid per line, in decimal, DOS/UNIX line ending doesn't matter.

They can be edited with a text editor to add/remove songids (GUI tool or webpage soon? 👀), and they can easily be shared with your friends (send your favorite playlist to your crush 😳)

<custom_categ>

Last but not least, custom charts can be set to appear in their own category in the songlist.

Even better, they can appear in their own subcategory named just like the folder name used in data_mods.

This means you can rearrange data_mods as you wish by renaming folders and moving around musicdb.xml files (the other files don't need to move),

and your changes will be reflected directly ingame.

Community member LEEKS even drew special "Customs" icons for use with this patch fitting all styles from usaneko to unilab!! HUGE thanks!

popnhax will use them if the assets are present, and in case they are not found, popn "Customize" folder icon will be used instead (the folder that is used on real eamuse for comparing your scores against a rival or setting a difficulty level range).

Note: LEEKS' custom icon is a nod to Feeling Pomu/Colorful Channel, an old Pop'n Music simulator which included.... custom charts :)

Once again, thank you very much for these assets 🙏

<custom_exclude_from_version>

Since custom charts appear in their own category, there's no real need to keep them in arbitrary version folders anymore, right?

<custom_exclude_from_level>

Now this is more open to debate as I personally mainly browse by level, but I know some users would rather not have customs ruin the 100% folder completion mark.

Good news, customs can also be excluded from level folders if you wish!

Note: I did not look into other exclusions as I think browsing by name or artist is best with the full list at your disposal...

Additional debug options

<custom_categ_min_songid> and <custom_categ_max_songid>

By default any song with songid 4000 up to 65400 is considered a custom chart for <custom_categ> patch. If you wish to set a different range, you can adjust these options.

For example omnimix has all CS and older hardware exclusives starting from songid 3000.

Note: The reason for the 65400 upper limit is because "random" category uses fake song ids starting from 65535 and counting down, therefore that could interfere with the custom_track_title_format option

<custom_category_title> and <custom_category_format>

By default the custom category name is "Customs", if you wish you can change its name (for example a translation maybe?)

Format can also be adjusted if you don't like the colors or the outline

<custom_track_title_format> and <custom_track_title_format2>

If rather than excluding the customs from other folders you wish to keep them but mark them as custom, you can set a different format for them.

Unfortunately the way the songlist is drawn on screen differs between usaneko/peace, and kaimei/unilab.

  • In the older games, everything is good, you can set the format as you want it to be, red text, white text with red outline, etc...

  • In the latter, all colors are set to black in post processing (I think it's set somewhere in the afp files rather than the game code, but I haven't looked more into that)

You can still use rotation commands and extra characters to indicate customs in these versions. I include a basic example in the xml comments: * [rz:3]%s[/rz]

This will slant the text slightly (like italic) and add a * in front of the title.

More details about format

Please refer to popnhax_tools repo BM2DXFontScript.md

Enhancements

<patch_db>

The game assumes any song must have a "Normal" difficulty chart.

This caused a display bug where a custom without a normal difficulty chart would show "N 0" in the songlist as if the normal chart had difficulty 0 (unlike other difficulties, where it shows "H -" for example)

This is now fixed and "N -" is displayed properly.

<patch_xml_auto>

I'm now using the game music limit (song count) to detect the patch file to use rather than the datecode, and will display a warning if the datecode doesn't match the expected value.

This new behavior can be disabled with the <ignore_music_limit> debug option in case it breaks in the future.

<force_datecode>

This option can now take the value auto (which is also the default value).

auto behaves this way:

  • When patch_db is active, the patch folder is scanned for a matching music limit patch, and this patch target datecode is used as the force_datecode.
  • When patch_db is inactive, it behaves the same as an empty string (the previous default value)

This means if you use omnimix/customs you don't have to worry about changing the datecode anywhere anymore when updating :)

v1.10 ~ 2024 compatibility edition ~

05 Jan 22:50

Choose a tag to compare

Happy new year!

No 2.0 yet, decided to work on better compatibility first...

quick retire, auto hispeed, back to song select, enhanced polling stats and practice mode patches have been rewritten to this effect. They should work at least as well as they used to :)

New additions

<base_offset>

Visual offset can now be set as a global setting for the game, if you'd like to one proper latency setup for multiple user accounts, or if you need to keep hidden+ as an option. Beware that using extreme values will cause very weird behavior ingame.

Note: Remember that I inverted the adjust value for hidden_is_offset in order to get a better available range ( -70;+220 ), so if you want to change your "+10 hidden offset" into a global setting, you'll have to put "-10" as base_offset.

Enhancements

logging

Current popnhax version will now display at the beginning of popnhax.log

<patch_db> (omnimix / customs)

Under certain circumstances, custom tracks (song id >= 3000) would actually still count towards your pop'n class, and the game could even crash sometimes (e.g. new profile playing only customs in a credit).

This is now fixed.

<quick_retry> <hispeed_auto>

Manually changing your hispeed before a song would cause the newly computed BPM to be the target value for the next songs of your credit, except when changing hispeed on soflan/mystery bpm.

This was slightly annoying when using quick retry on such song, as one would have to keep manually setting the hispeed for each new attempt.

Quick retry will now preserve the manually set hi-speed value for these songs (of course without it being kept for the next song you play).

v1.9b ~ auto hispeed?! IIDX HARD gauge?! class points?? ~

07 Oct 13:58

Choose a tag to compare

(this is a bugfix release to address 2 unfortunate bugs that remained in v1.9, special thanks to Knurek for noticing and notifying me)


Wow it's been 2 months already... I've been hard at work all this time for MAJOR QoL changes and a new game mode :)

See you next time for v2.0! I have a BIG feature planned for it, I hope I can find a way to do it... but first I need to take some rest and actually play this game a bit more :))

New additions

<hispeed_auto> and <hispeed_default_bpm>

You can now have the game select the best fitting hi-speed multiplier for you.
No need to fiddle with the multiplier between each song.

It has an auto readjust feature: when you manually change hi-speed, the resulting BPM automatically becomes your new target value

Because the value cannot be kept between sessions, you'll still have to set your speed for the first song of the credit...
... or you can use <hispeed_default_bpm> so that there is a starting value of your choice :D

Note: This just selects an existing hispeed multiplier for your convenience, this won't let you access new BPM values for songs.

(Thanks to Deny for patch suggestion)

How about mystery BPM??

Some songs have a question mark after their BPM value. This usually indicates high BPM changes in the chart.

Auto hi-speed for mystery BPM work like regular songs (if target is 700, it will be set to "702?" for example).
However, changing hi-speed multiplier won't update the target value (it will remain 700 for your next song).

How about soflan??

Soflan are songs with BPM changes. Lower and higher BPM values are displayed on the option screen (e.g. 600~880).
As with mystery BPM, manually changing hi-speed multiplier won't update the target value.

To handle them, there are 3 behaviors you can choose from:

higher bpm

Hi-speed will be set so that the HIGHER value matches the target as closely as possible.

For example, with target 700 you might get values like 350~700, 400~704 or 500~696.

lower bpm

Hi-speed will be set so that the LOWER value matches the target as closely as possible.

For example, with target 700 you might get values like 700~880, 704~900 or 696~800.

longest bpm

The chart is analyzed and the hi-speed will be set so that the BPM appearing for the LONGEST amount of time matches the target as closely as possible.

For example, with target 700 you might get values like 500~704 or 620~810.

<iidx_hard_gauge>

This patch makes HARD gauge behave like IIDX Hard gauge:

  • you start the song with a full gauge
  • you lose 9% of a full gauge for each bad, or 4.5% if the gauge has dropped to 30% or less.
  • you gain +0.1% of a full gauge for each cool/great/good (just like spicy gauge)
  • if gauge drops to 0 at any point, the song ends immediately

The gauge in this mode will always stay red with big bars (no blue zone).

If you reach the end of the song with gauge left, it will be mapped back to the clear zone on result screen, to avoid seeing weirdness (thanks to Milo for the suggestion).

I learned during development that r2nk226 was working on the draft of a similar patch, so we discussed the rest of the patch together from that point.
I'm glad that we had similar ideas, and that we both came to the conclusion that copying IIDX rates was the most pleasant experience :D

<show_details>

Show details by default on result screen (no need to press yellow button for it)

(Thanks to Deny for patch suggestion)

<netvs_off>

Sets all net ojamas to OFF by default rather than "omakase", which is especially useful if you use Local mode without ojamas

(Thanks to VinculumStellarum for patch suggestion)

<guidese_off>

Sets "Guide SE" to OFF by default, which is especially useful if you use Battle mode since P2 default value won't be stored in your user profile.

(Thanks to Milo for patch suggestion)

enhancements

Here are the notable enhancements.

pfree

  • pfree is now only active in normal mode, so that you can keep playing battle or local mode without having to change your settings.

  • no more endless stream of +0.01 pop'n class at the end of your sessions! :D

This is by far what required the most work for this version, as I had to entirely reverse the pop'n class points handling X_X

This was such a sneaky bug that would slowly invade your profile over the course of a couple dozen sessions... then you'd get nothing but +0.01 or +0.00 increments.

You can now play as many songs as you like without fear, everything will behave normally :)

As an added bonus, I made it so that any song with id >= 3000 (which covers CS exclusive and custom tracks) won't count towards your pop'n class.
This means there's no need to reduce the difficulty level of your custom tracks if you don't want them to interfere.

patch_db (omnimix / customs)

As explained before, CS omni and custom tracks won't count towards your pop'n class.

And most importantly, the cursor issue is FIXED! :D

After ending a credit on an omni or custom track, you'll now find yourself staring at the same song on your next credit.
(there used to be a long standing bug where the cursor would be back on the default recommended song, as if no credit were played prior)

Note: If you remove said custom track or disable omni in between credits, don't worry, the cursor will just be on another random song, that won't break anything.

quick retire / quick retry / back to song select

You don't need to press red button after numpad 8 or numpad 9 in result or option select screen.

force full options

Patch has been rewritten and won't cause weird behavior if you actually press numpad 0.

practice mode

Speed change for practice mode is now mapped to numpad 5 to avoid collision with quick retry (thanks to TPG for notifying me).

v1.9 ~ auto hispeed?! IIDX HARD gauge?! class points?? ~

29 Sep 20:46

Choose a tag to compare

Wow it's been 2 months already... I've been hard at work all this time for MAJOR QoL changes and a new game mode :)

See you next time for v2.0! I have a BIG feature planned for it, I hope I can find a way to do it... but first I need to take some rest and actually play this game a bit more :))

New additions

<hispeed_auto> and <hispeed_default_bpm>

You can now have the game select the best fitting hi-speed multiplier for you.
No need to fiddle with the multiplier between each song.

It has an auto readjust feature: when you manually change hi-speed, the resulting BPM automatically becomes your new target value

Because the value cannot be kept between sessions, you'll still have to set your speed for the first song of the credit...
... or you can use <hispeed_default_bpm> so that there is a starting value of your choice :D

Note: This just selects an existing hispeed multiplier for your convenience, this won't let you access new BPM values for songs.

(Thanks to Deny for patch suggestion)

How about mystery BPM??

Some songs have a question mark after their BPM value. This usually indicates high BPM changes in the chart.

Auto hi-speed for mystery BPM work like regular songs (if target is 700, it will be set to "702?" for example).
However, changing hi-speed multiplier won't update the target value (it will remain 700 for your next song).

How about soflan??

Soflan are songs with BPM changes. Lower and higher BPM values are displayed on the option screen (e.g. 600~880).
As with mystery BPM, manually changing hi-speed multiplier won't update the target value.

To handle them, there are 3 behaviors you can choose from:

higher bpm

Hi-speed will be set so that the HIGHER value matches the target as closely as possible.

For example, with target 700 you might get values like 350~700, 400~704 or 500~696.

lower bpm

Hi-speed will be set so that the LOWER value matches the target as closely as possible.

For example, with target 700 you might get values like 700~880, 704~900 or 696~800.

longest bpm

The chart is analyzed and the hi-speed will be set so that the BPM appearing for the LONGEST amount of time matches the target as closely as possible.

For example, with target 700 you might get values like 500~704 or 620~810.

<iidx_hard_gauge>

This patch makes HARD gauge behave like IIDX Hard gauge:

  • you start the song with a full gauge
  • you lose 9% of a full gauge for each bad, or 4.5% if the gauge has dropped to 30% or less.
  • you gain +0.1% of a full gauge for each cool/great/good (just like spicy gauge)
  • if gauge drops to 0 at any point, the song ends immediately

The gauge in this mode will always stay red with big bars (no blue zone).

If you reach the end of the song with gauge left, it will be mapped back to the clear zone on result screen, to avoid seeing weirdness (thanks to Milo for the suggestion).

I learned during development that r2nk226 was working on the draft of a similar patch, so we discussed the rest of the patch together from that point.
I'm glad that we had similar ideas, and that we both came to the conclusion that copying IIDX rates was the most pleasant experience :D

<show_details>

Show details by default on result screen (no need to press yellow button for it)

(Thanks to Deny for patch suggestion)

<netvs_off>

Sets all net ojamas to OFF by default rather than "omakase", which is especially useful if you use Local mode without ojamas

(Thanks to VinculumStellarum for patch suggestion)

<guidese_off>

Sets "Guide SE" to OFF by default, which is especially useful if you use Battle mode since P2 default value won't be stored in your user profile.

(Thanks to Milo for patch suggestion)

enhancements

Here are the notable enhancements.

pfree

  • pfree is now only active in normal mode, so that you can keep playing battle or local mode without having to change your settings.

  • no more endless stream of +0.01 pop'n class at the end of your sessions! :D

This is by far what required the most work for this version, as I had to entirely reverse the pop'n class points handling X_X

This was such a sneaky bug that would slowly invade your profile over the course of a couple dozen sessions... then you'd get nothing but +0.01 or +0.00 increments.

You can now play as many songs as you like without fear, everything will behave normally :)

As an added bonus, I made it so that any song with id >= 3000 (which covers CS exclusive and custom tracks) won't count towards your pop'n class.
This means there's no need to reduce the difficulty level of your custom tracks if you don't want them to interfere.

patch_db (omnimix / customs)

As explained before, CS omni and custom tracks won't count towards your pop'n class.

And most importantly, the cursor issue is FIXED! :D

After ending a credit on an omni or custom track, you'll now find yourself staring at the same song on your next credit.
(there used to be a long standing bug where the cursor would be back on the default recommended song, as if no credit were played prior)

Note: If you remove said custom track or disable omni in between credits, don't worry, the cursor will just be on another random song, that won't break anything.

quick retire / quick retry / back to song select

You don't need to press red button after numpad 8 or numpad 9 in result or option select screen.

force full options

Patch has been rewritten and won't cause weird behavior if you actually press numpad 0.

practice mode

Speed change for practice mode is now mapped to numpad 5 to avoid collision with quick retry (thanks to TPG for notifying me).