Create Your FriskThese programs were created as engines to make Undertale fan games in, mainly battles.
Unitale was being developed by its author, lvk, while he was in college and working a job, so the project stalled development.
Create Your Frisk is a fork of Unitale that continued development under RhenaudTheLukark (or Rhen for short) for many years.
And I worked on it. I was a developer of Create Your Frisk, just as much as Rhen.
I'm writing this page to document all my contributions to CYF and its community.
I started my work on Create Your Frisk in late 2017. Technically, this is not long after our personality split, so I, Eir, was the one involved.
My work went on from October of 2017 to July of 2020, during which time I helped release 6 versions of CYF.
My involvement with the engine started as a moderate interest, after seeing what Rhen had done to improve things, and wanting to help my friend. But over time, I became dedicated to developing CYF, obligated even.
I also have an older webpage with downloadable content I made for CYF. Mostly usable libraries, but also Just a Regular Poseur Encounter, the battle I made for a contest between me and some friends in the CYF circle.
Working on CYF wasn't just about the code. It also involved managing the community, something I did just as meticulously.
Throughout my time in Unitale/CYF, I answered every single question on the subreddit and the discord server.
I made absolutely sure to be the first to answer to prevent misinformation from others trying to help.
It was an obsession that absolutely exhausted me, but I did it at the same time as developing CYF, which was already a big undertaking.
At one point, I was made a moderator of the Unitale/CYF subreddit. I used my time to create many posts, resources, and wiki pages to guide new users. I also made the new look when reddit rolled out "new reddit".
Here is a stickied post I made as a kind of "landing page" for the subreddit, with quick links to helpful information and popular mods.
I wrote some extensive subreddit wiki pages, very detailed, but despite my efforts,
people kept finding the outdated default wiki page instead.
One of the biggest obstacles was improving the onboarding process for new users. What I just shared above was really meant to help, but still, people came to the discord or subreddit with
outdated versions they got from google, or asking where to download.
I also worked with others to make a new posting rule system for the subreddit, meant to clean up the clutter from 95% of posts being
"how do I do x?". Whether it worked, and whether people found it fair, is subjective.
Toward the end of my time on CYF, the
Discord server underwent some big changes. I and a few friends became moderators.
It goes without saying that moderating a discord server is an undertaking. You have to be able to handle a lot of people, and both enforce rules and be compassionate.
It was a lot to deal with on top of working on CYF, helping all users I could, and other things in my life.
At least this wasn't too bad, as most of the moderation was people posting in the wrong channel by mistake. There were a few bad actors, but they were rare.
Usually, Rhen would be the decision-maker on approving changes and deciding what needs fixing most. We both did a lot of in-depth programming work, though with
all the extra free time I had compared to him, I poured hundreds of hours into playtesting before publishing a commit or release, and did many less-obvious changes
and fixes, the biggest of which is upkeeping the documentation. I also added several big-name features, like the new mod selection UI, sprite masking, and shaders.
Rhen always preferred changes be put on the "feature" branch on
GitHub. He would only make commits to "master" when they were for a full release of CYF.
I had my own fork of CYF, where I initially made my changes to be merged through pull requests.
But later on, I was given write permission to the main CYF repo, and did my work there.
I would maintain a TODO file and a changelog text file, for each version. Sometimes it'd be on discord instead of a file. Rhen and I would sometimes swap the file back and forth, but I was the one to keep track of all the changes. In time, I became the one writing the changelogs - except the flavor text at the top, which is Rhen. We used to do voice calls and screen-sharing to work on CYF.
Also, the documentation really sucked. It worked well enough in Unitale when the project was still fairly small, but CYF ballooned to easily 3x as big as Unitale.
The documentation has always been raw HTML and CSS, written by hand, without the ability to reuse any content. Rhen understandably avoided the documentation, but it's extremely important it gets maintained.
So I maintained the documentation by hand the entire time, adding every new feature, documenting each change, and further improving the docs with type annotations,
code examples and new feature indicators (which heavily relied on keeping track of the changes).
Hell, I even wrote entirely new pages for some features, like an entire guide for shaders!
2017 is when I started work on CYF. I'd never used Unity, Git, or
C# before, so I learned as I went.
My first pull request fixed a few camera-related bugs I noticed. I submitted a
few more fullscreen-related pull requests.
But behind the scenes, I was working hard on my own fork. These changes I made would later be included in version 0.6.2.
0.6.2 (2018)
Version 0.6.2 is the first version I worked on. It started my trend of
adding a lot of features meant to make creating mods with CYF easier.
The biggest change I added to this version is the mod menu. I replaced the old scrollable list of text buttons, with a friendlier screen.
Each mod has a title text and subtitle, Undertale font included, and each mod can provide a preview image, giving users some flair to use to decorate their creations.
I also put in some heavy work on the documentation. The documentation was built by hand, rather than generated, which caused huge issues. It meant someone had to upkeep the documentation manually. That someone was me. Every single variable and function in the documentation has a description, and now, they have color-coded type annotations. There aren't features like hyperlinking to different parts of the docs, but this was still a lot. Keep in mind that the docs have to be manually updated from now on, including all of my future versions.
All of the changes I made for CYF 0.6.2 were initially done on my own fork, and submitted with this pull request.
Who're you gonna QoL? CYF!
That's right, thanks to@WD200019and only a tiny bit to me, CYF is now cleaner than ever, with a brand new mod selection UI, and a TON of Quality of Life changes!Because WD actually cares about making things easier while I don't! :D
| Category | Patch note | Actual author | Notes |
|---|---|---|---|
| Main changes and features | |||
| Important changes | EXTREME performance increase!! CYF will no longer eat up all your memory when you play mods, and can run as smoothly as Unitale 0.2.1a!!! No more restarting CYF when it lags too much! | Me | |
| We've upgraded to Unity 2018.2.13f1, and with it comes better support for Mac and Linux!! | Rhen | ||
| We have re-worked the main menu screens! The Mod Select screen now looks a lot nicer, it shows customizeable preview images of mods, it supports browsing with the keyboard, you can't accidentally wipe Real or AlMighty globals anymore, it remembers your most recently picked Mods and encounters...it's just so much nicer to work with! | Me | This was one of my first real "big" changes to CYF. I remember being excited when Rhen told me he wanted my better mod menu in the project |
|
| Full-screen now works perfectly - it doesn't kick you out randomly anymore, F4 works for entering and exiting it, and on Windows, the game window no longer jumps around when you exit fullscreen! | Me | ||
| Cleaned up the encounters included with the engine. Please copy the new Mods folder over your own if you're transferring mods from an older version, to replace the old engine-included mods. Then, you can proceed to delete the "Title" and "OverWorld Test" (not "@overworld Test") mods! | Rhen | ||
| The documentation should now no longer have missing information or weird wording, and it now lists the Lua types for every variable and function! | Me | Also, I made a font change button, but for some reason he's the one who committed it |
|
| New features | Animated sprites now support skipping forward or backward, speeding up or down, and pausing and resuming with |
Me | |
New text command |
Me | ||
The Inventory object now supports |
Me |
|
|
The Misc object now supports |
Me | ||
| Major fixes and improvements | |||
| Engine | Fixed enormous lag caused by old Mod scripts never being unloaded. | Me | Same as the patch note in "Main changes and features" |
| Better support for Mac and Linux, including importing the Arial font, and upgrading to a better version of Unity. | Both of us |
|
|
| Fixed F4 not exiting fullscreen mode, and fixed fullscreen mode exiting upon changing scenes. | Me | Same as the patch note in "Main changes and features" |
|
| Fixed game window jumping to the top-left corner of the monitor when exiting fullscreen. (Unfortunately, this fix is Windows-only, as this is a workaround for a Unity bug) | Me | ||
| Overworld | Added support for slower framerates in the overworld. You should now move at the same speed no matter what! Also, the Player's walk animation and speed are now closer to Undertale's, so it won't feel really slow anymore. | Me |
The framerate independent changes to the Overworld would later be reverted in CYF 0.6.4 |
| Fixed a bug where dying in an encounter entered from the Overworld would crash your game with an error. | Me | ||
| Bullets | The pixel-perfect collision system has been MAJORLY optimized. It should now cause much less slowdown than it ever has before! | Rhen | |
| Minor fixes and improvements | |||
| Sprites | Fixed a bug where using the ONESHOTEMPTY sprite animation mode created a 1x1 white pixel instead of an empty sprite, when an animation was done. | Me | |
| Text and Text Objects | Fixed a bug where the second line of text and beyond would sometimes be positioned strangely. Text positioning is now 100% consistent! | Me | |
| Text objects should now properly allow using SetFont, color/color32, alpha/alpha32, SetEffect and SetVoice on the same frame the object is created. | Me | ||
| Fixed a bug where [noskip] would not count on the very first frame a line of text was loaded, meaning that button mashing could skip text and potentially skip important text commands. | Me | In fact, it was one of my first issues |
|
| Fixed [next] and [finished] not working in text objects. | Rhen | ||
| Fixed Text.DestroyText not actually destroying text objects, instead leaving them lingering around infinitely. | Me | ||
| The Misc Object | Fixed the engine choosing the wrong window to act as the game window. You no longer have to restart your computer to fix this, only CYF!! | Me | |
| Misc.FullScreen is no longer read-only! | Rhen | ||
| Lua Encounters | Using State("NONE") now fully pauses the engine. Useful if you want to add a pause button, or just totally disable certain parts of the engine! It even works during waves! | Me | This turned out to be a bad idea |
| For those who like to toy with the engine: encountertext can now be set without going through DEFENDING! Just use State("ACTIONSELECT"). | Me | ||
| Replaced State's often-incorrect "The state X isn't a valid state" error message with a better, more descriptive one. | Me | ||
| Fixed and cleaned the default encounters included with the engine, for good! | Rhen | Same as the patch note in "Main changes and features" |
|
0.6.2.1 (2018)
A week later, we put out version 0.6.2.1. It fixed a few bugs we accidentally introduced in 0.6.2, reverted a misguided change I'd made, and added a few new quality-of-life features.
Rhen and I worked together with Windblade-GR01, aka Gacel, through the CYF
Discord
server, to make the big feature of this version: "Blurless fullscreen". Some options and math were changed throughout CYF to
improve the way the game looks on various monitor sizes and aspect ratios.
And another one! CYF is on fire recently with a lot of new versions!
Thanks to @WD200019 and @Windblade-GR01, we were able to stop CYF's bluriness when it's used on fullscreen! We continued adding more content to CYF to make it even easier to use for modders and players following the "Quality of Life" vibe of the last version, alongside some notable fixes.
But for now, drumroll, here's the new stuff:
| Category | Patch note | Actual author | Notes |
|---|---|---|---|
| Changes | |||
| Engine | Added an option named "Blurless fullscreen"! It prevents CYF from displaying blurred sprites in fullscreen! (Done by @Windblade-GR01) |
Windblade-GR01 on
GitHub (10 commits + 2 merge commits)
Their own fork is now deleted.
|
|
| You can now use both Alt+Enter and F4 for fullscreen! | Me | ||
| Engine | Added an Options sub-menu to replace the 4 buttons on the bottom of the mod select screen | Me | |
| All option preferences are now AlMighty Globals! | Me | ||
| Player | Player.Hurt(0, 0) can now stop the player's invincibility frames! | Me | |
| Sprite Objects |
|
Me | |
|
Me | ||
| Mods | arenasize can now be used to set the size of the arena during ENEMYDIALOGUE | Me | |
NONE has become a state again. Now, to pause the engine, it's |
Me | Correcting my mistake from before |
|
| Fixes | |||
| Engine | Fixed "Mods folder not found" for Mac! | Me | |
| Text Objects | Fixed text object positions for good! No whammies this time! | Me | |
| Sprite Objects | Fixed |
Me | |
Fixed using |
Me | ||
| Waves | Fixed not being able to move the Player on the first frame of a wave | Me | |
| Overworld | Fixed a major bug related to maps not being loaded properly | Me | |
Toby Fox's other game Deltarune just released a chapter 1 demo in October of 2018. Rhen took the chance to recreate it in CYF, as a playable mod, called Create Your Kris, or CYK for short. (Get it?)
The idea is pretty simple. It's meant to be an editable engine "base", like Create Your Frisk is to Undertale, except with Deltarune. The fact it was made inside of CYF is pretty significant, as, although limitations breed creativity, it also led to a lot of hacks, workarounds, jank, and issues.
On top of handling CYF v0.6.2 and 0.6.2.1's releases and preparing for 0.6.2.2, I was helping Rhen create CYK. A large body of my work with CYK is the documentation, which is an edit of CYF's, and as I'd already been doing lots of heavy lifting on the docs, I had the right mindset and skills to do the same for CYK. Other than that, Rhen came to me a few times for code help, and used a few libraries I made. I'd contribute six pull requests to CYK (one, two, three, four, five, six), with the sixth one being this year.
Finally, there's a secret in CYK that replaces the characters, music and graphics with "shittier" versions as a joke. I had the idea that Kris's spare animation, where they point and hearts come out, should have them dress as Michael Jackson and play his "hoo!" sound effect. I made the sprite art for this animation, and it was included.
I didn't manage CYK like I did for CYF and its community, however. It had a unique position in the CYF circle, as something of a subcommunity. Not many used it, and Rhen rarely updated it, leaving it on its last version in a state with multiple bugs still open.
You might notice that on Create Your Kris's GitHub Page, there are credits, unlike CYF. When it first released, CYK's credits looked like this:
Create Your Kris would have never existed without the help of:
- /u/DimitriB1 | DimitriB1#7677 for giving me some help with Kris' sprites and for giving me an arena library I was able to adapt to CYK!
- /u/heartlessmushroom | heartlessmushroom#0194 for the Player name font, the magnificent Poseur animation and for the hours spent testing the engine!
- /u/WD200019 | WD200019#8327 who helped me with the code when I needed help the most, for some scripts he gave me and Lua hacks we found together, and for the hours spent testing the engine!
- Ally 🍦#1540 for the hours spent testing the engine!
In late 2021, Rhen expanded the credits. He had wanted to change the license used by CYK on its GitHub, and in order to do so, he needed permission from everyone who had worked on the project before. My condition was to be credited more accurately for everything I did. I still feel like if I hadn't done this, they wouldn't have been updated at all.
0.6.2.2 (2019)
Our next release was version 0.6.2.2, a few months later.
Version 0.6.2.2 focuses a lot on retrocompatibility mode, or retromode for short. It's a feature that's already existed in CYF for a long time, but I took the time to try to really make it work better. This option is meant to make mods playable in the original Unitale engine play the same in CYF. Ultimately, upkeeping retromode turned out to be a burden on CYF, and especially on me, and it contributed to the overall direction CYF headed in, being to always keep up support for older versions, and never make breaking changes. This severely limited CYF, and restricted it to an ever-growing list of things that can't be changed.
Happy 2019 everyone!
Today we're bringing you a late Christmas gift with a ton of bug fixes and some new features! Most of this release's work has been done by@WD200019, so pleasedon't forget to boop his nose to thank him for his devotion to the project!Now comes the usual very long list of new features and bugfixes!Sorry, we weren't able to fetch the list of bugs this time, but we'll try again on the next release!
| Category | Patch note | Actual author | Notes |
|---|---|---|---|
| Bug Fixes | |||
| Engine | Fixed fullscreen for Mac! | Me | |
| Fixed the Mods folder not working properly for Mac | Me | ||
| Battle / Mods | Fixed the hitbox debugger in fullscreen | Me | |
Fixed |
Me | ||
Fixed not being able to change the player's properties before |
Me | I'm not totally sure if this is the right commit, but I couldn't find any other commits that reference EncounterStarting |
|
| Moving Player.sprite will now update the Player's hitbox | Me | ||
|
Fixed an oddly specific error (from calling |
Me | ||
| Text Commands | Fixed a bug where having a "[" without a matching "]" would crash CYF | Me | |
|
Me | ||
Fixed a bug where setting playerskipdocommmand |
Me | ||
| Fixed an oversight involving strings such as "Hello [func:DEBUG,hi][noskip]" executing "[noskip]" instantly | |||
| Text Objects |
|
Me | |
| The Input Object | Fixed |
Me | |
| Bullets | Fixed projectile layers being almost completely broken (returning the wrong name for the default layer, "messing up" the names of projectile layers, not letting you move a bullet back to the default layer) | Me | |
Fixed the player being able to call |
Rhen | ||
| Some optimizations to bullet hitboxes and calculations | Rhen (one, two, three, four) | ||
| The Inventory Object | Fixed calling |
Me | |
Fixed the error message for calling |
Me | ||
| Game Over screen | Fixed the text in the Game Over screen being positioned incorrectly | Me | |
Fixed a bug where using |
|||
| The Overworld | Fixed some overworld functions crashing on call if used when entering a new map | Rhen | |
Fixed |
Me | ||
Fixed |
|||
| Fixed inconsistencies between the Overworld's playing music track and the game over track | |||
| Fixed a bug where pressing C to open the menu just before a map fades in will push you back to the previous map | Me | ||
| Changes | |||
| Engine | Added a "window scale" option for users with large monitors | Me | |
| Playing in Retrocompatibility mode will now enable the DOGTEST items for compatibility with Unitale mods | Me | ||
The Player's hp now acts like an integer in retromode,
so mods like Alphys NEO don't
set the player's HP to numbers like 16.00035 |
Me | ||
| Trying to move removed bullets in retromode no longer throws an error, as it "worked" in Unitale | Me | ||
| Mod Select Screen | You no longer have to restart CYF to update a mod's preview screen | Me | |
| The mod select screen now wraps going left and right | Me | ||
| Rewrote some text in the options menu | Me | ||
| Battles | Fleeing now has a 50% chance to fail, as in Undertale | Me | |
Added a new variable, |
Me | ||
| Arena | Added |
Me | |
| Text Commands |
|
Me | |
Made |
Me | ||
Made |
|||
Made |
|||
Made |
|||
| Text Objects | The first argument of |
Rhen | |
Removed |
Me | ||
| The Overworld | The UI will now automatically re-position itself to the top of the screen to avoid covering up the player (as it does in Undertale) | Me | |
Added an optional argument to |
|||
| Documentation | Fixed some misinformation about |
Me |
|
0.6.3 (2019)
Version 0.6.3 was our next big release. This time, I wasn't credited by name at all, but Rhen uses the word "we" to refer to us as a team.
I should also clarify: by this time I was the one handling most of the patch notes. I kept meticulous track of every single addition, bug fix, and change, and organized the patch notes themselves. Rhen pretty much just wrote the little bit at the top of each release's notes, and copy-pasted the rest from me.
This version's big selling points were file I/O, written mostly by Rhen, and modifiable player stats and text object scaling, by me.
OwO What's this? A new CYF release? And it adds file manipulation?! Oh boy oh boy!
Yeah, basically we decided to trust the users a bit more and added a way for modders to manipulate files, as long as they are contained within your mod! Aren't we generous? :D
And that's not all we added! This release comes with a couple of changes that'll make everyone's life easier (or make some more stuff possible!), including text scaling, modifiable player stats or even...erm...I guess that's it for the VERY big changes!
As usual, we'll give you the full changelog since CYF v0.6.2.2 so you can see how much time and love we poured into this new version of Create Your Frisk! Cheers!
IMPORTANT NOTE: If you're upgrading from v0.6.2.2, please copy the new
Defaultfolder over your current one.Scroll to the bottom for downloads.
| Category | Patch note | Actual author |
|---|---|---|
| Major Changes | ||
| The Misc. Object | Added |
Rhen |
Added |
Rhen | |
Added |
Me | |
Added |
||
| The File Object |
Added the File object, which allows creating, reading from and writing to files!
Limited to ONLY your Mod folder
Can be found in "The Misc. Object" in the documentation
|
Rhen |
| Battles | The hitbox debugger now only activates with "H" if the regular Debugger is already open (F9) | Me |
Added |
Me | |
| The Overworld | Added support for the Item Box menu from Undertale (see "Overworld - The Inventory Object") | Rhen |
| Added this as an example event in the Overworld test map | ||
| Added Sprite Objects to the Overworld | ||
| Added Text Objects to the Overworld | ||
| The Player Object |
|
Me |
|
||
|
Me | |
| The Sprite Object | Added |
Me |
| Text Objects | Added |
Me |
Added 3 shortcut functions:
|
Me
|
|
| Enemy Scripts | Added |
Me |
Removed the third argument in |
Me | |
| Bug Fixes | ||
| Battles | Fixed a memory leak related to waves. You should no longer have increased memory usage as more and more waves are played! | Me |
| The debugger and bullet hitbox displays are now properly "attached" to the camera, and will always stay in the same place on-screen, even during screen shakes and when moving the camera manually | Me ( one, two, three ) | |
| Added error messages for many operations that would normally give you a big scary "send this code to the developers" screen | Me (one, two, three) | |
Fixed |
Me | |
| The Overworld | Fixed a bug where an encounter entered from the Overworld would always ignore |
Me |
| Enemies | Fixed a totally-blank error message that showed when a monster script failed to load a sprite | Me |
|
Fixed enemy speech bubbles having incorrect sizes in their XML files, which broke automatic line breaks.
You can thank @CMD_God#0490 in the Discord server for this!
|
By elytrafae on Here's the commit in question. |
|
Fixed |
Me | |
| The Bullet Object | Calling |
Me |
Fixed being unable to call |
||
Fixed a bug where calling |
Me | |
Bullet hitboxes now account for |
Rhen | |
| Fixed a pixel-perfect collision bug causing ppcollision hitboxes to be displaced on the first frame the bullet exists | Me | |
| Pixel-perfect collision detection no longer lags 1 frame behind where the bullet currently is | ||
| The Audio Object | Fixed the volume argument for |
Me |
| The Player Object | Fixed a bug where the player's hitbox would stay at the bottom-left corner of their image, when using an image bigger than 16x16 pixels | Me |
Fixed |
I don't know. I can't find the change in question in the source code | |
| The Inventory Object | Fixed a bug where calling |
Me |
Fixed |
Me | |
| The Text Object | Fixed a major bug where |
Me |
| Fixed a rare bug where the auto-line breaking feature of text objects would start to chop off the last few characters of text | Me | |
| The Documentation | Fixed some enormous misinformation about the pixel-perfect collision system, and re-wrote it to be understandable by everyone | Me |
| Moonsharp | Made |
Rhen |
0.6.4 (2019)
We released Version 0.6.4 at the end of the year.
This is probably the biggest CYF update I've ever worked on. It had such a huge volume of improvements and changes that it took all year to make.
It included a major revamp to the Overworld, with the goal being to make it finally, realistically usable for mod authors.
There were so many changes and additions this time, that we started separating them into collapsible lists on the github release notes.
The most important feature this update is sprite masks, essentially a tool mod authors can use to crop and "cut out" sprite images into the shapes of other images dynamically. Unitale/CYF and their implementation of "sprites" in the bigger context of Unity leave a lot to be desired, and offer very little control over things like this. This is normally something you'd do in Unity with a simple UI component or shader.
Rhen did some important work on line breaking for CYF's text system. CYF doesn't use existing Unity text libraries. Instead, each letter is spawned as a game object that can be individually moved around (for text effects), but has to be placed programmatically. I did my best to start fixing letter placement for this version, but ultimately, Rhen did the rest.
Importantly, as of this version, my commits are extra-hidden on the CYF GitHub. They're only visible now on the "feature065" branch.
Rhen's "CYF v0.6.4" commit on the master branch appears as an independent commit with all our changes combined.
This makes it unclear what commits are actually included and who made them.
Here's the first commit for this version, and here's the last one.
Hey, it's Christmas and I think y'all deserve a gift, so here it is!
You were waiting for masks and now they're IN! Have fun remaking your waves with them now lol
IMPORTANT NOTE: If you're upgrading from v0.6.3, please copy the new
DefaultANDModsfolders over your current ones.Also, text objects including the ones used by enemies when they speak may behave differently, so what used to fit on v0.6.3 may not in v0.6.4 because we fixed them a lot.
Scroll to the bottom for downloads.
The patch notes from here on out are very long, so I'll be using multiple tables. The Overworld gets its own entire table because it's so long.
| Category | Patch note | Actual author | Notes |
|---|---|---|---|
| Major Changes | |||
| The Sprite Object | Added a basic masking system through |
Me (one, two, three) | One of my additions I'm the most proud of |
Added a third argument to |
Me | This feature was already in the engine, but undocumented
|
|
| The Player Object | Added the Game Event |
Me (one, two, three) | This feature was already in the engine, but undocumented
|
|
nanodesuologist on GitHub
|
||
Made |
Me | ||
| The Input Object | Added |
Me | |
| The Text Object |
|
Rhen | |
|
Me | ||
| File Manipulation | Added |
Me | |
Added function |
nanodesuologist on GitHub
|
||
Added |
Me | ||
Added |
|||
| The File Object can now have the "b" attribute in its mode, which fetches a file's bytes rather than characters, and lets you read from and write to files with bytes and specific encodings | Me | ||
Added the property |
|||
| The Misc. Object | Added |
Me | |
Added |
Me | ||
| The Audio and NewAudio objects | Changed several Audio-related functions: they no longer display a warning if an audio file could not be loaded; instead, they return a boolean representing if the file was successfully loaded or not (meaning you can now test for if given audio files exist!)
|
Me | This turned out to be a bad idea |
Added a second argument to |
Me | ||
| The Script Object | Added |
Me | This feature was already in the engine, but undocumented
|
| Misc. Functions |
|
Me | |
| Monster Scripts | Added a special variable |
nanodesuologist on GitHub
|
|
Added |
Shiftenas on GitHub (6 commits)
|
||
| Text Commands | Added |
Me | This feature was already in the engine, but undocumented
|
Added |
Me | This feature was already in the engine, but undocumented
|
|
You may now use |
Me | ||
| The Engine | In the Lua folder, you now only require an "Encounters" folder to load your mod | Me | |
| Error messages are now automatically formatted to be more friendly to new users, pointing out which numbers are line numbers and which indicate characters on a line | Me (one, two, three) | ||
| If your encounter text or battle dialog would go to 4 lines or longer, then the text will now move slightly upwards to compensate | Both of us |
||
| The disclaimer screen will from now on always say the current version of CYF | Me | ||
| The Documentation | Added a new feature indicator that will appear when something has changed since the last version of CYF | Me | |
| Removed the "Create Your Frisk's new features" section and moved the items inside of it to more fitting sections | Me | ||
| Replaced the "Wave scripts" page with "The Arena Object", and moved its singular function and variable to "Misc. Functions" and "Special Variables" where they belong | |||
| Removed Stinkies (bug fixes and minor improvements) | |||
| Engine | Fix missing Lua folders causing the Error scene to be disabled completely | Me (one, two, three, four) | |
| Fixed a bug where entering fullscreen with a non-widescreen resolution (such as a square or portrait resolution) would incorrectly cut off the left and right sides of the screen | Me | ||
| All textures now have mipmapping disabled. Up to now, sprites scaled down certain amounts would start to display with much less detail because of this | Me (one, two) | ||
Fixed the famous "fullscreen bug", where upon entering blurless fullscreen, the player was able to see past the intended 640x480 area if they entered fullscreen at the exact
same time as loading a mod. This behavior got moved to the new function |
Me (moving it to a new feature)
|
||
| Fixed the FPS counter becoming desynced from the debugger so at least one of the two would always be visible in some cases | Me | ||
| Audio and Sounds | Fixed a bug causing a + character anywhere in the full path to a mod's Audio or Sound files preventing said files from loading | Me | |
Fixed a bug where loading a song using |
Me | ||
| Special Variables | Fixed a bug where the variable |
Me | |
| Sprites | Fixed |
Me | |
| Bubbles | Changed the |
Both of us At first, I was making it |
|
| Fixed Text Object speech bubbles having less width than the entered maximum text width | Me | ||
| Fixed Text Object speech bubble tails having reversed directions when entering a number as opposed to a percentage | |||
| Fixed Text Object speech bubble tails having a 10-pixel offset on any given side |
Both of us |
||
| Fixed being unable to override the engine's dialogue bubbles in a mod in the same way you usually do for Default sprites | Me | ||
| Functions & Events |
|
Me | |
No more error message when using |
Me | ||
Fixed calling |
Me | ||
Fix ability to enter "ACTMENU" with empty command list through |
nanodesuologist on GitHub,
then I cleaned it up later
|
||
Fixed errors in |
Me (one, two, three) | ||
| The Player Object | Fixed |
Me | |
Fixed a bug where reviving the player through |
Me | ||
Fixed a bug where setting the Player's hp to 0 or less in |
Me | ||
| Text Managers (encounter text, battle dialogue, enemy speech bubbles, text objects and overworld dialogue) | Fixed a bug where the second column of the ACT and ITEM menu had its x position altered by Misc object properties that move the camera | Me (one, two) | |
Fixed using |
Me | ||
Fixed text effects in |
Me | ||
Fixed an infinite loop when placing a single |
Me | ||
| Text Managers ("autolinebreak" system) | Text managers no longer allow 1 character past their width limit in certain conditions | Me | |
| Fixed an inconsistency where automatic line breaks would move an extra character down to the new line when it wasn't actually going past the width limit | Me | ||
| Fixed multiple infinite loops possible through passing very long words or lines to various text managers | Both of us |
||
| Text Commands | Fixed a compatibility problem where |
Me | |
Fixed a bug where using |
Me | ||
| Fixed an engine freeze when trying to skip text with certain arrangements of commands at the end | Me | ||
Fixed |
Me | ||
| Text Objects | Fixed a bug where giving a text object a sequence such as |
Me | |
Fixed a bug where using |
Both of us At first, I was making it:
one,
two |
||
Fixed a bug where using |
Me | ||
|
Me | ||
| The Misc. Object | Fixed a bug where, when ending a battle with a displaced camera, for 1 frame the camera will move back to (0, 0) which can cause unwanted graphical behavior | Me | |
| MoonSharp (Advanced Lua users only) | Fixed the second argument in |
I later updated it
|
|
Fixed a bug where using |
Me (one, two, three, four) | ||
After 3 years, error messages now properly display the name of the erroring file instead of |
Me (one, two, three) | ||
Fixed |
Me | ||
Fixed a bug where some |
Me | ||
| Category | Patch note | Actual author | Notes |
|---|---|---|---|
| Major Changes (Overworld) | |||
| The Overworld | Cleaned up and organized the Overworld. It's now in its best state ever since CYF's creation! | Both of us, way too many commits | This description is pretty subjective, but it's true. Not only did we clean up all existing OW sprites and make them not blurry anymore, we rewrote the interactions with the existing testing dog, cleaned up some details and inconsistencies in other events, removed debug keys, added tons more functionality to the Overworld, added a way to see the template shop, and optimized everything. I did most of the back-end work. Rhen did work on more front-end stuff like face sprites and their file paths, and adding several scenes to the "stare event", which was divided into 8 parts we split between us. |
| You no longer have to restart CYF completely when you get an error in the overworld! Pressing Escape will take you back to the initial disclaimer screen. | Me | ||
| Changed the way you access a certain secret so you no longer have to edit code to reach it | Me, but as part of something we were working on together | So, this was changed as part of our big redesign of the Overworld and its existing events. This was my change, though, and I made the interaction that makes the dog disappear. |
|
Added the utility functions |
Both of us
|
||
Added |
Me | ||
Added |
Me | ||
You can use a second argument in |
Me | ||
The second argument for |
Me | ||
You can use an argument in |
Me | This feature was already in the engine, but undocumented
|
|
Added support for |
Me | ||
| Made CreateSprite, CreateText and CreateLayer all usable in the Overworld, exactly the same as in battles | Me |
||
|
Me | ||
| The game now keeps track of your play time in the overworld instead of always saying 0:00 | Me (one, two, three) | ||
| Retrocompatibility mode now gets forcefully disabled whenever you enter the Overworld, to keep things compatible | Me | ||
Added a more descriptive and helpful save file tester for CYF: |
Me (one, two) | ||
| Overworld Shops | You can now set items to be marked as "SOLD OUT" after buying - there's an example of this in Examples 2/Lua/Shops/Dummy.lua. | Rhen | |
| You can now mark items as unsellable in the engine's internal item database by setting their sell price to 0. | |||
Changed the way |
Both of us Rhen's commit was first, then my commit followed |
||
| Made shops play the proper sound effects that play in Undertale for buying, selling, and failing to sell items. | Rhen (one, two) | ||
| Bug Fixes (Overworld) | |||
| The Overworld | Fixed error messages in the Overworld for good! | Me (one, two, three, four) | |
| Removed, edited and formatted some Overworld player names | Me | ||
Even though |
Me | These relate to this commit made by Rhen in the previous version. |
|
Even though |
Me | ||
| Fixed the player's speed getting set to 2/3rds of the intended speed whenever using the character selector | Me | ||
| Fixed the pivots of shared sprites between Overworld scenes and encounters being different depending on which occurence was seen first | Me | ||
Fixed |
Me | ||
| Fixed auto-interacting with events on the same frame as closing a text box opened from the menu (such as the cell phone text) | Me | ||
| Fixed SetDialog recognizing a Z press the same frame you start an event, which could combine with [instant] to skip a line immediately | |||
| Fixed being able to press Z to activate confirm events during map transitions and during the fade in while loading your save | Me | ||
| Fixed a frame-perfect softlock if you open the menu the frame after closing it | Me | ||
Fixed the overworld text manager always keeping the last effect applied through |
Me | ||
Fixed |
Me | ||
| Fixed soul in menu sometimes becoming black | Me | ||
| Fixed invalid face sprites in SetDialog not showing an error | |||
| Fixed face sprites in the Overworld not resetting between lines of text | Me | ||
| Fixed the Overworld camera always being 0.5 pixels off of where it should be vertically on big maps | Me | ||
Attached Debugger to Overworld camera when using |
Me | ||
| Fixed the Overworld game over text being at the wrong height | Me | ||
Fixed |
|||
Fixed |
|||
Fixed |
Me | ||
Fixed |
|||
| Fixed the player's EXP resetting to their LV's minimum required EXP upon exiting a battle to the Overworld | Me | ||
| Fixed the player's Max HP resetting to their LV's default Max HP when exiting a battle to the Overworld | |||
| Events can now only have one of each type of C# coroutine active, per type of coroutine. You can have both MoveToPoint and Rotate active at the same time, for instance, but only one of each at a time per event object that gets moved/rotated. | Me | ||
Fixed |
Me | ||
| Fixed events moving different distances based on your frame rate which could lead to them getting stuck in walls and the player. | Me | ||
| Fixed Event objects only being able to execute one "auto" page per event | Rhen | ||
| Fixed an invisible buildup of game objects every time you open the box UI | Me | ||
| Un-blurred many things, including the item box menu background, most maps and overworld sprites, and "press z or enter" | Me (one, two, three, four) | ||
| Fixed errors involving NewAudio channels in the overworld | Me | ||
| Overworld Shops | Fixed the Shop scene's music sometimes starting at the play time of the Overworld music | Me | |
| Fixed shops always displaying the Talk text for option 1, regardless of which option you pick | Me | ||
Fixed shops not having a debugger and, as such, making your FPS display stuck on screen if you press F9, and making |
|||
| Fixed Text Objects appearing in the wrong scene when created in Shops | Me | ||
| Fixed being able to press C for an error message and weird behavior while exiting the shop | |||
| Fixed being able to mash Z during the fade-out transition to stack up lots of screen transition objects | |||
0.6.5 (2020)
"Throwing off some shade" is the final version of CYF I worked on.
I did most of the work in this release again. Rhen and I weren't talking during this time, so I implemented shaders and discord rich presence mostly alone,
though two other users in the community (TheEternalShine and elytrafae) helped.
Because of the stress I was under during development, I made a mistake. One of the shader-related functions returns values in the wrong order.
Rhen's commits in this version include optimizing pixel-perfect bullet collision some more, organizing and adding comments to some engine code, writing the first version of the Discord object's documentation, fixing overworld events being intangible and not running their init functions first, and fixing some errors exclusive to standalone builds of CYF.
Here's the first commit for this version, and here's the last one.
So I heard people around these parts have been waiting to use shaders and stuff in CYF. It's a thing many people asked for for a very long time now, but it's something we can't really add easily in a Unity project... ...nah, just joking. Give a huge thanks to @TheEternalShine and @WD200019 for their hard work!
IMPORTANT NOTE: If you're upgrading from v0.6.4, please copy the new
DefaultANDModsfolders over your current ones.Scroll to the bottom for downloads.
| Category | Patch note | Actual author | Notes |
|---|---|---|---|
| Major Changes | |||
| Shaders |
The big new feature of this version is shaders! You can use shaders created in Unity ShaderLab and apply them to any sprite object in your mod,
even the entire screen itself! Full details and explanation are in the documentation.
(thanks go to @TheEternalShine on GitHub/Discord for this feature!)
|
Rhen, Me (one, two, three, four, five, six, seven) TheEternalShine had helped over |
|
| The Discord Object |
Discord now has rich presence integration with CYF! This can be toggled in CYF's Options menu. It will display various things like
what mod and encounter you are playing, how long you have been playing, as well as messages for in the Overworld. And the status properties
can be modified with Lua!
(thanks go to CMD_God#0490 on Discord for this feature!)
|
elytrafae on Rhen, |
|
| Engine | All warning messages that you'd see in the debugger are now hidden by default in retrocompatibility mode, as they were in Unitale | Me | |
| Battle Scene | Updated the calculation for if the player can successfully flee from battle. It now follows Undertale - 50% chance to flee on turn 1, + 10% for every turn spent in battle. This was verified accurate by decompiling Undertale's code | Me | |
| Misc. Functions | Added the new function |
Me | |
| The Player Object | Added a fourth argument to |
Me (one, two) | |
| The Text Object | Added |
Me | |
Added |
Me (one, two) | ||
Text objects now call the new Game Event |
Me | ||
| Game Events | The Game Event |
Me | |
Added the Game Event |
Me | ||
| Sprites & Layers |
|
Me |
A previous commit of a similar description in 0.6.4 simply removed a specific error message in favor of CreateLayer failing silently,
whereas this commit has it return a boolean representing if its use was successful
|
| The Misc Object |
|
Me | |
The byte editing mode added in CYF v0.6.4 has been replaced with the most direct solution possible. |
Me | ||
| The Overworld | Added |
Me | This was actually a pretty important change for people who used the Overworld. It meant that multiple copies of an event could function differently when placed in different maps. Otherwise, there'd need to be a version of its script for each map. |
Added |
|||
| Bug Fixes | |||
| Engine | Fixed engine screen resolution being set to 1x1px fullscreen on first launch on Linux (#66) | Me | |
| Properly show an error screen for all XML errors while loading fonts. Up to now, if such an error were encountered, the engine would try to continue battle but with some assets mysteriously not loaded. | Me | ||
| Fixed the EncounterStarting function still being called, even if an error occured in a monster script and the battle should have ended | Me | ||
| Battle scene | (tried to) Fix "FIGHT"/"ACT"/"ITEM"/"MERCY" buttons blurring on systems with older graphics cards | Me | |
Fix object buildup when enemies die, or when calling |
Me | ||
| Fixed the chance for successfully fleeing a battle actually being 33% instead of 50% | Me | ||
| Fixed bug: creating a projectile with the sprite name "Text" (case sensitive) would cause it to parent to the Debugger, and hide and show with it | Me | ||
| Fixed dust particles (from sprite.Dust and killing enemies) staying on screen for 1 frame on battle end | Me | ||
| Fixed the particles from sparing monsters not unloading | Me | ||
| Monsters | If a monster's |
Me | |
| The Player | Fixed the player being unable to level up naturally to LV 20 at a battle's end, even if they reached 99999 XP | Me | |
| You are now finally able to change the player's stats before EncounterStarting with no issues | Me | ||
| Camera Movement | Fixed the player being offset based on the camera's position whenever a game over screen starts (since CYF v0.6.2) | Me | |
Fixed |
Me | ||
| Fixed the hitbox debugger displaying the player's hitbox in the wrong location if the camera is moved | Me | ||
| Text Commands | Fixed the |
Me | |
| Fix no error screen showing, leading to engine freezes and invisible monster text bubbles, when trying to load an invalid font in some cases | Me | ||
Fixed the |
Me | ||
Fixed |
Me | ||
Fixed |
|||
Fixed |
Me | ||
| Text Objects | Fixed engine error when calling |
Me | |
Fixed engine error if using |
Me | ||
| Fixed 0.6.4's system of moving encountertext up 9 pixels continuing to apply in the states ENEMYSELECT, ITEMMENU and MERCYMENU (since CYF v0.6.4) | Me | ||
Fixed strange behavior involving |
Me | ||
Fixed |
|||
| The Inventory Object | The Bisicle now properly gets replaced by a Unisicle on use (thanks go to @heartlessmushroom on Github/Discord for this fix!) | heartlessmushroom did write the fix. It was likely sent to me over |
|
| Fixed being able to exceed 8 items in the inventory if you actually give it 10 or more items, as opposed to just 9 | Me | ||
| Sprite Masking | Fixed a bug where removing bullets could cause future bullets to be missing their mask components, and error when attempting to use |
Me | |
Fixed an error screen when trying to use |
Me | ||
| The Overworld | Fixed a 1-frame error that happens when an event stops moving during the same frame as the map changing (since CYF v0.6.4) | Me | |
Fixed |
Me | ||
| Fixed the player's saved play time carrying over to a new game when the player chooses "Reset" on the continue screen (since CYF v0.6.4) | Me | ||
Fixed the Overworld text box being potentially covered up by |
Me | ||
| Fixed strange and buggy collision on the big snowy map in which the player could get stuck (demo) | Me | ||
| Fixed a bug causing the Overworld's item box UI to display all of its sprites and text only within the 640x480 area at the bottom left corner of any map that has camera scrolling. | Me | ||
Fixed animated mugshots remaining active in future text boxes if they hadn't yet stopped their animation (such as by skipping the end of text with |
Me | ||
Correctly reset |
Me | ||
| Fixed one empty game object at a time building up and staying active after every battle in the Overworld | Me | ||
Optimized the internal Lua code used by CYF events to remove a massive if/elseif block (99 conditions) scanned through EVERY time you run a function
from a CYF overworld object (like |
Me | ||
As soon as CYF 0.6.5 was released, I quit.
I stepped down as moderator in all locations, left the discord server, and announced I'd stop helping Unitale/CYF users from then on.
It was a big move for me. I didn't give any indications leading up to my announcement. None of my friends knew either.
Why did I do it? It's multi-layered. The main reason cited in the post was my unhealthy addiction to proving code help to others. How I'd do it at the drop of a hat, neglecting myself.
But there's a bit more to it. I was under duress during the creation of CYF 0.6.5 specifically, and felt like I had no choice but to develop it.
My announcement was me running as fast as I could once I was no longer needed. I won't elaborate on it here though - it's in the past.
Releasing myself from the obligations of developing CYF and helping all the users was a huge boon. I felt like I had so much more patience than before, and a lot more free time. By all accounts, CYF is an open-source project, and one could argue I could have left at any time, but it went deeper than that. There were social motivators involved - and now that I was free, it was like a big weight had been lifted from me.
The community continued to exist without me. I continued to receive reddit pms from strangers for years after, asking me for modding help in various contexts, or on one occassion, asking permission to release an edit of one of my libraries (my blue soul library, the most popular CYF thing I've made by far). Someone else did so without asking permission, and I commented that I wanted it removed. My days in CYF instilled a kind of protectiveness over my work, because of the endless theft that's taken place in this circle. And I'd been so burned out of offering modding help that I tried to push it all away, although I caved sometimes, or I'd still do it for discord friends.
I wasn't quite done with Undertale fan content, though. After CYF, I helped out some then-friends of mine on a project called
Crossovertale. It had already been in loose development by one person for several years, using
CYF as a base, but I took it the extra mile by making them their own engine based on CYF from almost the ground up. Go to the Crossovertale
page for more.