Giter VIP home page Giter VIP logo

faosdance's Introduction

FAOSDance GitHub Last Commit Build Status Maintainability

A stand-alone, free and open-source and extendable implementation of the Fruity Dance plugin from FL Studio.

Table Of Contents

Notice: As of v0.33.8-alpha, FAOSDance has an auto-updater. It'll handle downloading new versions for you.

Downloads
Latest GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)
GitHub Releases (by Release)

Comparison With Fruity Dance

Fruity Dance (Official Plugin for FL Studio) FAOSDance (This Program)
Interface FruityDance FAOSDance
Pros Ships with a top of the Image line DAW Free, stand-alone and more customizable, has a config file, completely scriptable
Cons Requires owning (paid or trial) and running FL Studio Cons Coming Soon
Not sold yet? How about now?

FAOSDance At Its Best

This is with the following extensions; Auto Action, Blend, Colour Overlay (rainbow), Filter (blur) and Shake


Basic Usage

Setting Up

  • Download the JAR from the latest release
  • Download the FL-Chan (or similar) sprite sheet and text file (can be found in the FL Studio files, or you can download a big version)
  • Run the program
    • Click the big "Open" button
      • Locate the FL-Chan (or similar) sprite sheet and text file
        • Double-click either one, or click it and then click "Open"

Running On Start-Up

If you want to run the program on start-up, you can using a couple scripts. These will find the latest version of the program in a directory and run it. It's a good idea to add a config, so it starts up without a prompt window.

  • Download the files in the scripts folder
    • Place FAOSDance.ps1 in the same directory as you put FAOSDance.jar in
    • Place FAOSDance.bat in C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
  • Open FAOSDance.bat and change ./FAOSDance.ps1 to the full path of where you put FAOSDance.ps1

Using The Config

The easiest way to use the config is to change your settings in the UI and then click the "Save Configuration" button. But if you want to edit the raw config as text, or share it, find your data directory using Finding Your App Data Directory, then open the "config.toml" file.

Config Options

Option Description
sprite.sheet (String) The path to the sprite sheet name to use, without any extensions
sprite.action (String) The action to start play through
sprite.fps (Integer) The amount of delay between each frame
sprite.opacity (Double) The opacity of the sprite
sprite.visible (Boolean) Whether or not the sprite is visible
sprite.solid (Boolean) Whether or not the sprite can be clicked and dragged
sprite.always_on_top (Boolean) Whether or not the program stays above other windows
sprite.scaling_type (Enum) The kind of scaling used for the sprite
animation.play (Boolean) Whether or not the animation is playing
animation.rewind (Boolean) Whether or not the animation is playing backwards
animation.frame (Integer) The current frame of animation
location.x (Integer) The location of the window along the X axis
location.y (Integer) The location of the window along the Y axis
rotation.z (Integer) The rotation of the sprite
size.width (Double) The width of the sprite
size.height (Double) The height of the sprite
reflection.visible (Boolean) Whether or not the reflection is visible
reflection.padding (Double) The amount of padding (centered) between the sprite and the reflection
reflection.fade.height (Double) The amount of the reflection hidden, from the bottom up
reflection.fade.opacity (Double) The opacity of the reflection
extensions.enabled (List (String)) A list of extension names to be enabled

Config Examples

[sprite]
sheet="path/to/file/without/extensions"
action="Zitabata"
fps=26

[size]
width=1.0
height=1.0

[reflection]
visible=false
[sprite]
sheet="path/to/file/without/extensions"
action="Held"
opacity=0.94

[size]
width=1.0
height=1.0

[reflection]
visible=false

[extensions]
enabled=["Spin"]

Extending The Program

The program can be extended with scripts written in the Ruby language. The scripts can be found in the settings UI under their own tab, where information and settings for each script can be found.

Using Scripts

Warning: Scripts can run any arbitrary code, always check scripts before using them!

To add new scripts, you'll need to follow Finding Your App Data Directory, then put the scripts in the "scripts" directory.

Writing Scripts

To begin writing scripts, you should probably have a basic understanding of the Ruby language, Swing (specifically the Graphics2D class) and object-oriented programming.

Beyond that, here are some general steps to set up a script:

  • Make a new file in the scripts directory
  • Open it in a text editor or IDE
  • Make a new class that extends DanceExtension
  • Add an initialize method and call super with the name, description and author of your script
  • Override the enable and disable methods to add logic to get/reset the script values when the script is enabled/disabled
  • If you want settings, override the settings method and add your widgets
  • Pick your entry point/s
    • Override the methods for them
      • Implement your logic
  • Use FAOSDance.registerExtension to register a new instance of your class

