A store of unchanging, globally relevant values.

Static variables

@:value("-end")staticfinalread onlyANIMATION_END_SUFFIX:String = "-end"

A suffix used for animations played when an animation would end before transitioning to another.

@:value("-hold")staticfinalread onlyANIMATION_HOLD_SUFFIX:String = "-hold"

A suffix used for animations played when an animation would loop.

@:value(5.0 * SECS_PER_MIN)staticfinalread onlyAUTOSAVE_TIMER_DELAY_SEC:Float = 5.0 * SECS_PER_MIN

Duration to wait before autosaving the chart.

@:value(1)staticfinalinlineread onlyBASE_SAVE_SLOT:Int = 1

We always use this save slot. Alter this if you want to use a different save slot.

@:value(false)staticfinalread onlyCENSOR_EXPLETIVES:Bool = false

Otherwise known as "The FuckCunt Variable"

@:value(0xFF66FF33)staticfinalread onlyCOLOR_HEALTH_BAR_GREEN:FlxColor = 0xFF66FF33

The color used by the player health bar.

@:value(0xFFFF0000)staticfinalread onlyCOLOR_HEALTH_BAR_RED:FlxColor = 0xFFFF0000

The color used by the enemy health bar.

@:value([0xFFFF22AA, 0xFF00EEFF, 0xFF00CC00, 0xFFCC1111])staticCOLOR_NOTES:Array<FlxColor> = [0xFFFF22AA, 0xFF00EEFF, 0xFF00CC00, 0xFFCC1111]

The base colors used by notes.

@:value(0xFFA4FF11)staticfinalread onlyCOLOR_PRELOADER_BAR:FlxColor = 0xFFA4FF11

Color for the preloader progress bar

@:value(0xFF000000)staticfinalread onlyCOLOR_PRELOADER_BG:FlxColor = 0xFF000000

Color for the preloader background

@:value(0xFF1B1717)staticfinalread onlyCOLOR_PRELOADER_LOCK_BG:FlxColor = 0xFF1B1717

Color for the preloader site lock background

@:value(0xB96F10)staticfinalread onlyCOLOR_PRELOADER_LOCK_FG:FlxColor = 0xB96F10

Color for the preloader site lock foreground

@:value(0xCCCCCC)staticfinalread onlyCOLOR_PRELOADER_LOCK_FONT:FlxColor = 0xCCCCCC

Color for the preloader site lock text

@:value(0xEEB211)staticfinalread onlyCOLOR_PRELOADER_LOCK_LINK:FlxColor = 0xEEB211

Color for the preloader site lock link

@:value(0.6)staticfinalread onlyCOUNTDOWN_VOLUME:Float = 0.6

The volume at which to play the countdown before the song starts.

@:value(false)staticfinalread onlyDEBUG_BUILD:Bool = false

Whether or not the game is a debug build.

@:value("volume1")staticfinalread onlyDEFAULT_ALBUM_ID:String = "volume1"

The default album for songs in Freeplay.

@:value("Unknown")staticfinalread onlyDEFAULT_ARTIST:String = "Unknown"

The default artist for songs.

@:value(1.015)staticfinalread onlyDEFAULT_BOP_INTENSITY:Float = 1.015

The default intensity multiplier for camera bops. Prolly needs to be tuned bc it's a multiplier now.

@:value(100.0)staticfinalread onlyDEFAULT_BPM:Float = 100.0

The default BPM for charts, so things don't break if none is specified.

@:value(0.04)staticfinalread onlyDEFAULT_CAMERA_FOLLOW_RATE:Float = 0.04

The rate at which the camera lerps to its target. 0.04 = 4% of distance per frame.

@:value("bf")staticfinalread onlyDEFAULT_CHARACTER:String = "bf"

Default player character for charts.

@:value("Unknown")staticfinalread onlyDEFAULT_CHARTER:String = "Unknown"

The default charter for songs.

