yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
sprite.cc
Go to the documentation of this file.
1#include "sprite.h"
2
3#include <cstdint>
4#include <iostream>
5
6namespace yaze {
7namespace zelda3 {
8
10 map_x_ = x_;
11 map_y_ = y_;
12 name_ = kSpriteDefaultNames[id_];
13}
14
16 map_x_ = map_x;
17 map_y_ = map_y;
18}
19
21 uint8_t x = nx_;
22 uint8_t y = ny_;
23
24 if (overlord_ == 0x07) {
25 if (id_ == 0x1A) {
26 DrawSpriteTile((x * 16), (y * 16), 14, 6, 11); // bomb
27 } else if (id_ == 0x05) {
28 DrawSpriteTile((x * 16), (y * 16) - 12, 12, 16, 12, false, true);
29 DrawSpriteTile((x * 16), (y * 16), 0, 16, 12, false, true);
30 } else if (id_ == 0x06) {
31 DrawSpriteTile((x * 16), (y * 16), 10, 26, 14, true, true, 2,
32 2); // snek
33 } else if (id_ == 0x09) {
34 DrawSpriteTile((x * 16), (y * 16), 6, 26, 14);
35 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 8, 26, 14);
36 DrawSpriteTile((x * 16), (y * 16) + 16, 10, 27, 14, false, false, 1, 1);
37 } else if (id_ == 0x14) {
38 DrawSpriteTile((x * 16), (y * 16) + 8, 12, 06, 12, false, false, 2,
39 1); // shadow tile
40 DrawSpriteTile((x * 16), (y * 16) - 8, 3, 29, 8, false, false, 1,
41 1); // tile
42 DrawSpriteTile((x * 16) + 8, (y * 16) - 8, 3, 29, 8, true, false, 1,
43 1); // tile
44 DrawSpriteTile((x * 16), (y * 16), 3, 29, 8, false, true, 1,
45 1); // tile
46 DrawSpriteTile((x * 16) + 8, (y * 16), 3, 29, 8, true, true, 1,
47 1); // tile
48 } else {
49 DrawSpriteTile((x * 16), (y * 16), 4, 4, 5);
50 }
51
52 if (nx_ != x || ny_ != y) {
53 bounding_box_.x = (lower_x_ + (nx_ * 16));
54 bounding_box_.y = (lower_y_ + (ny_ * 16));
57 } else {
58 bounding_box_.x = (lower_x_ + (x * 16));
59 bounding_box_.y = (lower_y_ + (y * 16));
62 }
63
64 return;
65 }
66
67 if (id_ == 0x00) {
68 DrawSpriteTile((x * 16), (y * 16), 4, 28, 10);
69 } else if (id_ == 0x01) {
70 DrawSpriteTile((x * 16) - 8, (y * 16), 6, 24, 12, false, false, 2, 2);
71 DrawSpriteTile((x * 16) + 8, (y * 16), 6, 24, 12, true, false, 2, 2);
72 } else if (id_ == 0x02) {
73 DrawSpriteTile((x * 16), (y * 16), 0, 16, 10);
74 } else if (id_ == 0x04) {
75 uint8_t p = 3;
76
77 DrawSpriteTile((x * 16), (y * 16), 14, 28, p);
78 DrawSpriteTile((x * 16), (y * 16), 14, 30, p);
79 } else if (id_ == 0x05) {
80 uint8_t p = 3;
81
82 DrawSpriteTile((x * 16), (y * 16), 14, 28, p);
83 DrawSpriteTile((x * 16), (y * 16), 14, 30, p);
84 } else if (id_ == 0x06) {
85 uint8_t p = 3;
86
87 DrawSpriteTile((x * 16), (y * 16), 14, 28, p);
88 DrawSpriteTile((x * 16), (y * 16), 14, 30, p);
89 } else if (id_ == 0x07) {
90 uint8_t p = 3;
91
92 DrawSpriteTile((x * 16), (y * 16), 14, 28, p);
93 DrawSpriteTile((x * 16), (y * 16), 14, 30, p);
94 } else if (id_ == 0x08) {
95 DrawSpriteTile((x * 16), (y * 16), 0, 24, 6);
96 DrawSpriteTile((x * 16) + 4, (y * 16) + 6, 0, 24, 6, false, false, 1, 1);
97 } else if (id_ == 0x09) {
98 DrawSpriteTile((x * 16) - 22, (y * 16) - 24, 12, 24, 12, false, false, 2,
99 2); // Moldorm tail
100 DrawSpriteTile((x * 16) - 16, (y * 16) - 20, 8, 24, 12, false, false, 2,
101 2); // Moldorm b2
102 DrawSpriteTile((x * 16) - 12, (y * 16) - 16, 4, 24, 12, false, false, 4,
103 4); // Moldorm b
104 DrawSpriteTile((x * 16), (y * 16), 0, 24, 12, false, false, 4,
105 4); // Moldorm head
106
107 DrawSpriteTile((x * 16) + 20, (y * 16) + 12, 8, 26, 14, false, false, 2,
108 2); // Moldorm eye
109 DrawSpriteTile((x * 16) + 12, (y * 16) + 20, 8, 26, 14, false, false, 2,
110 2); // Moldorm eye
111 } else if (id_ == 0x0A) {
112 DrawSpriteTile((x * 16), (y * 16), 0, 24, 8);
113 DrawSpriteTile((x * 16) + 4, (y * 16) + 6, 0, 24, 8, false, false, 1, 1);
114 } else if (id_ == 0x0B) {
115 DrawSpriteTile((x * 16), (y * 16), 10, 30, 10);
116 } else if (id_ == 0x0C) {
117 DrawSpriteTile((x * 16), (y * 16), 0, 24, 8);
118 DrawSpriteTile((x * 16) + 4, (y * 16) + 6, 0, 24, 8, false, false, 1, 1);
119 } else if (id_ == 0x0D) {
120 DrawSpriteTile((x * 16), (y * 16), 14, 28, 12);
121 } else if (id_ == 0x0E) {
122 DrawSpriteTile((x * 16), (y * 16), 8, 18, 10, false, false, 3, 2);
123 } else if (id_ == 0x0F) {
124 DrawSpriteTile((x * 16), (y * 16), 14, 24, 8, false, false, 2, 3);
125 DrawSpriteTile((x * 16) + 16, (y * 16), 30, 8, 8, true, false, 1, 3);
126 } else if (id_ == 0x10) {
127 DrawSpriteTile((x * 16), (y * 16), 12, 31, 8, false, false, 1, 1);
128 } else if (id_ == 0x11) {
129 DrawSpriteTile((x * 16), (y * 16) + 16, 6, 16, 8, false, false, 2,
130 2); // Feet
131 DrawSpriteTile((x * 16) - 8, (y * 16) + 8, 4, 18, 8, false, false, 2,
132 2); // Body1
133 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 4, 18, 8, true, false, 2,
134 2); // Body2
135 DrawSpriteTile((x * 16), (y * 16), 0, 16, 8, false, false, 2,
136 2); // Head
137 } else if (id_ == 0x12) {
138 DrawSpriteTile((x * 16), (y * 16) + 8, 8, 26, 8);
139 DrawSpriteTile((x * 16), (y * 16), 6, 24, 8);
140 } else if (id_ == 0x13) {
141 DrawSpriteTile((x * 16), (y * 16), 4, 22, 2);
142 } else if (id_ == 0x15) {
143 // Antifairy
144 DrawSpriteTile((x * 16) + 2, (y * 16) + 8, 3, 30, 5, false, false, 1, 1);
145 DrawSpriteTile((x * 16) + 8, (y * 16) + 2, 3, 30, 5, false, false, 1, 1);
146 DrawSpriteTile((x * 16) + 14, (y * 16) + 8, 3, 30, 5, false, false, 1, 1);
147 DrawSpriteTile((x * 16) + 8, (y * 16) + 14, 3, 30, 5, false, false, 1, 1);
148 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 1, 30, 5, false, false, 1,
149 1); // Middle
150 } else if (id_ == 0x16) {
151 DrawSpriteTile((x * 16), (y * 16) + 8, 2, 26, 2);
152 DrawSpriteTile((x * 16), (y * 16), 0, 26, 2);
153 } else if (id_ == 0x17) // Bush hoarder
154 {
155 DrawSpriteTile((x * 16), (y * 16), 8, 30, 10);
156 } else if (id_ == 0x18) // Mini moldorm
157 {
158 DrawSpriteTile((x * 16) + 13, (y * 16) + 17, 13, 21, 8, false, false, 1,
159 1); // Tail
160 DrawSpriteTile((x * 16) + 5, (y * 16) + 8, 2, 22, 8); // Body
161 DrawSpriteTile((x * 16), (y * 16), 0, 22, 8); // Head
162 DrawSpriteTile((x * 16), (y * 16) - 4, 13, 20, 8, false, false, 1,
163 1); // Eyes
164 DrawSpriteTile((x * 16) - 4, (y * 16), 13, 20, 8, false, false, 1,
165 1); // Eyes
166 } else if (id_ == 0x19) // Poe - ghost
167 {
168 DrawSpriteTile((x * 16), (y * 16), 6, 31, 2); //
169 } else if (id_ == 0x1A) // Smith
170 {
171 // DrawSpriteTile((x*16), (y *16), 2, 4, 10,true); // Smitty
172 // DrawSpriteTile((x*16)+12, (y *16) - 7, 0, 6, 10); // Hammer
173 DrawSpriteTile((x * 16), (y * 16), 4, 22, 10);
174 } else if (id_ == 0x1C) // Statue
175 {
176 DrawSpriteTile((x * 16), (y * 16) + 8, 0, 28, 15);
177 DrawSpriteTile((x * 16), (y * 16), 2, 28, 15, false, false, 1, 1);
178 DrawSpriteTile((x * 16) + 8, (y * 16), 2, 28, 15, true, false, 1, 1);
179 } else if (id_ == 0x1E) // Crystal switch
180 {
181 DrawSpriteTile((x * 16), (y * 16), 4, 30, 5);
182 } else if (id_ == 0x1F) // Sick kid
183 {
184 DrawSpriteTile((x * 16) - 8, (y * 16) + 8, 10, 16, 14);
185 DrawSpriteTile((x * 16) + 16 - 8, (y * 16) + 8, 10, 16, 14, true);
186 DrawSpriteTile((x * 16) - 8, (y * 16) + 16, 10, 16, 14, false, true, 2, 2);
187 DrawSpriteTile((x * 16) + 16 - 8, (y * 16) + 16, 10, 16, 14, true, true, 2,
188 2);
189 DrawSpriteTile((x * 16), (y * 16) - 4, 14, 16, 10);
190 } else if (id_ == 0x20) {
191 DrawSpriteTile((x * 16), (y * 16), 2, 24, 7);
192 } else if (id_ == 0x21) // Push switch
193 {
194 DrawSpriteTile((x * 16) + 4, (y * 16) + 20, 13, 29, 3, false, false, 1, 1);
195 DrawSpriteTile((x * 16) + 4, (y * 16) + 28, 12, 29, 3, false, false, 1, 1);
196 DrawSpriteTile((x * 16), (y * 16) + 8, 10, 28, 3);
197 } else if (id_ == 0x22) // Rope
198 {
199 DrawSpriteTile((x * 16), (y * 16), 8, 26, 5);
200 } else if (id_ == 0x23) // Red bari
201 {
202 DrawSpriteTile((x * 16), (y * 16), 2, 18, 4, false, false, 1, 2);
203 DrawSpriteTile((x * 16) + 8, (y * 16), 2, 18, 4, true, false, 1, 2);
204 } else if (id_ == 0x24) // Blue bari
205 {
206 DrawSpriteTile((x * 16), (y * 16), 2, 18, 6, false, false, 1, 2);
207 DrawSpriteTile((x * 16) + 8, (y * 16), 2, 18, 6, true, false, 1, 2);
208 } else if (id_ == 0x25) // Talking tree?
209 {
210 // TODO: Add something here?
211 } else if (id_ == 0x26) // Hardhat beetle
212 {
213 if ((x & 0x01) == 0x00) {
214 DrawSpriteTile((x * 16), (y * 16), 4, 20, 8);
215 DrawSpriteTile((x * 16), (y * 16) - 6, 0, 20, 8);
216 } else {
217 DrawSpriteTile((x * 16), (y * 16), 4, 20, 10);
218 DrawSpriteTile((x * 16), (y * 16) - 6, 0, 20, 10);
219 }
220 } else if (id_ == 0x27) // Deadrock
221 {
222 DrawSpriteTile((x * 16), (y * 16), 2, 30, 10);
223 } else if (id_ == 0x28) // Npcs
224 {
225 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
226 } else if (id_ == 0x29) // Npcs
227 {
228 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
229 } else if (id_ == 0x2A) // Npcs
230 {
231 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
232 } else if (id_ == 0x2B) // ???
233 {
234 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
235 } else if (id_ == 0x2C) // Lumberjack
236 {
237 DrawSpriteTile((x * 16) - 24, (y * 16) + 12, 6, 26, 12, true); // Body
238 DrawSpriteTile((x * 16) - 24, (y * 16), 8, 26, 12, true); // Head
239
240 DrawSpriteTile((x * 16) - 14, (y * 16) + 12, 14, 27, 10, false, false, 1,
241 1); // Saw left edge
242 DrawSpriteTile((x * 16) - 6, (y * 16) + 12, 15, 27, 10, false, false, 1,
243 1); // Saw left edge
244 DrawSpriteTile((x * 16) + 2, (y * 16) + 12, 15, 27, 10, false, false, 1,
245 1); // Saw left edge
246 DrawSpriteTile((x * 16) + 10, (y * 16) + 12, 15, 27, 10, false, false, 1,
247 1); // Saw left edge
248 DrawSpriteTile((x * 16) + 18, (y * 16) + 12, 15, 27, 10, false, false, 1,
249 1); // Saw left edge
250 DrawSpriteTile((x * 16) + 26, (y * 16) + 12, 15, 27, 10, false, false, 1,
251 1); // Saw left edge
252 DrawSpriteTile((x * 16) + 34, (y * 16) + 12, 14, 27, 10, true, false, 1,
253 1); // Saw left edge
254
255 DrawSpriteTile((x * 16) + 40, (y * 16) + 12, 4, 26, 12); // Body
256 DrawSpriteTile((x * 16) + 40, (y * 16), 8, 26, 12); // Head
257 } else if (id_ == 0x2D) // Npcs
258 {
259 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
260 } else if (id_ == 0x2E) // Npcs
261 {
262 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
263 } else if (id_ == 0x2F) // Npcs
264 {
265 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
266 } else if (id_ == 0x30) // Npcs
267 {
268 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
269 } else if (id_ == 0x31) // Npcs
270 {
271 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
272 } else if (id_ == 0x32) // Npcs
273 {
274 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
275 }
276 /*
277 else if (id_== 0x33) // Pull for rupees
278 {
279
280 }
281 */
282 else if (id_ == 0x34) // Npcs
283 {
284 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
285 } else if (id_ == 0x35) // Npcs
286 {
287 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
288 } else if (id_ == 0x36) // Npcs
289 {
290 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
291 }
292 /*
293 else if (id_== 0x37) // Waterfall
294 {
295 DrawSpriteTile((x*16), (y *16), 14, 6, 10);
296 }
297 */
298 else if (id_ == 0x38) // Arrowtarget
299 {
300 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
301 } else if (id_ == 0x39) // Npcs
302 {
303 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
304 } else if (id_ == 0x3A) // Npcs
305 {
306 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
307 } else if (id_ == 0x3B) // Dash item
308 {
309 } else if (id_ == 0x3C) // Npcs
310 {
311 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
312 } else if (id_ == 0x3D) // Npcs
313 {
314 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
315 } else if (id_ == 0x3E) // Npcs
316 {
317 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
318 } else if (id_ == 0x3F) // Npcs
319 {
320 DrawSpriteTile((x * 16), (y * 16), 14, 22, 10);
321 } else if (id_ == 0x40) // Lightning lock (agah tower)
322 {
323 DrawSpriteTile((x * 16) - 24, (y * 16), 10, 28, 2, false, false, 1, 2);
324 DrawSpriteTile((x * 16) - 16, (y * 16), 6, 30, 2);
325 DrawSpriteTile((x * 16), (y * 16), 8, 30, 2);
326 DrawSpriteTile((x * 16) + 16, (y * 16), 6, 30, 2);
327 DrawSpriteTile((x * 16) + 24, (y * 16), 10, 28, 2, false, false, 1, 2);
328 } else if (id_ == 0x41) // Blue soldier
329 {
330 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 10);
331 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 6, 20, 10, true, false, 1, 2);
332 DrawSpriteTile((x * 16), (y * 16), 0, 20, 10);
333 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 13, 22, 10, false, false, 1,
334 2); // Shield
335 DrawSpriteTile((x * 16) - 4, (y * 16) + 16, 14, 22, 10, false, true, 1,
336 2); // Sword
337 } else if (id_ == 0x42) // Green soldier
338 {
339 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 12);
340 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 6, 20, 12, true, false, 1, 2);
341 DrawSpriteTile((x * 16), (y * 16), 0, 20, 12);
342 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 13, 22, 12, false, false, 1,
343 2); // Shield
344 DrawSpriteTile((x * 16) - 4, (y * 16) + 16, 14, 22, 12, false, true, 1,
345 2); // Sword
346 } else if (id_ == 0x43) // Red spear soldier
347 {
348 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 8);
349 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 6, 20, 8, true, false, 1, 2);
350 DrawSpriteTile((x * 16), (y * 16), 0, 20, 8);
351 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 13, 22, 8, false, false, 1,
352 2); // Shield
353 DrawSpriteTile((x * 16) - 4, (y * 16) + 16, 11, 22, 8, false, true, 1,
354 2); // Spear
355 } else if (id_ == 0x44) // Sword blue holding up
356 {
357 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 6, 16, 10);
358 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 10, false, false, 1, 2);
359 DrawSpriteTile((x * 16), (y * 16), 0, 16, 10); // Head
360 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 14, 22, 10, false, true, 1,
361 2); // Sword
362 } else if (id_ == 0x45) // Green spear soldier
363 {
364 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 12);
365 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 6, 20, 12, true, false, 1, 2);
366 DrawSpriteTile((x * 16), (y * 16), 0, 20, 12);
367 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 13, 22, 12, false, false, 1,
368 2); // Shield
369 DrawSpriteTile((x * 16) - 4, (y * 16) + 16, 11, 22, 12, false, true, 1,
370 2); // Spear
371 } else if (id_ == 0x46) // Blue archer
372 {
373 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 10);
374 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 6, 20, 10, true, false, 1, 2);
375 DrawSpriteTile((x * 16), (y * 16), 0, 20, 10); // Head
376 DrawSpriteTile((x * 16), (y * 16) + 16, 10, 16, 10, false, false, 1,
377 1); // Bow1
378 DrawSpriteTile((x * 16) + 8, (y * 16) + 16, 10, 16, 10, true, false, 1,
379 1); // Bow2
380 } else if (id_ == 0x47) // Green archer
381 {
382 DrawSpriteTile((x * 16), (y * 16) + 8, 14, 16, 12);
383 DrawSpriteTile((x * 16), (y * 16), 0, 20, 12);
384 DrawSpriteTile((x * 16), (y * 16) + 16, 10, 16, 12, false, false, 1,
385 1); // Bow1
386 DrawSpriteTile((x * 16) + 8, (y * 16) + 16, 10, 16, 12, true, false, 1,
387 1); // Bow2
388 } else if (id_ == 0x48) // Javelin soldier red
389 {
390 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 6, 16, 8);
391 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 8, false, false, 1, 2);
392 DrawSpriteTile((x * 16), (y * 16), 0, 16, 8); // Head
393 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 11, 22, 8, false, true, 1,
394 2); // Sword
395 } else if (id_ == 0x49) // Javelin soldier red from bush
396 {
397 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 6, 16, 8);
398 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 8, false, false, 1, 2);
399 DrawSpriteTile((x * 16), (y * 16), 0, 18, 8); // Head
400 DrawSpriteTile((x * 16), (y * 16) + 24, 0, 20, 2);
401 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 11, 22, 8, false, true, 1,
402 2); // Sword
403 } else if (id_ == 0x4A) // Red bomb soldier
404 {
405 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 6, 16, 8);
406 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 8, false, false, 1, 2);
407 DrawSpriteTile((x * 16), (y * 16), 0, 16, 8); // Head
408 DrawSpriteTile((x * 16) + 8, (y * 16) - 8, 14, 22, 11); // Bomb
409 } else if (id_ == 0x4B) // Green soldier recruit
410 {
411 // 0,4
412 DrawSpriteTile((x * 16), (y * 16), 6, 24, 12);
413 DrawSpriteTile((x * 16), (y * 16) - 10, 0, 20, 12);
414 } else if (id_ == 0x4C) // Jazzhand
415 {
416 DrawSpriteTile((x * 16), (y * 16), 0, 26, 14, false, false, 6, 2);
417 } else if (id_ == 0x4D) // Rabit??
418 {
419 DrawSpriteTile((x * 16), (y * 16), 0, 26, 12, false, false, 6, 2);
420 } else if (id_ == 0x4E) // Popo1
421 {
422 DrawSpriteTile((x * 16), (y * 16), 0, 20, 10);
423 } else if (id_ == 0x4F) // Popo2
424 {
425 DrawSpriteTile((x * 16), (y * 16), 2, 20, 10);
426 } else if (id_ == 0x50) // Canon ball
427 {
428 DrawSpriteTile((x * 16), (y * 16), 0, 24, 10);
429 } else if (id_ == 0x51) // Armos
430 {
431 DrawSpriteTile((x * 16), (y * 16), 0, 28, 11, false, false, 2, 4);
432 } else if (id_ == 0x53) // Armos Knight
433 {
434 DrawSpriteTile((x * 16), (y * 16), 0, 28, 10, false, false, 4, 4);
435 } else if (id_ == 0x54) {
436 DrawSpriteTile((x * 16), (y * 16), 2, 28, 12);
437 DrawSpriteTile((x * 16) + 8, (y * 16) + 10, 6, 28, 12);
438 DrawSpriteTile((x * 16) + 16, (y * 16) + 18, 10, 28, 12);
439 } else if (id_ == 0x55) // Fireball Zora
440 {
441 DrawSpriteTile((x * 16), (y * 16), 4, 26, 11);
442 } else if (id_ == 0x56) // Zora
443 {
444 DrawSpriteTile((x * 16), (y * 16), 10, 20, 2);
445 DrawSpriteTile((x * 16), (y * 16) + 8, 8, 30, 2);
446 } else if (id_ == 0x57) // Desert Rocks
447 {
448 DrawSpriteTile((x * 16), (y * 16), 14, 24, 2, false, false, 2, 4);
449 DrawSpriteTile((x * 16) + 16, (y * 16), 14, 24, 2, true, false, 2, 4);
450 } else if (id_ == 0x58) // Crab
451 {
452 DrawSpriteTile((x * 16), (y * 16), 14, 24, 12);
453 DrawSpriteTile((x * 16) + 16, (y * 16), 14, 24, 12, true);
454 } else if (id_ == 0x5B) // Spark
455 {
456 DrawSpriteTile((x * 16), (y * 16), 8, 18, 4);
457 } else if (id_ == 0x5C) // Spark
458 {
459 DrawSpriteTile((x * 16), (y * 16), 8, 18, 4, true);
460 } else if (id_ == 0x5D) // Roller vertical1
461 {
462 // Subset3
463 if (((y * 16) & 0x10) == 0x10) {
464 DrawSpriteTile((x * 16), (y * 16), 8, 24, 11);
465
466 for (int i = 0; i < 7; i++) {
467 DrawSpriteTile((x * 16) + 8 + (i * 16), (y * 16), 9, 24, 11);
468 }
469
470 DrawSpriteTile((x * 16) + (16 * 7), (y * 16), 8, 24, 11, true);
471 } else {
472 DrawSpriteTile((x * 16), (y * 16), 8, 24, 11);
473 DrawSpriteTile((x * 16) + 16, (y * 16), 9, 24, 11);
474 DrawSpriteTile((x * 16) + 32, (y * 16), 9, 24, 11);
475 DrawSpriteTile((x * 16) + 48, (y * 16), 8, 24, 11, true);
476 }
477
478 } else if (id_ == 0x5E) // Roller vertical2
479 {
480 // Subset3
481 if (((y * 16) & 0x10) == 0x10) {
482 DrawSpriteTile((x * 16), (y * 16), 8, 24, 11);
483
484 for (int i = 0; i < 7; i++) {
485 DrawSpriteTile((x * 16) + 8 + (i * 16), (y * 16), 9, 24, 11);
486 }
487
488 DrawSpriteTile((x * 16) + (16 * 7), (y * 16), 8, 24, 11, true);
489 } else {
490 DrawSpriteTile((x * 16), (y * 16), 8, 24, 11);
491 DrawSpriteTile((x * 16) + 16, (y * 16), 9, 24, 11);
492 DrawSpriteTile((x * 16) + 32, (y * 16), 9, 24, 11);
493 DrawSpriteTile((x * 16) + 48, (y * 16), 8, 24, 11, true);
494 }
495 } else if (id_ == 0x5F) // Roller horizontal
496 {
497 if (((x * 16) & 0x10) == 0x10) {
498 DrawSpriteTile((x * 16), (y * 16), 14, 24, 11);
499 DrawSpriteTile((x * 16), (y * 16) + 16, 14, 25, 11);
500 DrawSpriteTile((x * 16), (y * 16) + 32, 14, 25, 11);
501 DrawSpriteTile((x * 16), (y * 16) + 48, 14, 24, 11, false, true);
502 } else {
503 for (int i = 0; i < 7; i++) {
504 DrawSpriteTile((x * 16), (y * 16) + i * 16, 14, 25, 11);
505 }
506
507 DrawSpriteTile((x * 16), (y * 16), 14, 24, 11);
508 DrawSpriteTile((x * 16), (y * 16) + (7 * 16), 14, 24, 11, false, true);
509 }
510 } else if (id_ == 0x60) // Roller horizontal2 (right to left)
511 {
512 // Subset3
513 if (((x * 16) & 0x10) == 0x10) {
514 DrawSpriteTile((x * 16), (y * 16), 14, 24, 11);
515 DrawSpriteTile((x * 16), (y * 16) + 16, 14, 25, 11);
516 DrawSpriteTile((x * 16), (y * 16) + 32, 14, 25, 11);
517 DrawSpriteTile((x * 16), (y * 16) + 48, 14, 24, 11, false, true);
518 } else {
519 for (int i = 0; i < 7; i++) {
520 DrawSpriteTile((x * 16), (y * 16) + i * 16, 14, 25, 11);
521 }
522
523 DrawSpriteTile((x * 16), (y * 16), 14, 24, 11);
524 DrawSpriteTile((x * 16), (y * 16) + (7 * 16), 14, 24, 11, false, true);
525 }
526
527 } else if (id_ == 0x61) // Beamos
528 {
529 DrawSpriteTile((x * 16), (y * 16) - 16, 8, 20, 14, false, false, 2, 4);
530 DrawSpriteTile((x * 16) + 4, (y * 16) - 8, 10, 20, 14, false, false, 1, 1);
531 } else if (id_ == 0x63) // Devalant non-shooter
532 {
533 DrawSpriteTile((x * 16) - 8, (y * 16) - 8, 2, 16, 2);
534 DrawSpriteTile((x * 16) + 8, (y * 16) - 8, 2, 16, 2, true);
535 DrawSpriteTile((x * 16) - 8, (y * 16) + 8, 2, 16, 2, false, true);
536 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 2, 16, 2, true, true);
537 DrawSpriteTile((x * 16), (y * 16), 0, 16, 10);
538 } else if (id_ == 0x64) // Devalant non-shooter
539 {
540 DrawSpriteTile((x * 16) - 8, (y * 16) - 8, 2, 16, 2);
541 DrawSpriteTile((x * 16) + 8, (y * 16) - 8, 2, 16, 2, true);
542 DrawSpriteTile((x * 16) - 8, (y * 16) + 8, 2, 16, 2, false, true);
543 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 2, 16, 2, true, true);
544 DrawSpriteTile((x * 16), (y * 16), 0, 16, 8);
545 } else if (id_ == 0x66) // Moving wall canon right
546 {
547 DrawSpriteTile((x * 16), (y * 16), 14, 16, 14, true);
548 } else if (id_ == 0x67) // Moving wall canon right
549 {
550 DrawSpriteTile((x * 16), (y * 16), 14, 16, 14);
551 } else if (id_ == 0x68) // Moving wall canon right
552 {
553 DrawSpriteTile((x * 16), (y * 16), 12, 16, 14);
554 } else if (id_ == 0x69) // Moving wall canon right
555 {
556 DrawSpriteTile((x * 16), (y * 16), 12, 16, 14, false, true);
557 } else if (id_ == 0x6A) // Chainball soldier
558 {
559 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 6, 16, 14);
560 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 14, false, false, 1, 2);
561 DrawSpriteTile((x * 16), (y * 16), 0, 16, 14); // Head
562 DrawSpriteTile((x * 16) + 12, (y * 16) - 16, 10, 18, 14); // Ball
563 } else if (id_ == 0x6B) // Cannon soldier
564 {
565 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 6, 16, 14);
566 DrawSpriteTile((x * 16) - 4, (y * 16) + 8, 6, 20, 14, false, false, 1, 2);
567 DrawSpriteTile((x * 16), (y * 16), 0, 16, 14); // Head
568 DrawSpriteTile((x * 16) + 12, (y * 16) + 8, 4, 18, 14); // Cannon
569 } else if (id_ == 0x6C) // Mirror portal
570 {
571 // Useless
572 } else if (id_ == 0x6D) // Rat
573 {
574 DrawSpriteTile((x * 16), (y * 16), 14, 24, 5);
575 } else if (id_ == 0x6E) // Rope
576 {
577 DrawSpriteTile((x * 16), (y * 16), 10, 26, 5);
578 } else if (id_ == 0x6F) {
579 DrawSpriteTile((x * 16), (y * 16), 4, 24, 10);
580 } else if (id_ == 0x70) // Helma fireball
581 {
582 DrawSpriteTile((x * 16), (y * 16), 10, 28, 4);
583 } else if (id_ == 0x71) // Leever
584 {
585 DrawSpriteTile((x * 16), (y * 16), 6, 16, 4);
586 } else if (id_ == 0x73) // Uncle priest
587 {
588 } else if (id_ == 0x79) // Bee
589 {
590 DrawSpriteTile((x * 16), (y * 16), 4, 14, 11, false, false, 1, 1);
591 } else if (id_ == 0x7C) // Skull head
592 {
593 DrawSpriteTile((x * 16), (y * 16), 0, 16, 10);
594 } else if (id_ == 0x7D) // Big spike
595 {
596 DrawSpriteTile((x * 16), (y * 16), 4, 28, 11);
597 DrawSpriteTile((x * 16) + 16, (y * 16), 4, 28, 11, true);
598 DrawSpriteTile((x * 16), (y * 16) + 16, 4, 28, 11, false, true);
599 DrawSpriteTile((x * 16) + 16, (y * 16) + 16, 4, 28, 11, true, true);
600 } else if (id_ == 0x7E) // Guruguru clockwise
601 {
602 DrawSpriteTile((x * 16), (y * 16) - 14, 8, 18, 4);
603 DrawSpriteTile((x * 16), (y * 16) - 28, 8, 18, 4);
604 DrawSpriteTile((x * 16), (y * 16) - 42, 8, 18, 4);
605 DrawSpriteTile((x * 16), (y * 16) - 56, 8, 18, 4);
606 } else if (id_ == 0x7F) // Guruguru Counterclockwise
607 {
608 DrawSpriteTile((x * 16), (y * 16) - 14, 8, 18, 4);
609 DrawSpriteTile((x * 16), (y * 16) - 28, 8, 18, 4);
610 DrawSpriteTile((x * 16), (y * 16) - 42, 8, 18, 4);
611 DrawSpriteTile((x * 16), (y * 16) - 56, 8, 18, 4);
612 } else if (id_ == 0x80) // Winder (moving firebar)
613 {
614 DrawSpriteTile((x * 16), (y * 16), 8, 18, 4);
615 DrawSpriteTile((x * 16) - 14, (y * 16), 8, 18, 4);
616 DrawSpriteTile((x * 16) - 28, (y * 16), 8, 18, 4);
617 DrawSpriteTile((x * 16) - 42, (y * 16), 8, 18, 4);
618 DrawSpriteTile((x * 16) - 56, (y * 16), 8, 18, 4);
619 } else if (id_ == 0x81) // Water tektite
620 {
621 DrawSpriteTile((x * 16), (y * 16), 0, 24, 11);
622 } else if (id_ == 0x82) // circle antifairy
623 {
624 // Antifairy top
625 DrawSpriteTile((x * 16 + 2) - 4, (y * 16 + 8) - 16, 3, 30, 5, false, false,
626 1, 1);
627 DrawSpriteTile((x * 16 + 8) - 4, (y * 16 + 2) - 16, 3, 30, 5, false, false,
628 1, 1);
629 DrawSpriteTile((x * 16 + 14) - 4, (y * 16 + 8) - 16, 3, 30, 5, false, false,
630 1, 1);
631 DrawSpriteTile((x * 16 + 8) - 4, (y * 16 + 14) - 16, 3, 30, 5, false, false,
632 1, 1);
633 DrawSpriteTile((x * 16 + 8) - 4, (y * 16 + 8) - 16, 1, 30, 5, false, false,
634 1, 1); // Middle
635 // Left
636 DrawSpriteTile((x * 16 + 2) - 16, (y * 16 + 8) - 4, 3, 30, 5, false, false,
637 1, 1);
638 DrawSpriteTile((x * 16 + 8) - 16, (y * 16 + 2) - 4, 3, 30, 5, false, false,
639 1, 1);
640 DrawSpriteTile((x * 16 + 14) - 16, (y * 16 + 8) - 4, 3, 30, 5, false, false,
641 1, 1);
642 DrawSpriteTile((x * 16 + 8) - 16, (y * 16 + 14) - 4, 3, 30, 5, false, false,
643 1, 1);
644 DrawSpriteTile((x * 16 + 8) - 16, (y * 16 + 8) - 4, 1, 30, 5, false, false,
645 1, 1); // Middle
646
647 DrawSpriteTile((x * 16 + 2) - 4, (y * 16 + 8) + 8, 3, 30, 5, false, false,
648 1, 1);
649 DrawSpriteTile((x * 16 + 8) - 4, (y * 16 + 2) + 8, 3, 30, 5, false, false,
650 1, 1);
651 DrawSpriteTile((x * 16 + 14) - 4, (y * 16 + 8) + 8, 3, 30, 5, false, false,
652 1, 1);
653 DrawSpriteTile((x * 16 + 8) - 4, (y * 16 + 14) + 8, 3, 30, 5, false, false,
654 1, 1);
655 DrawSpriteTile((x * 16 + 8) - 4, (y * 16 + 8) + 8, 1, 30, 5, false, false,
656 1, 1); // Middle
657 // Left
658 DrawSpriteTile((x * 16 + 2) + 8, (y * 16 + 8) - 4, 3, 30, 5, false, false,
659 1, 1);
660 DrawSpriteTile((x * 16 + 8) + 8, (y * 16 + 2) - 4, 3, 30, 5, false, false,
661 1, 1);
662 DrawSpriteTile((x * 16 + 14) + 8, (y * 16 + 8) - 4, 3, 30, 5, false, false,
663 1, 1);
664 DrawSpriteTile((x * 16 + 8) + 8, (y * 16 + 14) - 4, 3, 30, 5, false, false,
665 1, 1);
666 DrawSpriteTile((x * 16 + 8) + 8, (y * 16 + 8) - 4, 1, 30, 5, false, false,
667 1, 1); // Middle
668 } else if (id_ == 0x83) // Green eyegore
669 {
670 DrawSpriteTile((x * 16), (y * 16), 12, 24, 14, false, false, 2, 3);
671 DrawSpriteTile((x * 16) + 16, (y * 16), 12, 24, 14, true, false, 1, 3);
672 } else if (id_ == 0x84) // Red eyegore
673 {
674 DrawSpriteTile((x * 16), (y * 16), 12, 24, 8, false, false, 2, 3);
675 DrawSpriteTile((x * 16) + 16, (y * 16), 12, 24, 8, true, false, 1, 3);
676 } else if (id_ == 0x85) // Yellow stalfos
677 {
678 DrawSpriteTile((x * 16), (y * 16), 10, 16, 11);
679 DrawSpriteTile((x * 16), (y * 16) - 12, 0, 16, 11); // Head
680 } else if (id_ == 0x86) // Kodongo
681 {
682 DrawSpriteTile((x * 16), (y * 16), 4, 26, 14);
683 } else if (id_ == 0x88) // Mothula
684 {
685 DrawSpriteTile((x * 16), (y * 16), 8, 24, 14, false, false, 2, 4);
686 DrawSpriteTile((x * 16) + 16, (y * 16), 8, 24, 14, true, false, 2, 4);
687 } else if (id_ == 0x8A) // Spike
688 {
689 DrawSpriteTile((x * 16), (y * 16), 6, 30, 15);
690 } else if (id_ == 0x8B) // Gibdo
691 {
692 DrawSpriteTile((x * 16), (y * 16), 10, 24, 14);
693 DrawSpriteTile((x * 16), (y * 16) - 8, 0, 24, 14);
694 } else if (id_ == 0x8C) // Arrghus
695 {
696 DrawSpriteTile((x * 16), (y * 16), 0, 24, 14, false, false, 2, 4);
697 DrawSpriteTile((x * 16) + 16, (y * 16), 0, 24, 14, true, false, 2, 4);
698 } else if (id_ == 0x8D) // Arrghus spawn
699 {
700 DrawSpriteTile((x * 16), (y * 16), 6, 24, 14);
701 } else if (id_ == 0x8E) // Terrorpin
702 {
703 DrawSpriteTile((x * 16), (y * 16), 14, 24, 12);
704 }
705
706 if (id_ == 0x8F) // Slime
707 {
708 DrawSpriteTile((x * 16), (y * 16), 0, 20, 12);
709 } else if (id_ == 0x90) // Wall master
710 {
711 DrawSpriteTile((x * 16), (y * 16), 6, 26, 12);
712 DrawSpriteTile((x * 16) + 16, (y * 16), 15, 26, 12, false, false, 1, 1);
713 DrawSpriteTile((x * 16) + 16, (y * 16) + 8, 9, 26, 12, false, false, 1, 2);
714 DrawSpriteTile((x * 16), (y * 16) + 16, 10, 27, 12, false, false, 1, 1);
715 DrawSpriteTile((x * 16) + 8, (y * 16) + 16, 8, 27, 12, false, false, 1, 1);
716 } else if (id_ == 0x91) // Stalfos knight
717 {
718 DrawSpriteTile((x * 16) - 2, (y * 16) + 12, 4, 22, 12, false, false, 1, 2);
719 DrawSpriteTile((x * 16) + 10, (y * 16) + 12, 4, 22, 12, true, false, 1, 2);
720 DrawSpriteTile((x * 16) - 4, (y * 16) + 4, 1, 22, 12);
721 DrawSpriteTile((x * 16) + 12, (y * 16) + 4, 3, 22, 12, false, false, 1, 2);
722 DrawSpriteTile((x * 16), (y * 16) - 8, 6, 20, 12);
723 } else if (id_ == 0x92) // Helmaking
724 {
725 DrawSpriteTile((x * 16), (y * 16) + 32, 14, 26, 14);
726 DrawSpriteTile((x * 16) + 16, (y * 16) + 32, 0, 28, 14);
727 DrawSpriteTile((x * 16) + 32, (y * 16) + 32, 14, 26, 14, true);
728
729 DrawSpriteTile((x * 16), (y * 16) + 16 + 32, 2, 28, 14);
730 DrawSpriteTile((x * 16) + 16, (y * 16) + 16 + 32, 4, 28, 14);
731 DrawSpriteTile((x * 16) + 32, (y * 16) + 16 + 32, 2, 28, 14, true);
732
733 DrawSpriteTile((x * 16) + 8, (y * 16) + 32 + 32, 6, 28, 14);
734 DrawSpriteTile((x * 16) + 24, (y * 16) + 32 + 32, 6, 28, 14, true);
735 } else if (id_ == 0x93) // Bumper
736 {
737 DrawSpriteTile((x * 16), (y * 16), 12, 30, 7);
738 DrawSpriteTile((x * 16) + 16, (y * 16), 12, 30, 7, true);
739 DrawSpriteTile((x * 16) + 16, (y * 16) + 16, 12, 30, 7, true, true);
740 DrawSpriteTile((x * 16), (y * 16) + 16, 12, 30, 7, false, true);
741 } else if (id_ == 0x95) // Right laser eye
742 {
743 DrawSpriteTile((x * 16), (y * 16), 9, 28, 3, true, false, 1, 2);
744 DrawSpriteTile((x * 16), (y * 16) + 16, 9, 28, 3, true, true, 1, 1);
745 } else if (id_ == 0x96) // Left laser eye
746 {
747 DrawSpriteTile((x * 16) + 8, (y * 16) - 4, 9, 28, 3, false, false, 1, 2);
748 DrawSpriteTile((x * 16) + 8, (y * 16) + 12, 9, 28, 3, false, true, 1, 1);
749 } else if (id_ == 0x97) // Right laser eye
750 {
751 DrawSpriteTile((x * 16), (y * 16), 6, 28, 3, false, false, 2, 1);
752 DrawSpriteTile((x * 16) + 16, (y * 16), 6, 28, 3, true, false, 1, 1);
753 } else if (id_ == 0x98) // Right laser eye
754 {
755 DrawSpriteTile((x * 16), (y * 16), 6, 28, 3, false, true, 2, 1);
756 DrawSpriteTile((x * 16) + 16, (y * 16), 6, 28, 3, true, true, 1, 1);
757 } else if (id_ == 0x99) {
758 DrawSpriteTile((x * 16), (y * 16), 6, 24, 12);
759 DrawSpriteTile((x * 16), (y * 16) - 8, 0, 24, 12);
760 } else if (id_ == 0x9A) // Water bubble kyameron
761 {
762 DrawSpriteTile((x * 16), (y * 16), 10, 24, 6);
763 } else if (id_ == 0x9B) // Water bubble kyameron
764 {
765 DrawSpriteTile((x * 16), (y * 16), 6, 24, 11);
766 DrawSpriteTile((x * 16), (y * 16) - 8, 2, 27, 11, false, false, 2, 1);
767 } else if (id_ == 0x9C) // Water bubble kyameron
768 {
769 DrawSpriteTile((x * 16), (y * 16), 12, 22, 11);
770 DrawSpriteTile((x * 16) + 16, (y * 16), 13, 22, 11, false, false, 1, 2);
771 } else if (id_ == 0x9D) // Water bubble kyameron
772 {
773 DrawSpriteTile((x * 16), (y * 16), 14, 21, 11);
774 DrawSpriteTile((x * 16), (y * 16) - 16, 14, 20, 11, false, false, 2, 1);
775 } else if (id_ == 0xA1) {
776 DrawSpriteTile((x * 16) - 8, (y * 16) + 8, 6, 26, 14);
777 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 6, 26, 14, true);
778 } else if (id_ == 0xA2) {
779 DrawSpriteTile((x * 16), (y * 16) + 8, 0, 24, 14, false, false, 4, 4);
780 } else if (id_ == 0xA5) {
781 DrawSpriteTile((x * 16), (y * 16), 0, 26, 10, false, false, 3, 2);
782 DrawSpriteTile((x * 16) + 4, (y * 16) - 8, 0, 24, 10);
783 } else if (id_ == 0xA6) {
784 DrawSpriteTile((x * 16), (y * 16), 0, 26, 8, false, false, 3, 2);
785 DrawSpriteTile((x * 16) + 4, (y * 16) - 8, 0, 24, 8);
786 } else if (id_ == 0xA7) {
787 DrawSpriteTile((x * 16), (y * 16) + 12, 12, 16, 10);
788 DrawSpriteTile((x * 16), (y * 16), 0, 16, 10);
789 } else if (id_ == 0xAC) {
790 DrawSpriteTile((x * 16), (y * 16), 5, 14, 4);
791 } else if (id_ == 0xAD) {
792 DrawSpriteTile((x * 16), (y * 16) + 8, 14, 10, 10);
793 DrawSpriteTile((x * 16), (y * 16), 12, 10, 10);
794 } else if (id_ == 0xBA) {
795 DrawSpriteTile((x * 16), (y * 16), 14, 14, 6);
796 } else if (id_ == 0xC1 || id_ == 0x7A) {
797 DrawSpriteTile((x * 16), (y * 16) - 16, 2, 24, 12, false, false, 2, 4);
798 DrawSpriteTile((x * 16) + 16, (y * 16) - 16, 2, 24, 12, true, false, 2, 4);
799 } else if (id_ == 0xC3) {
800 DrawSpriteTile((x * 16), (y * 16), 10, 14, 12);
801 } else if (id_ == 0xC4) {
802 DrawSpriteTile((x * 16), (y * 16), 0, 18, 14);
803 DrawSpriteTile((x * 16), (y * 16) - 8, 0, 16, 14);
804 } else if (id_ == 0xC5) {
805 } else if (id_ == 0xC6) {
806 DrawSpriteTile((x * 16) + 4, (y * 16) + 14, 3, 30, 14, false, false, 1, 1);
807 DrawSpriteTile((x * 16) + 14, (y * 16) + 4, 3, 30, 14, false, false, 1, 1);
808 DrawSpriteTile((x * 16) + 4, (y * 16) + 2, 1, 31, 14, false, false, 1, 1);
809 DrawSpriteTile((x * 16) - 6, (y * 16) + 4, 3, 30, 14, false, false, 1, 1);
810 DrawSpriteTile((x * 16) + 4, (y * 16) - 6, 3, 30, 14, false, false, 1, 1);
811 } else if (id_ == 0xC7) {
812 DrawSpriteTile((x * 16), (y * 16), 0, 26, 4);
813 DrawSpriteTile((x * 16), (y * 16) - 10, 0, 26, 4);
814 DrawSpriteTile((x * 16), (y * 16) - 20, 0, 26, 4);
815 DrawSpriteTile((x * 16), (y * 16) - 30, 2, 26, 4);
816 } else if (id_ == 0xC8) {
817 DrawSpriteTile((x * 16), (y * 16), 12, 24, 12, false, false, 2, 3);
818 DrawSpriteTile((x * 16) + 16, (y * 16), 12, 24, 12, true, false, 1, 3);
819 } else if (id_ == 0xC9) {
820 DrawSpriteTile((x * 16), (y * 16), 8, 28, 8, false);
821 DrawSpriteTile((x * 16) + 16, (y * 16), 8, 28, 8, true);
822 } else if (id_ == 0xCA) {
823 DrawSpriteTile((x * 16), (y * 16), 8, 10, 10);
824 } else if (id_ == 0xD0) {
825 DrawSpriteTile((x * 16), (y * 16), 7, 14, 11, false, false, 3, 2);
826 DrawSpriteTile((x * 16), (y * 16) - 10, 8, 12, 11);
827 } else if (id_ == 0xD1) {
828 DrawSpriteTile((x * 16) + 2, (y * 16) + 8, 7, 13, 11, true, true, 1, 1);
829 DrawSpriteTile((x * 16) + 8, (y * 16) + 2, 7, 13, 11, true, false, 1, 1);
830 DrawSpriteTile((x * 16) + 14, (y * 16) + 8, 7, 13, 11, true, true, 1, 1);
831 DrawSpriteTile((x * 16) + 8, (y * 16) + 14, 7, 13, 11, false, true, 1, 1);
832 DrawSpriteTile((x * 16) + 8, (y * 16) + 8, 7, 13, 11, false, false, 1,
833 1); // Middle
834 // 6,7 / 13
835 } else if (id_ == 0xD4) {
836 DrawSpriteTile((x * 16) - 4, (y * 16), 0, 7, 7, false, false, 1, 1);
837 DrawSpriteTile((x * 16) + 4, (y * 16), 0, 7, 7, true, false, 1, 1);
838 } else if (id_ == 0xE3) // Fairy
839 {
840 DrawSpriteTile((x * 16), (y * 16), 10, 14, 10);
841 } else if (id_ == 0xE4) // Key
842 {
843 DrawSpriteTile((x * 16), (y * 16), 11, 06, 11, false, false, 1, 2);
844 } else if (id_ == 0xE7) // Mushroom
845 {
846 DrawSpriteTile((x * 16), (y * 16), 14, 30, 16);
847 } else if (id_ == 0xE8) // Fake ms
848 {
849 DrawSpriteTile((x * 16) + 4, (y * 16), 4, 31, 10, false, false, 1, 1);
850 DrawSpriteTile((x * 16) + 4, (y * 16) + 8, 5, 31, 10, false, false, 1, 1);
851 } else if (id_ == 0xEB) {
852 DrawSpriteTile((x * 16), (y * 16), 0, 14, 5);
853 } else if (id_ == 0xF2) {
854 DrawSpriteTile((x * 16), (y * 16) - 16, 12, 24, 2, false, false, 2, 4);
855 DrawSpriteTile((x * 16) + 16, (y * 16) - 16, 12, 24, 2, true, false, 2, 4);
856 } else if (id_ == 0xF4) {
857 DrawSpriteTile((x * 16), (y * 16), 12, 28, 5, false, false, 4, 4);
858 } else {
859 DrawSpriteTile((x * 16), (y * 16), 4, 4, 5);
860 }
861
862 bounding_box_.x = (lower_x_ + (x * 16));
863 bounding_box_.y = (lower_y_ + (y * 16));
866}
867
868void Sprite::DrawSpriteTile(int x, int y, int srcx, int srcy, int pal,
869 bool mirror_x, bool mirror_y, int sizex,
870 int sizey) {
871 if (current_gfx_.empty()) {
872 std::cout << "No gfx loaded" << std::endl;
873 return;
874 }
875
876 x += 16;
877 y += 16;
878 int drawid_ = (srcx + (srcy * 16)) + 512;
879 for (auto yl = 0; yl < sizey * 8; yl++) {
880 for (auto xl = 0; xl < (sizex * 8) / 2; xl++) {
881 int mx = xl;
882 int my = yl;
883
884 if (mirror_x) {
885 mx = (((sizex * 8) / 2) - 1) - xl;
886 }
887 if (mirror_y) {
888 my = ((sizey * 8) - 1) - yl;
889 }
890
891 // Formula information to get tile index position in the array
892 //((ID / nbrofXtiles) * (imgwidth/2) + (ID - ((ID/16)*16) ))
893
894 int tx = ((drawid_ / 0x10) * 0x400) +
895 ((drawid_ - ((drawid_ / 0x10) * 0x10)) * 8);
896 auto pixel = current_gfx_[tx + (yl * 0x80) + xl];
897 // nx,ny = object position, xx,yy = tile position, xl,yl = pixel
898 // position
899 int index = (x) + (y * 64) + (mx + (my * 0x80));
900
901 if (index >= 0 && index <= 4096) {
902 preview_gfx_[index] = (uint8_t)((pixel & 0x0F) + 112 + (pal * 8));
903 }
904 }
905 }
906}
907
908} // namespace zelda3
909} // namespace yaze
std::vector< uint8_t > preview_gfx_
Definition sprite.h:383
auto map_x() const
Definition sprite.h:345
std::string name_
Definition sprite.h:382
void DrawSpriteTile(int x, int y, int srcx, int srcy, int pal, bool mirror_x=false, bool mirror_y=false, int sizex=2, int sizey=2)
Definition sprite.cc:868
std::vector< uint8_t > current_gfx_
Definition sprite.h:384
SDL_Rect bounding_box_
Definition sprite.h:386
void UpdateCoordinates(int map_x, int map_y)
Definition sprite.cc:15
auto map_id() const
Definition sprite.h:344
void UpdateMapProperties(uint16_t map_id) override
Definition sprite.cc:9
auto y() const
Definition sprite.h:341
auto x() const
Definition sprite.h:340
auto map_y() const
Definition sprite.h:346
Zelda 3 specific classes and functions.
Main namespace for the application.
Definition controller.cc:18