Giter Club home page Giter Club logo

ptcmod's Introduction

ptcMod

Mod for pxtone Collage that adds some shiny features

READ THIS FIRST

The program is extremely invasive to ptCollage.
This project makes extensive use of unsafe code (read: raw memory manipulation, raw function calls into memory, ASM injection).
There is a chance it could explode your ptCollage at any moment and it has not been tested extensively.
I would recommend not actually using this while composing right now.
If you must, save often and make some backups - if it randomly segfaults or something your unsaved changes will be very lost.

ptcMod may be flagged by antiviruses as a side effect of how it works. The way ptcMod injects into ptCollage is similar to how some viruses hook other processes, and some antiviruses will detect this. Obviously I can say this repo (PieKing1215/ptcMod) and official builds do not actually contain malware, but if you want to be sure, look over the code and build from source.

Support

The goal is to continuously support at least both ptCollage 0.9.2.5 and whatever the latest version is.
Currently 0.9.2.5 and 0.9.4.54 (-> #22) are fully supported.

Basic usage

Have ptCollage.exe open and run the injector exe.
A popup should appear on ptCollage saying it injected, and a new menu option "PTC Mod" should appear in the menu bar.
You can edit the mod's settings there, or click "Uninject" to close ptcMod.
(ptcMod does not modify the actual ptCollage exe file, so you can also just close and reopen it to get rid of the mod)

Features

FPS Unlock

If enabled, removes the fps limiting present in ptc 0.9.2.5.
(note: the fps counter only goes to 99 in vanilla ptc, but this mod also patches it so it can display 3 digits)

Scroll Hook

Enables custom scrolling handling. Some other features require this, and will be grayed out if scroll hook is disabled.
Having this enabled means the window is redrawn each frame, which results in far more GPU usage.

Smooth Scroll

If enabled, the song is scrolled smoothly while playing instead of snapping to each measure.
Disable the vanilla "scroll" button in the player window to stop flickering.
Requires Scroll Hook.

Playhead

If enabled, draws a vertical line at the song's current position while playing.
Requires Scroll Hook.

Colored Units

Each unit can have a different color, instead of them all being orange.
Currently hardcoded but will become customizeable.
Currently only applies in unit view; will be extended to keyboard view at some point.

Volume Fade

If enabled, when the song is playing notes will have varying transparency based on their volume and velocity.
Currently only applies in unit view; will be extended to keyboard view at some point.
High performance impact.

Note Pulse

If enabled, notes will pulse whiteish when they are played.
Currently only applies in unit view; will be extended to keyboard view at some point.
Requires Scroll Hook.

Misc other things

Drag and drop pxtone web URLs ("Drop URLs" option)

Planned Features

(Also see the Project page)

Performance improvements (custom note rendering is extremely unoptimized)

More scrolling options - like snap to beat, or only scroll when the playhead is close to the right of the screen.

Playhead timing adjustment (so you can compensate for latency)

Remove/raise the project title editor character limit since it saves/loads longer names just fine.

Increase the number of buffer measures after the end of the song so you can scroll further.

Smooth line/curve tool for volume panel.

Auto backup tool that automatically backs up the opened song at certain intervals or something.

Tempo change tool - enter a list of tempo changes and it will reposition notes/events to match.

VST support

Soundfont support

Probably some more I can't think of.

Feel free to suggest more on the issue tracker!

Download

For "stable" releases (there are none right now), see Releases.
For dev builds: sign in to GitHub, go here, click the latest one, scroll down to "Artifacts" and download it.
Or download at https://nightly.link/PieKing1215/ptcMod/workflows/rust/master/ptcMod.zip
Unzip and run ptc-mod.exe to run.

License

pxtone © STUDIO PIXEL

This project contains no code from the original ptCollage or pxtone tools.

ptcMod licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

ptcmod's People

Contributors

pieking1215 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

slasco-solus

ptcmod's Issues

Make a nicer mod settings UI

A menu bar with a million drop down toggles is not particularly user friendly.
Settings that don't need to be changed frequently should go into a big preferences dialog or something.

Allow inputting longer project names

You can already hex edit a ptcop to give it a longer name, the 16 char limit is only enforced in the text field.
The format stores the project name as a 32 bit length and that size char array (unlike unit names which are a fixed array padded with null)

Soundfont support

Add the ability to load soundfonts and use presets as voices, played through a midi synth.
Non-modded ptc should be able to load and save the file without it breaking.
Soundfont files will not be saved into the ptcop, you will have to download them separately and put them in a folder next to your ptCollage.exe (not set in stone yet)

  • Hook ptc's sampling to inject synth samples.
  • Hook ptc events, convert to midi events, send to synth
  • Ability to create dummy voices with special names to indicate soundfont presets (eg. any voice starting with !sf0:48 is interpreted as bank 0 instrument 48)
  • A way to specify what soundfont files to load (consider using metadata instead of filename)
  • A way to specify which soundfont a voice should use (eg. !sf0-0:48 or something)
  • Fix volume pan being weird (currently does it through midi but I think ptc normally calculates it differently)

Occasional crashes on uninject

Needs testing/debugging to figure out what triggers it.
I think this might be a recent problem (like within a day), but not 100% sure.
Sometimes it prints segfault, sometimes not.

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.