@:value("normal")staticfinalread onlyDEFAULT_DIFFICULTY:String = "normal"

Default difficulty for charts.

@:value(["easy", "normal", "hard"])staticfinalread onlyDEFAULT_DIFFICULTY_LIST:Array<String> = ["easy", "normal", "hard"]

Default list of difficulties for charts. Assumes no Erect mode, etc.

@:value(["erect", "nightmare"])staticfinalread onlyDEFAULT_DIFFICULTY_LIST_ERECT:Array<String> = ["erect", "nightmare"]

Default list of difficulties for Erect mode.

@:value(["easy", "normal", "hard", "erect", "nightmare"])staticfinalread onlyDEFAULT_DIFFICULTY_LIST_FULL:Array<String> = ["easy", "normal", "hard", "erect", "nightmare"]

List of all difficulties used by the base game. Includes Erect and Nightmare.

@:value("bf")staticfinalread onlyDEFAULT_FREEPLAY_STYLE:String = "bf"

The default freeplay style for characters.

@:value("face")staticfinalread onlyDEFAULT_HEALTH_ICON:String = "face"

Default player character for health icons.

@:value("funkin")staticfinalread onlyDEFAULT_NOTE_STYLE:String = "funkin"

The default note style for songs.

@:value("pixel")staticfinalread onlyDEFAULT_PIXEL_NOTE_STYLE:String = "pixel"

The default pixel note style for songs.

@:value(1.0)staticfinalread onlyDEFAULT_SCROLLSPEED:Float = 1.0

The default scroll speed for songs.

@:value("tutorial")staticfinalread onlyDEFAULT_SONG:String = "tutorial"

Default song for if the PlayState messes up.

@:value("Unknown")staticfinalread onlyDEFAULT_SONGNAME:String = "Unknown"

The default name for songs.

@:value("mainStage")staticfinalread onlyDEFAULT_STAGE:String = "mainStage"

Default stage for charts.

@:value("default")staticfinalread onlyDEFAULT_STICKER_PACK:String = "default"

Default sticker pack for transitions

@:value(SongTimeFormat.MILLISECONDS)staticfinalread onlyDEFAULT_TIMEFORMAT:SongTimeFormat = SongTimeFormat.MILLISECONDS

The default timing format for songs.

@:value(4)staticfinalread onlyDEFAULT_TIME_SIGNATURE_DEN:Int = 4

Default denominator for the time signature.

@:value(4)staticfinalread onlyDEFAULT_TIME_SIGNATURE_NUM:Int = 4

Default numerator for the time signature.

@:value("default")staticfinalread onlyDEFAULT_VARIATION:String = "default"

Default variation for charts.

@:value(["default", "erect", "pico", "bf"])staticfinalread onlyDEFAULT_VARIATION_LIST:Array<String> = ["default", "erect", "pico", "bf"]

Standardized variations for charts

@:value(0.5)staticfinalinlineread onlyDEFAULT_VIBRATION_AMPLITUDE:Float = 0.5

Default vibration amplitude.

@:value(0.1)staticfinalinlineread onlyDEFAULT_VIBRATION_DURATION:Float = 0.1

Default duration value for vibration.

@:value(0.1)staticfinalinlineread onlyDEFAULT_VIBRATION_PERIOD:Float = 0.1

Default period value for vibration.

@:value(1)staticfinalinlineread onlyDEFAULT_VIBRATION_SHARPNESS:Float = 1

Default vibration sharpness.

@:value(0)staticfinalread onlyDEFAULT_ZOOM_OFFSET:Int = 0

The default offset of camera zooms (in beats).

@:value(4)staticfinalread onlyDEFAULT_ZOOM_RATE:Int = 4

The default rate for camera zooms (in beats per zoom).

@:value("fnfc")staticfinalread onlyEXT_CHART:String = "fnfc"