If you get stuck, there are some example scripts here.

Finding Your App Data Directory

Windows

The easiest way to find this directory by typing "%APPDATA%" into the File Manager or search bar.

Linux

GUI (Nautilus and forks)

First, open your file manager if it isn't already, then show hidden files from the View menu. Then go to home, and .config.

Terminal

First, fire up your terminal if it isn't already, then type; "cd ~/.config". If your terminal doesn't support tilde notation, then type this instead; "cd $HOME/.config".

faosdance's People

Contributors

deflatedpickle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

faosdance's Issues

Config File

A config file should be added, so the image and other settings could be set without having to choose them in the UI, so the program can be set to run on start-up.

Auto Updater

It'd be nice for the program to alert the user if it's out of date and supply a download button, that'd grab the latest release and place it besides the current Jar, then open the new Jar and close the old one.

Cannot run JAR

Error message when running from command prompt:
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.deflatedpickle.faosdance.MainKt.main(main.kt:22)
at com.deflatedpickle.faosdance.MainKt.main(main.kt)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.net.URL.host accessible: module java.base does not "opens java.net" to unnamed module @17f6480
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
at khttp.requests.GenericRequest.toIDN(GenericRequest.kt:198)
at khttp.requests.GenericRequest.makeRoute(GenericRequest.kt:208)
at khttp.requests.GenericRequest.(GenericRequest.kt:132)
at khttp.KHttp.request(KHttp.kt:60)
at khttp.KHttp.get(KHttp.kt:30)
at khttp.KHttp.get$default(KHttp.kt:29)
at com.deflatedpickle.faosdance.autoupdate.UpdateUtil.(UpdateUtil.kt:10)
... 2 more

Size Slider

A slider that'd change both the width and height should be added, and the independent ones should be moved to a collapsible panel.

Extension Script Run Order

Extension scripts are currently run alphabetically, there should be a better way in the program to change their run order.

Doesn't Start Top-Level

Even though the top-level checkbox is ticked when it opens, the program isn't actually top-level.

Tray Icon

The program should appear as a tray icon, with options to open the settings and centre the window.

Toggled Categories

The settings categories should be toggle-able, so they don't all have to be shown.

Window Sizing

The window should resize with the X and Y multipliers, as it just cuts off the image.

Shaking Script

There should be a shaking/intensifying script that'd shake the sprite in random angles, by a given multiplier.

Revert Config Button

There should be a button to revert all configuration options to their original values, or a button next to each option to revert just that value.

Animation Controls

Additional UI could be implemented in a group box to navigate the animations, such as; a play checkbox, a frame slider, and a reverse checkbox.

Open From Zip

The program should be able to read image and text files from a Zip.

Blur Option

There should be an option to blur the sprite.

Crash Reporter

It'd be nice to have a window pop-up for the rare occasion the program crashes and why it did so, so it doesn't have to be tested by running it from a shell.

Padding Pushes Out Of Window

With enough reflection padding, the sprite can be pushed partly outside the window. The window should resize as you change the amount of padding.

Settings Window Crashes

The settings window crashes to an invalid range property. I have no idea why this happens, though it is caused by one of the scripts. Needs more testing.

Scaling Type Option

There should be an option for the method used to scale the sprite. The options being; nearest-neighbour, bilinear and bicubic.

Problems with Linux

When running on Manjaro Cinnamon, the drawing flickers whilst not clearing old frames. Per-pixel transparency is also not working, so the window can be clicked anywhere inside the region.

Save To Config Button

There should be a button in the settings window that'd save the current slider values to the config.

Ruby Scripting

Support for running Ruby script's could be implemented, to automate the UI and change the variables at run-time without user interaction.

Edit: Jep was causing a hassle, switching to JRuby.

Lang Support

The program should support lang files, for localisation.

Out-Of-Window/Bounds Notification

For script testing reasons, it might be nice to have a tray notification if/when the sprite is partially or fully out of the viewable area of the window.

Window Resizing

When resizing, the window should keep the sprite centered around where it was by moving the window.

Scale On Mouse Wheel

Add a config option to scale the sprite with the mouse wheel, and a slider for the amount it's scaled by.

Extension Update Value Method

The scripts should have a method to be called when any config value is updated, which would pass in the name and new value, so the script can update its values.

Extension Config Support

The extensions should be able to save their values to a config, either the core one or their own one.

Toggled Held Option

There should be an option to toggle off/on the held animation when the sprite is picked up.

Drag-and-Drop Images

You should be able to drag-and-drop images on the "Open" button or main window to change the sprite sheet.

Reload Extension Button

There should be a button in the extensions tab to reload all or specific extensions, for development.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.