Not In The Groove Version 4.2.0

NotITG changelog - version 4.2.0

💡 New Features!

  • Changed how Lua errors are displayed
    • They now point to the correct line in your xml or ini files
    • They also tell you which file the error happened in
  • Metamods
    • They mod your mods
    • They can be applied only from the theme options, they can't be toggled from a simfile!
    • The "Flip" on the v4/1-april-fools build was a metamod
    • metaflip, metainvert, metaorient, metareverse, metastealth, metadizzy
    • They are just for fun, so they will disqualify your score
      • Imagine having MetaInvert on Red and Blue
  • Drag and drop songs support
    • Drag a song folder onto the game window, the song will be loaded while the game is running!
    • If you are in the song selection screen, the wheel will automatically go to the new song
    • The song will be placed in /Songs/_drag_and_drop/
      • Configurable in NotITGPrefs.ini: DragAndDropSongGroup
  • Preference Borderless
    • Can be freely used with Windowed=0 or 1!
    • Borderless + Windowed=0 will set the screen resolution to the wanted one, as usual, but clicking outside of the game won't hide it, like a regular borderless fullscreen!
    • Borderless + Windowed=1 will behave as usual, but the game will simply not have a border.
    • DISPLAY:SetBorderless( bool ) allow simfiles to toggle this! This is still controlled by the AllowWindowPos preference.
    • If the borderless status has been changed by DISPLAY:SetBorderless(), it will reset at the end of the song, just like other Lua window manipulations.
    • The status is also resetted by doing F3+8.
  • Preference ShowComboInEditor is fairly self explanatory!
    • Defaults to "on", can be adjusted from the editor's ESC -> Preferences menu.
  • Set custom song end time via lua with GAMESTATE:SetSongEndTime( seconds )
  • Preference EditorPlayModeOffset lets you choose how much time (seconds) behind the cursor the game will start playing from when you switch from editing mode to playtest mode.
    • Defaults to 1 to match normal StepMania behavior, but can be adjusted from the editor's ESC -> Preferences menu.
  • Added ScreenReadyCommand for gameplay
    • Runs before the songs starts
    • TopScreen is guaranteed to be available
    • xml <Layer ScreenReadyCommand="%function(self) local s = SCREENMAN:GetTopScreen() -- This will be ScreenGameplay end" />
  • Preference SleepCpuWhenUnfocused
    • Defaults to 1 (old behaviour)
    • Disable this if you want the game to run full speed at all times, including when you switch windows/alt-tab
  • Preference BothAtOnceAffectsDifficulties
    • Defaults to 1 (new behavior)
    • If BothAtOnce is on, changing difficulty at song select will change difficulty for both players to ensure they have the same difficulty.
  • Preference DisqualifyCover allows you to choose whether "Cover" (Hide Background) mod disqualifies your score.
    • Set to 1 by default, to match the existing openITG behavior
    • Will not have any effect if Disqualification preference is already 0
  • Preference FailOffForFirstStage allows you specify whether or not the first stage of a credit has "FailOff" enabled.
  • Preference DiscardFailOffFailedScore allows you to not save scores that were "failed" when playing using failoff.
  • Preference AutoDisableBothAtOnce causes BothAtOnce to be disabled automatically on ScreenTitle init, for arcade purposes.
  • New ScreenTitleMenu Code: BothAtOnce, that toggles the BothAtOnce, for arcade purposes.
  • F3+0 now toggles between edit mode and song select
  • Add function PlayerStageStats:GetCurPossibleDancePoints()
    • Which is very useful to calculate subtractive score in lua
  • Add functions to get/delete scores of courses
    • profile:GetHighScoreForCourseAndTrail(course, difficulty, stepsType)
    • profile:ClearHighScoresForCourseAndTrail(course, difficulty, stepsType)
    • profile:ClearHighScoresForCourse(course)
  • Add a method to get the stepsType of a trail
    • trail:GetStepsType()
  • actor:tween(t, f) now accepts a function
    • xml <Layer OnCommand="%function(self) self:tween(4, function(t) return someEase(t) end) end" />
  • Added GAMESTATE:OnlyOpenITGMods(true/false)
    • This restricts the mods to only the ones available in OpenITG
    • Will disqualify you
  • LUA_PATH is now set by the game
    • This means you can now use dofile, loadfile, etc to load .lua files
    • From anywhere in the game, it searches in the current theme folder
    • From within a song, the current song folder takes priority

