12/16/2025 - PyNori v2.3.0


Hey all, Shirley here! In the last post, I promised that the next one would be about the v2.3.0 update... and here we are! IT'S TIME!

This is another pretty big update. Maybe not in the context of new content, but the new features ARE pretty cool. Let's get into the new stuff, FINALLY!

1: If the game detects that you have PyPause v1.0.0 installed, it will prompt you to update to v1.0.1 and close the game. This is because I recently updated the module to patch out a flaw I found on MacOS (I'm not sure if the issue carries over to Linux, but it probably does). The Windows code is unchanged, but I still require everyone to update because... well... updates are important. To those of you installing PyPause after December 3, 2025, you should already be on v1.0.1.

2: This is sort-of an extension of #1, but I've added a function to the game that restores the Terminal's default settings in case they're not reset properly when unpausing the script. This is currently only used when transitioning from the startup sequence to the title screen, because the only hang that occurred was around that point. (The title screen hang was why I had to update PyPause. Again, this was never an issue on Windows, because the pause code is different.)

3 (the main focus of this update): You can now give certain characters things to do! What do I mean by that? When you're playing as Pinori, you can go into the newly added Party Menu, type the name of a character (but not Millie), select the "Task" option, and make them do things like kill/spare an enemy, buy an item, grab a Tone for you, things like that! But be careful; tasks cannot be cancelled, so you must wait for it to complete before giving them something else to do. With that said, try your absolute hardest not to send a misinput on the Task Menu. Lastly, when a character is doing a task, they'll be marked as "away", which prevents the player from switching to them. When a character is away, they're also not accounted for when checking if other characters (that can be switched to) are alive, so even if a party member is alive, you'll still get a Game Over if they're away and you can't switch to anyone else. Isn't it nice when the game logic makes sense?

4: Like I said, the Party option on the overworld has been completely redone. Instead of simply listing your Party, balance, and EXP Share percentage (if you're using the EXP Kill System), it... still does that, but you can now type a character's name to view their stats! Of course, you can also assign tasks to them if you're playing as Pinori (and the selected member isn't Millie), but I already went over that.

5: I've finally added health bars to the game! I don't think I need to explain what a health bar is or how it works, but I will note that I accounted for over-healing (where the HP is greater than the Max HP). Depending on how much a character over-heals, the health bar will be filled with different colours:

5.1: If the character has only slightly over-healed (say 11/10 HP), the health bar will start filling with green, the remainder being white.
5.2: If the character's HP reaches more than double their Max HP (say 21/10), the health bar will start filling with cyan, the remainder being green.
5.3: If the character's HP reaches more than triple their Max HP (say 31/10), the health bar will start filling with blue, the remainder being cyan.
5.4: If the character's HP reaches more than quadruple their Max HP (say 41/10), the health bar will start filling with magenta, the remainder being blue.
5.5: If the character's HP reaches more than QUINTUPLE their Max HP (say 51/10), the colours will cycle back to green. The health bar will start filling with green, the remainder being magenta. A plus will also be added to the end of the health bar to indicate that the colours have cycled. It's unlikely that a character's HP will ever go above triple their Max HP, but I like to plan ahead.

(Before we move on to #6, a quick side-note: the HP will now turn yellow if it's below half the Max HP.)

6: When generating SavePaths.ini, the game will now only provide an example path for the operating system you're using, as... this may shock you, but you don't need path examples for operating systems you don't use!

7: If you disable Weather Events and try to view the weather, the game will now ask you before printing the weather in your area.

8: For the first time, a new Daily Challenge Type is being introduced: the "Lair" type! Now, I'm going to assume you've heard about this area already, so if you haven't, you should probably stop reading, because this is technically spoilers. The "Lair" Daily Challenge type generates a randomised version of Shadorako's Lair, with a random amount of floors and rooms per floor. Unlike the real lair, the fake one can be either shorter or longer than the original (though, for your sake and mine, the maximum amount of floors is 10, and the maximum amount of rooms per floor is 5, the minimum being 2). It may seem weird that I'm disappointed to be saying this, but there are no additional room types for Lair Daily Challenges. The possibilities are exactly the same as in the regular lair, but with ONE (somewhat) noticeable difference. The "guards" room was nerfed to 5 steps (instead of the normal 12 and 15 in the regular lair) because you can't just save mid-challenge and come back later. You have to beat the WHOLE challenge in one sitting. The odds of getting caught by a guard in the "guards" room are 1 in 5, so 20%. That's pretty high, even for 5 steps, so imagine having to take 12 (let alone 15) in a row WITHOUT getting caught. Yeah, the challenge would be impossible if I didn't nerf that room type. Lastly, I've definitely implied this by now, but the steps per room are in fact hardcoded. I was thinking of letting the steps be random, but I ultimately never implemented that, and for the aforementioned reason, I'm glad.

9: Implemented a more effective lockout method if the player is caught cheating on MacOS.

10: The recursion limit has been raised to 10K because, contrary to my belief, it IS actually possible to reach a depth of 5K. I did so COMPLETELY on accident while trying to take 1000 steps in an area. Don't ask why I was doing that.

11: I'm REALLY proud of implementing this one. Introducing... the Patch System! Oh yeah, I saved the best for last. The Patch System, as the name probably implies, allows players to patch their game (if necessary) without updating it! That's right, no more flooding the itch.io page with tons of bugfixes day after day! PyNori updates, from here on out, will remain on x.x.0, and bugfixes will be issued IN-GAME instead of here! Now you don't have to redownload a huge ZIP file every day, and I can fix the game more easily! It's a win-win for both of us. Additionally, it allows me to work on the next update more quickly without spending weeks being paranoid about how many bugs a function contains. Lastly, this system will allow me to bugfix for multiple versions at once, rather than dropping a previous version once I start implementing more features/content. I can't bugfix for EVERY version forever though, so if things start getting hard to manage, I'll announce "End of Support" dates for older versions. I hope things don't get to that point, but there's always the off-chance that they do.

And now, for the bugfixes! These are always fun.

1: This is only technically a "bug" fix, but if the game crashes and it doesn't have permission to generate a crash log, it will instruct you to copy the output from the crash handler directly instead of from the crash log it would've generated.

2: If Step Mode is active and Discord is not running, you'll no longer get flooded with messages along the lines of "you need to connect your client before sending requests!". This is definitely not verbatim, but whatever.

3: Added missing title/description pairs for Discord Rich Presence.

4: Fixed some grammatical errors in both Krystal O'Shin and Galaxette's dialogues, as well as ONE tiny detail in one of Shadorako's monologues.

5: This is a VERY specific bug that's only present when playing with the God Mode quirk, but the cutscene that plays after clearing Dyarix will no longer crash if the Focused Character's HP is greater than 4950687389787956879042. (Don't ask, lol.)

6: The Lucky Charm item will no longer disappear when it's not supposed to! The fix was unfortunately way easier than I thought it was, so I could've patched this out ages ago. Sigh.

7: Speaking of the Lucky Charm, when checking whether you're in battle or not, it now takes Krystal into account. If the game threw a false negative before, it should no longer do that.

8: Speaking of Krystal, the game will no longer crash due to an unbound variable relating to an Akuron-exclusive mechanic. (The variable isn't always unbound, but it can be in certain situations. This is no longer the case.)

9: Fixed a bad reference to EnemyPopulation.ini which would always point to the one in the game's root directory regardless of which Save File the player was using. This doesn't royally mess up gameplay, but if you happened to make an enemy go extinct, save and quit, then come back to the game later and encounter that same enemy, now you know why that happened. (Also, it wasn't a "bad" reference per se, I just forgot to update that reference when rewriting the code that loads the files.)

10: Fixed Battle Actions 1 and 2 being incorrectly printed in red during the Shadorako (Archlekia) battle.

11: The Shadorako (Archlekia) attack logic now works when skipping your turn during that battle. I forgot to put it there in 1.9.0.

12: What a surprise, another Shadorako (Archlekia) battle fix: When Shadorako uses the Grip of Grief attack and the Focused Character's defense is already 0, the character's defense will remain at 0 and the game will say "[character] is vulnerable!". (The defense floor previously didn't exist, so Shadorako could push a character's defense into the negatives until her attacks straight up stopped working.)

13: Debug Mode checks now check args.debug instead of just "debug" because the latter method stopped working for no reason. Thanks, Python!

14: The Galaxette Health state issue should no longer be present.

15: If the player has Weather Events disabled, the game will no longer build the weather on startup despite the player's wishes. This actually reduces startup time a little bit!

And that's about it! There is ONE more thing, but it's not that interesting:

BONUS: There's now an extra folder in "sfx" called "canon pronunciations" containing files named after characters, areas, etc. When you open one of those files, you'll hear my pronunciation of the character it's named after! Thankfully it doesn't take up much space (it used to, but as I'm typing this out, I figured out a way to compress all the files, so the pronunciation folder went from a whopping 13 MB down to just 1.81 MB). As for why I added this, it's to clear up any confusion regarding pronouncing certain things like "Dyarix". So, accents aside, if you're not pronouncing it like me, you're pronouncing it wrong! It's Dee-are-icks, not Die-air-icks or any variations or combos of the two. You're welcome!

FINALLY, that's the end for this devlog. It's not as big as v2.0.0's (or v2.2.0's), but it sure felt like it when I was typing all this out. Odds are I will definitely have an opportunity to put the Patch System to use, but that's okay, because bugfixes are now more convenient for you AND me, like I said! And the best part is, unless there's something SERIOUSLY wrong with the patcher, I can just patch the patcher if something's not working as intended! (Worst case scenario, I'll have to issue a fix the old fashioned way.)

Anyway, see you next time for either another announcement or for v2.4.0! PyNoriSUU v1.1 will be out shortly (I have to update the Save Update Utility every time I release an update, because how else would you be able to migrate an old Save File to a newer version?).

Files

PyNori v2.3.0.zip 51 MB
19 hours ago

Get PyNori

Download NowName your own price