{%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.