User:GGAB3/Sandbox: Difference between revisions

From DivaDocs
GGAB3 (talk | contribs)
No edit summary
GGAB3 (talk | contribs)
mNo edit summary
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 38: Line 42:
! colspan="4" |Keywords and derived keywords
! colspan="4" |Keywords and derived keywords
!Valid values
!Valid values
!Requirement level
!Description
!Description
|-
|-
Line 44: Line 47:
====== bpm ======
====== bpm ======
|any number
|any number
|'''Critical''', omitting this keyword 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.
|-
|-
| colspan="4" |
| colspan="4" |
====== chainslide_failure_name ======
====== chainslide_failure_name ======
|
|
| -
|
|
|-
|-
Line 56: Line 57:
====== chainslide_first_name ======
====== chainslide_first_name ======
|
|
| -
|
|
|-
|-
Line 62: Line 62:
====== chainslide_sub_name ======
====== chainslide_sub_name ======
|
|
| -
|
|
|-
|-
Line 68: Line 67:
====== chainslide_success_name ======
====== chainslide_success_name ======
|
|
| -
|
|
|-
|-
Line 74: Line 72:
====== date ======
====== date ======
|any number representing a date formatted like <code>yyyymmdd</code>
|any number representing a date formatted like <code>yyyymmdd</code>
|'''Critical''', omitting this keyword 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 game but '''required for loading the PV'''.
|Date of the song's addition to the game. Not directly used in MM+, but required for loading the PV.
|-
|-
| rowspan="9" |
| rowspan="11" |
====== difficulty ======
====== difficulty ======
| rowspan="2" |attribute
| rowspan="2" |attribute
| colspan="2" |original
| colspan="2" |original
|<code>0</code> or <code>1</code>
|<code>0</code> or <code>1</code>
| -
|
|
|-
|-
| colspan="2" |slide
| colspan="2" |slide
|<code>0</code> or <code>1</code>
|<code>0</code> or <code>1</code>
| -
|Specifies if the chart has Slide notes in it. It also adds the slide icon in the Song Select Screen.
|Specifies if the chart has Slide notes in it by adding the icon in the Song Select Screen.
|-
|-
| rowspan="7" |easy
| rowspan="9" |easy


normal
normal
Line 99: Line 94:


