User:GGAB3/Sandbox: Difference between revisions

From DivaDocs
GGAB3 (talk | contribs)
No edit summary
GGAB3 (talk | contribs)
mNo edit summary
 
(10 intermediate revisions by the same user not shown)
Line 3: Line 3:
For the later games (Project DIVA F2nd and Project DIVA X) the <code>pv_db</code> file is encrypted using DIVAFILE encryption. They need to be decrypted before editing.
For the later games (Project DIVA F2nd and Project DIVA X) the <code>pv_db</code> file is encrypted using DIVAFILE encryption. They need to be decrypted before editing.


Multiple <code>pv_db</code> databases can not be loaded sequentially. Instead, only the contents of the last loaded <code>pv_db</code> file gets parsed by the game, overwriting the '''''entire''''' base game <code>pv_db.txt</code> database as a result.
Multiple <code>pv_db</code> databases can not be loaded sequentially. Instead, only the contents of the last loaded <code>pv_db</code> file gets parsed by the game, overwriting the '''''entire''''' base game <code>pv_db</code> as a result.


<code>pv_db</code> databases can have a prefix in their file name to indicate a specific use case:
<code>pv_db</code> files can have a prefix in their file name to indicate a specific use case:


* <code>'''mdata'''_pv_db</code> - Primarily used in Project DIVA Arcade Future Tone's [[MDATA]] system. It is also seen in games such as Project DIVA Mega Mix+, where it is used as the dlc <code>pv_db</code>.  
* <code>'''mdata'''_pv_db</code> - Primarily used in Project DIVA Arcade Future Tone's [[MDATA]] system. It is also seen in games such as Project DIVA Mega Mix+, where it is used as the dlc <code>pv_db</code>.  
Line 11: Line 11:


== Structure ==
== Structure ==
Similarly to other plain text databases in Project DIVA, '''proprieties'''/'''keywords''' are separated by <code>.</code> and '''values''' are attributed to certain proprieties using <code>=</code>. All lines in the database need to be written in lexicographical order (a → z, 0 → 9) in order to be parsed correctly by the game.
Similarly to other plain text databases in Project DIVA, '''proprieties'''/'''keywords''' are separated by <code>.</code> and '''values''' are attributed to certain proprieties using <code>=</code>. All lines in the database need to be written in lexicographical order (a → z, 0 → 9 etc.) in order to be parsed correctly by the game.


Each entry in a <code>pv_db</code> begins by specifying the PV slot to which we can attach a propriety and attribute a value, like this:
Each entry in a <code>pv_db</code> begins by specifying the PV slot to which we can attach a propriety and attribute a value, like this:
Line 17: Line 17:
<code>pv_###.propriety=value</code>
<code>pv_###.propriety=value</code>


