Skip to content

5. Modcharts & Modifiers (WIP)

Campbell edited this page Apr 28, 2026 · 6 revisions

THIS PAGE IS IN HEAVY WIP.
BROWSE WITH CAUTION, NOT ALL DOCUMENTATION IS COMPLETE.

Basics

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.
ezgif-74af60c0212181f6

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.
ezgif-7bd89c4dc3dd5322

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.
ezgif-7eb7c60eb0004434

This example ran
modManager.queueEase(16, 32, "squish", 1, "bounceOut", 0);.

For list of modchart eases, please see here

Ease styles

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.


Modifiers

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.


Positioning

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.
image
transformY

Moves Y position of playfield
based on modifier value.

Image has transformY at 100 on field 0.
Field 1 is unchanged.
image
transformZ

Moves Z position of playfield
based on modifier value.

Image has transformZ at 0.1 on field 0.
Field 1 is unchanged.
image

Mods above allow you to specify modifiers on specific IDs.
Use transform${ID}X, transform${ID}Y or transform${ID}Z for such.

For example, setting transform1X to 50 will 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.
ezgif-4b042b2b3abba358
flip

Swaps all columns with the
opposite direction's column.
image
invert

Swaps columns with the
column to the side of it.
image

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.
ezgif-1e2c4a9f2d4f6621
tipsy

Moves the notes up and down on
a cosine wave.

You can use
tipsySpeed & tipsyOffset
to adjust the corresponding values.
ezgif-1c5761a09f397733
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.
ezgif-1c0b1d727608b7b3
beat

Moves the fields left & right to
the beat of the song.
ezgif-76f1cc94d8065e1d

Acceleration / Speed
Mod name & Description Visual Example
boost

Slows the notes down before reaching the receptors,
then speeds them up as they approach closer.
ezgif-1b604c9c55b89aad
wave

Notes get faster and slower as they approach the
receptors, simulating a somewhat wave like effect.
ezgif-1bb139f1f2976c59
brake

Notes accelerate very fast then
slow down as near the receptor.
ezgif-1216ba9ed727ab1d

Rotation

Note / Receptor Rotation Modifiers
Mod name & Description Visual Example
confusion

Rotates the receptor & note graphics
by inputted degree value.

Example is using 90.
image
noteAngle

Rotates the note graphics
by inputted degree value.

Example is using 90.
image
receptorAngle

Rotates the receptor graphics
by inputted degree value.

Example is using 90.
image

Mods above allow you to specify modifiers on specific IDs.
Use note${ID}Angle, receptor${ID}Angle, and confusion${ID} for such.
For example, setting confusion1 to 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.
ezgif-44703c25df479391
localrotateY

Rotates the playfield on the Y axis
based on the origin (center)
of the respective playfield.
ezgif-4ecd6e38c7585daf
localrotateZ

Rotates the playfield on the Z axis
based on the origin (center)
of the respective playfield.
ezgif-431699499189cf86
centerrotateX

Rotates the playfield on the X axis
based on the center
of the screen (1280x720).
ezgif-44703c25df479391
centerrotateY

Rotates the playfield on the Y axis
based on the center
of the screen (1280x720).
ezgif-426a8e68947d310c
centerrotateZ

Rotates the playfield on the Z axis
based on the center
of the screen (1280x720).
ezgif-4138174de8610d21

Mods above take radians as an input instead of degrees.
To translate your degrees to radians, import flixel.math.FlxAngle and multiply your degree by FlxAngle.TO_RAD


Mods above allow you to specify modifiers on specific IDs.
Use localrotate${ID}X or centerrotate${ID}X for such.

For example, setting centerrotate1X to (90 * FlxAngle.TO_RAD) will rotate the down note by 90 degrees on the X axis..


Visibility & Scale

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.
ezgif-117ee786b133c92f
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.
ezgif-11fa42bec10a7ee0
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.
ezgif-1a52001ef4a87c55
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.
ezgif-1a1c5a64896a49d6
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.
ezgif-119adee4fb838765
blink

Stealth value fades in and out,
simulating a "blink" in and out of
visibility.
ezgif-11826340d619bb1b

Mods above allow you to specify modifiers on specific IDs.
Simply append the note ID to the end of either alpha, noteAlpha, dark, noteSplashAlpha or sustainSplashAlpha for it to work properly.
Example, setting noteAlpha2 to 1 will make the down arrow invisible.


Scale
Mod name & Description Visual Example
mini

Scales down all field
objects by mod value.
image
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.
image
miniY
(aka stretch)

Scales down X scale of
all playfield objects by mod value.
image
receptorScaleX & receptorScaleY

Scales receptor graphics by mod value.

Example uses receptorScaleX
image
noteScaleX & noteScaleY

Scales note graphics by mod value.

Example uses noteScaleX
image
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.5 on Field 0.
Field 1 was intentionally left untouched to provide a comparison. Mods above allow you to specify modifiers on specific IDs.
Use mini${ID}X, noteSplash${ID}ScaleX, receptor${ID}ScaleX, note${ID}ScaleX for such.

For example, setting noteSplash1ScaleX to 0.5 will scale the down note splash by 0.5.


Path Modifiers

Reverse ("Downscroll") Modifier
Mod name & Description Visual Example
reverse

Reverses the playfield scroll.
ezgif-3c3e39c8de7314fa

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.
ezgif-318a22b360434085
alternate

Reverses the scroll of every other receptor.
ezgif-329b7ce5b1d29c0e
centered

Centers the playfield on the Y axis.
image

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.
ezgif-13ec39d0c5bb1a5e
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)
ezgif-32cb0adeaa7ebccc

Clone this wiki locally