some fixes to video init/deinit
[k8vacspelynky.git] / roomEnd.vc
blob5e56627afb6bb1b87f3d950028d4baa09f6ba303
1 /**********************************************************************************
2  * Copyright (c) 2008, 2009 Derek Yu and Mossmouth, LLC
3  * Copyright (c) 2010, Moloch
4  * Copyright (c) 2018, Ketmar Dark
5  *
6  * This file is part of Spelunky.
7  *
8  * You can redistribute and/or modify Spelunky, including its source code, under
9  * the terms of the Spelunky User License.
10  *
11  * Spelunky is distributed in the hope that it will be entertaining and useful,
12  * but WITHOUT WARRANTY.  Please see the Spelunky User License for more details.
13  *
14  * The Spelunky User License should be available in "Game Information", which
15  * can be found in the Resource Explorer, or as an external file called COPYING.
16  * If not, please obtain a new copy of Spelunky from <http://spelunkyworld.com/>
17  *
18  **********************************************************************************/
19 int winCutSceneTimer = -1;
20 int winVolcanoTimer = -1;
21 int winCutScenePhase = 0;
22 int winSceneDrawStatus = 0;
23 int winMoneyCount = 0;
24 int winTime;
25 bool winFadeOut = false;
26 int winFadeLevel = 0;
27 int winCutsceneSkip = 0; // 1: waiting for pay release; 2: pay released, do skip
28 bool winCutsceneSwitchToNext = false;
31 void startWinCutscene () {
32   global.hasParachute = false;
33   shakeLeft = 0;
34   winCutsceneSwitchToNext = false;
35   winCutsceneSkip = 0;
36   isKeyPressed(GameConfig::Key.Pay);
37   isKeyReleased(GameConfig::Key.Pay);
39   auto olddel = ImmediateDelete;
40   ImmediateDelete = false;
41   clearWholeLevel();
43   createEnd1Room();
44   fixWallTiles();
45   addBackgroundGfxDetails();
47   levBGImgName = 'bgCave';
48   levBGImg = (levBGImgName ? bgtileStore[levBGImgName] : none);
50   blockWaterChecking = true;
51   fixLiquidTop();
52   cleanDeadTiles();
54   ImmediateDelete = olddel;
55   CollectGarbage(true); // destroy delayed objects too
57   if (dumpGridStats) objGrid.dumpStats();
59   playerExited = false; // just in case
60   playerExitDoor = none;
62   osdClear(clearTalk:true);
64   setupGhostTime();
65   global.stopMusic();
67   inWinCutscene = 1;
68   winCutSceneTimer = -1;
69   winCutScenePhase = 0;
71   /+
72   if (global.config.gameMode != GameConfig::GameMode.Vanilla) {
73     if (global.config.bizarre) {
74       global.yasmScore = 1;
75       global.config.bizarrePlusTitle = true;
76     }
78     array!MapTile toReplace;
79     forEachTile(delegate bool (MapTile t) {
80       if (t.objType == 'oGTemple' ||
81           t.objType == 'oIce' ||
82           t.objType == 'oDark' ||
83           t.objType == 'oBrick' ||
84           t.objType == 'oLush')
85       {
86         toReplace[$] = t;
87       }
88       return false;
89     });
91     foreach (MapTile t; miscTileGrid.allObjects()) {
92       if (t.objType == 'oGTemple' ||
93           t.objType == 'oIce' ||
94           t.objType == 'oDark' ||
95           t.objType == 'oBrick' ||
96           t.objType == 'oLush')
97       {
98         toReplace[$] = t;
99       }
100     }
102     foreach (MapTile t; toReplace) {
103       if (t.iy < 192) {
104         t.cleanDeath = true;
105             if (rand(1,120) == 1) instance_change(oGTemple, false);
106         else if (rand(1,100) == 1) instance_change(oIce, false);
107         else if (rand(1,90) == 1) instance_change(oDark, false);
108         else if (rand(1,80) == 1) instance_change(oBrick, false);
109         else if (rand(1,70) == 1) instance_change(oLush, false);
110           }
111       }
112       with (oBrick)
113       {
114           if (y &lt; 192)
115           {
116               cleanDeath = true;
117               if (rand(1,5) == 1) instance_change(oLush, false);
118           }
119       }
120   }
121   +/
122   //!instance_create(0, 0, oBricks);
124   //shakeToggle = false;
125   //oPDummy.status = 2;
127   //timer = 0;
129   /+
130   if (global.kaliPunish &gt;= 2) {
131       instance_create(oPDummy.x, oPDummy.y+2, oBall2);
132       obj = instance_create(oPDummy.x, oPDummy.y, oChain2);
133       obj.linkVal = 1;
134       obj = instance_create(oPDummy.x, oPDummy.y, oChain2);
135       obj.linkVal = 2;
136       obj = instance_create(oPDummy.x, oPDummy.y, oChain2);
137       obj.linkVal = 3;
138       obj = instance_create(oPDummy.x, oPDummy.y, oChain2);
139       obj.linkVal = 4;
140   }
141   +/
145 void startWinCutsceneVolcano () {
146   global.hasParachute = false;
147   /*
148   writeln("VOLCANO HOLD 0: ", (player.holdItem ? GetClassName(player.holdItem.Class) : ''));
149   writeln("VOLCANO PICK 0: ", (player.pickedItem ? GetClassName(player.pickedItem.Class) : ''));
150   */
152   shakeLeft = 0;
153   winCutsceneSwitchToNext = false;
154   auto olddel = ImmediateDelete;
155   ImmediateDelete = false;
156   clearWholeLevel();
158   levBGImgName = '';
159   levBGImg = (levBGImgName ? bgtileStore[levBGImgName] : none);
161   blockWaterChecking = true;
163   ImmediateDelete = olddel;
164   CollectGarbage(true); // destroy delayed objects too
166   spawnPlayerAt(2*16+8, 11*16+8);
167   player.dir = MapEntity::Dir.Right;
169   playerExited = false; // just in case
170   playerExitDoor = none;
172   osdClear(clearTalk:true);
174   setupGhostTime();
175   global.stopMusic();
177   inWinCutscene = 2;
178   winCutSceneTimer = -1;
179   winCutScenePhase = 0;
181   MakeMapTile(0, 0, 'oEnd2BG');
182   realViewStart.x = 0;
183   realViewStart.y = 0;
184   viewStart.x = 0;
185   viewStart.y = 0;
187   viewMin.x = 0;
188   viewMin.y = 0;
189   viewMax.x = 320;
190   viewMax.y = 240;
192   player.dead = false;
193   player.active = true;
194   player.visible = false;
195   player.removeBallAndChain(temp:true);
196   player.stunned = false;
197   player.status = MapObject::FALLING;
198   if (player.holdItem) player.holdItem.visible = false;
199   player.fltx = 320/2;
200   player.flty = 0;
202   /*
203   writeln("VOLCANO HOLD 1: ", (player.holdItem ? GetClassName(player.holdItem.Class) : ''));
204   writeln("VOLCANO PICK 1: ", (player.pickedItem ? GetClassName(player.pickedItem.Class) : ''));
205   */
209 void startWinCutsceneWinFall () {
210   global.hasParachute = false;
211   /*
212   writeln("FALL HOLD 0: ", (player.holdItem ? GetClassName(player.holdItem.Class) : ''));
213   writeln("FALL PICK 0: ", (player.pickedItem ? GetClassName(player.pickedItem.Class) : ''));
214   */
216   shakeLeft = 0;
217   winCutsceneSwitchToNext = false;
219   auto olddel = ImmediateDelete;
220   ImmediateDelete = false;
221   clearWholeLevel();
223   createEnd3Room();
224   setMenuTilesVisible(false);
225   //fixWallTiles();
226   //addBackgroundGfxDetails();
228   levBGImgName = '';
229   levBGImg = (levBGImgName ? bgtileStore[levBGImgName] : none);
231   blockWaterChecking = true;
232   fixLiquidTop();
233   cleanDeadTiles();
235   ImmediateDelete = olddel;
236   CollectGarbage(true); // destroy delayed objects too
238   if (dumpGridStats) objGrid.dumpStats();
240   playerExited = false; // just in case
241   playerExitDoor = none;
243   osdClear(clearTalk:true);
245   setupGhostTime();
246   global.stopMusic();
248   inWinCutscene = 3;
249   winCutSceneTimer = -1;
250   winCutScenePhase = 0;
252   player.dead = false;
253   player.active = true;
254   player.visible = false;
255   player.removeBallAndChain(temp:true);
256   player.stunned = false;
257   player.status = MapObject::FALLING;
258   if (player.holdItem) player.holdItem.visible = false;
259   player.fltx = 320/2;
260   player.flty = 0;
262   winSceneDrawStatus = 0;
263   winMoneyCount = 0;
265   winFadeOut = false;
266   winFadeLevel = 0;
268   /*
269   writeln("FALL HOLD 1: ", (player.holdItem ? GetClassName(player.holdItem.Class) : ''));
270   writeln("FALL PICK 1: ", (player.pickedItem ? GetClassName(player.pickedItem.Class) : ''));
271   */
275 void setGameOver () {
276   if (inWinCutscene) {
277     player.visible = false;
278     player.removeBallAndChain(temp:true);
279     if (player.holdItem) player.holdItem.visible = false;
280   }
281   player.dead = true;
282   if (inWinCutscene > 0) {
283     winFadeOut = true;
284     winFadeLevel = 255;
285     winSceneDrawStatus = 8;
286   }
290 MapTile findEndPlatTile () {
291   return forEachTile(delegate bool (MapTile t) { return (t isa MapTileEndPlat); }, castClass:MapTileEndPlat);
295 MapObject findBigTreasure () {
296   return forEachObject(delegate bool (MapObject o) { return (o isa MapObjectBigTreasure); }, castClass:MapObjectBigTreasure);
300 void winCutscenePlayerControl (PlayerPawn plr) {
301   auto payPress = isKeyPressed(GameConfig::Key.Pay);
302   auto payRelease = isKeyReleased(GameConfig::Key.Pay);
304   if (allowFinalCutsceneSkip) {
305     switch (winCutsceneSkip) {
306       case 0: // nothing was pressed
307         if (payPress) winCutsceneSkip = 1;
308         break;
309       case 1: // waiting for pay release
310         if (payRelease) winCutsceneSkip = 2;
311         break;
312       case 2: // pay released, do skip
313         setGameOver();
314         return;
315     }
316   }
318   // first winning room
319   if (inWinCutscene == 1) {
320     if (plr.ix < 448+8) {
321       plr.kRight = true;
322       return;
323     }
325     // waiting for chest to open
326     if (winCutScenePhase == 0) {
327       winCutSceneTimer = 120/2;
328       winCutScenePhase = 1;
329       return;
330     }
332     // spawn big idol
333     if (winCutScenePhase == 1) {
334       if (--winCutSceneTimer == 0) {
335         winCutScenePhase = 2;
336         winCutSceneTimer = 20;
337         forEachObject(delegate bool (MapObject o) {
338           if (o isa MapObjectBigChest) {
339             o.setSprite(global.config.gameMode == GameConfig::GameMode.Vanilla ? 'sBigChestOpen' : 'sBigChestOpen2');
340             auto treasure = MakeMapObject(o.ix, o.iy, 'oBigTreasure');
341             if (treasure) {
342               treasure.yVel = -4;
343               treasure.xVel = -3;
344               o.playSound('sndClick');
345               //!!!if (global.config.gameMode != GameConfig::GameMode.Vanilla) scrSprayGems(oBigChest.x+24, oBigChest.y+24);
346             }
347           }
348           return false;
349         });
350       }
351       return;
352     }
354     // lava pump wait
355     if (winCutScenePhase == 2) {
356       if (--winCutSceneTimer == 0) {
357         winCutScenePhase = 3;
358         winCutSceneTimer = 50;
359       }
360       return;
361     }
363     // lava pump start
364     if (winCutScenePhase == 3) {
365       auto ep = findEndPlatTile();
366       if (ep) MakeMapObject(ep.ix+global.randOther(0, 80), /*ep.iy*/192+32, 'oBurn');
367       if (--winCutSceneTimer == 0) {
368         winCutScenePhase = 4;
369         winCutSceneTimer = 10;
370         if (ep) MakeMapObject(ep.ix, ep.iy+30, 'oLavaSpray');
371         scrShake(9999);
372       }
373       return;
374     }
376     // lava pump first accel
377     if (winCutScenePhase == 4) {
378       if (--winCutSceneTimer == 0) {
379         forEachObject(delegate bool (MapObject o) {
380           if (o isa MapObjectLavaSpray) o.yAcc = -0.1;
381           return false;
382         });
383       }
384     }
386     // lava pump complete
387     if (winCutScenePhase == 5) {
388       if (--winCutSceneTimer == 0) {
389         //if (oLavaSpray) oLavaSpray.yAcc = -0.1;
390         startWinCutsceneVolcano();
391       }
392       return;
393     }
394     return;
395   }
398   // volcano room
399   if (inWinCutscene == 2) {
400     plr.flty = 0;
402     // initialize
403     if (winCutScenePhase == 0) {
404       winCutSceneTimer = 50;
405       winCutScenePhase = 1;
406       winVolcanoTimer = 10;
407       return;
408     }
410     if (winVolcanoTimer > 0) {
411       if (--winVolcanoTimer == 0) {
412         MakeMapObject(224+global.randOther(0,48), 144+global.randOther(0,8), 'oVolcanoFlame');
413         winVolcanoTimer = global.randOther(10, 20);
414       }
415     }
417     // plr sil
418     if (winCutScenePhase == 1) {
419       if (--winCutSceneTimer == 0) {
420         winCutSceneTimer = 30;
421         winCutScenePhase = 2;
422         auto sil = MakeMapObject(240, 132, 'oPlayerSil');
423         //sil.xVel = -6;
424         //sil.yVel = -8;
425       }
426       return;
427     }
429     // treasure sil
430     if (winCutScenePhase == 2) {
431       if (--winCutSceneTimer == 0) {
432         winCutScenePhase = 3;
433         auto sil = MakeMapObject(240, 132, 'oTreasureSil');
434         //sil.xVel = -6;
435         //sil.yVel = -8;
436       }
437       return;
438     }
440     return;
441   }
443   // winning camel room
444   if (inWinCutscene == 3) {
445     //if (!player.holdItem)  writeln("SCENE 3: LOST ITEM!");
447     if (!plr.visible) plr.flty = -32;
449     // initialize
450     if (winCutScenePhase == 0) {
451       winCutSceneTimer = 50;
452       winCutScenePhase = 1;
453       return;
454     }
456     // fall sound
457     if (winCutScenePhase == 1) {
458       if (--winCutSceneTimer == 0) {
459         winCutSceneTimer = 50;
460         winCutScenePhase = 2;
461         plr.playSound('sndPFall');
462         plr.visible = true;
463         plr.active = true;
464         writeln("MUST BE CHAINED: ", plr.mustBeChained);
465         if (plr.mustBeChained) {
466           plr.removeBallAndChain(temp:true);
467           plr.spawnBallAndChain();
468         }
469         /*
470         writeln("HOLD: ", (player.holdItem ? GetClassName(player.holdItem.Class) : ''));
471         writeln("PICK: ", (player.pickedItem ? GetClassName(player.pickedItem.Class) : ''));
472         */
473         if (!player.holdItem && player.pickedItem) player.scrSwitchToPocketItem(forceIfEmpty:false);
474         if (player.holdItem) {
475           player.holdItem.visible = true;
476           player.holdItem.canLiveOutsideOfLevel = true;
477           writeln("HOLD ITEM: '", GetClassName(player.holdItem.Class), "'");
478         }
479         plr.status == MapObject::FALLING;
480         global.plife += 99; // just in case
481       }
482       return;
483     }
485     if (winCutScenePhase == 2) {
486       auto ball = plr.getMyBall();
487       if (ball && plr.holdItem != ball) {
488         ball.teleportTo(plr.fltx, plr.flty+8);
489         ball.yVel = 6;
490         ball.myGrav = 0.6;
491       }
492       if (plr.status == MapObject::STUNNED || plr.stunned) {
493         //alarm[0] = 70;
494         //alarm[1] = 50;
495         //status = GETUP;
496         auto treasure = MakeMapObject(144+16+8, -32, 'oBigTreasure');
497         if (treasure) treasure.depth = 1;
498         winCutScenePhase = 3;
499         plr.stunTimer = 30;
500         plr.playSound('sndTFall');
501       }
502       return;
503     }
505     if (winCutScenePhase == 3) {
506       if (plr.status != MapObject::STUNNED && !plr.stunned) {
507         auto bt = findBigTreasure();
508         if (bt) {
509           if (bt.yVel == 0) {
510             //plr.yVel = -4;
511             //plr.status = MapObject::JUMPING;
512             plr.kJump = true;
513             plr.kJumpPressed = true;
514             winCutScenePhase = 4;
515             winCutSceneTimer = 50;
516           }
517         }
518       }
519       return;
520     }
522     if (winCutScenePhase == 4) {
523       if (--winCutSceneTimer == 0) {
524         setMenuTilesVisible(true);
525         winCutScenePhase = 5;
526         winSceneDrawStatus = 1;
527         lastMusicName = '';
528         global.setMusicPitch(1.0);
529         global.playMusic('musVictory', loop:false);
530         winCutSceneTimer = 50;
531       }
532       return;
533     }
535     if (winCutScenePhase == 5) {
536       if (winSceneDrawStatus == 3) {
537         int money = stats.money;
538         if (winMoneyCount < money) {
539           if (money-winMoneyCount > 1000) {
540             winMoneyCount += 1000;
541           } else if (money-winMoneyCount > 100) {
542             winMoneyCount += 100;
543           } else if (money-winMoneyCount > 10) {
544             winMoneyCount += 10;
545           } else {
546             ++winMoneyCount;
547           }
548         }
549         if (winMoneyCount >= money) {
550           winMoneyCount = money;
551           ++winSceneDrawStatus;
552         }
553         return;
554       }
556       if (winSceneDrawStatus == 7) {
557         winFadeOut = true;
558         winFadeLevel += 1;
559         if (winFadeLevel >= 255) {
560           ++winSceneDrawStatus;
561           winCutSceneTimer = 30*30;
562         }
563         return;
564       }
566       if (winSceneDrawStatus == 8) {
567         if (--winCutSceneTimer == 0) {
568           setGameOver();
569         }
570         return;
571       }
573       if (--winCutSceneTimer == 0) {
574         ++winSceneDrawStatus;
575         winCutSceneTimer = 50;
576       }
577     }
579     return;
580   }
584 // ////////////////////////////////////////////////////////////////////////// //
585 void renderWinCutsceneOverlay () {
586   if (inWinCutscene == 3) {
587     if (winSceneDrawStatus > 0) {
588       Video.color = 0xff_ff_ff;
589       sprStore.loadFont('sFont'); //draw_set_font(global.myFont);
590       //draw_set_color(txtCol);
591       drawTextAt(64, 32, "YOU MADE IT!");
593       sprStore.loadFont('sFontSmall'); //draw_set_font(global.myFontSmall);
594       if (global.config.gameMode == GameConfig::GameMode.Vanilla) {
595         Video.color = 0xff_ff_00; //draw_set_color(c_yellow);
596         drawTextAt(64, 48, "Classic Mode done!");
597       } else {
598         Video.color = 0x00_80_80; //draw_set_color(c_teal);
599         if (global.config.bizarrePlus) drawTextAt(64, 48, "Bizarre Mode Plus done!");
600         else drawTextAt(64, 48, "Bizarre Mode done!");
601         //draw_set_color(c_white);
602       }
603       if (!global.usedShortcut) {
604         Video.color = 0xc0_c0_c0; //draw_set_color(c_silver);
605         drawTextAt(64, 56, "No shortcuts used!");
606         //draw_set_color(c_yellow);
607       }
608     }
610     if (winSceneDrawStatus > 1) {
611       sprStore.loadFont('sFontSmall'); //draw_set_font(global.myFontSmall);
612       //draw_set_color(txtCol);
613       Video.color = 0xff_ff_ff;
614       drawTextAt(64, 64, "FINAL SCORE:");
615     }
617     if (winSceneDrawStatus > 2) {
618       sprStore.loadFont('sFont'); //draw_set_font(global.myFont);
619       Video.color = 0xff_ff_ff; //draw_set_color(c_white);
620       drawTextAt(64, 72, va("$%d", winMoneyCount));
621     }
623     if (winSceneDrawStatus > 4) {
624       sprStore.loadFont('sFontSmall'); //draw_set_font(global.myFontSmall);
625       Video.color = 0xff_ff_ff; //draw_set_color(c_white);
626       drawTextAt(64, 96, va("Time: %s", time2str(winTime/30)));
627       /*
628       draw_set_color(c_white);
629       if (s &lt; 10) draw_text(96+24, 96, string(m) + ":0" + string(s));
630       else draw_text(96+24, 96, string(m) + ":" + string(s));
631       */
632     }
634     if (winSceneDrawStatus > 5) {
635       sprStore.loadFont('sFontSmall'); //draw_set_font(global.myFontSmall);
636       Video.color = 0xff_ff_ff; //draw_set_color(txtCol);
637       drawTextAt(64, 96+8, "Kills: ");
638       Video.color = 0xff_ff_ff; //draw_set_color(c_white);
639       drawTextAt(96+24, 96+8, va("%s", stats.countKills()));
640     }
642     if (winSceneDrawStatus > 6) {
643       sprStore.loadFont('sFontSmall'); //draw_set_font(global.myFontSmall);
644       Video.color = 0xff_ff_ff; //draw_set_color(txtCol);
645       drawTextAt(64, 96+16, "Saves: ");
646       Video.color = 0xff_ff_ff; //draw_set_color(c_white);
647       drawTextAt(96+24, 96+16, va("%s", stats.damselsSaved));
648     }
650     if (winFadeOut) {
651       Video.color = (255-clamp(winFadeLevel, 0, 255))<<24;
652       Video.fillRect(0, 0, Video.screenWidth, Video.screenHeight);
653     }
655     if (winSceneDrawStatus == 8) {
656       sprStore.loadFont('sFontSmall'); //draw_set_font(global.myFontSmall);
657       Video.color = 0xff_ff_ff; //draw_set_color(c_white);
658       string lastString;
659       if (global.config.gameMode == GameConfig::GameMode.Vanilla) {
660         Video.color = 0xff_ff_00; //draw_set_color(c_yellow);
661         lastString = "YOU SHALL BE REMEMBERED AS A HERO.";
662       } else {
663         Video.color = 0x00_ff_ff;
664         if (global.config.bizarrePlus) lastString = "ANOTHER LEGENDARY ADVENTURE!";
665         else lastString = "YOUR DISCOVERIES WILL BE CELEBRATED!";
666       }
667       auto strLen = lastString.length*8;
668       int n = 320-strLen;
669       n = trunc(ceil(n/2.0));
670       drawTextAt(n, 116, lastString);
671     }
672   }
676 // ////////////////////////////////////////////////////////////////////////// //
677 void createEnd1Room () {
678   setRoomBounds(0, 0, 624, 240-16);
680   //MakeMapTile(0, 0, 'oEnd');
681   //MakeMapTile(0, 1, 'oGame');
683   MakeMapTile(0, 0, 'oTemple');
684   MakeMapTile(1, 0, 'oTemple');
685   MakeMapTile(2, 0, 'oTemple');
686   MakeMapTile(3, 0, 'oTemple');
687   MakeMapTile(4, 0, 'oTemple');
688   MakeMapTile(5, 0, 'oTemple');
689   MakeMapTile(6, 0, 'oTemple');
690   MakeMapTile(7, 0, 'oTemple');
691   MakeMapTile(8, 0, 'oTemple');
692   MakeMapTile(9, 0, 'oTemple');
693   MakeMapTile(10, 0, 'oTemple');
694   MakeMapTile(11, 0, 'oTemple');
695   MakeMapTile(12, 0, 'oTemple');
696   MakeMapTile(13, 0, 'oTemple');
697   MakeMapTile(14, 0, 'oTemple');
698   MakeMapTile(15, 0, 'oTemple');
699   MakeMapTile(16, 0, 'oTemple');
700   MakeMapTile(17, 0, 'oTemple');
701   MakeMapTile(18, 0, 'oTemple');
702   MakeMapTile(19, 0, 'oBrick');
703   MakeMapTile(20, 0, 'oBrick');
704   MakeMapTile(21, 0, 'oBrick');
705   MakeMapTile(22, 0, 'oBrick');
706   MakeMapTile(23, 0, 'oBrick');
707   MakeMapTile(24, 0, 'oBrick');
708   MakeMapTile(25, 0, 'oBrick');
709   MakeMapTile(26, 0, 'oBrick');
710   MakeMapTile(32, 0, 'oBrick');
711   MakeMapTile(33, 0, 'oBrick');
712   MakeMapTile(34, 0, 'oBrick');
713   MakeMapTile(35, 0, 'oBrick');
714   MakeMapTile(36, 0, 'oBrick');
715   MakeMapTile(37, 0, 'oBrick');
716   MakeMapTile(38, 0, 'oBrick');
717   MakeMapTile(39, 0, 'oBrick');
718   MakeMapTile(0, 1, 'oTemple');
719   MakeMapTile(1, 1, 'oTemple');
720   MakeMapTile(2, 1, 'oTemple');
721   MakeMapTile(3, 1, 'oTemple');
722   MakeMapTile(4, 1, 'oTemple');
723   MakeMapTile(5, 1, 'oTemple');
724   MakeMapTile(6, 1, 'oTemple');
725   MakeMapTile(7, 1, 'oTemple');
726   MakeMapTile(8, 1, 'oTemple');
727   MakeMapTile(9, 1, 'oTemple');
728   MakeMapTile(10, 1, 'oTemple');
729   MakeMapTile(11, 1, 'oTemple');
730   MakeMapTile(12, 1, 'oTemple');
731   MakeMapTile(13, 1, 'oTemple');
732   MakeMapTile(14, 1, 'oTemple');
733   MakeMapTile(15, 1, 'oTemple');
734   MakeMapTile(16, 1, 'oTemple');
735   MakeMapTile(17, 1, 'oTemple');
736   MakeMapTile(18, 1, 'oTemple');
737   MakeMapTile(19, 1, 'oBrick');
738   MakeMapTile(20, 1, 'oBrick');
739   MakeMapTile(21, 1, 'oBrick');
740   MakeMapTile(22, 1, 'oBrick');
741   MakeMapTile(36, 1, 'oBrick');
742   MakeMapTile(37, 1, 'oBrick');
743   MakeMapTile(38, 1, 'oBrick');
744   MakeMapTile(39, 1, 'oBrick');
745   MakeMapTile(0, 2, 'oTemple');
746   MakeMapTile(1, 2, 'oTemple');
747   MakeMapTile(2, 2, 'oTemple');
748   MakeMapTile(3, 2, 'oTemple');
749   MakeMapTile(4, 2, 'oTemple');
750   MakeMapTile(5, 2, 'oTemple');
751   MakeMapTile(6, 2, 'oTemple');
752   MakeMapTile(7, 2, 'oTemple');
753   MakeMapTile(8, 2, 'oTemple');
754   MakeMapTile(9, 2, 'oTemple');
755   MakeMapTile(10, 2, 'oTemple');
756   MakeMapTile(11, 2, 'oTemple');
757   MakeMapTile(12, 2, 'oTemple');
758   MakeMapTile(13, 2, 'oTemple');
759   MakeMapTile(14, 2, 'oTemple');
760   MakeMapTile(15, 2, 'oTemple');
761   MakeMapTile(16, 2, 'oTemple');
762   MakeMapTile(17, 2, 'oTemple');
763   MakeMapTile(18, 2, 'oTemple');
764   MakeMapTile(19, 2, 'oBrick');
765   MakeMapTile(20, 2, 'oBrick');
766   MakeMapTile(37, 2, 'oBrick');
767   MakeMapTile(38, 2, 'oBrick');
768   MakeMapTile(39, 2, 'oBrick');
769   MakeMapTile(0, 3, 'oTemple');
770   MakeMapTile(1, 3, 'oTemple');
771   MakeMapTile(2, 3, 'oTemple');
772   MakeMapTile(3, 3, 'oTemple');
773   MakeMapTile(4, 3, 'oTemple');
774   MakeMapTile(5, 3, 'oTemple');
775   MakeMapTile(6, 3, 'oTemple');
776   MakeMapTile(7, 3, 'oTemple');
777   MakeMapTile(8, 3, 'oTemple');
778   MakeMapTile(9, 3, 'oTemple');
779   MakeMapTile(10, 3, 'oTemple');
780   MakeMapTile(11, 3, 'oTemple');
781   MakeMapTile(12, 3, 'oTemple');
782   MakeMapTile(13, 3, 'oTemple');
783   MakeMapTile(14, 3, 'oTemple');
784   MakeMapTile(15, 3, 'oBrick');
785   MakeMapTile(16, 3, 'oBrick');
786   MakeMapTile(17, 3, 'oTemple');
787   MakeMapTile(18, 3, 'oTemple');
788   MakeMapTile(19, 3, 'oBrick');
789   MakeMapTile(20, 3, 'oBrick');
790   MakeMapTile(24, 3, 'oEndWall');
791   MakeMapTile(38, 3, 'oBrick');
792   MakeMapTile(39, 3, 'oBrick');
793   MakeMapTile(0, 4, 'oTemple');
794   MakeMapTile(1, 4, 'oTemple');
795   MakeMapTile(2, 4, 'oTemple');
796   MakeMapTile(3, 4, 'oTemple');
797   MakeMapTile(4, 4, 'oTemple');
798   MakeMapTile(5, 4, 'oTemple');
799   MakeMapTile(6, 4, 'oTemple');
800   MakeMapTile(7, 4, 'oTemple');
801   MakeMapTile(8, 4, 'oTemple');
802   MakeMapTile(9, 4, 'oTemple');
803   MakeMapTile(10, 4, 'oTemple');
804   MakeMapTile(11, 4, 'oTemple');
805   MakeMapTile(12, 4, 'oTemple');
806   MakeMapTile(13, 4, 'oTemple');
807   MakeMapTile(14, 4, 'oTemple');
808   MakeMapTile(15, 4, 'oBrick');
809   MakeMapTile(16, 4, 'oBrick');
810   MakeMapTile(17, 4, 'oTemple');
811   MakeMapTile(18, 4, 'oTemple');
812   MakeMapTile(19, 4, 'oBrick');
813   MakeMapTile(38, 4, 'oBrick');
814   MakeMapTile(39, 4, 'oBrick');
815   MakeMapTile(0, 5, 'oTemple');
816   MakeMapTile(1, 5, 'oTemple');
817   MakeMapTile(2, 5, 'oTemple');
818   MakeMapTile(3, 5, 'oTemple');
819   MakeMapTile(4, 5, 'oTemple');
820   MakeMapTile(5, 5, 'oTemple');
821   MakeMapTile(6, 5, 'oTemple');
822   MakeMapTile(7, 5, 'oTemple');
823   MakeMapTile(8, 5, 'oTemple');
824   MakeMapTile(9, 5, 'oTemple');
825   MakeMapTile(10, 5, 'oTemple');
826   MakeMapTile(11, 5, 'oTemple');
827   MakeMapTile(12, 5, 'oTemple');
828   MakeMapTile(13, 5, 'oTemple');
829   MakeMapTile(14, 5, 'oTemple');
830   MakeMapTile(15, 5, 'oTemple');
831   MakeMapTile(16, 5, 'oTemple');
832   MakeMapTile(17, 5, 'oTemple');
833   MakeMapTile(18, 5, 'oTemple');
834   MakeMapTile(19, 5, 'oBrick');
835   MakeMapTile(38, 5, 'oBrick');
836   MakeMapTile(39, 5, 'oBrick');
837   MakeMapTile(0, 6, 'oTemple');
838   MakeMapTile(1, 6, 'oTemple');
839   MakeMapTile(2, 6, 'oTemple');
840   MakeMapTile(3, 6, 'oTemple');
841   MakeMapTile(4, 6, 'oTemple');
842   MakeMapTile(5, 6, 'oTemple');
843   MakeMapTile(6, 6, 'oTemple');
844   MakeMapTile(7, 6, 'oTemple');
845   MakeMapTile(8, 6, 'oTemple');
846   MakeMapTile(9, 6, 'oTemple');
847   MakeMapTile(10, 6, 'oTemple');
848   MakeMapTile(11, 6, 'oTemple');
849   MakeMapTile(12, 6, 'oTemple');
850   MakeMapTile(13, 6, 'oTemple');
851   MakeMapTile(14, 6, 'oTemple');
852   MakeMapTile(15, 6, 'oTemple');
853   MakeMapTile(16, 6, 'oTemple');
854   MakeMapTile(17, 6, 'oTemple');
855   MakeMapTile(18, 6, 'oBrick');
856   MakeMapTile(19, 6, 'oBrick');
857   MakeMapTile(38, 6, 'oBrick');
858   MakeMapTile(39, 6, 'oBrick');
859   MakeMapTile(0, 7, 'oTemple');
860   MakeMapTile(1, 7, 'oTemple');
861   MakeMapTile(2, 7, 'oTemple');
862   MakeMapTile(3, 7, 'oTemple');
863   MakeMapTile(4, 7, 'oTemple');
864   MakeMapTile(5, 7, 'oTemple');
865   MakeMapTile(6, 7, 'oTemple');
866   MakeMapTile(7, 7, 'oTemple');
867   MakeMapTile(8, 7, 'oTemple');
868   MakeMapTile(9, 7, 'oTemple');
869   MakeMapTile(10, 7, 'oTemple');
870   MakeMapTile(11, 7, 'oTemple');
871   MakeMapTile(12, 7, 'oTemple');
872   MakeMapTile(13, 7, 'oTemple');
873   MakeMapTile(14, 7, 'oTemple');
874   MakeMapTile(15, 7, 'oTemple');
875   MakeMapTile(16, 7, 'oTemple');
876   MakeMapTile(17, 7, 'oTemple');
877   MakeMapTile(18, 7, 'oBrick');
878   MakeMapTile(19, 7, 'oBrick');
879   MakeMapTile(38, 7, 'oBrick');
880   MakeMapTile(39, 7, 'oBrick');
881   MakeMapTile(0, 8, 'oTemple');
882   MakeMapTile(1, 8, 'oTemple');
883   MakeMapTile(2, 8, 'oTemple');
884   MakeMapTile(3, 8, 'oTemple');
885   MakeMapTile(4, 8, 'oTemple');
886   MakeMapTile(5, 8, 'oTemple');
887   MakeMapTile(6, 8, 'oTemple');
888   MakeMapTile(7, 8, 'oTemple');
889   MakeMapTile(8, 8, 'oTemple');
890   MakeMapTile(9, 8, 'oTemple');
891   MakeMapTile(10, 8, 'oTemple');
892   MakeMapTile(11, 8, 'oTemple');
893   MakeMapTile(12, 8, 'oTemple');
894   MakeMapTile(13, 8, 'oTemple');
895   MakeMapTile(14, 8, 'oBrick');
896   MakeMapTile(15, 8, 'oBrick');
897   MakeMapTile(16, 8, 'oTemple');
898   MakeMapTile(17, 8, 'oTemple');
899   MakeMapTile(18, 8, 'oBrick');
900   MakeMapTile(38, 8, 'oBrick');
901   MakeMapTile(39, 8, 'oBrick');
902   MakeMapTile(0, 9, 'oTemple');
903   MakeMapTile(1, 9, 'oTemple');
904   MakeMapTile(38, 9, 'oBrick');
905   MakeMapTile(39, 9, 'oBrick');
906   MakeMapTile(0, 10, 'oTemple');
907   MakeMapTile(1, 10, 'oTemple');
908   MakeMapTile(36, 10, 'oBrick');
909   MakeMapTile(37, 10, 'oBrick');
910   MakeMapTile(38, 10, 'oBrick');
911   MakeMapTile(39, 10, 'oBrick');
912   MakeMapTile(0, 11, 'oTemple');
913   MakeMapTile(1, 11, 'oTemple');
914   MakeMapTile(2, 11, 'oEntrance');
915   MakeMapTile(36, 11, 'oBrick');
916   MakeMapTile(37, 11, 'oBrick');
917   MakeMapTile(38, 11, 'oBrick');
918   MakeMapTile(39, 11, 'oBrick');
919   MakeMapTile(0, 12, 'oTemple');
920   MakeMapTile(1, 12, 'oTemple');
921   MakeMapTile(2, 12, 'oTemple');
922   MakeMapTile(3, 12, 'oTemple');
923   MakeMapTile(4, 12, 'oTemple');
924   MakeMapTile(5, 12, 'oTemple');
925   MakeMapTile(6, 12, 'oTemple');
926   MakeMapTile(7, 12, 'oTemple');
927   MakeMapTile(8, 12, 'oTemple');
928   MakeMapTile(9, 12, 'oTemple');
929   MakeMapTile(10, 12, 'oTemple');
930   MakeMapTile(11, 12, 'oTemple');
931   MakeMapTile(12, 12, 'oTemple');
932   MakeMapTile(13, 12, 'oTemple');
933   MakeMapTile(14, 12, 'oTemple');
934   MakeMapTile(15, 12, 'oTemple');
935   MakeMapTile(16, 12, 'oTemple');
936   MakeMapTile(17, 12, 'oBrick');
937   MakeMapTile(18, 12, 'oBrick');
938   MakeMapTile(19, 12, 'oBrick');
939   MakeMapTile(20, 12, 'oBrick');
940   MakeMapTile(21, 12, 'oBrick');
941   MakeMapTile(22, 12, 'oBrick');
942   MakeMapTile(23, 12, 'oBrick');
943   MakeMapTile(24, 12, 'oBrick');
944   MakeMapTile(25, 12, 'oBrick');
945   MakeMapTile(26, 12, 'oBrick');
946   MakeMapTile(27, 12, 'oEndPlat');
947   MakeMapTile(32, 12, 'oBrick');
948   MakeMapTile(33, 12, 'oBrick');
949   MakeMapTile(34, 12, 'oBrick');
950   MakeMapTile(35, 12, 'oBrick');
951   MakeMapTile(36, 12, 'oBrick');
952   MakeMapTile(37, 12, 'oBrick');
953   MakeMapTile(38, 12, 'oBrick');
954   MakeMapTile(39, 12, 'oBrick');
955   MakeMapTile(0, 13, 'oTemple');
956   MakeMapTile(1, 13, 'oTemple');
957   MakeMapTile(38, 13, 'oBrick');
958   MakeMapTile(39, 13, 'oBrick');
959   MakeMapTile(0, 14, 'oTemple');
960   MakeMapTile(1, 14, 'oTemple');
961   MakeMapTile(2, 14, 'oLava');
962   MakeMapTile(3, 14, 'oLava');
963   MakeMapTile(4, 14, 'oLava');
964   MakeMapTile(5, 14, 'oLava');
965   MakeMapTile(6, 14, 'oLava');
966   MakeMapTile(7, 14, 'oLava');
967   MakeMapTile(8, 14, 'oLava');
968   MakeMapTile(9, 14, 'oLava');
969   MakeMapTile(10, 14, 'oLava');
970   MakeMapTile(11, 14, 'oLava');
971   MakeMapTile(12, 14, 'oLava');
972   MakeMapTile(13, 14, 'oLava');
973   MakeMapTile(14, 14, 'oLava');
974   MakeMapTile(15, 14, 'oLava');
975   MakeMapTile(16, 14, 'oLava');
976   MakeMapTile(17, 14, 'oLava');
977   MakeMapTile(18, 14, 'oLava');
978   MakeMapTile(19, 14, 'oLava');
979   MakeMapTile(20, 14, 'oLava');
980   MakeMapTile(21, 14, 'oLava');
981   MakeMapTile(22, 14, 'oLava');
982   MakeMapTile(23, 14, 'oLava');
983   MakeMapTile(24, 14, 'oLava');
984   MakeMapTile(25, 14, 'oLava');
985   MakeMapTile(26, 14, 'oLava');
986   MakeMapTile(27, 14, 'oLava');
987   MakeMapTile(28, 14, 'oLava');
988   MakeMapTile(29, 14, 'oLava');
989   MakeMapTile(30, 14, 'oLava');
990   MakeMapTile(31, 14, 'oLava');
991   MakeMapTile(32, 14, 'oLava');
992   MakeMapTile(33, 14, 'oLava');
993   MakeMapTile(34, 14, 'oLava');
994   MakeMapTile(35, 14, 'oLava');
995   MakeMapTile(36, 14, 'oLava');
996   MakeMapTile(37, 14, 'oLava');
997   MakeMapTile(38, 14, 'oBrick');
998   MakeMapTile(39, 14, 'oBrick');
999   MakeMapTile(0, 15, 'oTemple');
1000   MakeMapTile(1, 15, 'oTemple');
1001   MakeMapTile(2, 15, 'oLavaSolid');
1002   MakeMapTile(3, 15, 'oLavaSolid');
1003   MakeMapTile(4, 15, 'oLavaSolid');
1004   MakeMapTile(5, 15, 'oLavaSolid');
1005   MakeMapTile(6, 15, 'oLavaSolid');
1006   MakeMapTile(7, 15, 'oLavaSolid');
1007   MakeMapTile(8, 15, 'oLavaSolid');
1008   MakeMapTile(9, 15, 'oLavaSolid');
1009   MakeMapTile(10, 15, 'oLavaSolid');
1010   MakeMapTile(11, 15, 'oLavaSolid');
1011   MakeMapTile(12, 15, 'oLavaSolid');
1012   MakeMapTile(13, 15, 'oLavaSolid');
1013   MakeMapTile(14, 15, 'oLavaSolid');
1014   MakeMapTile(15, 15, 'oLavaSolid');
1015   MakeMapTile(16, 15, 'oLavaSolid');
1016   MakeMapTile(17, 15, 'oLavaSolid');
1017   MakeMapTile(18, 15, 'oLavaSolid');
1018   MakeMapTile(19, 15, 'oLavaSolid');
1019   MakeMapTile(20, 15, 'oLavaSolid');
1020   MakeMapTile(21, 15, 'oLavaSolid');
1021   MakeMapTile(22, 15, 'oLavaSolid');
1022   MakeMapTile(23, 15, 'oLavaSolid');
1023   MakeMapTile(24, 15, 'oLavaSolid');
1024   MakeMapTile(25, 15, 'oLavaSolid');
1025   MakeMapTile(26, 15, 'oLavaSolid');
1026   MakeMapTile(27, 15, 'oLavaSolid');
1027   MakeMapTile(28, 15, 'oLavaSolid');
1028   MakeMapTile(29, 15, 'oLavaSolid');
1029   MakeMapTile(30, 15, 'oLavaSolid');
1030   MakeMapTile(31, 15, 'oLavaSolid');
1031   MakeMapTile(32, 15, 'oLavaSolid');
1032   MakeMapTile(33, 15, 'oLavaSolid');
1033   MakeMapTile(34, 15, 'oLavaSolid');
1034   MakeMapTile(35, 15, 'oLavaSolid');
1035   MakeMapTile(36, 15, 'oLavaSolid');
1036   MakeMapTile(37, 15, 'oLavaSolid');
1037   MakeMapTile(38, 15, 'oBrick');
1038   MakeMapTile(39, 15, 'oBrick');
1040   MakeMapObject(33*16, 9*16, 'oBigChest');
1042   fixLiquidTop();
1044   //MakeMapTileAtPix(24, 424, 'oPlayer1');
1045   //MakeMapTileAtPix(40, 184, 'oPDummy');
1046   spawnPlayerAt(2*16+8, 11*16+8);
1047   player.dir = MapEntity::Dir.Right;
1051 void createEnd3Room () {
1052   setRoomBounds(0, 0, 304, 224);
1054   //MakeMapTile(0, 0, 'oEnd3');
1055   MakeMapTile(0, 0, 'oEnd2BG');
1057   MakeMapTile(3, 1, 'oMenuUL');
1058   MakeMapTile(4, 1, 'oMenuTop');
1059   MakeMapTile(5, 1, 'oMenuTop');
1060   MakeMapTile(6, 1, 'oMenuTop');
1061   MakeMapTile(7, 1, 'oMenuTop');
1062   MakeMapTile(8, 1, 'oMenuTop');
1063   MakeMapTile(9, 1, 'oMenuTop');
1064   MakeMapTile(10, 1, 'oMenuTop');
1065   MakeMapTile(11, 1, 'oMenuTop');
1066   MakeMapTile(12, 1, 'oMenuTop');
1067   MakeMapTile(13, 1, 'oMenuTop');
1068   MakeMapTile(14, 1, 'oMenuTop');
1069   MakeMapTile(15, 1, 'oMenuTop');
1070   MakeMapTile(16, 1, 'oMenuUR');
1071   MakeMapTile(3, 2, 'oMenuLeft');
1072   MakeMapTile(4, 2, 'oBlack');
1073   MakeMapTile(5, 2, 'oBlack');
1074   MakeMapTile(6, 2, 'oBlack');
1075   MakeMapTile(7, 2, 'oBlack');
1076   MakeMapTile(8, 2, 'oBlack');
1077   MakeMapTile(9, 2, 'oBlack');
1078   MakeMapTile(10, 2, 'oBlack');
1079   MakeMapTile(11, 2, 'oBlack');
1080   MakeMapTile(12, 2, 'oBlack');
1081   MakeMapTile(13, 2, 'oBlack');
1082   MakeMapTile(14, 2, 'oBlack');
1083   MakeMapTile(15, 2, 'oBlack');
1084   MakeMapTile(16, 2, 'oMenuRight');
1085   MakeMapTile(3, 3, 'oMenuLeft');
1086   MakeMapTile(4, 3, 'oBlack');
1087   MakeMapTile(5, 3, 'oBlack');
1088   MakeMapTile(6, 3, 'oBlack');
1089   MakeMapTile(7, 3, 'oBlack');
1090   MakeMapTile(8, 3, 'oBlack');
1091   MakeMapTile(9, 3, 'oBlack');
1092   MakeMapTile(10, 3, 'oBlack');
1093   MakeMapTile(11, 3, 'oBlack');
1094   MakeMapTile(12, 3, 'oBlack');
1095   MakeMapTile(13, 3, 'oBlack');
1096   MakeMapTile(14, 3, 'oBlack');
1097   MakeMapTile(15, 3, 'oBlack');
1098   MakeMapTile(16, 3, 'oMenuRight');
1099   MakeMapTile(0, 4, 'oPalmTree');
1100   MakeMapTile(3, 4, 'oMenuLeft');
1101   MakeMapTile(4, 4, 'oBlack');
1102   MakeMapTile(5, 4, 'oBlack');
1103   MakeMapTile(6, 4, 'oBlack');
1104   MakeMapTile(7, 4, 'oBlack');
1105   MakeMapTile(8, 4, 'oBlack');
1106   MakeMapTile(9, 4, 'oBlack');
1107   MakeMapTile(10, 4, 'oBlack');
1108   MakeMapTile(11, 4, 'oBlack');
1109   MakeMapTile(12, 4, 'oBlack');
1110   MakeMapTile(13, 4, 'oBlack');
1111   MakeMapTile(14, 4, 'oBlack');
1112   MakeMapTile(15, 4, 'oBlack');
1113   MakeMapTile(16, 4, 'oMenuRight');
1114   MakeMapTile(17, 4, 'oPalmTree');
1115   MakeMapTile(3, 5, 'oMenuLeft');
1116   MakeMapTile(4, 5, 'oBlack');
1117   MakeMapTile(5, 5, 'oBlack');
1118   MakeMapTile(6, 5, 'oBlack');
1119   MakeMapTile(7, 5, 'oBlack');
1120   MakeMapTile(8, 5, 'oBlack');
1121   MakeMapTile(9, 5, 'oBlack');
1122   MakeMapTile(10, 5, 'oBlack');
1123   MakeMapTile(11, 5, 'oBlack');
1124   MakeMapTile(12, 5, 'oBlack');
1125   MakeMapTile(13, 5, 'oBlack');
1126   MakeMapTile(14, 5, 'oBlack');
1127   MakeMapTile(15, 5, 'oBlack');
1128   MakeMapTile(16, 5, 'oMenuRight');
1129   MakeMapTile(3, 6, 'oMenuLeft');
1130   MakeMapTile(4, 6, 'oBlack');
1131   MakeMapTile(5, 6, 'oBlack');
1132   MakeMapTile(6, 6, 'oBlack');
1133   MakeMapTile(7, 6, 'oBlack');
1134   MakeMapTile(8, 6, 'oBlack');
1135   MakeMapTile(9, 6, 'oBlack');
1136   MakeMapTile(10, 6, 'oBlack');
1137   MakeMapTile(11, 6, 'oBlack');
1138   MakeMapTile(12, 6, 'oBlack');
1139   MakeMapTile(13, 6, 'oBlack');
1140   MakeMapTile(14, 6, 'oBlack');
1141   MakeMapTile(15, 6, 'oBlack');
1142   MakeMapTile(16, 6, 'oMenuRight');
1143   MakeMapTile(0, 7, 'oBGEnd3');
1144   MakeMapTile(3, 7, 'oMenuLeft');
1145   MakeMapTile(4, 7, 'oBlack');
1146   MakeMapTile(5, 7, 'oBlack');
1147   MakeMapTile(6, 7, 'oBlack');
1148   MakeMapTile(7, 7, 'oBlack');
1149   MakeMapTile(8, 7, 'oBlack');
1150   MakeMapTile(9, 7, 'oBlack');
1151   MakeMapTile(10, 7, 'oBlack');
1152   MakeMapTile(11, 7, 'oBlack');
1153   MakeMapTile(12, 7, 'oBlack');
1154   MakeMapTile(13, 7, 'oBlack');
1155   MakeMapTile(14, 7, 'oBlack');
1156   MakeMapTile(15, 7, 'oBlack');
1157   MakeMapTile(16, 7, 'oMenuRight');
1158   MakeMapTile(3, 8, 'oMenuLL');
1159   MakeMapTile(4, 8, 'oMenuBottom');
1160   MakeMapTile(5, 8, 'oMenuBottom');
1161   MakeMapTile(6, 8, 'oMenuBottom');
1162   MakeMapTile(7, 8, 'oMenuBottom');
1163   MakeMapTile(8, 8, 'oMenuBottom');
1164   MakeMapTile(9, 8, 'oMenuBottom');
1165   MakeMapTile(10, 8, 'oMenuBottom');
1166   MakeMapTile(11, 8, 'oMenuBottom');
1167   MakeMapTile(12, 8, 'oMenuBottom');
1168   MakeMapTile(13, 8, 'oMenuBottom');
1169   MakeMapTile(14, 8, 'oMenuBottom');
1170   MakeMapTile(15, 8, 'oMenuBottom');
1171   MakeMapTile(16, 8, 'oMenuLR');
1172   MakeMapTile(0, 11, 'oDesertTop');
1173   MakeMapTile(1, 11, 'oDesertTop');
1174   MakeMapTile(2, 11, 'oDesertTop');
1175   MakeMapTile(3, 11, 'oDesertTop');
1176   MakeMapTile(3, 11, 'oDesertTop');
1177   MakeMapTile(3, 11, 'oShrub');
1178   MakeMapTile(4, 11, 'oDesertTop');
1179   MakeMapTile(5, 11, 'oDesertTop');
1180   MakeMapTile(6, 11, 'oDesertTop');
1181   MakeMapTile(7, 11, 'oDesertTop');
1182   MakeMapTile(8, 11, 'oDesertTop');
1183   MakeMapTile(9, 11, 'oDesertTop');
1184   MakeMapTile(10, 11, 'oDesertTop');
1185   MakeMapTile(11, 11, 'oDesertTop');
1186   MakeMapTile(12, 11, 'oDesertTop');
1187   MakeMapTile(13, 11, 'oDesertTop');
1188   MakeMapTile(14, 11, 'oDesertTop');
1189   MakeMapTile(15, 11, 'oDesertTop');
1190   MakeMapTile(15, 11, 'oShrub');
1191   MakeMapTile(16, 11, 'oDesertTop');
1192   MakeMapTile(17, 11, 'oDesertTop');
1193   MakeMapTile(17, 11, 'oShrub');
1194   MakeMapTile(18, 11, 'oDesertTop');
1195   MakeMapTile(19, 11, 'oDesertTop');
1196   MakeMapTile(0, 12, 'oDesert2');
1197   MakeMapTile(1, 12, 'oDesert2');
1198   MakeMapTile(2, 12, 'oDesert2');
1199   MakeMapTile(3, 12, 'oDesert2');
1200   MakeMapTile(4, 12, 'oDesert2');
1201   MakeMapTile(5, 12, 'oDesert2');
1202   MakeMapTile(6, 12, 'oDesert2');
1203   MakeMapTile(7, 12, 'oDesert2');
1204   MakeMapTile(8, 12, 'oDesert2');
1205   MakeMapTile(9, 12, 'oDesert2');
1206   MakeMapTile(10, 12, 'oDesert2');
1207   MakeMapTile(11, 12, 'oDesert2');
1208   MakeMapTile(12, 12, 'oDesert2');
1209   MakeMapTile(13, 12, 'oDesert2');
1210   MakeMapTile(14, 12, 'oDesert2');
1211   MakeMapTile(15, 12, 'oDesert2');
1212   MakeMapTile(16, 12, 'oDesert2');
1213   MakeMapTile(17, 12, 'oDesert2');
1214   MakeMapTile(18, 12, 'oDesert2');
1215   MakeMapTile(19, 12, 'oDesert2');
1216   MakeMapTile(0, 13, 'oDesert');
1217   MakeMapTile(1, 13, 'oDesert');
1218   MakeMapTile(2, 13, 'oDesert');
1219   MakeMapTile(3, 13, 'oDesert');
1220   MakeMapTile(4, 13, 'oDesert');
1221   MakeMapTile(5, 13, 'oDesert');
1222   MakeMapTile(6, 13, 'oDesert');
1223   MakeMapTile(7, 13, 'oDesert');
1224   MakeMapTile(8, 13, 'oDesert');
1225   MakeMapTile(9, 13, 'oDesert');
1226   MakeMapTile(10, 13, 'oDesert');
1227   MakeMapTile(11, 13, 'oDesert');
1228   MakeMapTile(12, 13, 'oDesert');
1229   MakeMapTile(13, 13, 'oDesert');
1230   MakeMapTile(14, 13, 'oDesert');
1231   MakeMapTile(15, 13, 'oDesert');
1232   MakeMapTile(16, 13, 'oDesert');
1233   MakeMapTile(17, 13, 'oDesert');
1234   MakeMapTile(18, 13, 'oDesert');
1235   MakeMapTile(19, 13, 'oDesert');
1236   MakeMapTile(0, 14, 'oDesert');
1237   MakeMapTile(1, 14, 'oDesert');
1238   MakeMapTile(2, 14, 'oDesert');
1239   MakeMapTile(3, 14, 'oDesert');
1240   MakeMapTile(4, 14, 'oDesert');
1241   MakeMapTile(5, 14, 'oDesert');
1242   MakeMapTile(6, 14, 'oDesert');
1243   MakeMapTile(7, 14, 'oDesert');
1244   MakeMapTile(8, 14, 'oDesert');
1245   MakeMapTile(9, 14, 'oDesert');
1246   MakeMapTile(10, 14, 'oDesert');
1247   MakeMapTile(11, 14, 'oDesert');
1248   MakeMapTile(12, 14, 'oDesert');
1249   MakeMapTile(13, 14, 'oDesert');
1250   MakeMapTile(14, 14, 'oDesert');
1251   MakeMapTile(15, 14, 'oDesert');
1252   MakeMapTile(16, 14, 'oDesert');
1253   MakeMapTile(17, 14, 'oDesert');
1254   MakeMapTile(18, 14, 'oDesert');
1255   MakeMapTile(19, 14, 'oDesert');
1257   //spawnPlayerAt(2*16+8, 11*16+8);
1258   spawnPlayerAt(144, -32);
1259   player.dir = MapEntity::Dir.Right;