public GameWorld load(int levelX, int levelY) { if (levelX == 3 && levelY == 11) { shooter.setScreen(new WinScreen(shooter)); return null; } currentLevelX = levelX; currentLevelY = levelY; world = new GameWorld(shooter); bool addPlayer = false; for (int y = 0; y < 24; y++) { for (int x = 0; x < 32; x++) { uint p = map[(levelY * 24 + y - levelY) * imageWidth + levelX * 32 + x - levelX]; switch (p) { case 0xFFFFFFFF: world.add(new Block(world, x, y)); break; case 0xFF00FFFF: world.add(new MovableBlock(world, x, y)); break; case 0xFFFF00FF: world.add(new TNT(world, x, y)); break; case 0xFF0000FF: world.add(new Spikes(world, x, y, map[(levelY * 24 + y - levelY + 1) * imageWidth + levelX * 32 + x - levelX] == 0x000000FF)); break; case 0xB7B7B7FF: world.add(new TransparentBlock(world, x, y)); break; case 0xFF5050FF: world.add(new ConveyorBelt(world, x, y, true)); break; case 0xFF5051FF: world.add(new ConveyorBelt(world, x, y, false)); break; case 0x383838FF: world.add(new Door(world, x, y)); break; case 0xA3FFFFFF: world.add(new ExplodingBlock(world, x, y)); break; case 0x83FFFFFF: world.add(new Boss(world, x, y)); break; case 0x80FFFFFF: world.add(new Gremlin(world, x, y, 0)); break; case 0x81FFFFFF: world.add(new Gremlin(world, x, y, 1)); break; case 0x82FFFFFF: world.add(new Jabberwocky(world, x, y)); break; case 0xFFADF8FF: if (hats[currentLevelX,currentLevelY]) break; world.add(new Hat(world, x * 20, y * 20, true)); break; case 0x0000FFFF: if (player != null) { player.setRespawn(x, y-1, player.IsFacingRight, player.HatLevel); continue; } player = new Player(world, x, y-1); addPlayer = true; break; case 0x00FFFFFF: world.add(new Enemy(world, player, x*20 + 10, y*20 + 8, -1, 1)); break; default: if ((p & 0x00FFFFFF) == 0x00FF00FF && (p & 0xFF0000FF) > 256) { world.add(new Sign(world, x, y, (p >> 24) & 0xFF)); } break; } } } if(addPlayer && player != null) world.add(player); return world; }