encore
encore
| rowspan="6" |'''''[list item]'''''  
| rowspan="8" |'''''[array index]'''''
| rowspan="2" |
|
|
|-
|
|
|-
|edition
|edition
|<code>0</code> or <code>1</code>
|<code>0</code> or <code>1</code>
| -
|Sets the chart as "extra". Normally only used to set an additional <code>extreme</code> entry as '''Extra Extreme'''.
|Sets the chart as "extra". Normally only used to set an additional <code>extreme</code> entry as '''Extra Extreme'''.
|-
|-
Line 108: Line 109:
|string formatted like <code>PV_LV_'''XX'''_'''Y'''</code>,
|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>.
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.
|Sets the chart's star rating.
|-
|-
|level_sort_index
|level_sort_index
|any number
|any number
| -
|
|
|-
|-
|script_file_name
|script_file_name
|path to the script file, relative to the folder the content is being loaded from: <code>rom/...</code>
|path to the script file, relative to the folder the content is being loaded from: <code>rom/...</code>
|'''Critical''', omitting this keyword or leaving its value empty will cause the PV to not appear in the Song Select screen.
|Specifies where the chart's [[DivaScript|script]] is located.
|Specifies where the chart's [[DivaScript|script]] is located.
|-
|-
|script_format
|script_format
|hex number representing the contents of the <code>.dsc</code>'s first 4 bytes  
|hex number representing the contents of the <code>.dsc</code>'s first 4 bytes  
| -
|Specifies the [[DivaScript#DSC Formats|script format]].
|Specifies the [[DivaScript#DSC Formats|script format]].
|-
|-
|version
|version
|
|
| -
|
|
|-
|-
| colspan="2" |length
| colspan="2" |length
|number of entries for each difficulty
|number of entries for each difficulty
|'''Critical''', omitting this keyword or leaving its value empty will cause the PV to not appear in the Song Select screen.
|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.
|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.
|-
|-
|disp2d
| rowspan="4" |disp2d
| colspan="3" |set_name
| colspan="3" |set_name
|number from the corresponding <code>aet_gam_pv'''###'''.bin</code> AET Set.
|number from the corresponding <code>aet_gam_pv'''<big>###</big>'''.bin</code> Aet Set.
| -
|Links an Aet Set to be called and displayed in the PV.
|Links a AET Set to be called and displayed in the PV.
|-
| colspan="3" |target_shadow_type
|
|
|-
| colspan="3" |title_end_2d_field
|
|
|-
| colspan="3" |title_start_2d_field
|
|
|-
|-
| rowspan="3" |ex_song
| rowspan="3" |ex_song
| rowspan="2" |'''''[list item]'''''  
| rowspan="2" |'''''[array index]'''''
| colspan="2" |chara
| colspan="2" |chara
|
|
| -
|
|
|-
|-
| colspan="2" |file
| colspan="2" |file
|
|
| -
|
|
|-
|-
| colspan="3" |length
| colspan="3" |length
|
|
| -
|
|
|-
|-
| colspan="4" |eyes_xrot_adjust
| colspan="4" |eyes_xrot_adjust
|
|
| -
|
|-
|hand_item
| colspan="3" |'''''[array index]'''''
|
|
|
|-
|-
| colspan="4" |hidden_timing
| colspan="4" |hidden_timing
|decimal number
|decimal number
| -
|Controls the [[Hidden Modifier]].
|Controls the [[Hidden Modifier]].
|-
|-
| colspan="4" |high_speed_rate
| colspan="4" |high_speed_rate
|decimal number
|decimal number
| -
|Controls the [[High Speed Modifier]].
|Controls the [[High Speed Modifier]].
|-
|-
| rowspan="2" |lyric
| colspan="4" |is_old_pv
|bool
|
|-
|lyric
lyric_en
lyric_en
| colspan="3" rowspan="2" |'''''[lyric number]'''''
| colspan="3" |'''''[lyric array index]'''''
(3 digits, including leading 0's)  
(3 digits, including leading 0's)  
|String containing the lyric.
|String containing the lyric.
Each numbered lyric can be called in the [[DivaScript|PV script]].
Each numbered lyric can be called in the [[DivaScript|PV script]] in any order.
| -
|
|-
|
| -
|
|
|-
|-
Line 198: Line 202:


motion6P
motion6P
| colspan="3" |'''''[motion number]'''''
| colspan="3" |'''''[motion array index]'''''
(2 digits, including leading 0)  
(2 digits, including leading 0)  
|
|
|
|-
|npr
| colspan="3" |chara_lightness
|
|
|
|
|-
|-
| colspan="4" |pack
| colspan="4" |pack
|
|
|
|
|
|-
|-
| rowspan="7" |performer
| rowspan="7" |performer
| rowspan="6" |'''''[list item]'''''  
| rowspan="6" |'''''[array index]'''''
|chara
|chara
|
|
|
|
|
Line 218: Line 224:
|-
|-
|pv_costume
|pv_costume
|
|
|
|
|
Line 224: Line 229:
|-
|-
|size
|size
|
|
|
|
|
Line 230: Line 234:
|-
|-
|type
|type
|
|
|
|
|
|
|
|-
|-
|
|
|
|
|
Line 241: Line 243:
|
|
|-
|-
|
|
|
|
|
Line 248: Line 249:
|-
|-
|num
|num
|
|
|
|
|
Line 256: Line 256:
|pv_expression
|pv_expression
| colspan="3" |file_name
| colspan="3" |file_name
|
|
|
|
|
|-
|-
|rank_board_id
|rank_board_id
|
|
|
|
|
Line 270: Line 268:
| rowspan="2" |sabi
| rowspan="2" |sabi
|play_time
|play_time
|
|
|
|
|
Line 277: Line 274:
|-
|-
|start_time
|start_time
|
|
|
|
|
Line 284: Line 280:
|-
|-
|se_name
|se_name
|
|
|
|
|
Line 292: Line 287:
|-
|-
|slide_name
|slide_name
|
|
|
|
|
Line 300: Line 294:
|-
|-
|slidertouch_name
|slidertouch_name
|
|
|
|
|
Line 308: Line 301:
|-
|-
|song_file_name
|song_file_name
|
|
|
|
|
Line 316: Line 308:
|-
|-
|song_name
|song_name
|
|
|
|
|
Line 324: Line 315:
|-
|-
|song_name_en
|song_name_en
|
|
|
|
|
Line 332: Line 322:
|-
|-
|song_name_reading
|song_name_reading
|
|
|
|
|
Line 342: Line 331:
songinfo_en
songinfo_en
|arranger
|arranger
|
|
|
|
|
Line 349: Line 337:
|-
|-
|illustrator
|illustrator
|
|
|
|
|
Line 356: Line 343:
|-
|-
|lyrics
|lyrics
|
|
|
|
|
Line 363: Line 349:
|-
|-
|music
|music
|
|
|
|
|
Line 370: Line 355:
|-
|-
| colspan="4" |sudden_timing
| colspan="4" |sudden_timing
|
|
|
|
|
|}
|}
__FORCETOC__
__FORCETOC__

Revision as of 19:06, 12 December 2025

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

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

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
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
date
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.
difficulty
attribute original 0 or 1
slide 0 or 1 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]
edition 0 or 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
length number of entries 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.
disp2d set_name number 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_end_2d_field
title_start_2d_field
ex_song [array index] chara
file
length
eyes_xrot_adjust
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.

motion

motion2P

motion3P

motion4P

motion5P

motion6P

[motion array index]

(2 digits, including leading 0)

npr chara_lightness
pack
performer [array index] chara
pv_costume
size
type
num
pv_expression file_name
rank_board_id
sabi play_time
start_time
se_name
slide_name
slidertouch_name
song_file_name
song_name
song_name_en
song_name_reading
songinfo

songinfo_en

arranger
illustrator
lyrics
music
sudden_timing