⚡ Enhancements

  • Project Outfox provided some updates and enhancements
    • Several math optimizations
    • Library updates
    • Render stats now show memory usage
    • Thank you Project Outfox!
  • Theme switcher has been modified and should switch themes without error
    • Even Simply Love based themes!
  • ApplyModifiers now throws a Lua error if you give it an invalid player number
  • NOTESKIN:GetPath does not crash the game anymore
    • It returns the theme missing graphic if it can't find the noteskin element
  • Several memory leaks have been fixed. bad allocation errors should not happen anymore.
  • DISPLAY:SetWindowPosition[AndSize]() have been fixed for accounting window borders!
    • They used to resize the window wrongly, e.g. having a 640x480 game could result in a 636x471 game (because it accounted for Windows 10 borders)
    • They now resize the actual game, borderless or not!
    • They set the position relative to the actual game, and not the window (+ borders)
      • Their position is now accurate no matter if the game is borderless or not: the game will ALWAYS be at the same position, if we provide the same values to the methods. (So, a position of e.g. (40;40) will make the game be at the SAME place, borderless or not.)
    • Before this change, on Exschwasion's ETERNALLY file : Video
    • After this change (lua is unchanged): Video
  • GAMESTATE:GetRealPath() has been slightly tweaked for accounting specific edge cases (noticeeably with the presence of patch.zip) and should now always work no matter the setup.
  • The External memory (used by GAMESTATE:GetExternal() and :SetExternal()) got its size increased from 64 to 256.
  • The Toasty theme element is named
  • Lights had their indexes reverted to pre-v3.1
    • Parallel lights has been changed to account for this
  • Song offset keys (F11/F12) in Edit mode has been swapped
    • It now matches syncing offset in ScreenGameplay
  • Removed some very chatty log traces from FFmpeg
  • Several Edit Mode changes:
    • Current Beat, BPM, Time and mods display in Edit Mode does not move with TopScreen anymore
      • This means you can screen bounce as much as you want, the mods display will stay in place
    • Actor order for Edit Mode now matches actor order in Gameplay
    • Player 2 steps are now set, fixes errors in scripts querying both players
  • Attempts to use non-existing mods will print warnings to the Log
    • Edit Mode will also show a SystemMessage
    • Enable NotITGPrefs AlwaysShowUnknownModsSystemMessage if you want the message to be shown outside of Edit Mode as well
  • The maximum texture size's hardcoded limit has been increased from 2048 to 4096
  • doing SetTexture on a Shader with an invalid texture no longer crashes the game with "Nice texture, idiot."
  • Editor's "Jump to beat" text field now starts empty.
  • Score actors will no longer appear in the editor.
    • It is still possible to unhide them with SCREENMAN:GetTopScreen():GetChild('ScoreP1'):playcommand('Show')
  • BothAtOnce being enabled counts as joint premium (one credit needed to join both sides) for coin purposes.
  • Jump between spellcards in the editor using Alt + , / Alt + .
  • hidenoteflash timing has been greatly improved so it's now instant.
  • UpdateFunction now shows a dialog on error, it also unsets the function to prevent getting stuck.
    • Patch provided by XeroOl
  • player:IsUsingReverse() see whether the player is using reverse or not
    • It's just seeing the reverse of column 0 (left in dance)
    • Intended to be used by themes
  • Added sprite:GetNumStates()
  • Other Edit mode changes
    • Enabling MetaReverse lets you edit in reverse
    • Render distance past the receptors has been increased
    • Scroll animations are back, but are more snappier than before
  • All non-LGPL DLLs are now embedded in the .exe

