yaze 0.2.0
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 <cstdint>
5#include <memory>
6#include <string>
7#include <vector>
8
9#include "absl/status/status.h"
10#include "app/core/constants.h"
11#include "app/gfx/bitmap.h"
12#include "app/gfx/snes_tile.h"
13#include "app/rom.h"
14
15namespace yaze {
16namespace app {
17namespace zelda3 {
18
25namespace music {
26
27// bank 19, 1A, 1B
28// iirc 1A is OW, 1B is dungeon
29// 19 is general spc stuff like samples, ects
30constexpr char op_len[32] = {1, 1, 2, 3, 0, 1, 2, 1, 2, 1, 1, 3, 0, 1, 2, 3,
31 1, 3, 3, 0, 1, 3, 0, 3, 3, 3, 1, 2, 0, 0, 0, 0};
32
33// =============================================================================
34
35static int sbank_ofs[] = {0xc8000, 0, 0xd8000, 0};
36
37constexpr char fil1[4] = {0, 15, 61, 115};
38constexpr char fil2[4] = {0, 4, 5, 6};
39constexpr char fil3[4] = {0, 0, 15, 13};
40
41constexpr int kOverworldMusicBank = 0x0D0000;
42constexpr int kDungeonMusicBank = 0x0D8000;
43
44using text_buf_ty = char[512];
45// ============================================================================
46
48 unsigned short start;
49 unsigned short len;
50 unsigned short relnum;
51 unsigned short relsz;
52 unsigned short *relocs;
53 unsigned short bank;
54 unsigned short addr;
55 unsigned char *buf;
56 int flag;
57};
58
59// =============================================================================
60
61struct SongRange {
62 unsigned short start;
63 unsigned short end;
64
65 short first;
66 short inst;
67 short bank;
68
69 unsigned char endtime;
70 unsigned char filler;
71
72 int editor;
73};
74
75// =============================================================================
76
77struct SongPart {
80 short tbl[8];
81 unsigned short addr;
82};
83
84// =============================================================================
85
86struct Song {
87 unsigned char flag;
88 unsigned char inst;
90 short numparts;
91 short lopst;
92 unsigned short addr;
93 bool in_use; // true
94};
95// =============================================================================
96
97struct ZeldaWave {
98 int lopst;
99 int end;
100 short lflag;
101 short copy;
102 short *buf;
103};
104
105// ============================================================================
106
108 unsigned short flag;
109 unsigned short init;
110 unsigned short editsamp;
111 int width;
113 int pageh;
114 int pagev;
115 int zoom;
117 int page;
118
120 int sell;
121
123 int selr;
124
126
128};
129
130// =============================================================================
131
133 unsigned char samp;
134 unsigned char ad;
135 unsigned char sr;
136 unsigned char gain;
137 unsigned char multhi;
138 unsigned char multlo;
139};
140
141// =============================================================================
142
144 unsigned char voll;
145 unsigned char volr;
146 short freq;
147 unsigned char samp;
148 unsigned char ad;
149 unsigned char sr;
150 unsigned char gain;
151 unsigned char multhi;
152};
153
154// =============================================================================
155
157 unsigned short addr;
158 short next;
159 short prev;
160 unsigned char flag;
161 unsigned char cmd;
162 unsigned char p1;
163 unsigned char p2;
164 unsigned char p3;
165 unsigned char b1;
166 unsigned char b2;
167 unsigned char tim2;
168 unsigned short tim;
169};
170
171// =============================================================================
172
173class Tracker {
174 public:
175 SongSPCBlock *AllocSPCBlock(int len, int bank);
176
177 unsigned char *GetSPCAddr(Rom &rom, unsigned short addr, short bank);
178
179 short AllocSPCCommand();
180
181 short GetBlockTime(Rom &rom, short num, short prevtime);
182
183 short SaveSPCCommand(Rom &rom, short num, short songtime, short endtr);
184 short LoadSPCCommand(Rom &rom, unsigned short addr, short bank, int t);
185
186 void SaveSongs(Rom &rom);
187
188 void LoadSongs(Rom &rom);
189
190 int WriteSPCData(Rom &rom, void *buf, int len, int addr, int spc, int limit);
191
192 void EditTrack(Rom &rom, short i);
193
194 void NewSR(Rom &rom, int bank);
195
196 private:
197 // A "modified" flag
198 int modf;
199
201
206
210
211 int sndinit = 0;
212
215 int m_ofs;
217
220
221 char op_len[32];
222
223 char *snddat1;
224 char *snddat2; // more music stuff.
225
226 unsigned short ss_next = 0;
227 unsigned short spclen;
228 unsigned short numseg;
229
230 short spcbank;
231 short lastsr;
233 short srnum;
234 short srsize;
235 short numsong[3]; // ditto
236 short m_size;
237 short m_free;
238 short m_modf; // ???
239 short m_loaded;
240
241 short t_loaded;
242 short t_modf;
243 short withhead;
244
245 size_t t_number;
246
247 std::vector<Song> songs;
251
253
257};
258
259// =============================================================================
260
261} // namespace music
262} // namespace zelda3
263} // namespace app
264} // namespace yaze
265
266#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:145
ZeldaSfxInstrument * sndinsts
Definition tracker.h:256
void EditTrack(Rom &rom, short i)
Definition tracker.cc:1266
std::vector< Song > songs
Definition tracker.h:247
SongSPCBlock * AllocSPCBlock(int len, int bank)
Definition tracker.cc:41
unsigned char * GetSPCAddr(Rom &rom, unsigned short addr, short bank)
Definition tracker.cc:66
short LoadSPCCommand(Rom &rom, unsigned short addr, short bank, int t)
Definition tracker.cc:222
int WriteSPCData(Rom &rom, void *buf, int len, int addr, int spc, int limit)
Definition tracker.cc:786
void NewSR(Rom &rom, int bank)
Definition tracker.cc:1316
short GetBlockTime(Rom &rom, short num, short prevtime)
Definition tracker.cc:128
short SaveSPCCommand(Rom &rom, short num, short songtime, short endtr)
Definition tracker.cc:663
unsigned char uchar
Definition constants.h:121
constexpr int kDungeonMusicBank
Definition tracker.h:42
constexpr int kOverworldMusicBank
Definition tracker.h:41
constexpr char fil3[4]
Definition tracker.h:39
constexpr char fil2[4]
Definition tracker.h:38
constexpr char fil1[4]
Definition tracker.h:37
constexpr char op_len[32]
Definition tracker.h:30
Definition common.cc:21
int selr
Right hand sample selection point.
Definition tracker.h:123
int sell
Left hand sample selection point.
Definition tracker.h:120