The file extension used when exporting chart files.

  • "I made a new file format"
  • "Actually new or just a renamed ZIP?"

@:value("json")staticfinalread onlyEXT_DATA:String = "json"

The file extension used when loading data files.

@:value("png")staticfinalread onlyEXT_IMAGE:String = "png"

The file extension used when loading image files.

@:value("ogg")staticfinalread onlyEXT_SOUND:String = "ogg"

The file extension used when loading audio files.

@:value("fnfs")staticfinalread onlyEXT_STAGE:String = "fnfs"

The file extension used when exporting stage files.

@:value("mp4")staticfinalread onlyEXT_VIDEO:String = "mp4"

The file extension used when loading video files.

staticread onlyGENERATED_BY:String

The generatedBy string embedded in the chart files made by this application.

@:value(funkin.util.macro.GitCommit.getGitBranch())staticfinalread onlyGIT_BRANCH:String = funkin.util.macro.GitCommit.getGitBranch()

The current Git branch.

@:value(funkin.util.macro.GitCommit.getGitCommitHash())staticfinalread onlyGIT_HASH:String = funkin.util.macro.GitCommit.getGitCommitHash()

The current Git commit hash.

@:value(funkin.util.macro.GitCommit.getGitHasLocalChanges())staticfinalread onlyGIT_HAS_LOCAL_CHANGES:Bool = funkin.util.macro.GitCommit.getGitHasLocalChanges()