<code>pv_268.date=202001001</code> (pv_268 [Catch the Wave]'s date is 01 Jan 2020.)
Example:


Proprieties can also be chained or composed of lists:
<code>pv_268.date=202001001</code> (meaning pv_268 [Catch the Wave]'s date is 01 Jan 2020.)
 
Proprieties can also be chained or composed of arrays:
{| class="wikitable"
{| class="wikitable"
|<code>pv_268.songinfo.lyrics=kz</code>  
|<code>pv_268.songinfo.lyrics=kz</code>  
Line 27: Line 29:
|<code>pv_268.lyric.001=Catch the wave君と</code>
|<code>pv_268.lyric.001=Catch the wave君と</code>
<code>pv_268.lyric.002=掴む音で</code>
<code>pv_268.lyric.002=掴む音で</code>
<code>pv_268.lyric.003=まだまだ歌おう</code>
<code>pv_268.lyric.003=まだまだ歌おう</code>
<code>pv_268.lyric.004=Wave your handsもっと</code>
<code>pv_268.lyric.004=Wave your handsもっと</code>
|list properties
|array properties
|}
|}


Line 36: Line 40:
{| class="wikitable"
{| class="wikitable"
|+
|+
!Keywords and derived keywords
! colspan="5" |Keywords and derived keywords
!
!
!
!Valid values
!Valid values
!Requirement level
!Description
!Description
|-
|-
|bpm
| rowspan="6" |another_song
| colspan="4" |name
|
|
|
|
|-
| colspan="4" |name_en
|
|
|
|-
| colspan="4" |song_file_name
|
|
|-
| colspan="4" |vocal_chara_num
|enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET] (?)
|
|-
| colspan="4" |vocal_disp_name
|
|
|-
| colspan="4" |vocal_disp_name_en
|
|
|-
|auth_replace_by_module
|
|
|
|
|
|
|-
| colspan="5" |bpm
|any number
|any number
|'''Critical''', omitting this command or leaving its value empty will cause the PV to not appear in the Song Select screen.
|BPM of the song. Not directly used in the game but '''required for loading the PV'''.
|BPM of the song. Not directly used in MM+, but required for loading the PV.
|-
|-
|chainslide_failure_name
| colspan="5" |chainslide_failure_name
|
|
|
|
|-
| colspan="5" |chainslide_first_name
|
|
|
|
|-
| colspan="5" |chainslide_sub_name
|
|
|
|
|-
|-
|chainslide_first_name
| colspan="5" |chainslide_success_name
|
|
|
|-
| rowspan="5" |chrcam
| rowspan="4" |'''''[array index]'''''
| colspan="3" |chara
|enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
|
|
|-
| colspan="3" |id
|
|
|
|
|-
| colspan="3" |name
|
|
|
|
|-
|-
|chainslide_sub_name
| colspan="3" |org_name
|
|
|
|
|-
| colspan="4" |length
|
|
|
|
|-
| rowspan="6" |chreff
| rowspan="5" |'''''[array index]'''''
| rowspan="3" |data
| rowspan="2" |'''''[array index]'''''
|name
|
|
|
|
|-
|-
|chainslide_success_name
|type
|enum: [AUTH3D, AUTH3D_OBJ]
|
|
|-
| colspan="2" |length
|
|
|-
| colspan="3" |id
|
|
|
|
|-
| colspan="3" |name
|enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
|
|
|-
| colspan="4" |num
|
|
|
|
|-
|-
|date
| rowspan="5" |chrmot
| rowspan="4" |'''''[array index]'''''
| colspan="3" |chara
|enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
|
|
|-
| colspan="3" |id
|
|
|
|
|any number representing a date formatted like <code>yyyymmdd</code>
|'''Critical''', omitting this command or leaving its value empty will cause the PV to not appear in the Song Select screen.
|Date of the song's addition to the game. Not directly used in MM+, but required for loading the PV.
|-
|-
| rowspan="9" |difficulty
| colspan="3" |name
| rowspan="2" |attribute
|
| colspan="2" |original
|
|
|-
| colspan="3" |org_name
|
|
|
|
|-
|-
| colspan="2" |slide
| colspan="4" |length
|any number representing a date formatted like <code>yyyymmdd</code>
|Date of the song's addition to the game. Not directly used in game but '''required for loading the PV'''.
|-
| colspan="5" |date
|
|
|
|-
| rowspan="13" |difficulty
| rowspan="3" |attribute
| colspan="3" |extra
|bool
|
|
|-
| colspan="3" |original
|bool
|
|
|-
|-
| rowspan="7" |easy
| colspan="3" |slide
|bool
|Specifies if the chart has Slide notes in it. It also adds the slide icon in the Song Select Screen.
|-
| rowspan="10" |easy


normal
normal
Line 113: Line 196:


encore
encore
| rowspan="6" |'''''[list item]'''''  
| rowspan="9" |'''''[array index]'''''
|edition
| rowspan="3" |attribute
|extra
|bool
|
|
|-
|original
|bool
|
|
|-
|slide
|bool
|Specifies if the chart has Slide notes in it. It also adds the slide icon in the Song Select Screen.
|-
| colspan="2" |edition
|any number
|<code>1</code> sets the chart as "extra". Normally only used to set an additional <code>extreme</code> entry as '''Extra Extreme'''.
|-
| colspan="2" |level
|string formatted like <code>PV_LV_'''XX'''_'''Y'''</code>,
where XX is a number from <code>01</code> to <code>10</code> (including leading 0) and Y is either <code>0</code> or <code>5</code>.
|Sets the chart's star rating.
|-
| colspan="2" |level_sort_index
|any number
|
|
|-
|-
|level
| colspan="2" |script_file_name
|path to the script file, relative to the folder the content is being loaded from: <code>rom/...</code>
|Specifies where the chart's [[DivaScript|script]] is located.
|-
| colspan="2" |script_format
|hex number representing the contents of the <code>.dsc</code>'s first 4 bytes
|Specifies the [[DivaScript#DSC Formats|script format]].
|-
| colspan="2" |version
|any number
|
|
|-
| colspan="3" |length
|number of items in array for each difficulty
|Sets the length for each difficulty. Usually set to <code>1</code> and only set to <code>2</code> for <code>extreme</code> entries that have Extra Extreme.
|-
| colspan="5" |disable_calc_motfrm_limit
|bool
|
|-
| rowspan="9" |disp2d
| colspan="4" |set_name
|string from the corresponding <code>aet_gam_pv###.bin</code> Aet Set.
|Links an Aet Set to be called and displayed in the PV.
|-
| colspan="4" |target_shadow_type
|
|
|-
| colspan="4" |title_2d_layer
|
|
|-
| colspan="4" |title_end_2d_field
|
|
|-
| colspan="4" |title_end_2d_low_field
|
|
|-
| colspan="4" |title_end_3d_field
|
|
|-
| colspan="4" |title_start_2d_field
|
|
|
|
|-
|-
|level_sort_index
| colspan="4" |title_start_2d_low_field
|
|
|
|-
| colspan="4" |title_start_3d_field
|
|
|
|
|-
|-
|script_file_name
| colspan="5" |edit
|
|
|
|-
|edit_chara_scale
| colspan="4" |bool
|
|
|
|
|-
|-
|script_format
|edit_effect
|
|
|
|
|
|
|
|
|
|-
|-
|version
|edit_effect_low_field
|
|
|
|
|
|
|
|
|
|-
|-
| colspan="2" |length
|effect_se_file_name
|
|
|
|
|
|
|
|
|
|-
|-
|disp2d
|effect_se_name_list
| colspan="3" |set_name
|
|
|
|
|
|
|
Line 156: Line 322:
|-
|-
| rowspan="3" |ex_song
| rowspan="3" |ex_song
| rowspan="2" |'''''[list item]'''''  
| rowspan="2" |'''''[array index]'''''
| colspan="2" |chara
| colspan="3" |chara
|
|
|-
| colspan="3" |file
|
|
|-
| colspan="4" |length
|
|
|-
| colspan="5" |eyes_base_adjust_type
|
|
|-
| colspan="5" |eyes_xrot_adjust
|
|
|-
| colspan="5" |eyes_rot_rate
|
|
|-
|frame_texture
|
|
|
|
|
|
|-
|frame_texture_a
|
|
|
|
|
|
|
|
|
|-
|-
| colspan="2" |file
|frame_texture_b
|
|
|
|
|
|
|
|
|
|-
|-
| colspan="3" |length
|frame_texture_c
|
|
|
|
|
|
|-
|frame_texture_d
|
|
|
|
|
|
|-
|frame_texture_e
|
|
|
|
|
|
|-
|frame_texture_type
|
|
|
|
|
|
|-
|frame_texture_a_type
|
|
|
|
|
|
|-
|frame_texture_b_type
|
|
|
|
|
|
|-
|frame_texture_c_type
|
|
|
|
|
|
|
|
|
|-
|-
| colspan="4" |eyes_xrot_adjust
|frame_texture_d_type
|
|
|
|
|
|
|
|
|
|-
|-
| colspan="4" |hidden_timing
|frame_texture_e_type
|
|
|
|
|
|
|
|
|
|-
|-
| colspan="4" |high_speed_rate
|hand_item
| colspan="4" |'''''[array index]'''''
|
|
|
|
|-
| colspan="5" |hidden_timing
|decimal number
|Controls the [[Hidden Modifier]].
|-
| colspan="5" |high_speed_rate
|decimal number
|Controls the [[High Speed Modifier]].
|-
| colspan="5" |is_old_pv
|bool
|
|
|-
|-
| rowspan="2" |lyric
|lyric
lyric_en
lyric_en
| colspan="3" rowspan="2" |'''''[lyric number]'''''
| colspan="4" |'''''[lyric array index]'''''
(3 digits, including leading 0's)  
(3 digits, including leading 0's)  
|String containing the lyric.
Each numbered lyric can be called in the [[DivaScript|PV script]] in any order.
|
|
|-
| rowspan="2" |mdata
| colspan="4" |dir
|
|
|
|
|-
|-
|
| colspan="4" |flag
|
|
|
|
Line 210: Line 488:


motion6P
motion6P
| colspan="3" |'''''[motion number]'''''
| colspan="4" |'''''[motion array index]'''''
(2 digits, including leading 0)  
(2 digits, including leading 0)  
|
|
|
|
|-
| rowspan="2" |movie_list
| colspan="3" |'''''[array index]'''''
|name
|path to a movie file, relative to the folder the content is being loaded from: <code>rom/...</code>
|
|-
| colspan="4" |length
|number of items is array
|
|
|-
|-
| colspan="4" |pack
| colspan="5" |movie_file_name
|path to a movie file, relative to the folder the content is being loaded from: <code>rom/...</code>
|
|
|-
| colspan="5" |movie_pv_type
|enum: [ONLY, ALTERNATELY, PARALLEL, EFFECT]
|
|
|-
| colspan="5" |movie_surface
|enum: [BACK, FRONT]
|
|
|-
|-
| rowspan="7" |performer
|npr
| rowspan="6" |'''''[list item]'''''
| colspan="4" |chara_lightness
|chara
|
|
|
|
|-
|osage_init
|
|
|
|
|-
|pv_costume
|
|
|
|
Line 235: Line 528:
|
|
|-
|-
|size
| colspan="5" |pack
|
|
|
|-
| rowspan="13" |performer
| rowspan="12" |'''''[array index]'''''
| colspan="3" |chara
|enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
|
|
|-
| colspan="3" |costume
|
|
|
|
|-
|-
|type
| colspan="3" |exclude
|
|
|
|
|-
| colspan="3" |fixed
|
|
|
|
|-
|-
| colspan="3" |item_back
|
|
|
|-
| colspan="3" |item_face
|
|
|
|
|-
| colspan="3" |item_neck
|
|
|
|
|-
|-
| colspan="3" |item_zujo
|
|
|
|-
| colspan="3" |pv_costume
|
|
|
|
|-
| colspan="3" |pseudo_same_id
|
|
|
|
|-
|-
|num
| colspan="3" |size
|enum: [NORMAL, PLAY_CHARA, PV_CHARA, SHORT, TALL]
|
|
|-
| colspan="3" |type
|enum: [VOCAL, PSEUDO_DEFAULT, PSEUDO_SAME, PSEUDO_SWIM, PSEUDO_SWIM_S, PSEUDO_MY_CHARA, GUEST]
|
|
|-
| colspan="4" |num
|
|
|
|
|-
| colspan="5" |pre_play_script
|bool
|
|
|-
|-
Line 269: Line 593:
| colspan="3" |file_name
| colspan="3" |file_name
|
|
|
|
|-
|pv_item
|
|
|
|
|
|
|-
| colspan="5" |pvbranch_success_se_name
|
|
|
|
|-
|-
|rank_board_id
|rank_board_id
|
|
|
|
|
|
|-
|remix_parent
|
|
|
|
|
|
|-
|resolution_scale
|
|
|
|
|
|
|-
|resolution_scale_neo
|
|
|
|
Line 351: Line 711:
|
|
|-
|-
| rowspan="4" |songinfo
|song_name_reading_en
songinfo_en
|
|arranger
|
|
|
|
Line 360: Line 719:
|
|
|-
|-
|illustrator
| rowspan="9" |songinfo
songinfo_en
| colspan="4" |arranger
|string
|
|
|-
| rowspan="2" |ex_info
| rowspan="2" |0
1
2
3
''[this is '''not''' a proper array]''
| colspan="2" |key
|string
| rowspan="2" |Used for custom songinfo credits.
'''''ex_info isn't displayed in MM+ by default'''''
|-
| colspan="2" |val
|string
|-
| colspan="4" |guitar_player
|string
|
|
|-
| colspan="4" |illustrator
|string
|'''''illustrator isn't displayed in MM+ by default'''''
|-
| colspan="4" |lyrics
|string
|
|
|-
| colspan="4" |manipulator
|string
|
|
|-
| colspan="4" |music
|string
|
|
|-
|-
|lyrics
| colspan="4" |pv_editor
|string
|
|
|-
| colspan="5" |sudden_timing
|
|
|
|
|-
|stage_param
|
|
|
|
|-
|music
|
|
|
|
|
|
|
|
|-
| rowspan="3" |title_image
| colspan="4" |aet_name
|string
|
|
|-
|-
| colspan="4" |sudden_timing
| colspan="4" |end_time
|number
|
|
|-
| colspan="4" |time
|number
|
|
|-
| colspan="5" |use_osage_play_data
|bool
|
|
|}
|}
__FORCETOC__
__FORCETOC__

Latest revision as of 18:16, 27 January 2026

Project DIVA games store general information about the PVs in a database file called pv_db.txt, located in the rom folder. The data inside is stored in plain text, meaning the file can be opened and edited using any text editor, such as Notepad.

For the later games (Project DIVA F2nd and Project DIVA X) the pv_db file is encrypted using DIVAFILE encryption. They need to be decrypted before editing.

Multiple pv_db databases can not be loaded sequentially. Instead, only the contents of the last loaded pv_db file gets parsed by the game, overwriting the entire base game pv_db as a result.

pv_db files can have a prefix in their file name to indicate a specific use case:

  • mdata_pv_db - Primarily used in Project DIVA Arcade Future Tone's MDATA system. It is also seen in games such as Project DIVA Mega Mix+, where it is used as the dlc pv_db.
  • mod_pv_db - Custom prefix read by DivaModLoader for Project DIVA Mega Mix+ mods. The contents of each mod_pv_db gets loaded sequentially, in the mod load order. Entries pointing to the same PV slot get overwritten in load order.

Structure

[edit | edit source]

Similarly to other plain text databases in Project DIVA, proprieties/keywords are separated by . and values are attributed to certain proprieties using =. All lines in the database need to be written in lexicographical order (a → z, 0 → 9 etc.) in order to be parsed correctly by the game.

Each entry in a pv_db begins by specifying the PV slot to which we can attach a propriety and attribute a value, like this:

pv_###.propriety=value

Example:

pv_268.date=202001001 (meaning pv_268 [Catch the Wave]'s date is 01 Jan 2020.)

Proprieties can also be chained or composed of arrays:

pv_268.songinfo.lyrics=kz

pv_268.songinfo.music=kz

chained properties
pv_268.lyric.001=Catch the wave君と

pv_268.lyric.002=掴む音で

pv_268.lyric.003=まだまだ歌おう

pv_268.lyric.004=Wave your handsもっと

array properties

List of valid pv_db keywords

[edit | edit source]

All the keywords that can be used in pv_db are defined in the game's internal systems. Here is a table with all the keywords that can be used after pv_###.:

Keywords and derived keywords Valid values Description
another_song name
name_en
song_file_name
vocal_chara_num enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET] (?)
vocal_disp_name
vocal_disp_name_en
auth_replace_by_module
bpm any number BPM of the song. Not directly used in the game but required for loading the PV.
chainslide_failure_name
chainslide_first_name
chainslide_sub_name
chainslide_success_name
chrcam [array index] chara enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
id
name
org_name
length
chreff [array index] data [array index] name
type enum: [AUTH3D, AUTH3D_OBJ]
length
id
name enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
num
chrmot [array index] chara enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
id
name
org_name
length any number representing a date formatted like yyyymmdd Date of the song's addition to the game. Not directly used in game but required for loading the PV.
date
difficulty attribute extra bool
original bool
slide bool Specifies if the chart has Slide notes in it. It also adds the slide icon in the Song Select Screen.
easy

normal

hard

extreme

encore

[array index] attribute extra bool
original bool
slide bool Specifies if the chart has Slide notes in it. It also adds the slide icon in the Song Select Screen.
edition any number 1 sets the chart as "extra". Normally only used to set an additional extreme entry as Extra Extreme.
level string formatted like PV_LV_XX_Y,

where XX is a number from 01 to 10 (including leading 0) and Y is either 0 or 5.

Sets the chart's star rating.
level_sort_index any number
script_file_name path to the script file, relative to the folder the content is being loaded from: rom/... Specifies where the chart's script is located.
script_format hex number representing the contents of the .dsc's first 4 bytes Specifies the script format.
version any number
length number of items in array for each difficulty Sets the length for each difficulty. Usually set to 1 and only set to 2 for extreme entries that have Extra Extreme.
disable_calc_motfrm_limit bool
disp2d set_name string from the corresponding aet_gam_pv###.bin Aet Set. Links an Aet Set to be called and displayed in the PV.
target_shadow_type
title_2d_layer
title_end_2d_field
title_end_2d_low_field
title_end_3d_field
title_start_2d_field
title_start_2d_low_field
title_start_3d_field
edit
edit_chara_scale bool
edit_effect
edit_effect_low_field
effect_se_file_name
effect_se_name_list
ex_song [array index] chara
file
length
eyes_base_adjust_type
eyes_xrot_adjust
eyes_rot_rate
frame_texture
frame_texture_a
frame_texture_b
frame_texture_c
frame_texture_d
frame_texture_e
frame_texture_type
frame_texture_a_type
frame_texture_b_type
frame_texture_c_type
frame_texture_d_type
frame_texture_e_type
hand_item [array index]
hidden_timing decimal number Controls the Hidden Modifier.
high_speed_rate decimal number Controls the High Speed Modifier.
is_old_pv bool
lyric

lyric_en

[lyric array index]

(3 digits, including leading 0's)

String containing the lyric.

Each numbered lyric can be called in the PV script in any order.

mdata dir
flag
motion

motion2P

motion3P

motion4P

motion5P

motion6P

[motion array index]

(2 digits, including leading 0)

movie_list [array index] name path to a movie file, relative to the folder the content is being loaded from: rom/...
length number of items is array
movie_file_name path to a movie file, relative to the folder the content is being loaded from: rom/...
movie_pv_type enum: [ONLY, ALTERNATELY, PARALLEL, EFFECT]
movie_surface enum: [BACK, FRONT]
npr chara_lightness
osage_init
pack
performer [array index] chara enum: [MIK, RIN, LEN, LUK, KAI, MEI, NER, HAK, SAK, TET, EXT]
costume
exclude
fixed
item_back
item_face
item_neck
item_zujo
pv_costume
pseudo_same_id
size enum: [NORMAL, PLAY_CHARA, PV_CHARA, SHORT, TALL]
type enum: [VOCAL, PSEUDO_DEFAULT, PSEUDO_SAME, PSEUDO_SWIM, PSEUDO_SWIM_S, PSEUDO_MY_CHARA, GUEST]
num
pre_play_script bool
pv_expression file_name
pv_item
pvbranch_success_se_name
rank_board_id
remix_parent
resolution_scale
resolution_scale_neo
sabi play_time
start_time
se_name
slide_name
slidertouch_name
song_file_name
song_name
song_name_en
song_name_reading
song_name_reading_en
songinfo

songinfo_en

arranger string
ex_info 0

1

2

3

[this is not a proper array]

key string Used for custom songinfo credits.

ex_info isn't displayed in MM+ by default

val string
guitar_player string
illustrator string illustrator isn't displayed in MM+ by default
lyrics string
manipulator string
music string
pv_editor string
sudden_timing
stage_param
title_image aet_name string
end_time number
time number
use_osage_play_data bool