|
1 | | -/// @description load_instruments(filename) |
2 | | -/// @function load_instruments |
3 | | -/// @param filename |
| 1 | +// load_instruments(filename) |
| 2 | +// Loads custom instruments from a song and adds them to the current song. |
4 | 3 |
|
5 | | -var fn, a, b, hei2; |
| 4 | +var fn, a, b, nbsver, height; |
6 | 5 | fn = argument0 |
7 | 6 | if (fn = "") { |
8 | 7 | if (!directory_exists_lib(songfolder)) songfolder = songs_directory |
9 | 8 | fn = string(get_open_filename_ext("Note Block Songs (*.nbs)|*.nbs", "", songfolder, "Load instruments from song")) |
10 | 9 | } |
11 | 10 | if (fn = "" || !file_exists_lib(fn)) return 0 |
12 | | - |
13 | 11 | buffer = buffer_import(fn) |
14 | | -buffer_read_short() |
15 | | -hei2 = buffer_read_short() |
| 12 | + |
| 13 | +if (buffer_read_short() == 0) { |
| 14 | + nbsver = buffer_read_byte() |
| 15 | +} else { |
| 16 | + nbsver = 0 |
| 17 | +} |
| 18 | + |
| 19 | +// Future version |
| 20 | +if (nbsver > nbs_version) { |
| 21 | + message("Warning: You are opening an NBS file created in a later version of Note Block Studio.\nPlease save the song as a version " + string(nbs_version) + " file or lower via the Save Options menu.","Error") |
| 22 | + return -1 |
| 23 | +} |
| 24 | + |
| 25 | +// Header |
| 26 | +if (nbsver >= 1) buffer_read_byte() // Custom instrument index |
| 27 | +if (nbsver >= 3) buffer_read_short() // Song length |
| 28 | +height = buffer_read_short() |
| 29 | +buffer_read_string_int() // Song name |
| 30 | +buffer_read_string_int() // Soung author |
| 31 | +buffer_read_string_int() // Song original author |
| 32 | +buffer_read_string_int() // Song description |
| 33 | +buffer_read_short() // Tempo |
| 34 | +buffer_read_byte() // Autosave |
| 35 | +buffer_read_byte() // Autosave minutes |
| 36 | +buffer_read_byte() // Time signature |
| 37 | +buffer_read_int() // Minutes spent |
| 38 | +buffer_read_int() // Left-clicks |
| 39 | +buffer_read_int() // Right-clicks |
| 40 | +buffer_read_int() // Blocks added |
| 41 | +buffer_read_int() // Blocks removed |
| 42 | +buffer_read_string_int() // MIDI filename |
| 43 | +if (nbsver >= 4) { |
| 44 | + buffer_read_byte() // Loop |
| 45 | + buffer_read_byte() // Loop count |
| 46 | + buffer_read_short() // Loop start tick |
| 47 | +} |
16 | 48 |
|
17 | | -buffer_read_string_int() |
18 | | -buffer_read_string_int() |
19 | | -buffer_read_string_int() |
20 | | -buffer_read_string_int() |
21 | | -buffer_read_short() |
22 | | -buffer_read_byte() |
23 | | -buffer_read_byte() |
24 | | -buffer_read_byte() |
25 | | -a = buffer_read_int() |
26 | | -a = buffer_read_int() |
27 | | -a = buffer_read_int() |
28 | | -a = buffer_read_int() |
29 | | -a = buffer_read_int() |
30 | | -a = buffer_read_string_int() |
31 | 49 | // Note blocks |
32 | | -while (1) { |
| 50 | +while (true) { |
33 | 51 | a = buffer_read_short() |
34 | 52 | if (a = 0) break |
35 | | - while (1) { |
| 53 | + while (true) { |
36 | 54 | a = buffer_read_short() |
37 | 55 | if (a = 0) break |
38 | | - repeat (2) buffer_read_byte() |
| 56 | + buffer_read_byte() // Instrument |
| 57 | + buffer_read_byte() // Key |
| 58 | + if (nbsver >= 4) { |
| 59 | + buffer_read_byte() // Velocity |
| 60 | + buffer_read_byte() // Pan |
| 61 | + buffer_read_short() // Pitch |
| 62 | + } |
39 | 63 | } |
40 | 64 | } |
41 | 65 | if (buffer_is_eof()) { |
42 | | - message("This file does not contain any custom instruments.", "Error") |
43 | | - return 0 |
| 66 | + message("This file does not contain any custom instruments.", "Error") |
| 67 | + return 0 |
44 | 68 | } |
45 | | -//buffer_read_short() |
46 | | -for (b = 0; b < hei2; b += 1) { |
47 | | - buffer_read_string_int() |
48 | | - buffer_read_byte() |
| 69 | + |
| 70 | +// Layers |
| 71 | +for (b = 0; b < height; b++) { |
| 72 | + buffer_read_string_int() // Layer name |
| 73 | + if (nbsver >= 4) buffer_read_byte() // Layer lock |
| 74 | + buffer_read_byte() // Layer volume |
| 75 | + if (nbsver >= 2) buffer_read_byte() // Layer stereo |
49 | 76 | } |
50 | 77 | if (buffer_is_eof()) { |
51 | | - message("This file does not contain any custom instruments.", "Error") |
52 | | - return 0 |
| 78 | + message("This file does not contain any custom instruments.", "Error") |
| 79 | + return 0 |
53 | 80 | } |
| 81 | + |
| 82 | +// Instruments |
54 | 83 | a = buffer_read_byte() |
55 | 84 | if (a = 0) { |
56 | 85 | message("This file does not contain any custom instruments.", "Error") |
57 | 86 | return 0 |
58 | 87 | } |
59 | | -for (b = 0; b < a; b += 1) { |
60 | | - var name = buffer_read_string_int(); |
61 | | - var filename = buffer_read_string_int(); |
62 | | - var key = buffer_read_byte(); |
63 | | - var press = buffer_read_byte(); |
64 | | - var ins = new_instrument(name, filename, true, press, key); |
| 88 | +for (b = 0; b < a; b++) { |
| 89 | + var name = buffer_read_string_int() |
| 90 | + var filename = buffer_read_string_int() |
| 91 | + var key = buffer_read_byte() |
| 92 | + var press = buffer_read_byte() |
| 93 | + var ins = new_instrument(name, filename, true, press, key) |
65 | 94 | with (ins) |
66 | 95 | instrument_load() |
67 | 96 | ds_list_add(instrument_list, ins) |
68 | 97 | } |
69 | 98 | changed = true |
| 99 | + |
0 commit comments