= Readme
Discord - habeebweeb#6577
:toc:
:toclevels: 4

:pluginname: MeidoPhotoStudio
:photomode: Studio Mode
:config: BepInEx\config{backslash}{pluginname}

{pluginname} is an alternative to {photomode}.

Source can be found https://git.coder.horse/habeebweeb/COM3D2.MeidoPhotoStudio/src/dev[here]

_A full manual, which goes into more depth, will be included when {pluginname} 1.0.0 offcially releases._

== Installation

=== Requirements

{pluginname} is a BepInEx plugin. Get the latest release https://github.com/BepInEx/BepInEx/releases[here].

=== Installation

Move the contents of the `BepInEx` folder into `COM3D2\BepInEx`

== Files

{pluginname} reads and writes files to and from `{config}`.

[horizontal]
Translations:: Contains translation files.

Environments:: Contains saved environments.

Scenes:: Contains saved scenes.

Presets:: Contains poses and hand and face presets
+
_Sample presets are included._

Database:: Contains databases that {pluginname} uses.
+
--
`bg_ignore_list.json`:: List of BGs to ignore when building prop list.

`extra_dogu.json`:: List of extra props that I can't find through nei files

`mm_pose_list.json`:: Collection of in game poses to display.

`face_slider_limits.json`:: Upper limit of face slider values

_Each database file has comments at the top with further information._
--

`cache.dat`:: Cache file for menu files. (Generated at runtime).

`MeidoPhotoStudio.cfg`:: Configuration file. (Generated at runtime).

`mpstempscene`:: A save file that's made when pressing `Ctrl + S`.


NOTE: Environments, scenes, and each preset folder can have single level deep folders within them to allow for grouping.

== Hotkeys

=== Main
[%header, cols="1a, 3"]
|===

| Key | Action

| `F6`
| Activate/deactivate {pluginname} (Only in daily and edit mode)

| `Tab`
| Toggle main window

| `M`
| Toggle message box

| `H`
| Undress all maids

| `F8`
| Hide/show <<manual#scene-manager, scene manager>>

|===

=== Camera

[%header, cols="2a, 3"]
|===

| Key | Action

| `Q + R`
| Reset camera

| `Q + S`
| Save camera

| `Q + A`
| Load saved camera

| `Q + 1-5`
| Switch to another camera

| `Shift + Scroll`
| Zoom camera faster

| `Control + Scroll`
| Zoom camera slower

| `Shift + Middle Drag`
| Pan camera faster

| `Control + Middle Drag`
| Pan camera slower

|===

=== Drag Handles

==== General
[%header, cols="2a, 3"]
|===

| Key | Action

| `A + Left Click`
| Select object

| `D + Left Click`
| Delete object

| `C + Drag`
| Scale object

| `C + Double Click`
| Reset object scale

|===

==== Movement

[%header, cols="2a, 3"]
|===

| Key | Action

| `Z + Drag`
| Move object along XZ plane

| `Z + Control + Drag`
| Move object along the y axis

| `Z (+ Control) + Double Click`
| Reset object position

|===

==== Rotation

[%header, cols="2a, 3"]
|===

| Key | Action

| `X + Drag`
| Rotate object along XZ axis

| `Z + Shift + Drag`
| Rotate object along the *world* Y axis

| `X + Shift + Drag`
| Rotate object along its *local* Y axis

| `X + Double Click`
| Reset object rotation

|===

==== Scaling
[%header, cols="2a, 3"]
|===

| Key | Action

| `C + Drag`
| Scale object

| `C + Double Click`
| Reset object scale

|===

==== Maid

[%header, cols="2a, 3a"]
|===

| Key | Action

| `Drag`
| 

* Move arms and legs
** Moving from the hand/foot will move the arm/leg like a chain
** Moving from the elbow/knee will rotate the arm/leg using the shoulder/hip as the pivot point

* Move shoulders

| `Alt + Drag`
| 

.All along XZ axis
* Rotate torso
* Rotate pelvis
* Rotate head
* Rotate hands/feet

| `Alt + Shift + Drag`
| 

.All along local y axis
* Rotate torso
* Rotate pelvis
* Rotate head
* Rotate hands/feet
* Rotate arms/legs (when dragging on elbow/knee respectively)

| `Control + Alt + Drag`
|

* Move both eyes (When dragging on face)
* Move each breast

| `Control + Alt + Shift + Drag`
| 

* Move eyes in opposite directions
* Rotate breasts

| `Control + Alt + Double Click`
| Reset eyes and breasts position

| `Control + Drag`
| Rotate forearm/calf using elbow/knee as pivot point

| `Space`
| Rotate fingers/toes

| `Shift + Space`
| Rotate base of fingers/toes along local y axis

| `A + Left Click`
|

* Make selected maid the active maid and switch to pose tab (When clicking on torso)
* Make selected maid the active maid and switch to face tab (When clicking on face)

|===

== Changelog

=== {pluginname}.1.0.0-beta.3.1

==== Fixes

* Fix memory leak when saving scenes to a file
* Handle errors when saving scenes to prevent {pluginname} from locking up
* Fix issue where {pluginname} crashes when trying to save a non-existent background
** SceneCaputre hides the background by destroying it so it caused issues for {pluginname}

=== {pluginname}.1.0.0-beta.3

==== New Features
* Add camera Z rotation and FOV slider

* Add camera slots
** There are 5 slots that function similarly to quick save slots
** Cameras can be switched between through the GUI or by holding `Q + (1..5)`

* Add textfield and reset button to some sliders
** textfield and reset buttons were added to the camera pane and lights pane

* Add clothing mask radio buttons to change dressing for individual maids
** Functions the same way as pushing `H` to change all the maid's dressing

* Add user configurable face slider limits
** `Config\MeidoPhotoStudio\Database\face_slider_limits.json` has been added

==== Enhancements
* Add spine as attach points for props

==== Changes
* Make bone mode drag handles way smaller and more transparent

==== Fixes
* Fix face tab sliders/toggles doing nothing when using face shapekeys in ShapeAnimator
* Fix face blush toggles doing nothing