⤴ New Mods

  • randomvanish has been split into two mods, randomize and vanish, which control the two aspects of the original mod seperately.
    • Vanish makes the arrows disappear for a bit at a spot in the middle of the screen.
    • Randomize shuffles the notes while they are within the "invisibe" region created by Vanish.
    • randomvanish is now a macro that enables both.
    • vanishoffset and randomizeoffset controls the location where the event takes place, randomvanishoffset controls both simultaneously.
    • Choose which turn mod is being applied to each player during the "randomize" event with Player:SetRandomVanishTransform( 'swapupdown' ).
    • The default is supershuffle, to match the original randomvanish implementation.
    • All existing turn modes are usable (left, right, mirror, swapleftright, swapupdown, couplesmirror, couplesswapsides, shuffle, softshuffle, spookyshuffle and supershuffle)
  • scrollspeedmult<n> multiply speed mod of a single column.
    • does not have a non-col specific version - attempting to apply it without a specified column will just apply all col specific versions.
    • default value is 100%. 50% is half scroll speed.
  • zigzag<n> and sawtooth<n>, sawtooth and zigzag waves are finally column specific.
    • these naturally come with accompanying periods and offsets, i.e. zigzagperiod<n> and zigzagoffset<n>
  • dizzy<n>, twirl<n> and roll<n> join the column-specific party! (notes that rotate in z, y and x axis over time as they approach, ending with a rotation of 0 at the targets)
  • manualnoteflash has a much better alias that more accurately describes what it does: hidenotepress. It's also now column specific.
  • drunk<n> in all axes, along with all associated period, spacing, speed and offset is now column specific.
  • beat<n> in all axes, along with all associated mult, period, cap and offset is now column specific.
  • boost<n> and brake<n> are now column specific.
  • Added aliases tanbumpyz, tanbumpyzsize,tanbumpyzperiod, tanbumpyzoffset
  • Added tanbumpysize<n>, tanbumpyzsize<n>, tanbumpyperiod<n>, tanbumpyzperiod<n>, tanbumpyoffset<n>, tanbumpyzoffset<n>, tanbumpyxsize<n>, tanbumpyxperiod<n>, tanbumpyxoffset<n>, tanbumpyysize<n>, tanbumpyyperiod<n>, tanbumpyyoffset<n>
  • Added orientoffset
    • It changes the direction the orient mod should reference
  • Added noreorient
    • Disables the orient behavior optimized for reverse and SCAR families
    • See bugfixes for more info

🐛 Bugfixes

  • Column specific wave works again
  • ScreenGameplay:SetLife( number ) actually works now
    • number must be a value between 0 and 1 inclusive
  • Theme elements in ScreenGameplay show up correctly again
    • Most notably the LifeMeter in the itg3 theme
  • Preference LastSeenVideoDriver now shows the correct driver in use
    • The string may have changed from what it used to be
    • This will make old modfiles using the old Nvidia checker work correctly on dual GPU (Intel+Nvidia) setups
  • Opposite playfield on battle made has been fixed (Is this correct?)
  • Turn mods in #ATTACKS actually work as they should now!
    • Reported and test file supplied by PCBoyGames, thanks!
  • Turn mods for Player 2 (and other aspects of Player 2 in general) in the editor are no longer completely broken.
  • Rainbow effect on BitmapText updates correctly upon theme change
  • SkewY is now properly reset in the editor.
  • GetRealPath issue is probably dealt with
  • GetTapNoteScoresForPlayer with TNS_HIT_MINE fixed
  • NoteTypeMults and HiddenRegions resets between songs in Course mode
  • Ctrl-O/Reveal in Explorer in Edit mode works for AdditionalSongFolders and AdditionalFolders too now
  • We don't normally do this, but we fixed an issue happening on newer versions of Wine where keyboard bindings weren't detected properly
  • SetNoteTypeMults now no longer requires an entry at beat 0 to work properly.
  • Combo above 2147483647 no longer crashes the game.
  • orient now reorients itself when when reverse and SCAR mods are enabled.
    • If you have used orient+reverse before, setting 314% confusionoffset is no longer required.
    • Several existing files are dependant of this change, a patch to affected files will follow
  • Fixed substractive scoring calculation
  • RageShaderProgram:define now works with #version directive
  • Certain edgecases with DrawFunctions resulted in weird rendereing, they are now gone.
  • tanbumpyxoffset actually works now
    • The old behavior was setting tanbumpyyoffset instead

👾 Known Issues

  • Reloading theme and textures (f3+r) still has the same issues as the old theme switcher

❤️ Simply Love changes

We are open for contributions! https://github.com/TaroNuke/Simply-Love-NotITG-ver.-/

  • Metamods! (Under "More Options" in the player options menu)