-
Notifications
You must be signed in to change notification settings - Fork 0
/
OverData.h
233 lines (156 loc) · 6.02 KB
/
OverData.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include "Globals.h"
#ifndef OVERDATA_H
#define OVERDATA_H
extern const bool usingMap16;
extern const bool usingMap32;
extern const u32 mask16;
extern const u32 mask32;
#define forgrid(x) { u32 i =0; u32 j = 0; for(i = 0; i < data->width; ++i) { for(j = 0; j < data->height; ++j) { (x); } } }
// ================================================
class EventOverlay
{
private:
bufPtr data;
public:
EventOverlay();
~EventOverlay();
void Initialize();
bool SetTile(u16 value, u16 addr);
bool SetTile(u16 value, u8 x, u8 y);
u16 GetTile(u8 x, u8 y);
};
// ================================================
class OverArea
{
public:
// area number (large areas resolve down to one area number)
u8 index;
// member variables
bool largeArea;
bool fallingRocks[0x03];
// specific graphics settings for the area
graphicsInfo *gi;
// lists of data for each area
Entrance *entr;
Entrance *holes;
OverExit *exits;
OverSpr *spr[0x03];
OverItem *items[0x03];
EventOverlay *eOverlay;
bufPtr map32Data;
bufPtr rom;
public:
// member functions
OverArea(u8 area, bufPtr rom);
~OverArea();
bufPtr LoadMap32();
bool LoadOverlay();
bool UnloadOverlay();
};
// ================================================
// forward declaration so OverData is aware of the
// existence of the ZeldaGame class
class _ZeldaGame;
class OverData
{
public:
bool editOverlay;
u8 phase; // 0 - beginning, 1 - first part, 2 - second part
u16 prevX;
u16 prevY;
u16 numMap32Tiles;
u16 numMap16Tiles;
u16 tile8, tile16, tile32;
// the current editing mode
owEditMode editMode;
// determines whether we're currently working in map8, map16, or map32 tiles
objMapType tileSize;
bufPtr map16Buf; // 0x2000 byte array for a full map16 tilemap
bufPtr map16Backup; // used for backing up the map16 buffer when event overlay editing is enabled
bufPtr map8Buf; // 0x8000 byte array for a full 1024x1024 area
bufPtr rom; // passed in from the ZeldaGame structure
bufPtr map32Flags; // bitfield telling us which map32 tiles are being used
bufPtr map16Flags; // bitfield telling us which map16 tiles are being used.
bufPtr map32To16;
// pointers to map32 to map16 arrays (will probably later use this for map16 to map8... refactoring sucks ...)
bufPtr upperLeft32;
bufPtr upperRight32;
bufPtr lowerLeft32;
bufPtr lowerRight32;
bufPtr map16To8;
bufPtr map16Counts; // for each map16 tile, tells us how many there are in use
bufPtr map32Counts; // for each map32 tile, tells us how many there are in use
OverObj obj;
OverObj *pObj;
// selection related data
OverObj *selObj;
OverObj *selObj2;
OverArea *area;
OverArea *areas[0xC0];
// entrance related data
u8 entrPos;
u8 entrBuf[0x10];
// hole related data
u8 holePos;
u8 holeBuf[0x10];
// exit related data
u8 exitPos;
u8 exitBuf[0x10];
// sprite related data
u8 sprPos;
u8 sprBuf[0x10];
// item related data
u8 itemPos;
u8 itemBuf[0x10];
// ----------------------------------------------
// variables I'm not sure need to be in the class
BM_Header *header;
_ZeldaGame *durp;
// ----------------------------------------------
// variables that are Windows specific.
// should be moved elsewhere eventually,
// divorcing platform from business logic
ManagedBitmap *bStock[0x10];
HBITMAP hStock[0x10];
HMENU stockContext;
HMENU selectContext;
HMENU sprContext;
HMENU itemContext;
HMENU exitContext;
HMENU entrContext;
HMENU holeContext;
public:
// member functions
OverData(bufPtr rom = NULL, BM_Header *header = NULL);
~OverData();
void DecMapCounts(u16 mapVal, bool map32);
void IncMapCounts(u16 mapVal, bool map32, u16 *map2x2 = NULL);
void LoadMap16To8();
void LoadMap32To16();
void LoadOverlaysOld();
void PackMap32To16();
void LoadMapFlags();
//void DeleteAreaHoleData();
bool LoadArea();
bool UnloadArea();
bool LoadAllEntranceData();
bool LoadAllHoleData();
bool LoadAllExitData();
bool LoadAllSpriteData();
bool LoadAllItemData();
//bool AddAreaHole(u32 x, u32 y, u32 entrance = 0);
bool DeleteAreaHole(u32 index);
void Map16Analysis();
u16 GetMap32Tile(u32 x, u32 y);
u32 PutMap32Tile(u32 x, u32 y, u32 value);
u32 FindMap32(u16 map16Vals[4]);
u32 FindMap16(u16 map8Vals[4]);
u32 Map16To8(u16 map16Val, u16 map8Vals[4]);
u32 Map32To16(u16 map32Val, u16 map16Vals[4]);
u32 AllocateMap16(u16 map8Vals[4], u16 oldMap16, u16 threshold = 0);
u32 AllocateMap32(u16 map16Vals[4], u16 oldMap32, u16 threshold = 0);
bufPtr LoadMap8();
bufPtr LoadMap16(u32 index, map16Pos p);
bufPtr LoadMap32(u32 mapNum);
};
#endif