-
Notifications
You must be signed in to change notification settings - Fork 107
5. Modcharts & Modifiers (WIP)
THIS PAGE IS IN HEAVY WIP.
BROWSE WITH CAUTION, NOT ALL DOCUMENTATION IS COMPLETE.
All modifiers are handled via the class ModManager. They are usable in a script by calling modManager in a PlayState script.
Below are some functions you can call from modManager to set the values of modifiers.
| Function | Arguments | Example |
|---|---|---|
setValue(modName:String, val:Float, player:Int) |
The field modName is the mod you're changing the value of.The field val is the value to set the mod to.The field player defines which strumline gets this specific value applied.0 - player, 1 - opponent, and so on. Don't input this field, or input as -1, for the modifier to apply to both strumlines. |
![]() This example ran modManager.setValue("drunk", 1, 0);. |
queueSet(step:Float, modName:String, target:Float, player:Int) |
The field step defines when a modifier value changes, corresponding to a song's curStep value. The field modName is the mod you're changing the value of.The field target is the value to set the mod to.The field player defines which strumline gets this specific value applied.0 - player, 1 - opponent, and so on. Don't input this field, or input as -1, for the modifier to apply to both strumlines. |
![]() This example ran modManager.queueSet(32, "drunk", 1, 0);. |
queueEase(step:Float, endStep:Float, modName:String, target:Float, style:String = 'linear', player:Int = -1, ?startVal:Float) |
This function eases a modifier's value to a specified value. The field step defines when to start the eased modifier value change, corresponding to a song's curStep value.The field endStep defines when to end the eased modifier value change, corresponding to a song's curStep value. The field modName is the mod you're changing the value of.The field target is the value to set the mod to.The field style is the type of easing to use. Any FlxEase types work, simply input them as a string.For example, inputting "backOut" will use the FlxEase type of backOut. The field player defines which strumline gets this specific value applied.0 - player, 1 - opponent, and so on. Don't input this field, or input as -1, for the modifier to apply to both strumlines. |
![]() This example ran modManager.queueEase(16, 32, "squish", 1, "bounceOut", 0);. For list of modchart eases, please see here |
All ease styles in this modchart system are taken directly from FlxEase.
To input a specific ease type, simply type the name of the ease type as a string.
For example, if you wanted to input FlxEase.bounceInOut as your ease in a queueEase function, simply input "bounceInOut" instead of FlxEase.bounceInOut.
To test different ease types & see how they look, use this HaxeFlixel demo.
Below are dropdowns containing information on existing modifiers with the modchart system. Each explains what the modifier does, provides a visual example, and does the same for all submods.
Basic Positioning
| Mod name & Description | Visual Example |
|---|---|
|
transformX Moves X position of playfield based on modifier value. Image has transformX at 100 on field 0. Field 1 is unchanged. |
![]() |
|
transformY Moves Y position of playfield based on modifier value. Image has transformY at 100 on field 0. Field 1 is unchanged. |
![]() |
|
transformZ Moves Z position of playfield based on modifier value. Image has transformZ at 0.1 on field 0. Field 1 is unchanged. |
![]() |
Mods above allow you to specify modifiers on specific IDs.
Usetransform${ID}X,transform${ID}Yortransform${ID}Zfor such.
For example, settingtransform1Xto50will move the down note to the left by 50 pixels.
Column / Field Swap
| Mod name & Description | Visual Example |
|---|---|
|
opponentSwap Swaps the positions of the playfields to the opposite playfield's respective side. |
![]() |
|
flip Swaps all columns with the opposite direction's column. |
![]() |
|
invert Swaps columns with the column to the side of it. |
![]() |
Basic Movement
| Mod name & Description | Visual Example |
|---|---|
|
drunk Moves the notes left and right on a cosine wave. You can use drunkSpeed, drunkPeriod, and drunkOffset to adjust the corresponding values. |
![]() |
|
tipsy Moves the notes up and down on a cosine wave. You can use tipsySpeed & tipsyOffset to adjust the corresponding values. |
![]() |
|
tipZ Moves the notes up and down on the Z axis on a cosine wave. You can use tipZSpeed & tipZOffset to adjust the corresponding values. |
![]() |
|
beat Moves the fields left & right to the beat of the song. |
![]() |
Acceleration / Speed
| Mod name & Description | Visual Example |
|---|---|
|
boost Slows the notes down before reaching the receptors, then speeds them up as they approach closer. |
![]() |
|
wave Notes get faster and slower as they approach the receptors, simulating a somewhat wave like effect. |
![]() |
|
brake Notes accelerate very fast then slow down as near the receptor. |
![]() |
Note / Receptor Rotation Modifiers
| Mod name & Description | Visual Example |
|---|---|
|
confusion Rotates the receptor & note graphics by inputted degree value. Example is using 90. |
![]() |
|
noteAngle Rotates the note graphics by inputted degree value. Example is using 90. |
![]() |
|
receptorAngle Rotates the receptor graphics by inputted degree value. Example is using 90. |
![]() |
Mods above allow you to specify modifiers on specific IDs.
Usenote${ID}Angle,receptor${ID}Angle, andconfusion${ID}for such.
For example, settingconfusion1to 90 will make the down's graphics have a 90 degree angle.
Playfield Rotation Modifiers
| Mod name & Description | Visual Example |
|---|---|
|
localrotateX Rotates the playfield on the X axis based on the origin (center) of the respective playfield. |
![]() |
|
localrotateY Rotates the playfield on the Y axis based on the origin (center) of the respective playfield. |
![]() |
|
localrotateZ Rotates the playfield on the Z axis based on the origin (center) of the respective playfield. |
![]() |
|
centerrotateX Rotates the playfield on the X axis based on the center of the screen (1280x720). |
![]() |
|
centerrotateY Rotates the playfield on the Y axis based on the center of the screen (1280x720). |
![]() |
|
centerrotateZ Rotates the playfield on the Z axis based on the center of the screen (1280x720). |
![]() |
Mods above take radians as an input instead of degrees.
To translate your degrees to radians, importflixel.math.FlxAngleand multiply your degree byFlxAngle.TO_RAD
Mods above allow you to specify modifiers on specific IDs.
Uselocalrotate${ID}Xorcenterrotate${ID}Xfor such.
For example, settingcenterrotate1Xto(90 * FlxAngle.TO_RAD)will rotate the down note by 90 degrees on the X axis..
Alpha
| Mod name & Description | Visual Example |
|---|---|
|
alpha Changes the opacity of the notes. Values are inverted, so 1 is equal to 0 opacity, and 0 is equal to 1 opacity. |
![]() Worth noting that I made the alpha go up and down in this example gif, this just sets the alpha once. |
|
stealth Changes the opacity & colors of the notes. 0-0.5 just changes the color. 0.5-1.0 begins to change the opacity of the notes. |
![]() Worth noting that I made the stealth value go up and down in this example gif, this just sets the stealth once. |
|
dark Changes the opacity of the receptors. |
![]() Worth noting that I made the dark value go up and down in this example gif, this just sets the dark once. |
|
hidden Raises the stealth value as the notes approach the strumline, making them invisible before hitting them. You can use hiddenOffset to adjust the point on the strumline where the modifier activates. |
![]() |
|
sudden Sets the stealth value of the notes to 1, then lowers them as they approach the strumline, making them suddenly appear. You can use suddenOffset to adjust the point on the strumline where the modifier activates. |
![]() |
|
blink Stealth value fades in and out, simulating a "blink" in and out of visibility. |
![]() |
Mods above allow you to specify modifiers on specific IDs.
Simply append the note ID to the end of eitheralpha,noteAlpha,dark,noteSplashAlphaorsustainSplashAlphafor it to work properly.
Example, settingnoteAlpha2to 1 will make the down arrow invisible.
Scale
| Mod name & Description | Visual Example |
|---|---|
|
mini Scales down all field objects by mod value. |
![]() |
|
miniX Scales down X scale of all playfield objects by mod value. The mod squish does the inverse of miniX, scaling up by mod value instead of down. |
![]() |
|
miniY (aka stretch) Scales down X scale of all playfield objects by mod value. |
![]() |
|
receptorScaleX & receptorScaleY Scales receptor graphics by mod value. Example uses receptorScaleX |
![]() |
|
noteScaleX & noteScaleY Scales note graphics by mod value. Example uses noteScaleX |
![]() |
|
noteSplashScaleX & noteSplashScaleY Scales note splash graphics by mod value. |
i didnt feel like getting an example, i feel like this is self explanatory |
|
sustainSplashScaleX & sustainSplashScaleY Scales sustain splash graphics by mod value. |
All mods above have the specified mod at the value
0.5on Field 0.
Field 1 was intentionally left untouched to provide a comparison. Mods above allow you to specify modifiers on specific IDs.
Usemini${ID}X,noteSplash${ID}ScaleX,receptor${ID}ScaleX,note${ID}ScaleXfor such.
For example, settingnoteSplash1ScaleXto0.5will scale the down note splash by 0.5.
Reverse ("Downscroll") Modifier
| Mod name & Description | Visual Example |
|---|---|
|
reverse Reverses the playfield scroll. |
![]() Mod above allow you to specify on a specific ID. Simply append the note ID to the end for it to work properly. Example, setting reverse2 to 1 will make the up arrow invisible. |
|
cross Reverses the scroll of every 2 receptors, skipping the first. |
![]() |
|
alternate Reverses the scroll of every other receptor. |
![]() |
|
centered Centers the playfield on the Y axis. |
![]() |
Important to note that all reverse effects are inverted on downscroll.
Setting reverse to 1 on downscroll will make the field appear in upscroll, while having downscroll off will make the field appear in downscroll.
ALL examples are recorded on upscroll.
Fun Miscellaneous Path Modifiers
| Mod name & Description | Visual Example |
|---|---|
|
infinite Makes the notes follow a path resembling an infinity sign. |
![]() |
|
receptorScroll Scrolls the playfield up & down and leaves the notes static, creating a sort of "inverse" of the note scrolling. Heavily recommend you combine this with the sudden modifier to limit the amount of notes visible on screen at once. (sudden is used in the example to the right) |
![]() |
If there are any questions you have that may not be answered across this wiki, please contact @Duskiewhy on discord / twitter.








































