DivaScript: Difference between revisions
mNo edit summary |
No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 19: | Line 19: | ||
|- | |- | ||
| rowspan="6" | | | rowspan="6" | | ||
<h6>AGEAGE_CTRL</h6> | |||
| rowspan="6" |Controls the effect for the hair of the module "AgeAge Again". | | rowspan="6" |Controls the effect for the hair of the module "AgeAge Again". | ||
FT: <code>AGEAGE_CTRL(chara, parts, npr, rot_speed, skip, disp, -1, -1);</code> | FT: <code>AGEAGE_CTRL(chara, parts, npr, rot_speed, skip, disp, -1, -1);</code> | ||
| Line 52: | Line 52: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>BAR_TIME_SET</h6> | |||
| rowspan="2" |Sets the length of a measure. | | rowspan="2" |Sets the length of a measure. | ||
<code>BAR_TIME_SET(bpm, beats);</code> | <code>BAR_TIME_SET(bpm, beats);</code> | ||
| Line 64: | Line 64: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>BLOOM</h6> | |||
| rowspan="2" |Sets data from <code>bloom</code> pv_param. | | rowspan="2" |Sets data from <code>bloom</code> pv_param. | ||
FT, F2, X: <code>BLOOM(id, unk);</code> | FT, F2, X: <code>BLOOM(id, unk);</code> | ||
| Line 76: | Line 76: | ||
|- | |- | ||
| | | | ||
<h6>CHANGE_FIELD</h6> | |||
|Changes the field defined in <code>pv_field</code>/<code>pv_db</code>. | |Changes the field defined in <code>pv_field</code>/<code>pv_db</code>. | ||
<code>CHANGE_FIELD(id);</code> | <code>CHANGE_FIELD(id);</code> | ||
| Line 86: | Line 86: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>CHARA_SIZE</h6> | |||
| rowspan="2" |Sets a character's scale/size. | | rowspan="2" |Sets a character's scale/size. | ||
<code>CHARA_SIZE(chara, size);</code> | <code>CHARA_SIZE(chara, size);</code> | ||
| Line 98: | Line 98: | ||
|- | |- | ||
| | | | ||
<h6>END</h6> | |||
|Ends reading of the script. | |Ends reading of the script. | ||
<code>END();</code> | <code>END();</code> | ||
| Line 104: | Line 104: | ||
|- | |- | ||
| rowspan="3" | | | rowspan="3" | | ||
<h6>HAND_SCALE</h6> | |||
| rowspan="3" |Sets the size of a character's hand. | | rowspan="3" |Sets the size of a character's hand. | ||
FT: <code>HAND_SCALE(chara, hand, scale);</code> | FT: <code>HAND_SCALE(chara, hand, scale);</code> | ||
| Line 123: | Line 123: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>LYRIC</h6> | |||
| rowspan="2" |Displays a lyric from <code>pv_db</code>. | | rowspan="2" |Displays a lyric from <code>pv_db</code>. | ||
<code>LYRIC(id, color);</code> | <code>LYRIC(id, color);</code> | ||
| Line 141: | Line 141: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>MIKU_DISP</h6> | |||
| rowspan="2" |Shows or hides a character in a PV. | | rowspan="2" |Shows or hides a character in a PV. | ||
<code>MIKU_DISP(chara, disp);</code> | <code>MIKU_DISP(chara, disp);</code> | ||
| Line 153: | Line 153: | ||
|- | |- | ||
| rowspan="4" | | | rowspan="4" | | ||
<h6>MIKU_MOVE</h6> | |||
| rowspan="4" |Moves a character in 3D space in a PV. | | rowspan="4" |Moves a character in 3D space in a PV. | ||
<code>MIKU_MOVE(chara, x, y, z);</code> | <code>MIKU_MOVE(chara, x, y, z);</code> | ||
| Line 173: | Line 173: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>MIKU_ROT</h6> | |||
| rowspan="2" |Rotates a character in a PV. | | rowspan="2" |Rotates a character in a PV. | ||
<code>MIKU_ROT(chara, angle);</code> | <code>MIKU_ROT(chara, angle);</code> | ||
| Line 185: | Line 185: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>MIKU_SHADOW</h6> | |||
| rowspan="2" |Shows or hides a character's shadow in a PV. | | rowspan="2" |Shows or hides a character's shadow in a PV. | ||
<code>MIKU_SHADOW(chara, disp);</code> | <code>MIKU_SHADOW(chara, disp);</code> | ||
| Line 197: | Line 197: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>MODE_SELECT</h6> | |||
| rowspan="2" |Starts or ends a special chart segment, such as Chance Time. | | rowspan="2" |Starts or ends a special chart segment, such as Chance Time. | ||
<code>MODE_SELECT(difficulty, mode);</code> | <code>MODE_SELECT(difficulty, mode);</code> | ||
| Line 237: | Line 237: | ||
|- | |- | ||
| rowspan="2" | | | rowspan="2" | | ||
<h6>MOVIE_CUT_CHG</h6> | |||
| rowspan="2" |Plays, shows or hides the movie defined in <code>pv_db</code> or a movie from <code>movie.list</code> in <code>pv_db</code>. It can be used as a fancier version of both <code>MOVIE_DISP</code> and <code>MOVIE_PLAY</code> that allows more control. | | rowspan="2" |Plays, shows or hides the movie defined in <code>pv_db</code> or a movie from <code>movie.list</code> in <code>pv_db</code>. It can be used as a fancier version of both <code>MOVIE_DISP</code> and <code>MOVIE_PLAY</code> that allows more control. | ||
FT: <code>MOVIE_CUT_CHG(id, disp);</code> | FT: <code>MOVIE_CUT_CHG(id, disp);</code> | ||
| Line 251: | Line 251: | ||
|- | |- | ||
| | | | ||
<h6>MOVIE_DISP</h6> | |||
|Shows or hides the movie layer in a PV. | |Shows or hides the movie layer in a PV. | ||
<code>MOVIE_DISP(disp);</code> | <code>MOVIE_DISP(disp);</code> | ||
| Line 260: | Line 260: | ||
|- | |- | ||
| | | | ||
<h6>MOVIE_PLAY</h6> | |||
|Starts playing the movie defined in <code>pv_db</code> or the first movie in <code>movie.list</code> in <code>pv_db</code>. | |Starts playing the movie defined in <code>pv_db</code> or the first movie in <code>movie.list</code> in <code>pv_db</code>. | ||
<code>MOVIE_PLAY(play);</code> | <code>MOVIE_PLAY(play);</code> | ||
| Line 269: | Line 269: | ||
|- | |- | ||
| | | | ||
<h6>MUSIC_PLAY</h6> | |||
|Starts playing the song file defined in <code>pv_db</code>. | |Starts playing the song file defined in <code>pv_db</code>. | ||
<code>MUSIC_PLAY();</code> | <code>MUSIC_PLAY();</code> | ||
| Line 275: | Line 275: | ||
|- | |- | ||
| | | | ||
<h6>PV_BRANCH_MODE</h6> | |||
|Make future DSC commands only be executed on either the <code>Global</code>, <code>Fail</code> or <code>Success</code> branch. | |Make future DSC commands only be executed on either the <code>Global</code>, <code>Fail</code> or <code>Success</code> branch. | ||
FT, F, F2, X: <code>PV_BRANCH_MODE(branch);</code> | FT, F, F2, X: <code>PV_BRANCH_MODE(branch);</code> | ||
| Line 286: | Line 286: | ||
|- | |- | ||
| | | | ||
<h6>PV_END</h6> | |||
|Ends PV playback. | |Ends PV playback. | ||
<code>PV_END();</code> | <code>PV_END();</code> | ||
| Line 292: | Line 292: | ||
|- | |- | ||
| | | | ||
<h6>SATURATE</h6> | |||
|Changes color saturation in a PV. | |Changes color saturation in a PV. | ||
<code>SATURATE(amount);</code> | <code>SATURATE(amount);</code> | ||
| Line 303: | Line 303: | ||
|- | |- | ||
| rowspan="6" | | | rowspan="6" | | ||
<h6>SCENE_FADE</h6> | |||
| rowspan="6" |Plays a screen fade effect during PVs. | | rowspan="6" |Plays a screen fade effect during PVs. | ||
<code>SCENE_FADE(duration, start, end, r, g, b)</code> | <code>SCENE_FADE(duration, start, end, r, g, b)</code> | ||
|duration | |duration | ||
|Fade duration in | |Fade duration in milliseconds | ||
eg: | eg: | ||
| Line 342: | Line 342: | ||
|- | |- | ||
| | | | ||
<h6>SE_EFFECT</h6> | |||
|Plays a sound effect in a PV defined in <code>pv_db</code>. Normally used for success scenes but not restricted to them. | |Plays a sound effect in a PV defined in <code>pv_db</code>. Normally used for success scenes but not restricted to them. | ||
FT, F, F2, X: <code>SE_EFFECT(id);</code> | FT, F, F2, X: <code>SE_EFFECT(id);</code> | ||
| Line 350: | Line 350: | ||
|- | |- | ||
| rowspan="12" | | | rowspan="12" | | ||
<h6>TARGET</h6> | |||
| rowspan="12" |Spawns a rhythm game note. | | rowspan="12" |Spawns a rhythm game note. | ||
FT: <code>TARGET(type, pos_x, pos_y, angle, dist, amp, freq);</code> | FT: <code>TARGET(type, pos_x, pos_y, angle, dist, amp, freq);</code> | ||
| Line 419: | Line 419: | ||
|- | |- | ||
| | | | ||
<h6>TARGET_FLYING_TIME</h6> | |||
|Sets the time it takes for the rhythm game notes to hit their targets. | |Sets the time it takes for the rhythm game notes to hit their targets. | ||
<code>TARGET_FLYING_TIME(flytime);</code> | <code>TARGET_FLYING_TIME(flytime);</code> | ||
| Line 427: | Line 427: | ||
|- | |- | ||
| | | | ||
<h6>TIME</h6> | |||
|Waits until a specified game time. | |Waits until a specified game time. | ||
<code>TIME(t);</code> | <code>TIME(t);</code> | ||
Latest revision as of 08:05, 26 October 2025
DivaScript (commonly referred to as DSC) is the file format used by all the Project DIVA games for storing various commands related to Music Videos/PVs and Rhythm Game Charts.
The data inside .dsc files is stored in a binary format. This means that they can not be edited with a text editor and instead require specialized programs that can decode them such as DSC Studio or ScriptEditor. Additionally, .dsc files from Project DIVA F2nd and Project DIVA X are encrypted using DIVAFILE encryption. They need to be decrypted before editing.
DSC Formats
[edit | edit source]Every Project DIVA game uses a specific DivaScript format. The exact format of a .dsc file is determined by the first 4 bytes of the file.
List of DSC Commands (Incomplete)
[edit | edit source]List of commands that can be used in FT, F, F2/X DSC formats. Format-exclusive commands are marked individually.
| Command Name | Definition | Parameter | Description | Type |
|---|---|---|---|---|
AGEAGE_CTRL |
Controls the effect for the hair of the module "AgeAge Again".
FT: |
chara | Character slot | int |
| parts | Hair parts to control:
|
enum | ||
| npr | sets NPR material | bool | ||
| speed | Effect speed | int | ||
| skip | Skips 200 frames of animation. | bool | ||
| disp | Whether to display the effect or not. | bool | ||
BAR_TIME_SET |
Sets the length of a measure.
|
bpm | Beats per minute | int |
| beats | Number of quarter note beats minus 1. eg: 3 for 4/4.
|
int | ||
BLOOM |
Sets data from bloom pv_param.
FT, F2, X: |
id | ID matching the data in pv_param. | int |
| unk | Unknown | int | ||
CHANGE_FIELD |
Changes the field defined in pv_field/pv_db.
F2, X: |
id | ID matching the field number in pv_field or pv_db.
|
int |
CHARA_SIZE |
Sets a character's scale/size.
|
chara | Character slot | int |
| size | Character scale | int | ||
END |
Ends reading of the script.
|
|||
HAND_SCALE |
Sets the size of a character's hand.
FT: |
chara | Character slot | int |
| hand | Which hand to scale:
|
enum | ||
| scale | Hand scale in percentage times 10; eg. for 105% use 1050
|
int | ||
LYRIC |
Displays a lyric from pv_db.
|
id | ID matching the number of a lyric in pv_db.
Use |
int |
| color | #AARRGGBB hex color code converted to decimal.
eg.: for a red lyric the command would be because Red: Default: |
int | ||
MIKU_DISP |
Shows or hides a character in a PV.
|
chara | Character slot | int |
| disp | Whether to display the character or not. | bool | ||
MIKU_MOVE |
Moves a character in 3D space in a PV.
|
chara | Character slot | int |
| x | X coordinate | int | ||
| y | Y coordinate | int | ||
| z | Z coordinate | int | ||
MIKU_ROT |
Rotates a character in a PV.
|
chara | Character slot | int |
| angle | Angle value | int | ||
MIKU_SHADOW |
Shows or hides a character's shadow in a PV.
|
chara | Character slot | int |
| disp | Whether to display the character's shadow or not. | bool | ||
MODE_SELECT |
Starts or ends a special chart segment, such as Chance Time.
|
difficulty | Indicates under what difficulties the command will trigger in this exact script.
This value is a bit flag corresponding to a group of difficulties:
Adding the values up to each other results in a group: Use |
bitfield enum |
| mode | What segment to start/end:
Only used by the New Classics mod:
|
enum | ||
MOVIE_CUT_CHG |
Plays, shows or hides the movie defined in pv_db or a movie from movie.list in pv_db. It can be used as a fancier version of both MOVIE_DISP and MOVIE_PLAY that allows more control.
FT: |
id | The number in movie.list of the movie to be played.
Playback starts at the moment the command is called for a newly called |
int |
| disp | 1 - display the movie layer
Any other value - hide the movie layer (playback keeps going) |
bool | ||
MOVIE_DISP |
Shows or hides the movie layer in a PV.
|
disp | 1 - display the movie layer
Any other value - hide the movie layer (playback keeps going) |
bool |
MOVIE_PLAY |
Starts playing the movie defined in pv_db or the first movie in movie.list in pv_db.
|
play | 1 - plays the movie
Any other value doesn't do anything. |
bool |
MUSIC_PLAY |
Starts playing the song file defined in pv_db.
|
|||
PV_BRANCH_MODE |
Make future DSC commands only be executed on either the Global, Fail or Success branch.
FT, F, F2, X: |
branch | 0 - Global (commands are executed regardless of success state)
|
enum |
PV_END |
Ends PV playback.
|
|||
SATURATE |
Changes color saturation in a PV.
|
amount | Saturation strength on a scale from 0 to 1000:
|
int |
SCENE_FADE |
Plays a screen fade effect during PVs.
|
duration | Fade duration in milliseconds
eg:
|
int |
| start | The opacity the fade will start with
|
int | ||
| end | The opacity the fade will end with
|
int | ||
| r | Red color component scale, from 0 to 1000 | int | ||
| g | Green color component scale, from 0 to 1000 | int | ||
| b | Blue color component scale, from 0 to 1000 | int | ||
SE_EFFECT |
Plays a sound effect in a PV defined in pv_db. Normally used for success scenes but not restricted to them.
FT, F, F2, X: |
id | number of a effect_se_name_list item defined in pv_db.
|
int |
TARGET |
Spawns a rhythm game note.
FT: F: F2, X: |
type | ID corresponding to a note type.
Full ID list for each game on the dedicated Target page. |
enum |
| pos_x | X position of the note's target. | int | ||
| pos_y | Y position of the note's target. | int | ||
| angle | Angle of the note's path. | int | ||
| distance | Distance between the note's spawn position and the target's position.
Default: |
int | ||
| amp | Amplitude of the note's path wave.
Default: |
int | ||
| freq | Frequency of the note's path wave. | int | ||
| duration | (for F/F2/X formats)
Sustain and Rush Note duration.
Default (for notes other than Sustain and Rush): |
DivaTime | ||
| is_end | (for F/F2/X formats)
set to |
bool | ||
| fly_time | (for F/F2/X formats)
Target Flying Time value (same format as the TARGET_FLYING_TIME command) |
DivaTime | ||
| sig | (for F/F2/X formats)
Time Signature The same value that would otherwise go in Number of quarter note beats minus 1. eg: |
int | ||
| hit_eff | (for F2/X formats)
Assigns a hit effect to the note based on a local ID defined in a previous TARGET_EFFECT command. |
int | ||
TARGET_FLYING_TIME |
Sets the time it takes for the rhythm game notes to hit their targets.
|
flytime | time value in milliseconds | int |
TIME |
Waits until a specified game time.
|
t | time value in DivaTime | DivaTime |
References
[edit | edit source]somewhatlurker's pyDIVA/pyDSC
