yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tracker.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ZELDA3_TRACKER_H
2#define YAZE_APP_ZELDA3_TRACKER_H
3
4#include <vector>
5
6#include "app/rom.h"
7#include "util/macro.h"
8
9namespace yaze {
10namespace zelda3 {
11
18namespace music {
19
20// bank 19, 1A, 1B
21// iirc 1A is OW, 1B is dungeon
22// 19 is general spc stuff like samples, ects
23constexpr char op_len[32] = {1, 1, 2, 3, 0, 1, 2, 1, 2, 1, 1, 3, 0, 1, 2, 3,
24 1, 3, 3, 0, 1, 3, 0, 3, 3, 3, 1, 2, 0, 0, 0, 0};
25
26static int sbank_ofs[] = {0xc8000, 0, 0xd8000, 0};
27
28constexpr char fil1[4] = {0, 15, 61, 115};
29constexpr char fil2[4] = {0, 4, 5, 6};
30constexpr char fil3[4] = {0, 0, 15, 13};
31
32constexpr int kOverworldMusicBank = 0x0D0000;
33constexpr int kDungeonMusicBank = 0x0D8000;
34
35using text_buf_ty = char[512];
36
38 unsigned short start;
39 unsigned short len;
40 unsigned short relnum;
41 unsigned short relsz;
42 unsigned short *relocs;
43 unsigned short bank;
44 unsigned short addr;
45 unsigned char *buf;
46 int flag;
47};
48
49struct SongRange {
50 unsigned short start;
51 unsigned short end;
52
53 short first;
54 short inst;
55 short bank;
56
57 unsigned char endtime;
58 unsigned char filler;
59
60 int editor;
61};
62
63struct SongPart {
64 uint8_t flag;
65 uint8_t inst;
66 short tbl[8];
67 unsigned short addr;
68};
69
70struct Song {
71 unsigned char flag;
72 unsigned char inst;
74 short numparts;
75 short lopst;
76 unsigned short addr;
77 bool in_use; // true
78};
79
80struct ZeldaWave {
81 int lopst;
82 int end;
83 short lflag;
84 short copy;
85 short *buf;
86};
87
88struct SampleEdit {
89 unsigned short flag;
90 unsigned short init;
91 unsigned short editsamp;
92 int width;
93 int height;
94 int pageh;
95 int pagev;
96 int zoom;
97 int scroll;
98 int page;
99
101 int sell;
102
104 int selr;
105
107
109};
110
112 unsigned char samp;
113 unsigned char ad;
114 unsigned char sr;
115 unsigned char gain;
116 unsigned char multhi;
117 unsigned char multlo;
118};
119
121 unsigned char voll;
122 unsigned char volr;
123 short freq;
124 unsigned char samp;
125 unsigned char ad;
126 unsigned char sr;
127 unsigned char gain;
128 unsigned char multhi;
129};
130
132 unsigned short addr;
133 short next;
134 short prev;
135 unsigned char flag;
136 unsigned char cmd;
137 unsigned char p1;
138 unsigned char p2;
139 unsigned char p3;
140 unsigned char b1;
141 unsigned char b2;
142 unsigned char tim2;
143 unsigned short tim;
144};
145
146class Tracker {
147 public:
148 SongSpcBlock *AllocSpcBlock(int len, int bank);
149
150 unsigned char *GetSpcAddr(Rom &rom, unsigned short addr, short bank);
151
152 short AllocSpcCommand();
153
154 short GetBlockTime(Rom &rom, short num, short prevtime);
155
156 short SaveSpcCommand(Rom &rom, short num, short songtime, short endtr);
157 short LoadSpcCommand(Rom &rom, unsigned short addr, short bank, int t);
158
159 void SaveSongs(Rom &rom);
160
161 void LoadSongs(Rom &rom);
162
163 int WriteSpcData(Rom &rom, void *buf, int len, int addr, int spc, int limit);
164
165 void EditTrack(Rom &rom, short i);
166
167 void NewSR(Rom &rom, int bank);
168
169 private:
170 // A "modified" flag
171 int modf;
172
174
179
183
184 int sndinit = 0;
185
188 int m_ofs;
190
193
194 char op_len[32];
195
196 char *snddat1;
197 char *snddat2; // more music stuff.
198
199 unsigned short ss_next = 0;
200 unsigned short spclen;
201 unsigned short numseg;
202
203 short spcbank;
204 short lastsr;
206 short srnum;
207 short srsize;
208 short numsong[3]; // ditto
209 short m_size;
210 short m_free;
211 short m_modf; // ???
212 short m_loaded;
213
214 short t_loaded;
215 short t_modf;
216 short withhead;
217
218 size_t t_number;
219
220 std::vector<Song> songs;
224
226
230};
231
232} // namespace music
233} // namespace zelda3
234} // namespace yaze
235
236#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:59
void EditTrack(Rom &rom, short i)
Definition tracker.cc:1248
unsigned char * GetSpcAddr(Rom &rom, unsigned short addr, short bank)
Definition tracker.cc:57
SongSpcBlock * AllocSpcBlock(int len, int bank)
Definition tracker.cc:34
short LoadSpcCommand(Rom &rom, unsigned short addr, short bank, int t)
Definition tracker.cc:207
short GetBlockTime(Rom &rom, short num, short prevtime)
Definition tracker.cc:115
int WriteSpcData(Rom &rom, void *buf, int len, int addr, int spc, int limit)
Definition tracker.cc:772
short SaveSpcCommand(Rom &rom, short num, short songtime, short endtr)
Definition tracker.cc:651
ZeldaSfxInstrument * sndinsts
Definition tracker.h:229
std::vector< Song > songs
Definition tracker.h:220
void NewSR(Rom &rom, int bank)
Definition tracker.cc:1298
SpcCommand * current_spc_command_
Definition tracker.h:223
ZeldaInstrument * insts
Definition tracker.h:228
SongSpcBlock ** ssblt
Definition tracker.h:225
Contains classes and functions for handling music data in Zelda 3.
Definition tracker.cc:33
constexpr char fil3[4]
Definition tracker.h:30
constexpr char fil1[4]
Definition tracker.h:28
constexpr int kOverworldMusicBank
Definition tracker.h:32
constexpr char fil2[4]
Definition tracker.h:29
constexpr char op_len[32]
Definition tracker.h:23
char[512] text_buf_ty
Definition tracker.h:35
constexpr int kDungeonMusicBank
Definition tracker.h:33
Zelda 3 specific classes and functions.
Main namespace for the application.
Definition controller.cc:18
int selr
Right hand sample selection point.
Definition tracker.h:104
int sell
Left hand sample selection point.
Definition tracker.h:101
unsigned char flag
Definition tracker.h:71
unsigned char inst
Definition tracker.h:72
unsigned short addr
Definition tracker.h:76