DivaScript: Difference between revisions

From DivaDocs
GGAB3 (talk | contribs)
Changed formatting to a large table
GGAB3 (talk | contribs)
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 19: Line 19:
|-
|-
| rowspan="6" |
| rowspan="6" |
====== AGEAGE_CTRL ======
<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 37: Line 37:
|npr
|npr
|sets NPR material
|sets NPR material
|
|bool
|-
|-
|speed
|speed
Line 52: Line 52:
|-
|-
| rowspan="2" |
| rowspan="2" |
====== BAR_TIME_SET ======
<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" |
====== BLOOM ======
<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:
|-
|-
|
|
====== CHANGE_FIELD ======
<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" |
====== CHARA_SIZE ======
<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:
|-
|-
|
|
====== END ======
<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" |
====== HAND_SCALE ======
<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" |
====== LYRIC ======
<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" |
====== MIKU_DISP ======
<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" |
====== MIKU_MOVE ======
<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" |
====== MIKU_ROT ======
<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" |
====== MIKU_SHADOW ======
<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" |
====== MODE_SELECT ======
<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" |
====== MOVIE_CUT_CHG ======
<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:
|-
|-
|
|
====== MOVIE_DISP ======
<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:
|-
|-
|
|
====== MOVIE_PLAY ======
<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:
|-
|-
|
|
====== MUSIC_PLAY ======
<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:
|-
|-
|
|
====== PV_BRANCH_MODE ======
<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:
|-
|-
|
|
====== PV_END ======
<h6>PV_END</h6>
|Ends PV playback.
|Ends PV playback.
<code>PV_END();</code>
<code>PV_END();</code>
Line 292: Line 292:
|-
|-
|
|
====== SATURATE ======
<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" |
====== SCENE_FADE ======
<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(speed, start, end, r, g, b)</code>
<code>SCENE_FADE(duration, start, end, r, g, b)</code>
|speed
|duration
|Fade duration in seconds
|Fade duration in milliseconds
eg:
eg:


Line 342: Line 342:
|-
|-
|
|
====== SE_EFFECT ======
<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" |
====== TARGET ======
<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:
|-
|-
|
|
====== TARGET_FLYING_TIME ======
<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>
|flytime
|flytime
|time value in DivaTime
|time value in milliseconds
|DivaTime
|int
|-
|-
|
|
====== TIME ======
<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: AGEAGE_CTRL(chara, parts, npr, rot_speed, skip, disp, -1, -1);

chara Character slot int
parts Hair parts to control:

0: both

1: left

2: right

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.

BAR_TIME_SET(bpm, beats);

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: BLOOM(id, unk);

id ID matching the data in pv_param. int
unk Unknown int
CHANGE_FIELD
Changes the field defined in pv_field/pv_db.

CHANGE_FIELD(id);

F2, X: CHANGE_FIELD(id, unk);

id ID matching the field number in pv_field or pv_db. int
CHARA_SIZE
Sets a character's scale/size.

CHARA_SIZE(chara, size);

chara Character slot int
size Character scale int
END
Ends reading of the script.

END();

HAND_SCALE
Sets the size of a character's hand.

FT: HAND_SCALE(chara, hand, scale);

chara Character slot int
hand Which hand to scale:

1: left

2: right

enum
scale Hand scale in percentage times 10; eg. for 105% use 1050 int
LYRIC
Displays a lyric from pv_db.

LYRIC(id, color);

id ID matching the number of a lyric in pv_db.

Use -1 as "disable".

int
color #AARRGGBB hex color code converted to decimal.

eg.: for a red lyric the command would be LYRIC(id, 16711680);

because Red: #00FF00000x00ff000016711680

Default: -1

int
MIKU_DISP
Shows or hides a character in a PV.

MIKU_DISP(chara, disp);

chara Character slot int
disp Whether to display the character or not. bool
MIKU_MOVE
Moves a character in 3D space in a PV.

MIKU_MOVE(chara, x, y, z);

chara Character slot int
x X coordinate int
y Y coordinate int
z Z coordinate int
MIKU_ROT
Rotates a character in a PV.

MIKU_ROT(chara, angle);

chara Character slot int
angle Angle value int
MIKU_SHADOW
Shows or hides a character's shadow in a PV.

MIKU_SHADOW(chara, disp);

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.

MODE_SELECT(difficulty, mode);

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:

1 - Easy

2 - Normal

4 - Hard

8 - Extreme

16 - Encore

Adding the values up to each other results in a group: 6 = Hard (4) and Normal (2).

Use 31 as a universal value (works on any difficulty).

bitfield enum
mode What segment to start/end:

1 - Challenge Time (Arcade games) / Chance Time (Console games) Start

3 - Challenge Time (Arcade games) / Chance Time (Console games) End

8 - Technical Zone Start

9 - Technical Zone End

Only used by the New Classics mod:

4 - Chance Time Start

5 - Chance Time End

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: MOVIE_CUT_CHG(id, disp);

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 movie.list item. Re-calling a movie again doesn't play it from the starting position.

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.

MOVIE_DISP(disp);

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.

MOVIE_PLAY(play);

play 1 - plays the movie

Any other value doesn't do anything.

bool
MUSIC_PLAY
Starts playing the song file defined in pv_db.

MUSIC_PLAY();

PV_BRANCH_MODE
Make future DSC commands only be executed on either the Global, Fail or Success branch.

FT, F, F2, X: PV_BRANCH_MODE(branch);

branch 0 - Global (commands are executed regardless of success state)

1 - Fail (commands are executed only if the PV is in the 'failed' state)

2 - Success (commands are executed only if the PV is in the 'success' state)

enum
PV_END
Ends PV playback.

PV_END();

SATURATE
Changes color saturation in a PV.

SATURATE(amount);

amount Saturation strength on a scale from 0 to 1000:

0 - No color, perfect grayscale

1000 - Regular colors

int
SCENE_FADE
Plays a screen fade effect during PVs.

SCENE_FADE(duration, start, end, r, g, b)

duration Fade duration in milliseconds

eg:

1000: 1 second

800: 0.8 seconds

int
start The opacity the fade will start with

0: fully transparent

1000: fully opaque

int
end The opacity the fade will end with

0: fully transparent

1000: fully opaque

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: SE_EFFECT(id);

id number of a effect_se_name_list item defined in pv_db. int
TARGET
Spawns a rhythm game note.

FT: TARGET(type, pos_x, pos_y, angle, dist, amp, freq);

F: TARGET(type, duration, is_end, pos_x, pos_y, angle, freq, dist, amp, fly_time, sig);

F2, X: TARGET(type, duration, is_end, pos_x, pos_y, angle, freq, dist, amp, fly_time, sig, hit_eff);

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: 300000

int
amp Amplitude of the note's path wave.

Default: 500

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): -1

DivaTime
is_end (for F/F2/X formats)

set to 1 for Sustain 'end' notes, otherwise set to -1

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 BAR_TIME_SET:

Number of quarter note beats minus 1. eg: 3 for 4/4.

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.

TARGET_FLYING_TIME(flytime);

flytime time value in milliseconds int
TIME
Waits until a specified game time.

TIME(t);

t time value in DivaTime DivaTime

References

[edit | edit source]

somewhatlurker's pyDIVA/pyDSC