{%hackmd @themes/dracula %} This design doc is subject to change and is a WIP. ## Overview **AIM** To make a digital orchestrion that you can add/remove instruments to play from through the use of modules. Orchestrions are instruments that play music that sound like orchestras or bands. Like a one-man band. It's functionally similar to the [*HIT IT JOE*](https://forum.ss13.co/showthread.php?tid=16593) idea *KikiMofo* proposed, but fully automatic. Though, visually, it won't be as grand as a Fotoplayer. <iframe width="560" height="315" src="https://www.youtube.com/embed/kWVFEVWJMz8?si=QEJZertzuEbQt2sz" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> ## Context (Problems) ### Moving Multiple `Player Pianos` is Cumbersome Usually I have several (5-10) pianos for a song. These piano sets usually stay where I built them, unless I spend time stacking and moving pianos with mechcomp teleporters. While people using the `Old Piano` can just pull it along and play an equivalent song with just one object. ### No Unified Way of Playing Multiple Instruments Automatically and Reliably #### Mechcomp While you *can* have `Instrument Player` play instruments, it's not particularly easy to set up nor is it as flexible as the system the `Player Piano` uses. Might not sync well to the `Player Piano` in some situations? I haven't attempted to. #### Manual Instruments with Macros I don't know much about using instruments with macros, since I don't use them. You'd probably have to form a band with multiple people to have multiple instruments playing. Unless macros could quickly switch between instrument windows? Syncing between players, with some having a high ping, may be an issue? ### Issues with Insturment Macros These are secondhand accounts. - Not playing well when there's a high ping. - May lose focus of the instrument window while playing, causing the player's mob to move randomly. ## Goals - Compact multiple `Player Pianos` into one single object - Have the ability to play multiple instruments ## Non-Goals WIP ## Milestones - Functional GUI - 1:1 or greater parity with `Player Pianos` - Addition of a `Drum Kit` module, with accompanying audio files ## Existing Solutions - MechComp instruments - Manual insturments (with or without macros) - Player Piano ## Proposed Solution I will use the `Player Piano` as a base to build off of, keeping most of the backend while reworking the frontend. Sprites are not final. ### Modules - Adds functionality to the devices below. - Contains the necessary hardware and software for them to play sounds. - Each module is equivalent to one `Player Piano`. - Can be used to add other instruments sounds, I plan on doing a `Drum Kit` module. - Might be similar in desgin to PDA carts, but without the artwork since I don't know if I can draw the artwork - Each module costs 2 mats: - 0.8 Sturdy Metal - 0.6 Conductor - 0.6 Crystal ### Orchestrion <img src="https://i.imgur.com/SVe9MjR.png" alt="Orchestrion Image" style="width:400px;"/> - A base object to hold modules. - Click on it with a module to add it and use a crowbar to remove it. - Potentially allow specific module removal based on where the user clicked on the sprite or have it be done in it's GUI. - Holds up to 16 modules. - A large object like the `Player Piano`. - Removes cross-object linking, instead relying on MechComp to start multiple Orchestrions at the same time if the player wants to. - Costs 3 mats: - 1.6 Sturdy Metal - 0.7 Conductor - 0.7 Crystal ### Mini Orchestrion <img src="https://i.imgur.com/mBwFpKK.png" alt="Mini Orchestrion Image" style="width:400px;"/> - Like the Orchestrion, but smaller and portable. - Holds up to 8 modules. - Either the size would be bulky or normal. - Costs 2.5 mats: - 1.5 Sturdy Metal - 0.5 High Energy Conductor - 0.5 Crystal ### Both - Can change the color with paint cans. - Maybe change the GUI colors? - Would be subtyped from a core type, which holds logic shared between the Orchestrion types. ## Alternative Solutions - Add modules to the player piano. - Allow the player piano to play multiple concurrent notes at once. ## Remarks I'm asking before I commit to making it. Better to stop at the idea stage than when it's already made. I'm not really a spriter, these are probably the first sprites I ever made. I've yet to work on the in-hand sprite for the Mini Orchestrion. I think I can code decently? I can get more audio samples for various instruments from the **GeneralUser GS** SoundFont file I have. There's a [thread](https://forum.ss13.co/showthread.php?tid=21936) I made on the forums that had an earlier version of this doc. *Dhaidburt* and *valtsu0* provided their opinions, which I used to change the doc. Though I feel that lowering the module cost to 1 mat might break balance since `Player Pianos` cost 2 mats.