@:value(0.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_BAD_BONUS:Float = 0.0 / 100.0 * HEALTH_MAX

The amount of health the player gains when hitting a note with the BAD rating.

@:value(-4.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_GHOST_MISS_PENALTY:Float = -4.0 / 100.0 * HEALTH_MAX

The amount of health the player loses upon pressing a key when no note is there.

@:value(0.75 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_GOOD_BONUS:Float = 0.75 / 100.0 * HEALTH_MAX

The amount of health the player gains when hitting a note with the GOOD rating.

@:value(6.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_HOLD_BONUS_PER_SECOND:Float = 6.0 / 100.0 * HEALTH_MAX

The amount of health the player gains, while holding a hold note, per second.

@:value(0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_HOLD_DROP_PENALTY_MAX:Float = 0 / 100.0 * HEALTH_MAX

The maximum amount of health the player can lose upon letting go of a hold note.

@:value(0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_HOLD_DROP_PENALTY_PER_SECOND:Float = 0 / 100.0 * HEALTH_MAX

The amount of health the player loses upon letting go of a hold note, per second remaining.

@:value(2.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_KILLER_BONUS:Float = 2.0 / 100.0 * HEALTH_MAX

The amount of health the player gains when hitting a note with the KILLER rating.

@:value(2.0)staticfinalread onlyHEALTH_MAX:Float = 2.0

The player's maximum health. If the player is at this value, they can't gain any more health.

@:value(0.0)staticfinalread onlyHEALTH_MIN:Float = 0.0

The player's minimum health. If the player is at or below this value, they lose.

@:value(-15.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_MINE_PENALTY:Float = -15.0 / 100.0 * HEALTH_MAX

The amount of health the player loses upon hitting a mine.

@:value(-4.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_MISS_PENALTY:Float = -4.0 / 100.0 * HEALTH_MAX

The amount of health the player loses upon missing a note.

@:value(-1.0 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_SHIT_BONUS:Float = -1.0 / 100.0 * HEALTH_MAX

The amount of health the player gains when hitting a note with the SHIT rating. If negative, the player will actually lose health.

@:value(1.5 / 100.0 * HEALTH_MAX)staticfinalread onlyHEALTH_SICK_BONUS:Float = 1.5 / 100.0 * HEALTH_MAX

The amount of health the player gains when hitting a note with the SICK rating.

@:value(HEALTH_MAX / 2.0)staticfinalread onlyHEALTH_STARTING:Float = HEALTH_MAX / 2.0

The player's starting health.

@:value(160.0)staticfinalread onlyHIT_WINDOW_MS:Float = 160.0

The maximum interval within which a note can be hit, in milliseconds.

@:value(160.0)staticfinalread onlyHOLD_DROP_PENALTY_THRESHOLD_MS:Float = 160.0

The minimum amount of the hold note, in milliseconds, before the player gets penalized for letting go of it early.

@:value(true)staticfinalread onlyJUDGEMENT_BAD_COMBO_BREAK:Bool = true

@:value(false)staticfinalread onlyJUDGEMENT_GOOD_COMBO_BREAK:Bool = false

@:value(false)staticfinalread onlyJUDGEMENT_KILLER_COMBO_BREAK:Bool = false

@:value(true)staticfinalread onlyJUDGEMENT_SHIT_COMBO_BREAK:Bool = true

@:value(false)staticfinalread onlyJUDGEMENT_SICK_COMBO_BREAK:Bool = false

@:value(":")staticfinalread onlyLIBRARY_SEPARATOR:String = ":"

The separator between an asset library and the asset path.

@:value(funkin.util.macro.HaxelibVersions.getLibraryVersions())staticfinalread onlyLIBRARY_VERSIONS:Array<String> = funkin.util.macro.HaxelibVersions.getLibraryVersions()

The current library versions, as provided by hmm.

@:value(0.5)staticfinalread onlyLOST_FOCUS_VOLUME_MULTIPLIER:Float = 0.5

How much volume should be reduced on Application Focus Lost.

@:value(10)staticfinalread onlyMAX_PREVIOUS_WORKING_FILES:Int = 10

The maximum number of previous file paths for the Chart Editor to remember.

@:value(1)staticfinalinlineread onlyMAX_VIBRATION_AMPLITUDE:Float = 1

Max vibration amplitude.

@:value(0.25)staticfinalinlineread onlyMIN_VIBRATION_AMPLITUDE:Float = 0.25

Min vibration amplitude.

@:value(528 / 44100 * Constants.MS_PER_SEC)staticfinalread onlyMP3_DELAY_MS:Float = 528 / 44100 * Constants.MS_PER_SEC

All MP3 decoders introduce a playback delay of 528 samples, which at 44,100 Hz (samples per second) is ~12 ms.

@:value(1000)staticfinalread onlyMS_PER_SEC:Int = 1000

Constant for the number of milliseconds in a second.

@:value(5 * MS_PER_SEC)staticfinalread onlyNOTIFICATION_DISMISS_TIME:Int = 5 * MS_PER_SEC

Duration, in milliseconds, until toast notifications are automatically hidden.

@:value(NS_PER_US * US_PER_MS)staticfinalread onlyNS_PER_MS:Int = NS_PER_US * US_PER_MS

The number of nanoseconds in a millisecond.

@:value(NS_PER_US * US_PER_MS * MS_PER_SEC)staticfinalread onlyNS_PER_SEC:Int = NS_PER_US * US_PER_MS * MS_PER_SEC

The number of nanoseconds in a second.

@:value(1000)staticfinalread onlyNS_PER_US:Int = 1000

The number of nanoseconds in a microsecond.

@:value(0.45)staticfinalread onlyPIXELS_PER_MS:Float = 0.45

A magic number used when calculating scroll speed and note distances.

@:value(6)staticfinalread onlyPIXEL_ART_SCALE:Float = 6

The scale factor to use when increasing the size of pixel art graphics.

@:value(0.1)staticfinalread onlyPRELOADER_MIN_STAGE_TIME:Float = 0.1

Each step of the preloader has to be on screen at least this long.

0 = The preloader immediately moves to the next step when it's ready. 1 = The preloader waits for 1 second before moving to the next step.

The progress bare is automatically rescaled to match.

@:value(0.90)staticfinalread onlyRANK_EXCELLENT_THRESHOLD:Float = 0.90

@:value(0.60)staticfinalread onlyRANK_GOOD_THRESHOLD:Float = 0.60

@:value(0.80)staticfinalread onlyRANK_GREAT_THRESHOLD:Float = 0.80

@:value(1.00)staticfinalread onlyRANK_PERFECT_THRESHOLD:Float = 1.00

@:value("Funkin")staticfinalinlineread onlySAVE_NAME:String = "Funkin"

The name of our save slot.

@:value("funkin")staticfinalinlineread onlySAVE_NAME_LEGACY:String = "funkin"

The legacy save slot name, used for backwards compatibility.

@:value("FunkinCrew")staticfinalinlineread onlySAVE_PATH:String = "FunkinCrew"

The path where our save data will be stored.

@:value("ninjamuffin99")staticfinalinlineread onlySAVE_PATH_LEGACY:String = "ninjamuffin99"

The legacy path where our save data was saved. Used for backwards compatibility.

@:value(250.0)staticfinalread onlySCORE_HOLD_BONUS_PER_SECOND:Float = 250.0

The amount of score the player gains for every second they hold a hold note. A fraction of this value is granted every frame.

@:value(-125.0)staticfinalread onlySCORE_HOLD_DROP_PENALTY_PER_SECOND:Float = -125.0

The amount of score the player loses upon letting go of a hold note, per second remaining.

@:value(60)staticfinalread onlySECS_PER_MIN:Int = 60

Constant for the number of seconds in a minute.

sex per min

@:value(4)staticfinalread onlySTEPS_PER_BEAT:Int = 4

Number of steps in a beat. The note length of a step varies based on the time signature denominator.

@:value(48)staticfinalread onlySTRUMLINE_X_OFFSET:Float = 48

The horizontal offset of the strumline from the left edge of the screen.

@:value(24)staticfinalread onlySTRUMLINE_Y_OFFSET:Float = 24

The vertical offset of the strumline from the top edge of the screen.

@:value("Friday Night Funkin'")staticfinalread onlyTITLE:String = "Friday Night Funkin'"

The title of the game, for debug printing purposes. Change this if you're making an engine.

@:value(37.5)staticfinalread onlyTITLE_ATTRACT_DELAY:Float = 37.5

Time (in seconds) to wait on the Title Screen before entering the Attract State.

@:value("https://ninja-muffin24.itch.io/funkin")staticfinalread onlyURL_ITCH:String = "https://ninja-muffin24.itch.io/funkin"

Link to download the game on Itch.io.

@:value("https://www.kickstarter.com/projects/funkin/friday-night-funkin-the-full-ass-game/")staticfinalread onlyURL_KICKSTARTER:String = "https://www.kickstarter.com/projects/funkin/friday-night-funkin-the-full-ass-game/"

Link to the game's page on Kickstarter.

@:value("https://needlejuicerecords.com/en-ca/pages/friday-night-funkin")staticfinalread onlyURL_MERCH_FALLBACK:String = "https://needlejuicerecords.com/en-ca/pages/friday-night-funkin"

Link to buy merch for the game. This is usually fetched from the Newgrounds API but we use this as a fallback.

@:value("https://www.newgrounds.com/portal/view/770371")staticfinalread onlyURL_NEWGROUNDS:String = "https://www.newgrounds.com/portal/view/770371"

Link to play the game on Newgrounds.

@:value(1000)staticfinalread onlyUS_PER_MS:Int = 1000

The number of microseconds in a millisecond.

@:value(US_PER_MS * MS_PER_SEC)staticfinalread onlyUS_PER_SEC:Int = US_PER_MS * MS_PER_SEC

The number of microseconds in a second.

staticread onlyVERSION:String

The current version number of the game. Modify this in the project.xml file.

@:value("")staticfinalread onlyVERSION_SUFFIX:String = ""

A suffix to add to the game version. Add a suffix to prototype builds and remove it for releases.