1 /*---------------------------------------------------------------------------*
2 Project: Dolphin/Revolution gx demo
3 File: G2D-testLevel1.c (Test of 2D API by Paul Donnelly, Dec. 1999)
4
5 Copyright 1998-2006 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12 *---------------------------------------------------------------------------*/
13
14 #include <stdio.h>
15 #include "G2D-test.h"
16
17 /*---------------------------------------------------------------------------*
18 Defines
19 *---------------------------------------------------------------------------*/
20 #define WIDTH_LYR1 128
21 #define HALF_WIDTH_LYR1 64
22 #define HMASK_LYR1 127
23 #define HSHIFT_LYR1 7
24 #define HEIGHT_LYR1 64
25 #define HALF_HEIGHT_LYR1 32
26 #define VMASK_LYR1 63
27 #define VSHIFT_LYR1 6
28
29 #define TILE_WIDTH_LYR1 32
30 #define TILE_HSHIFT_LYR1 5
31 #define TILE_HEIGHT_LYR1 32
32 #define TILE_VSHIFT_LYR1 5
33
34 #define WIDTH_LYR2 8
35 #define HALF_WIDTH_LYR2 4
36 #define HMASK_LYR2 7
37 #define HSHIFT_LYR2 3
38 #define HEIGHT_LYR2 8
39 #define HALF_HEIGHT_LYR2 4
40 #define VMASK_LYR2 7
41 #define VSHIFT_LYR2 3
42
43 #define TILE_WIDTH_LYR2 256
44 #define TILE_HSHIFT_LYR2 8
45 #define TILE_HEIGHT_LYR2 128
46 #define TILE_VSHIFT_LYR2 7
47
48
49 #define WORLD_WIDTH (WIDTH_LYR1 * TILE_WIDTH_LYR1)
50 #define WORLD_HEIGHT (HEIGHT_LYR1 * TILE_HEIGHT_LYR1)
51
52 #define NUM_TILES_LYR1 95
53 #define NUM_TILES_LYR2 2
54
55 #define NUM_MATERIALS_LYR1 4
56 #define NUM_MATERIALS_LYR2 2
57
58 /*---------------------------------------------------------------------------*
59 Global Variables and Data
60 *---------------------------------------------------------------------------*/
61
62 static unsigned char map1[WIDTH_LYR1 * HEIGHT_LYR1] =
63 {
64 "6aT..............46a..............P.13jTPEIOL0LT..1222222222DC222222222223j......P.4C2222222222222223j1222222222222222DC2222222D"
65 "6aT..............13j..............P.dfiTPK0KHJGSV.decccccccco6bcccccccccchi......P.46bcccccccccccccchidecccccccccccccco6bcccccco"
66 "6aT..............dfi..............XNNNNWPHIG0EIOT...........46a............../0/.P.46a...79n.....................79n..46aMNNNO.4"
67 "6aT.....................................XOEJFK0KT...........46a..79n......../0/0/P.46a...4Bp888;<=++>?()++,-:8888A6m..13jT...P.4"
68 "6aT......................................PL0LHIGT...........46a.7ABqn.......0/0/0P.46a...4C2222yz{uu|}@tuuvwx2222D6a..dfiT...P.4"
69 "6aT......................................PHJGMNNW...........46a.1DC3l......./0/0/P.46a...13gcccccccccc_`cccccccccr3jMNNNNW...P.4"
70 "6aT......................................XNNNW..............46a.dr3si......../0/.P.46a...dfiMNNNNNNNNNNNNNNNNNNO.dfiT........P.4"
71 "6aT.........................EF..............................46a..dfi.URRRRRRRRRRRQ.46aMNNNNNW..................XNNNNW........P.4"
72 "6aT.......................EIGK..............................46a......P.............46aT......................................P.4"
73 "6aT.......................HJIG...........URRRRRV............13j......P.788888888888A6aT.............................URRRRV...P.4"
74 "6aT......................................P.....T............dfi......P.4C222222222223jT.............................P....T...P.4"
75 "6aT......................................P.789nT..........URRRRRRRRRRQ.46bcccccccccchiT....................URV......P.79nT...P.4"
76 "6aT......................................P.456mT..........P............46aMNNNNNNNNNNNW...................UQ0SV.....P.46mT...P.4"
77 "6aT......................................P.456aT..........P.78888888888A6aT.....................URV.......P0/0T.....P.46aT...P.4"
78 "6aT.................................URRRRQ.456aSRRRRV.....P.4C22222222223jT....................UQ0SV......XO0MW.....P.46aT...P.4"
79 "6aT.................................P......456a.....T.....P.46bccccccccchiT....................P0/0T..URV..XNW......P.46aT...P.4"
80 "6aT.................................P.78888A5Bp8889nT.....P.46aMNNNNNNNNNNW....................XO0MW.UQ0SV..........P.46aT...P.4"
81 "6aT...................0.0.0.0.0.....P.4555555555556mT.....P.13jT................................XNW..P0/0T..........P.46aT...P.4"
82 "6aT.................................P.12222D5C22223jT.....P.dfiT.....................................XO0MW..........P.46aT...P.4"
83 "6aT...................0.0.0.0.0.....P.deccco56bccchiT.....P....T......................................XNW...........P.46aT...P.4"
84 "6aT.................................XNNNNO.456aMNNNNW.....P.79nT....................................................P.46aT...P.4"
85 "6aT...................0.0.0.0.0..........P.456aT..........P.46mT.......................................URV..........P.46aT...P.4"
86 "6aT......................................P.456aT..........P.46aT......................................UQ0SV.........P.46aT...P.4"
87 "6aT...................0.0.0.0.0..........P.123jT..........P.46aT......................................P0/0T.........P.46aT...P.4"
88 "6aT......................................P.dehiT..........P.46aT......................................XO0MW.........P.46aT...P.4"
89 "6aT...................0.0.0.0.0..........XNNNNNW..........P.46aT.......................................XNW..........P.46aT...P.4"
90 "6aSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQ.46aT....................................................P.46aT...P.4"
91 "6a..........................................................46aT.URRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRV..........P.46aT...P.4"
92 "Bp888888888888888888888;<=++>?!n.... ()++,-:8888888888888888A6aT.P0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0T..........P.46aT...P.4"
93 "C2222222222222222222222yz{uu|}$%....#@tuuvwx222222222222222223jT.P/...................................../T..........P.46aT...P.4"
94 "6bcccccccccccccccccccccccccccc_'....d&`cccccccccccccccccccccchiT.P0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0T........URQ.46aT...P.4"
95 "6aMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNW.XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNW........P...46aT...P.4"
96 "3jT...............................................................................................................P.78A6aT...P.1"
97 "fiT...............................................................................................................P.1223jT...P.d"
98 "NNW..............................................................................URRRRV...........................P.dechiT...XNN"
99 ".................................................................................P....T...........................XNNNNNNW......"
100 ".................................................................................P.79nT........................................."
101 ".................................................................................P.46mT........................................."
102 ".................................................................................P.46aT...........URRRV........................."
103 "...............................URRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRV................P.46aT........URRQEJFT...........URRRRRRV......"
104 "RRV............................P................................SRRRRRRRRRRRRRRRRQ.46aT........PEIOL0LT...........P......T...URR"
105 "..T............................P.788888888888888888888888888889n...................46aT........PK0KHJGSV..........P.7889nT...P.."
106 "9nT............................P.1222222222222222222222222222DBp888;<=+>?()+,-:8888A6aT........PHIG0EIOT..........P.12D6mT...P.7"
107 "6mT..............79n...........P.deccccccccccccccccccccccccccoC2222yz{u|}@tuvwx222223jT........XOEJFK0KT..........P.deo6aT...P.4"
108 "6aT...........79n13l79n........XNNNNNNNNNNNNNNNNNNNNNNNNNNNO.46bccccccccc_`ccccccccchiT.........PL0LHIGT..........XNO.46aT...P.4"
109 "6aT........79n13ldfi13l79n.................................P.46aMNNNNNNNNNNNNNNNNNNNNNW.........PHJGMNNW............P.13jT...P.4"
110 "6aT........13ldfi !ndfi13l.................................P.46aT...............................XNNNW...............P.dfiT...P.4"
111 "6aT........dfi !n#$% !ndfi.................................P.46aT...................................................XNNNNW...P.4"
112 "6aT........ !n#$%d&'#$% !n.................................P.46aT............................................................P.4"
113 "6aT.....79n#$%d&'...d&'#$%79n..............................P.46aT............................................................P.4"
114 "6aT.....46md&'...*.....d&'46m..............................P.46aT............................................................P.4"
115 "6aT.....13j !n......... !n13j..............................P.46aT............................................................P.4"
116 "6aT.....dfi#$% !n... !n#$%dfi..............................P.46aT............................................................P.4"
117 "6aT........d&'#$% !n#$%d&'.................................P.13jT.......79n...........EFEFEF.................................P.4"
118 "6aT........79nd&'#$%d&'79n.................................P.dfiT.......46m...........KHGHGK.................................P.4"
119 "6aT........13l79nd&'79n13l..............0.0.0.0.0..........XNNNNW.......46a...........HFEFEG.................................P.4"
120 "6aT........dfi13l79n13ldfi..............................................46a...........0HGHG0.................................P.4"
121 "6aT...........dfi46mdfi.................0...0...0.79n...................46a......................URRRRRRRRRRRRRRV............P.4"
122 "6aSRRRRRRRRRRRRV.46aURRRRRRRRRRRRRRRRRRV..........46m...................46a......................P..............T............P.4"
123 "6a.............T.46aP..................T0.0.0.0.0.46a........ !n........46a......................P.78888889n.79nT............P.4"
124 "Bp88888;<=+>?!nT.46aP. ()+,-:888888889nT..........46a........#$%........46a......................P.4C2222D6m.46mT............P.4"
125 "C222222yz{u|}$%T.46aP.#@tuvwx2222222D6mT..........46a........d&'........46a......URRRRRRRRRRRRRRRQ.46bcccr3j.46aSRRRRRRRRRRRRQ.4"
126 "6bccccccccccc_'T.46aP.d&`ccccccccccco6aT...URRRV..46a...................46a......P.................46a79ndfi.46a...............4"
127 "6aMNNNNNNNNNNNNW.46aXNNNNNNNNNNNNNO.46aTURRQEJFT..4Bp8888888888888888888A6a......P.7888888888888888A6a4Bp8888ABp888888888888888A"
128 };
129
130 static u16 map2[] =
131 {
132 0,0,0,0,0,0,0,0,
133 0,0,0,0,1,0,0,0,
134 0,0,1,0,0,0,0,0,
135 0,0,0,0,0,0,0,0,
136 0,0,0,0,0,0,1,0,
137 0,0,0,0,0,0,0,0,
138 0,1,0,0,1,0,0,0,
139 0,0,0,0,0,0,0,0,
140 };
141
142 static G2DTileDesc tileDescLyr1[NUM_TILES_LYR1] =
143 {
144 // M S T CI User // M=Material (S,T) = Tex Coords -or-
145 // M R G B Data // CI = Color Index -or- (R,G,B) = RGB8 Color
146 1, 8, 8, 0, 0,1,0,0, // ' ': Solo Tower
147 1, 9, 8, 0, 3,1,0,0, // '!': Solo Tower
148 0, 0, 0, 0, 0,0,0,0, // '"':
149 1, 8, 9, 0, 1,1,0,0, // '#': Solo Tower
150 1, 9, 9, 0, 2,1,0,0, // '$': Solo Tower
151 1, 10, 9, 0, 0,0,0,0, // '%': Solo Tower
152 1, 9, 10, 0, 0,0,0,0, // '&': Solo Tower
153 1, 10, 10, 0, 0,0,0,0, // ''': Solo Tower
154 1, 1, 11, 0, 0,2,0,0, // '(': Solo Tower
155 1, 2, 11, 0, 0,2,0,0, // ')': Raised
156 0, 0, 0, 0, 0,0,0,0, // '*': Starting position
157 1, 3, 11, 0, 0,2,0,0, // '+': Raised
158 1, 4, 11, 0, 0,2,0,0, // ',': Raised
159 1, 5, 11, 0, 0,2,0,0, // '-': Raised
160 0, 0, 0, 1, 0,0,0,0, // '.': Basic tile (colored)
161 1, 4, 9, 0, 0,0,0,0, // '/': Inverse Bump
162 1, 1, 9, 0, 0,0,0,0, // '0': Bump
163 1, 0, 5, 0, 1,1,0,0, // '1': Bottom Left
164 1, 1, 5, 0, 2,2,0,0, // '2': Bottom
165 1, 5, 5, 0, 2,1,0,0, // '3': Bottom Right
166 1, 0, 4, 0, 1,2,0,0, // '4': Left
167 1, 4, 4, 2, 0,3,0,0, // '5': Mid
168 1, 5, 4, 0, 3,2,0,0, // '6': Right
169 1, 0, 0, 0, 0,1,0,0, // '7': Top Left
170 1, 1, 0, 0, 0,2,0,0, // '8': Top
171 1, 5, 0, 0, 3,1,0,0, // '9': Top Right
172 1, 6, 11, 0, 0,2,0,0, // ':': Raised
173 1, 7, 11, 0, 0,2,0,0, // ';': Raised
174 1, 8, 11, 0, 0,2,0,0, // '<': Raised
175 1, 9, 11, 0, 0,2,0,0, // '=': Raised
176 1, 10, 11, 0, 0,2,0,0, // '>': Raised
177 1, 11, 11, 0, 0,2,0,0, // '?': Raised
178 1, 1, 12, 0, 2,2,0,0, // '@': Raised
179 1, 3, 4, 0, 0,3,0,0, // 'A': Inner TL
180 1, 1, 4, 0, 3,3,0,0, // 'B': Inner TR
181 1, 1, 1, 0, 2,3,0,0, // 'C': Inner BR
182 1, 4, 1, 0, 1,3,0,0, // 'D': Inner BL
183
184 1, 0, 8, 1, 0,0,0,0, // 'E': Floor Marking
185 1, 2, 8, 0, 0,0,0,0, // 'F': Floor Marking
186 1, 2, 10, 0, 0,0,0,0, // 'G': Floor Marking
187 1, 0, 10, 0, 0,0,0,0, // 'H': Floor Marking
188 1, 1, 8, 0, 0,0,0,0, // 'I': Floor Marking
189 1, 1, 10, 0, 0,0,0,0, // 'J': Floor Marking
190 1, 2, 9, 0, 0,0,0,0, // 'K': Floor Marking
191 1, 0, 9, 0, 0,0,0,0, // 'L': Floor Marking
192 1, 3, 8, 0, 0,0,0,0, // 'M': Floor Marking
193 1, 4, 8, 0, 0,0,0,0, // 'N': Floor Marking
194 1, 5, 8, 0, 0,0,0,0, // 'O': Floor Marking
195 1, 5, 9, 0, 0,0,0,0, // 'P': Floor Marking
196 1, 5, 10, 0, 0,0,0,0, // 'Q': Floor Marking
197 1, 4, 10, 0, 0,0,0,0, // 'R': Floor Marking
198 1, 3, 10, 0, 0,0,0,0, // 'S': Floor Marking
199 1, 3, 9, 0, 0,0,0,0, // 'T': Floor Marking
200 1, 6, 8, 0, 0,0,0,0, // 'U': Floor Marking
201 1, 7, 8, 0, 0,0,0,0, // 'V': Floor Marking
202 1, 7, 9, 0, 0,0,0,0, // 'W': Floor Marking
203 1, 6, 9, 0, 0,0,0,0, // 'X': Floor Marking
204 0, 0, 0, 0, 0,0,0,0, // 'Y':
205 0, 0, 0, 0, 0,0,0,0, // 'Z':
206 0, 0, 0, 0, 0,0,0,0, // '[':
207 0, 0, 0, 0, 0,0,0,0, // '\':
208 0, 0, 0, 0, 0,0,0,0, // ']':
209 0, 0, 0, 0, 0,0,0,0, // '^':
210 1, 12, 13, 0, 0,0,0,0, // '_': Shadow
211 1, 2, 13, 0, 0,0,0,0, // '`': Shadow
212
213 1, 2, 3, 0, 0,0,0,0, // 'a': Shadow
214 1, 2, 2, 0, 0,0,0,0, // 'b': Shadow
215 1, 3, 2, 0, 0,0,0,0, // 'c': Shadow
216 1, 0, 6, 0, 0,0,0,0, // 'd': Shadow
217 1, 1, 6, 0, 0,0,0,0, // 'e': Shadow
218 1, 3, 7, 0, 0,0,0,0, // 'f': Shadow
219 1, 4, 6, 0, 0,0,0,0, // 'g': Shadow
220 1, 5, 6, 0, 0,0,0,0, // 'h': Shadow
221 1, 6, 6, 0, 0,0,0,0, // 'i': Shadow
222 1, 6, 5, 0, 0,0,0,0, // 'j': Shadow
223 1, 6, 4, 0, 0,0,0,0, // 'k': Shadow
224 1, 7, 3, 0, 0,0,0,0, // 'l': Shadow
225 1, 6, 1, 0, 0,0,0,0, // 'm': Shadow
226 1, 6, 0, 0, 0,0,0,0, // 'n': Shadow
227 1, 4, 2, 0, 1,2,0,0, // 'o': Left Shadow
228 1, 2, 4, 0, 0,2,0,0, // 'p': Top Shadow
229 1, 6, 2, 0, 3,1,0,0, // 'q': TR Shadow
230 1, 2, 6, 0, 1,1,0,0, // 'r': BL Shadow
231 1, 12, 9, 0, 0,0,0,0, // 's': Shadow
232
233 1, 2, 12, 0, 2,2,0,0, // 't': Raised
234 1, 3, 12, 0, 2,2,0,0, // 'u': Raised
235 1, 4, 12, 0, 2,2,0,0, // 'v': Raised
236 1, 5, 12, 0, 2,2,0,0, // 'w': Raised
237 1, 6, 12, 0, 2,2,0,0, // 'x': Raised
238 1, 7, 12, 0, 2,2,0,0, // 'y': Raised
239 1, 8, 12, 0, 2,2,0,0, // 'z': Raised
240 1, 9, 12, 0, 2,2,0,0, // '{': Raised
241 1, 10, 12, 0, 2,2,0,0, // '|': Raised
242 1, 11, 12, 0, 2,2,0,0, // '}': Raised
243 0, 0, 0, 0, 0,0,0,0, // '~': Raised
244 };
245
246 const char sUsedTiles[] = " !#$%&'()+,-:;<=>?@tuvwxyz{|}_`./0789632145ABCDEFGHIJKLMNOPQRSTUVWXabcdefghijklmnopqrs";
247
248 static G2DTileDesc tileDescLyr2[NUM_TILES_LYR2] =
249 {
250 // M S T CI User // M=Material (S,T) = Tex Coords -or-
251 // R G B Data // CI = Color Index -or- (R,G,B) = RGB8 Color
252 0, 0, 0, 0, 0,0,0,0, // Basic Tile (empty)
253 1, 0, 0, 0, 0,0,0,0, // Cloud
254 };
255
256 static GXTexObj toTilesRGB_1;
257 static GXTexObj toCloudRGBA8_1;
258
259 static u8 ColorRGBA8[] ATTRIBUTE_ALIGN(32) =
260 {// R G B A
261 0, 0, 0, 0,
262 81, 102, 116, 255,
263 101, 0, 238, 255,
264 };
265
266 static GXColor CloudTint = { 0xc0, 0xc0, 0xf0, 0xff };
267
268 static G2DMatDesc matDescLyr1[NUM_MATERIALS_LYR1] =
269 {// Material Texture Color
270 //Data Category Color Object Lookup Table
271 0, G2D_CTG_RGBA_INDEX8, NULL, NULL, ColorRGBA8,
272 // 0, G2D_CTG_RGB_DIRECT, NULL, NULL, ColorRGBA8,
273 0, G2D_CTG_TEXTURE, NULL, &toTilesRGB_1, NULL,
274 };
275
276 static G2DMatDesc matDescLyr2[NUM_MATERIALS_LYR2] =
277 {// Material Texture Color
278 //Data Category Color Object Lookup Table
279 0, G2D_CTG_EMPTY, NULL, NULL, NULL,
280 0, G2D_CTG_TEXTURE, &CloudTint, &toCloudRGBA8_1, NULL,
281 };
282
283 G2DLayer lyrBack; // Background layer
284 G2DLayer lyrFront; // Foreground layer
285
286 static void MapInit( void );
287
288 /*---------------------------------------------------------------------------*
289 Name: MapInit
290
291 Description: Initialize the position of the ship from the map
292
293 Arguments: none
294 Returns: none
295 *---------------------------------------------------------------------------*/
MapInit(void)296 static void MapInit( void )
297 {
298 s32 nI, nJ;
299
300 G2DInitWorld( WORLD_WIDTH, WORLD_HEIGHT );
301 G2DSetViewport( 0, 0, MY_SCREEN_WIDTH, MY_SCREEN_HEIGHT );
302
303 #ifdef _EDITOR
304 {
305 /* Load edits from map */
306
307 FILE *fpMap = fopen("map.c", "r");
308 s32 nC;
309
310 if ((s32)fpMap > 0)
311 {
312 nC=fgetc(fpMap);
313
314 for (nJ=0; nJ<HEIGHT_LYR1; nJ++)
315 {
316 for(; (nC=='"') || (nC<' '); nC=fgetc(fpMap))
317 {
318 }
319
320 for (nI=0; nI<WIDTH_LYR1; nI++)
321 {
322 map1[(nJ<<HSHIFT_LYR1)+nI] = (u8)nC;
323 nC=fgetc(fpMap);
324 }
325 }
326 fclose(fpMap);
327 }
328 }
329 #endif // ifdef _EDITOR
330
331 for (nJ=0; nJ<HEIGHT_LYR1; nJ++)
332 {
333 for (nI=0; nI<WIDTH_LYR1; nI++)
334 {
335 if (map1[(nJ<<HSHIFT_LYR1)+nI] == '*')
336 {
337 nStartIdx = (nJ<<HSHIFT_LYR1)+nI;
338 map1[nStartIdx] = '.';
339 poShip.rPosX = (f32)(nI<<TILE_HSHIFT_LYR1); // Initial world position (in pixels)
340 poShip.rPosY = (f32)(nJ<<TILE_VSHIFT_LYR1);
341 }
342 map1[(nJ<<HSHIFT_LYR1)+nI] -= ' ';
343 }
344 }
345 }
346
InitLevel1(TPLPalettePtr * tpl)347 void InitLevel1( TPLPalettePtr *tpl )
348 {
349 // Set up all textures for bilinear interpolation
350
351 // Tiles
352 TPLGetGXTexObjFromPalette(*tpl, &toTilesRGB_1, 0);
353 GXInitTexObjLOD( &toTilesRGB_1,
354 GX_LINEAR, GX_LINEAR, 0.0F, 0.0F, 0.0F,
355 GX_FALSE, GX_FALSE, GX_ANISO_1 );
356
357 // Cloud
358 TPLGetGXTexObjFromPalette(*tpl, &toCloudRGBA8_1, 1);
359 GXInitTexObjLOD( &toCloudRGBA8_1,
360 GX_LINEAR, GX_LINEAR, 0.0F, 0.0F, 0.0F,
361 GX_FALSE, GX_FALSE, GX_ANISO_1 );
362
363 lyrBack.map = map1; // Map of tile indices
364 lyrBack.nHS = HSHIFT_LYR1; // Horizontal Shift (Width of layer = 1<<nHS)
365 lyrBack.nVS = VSHIFT_LYR1; // Vertical Shift (Height of layer = 1<<nVS)
366 lyrBack.nBPI = 1; // Bytes per Index (1,2)
367 lyrBack.nTileWidth = TILE_WIDTH_LYR1; // Width of tiles in pixels (should be >=16, power of 2)
368 lyrBack.nTileHeight = TILE_HEIGHT_LYR1; // Height of tiles in pixels (should be >=16, power of 2)
369 lyrBack.bWrap = TRUE; // Whether layer wraps or not
370 lyrBack.nNumMaterials = NUM_MATERIALS_LYR1; // Number of materials
371 lyrBack.tileDesc = tileDescLyr1; // Tile Descriptor Table
372 lyrBack.matDesc = matDescLyr1; // Material Descriptor Table
373
374 lyrFront.map = map2; // Map of tile indices
375 lyrFront.nHS = HSHIFT_LYR2; // Horizontal Shift (Width of layer = 1<<nHS)
376 lyrFront.nVS = VSHIFT_LYR2; // Vertical Shift (Height of layer = 1<<nVS)
377 lyrFront.nBPI = 2; // Bytes per Index (1,2)
378 lyrFront.nTileWidth = TILE_WIDTH_LYR2; // Width of tiles in pixels (should be >=16, power of 2)
379 lyrFront.nTileHeight = TILE_HEIGHT_LYR2; // Height of tiles in pixels (should be >=16, power of 2)
380 lyrFront.bWrap = TRUE; // Whether layer wraps or not
381 lyrFront.nNumMaterials = NUM_MATERIALS_LYR2; // Number of materials
382 lyrFront.tileDesc = tileDescLyr2; // Tile Descriptor Table
383 lyrFront.matDesc = matDescLyr2; // Material Descriptor Table
384
385 MapInit();
386 }
387