Compare commits
No commits in common. "main" and "conv-v1.2" have entirely different histories.
24 changed files with 532 additions and 583 deletions
230
Bit Mappings.md
230
Bit Mappings.md
|
@ -1,4 +1,4 @@
|
||||||
# UST Bit Mappings
|
# PINKCONNECTION2 Bit Mappings
|
||||||
|
|
||||||
This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar Install Manual, and the Chuck E. Cheese 2-Stage Install Manual.
|
This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar Install Manual, and the Chuck E. Cheese 2-Stage Install Manual.
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar In
|
||||||
|
|
||||||
### Rolfe Dewolfe & Earl Schmerle/Chuck E. Cheese
|
### Rolfe Dewolfe & Earl Schmerle/Chuck E. Cheese
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
||||||
| Mouth | 1 | 1 | 1 | 1-1 | TB1 1-2 H1 | No |
|
| Mouth | 1 | 1 | 1 | 1-1 | TB1 1-2 H1 | No |
|
||||||
| Left Ear | 2 | 2 | 9 | 1-9 | | |
|
| Left Ear | 2 | 2 | 9 | 1-9 | | |
|
||||||
|
@ -17,7 +17,7 @@ This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar In
|
||||||
| Eyes Right | 7 | 7 | 5 | 1-5 | TB1 9-10 H1 | No |
|
| Eyes Right | 7 | 7 | 5 | 1-5 | TB1 9-10 H1 | No |
|
||||||
| Head Left | 8 | 8 | 6 | 1-6 | TB1 3-4 H1 | No |
|
| Head Left | 8 | 8 | 6 | 1-6 | TB1 3-4 H1 | No |
|
||||||
| Head Right | 9 | 9 | 7 | 1-7 | TB1 5-6 H1 | No |
|
| Head Right | 9 | 9 | 7 | 1-7 | TB1 5-6 H1 | No |
|
||||||
| Head Up | 10 | 10 | 8 | 1-8 | TB1 7-8 H1 | No |
|
| Head Up | 10 | 10 | 8 | 1-8 | TB1 7-8 H1 | Yes |
|
||||||
| Left Arm Up | 11 | 11 | 11 | 1-11 | | |
|
| Left Arm Up | 11 | 11 | 11 | 1-11 | | |
|
||||||
| Left Arm Twist | 12 | 12 | 12 | 1-12 | | |
|
| Left Arm Twist | 12 | 12 | 12 | 1-12 | | |
|
||||||
| Left Elbow | 13 | 13 | 13 | 1-13 | | |
|
| Left Elbow | 13 | 13 | 13 | 1-13 | | |
|
||||||
|
@ -35,7 +35,7 @@ Earl's movements were removed during Concept Unification.
|
||||||
|
|
||||||
### Mitzi Mozzarella/Helen Henny
|
### Mitzi Mozzarella/Helen Henny
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
||||||
| Mouth | 1 | 23 | 185 | 2-35 | TB1 1-2 H5 | No |
|
| Mouth | 1 | 23 | 185 | 2-35 | TB1 1-2 H5 | No |
|
||||||
| Left Ear | 2 | 24 | 176 | 2-26 | | |
|
| Left Ear | 2 | 24 | 176 | 2-26 | | |
|
||||||
|
@ -46,7 +46,7 @@ Earl's movements were removed during Concept Unification.
|
||||||
| Eyes Right | 7 | 29 | 184 | 2-34 | TB1 9-10 H5 | No |
|
| Eyes Right | 7 | 29 | 184 | 2-34 | TB1 9-10 H5 | No |
|
||||||
| Head Left | 8 | 30 | 178 | 2-28 | TB1 3-4 H5 | No |
|
| Head Left | 8 | 30 | 178 | 2-28 | TB1 3-4 H5 | No |
|
||||||
| Head Right | 9 | 31 | 179 | 2-29 | TB1 5-6 H5 | No |
|
| Head Right | 9 | 31 | 179 | 2-29 | TB1 5-6 H5 | No |
|
||||||
| Head Up | 10 | 32 | 180 | 2-30 | TB1 7-8 H5 | No |
|
| Head Up | 10 | 32 | 180 | 2-30 | TB1 7-8 H5 | Yes |
|
||||||
| Left Arm Up | 11 | 33 | 173 | 2-23 | | |
|
| Left Arm Up | 11 | 33 | 173 | 2-23 | | |
|
||||||
| Left Arm Twist | 12 | 34 | 175 | 2-25 | | |
|
| Left Arm Twist | 12 | 34 | 175 | 2-25 | | |
|
||||||
| Left Elbow | 13 | 35 | 174 | 2-24 | | |
|
| Left Elbow | 13 | 35 | 174 | 2-24 | | |
|
||||||
|
@ -61,7 +61,7 @@ No movements were removed during Concept Unification.
|
||||||
|
|
||||||
### Fatz Geronimo/Mr. Munch
|
### Fatz Geronimo/Mr. Munch
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
||||||
| Mouth | 1 | 42 | 45 | 1-45 | TB1 1-2 H4 | No |
|
| Mouth | 1 | 42 | 45 | 1-45 | TB1 1-2 H4 | No |
|
||||||
| Left Eyelid | 2 | 43 | 41 | 1-41 | TB1 11-12 H4 | Yes |
|
| Left Eyelid | 2 | 43 | 41 | 1-41 | TB1 11-12 H4 | Yes |
|
||||||
|
@ -84,7 +84,7 @@ No movements were removed during Concept Unification.
|
||||||
|
|
||||||
### Beach Bear/Jasper T. Jowls
|
### Beach Bear/Jasper T. Jowls
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------------------- | ------------ |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------------------- | ------------ |
|
||||||
| Mouth | 1 | 58 | 166 | 2-16 | TB1 1-2 H2 | No |
|
| Mouth | 1 | 58 | 166 | 2-16 | TB1 1-2 H2 | No |
|
||||||
| Left Eyelid | 2 | 59 | 151 | 2-1 | TB1 11-12 H2 | Yes |
|
| Left Eyelid | 2 | 59 | 151 | 2-1 | TB1 11-12 H2 | Yes |
|
||||||
|
@ -92,7 +92,7 @@ No movements were removed during Concept Unification.
|
||||||
| Eyes Cross | 4 | 61 | 153 | 2-3 | | |
|
| Eyes Cross | 4 | 61 | 153 | 2-3 | | |
|
||||||
| Head Left | 5 | 62 | 156 | 2-6 | TB1 3-4 H2 & TB1 15-16 H2 | No |
|
| Head Left | 5 | 62 | 156 | 2-6 | TB1 3-4 H2 & TB1 15-16 H2 | No |
|
||||||
| Head Right | 6 | 63 | 157 | 2-7 | TB1 5-6 H2 & TB1 9-10 H2 | No |
|
| Head Right | 6 | 63 | 157 | 2-7 | TB1 5-6 H2 & TB1 9-10 H2 | No |
|
||||||
| Head Up | 7 | 64 | 158 | 2-8 | TB1 7-8 H2 | No |
|
| Head Up | 7 | 64 | 158 | 2-8 | TB1 7-8 H2 | Yes |
|
||||||
| Right Arm Raise | 8 | 65 | 161 | 2-11 | | |
|
| Right Arm Raise | 8 | 65 | 161 | 2-11 | | |
|
||||||
| Right Arm Twist | 9 | 66 | 162 | 2-12 | | |
|
| Right Arm Twist | 9 | 66 | 162 | 2-12 | | |
|
||||||
| Right Elbow | 10 | 67 | 163 | 2-13 | TB1 13-14 H2 | No |
|
| Right Elbow | 10 | 67 | 163 | 2-13 | TB1 13-14 H2 | No |
|
||||||
|
@ -107,7 +107,7 @@ No movements were removed during Concept Unification.
|
||||||
|
|
||||||
### Dook Larue/Pasqually
|
### Dook Larue/Pasqually
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
||||||
| Mouth | 1 | 74 | 30 | 1-30 | TB1 1-2 H3 | No |
|
| Mouth | 1 | 74 | 30 | 1-30 | TB1 1-2 H3 | No |
|
||||||
| Left Ear | 2 | 75 | 23 | 1-23 | | |
|
| Left Ear | 2 | 75 | 23 | 1-23 | | |
|
||||||
|
@ -131,7 +131,7 @@ Ear movements and Kick Drum were removed during Concept Unification.
|
||||||
|
|
||||||
### Billy Bob
|
### Billy Bob
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- |
|
||||||
| Mouth | 1 | 91 | 196 | 2-46 |
|
| Mouth | 1 | 91 | 196 | 2-46 |
|
||||||
| Left Eyelid | 2 | 92 | 197 | 2-47 |
|
| Left Eyelid | 2 | 92 | 197 | 2-47 |
|
||||||
|
@ -158,7 +158,7 @@ Entire bot was removed during Concept Unification.
|
||||||
|
|
||||||
### Looney Bird/Pizzacam
|
### Looney Bird/Pizzacam
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
|
||||||
| --------------- | ------------------------ | ------------------ | ------------- | ----------- |
|
| --------------- | ------------------------ | ------------------ | ------------- | ----------- |
|
||||||
| Mouth | 1 | 111 | 167 | 2-17 |
|
| Mouth | 1 | 111 | 167 | 2-17 |
|
||||||
| Left Eyelid | 2 | 112 | 191 | 2-41 |
|
| Left Eyelid | 2 | 112 | 191 | 2-41 |
|
||||||
|
@ -185,7 +185,7 @@ Hand movement was removed during Concept Unification.
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
|
||||||
| --------------------------------- | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
| --------------------------------- | ------------------ | ------------- | ----------- | ------------ | ------------ |
|
||||||
| Rolfe/Chuck E. Spot | 124 | 88 | 1-88 | TB1 15-16 H7 | No |
|
| Rolfe/Chuck Spot | 124 | 88 | 1-88 | TB1 15-16 H7 | No |
|
||||||
| Dook/Helen Spot | 125 | 86 | 1-86 | TB1 11-12 H7 | No |
|
| Dook/Helen Spot | 125 | 86 | 1-86 | TB1 11-12 H7 | No |
|
||||||
| Fatz/Munch Spot | 126 | 85 | 1-85 | TB2 9-10 H7 | No |
|
| Fatz/Munch Spot | 126 | 85 | 1-85 | TB2 9-10 H7 | No |
|
||||||
| Beach Bear/Jasper Spot | 127 | 82 | 1-82 | TB2 5-6 H7 | No |
|
| Beach Bear/Jasper Spot | 127 | 82 | 1-82 | TB2 5-6 H7 | No |
|
||||||
|
@ -273,11 +273,11 @@ Hand movement was removed during Concept Unification.
|
||||||
| Snare Drum Light | 179 | 230 | 2-80 | | |
|
| Snare Drum Light | 179 | 230 | 2-80 | | |
|
||||||
| Kick Drum Light | 180 | 241 | 2-91 | TB1 5-6 H7 | No |
|
| Kick Drum Light | 180 | 241 | 2-91 | TB1 5-6 H7 | No |
|
||||||
|
|
||||||
## Cyberamics
|
## R12 (Road/1-Stage/2-Stage)
|
||||||
|
|
||||||
### Chuck E. Cheese
|
### Chuck E. Cheese
|
||||||
|
|
||||||
| Movement Name | Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
||||||
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
||||||
| Mouth | 1 | 1 | 1 | TB1 1-2 H1 |
|
| Mouth | 1 | 1 | 1 | TB1 1-2 H1 |
|
||||||
| Head Left | 2 | 2 | 2 | TB1 3-4 H1 |
|
| Head Left | 2 | 2 | 2 | TB1 3-4 H1 |
|
||||||
|
@ -290,7 +290,7 @@ Hand movement was removed during Concept Unification.
|
||||||
|
|
||||||
### Helen Henny/Guest Star
|
### Helen Henny/Guest Star
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
||||||
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
||||||
| Mouth | 1 | 9 | 65 | TB1 1-2 H5 |
|
| Mouth | 1 | 9 | 65 | TB1 1-2 H5 |
|
||||||
| Head Left | 2 | 10 | 66 | TB1 3-4 H5 |
|
| Head Left | 2 | 10 | 66 | TB1 3-4 H5 |
|
||||||
|
@ -303,7 +303,7 @@ Hand movement was removed during Concept Unification.
|
||||||
|
|
||||||
### Mr. Munch
|
### Mr. Munch
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
||||||
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
||||||
| Mouth | 1 | 17 | 49 | TB1 1-2 H4 |
|
| Mouth | 1 | 17 | 49 | TB1 1-2 H4 |
|
||||||
| Head Left | 2 | 18 | 50 | TB1 3-4 H4 |
|
| Head Left | 2 | 18 | 50 | TB1 3-4 H4 |
|
||||||
|
@ -316,7 +316,7 @@ Hand movement was removed during Concept Unification.
|
||||||
|
|
||||||
### Jasper T. Jowls
|
### Jasper T. Jowls
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
||||||
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
||||||
| Mouth | 1 | 25 | 17 | TB1 1-2 H2 |
|
| Mouth | 1 | 25 | 17 | TB1 1-2 H2 |
|
||||||
| Head Left | 2 | 26 | 18 | TB1 3-4 H2 |
|
| Head Left | 2 | 26 | 18 | TB1 3-4 H2 |
|
||||||
|
@ -329,7 +329,7 @@ Hand movement was removed during Concept Unification.
|
||||||
|
|
||||||
### Pasqually
|
### Pasqually
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
||||||
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
|
||||||
| Mouth | 1 | 33 | 33 | TB1 1-2 H3 |
|
| Mouth | 1 | 33 | 33 | TB1 1-2 H3 |
|
||||||
| Head Left | 2 | 34 | 34 | TB1 3-4 H3 |
|
| Head Left | 2 | 34 | 34 | TB1 3-4 H3 |
|
||||||
|
@ -339,197 +339,3 @@ Hand movement was removed during Concept Unification.
|
||||||
| Eyelids | 6 | 38 | 38 | TB1 11-12 H3 |
|
| Eyelids | 6 | 38 | 38 | TB1 11-12 H3 |
|
||||||
| Right Arm | 7 | 39 | 39 | TB1 13-14 H3 |
|
| Right Arm | 7 | 39 | 39 | TB1 13-14 H3 |
|
||||||
| Left Arm | 8 | 40 | 36 | TB1 7-8 H3 |
|
| Left Arm | 8 | 40 | 36 | TB1 7-8 H3 |
|
||||||
|
|
||||||
### Props
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| ------------------------- | ------------------ | ------------- | ------------ |
|
|
||||||
| Warblettes/Flower Mouth 1 | 41 | 9 | TB2 1-2 H1 |
|
|
||||||
| Flower Mouth 2 | 42 | 46 | TB2 11-12 H3 |
|
|
||||||
| Flower Mouth 3 | 43 | 62 | TB2 11-12 H4 |
|
|
||||||
| Warblettes Body Rock/Wink | 44 | 10 | TB2 3-4 H1 |
|
|
||||||
| Flag 1 | 45 | 74 | TB2 3-4 H5 |
|
|
||||||
| Flag 2 | 46 | 75 | TB2 5-6 H5 |
|
|
||||||
| Flag 3 | 47 | 76 | TB2 7-8 H5 |
|
|
||||||
| Flag 4 | 48 | 77 | TB2 9-10 H5 |
|
|
||||||
| Flag 5 | 49 | 78 | TB2 11-12 H5 |
|
|
||||||
|
|
||||||
### Spots
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| ----------------------- | ------------------ | ------------- | ------------ |
|
|
||||||
| Chuck E. Spot | 50 | 104 | TB1 15-16 H7 |
|
|
||||||
| Helen Spot | 51 | 102 | TB1 11-12 H7 |
|
|
||||||
| Munch Spot | 52 | 109 | TB2 9-10 H7 |
|
|
||||||
| Jasper Spot | 53 | 107 | TB2 5-6 H7 |
|
|
||||||
| Pasqually Spot | 54 | 100 | TB1 7-8 H7 |
|
|
||||||
| Wink Spot | 55 | 123 | TB2 5-6 H8 |
|
|
||||||
| Flowers/Warblettes Spot | 56 | 41 | TB2 1-2 H3 |
|
|
||||||
|
|
||||||
### Curtains
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| ------------------------ | ------------------ | ------------- | ------------ |
|
|
||||||
| CEC Stage Curtain Open | 57 | 27 | TB2 5-6 H2 |
|
|
||||||
| CEC Stage Curtain Close | 58 | 28 | TB2 7-8 H2 |
|
|
||||||
| Main Stage Curtain Open | 59 | 29 | TB2 9-10 H2 |
|
|
||||||
| Main Stage Curtain Close | 60 | 30 | TB2 11-12 H2 |
|
|
||||||
| 1-Stage Curtain Open | 61 | 25 | TB2 1-2 H2 |
|
|
||||||
| 1-Stage Curtain Close | 62 | 26 | TB2 3-4 H2 |
|
|
||||||
| Turntable Bot Side | 63 | 57 | TB2 1-2 H4 |
|
|
||||||
| Turntable Live Side | 64 | 58 | TB2 3-4 H4 |
|
|
||||||
|
|
||||||
### Floods
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| ------------------------- | ------------------ | ------------- | ------------ |
|
|
||||||
| CEC Stage Red Overhead | 65 | 120 | TB1 15-16 H8 |
|
|
||||||
| CEC Stage Amber Overhead | 66 | 116 | TB1 7-8 H8 |
|
|
||||||
| CEC Stage Blue Overhead | 67 | 127 | TB2 13-14 H8 |
|
|
||||||
| Main Stage Red Overhead | 68 | 118 | TB1 11-12 H8 |
|
|
||||||
| Main Stage Amber Overhead | 69 | 117 | TB1 9-10 H8 |
|
|
||||||
| Main Stage Blue Overhead | 70 | 119 | TB1 13-14 H8 |
|
|
||||||
|
|
||||||
### Backdrop
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| -------------- | ------------------ | ------------- | ---------- |
|
|
||||||
| Red Backdrop | 71 | 114 | TB1 3-4 H8 |
|
|
||||||
| Amber Backdrop | 72 | 113 | TB1 1-2 H8 |
|
|
||||||
| Blue Backdrop | 73 | 115 | TB1 5-6 H8 |
|
|
||||||
|
|
||||||
### Organ
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| ----------------- | ------------------ | ------------- | ------------ |
|
|
||||||
| Organ Face Amber | 74 | 110 | TB2 11-12 H7 |
|
|
||||||
| Organ Face Blue | 75 | 108 | TB2 7-8 H7 |
|
|
||||||
| Organ Legs Outer | 76 | 101 | TB1 9-10 H7 |
|
|
||||||
| Organ Legs Middle | 77 | 106 | TB2 3-4 H7 |
|
|
||||||
| Organ Legs Inner | 78 | 111 | TB2 13-14 H7 |
|
|
||||||
|
|
||||||
### Special
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
|
|
||||||
| -------------------- | ------------------ | ------------- | ------------ |
|
|
||||||
| CEC Star/Rope Lights | 79 | 103 | TB1 13-14 H7 |
|
|
||||||
| CEC Sign | 80 | 105 | TB2 1-2 H7 |
|
|
||||||
| Jukebox Topper | 81 | 125 | TB2 9-10 H8 |
|
|
||||||
| Fiber Curtain | 82 | 121 | TB2 1-2 H8 |
|
|
||||||
| Band Sign | 83 | 126 | TB2 11-12 H8 |
|
|
||||||
| Kick Drum | 84 | 99 | TB1 5-6 H7 |
|
|
||||||
| Gobo Light | 85 | 124 | TB2 7-8 H8 |
|
|
||||||
| Helicopter/Gemini | 86 | 122 | TB2 3-4 H8 |
|
|
||||||
| Live Flood | 87 | 97 | TB1 1-2 H7 |
|
|
||||||
| Live Strobe | 88 | 98 | TB1 3-4 H7 |
|
|
||||||
|
|
||||||
## Studio C
|
|
||||||
|
|
||||||
### Chuck E.
|
|
||||||
|
|
||||||
| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | DTU Bit | 16M |
|
|
||||||
| ----------------- | ------------------------ | ------------------ | ------------- | ------- | --- |
|
|
||||||
| Mouth | 1 | 1 | 21 | 1-21 | Yes |
|
|
||||||
| Nose | 2 | 2 | 28 | 1-28 | No |
|
|
||||||
| Eyelids Up | 3 | 3 | 25 | 1-25 | No |
|
|
||||||
| Eyelids Down | 4 | 4 | 24 | 1-24 | Yes |
|
|
||||||
| Eyes Left | 5 | 5 | 26 | 1-26 | Yes |
|
|
||||||
| Eyes Right | 6 | 6 | 27 | 1-27 | Yes |
|
|
||||||
| Eyebrows Up | 7 | 7 | 29 | 1-29 | No |
|
|
||||||
| Eyebrows Down | 8 | 8 | 30 | 1-30 | No |
|
|
||||||
| Ears | 9 | 9 | 31 | 1-31 | No |
|
|
||||||
| Head Turn Left | 10 | 10 | 18 | 1-18 | Yes |
|
|
||||||
| Head Turn Right | 11 | 11 | 19 | 1-19 | Yes |
|
|
||||||
| Head Tilt Left | 12 | 12 | 23 | 1-23 | No |
|
|
||||||
| Head Tilt Right | 13 | 13 | 22 | 1-22 | No |
|
|
||||||
| Head Up | 14 | 14 | 20 | 1-20 | Yes |
|
|
||||||
| Left Arm Out | 15 | 15 | 6 | 1-6 | No |
|
|
||||||
| Left Arm Swing | 16 | 16 | 7 | 1-7 | Yes |
|
|
||||||
| Left Arm Forward | 17 | 17 | 11 | 1-11 | No |
|
|
||||||
| Left Elbow | 18 | 18 | 8 | 1-8 | Yes |
|
|
||||||
| Left Wrist | 19 | 19 | 9 | 1-9 | No |
|
|
||||||
| Left Hand Wave | 20 | 20 | 10 | 1-10 | Yes |
|
|
||||||
| Right Arm Out | 21 | 21 | 1 | 1-1 | No |
|
|
||||||
| Right Arm Swing | 22 | 22 | 2 | 1-2 | Yes |
|
|
||||||
| Right Arm Forward | 23 | 23 | 17 | 1-17 | No |
|
|
||||||
| Right Elbow | 24 | 24 | 3 | 1-3 | Yes |
|
|
||||||
| Right Wrist | 25 | 25 | 4 | 1-4 | No |
|
|
||||||
| Right Hand Wave | 26 | 26 | 5 | 1-5 | Yes |
|
|
||||||
| Body Forward | 27 | 27 | 12 | 1-12 | Yes |
|
|
||||||
| Body Turn Left | 28 | 28 | 16 | 1-16 | Yes |
|
|
||||||
| Body Turn Right | 29 | 29 | 15 | 1-15 | Yes |
|
|
||||||
| Body Tilt Left | 30 | 30 | 13 | 1-13 | No |
|
|
||||||
| Body Tilt Right | 31 | 31 | 14 | 1-14 | No |
|
|
||||||
| Foot Tap | 32 | 32 | 32 | 1-32 | No |
|
|
||||||
|
|
||||||
### Props
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| ------------- | ------------------ | ------------- | ------- |
|
|
||||||
| Bird Mouth | 33 | 33 | 1-33 |
|
|
||||||
| Bird Wings | 34 | 36 | 1-36 |
|
|
||||||
| Bird Bow | 35 | 34 | 1-34 |
|
|
||||||
| Bird Turn | 36 | 35 | 1-35 |
|
|
||||||
| Phone Swing | 37 | 40 | 1-40 |
|
|
||||||
| Clock Forward | 38 | 160 | 2-10 |
|
|
||||||
| Clock Reverse | 39 | 161 | 2-11 |
|
|
||||||
|
|
||||||
### Spots
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| ------------- | ------------------ | ------------- | ------- |
|
|
||||||
| Chuck E. Spot | 40 | 177 | 2-27 |
|
|
||||||
| Bird Spot | 41 | 178 | 2-28 |
|
|
||||||
|
|
||||||
### Curtains
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| -------------- | ------------------ | ------------- | ------- |
|
|
||||||
| Curtains Open | 42 | 44 | 1-44 |
|
|
||||||
| Curtains Close | 43 | 45 | 1-45 |
|
|
||||||
|
|
||||||
### Floods
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| ------------------------ | ------------------ | ------------- | ------- |
|
|
||||||
| CEC Red Floods | 44 | 151 | 2-1 |
|
|
||||||
| CEC Amber Floods | 45 | 154 | 2-4 |
|
|
||||||
| CEC Green Floods | 46 | 152 | 2-2 |
|
|
||||||
| CEC Blue Floods | 47 | 153 | 2-3 |
|
|
||||||
| Blue Screen Red Floods | 48 | 155 | 2-5 |
|
|
||||||
| Blue Screen Amber Floods | 49 | 157 | 2-7 |
|
|
||||||
| Blue Screen Green Floods | 50 | 156 | 2-6 |
|
|
||||||
| Room Pink Floods | 51 | 181 | 2-31 |
|
|
||||||
| Room Amber Floods | 52 | 180 | 2-30 |
|
|
||||||
| Room Blue Floods | 53 | 182 | 2-32 |
|
|
||||||
|
|
||||||
### Monitor
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| ------------- | ------------------ | ------------- | ------- |
|
|
||||||
| Monitor Pink | 54 | 172 | 2-22 |
|
|
||||||
| Monitor Green | 55 | 174 | 2-24 |
|
|
||||||
| Monitor Blue | 56 | 173 | 2-23 |
|
|
||||||
| Monitor Chase | 57 | 171 | 2-21 |
|
|
||||||
|
|
||||||
### Desk
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| ----------- | ------------------ | ------------- | ------- |
|
|
||||||
| Desk Outer | 58 | 166 | 2-16 |
|
|
||||||
| Desk Middle | 59 | 165 | 2-15 |
|
|
||||||
| Desk Inner | 60 | 164 | 2-14 |
|
|
||||||
|
|
||||||
### Special
|
|
||||||
|
|
||||||
| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
|
|
||||||
| -------------------- | ------------------ | ------------- | ------- |
|
|
||||||
| Clock Neon | 61 | 159 | 2-9 |
|
|
||||||
| City Lights | 62 | 163 | 2-13 |
|
|
||||||
| Phone Handset Lights | 63 | 167 | 2-17 |
|
|
||||||
| Phone Dial Lights | 64 | 168 | 2-18 |
|
|
||||||
| Gemini | 65 | 176 | 2-26 |
|
|
||||||
| On Air Sign | 66 | 169 | 2-19 |
|
|
||||||
| Applause Sign | 67 | 170 | 2-20 |
|
|
||||||
| Strobe | 68 | 162 | 2-12 |
|
|
||||||
| Live Floods | 69 | 179 | 2-29 |
|
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
# Future Goals
|
# Future Goals
|
||||||
|
|
||||||
## USTConverter
|
## PC2Converter
|
||||||
|
|
||||||
- .SHW (ProgramBlue) input format
|
- .SHW (ProgramBlue) input format
|
||||||
- .3ST/.R12/.C&R (APS) input format
|
- .3ST/.R12/.C&R (APS) input format
|
||||||
- Biphase (Pianocorder and Cyberstar) from tape input format
|
- Biphase (Pianocorder and Cyberstar) from tape input format
|
||||||
- Studio C from Floppy Disk input format
|
- Studio C from Floppy Disk input format
|
||||||
|
- UST Full Stage to Single Character Stripper
|
||||||
|
|
||||||
## PC2Player
|
## PC2Player
|
||||||
|
|
||||||
- burn the damn thing to the ground and start over
|
- ~~make the program~~ done!!
|
||||||
|
- fix memory leak issue
|
||||||
|
- make audio player work on windows
|
||||||
|
|
||||||
## Firmwares
|
## Firmwares
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\USTConverter\USTConverter.csproj" />
|
<ProjectReference Include="..\PC2Converter\PC2Converter.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using Eto.Forms;
|
using Eto.Forms;
|
||||||
|
|
||||||
namespace USTConverter.Gtk
|
namespace PC2Converter.Gtk
|
||||||
{
|
{
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
|
@ -3,11 +3,11 @@
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>USTConverter</string>
|
<string>PC2Converter</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>me.kawaiizenbo.USTConverter</string>
|
<string>com.example.PC2Converter</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.3</string>
|
<string>1.0</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>10.15</string>
|
<string>10.15</string>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
|
@ -8,7 +8,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\USTConverter\USTConverter.csproj" />
|
<ProjectReference Include="..\PC2Converter\PC2Converter.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using Eto.Forms;
|
using Eto.Forms;
|
||||||
|
|
||||||
namespace USTConverter.Mac
|
namespace PC2Converter.Mac
|
||||||
{
|
{
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
|
@ -7,7 +7,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\USTConverter\USTConverter.csproj" />
|
<ProjectReference Include="..\PC2Converter\PC2Converter.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using Eto.Forms;
|
using Eto.Forms;
|
||||||
|
|
||||||
namespace USTConverter.Wpf
|
namespace PC2Converter.Wpf
|
||||||
{
|
{
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
499
PC2Converter/PC2Converter/MainForm.cs
Normal file
499
PC2Converter/PC2Converter/MainForm.cs
Normal file
|
@ -0,0 +1,499 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Numerics;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
using Eto.Forms;
|
||||||
|
using Eto.Drawing;
|
||||||
|
|
||||||
|
namespace PC2Converter
|
||||||
|
{
|
||||||
|
public partial class MainForm : Form
|
||||||
|
{
|
||||||
|
DropDown InputTypeSelector = new DropDown();
|
||||||
|
DropDown OutputTypeSelector = new DropDown();
|
||||||
|
DropDown CharacterSelector = new DropDown();
|
||||||
|
TextBox FilePathTextBox = new TextBox();
|
||||||
|
Button BrowseFileButton = new Button { Text = "Browse", Width = 100 };
|
||||||
|
Button ConvertButton = new Button { Text = "Convert", Width = 100 };
|
||||||
|
CheckBox CompressAudioCheckBox = new CheckBox { Text = "Compress Audio", Width = 100 };
|
||||||
|
|
||||||
|
string[] InputTypes = {
|
||||||
|
"RSHW File (RR Engine)", "CSHW File (RR Engine)", "SSHW File (RR Engine)"/*,
|
||||||
|
"3ST File (APS)", "ROA/R12/C&R File (APS)"*/
|
||||||
|
};
|
||||||
|
|
||||||
|
string[] RAE3stOutputTypes = { "UST 32 Bits (Single Bot RAE/3st)", "UST 8 Bits (Single Bot Cybers Rosetta)", "UST 256 Bits (Full RAE/3st)" , "UST 256 Bits (Full Cybers Rosetta)" };
|
||||||
|
string[] CyberOutputTypes = { "UST 8 Bits (Single Bot Cybers)", "UST 256 Bits (Full Cybers)" };
|
||||||
|
string[] StudioCOutputTypes = { "UST 32 Bits (Single Bot Studio C)", "UST 256 Bits (Full Studio C)" };
|
||||||
|
|
||||||
|
string[] RAE3stCharacters = { "Rolfe/Chuck E.", "Mitzi/Helen", "Fatz/Munch", "Beach Bear/Jasper", "Dook/Pasqually", "Billy Bob", "Looney Bird/PizzaCam"};
|
||||||
|
string[] CyberCharacters = { "Chuck E.", "Helen/Guest Star", "Munch", "Jasper", "Pasqually" };
|
||||||
|
string[] StudioCCharacters = { "Chuck E." };
|
||||||
|
|
||||||
|
int[][] SC_CyberBitMapR12 =
|
||||||
|
{
|
||||||
|
/* chuck */ new int[]{ 1, 2, 3, 4, 8, 5, 6, 7 },
|
||||||
|
/* helen */ new int[]{ 65, 66, 67, 68, 72, 69, 70, 71 },
|
||||||
|
/* munch */ new int[]{ 49, 50, 51, 56, 53, 54, 55, 52 },
|
||||||
|
/* jasper */ new int[]{ 17, 18, 19, 20, 24, 21, 22, 23 },
|
||||||
|
/* pasqually */ new int[]{ 33, 34, 35, 40, 37, 38, 39, 36 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int[][] SC_CyberBitMapRosetta =
|
||||||
|
{
|
||||||
|
/* chuck */ new int[]{ 1, 6, 7, 8, 4, 5, 2, 19 },
|
||||||
|
/* helen */ new int[]{ 185, 178, 179, 180, 183, 184, 181, 169 },
|
||||||
|
/* munch */ new int[]{ 45, 54, 55, 43, 44, 41, 58, 59 },
|
||||||
|
/* jasper */ new int[]{ 166, 156, 157, 158, 156, 157, 151, 163 },
|
||||||
|
/* pasqually */ new int[]{ 30, 25, 21, 28, 29, 26, 31, 35 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int[][] SC_RAE3stBitMap =
|
||||||
|
{
|
||||||
|
/* rolfe/chuck */ new int[]{ 1, 9, 10, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 17, 18, 19, 14, 15, 16, 20, 36, 37 },
|
||||||
|
/* mitzi/helen */ new int[]{ 185, 176, 177, 181, 182, 183, 184, 178, 179, 180, 173, 175, 174, 168, 170, 169, 186, 187, 188 },
|
||||||
|
/* fatz/munch */ new int[]{ 45, 41, 42, 43, 44, 54, 55, 51, 52, 53, 57, 59, 58, 60, 61, 62 },
|
||||||
|
/* beach bear/jasper */ new int[]{ 166, 151, 152, 153, 156, 157, 158, 161, 162, 163, 164, 154, 155, 159, 160, 165 },
|
||||||
|
/* dook/pasqually */ new int[]{ 30, 23, 24, 26, 27, 28, 29, 25, 21, 22, 33, 35, 34, 31, 32, 63, 64 },
|
||||||
|
/* billy bob */ new int[]{ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 189, 190, 194, 211, 212, 213 },
|
||||||
|
/* looney/pizzacam */ new int[]{ 167, 191, 192, 193, 171, 172, 48 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int[][] SC_StudioCBitMap =
|
||||||
|
{
|
||||||
|
/* chuck e. */ new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int[] FS_RAE3stBitMap = {
|
||||||
|
1, 9, 10, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 17, 18, 19, 14, 15, 16, 20, 36, 37,
|
||||||
|
185, 176, 177, 181, 182, 183, 184, 178, 179, 180, 173, 175, 174, 168, 170, 169, 186, 187, 188,
|
||||||
|
45, 41, 42, 43, 44, 54, 55, 51, 52, 53, 57, 59, 58, 60, 61, 62,
|
||||||
|
166, 151, 152, 153, 156, 157, 158, 161, 162, 163, 164, 154, 155, 159, 160, 165,
|
||||||
|
30, 23, 24, 26, 27, 28, 29, 25, 21, 22, 33, 35, 34, 31, 32, 63, 64,
|
||||||
|
196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 189, 190, 194, 211, 212, 213,
|
||||||
|
167, 191, 192, 193, 171, 172, 48,
|
||||||
|
39, 38, 47, 46, 49, 50,
|
||||||
|
88, 86, 85, 82, 242, 84, 83, 81, 238, 239, 240, 87,
|
||||||
|
93, 94, 91, 92, 89, 90,
|
||||||
|
229, 228, 227, 226, 224, 223, 221, 219, 218, 217, 216, 222,
|
||||||
|
235, 232, 231, 234, 236, 237, 233, 242, 243,
|
||||||
|
67, 68, 69, 66, 71, 72, 73,
|
||||||
|
78, 77, 76, 79, 80,
|
||||||
|
220, 244, 245, 225, 230, 241
|
||||||
|
};
|
||||||
|
|
||||||
|
int[] CyberRosettaInvertedBits = { 2, 8, 181, 169, 41, 59, 58, 151, 158, 26, 35, 31 };
|
||||||
|
int[] RAE3stAPSDescrambleTable = { 10, 11, 0, 1, 2, 3, 4, 12, 13, 5, 6, 7, 8, 9, 14, 15};
|
||||||
|
|
||||||
|
bool FullStage = false;
|
||||||
|
const int USTVersion = 1;
|
||||||
|
|
||||||
|
public MainForm()
|
||||||
|
{
|
||||||
|
Title = "PinkConnection2 Showtape Converter";
|
||||||
|
Size = new Size(512, 384);
|
||||||
|
Maximizable = false;
|
||||||
|
Resizable = false;
|
||||||
|
|
||||||
|
BrowseFileButton.Command = new Command((sender, e) => { Event_BrowseFileButton(); });
|
||||||
|
ConvertButton.Command = new Command((sender, e) => { Event_ConvertFileButton(); });
|
||||||
|
|
||||||
|
InputTypeSelector.SelectedValueChanged += (sender, e) => Event_ChangeInputType();
|
||||||
|
OutputTypeSelector.SelectedValueChanged += (sender, e) => Event_ChangeOutputType();
|
||||||
|
|
||||||
|
foreach (string s in InputTypes)
|
||||||
|
{
|
||||||
|
InputTypeSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
Content = BuildLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicLayout BuildLayout()
|
||||||
|
{
|
||||||
|
DynamicLayout layout = new DynamicLayout { DefaultSpacing = new Size(10, 10), DefaultPadding = new Padding(5, 5, 5, 5) };
|
||||||
|
|
||||||
|
layout.BeginVertical();
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(new Label { Text = "Input Format" });
|
||||||
|
layout.EndHorizontal();
|
||||||
|
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(InputTypeSelector, true);
|
||||||
|
layout.EndHorizontal();
|
||||||
|
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(new Label { Text = "Output Type" });
|
||||||
|
layout.EndHorizontal();
|
||||||
|
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(OutputTypeSelector, true);
|
||||||
|
layout.EndHorizontal();
|
||||||
|
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(new Label { Text = "Character" });
|
||||||
|
layout.EndHorizontal();
|
||||||
|
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(CharacterSelector, true);
|
||||||
|
layout.EndHorizontal();
|
||||||
|
layout.EndVertical();
|
||||||
|
|
||||||
|
layout.BeginVertical();
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(new Label { Text = "File to convert" });
|
||||||
|
layout.EndHorizontal();
|
||||||
|
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(FilePathTextBox, true);
|
||||||
|
layout.Add(BrowseFileButton);
|
||||||
|
layout.EndHorizontal();
|
||||||
|
layout.EndVertical();
|
||||||
|
|
||||||
|
layout.BeginVertical();
|
||||||
|
layout.BeginHorizontal();
|
||||||
|
layout.Add(null, true);
|
||||||
|
layout.Add(CompressAudioCheckBox);
|
||||||
|
layout.Add(ConvertButton);
|
||||||
|
layout.EndHorizontal();
|
||||||
|
layout.EndVertical();
|
||||||
|
|
||||||
|
layout.BeginVertical();
|
||||||
|
layout.Add(null, true);
|
||||||
|
layout.EndVertical();
|
||||||
|
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
string MakeHeader(string showName, string outputType, string character)
|
||||||
|
{
|
||||||
|
string headerOut = $"UST,{USTVersion.ToString()},{showName.Replace(",", "_").Replace(";", "_")},";
|
||||||
|
bool fullStage = false;
|
||||||
|
switch (outputType)
|
||||||
|
{
|
||||||
|
case "UST 32 Bits (Single Bot RAE/3st)":
|
||||||
|
headerOut += "32,";
|
||||||
|
headerOut += "Rockafire Explosion/3-Stage (Single Character),";
|
||||||
|
break;
|
||||||
|
case "UST 8 Bits (Single Bot Cybers Rosetta)":
|
||||||
|
headerOut += "8,";
|
||||||
|
headerOut += "Cyberamics (Single Character),";
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full RAE/3st)":
|
||||||
|
headerOut += "256,";
|
||||||
|
headerOut += "Rockafire Explosion/3-Stage (Full Stage),";
|
||||||
|
fullStage = true;
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full Cybers Rosetta)":
|
||||||
|
headerOut += "256,";
|
||||||
|
headerOut += "Cyberamics (Full Stage),";
|
||||||
|
fullStage = true;
|
||||||
|
break;
|
||||||
|
case "UST 8 Bits (Single Bot Cybers)":
|
||||||
|
headerOut += "8,";
|
||||||
|
headerOut += "Cyberamics (Single Character),";
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full Cybers)":
|
||||||
|
headerOut += "256,";
|
||||||
|
headerOut += "Cyberamics (Full Stage),";
|
||||||
|
fullStage = true;
|
||||||
|
break;
|
||||||
|
case "UST 32 Bits (Single Bot Studio C)":
|
||||||
|
headerOut += "32,";
|
||||||
|
headerOut += "Studio C (Single Character),";
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full Studio C)":
|
||||||
|
headerOut += "256,";
|
||||||
|
headerOut += "Studio C (Full Stage),";
|
||||||
|
fullStage = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (fullStage) headerOut += "All,";
|
||||||
|
else headerOut += character + ";";
|
||||||
|
return headerOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Event_ChangeInputType()
|
||||||
|
{
|
||||||
|
switch(InputTypeSelector.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
OutputTypeSelector.Items.Clear();
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in RAE3stOutputTypes)
|
||||||
|
{
|
||||||
|
OutputTypeSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
OutputTypeSelector.Items.Clear();
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in CyberOutputTypes)
|
||||||
|
{
|
||||||
|
OutputTypeSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
OutputTypeSelector.Items.Clear();
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in StudioCOutputTypes)
|
||||||
|
{
|
||||||
|
OutputTypeSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Event_ChangeOutputType()
|
||||||
|
{
|
||||||
|
switch(InputTypeSelector.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
switch(OutputTypeSelector.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in RAE3stCharacters)
|
||||||
|
{
|
||||||
|
CharacterSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
CharacterSelector.Enabled = true;
|
||||||
|
FullStage = false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in CyberCharacters)
|
||||||
|
{
|
||||||
|
CharacterSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
CharacterSelector.Enabled = true;
|
||||||
|
FullStage = false;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
CharacterSelector.Enabled = false;
|
||||||
|
FullStage = true;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
CharacterSelector.Enabled = false;
|
||||||
|
FullStage = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
switch(OutputTypeSelector.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in CyberCharacters)
|
||||||
|
{
|
||||||
|
CharacterSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
CharacterSelector.Enabled = true;
|
||||||
|
FullStage = false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
CharacterSelector.Enabled = false;
|
||||||
|
FullStage = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
switch(OutputTypeSelector.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
foreach (string s in StudioCCharacters)
|
||||||
|
{
|
||||||
|
CharacterSelector.Items.Add(s);
|
||||||
|
}
|
||||||
|
CharacterSelector.Enabled = true;
|
||||||
|
FullStage = false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CharacterSelector.Items.Clear();
|
||||||
|
CharacterSelector.Enabled = false;
|
||||||
|
FullStage = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Event_BrowseFileButton()
|
||||||
|
{
|
||||||
|
OpenFileDialog fileDialog = new OpenFileDialog();
|
||||||
|
string[] showFiles = { ".rshw", ".cshw", ".sshw" };
|
||||||
|
string[] allFiles = { ".*" };
|
||||||
|
fileDialog.Filters.Add(new FileFilter("Show Files (.rshw, .cshw, .sshw)", showFiles));
|
||||||
|
fileDialog.Filters.Add(new FileFilter("All Files", allFiles));
|
||||||
|
fileDialog.Title = "Select Show File.";
|
||||||
|
fileDialog.ShowDialog(this);
|
||||||
|
if (File.Exists(fileDialog.FileName)) FilePathTextBox.Text = fileDialog.FileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Event_ConvertFileButton()
|
||||||
|
{
|
||||||
|
// safeties
|
||||||
|
if (InputTypeSelector.SelectedIndex == -1)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: You must select an input type.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (OutputTypeSelector.SelectedIndex == -1)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: You must select an output type.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (CharacterSelector.SelectedIndex == -1 && !FullStage)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: You must select a character.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (FilePathTextBox.Text.Trim() == "")
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: You must select an input file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!File.Exists(FilePathTextBox.Text.Trim()))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: Specified input file does not exist.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FullStage && (string)OutputTypeSelector.SelectedKey != "UST 256 Bits (Full RAE/3st)")
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: Full Stage mode is not supported for cybers and studio c at this time.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveFileDialog fileDialog = new SaveFileDialog();
|
||||||
|
fileDialog.Filters.Add(new FileFilter("UST Files (.ust)", new string[]{".ust"}));
|
||||||
|
fileDialog.Title = "Select Show File.";
|
||||||
|
fileDialog.ShowDialog(this);
|
||||||
|
if (fileDialog.FileName.Trim() == "") return;
|
||||||
|
string outFilePath = fileDialog.FileName;
|
||||||
|
|
||||||
|
// now its actually time to start doing some shit
|
||||||
|
string inputType = InputTypeSelector.SelectedKey;
|
||||||
|
string outputType = OutputTypeSelector.SelectedKey;
|
||||||
|
string filePath = FilePathTextBox.Text.Trim();
|
||||||
|
if (inputType == "RSHW File (RR Engine)" || inputType == "CSHW File (RR Engine)" || inputType == "SSHW File (RR Engine)")
|
||||||
|
{
|
||||||
|
// at some point there should be a warning displayed if the input type does not match the file extension but i dont feel like doing that right now
|
||||||
|
|
||||||
|
// rshw time
|
||||||
|
RSHWFile file = RSHWLoader.Load(filePath);
|
||||||
|
if (file.signalData == null)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: This file contains no signal data.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file.audioData == null)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Fatal: This file contains no audio data.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<BitArray> rshwBits = new List<BitArray>();
|
||||||
|
int countlength = 0;
|
||||||
|
if (file.signalData[0] != 0)
|
||||||
|
{
|
||||||
|
countlength = 1;
|
||||||
|
BitArray bit = new BitArray(300);
|
||||||
|
rshwBits.Add(bit);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < file.signalData.Length; i++)
|
||||||
|
{
|
||||||
|
if (file.signalData[i] == 0)
|
||||||
|
{
|
||||||
|
countlength += 1;
|
||||||
|
BitArray bit = new BitArray(300);
|
||||||
|
rshwBits.Add(bit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rshwBits[countlength - 1].Set(file.signalData[i], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pick which target bits to use and how many bytes the output should be
|
||||||
|
int bitsCount = 0;
|
||||||
|
int[] targetBits = { 0 };
|
||||||
|
switch (outputType)
|
||||||
|
{
|
||||||
|
case "UST 32 Bits (Single Bot RAE/3st)":
|
||||||
|
bitsCount = 32;
|
||||||
|
targetBits = SC_RAE3stBitMap[Array.IndexOf(RAE3stCharacters, CharacterSelector.SelectedKey)];
|
||||||
|
break;
|
||||||
|
case "UST 8 Bits (Single Bot Cybers Rosetta)":
|
||||||
|
bitsCount = 8;
|
||||||
|
targetBits = SC_CyberBitMapRosetta[Array.IndexOf(CyberCharacters, CharacterSelector.SelectedKey)];
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full RAE/3st)":
|
||||||
|
bitsCount = 256;
|
||||||
|
targetBits = FS_RAE3stBitMap;
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full Cybers Rosetta)":
|
||||||
|
bitsCount = 256;
|
||||||
|
break;
|
||||||
|
case "UST 8 Bits (Single Bot Cybers)":
|
||||||
|
bitsCount = 8;
|
||||||
|
targetBits = SC_CyberBitMapR12[Array.IndexOf(CyberCharacters, CharacterSelector.SelectedKey)];
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full Cybers)":
|
||||||
|
bitsCount = 256;
|
||||||
|
break;
|
||||||
|
case "UST 32 Bits (Single Bot Studio C)":
|
||||||
|
bitsCount = 32;
|
||||||
|
targetBits = SC_StudioCBitMap[Array.IndexOf(StudioCCharacters, CharacterSelector.SelectedKey)];
|
||||||
|
break;
|
||||||
|
case "UST 256 Bits (Full Studio C)":
|
||||||
|
bitsCount = 256;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<string> writeOut = new List<string>();
|
||||||
|
foreach (BitArray bits in rshwBits)
|
||||||
|
{
|
||||||
|
BigInteger frameByte = 0;
|
||||||
|
for (int i = 0; i < targetBits.Length; i++)
|
||||||
|
{
|
||||||
|
if (bits.Get(targetBits[i])) frameByte += BigInteger.Pow(2, i);
|
||||||
|
}
|
||||||
|
writeOut.Add(frameByte.ToString($"X{(bitsCount/4).ToString()}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] audioOut = file.audioData;
|
||||||
|
if ((bool)CompressAudioCheckBox.Checked)
|
||||||
|
{
|
||||||
|
MessageBox.Show("press ok to start compressing audio");
|
||||||
|
if (File.Exists("tmp.mp3")) File.Delete("tmp.mp3");
|
||||||
|
File.WriteAllBytes("tmp.wav", audioOut);
|
||||||
|
Process ffmpegProcess = new Process();
|
||||||
|
ffmpegProcess.StartInfo.FileName = "ffmpeg";
|
||||||
|
ffmpegProcess.StartInfo.Arguments = "-i tmp.wav -c:a mp3 -b:a 128k tmp.mp3";
|
||||||
|
ffmpegProcess.Start();
|
||||||
|
ffmpegProcess.WaitForExit();
|
||||||
|
audioOut = File.ReadAllBytes("tmp.mp3");
|
||||||
|
File.Delete("tmp.wav");
|
||||||
|
File.Delete("tmp.mp3");
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllText(outFilePath, MakeHeader(Path.GetFileNameWithoutExtension(outFilePath), outputType, CharacterSelector.SelectedKey)+String.Join(",", writeOut.ToArray())+";"+Convert.ToBase64String(audioOut));
|
||||||
|
}
|
||||||
|
MessageBox.Show("Conversion complete!");
|
||||||
|
}
|
||||||
|
|
||||||
|
int RRtoAPSBit(int rrBit) // aps lower drawer starts at 129 instead of 151
|
||||||
|
{
|
||||||
|
int outAPSBit = rrBit;
|
||||||
|
if (rrBit > 150) outAPSBit = rrBit - 22;
|
||||||
|
return outAPSBit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.Serialization.Formatters.Binary;
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
|
|
|
@ -1,360 +0,0 @@
|
||||||
using System.Collections;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
using System.Numerics;
|
|
||||||
|
|
||||||
using Eto.Forms;
|
|
||||||
using Eto.Drawing;
|
|
||||||
|
|
||||||
namespace USTConverter
|
|
||||||
{
|
|
||||||
public partial class MainForm : Form
|
|
||||||
{
|
|
||||||
DropDown InputTypeSelector = new DropDown();
|
|
||||||
DropDown OutputTypeSelector = new DropDown();
|
|
||||||
TextBox FilePathTextBox = new TextBox();
|
|
||||||
Button BrowseFileButton = new Button { Text = "Browse", Width = 100 };
|
|
||||||
Button ConvertButton = new Button { Text = "Convert", Width = 100 };
|
|
||||||
CheckBox CompressAudioCheckBox = new CheckBox { Text = "Compress Audio" };
|
|
||||||
|
|
||||||
string[] InputTypes = {
|
|
||||||
"RSHW File (RR Engine)", "CSHW File (RR Engine)", "SSHW File (RR Engine)"/*,
|
|
||||||
"3ST File (APS)", "ROA/R12/C&R File (APS)"*/
|
|
||||||
};
|
|
||||||
|
|
||||||
string[] RAE3stOutputTypes = { "UST (Rock-afire Explosion/3-Stage)" , "UST (Cyberamics Rosetta)" };
|
|
||||||
string[] CyberOutputTypes = { "UST (Cyberamics)" };
|
|
||||||
string[] StudioCOutputTypes = { "UST (Studio C)" };
|
|
||||||
|
|
||||||
|
|
||||||
int[] CyberBitMap = {
|
|
||||||
1, 2, 3, 4, 8, 5, 6, 7,
|
|
||||||
65, 66, 67, 68, 72, 69, 70, 71,
|
|
||||||
49, 50, 51, 56, 53, 54, 55, 52,
|
|
||||||
17, 18, 19, 20, 24, 21, 22, 23,
|
|
||||||
33, 34, 35, 40, 37, 38, 39, 36,
|
|
||||||
9, 46, 62, 10, 74, 75, 76, 77, 78,
|
|
||||||
104, 102, 109, 107, 100, 123, 41,
|
|
||||||
27, 28, 29, 30, 25, 26, 57, 58,
|
|
||||||
120, 116, 127, 118, 117, 119,
|
|
||||||
114, 113, 115,
|
|
||||||
110, 108, 101, 106, 111,
|
|
||||||
103, 105, 125, 121, 126, 99, 124, 122, 97, 98
|
|
||||||
};
|
|
||||||
|
|
||||||
int[] CyberBitMapRosetta = {
|
|
||||||
1, 6, 7, 8, 4, 5, 2, 19,
|
|
||||||
185, 178, 179, 180, 183, 184, 181, 169,
|
|
||||||
45, 54, 55, 43, 44, 41, 58, 59,
|
|
||||||
166, 156, 157, 158, 156, 157, 151, 163,
|
|
||||||
30, 25, 21, 28, 29, 26, 31, 35,
|
|
||||||
0, 0, 0, 49, 0, 0, 0, 0, 0,
|
|
||||||
88, 86, 85, 82, 84, 81, 0,
|
|
||||||
93, 94, 91, 92, 91, 92, 0, 0,
|
|
||||||
229, 228, 226, 224, 223, 221,
|
|
||||||
235, 232, 234,
|
|
||||||
67, 68, 71, 72, 73,
|
|
||||||
220, 244, 245, 225, 77, 241, 240, 87, 222, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
int[] RAE3stBitMap = {
|
|
||||||
1, 9, 10, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 17, 18, 19, 14, 15, 16, 20, 36, 37,
|
|
||||||
185, 176, 177, 181, 182, 183, 184, 178, 179, 180, 173, 175, 174, 168, 170, 169, 186, 187, 188,
|
|
||||||
45, 41, 42, 43, 44, 54, 55, 51, 52, 53, 57, 59, 58, 60, 61, 62,
|
|
||||||
166, 151, 152, 153, 156, 157, 158, 161, 162, 163, 164, 154, 155, 159, 160, 165,
|
|
||||||
30, 23, 24, 26, 27, 28, 29, 25, 21, 22, 33, 35, 34, 31, 32, 63, 64,
|
|
||||||
196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 189, 190, 194, 211, 212, 213,
|
|
||||||
167, 191, 192, 193, 171, 172, 48,
|
|
||||||
39, 38, 47, 46, 49, 50,
|
|
||||||
88, 86, 85, 82, 242, 84, 83, 81, 238, 239, 240, 87,
|
|
||||||
93, 94, 91, 92, 89, 90,
|
|
||||||
229, 228, 227, 226, 224, 223, 221, 219, 218, 217, 216, 222,
|
|
||||||
235, 232, 231, 234, 236, 237, 233, 242, 243,
|
|
||||||
67, 68, 69, 66, 71, 72, 73,
|
|
||||||
78, 77, 76, 79, 80,
|
|
||||||
220, 244, 245, 225, 230, 241
|
|
||||||
};
|
|
||||||
|
|
||||||
int[] StudioCBitMap = {
|
|
||||||
21, 28, 25, 24, 26, 27, 29, 30, 31, 18, 19, 23, 22, 20, 6, 7, 11, 8, 9, 10, 1, 2, 17, 3, 4, 5, 12, 16, 15, 13, 14, 32,
|
|
||||||
33, 36, 34, 35, 40, 160, 161,
|
|
||||||
177, 178,
|
|
||||||
44, 45,
|
|
||||||
151, 154, 152, 153, 155, 157, 156, 181, 180, 182,
|
|
||||||
172, 174, 173, 171,
|
|
||||||
166, 165, 164,
|
|
||||||
159, 163, 167, 168, 176, 169, 170, 162, 179
|
|
||||||
};
|
|
||||||
|
|
||||||
int[] CyberRosettaInvertedBits = { 2, 181, 41, 59, 58, 151, 163, 26, 35, 31 };
|
|
||||||
int[] RAE3stAPSDescrambleTable = { 10, 11, 0, 1, 2, 3, 4, 12, 13, 5, 6, 7, 8, 9, 14, 15};
|
|
||||||
|
|
||||||
bool Rosetta = false;
|
|
||||||
const int USTVersion = 2;
|
|
||||||
|
|
||||||
public MainForm()
|
|
||||||
{
|
|
||||||
Title = "UST Showtape Converter";
|
|
||||||
Size = new Size(500, 300);
|
|
||||||
Maximizable = false;
|
|
||||||
Resizable = false;
|
|
||||||
|
|
||||||
BrowseFileButton.Command = new Command((sender, e) => { Event_BrowseFileButton(); });
|
|
||||||
ConvertButton.Command = new Command((sender, e) => { Event_ConvertFileButton(); });
|
|
||||||
|
|
||||||
InputTypeSelector.SelectedValueChanged += (sender, e) => Event_ChangeInputType();
|
|
||||||
|
|
||||||
foreach (string s in InputTypes)
|
|
||||||
{
|
|
||||||
InputTypeSelector.Items.Add(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
Content = BuildLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
DynamicLayout BuildLayout()
|
|
||||||
{
|
|
||||||
DynamicLayout layout = new DynamicLayout { DefaultSpacing = new Size(10, 10), DefaultPadding = new Padding(5, 5, 5, 5) };
|
|
||||||
|
|
||||||
layout.BeginVertical();
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(new Label { Text = "Input Format" });
|
|
||||||
layout.EndHorizontal();
|
|
||||||
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(InputTypeSelector, true);
|
|
||||||
layout.EndHorizontal();
|
|
||||||
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(new Label { Text = "Output Type" });
|
|
||||||
layout.EndHorizontal();
|
|
||||||
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(OutputTypeSelector, true);
|
|
||||||
layout.EndHorizontal();
|
|
||||||
layout.EndVertical();
|
|
||||||
|
|
||||||
layout.BeginVertical();
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(new Label { Text = "File to convert" });
|
|
||||||
layout.EndHorizontal();
|
|
||||||
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(FilePathTextBox, true);
|
|
||||||
layout.Add(BrowseFileButton);
|
|
||||||
layout.EndHorizontal();
|
|
||||||
layout.EndVertical();
|
|
||||||
|
|
||||||
layout.BeginVertical();
|
|
||||||
layout.BeginHorizontal();
|
|
||||||
layout.Add(null, true);
|
|
||||||
layout.Add(CompressAudioCheckBox);
|
|
||||||
layout.Add(ConvertButton);
|
|
||||||
layout.EndHorizontal();
|
|
||||||
layout.EndVertical();
|
|
||||||
|
|
||||||
layout.BeginVertical();
|
|
||||||
layout.Add(null, true);
|
|
||||||
layout.EndVertical();
|
|
||||||
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
string MakeHeader(string showName, string outputType)
|
|
||||||
{
|
|
||||||
string headerOut = $"UST,{USTVersion.ToString()},{showName.Replace(",", "_").Replace(";", "_")},";
|
|
||||||
switch (outputType)
|
|
||||||
{
|
|
||||||
case "UST (Rock-afire Explosion/3-Stage)":
|
|
||||||
headerOut += "Rockafire Explosion/3-Stage;";
|
|
||||||
break;
|
|
||||||
case "UST (Cyberamics Rosetta)":
|
|
||||||
headerOut += "Cyberamics;";
|
|
||||||
break;
|
|
||||||
case "UST (Cyberamics)":
|
|
||||||
headerOut += "Cyberamics;";
|
|
||||||
break;
|
|
||||||
case "UST (Studio C)":
|
|
||||||
headerOut += "Studio C;";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return headerOut;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Event_ChangeInputType()
|
|
||||||
{
|
|
||||||
switch(InputTypeSelector.SelectedIndex)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
OutputTypeSelector.Items.Clear();
|
|
||||||
foreach (string s in RAE3stOutputTypes)
|
|
||||||
{
|
|
||||||
OutputTypeSelector.Items.Add(s);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
OutputTypeSelector.Items.Clear();
|
|
||||||
foreach (string s in CyberOutputTypes)
|
|
||||||
{
|
|
||||||
OutputTypeSelector.Items.Add(s);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
OutputTypeSelector.Items.Clear();
|
|
||||||
foreach (string s in StudioCOutputTypes)
|
|
||||||
{
|
|
||||||
OutputTypeSelector.Items.Add(s);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Event_BrowseFileButton()
|
|
||||||
{
|
|
||||||
OpenFileDialog fileDialog = new OpenFileDialog();
|
|
||||||
string[] showFiles = { ".rshw", ".cshw", ".sshw" };
|
|
||||||
string[] allFiles = { ".*" };
|
|
||||||
fileDialog.Filters.Add(new FileFilter("Show Files (.rshw, .cshw, .sshw)", showFiles));
|
|
||||||
fileDialog.Filters.Add(new FileFilter("All Files", allFiles));
|
|
||||||
fileDialog.Title = "Select Show File.";
|
|
||||||
fileDialog.ShowDialog(this);
|
|
||||||
if (File.Exists(fileDialog.FileName)) FilePathTextBox.Text = fileDialog.FileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Event_ConvertFileButton()
|
|
||||||
{
|
|
||||||
// safeties
|
|
||||||
if (InputTypeSelector.SelectedIndex == -1)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Fatal: You must select an input type.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (OutputTypeSelector.SelectedIndex == -1)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Fatal: You must select an output type.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (FilePathTextBox.Text.Trim() == "")
|
|
||||||
{
|
|
||||||
MessageBox.Show("Fatal: You must select an input file.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!File.Exists(FilePathTextBox.Text.Trim()))
|
|
||||||
{
|
|
||||||
MessageBox.Show("Fatal: Specified input file does not exist.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveFileDialog fileDialog = new SaveFileDialog();
|
|
||||||
fileDialog.Filters.Add(new FileFilter("UST Files (.ust)", new string[]{".ust"}));
|
|
||||||
fileDialog.Title = "Select Output File.";
|
|
||||||
fileDialog.ShowDialog(this);
|
|
||||||
if (fileDialog.FileName.Trim() == "") return;
|
|
||||||
string outFilePath = fileDialog.FileName;
|
|
||||||
|
|
||||||
// now its actually time to start doing some shit
|
|
||||||
string inputType = InputTypeSelector.SelectedKey;
|
|
||||||
string outputType = OutputTypeSelector.SelectedKey;
|
|
||||||
string filePath = FilePathTextBox.Text.Trim();
|
|
||||||
if (inputType == "RSHW File (RR Engine)" || inputType == "CSHW File (RR Engine)" || inputType == "SSHW File (RR Engine)")
|
|
||||||
{
|
|
||||||
// at some point there should be a warning displayed if the input type does not match the file extension but i dont feel like doing that right now
|
|
||||||
|
|
||||||
// rshw time
|
|
||||||
RSHWFile file = RSHWLoader.Load(filePath);
|
|
||||||
if (file.signalData == null)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Fatal: This file contains no signal data.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (file.audioData == null)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Fatal: This file contains no audio data.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<BitArray> rshwBits = new List<BitArray>();
|
|
||||||
int countlength = 0;
|
|
||||||
if (file.signalData[0] != 0)
|
|
||||||
{
|
|
||||||
countlength = 1;
|
|
||||||
BitArray bit = new BitArray(300);
|
|
||||||
rshwBits.Add(bit);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < file.signalData.Length; i++)
|
|
||||||
{
|
|
||||||
if (file.signalData[i] == 0)
|
|
||||||
{
|
|
||||||
countlength += 1;
|
|
||||||
BitArray bit = new BitArray(300);
|
|
||||||
rshwBits.Add(bit);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rshwBits[countlength - 1].Set(file.signalData[i], true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// pick which target bits to use and how many bytes the output should be
|
|
||||||
int[] targetBits = { 0 };
|
|
||||||
switch (outputType)
|
|
||||||
{
|
|
||||||
case "UST (Rock-afire Explosion/3-Stage)":
|
|
||||||
targetBits = RAE3stBitMap;
|
|
||||||
break;
|
|
||||||
case "UST (Cyberamics Rosetta)":
|
|
||||||
targetBits = CyberBitMapRosetta;
|
|
||||||
Rosetta = true;
|
|
||||||
break;
|
|
||||||
case "UST (Cyberamics)":
|
|
||||||
targetBits = CyberBitMap;
|
|
||||||
break;
|
|
||||||
case "UST (Studio C)":
|
|
||||||
targetBits = StudioCBitMap;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<string> writeOut = new List<string>();
|
|
||||||
foreach (BitArray bits in rshwBits)
|
|
||||||
{
|
|
||||||
BigInteger frameByte = 0;
|
|
||||||
for (int i = 0; i < targetBits.Length; i++)
|
|
||||||
{
|
|
||||||
if (Rosetta && CyberRosettaInvertedBits.Contains(targetBits[i]))
|
|
||||||
{
|
|
||||||
if (!bits.Get(targetBits[i])) frameByte += BigInteger.Pow(2, i);
|
|
||||||
}
|
|
||||||
else { if (bits.Get(targetBits[i])) frameByte += BigInteger.Pow(2, i); }
|
|
||||||
}
|
|
||||||
writeOut.Add(frameByte.ToString($"X{(64).ToString()}"));
|
|
||||||
}
|
|
||||||
writeOut[0] = (0).ToString($"X{(64).ToString()}");
|
|
||||||
|
|
||||||
byte[] audioOut = file.audioData;
|
|
||||||
if ((bool)CompressAudioCheckBox.Checked)
|
|
||||||
{
|
|
||||||
if (File.Exists("tmp.mp3")) File.Delete("tmp.mp3");
|
|
||||||
File.WriteAllBytes("tmp.wav", audioOut);
|
|
||||||
Process ffmpegProcess = new Process();
|
|
||||||
ffmpegProcess.StartInfo.FileName = "ffmpeg";
|
|
||||||
ffmpegProcess.StartInfo.Arguments = "-i tmp.wav -c:a mp3 -b:a 128k tmp.mp3";
|
|
||||||
ffmpegProcess.Start();
|
|
||||||
ffmpegProcess.WaitForExit();
|
|
||||||
audioOut = File.ReadAllBytes("tmp.mp3");
|
|
||||||
File.Delete("tmp.wav");
|
|
||||||
File.Delete("tmp.mp3");
|
|
||||||
}
|
|
||||||
|
|
||||||
File.WriteAllText(outFilePath, MakeHeader(Path.GetFileNameWithoutExtension(outFilePath), outputType)+String.Join(",", writeOut.ToArray())+";"+Convert.ToBase64String(audioOut));
|
|
||||||
}
|
|
||||||
MessageBox.Show("Conversion complete!");
|
|
||||||
}
|
|
||||||
|
|
||||||
int RRtoAPSBit(int rrBit) // aps lower drawer starts at 129 instead of 151
|
|
||||||
{
|
|
||||||
int outAPSBit = rrBit;
|
|
||||||
if (rrBit > 150) outAPSBit = rrBit - 22;
|
|
||||||
return outAPSBit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue