// For testing, skip ahead to the next restore point. public void skip_ahead() { String next_point = Integer.toString(Integer.parseInt(saved_restore_point) + 1); if (!world.airbubble_restore_points.containsKey(next_point)) { next_point = "0"; } RestorePoint restore_point = world.airbubble_restore_points.get(next_point); saved_restore_point = next_point; player.x = restore_point.x; player.y = restore_point.y; }
private void kill_player() { // The player has drowned; move them back to the last restore point RestorePoint restore_point = world.airbubble_restore_points.get(saved_restore_point); player.x = restore_point.x; player.y = restore_point.y; player.velocity.x = player.velocity.y = 0; // Re-set the 'death' timer which holds the blackout & countdown // for a couple seconds. player_dead = true; player_death_timer = player_death_length; // Complete blackout oxygen_timer_display.setText("0"); darkness.setAlpha(1.0f); oxygen_timer_display.setAlpha(1.0f); // Play sound effect FlxG.play(RevNoiseSound); }
@Override public void tick(Graphics2D g, Input p1, Input p2, Sound s) { // Menu if (gameState == 0) { // Song sound.loadSound("Resources/Sounds/Menu.wav"); sound.runLoop(); // background g.setColor(Color.BLACK); g.fillRect(0, 0, WIDTH, HEIGHT); // title g.setColor(Color.GREEN); g.setFont(new Font("Arial", Font.BOLD, 100)); centerText("DARKLIGHT 2", g, WIDTH / 2, 180); // selection g.setColor(Color.RED); if (gameState == 0) { // Song sound.loadSound("Resources/Sounds/Menu.wav"); sound.runLoop(); // background g.setColor(Color.BLACK); g.fillRect(0, 0, WIDTH, HEIGHT); // title g.setColor(Color.GREEN); g.setFont(new Font("Arial", Font.BOLD, 100)); centerText("DARKLIGHT 2", g, WIDTH / 2, 180); // selection g.setColor(Color.RED); if (button == 0) { // PLAY g.fillRect(WIDTH / 2 - 160, 240, 320, 90); if (justPressed(p1, Button.U)) { button = 2; } if (justPressed(p1, Button.D)) { button = 1; } if (justPressed(p1, Button.A) || justPressed(p1, Button.B) || justPressed(p1, Button.C)) { inv[0] = wep1; gameState = 1; sound.reset(); sound.stop(); } } else if (button == 1) { // LEADERBOARDS g.fillRect(WIDTH / 2 - 160, 340, 320, 90); if (justPressed(p1, Button.U)) { button = 0; } if (justPressed(p1, Button.D)) { button = 2; } if (justPressed(p1, Button.A) || justPressed(p1, Button.B) || justPressed(p1, Button.C)) { gameState = 5; } } else { // EXIT g.fillRect(WIDTH / 2 - 160, 440, 320, 90); if (justPressed(p1, Button.U)) { button = 1; } if (justPressed(p1, Button.D)) { button = 0; } if (justPressed(p1, Button.A) || justPressed(p1, Button.B) || justPressed(p1, Button.C)) { System.exit(0); } } // option boxes g.setColor(Color.GREEN); g.fillRect(WIDTH / 2 - 150, 250, 300, 70); g.fillRect(WIDTH / 2 - 150, 350, 300, 70); g.fillRect(WIDTH / 2 - 150, 450, 300, 70); // option box text g.setColor(Color.BLACK); g.setFont(new Font("Arial", Font.PLAIN, 30)); centerText("PLAY", g, WIDTH / 2, 295); centerText("LEADERBOARD", g, WIDTH / 2, 395); centerText("EXIT", g, WIDTH / 2, 495); // g.setColor(Color.YELLOW); // g.fillRect(WIDTH/2 - 352, 20, 704, 192); } } // Game if (gameState == 1) { arena.draw(g); // Sound sound.loadSound("Resources/Sounds/ambient.wav"); sound.runLoop(); // // offset borders // g.setColor(Color.RED); // g.drawRect(0, 0, arena.xOffsetBorder, HEIGHT); // left // g.drawRect(WIDTH - arena.xOffsetBorder, 0, arena.xOffsetBorder, HEIGHT); // right // g.drawRect(0, 0, WIDTH, arena.yOffsetBorder); // top // g.drawRect(0, HEIGHT - arena.yOffsetBorder, WIDTH, arena.yOffsetBorder); // bottom if (wave.falling) { count = 0; gameState = 2; } // wave wave.newWave(g, arena, player); wave.maintain(g, arena, player, swordSpec); // If enemy spots, play battle sound for (Enemy enemy : wave.enemies.values()) { if (enemy.spottedPlayer) { // Check to play noise int temp = (int) (Math.random() * 150); if (temp <= 1) { // Check for Ghoul or Golem if (enemy.type <= 60) { // Play Ghoul sound monster.loadSound("Resources/Sounds/ghoul.wav"); monster.run(); } if (enemy.type > 85) { // Play golem sound monster.loadSound("Resources/Sounds/golem.wav"); monster.run(); } } battle.loadSound("Resources/Sounds/Game Song.wav"); battle.runLoop(); break; } } // Stop battle sound, new wave if (wave.waveStart && wave.wave != 0) { battle.stop(); battle.reset(); } // player player.draw(g); player.movement(p1, arena); player.weapon = weapon; basicAttack(g, p1); specialAttack(g, p1); weaponPickup(g, p1, arena); weaponSwap(p1); if (player.health <= 0) { gameState = 3; sound.stop(); sound.reset(); battle.stop(); battle.reset(); } if (justPressed(p1, Button.C)) { wave.enemies.clear(); } g.setColor(Color.BLACK); g.fillRect(0, 0, (int) (player.x - 256), HEIGHT); g.fillRect((int) (player.x + 256), 0, (int) (WIDTH - player.x - 255), HEIGHT); g.fillRect(0, 0, WIDTH, (int) (player.y - 256)); g.fillRect(0, (int) (player.y + 256), WIDTH, (int) (HEIGHT - player.y - 255)); g.drawImage(TextureLoader.light, (int) (player.x - 256), (int) (player.y - 256), null); // HUD int floor = (wave.wave % 10 == 0) ? (wave.wave + 9) / 10 : (wave.wave + 10) / 10; int currentWave = (wave.wave % 10 == 0) ? 10 : wave.wave % 10; g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.BOLD, 20)); g.drawString("Floor " + floor + " | Wave " + currentWave, 5, 20); g.setFont(new Font("Arial", Font.PLAIN, 10)); g.drawString("Remaining enemies: " + wave.enemies.size(), 5, 30); g.setColor(Color.DARK_GRAY); g.fillRect(347, 531, 330, 10); g.fillRect(347, 541, 10, 20); g.fillRect(507, 541, 10, 20); g.fillRect(667, 541, 10, 20); g.fillRect(347, 561, 330, 15); g.setColor(Color.GREEN); if (player.health <= 100) { g.fillRect(357, 541, (int) (150 * (player.health / 100)), 20); } else { g.fillRect(357, 541, 150, 20); g.setColor(Color.ORANGE); g.fillRect(357, 541, (int) (150 * ((player.health - 100) / 100)), 20); } g.setColor(Color.BLUE); g.fillRect( 517 + (int) (150 - (150 * (player.mana / 100))), 541, (int) (150 * (player.mana / 100)), 20); g.dispose(); } // Floor switching if (gameState == 2) { g.setColor(new Color(0, 0, 0, 4 * count)); g.fillRect(0, 0, WIDTH, HEIGHT); count++; if (count == 60) { arena = new Arena(); player.x = WIDTH / 2; player.y = HEIGHT / 2; wave.falling = false; wave.hole = false; wave.transition.reset(); wave.waveStart = true; wave.difficulty *= 1.1; gameState = 1; } } // Game Over if (gameState == 3) { // Sound sound.loadSound("Resources/Sounds/Death.wav"); sound.runOnce(); g.setColor(Color.RED); g.setFont(new Font("Arial", Font.BOLD, 150)); centerText("GAME OVER", g, WIDTH / 2, HEIGHT / 2); wait++; yourScore = wave.score; waveNum = (wave.wave % 10 == 0) ? 10 : wave.wave % 10; if (justPressed(p1, Button.A) || justPressed(p1, Button.B) || justPressed(p1, Button.C)) { sound.stop(); sound.reset(); gameState = 0; reset(); } if (wait == 3000) { sound.stop(); sound.reset(); gameState = 0; reset(); } } // Enter Your initials if (gameState == 4) { g.setColor(Color.BLACK); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.RED); g.setFont(new Font("Arial", Font.PLAIN, 45)); centerText("Enter Your Initials", g, (Game.WIDTH / 2), (Game.HEIGHT / 4)); centerText("Press C to enter", g, (Game.WIDTH / 2), (Game.HEIGHT / 2 + 100)); g.drawString(abcs[i], (Game.WIDTH / 2) - 55, (Game.HEIGHT / 2)); g.drawString(abcs[j], (Game.WIDTH / 2), (Game.HEIGHT / 2)); g.drawString(abcs[k], (Game.WIDTH / 2) + 55, (Game.HEIGHT / 2)); name = abcs[i] + abcs[j] + abcs[k]; if (active1) g.fillRect((Game.WIDTH / 2) - 55, (Game.HEIGHT / 2) + 5, 35, 5); if (active2) g.fillRect((Game.WIDTH / 2) + 5, (Game.HEIGHT / 2) + 5, 35, 5); if (active3) g.fillRect((Game.WIDTH / 2) + 55, (Game.HEIGHT / 2) + 5, 35, 5); if (!pressedBefore) { if (p1.pressed(Button.U) || p1.pressed(Button.D) || p1.pressed(Button.L) || p1.pressed(Button.R) || p1.pressed(Button.A) || p1.pressed(Button.B) || p1.pressed(Button.C)) { pressedBefore = true; } else { pressedBefore = false; } } else { if (!p1.pressed(Button.U) && !p1.pressed(Button.D) && !p1.pressed(Button.L) && !p1.pressed(Button.R) && !p1.pressed(Button.A) && !p1.pressed(Button.B) && !p1.pressed(Button.C)) { pressedBefore = false; } else { return; } } if (p1.pressed(Button.C)) { storeScores.main(); reset(); gameState = 5; } if (active1) { if (p1.pressed(Button.U)) { i += 1; if (i > abcs.length - 1) i = 0; } if (p1.pressed(Button.D)) { i -= 1; if (i < 0) i = abcs.length - 1; } if (p1.pressed(Button.L)) { active1 = false; active3 = true; } if (p1.pressed(Button.R)) { active1 = false; active2 = true; } return; } if (active2) { if (p1.pressed(Button.U)) { j += 1; if (j > abcs.length - 1) j = 0; } if (p1.pressed(Button.D)) { j -= 1; if (j < 0) j = abcs.length - 1; } if (p1.pressed(Button.L)) { active2 = false; active1 = true; } if (p1.pressed(Button.R)) { active2 = false; active3 = true; } return; } if (active3) { if (p1.pressed(Button.U)) { k += 1; if (k > abcs.length - 1) k = 0; } if (p1.pressed(Button.D)) { k -= 1; if (k < 0) k = abcs.length - 1; } if (p1.pressed(Button.L)) { active3 = false; active2 = true; } if (p1.pressed(Button.R)) { active3 = false; active1 = true; } return; } } // high scores if (gameState == 5) { storeScores.Read(); g.setColor(Color.BLACK); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.RED); g.setFont(new Font("Arial", Font.PLAIN, 35)); centerText("High Scores", g, (Game.WIDTH / 2), (Game.HEIGHT / 16)); g.drawLine(0, Game.HEIGHT / 16 + 8, 1200, Game.HEIGHT / 16 + 8); g.drawString("Enemies killed", Game.WIDTH / 2 + 150, Game.HEIGHT / 16 + 60); g.drawString("Wave", Game.WIDTH / 2, Game.HEIGHT / 16 + 60); g.drawString("Floor", Game.WIDTH / 2 - 210, Game.HEIGHT / 16 + 60); int height = -80; for (int l = 0; l < 10; l++) { g.drawString(storeScores.nameList.get(l), Game.WIDTH / 2 - 400, Game.HEIGHT / 8 - height); height = height - 40; } // g.drawString(storeScores, Game.WIDTH / 2, Game.HEIGHT / 2); wait++; if (wait == 1005) { sound.stop(); sound.reset(); wait = 0; yourScore = 0; waveNum = 0; i = 0; j = 0; k = 0; floorNum = 0; gameState = 0; } } updateKeyState(p1); }
private boolean parsePacket() { if (socketStream == null) return false; try { int i = socketStream.available(); if (i == 0) return false; if (pktType == -1) { socketStream.flushInputStream(inStream.buffer, 1); pktType = inStream.buffer[0] & 0xff; if (encryption != null) pktType = pktType - encryption.getNextKey() & 0xff; pktSize = SizeConstants.packetSizes[pktType]; i--; } if (pktSize == -1) if (i > 0) { socketStream.flushInputStream(inStream.buffer, 1); pktSize = inStream.buffer[0] & 0xff; i--; } else { return false; } if (pktSize == -2) if (i > 1) { socketStream.flushInputStream(inStream.buffer, 2); inStream.currentOffset = 0; pktSize = inStream.readUnsignedWord(); i -= 2; } else { return false; } if (i < pktSize) return false; inStream.currentOffset = 0; socketStream.flushInputStream(inStream.buffer, pktSize); anInt1009 = 0; anInt843 = anInt842; anInt842 = anInt841; anInt841 = pktType; if (pktType == 81) { updatePlayers(pktSize, inStream); aBoolean1080 = false; pktType = -1; return true; } if (pktType == 176) { daysSinceRecovChange = inStream.method427(); unreadMessages = inStream.method435(); membersInt = inStream.readUnsignedByte(); anInt1193 = inStream.method440(); daysSinceLastLogin = inStream.readUnsignedWord(); if (anInt1193 != 0 && openInterfaceID == -1) { SignLink.dnslookup(TextClass.method586(anInt1193)); clearTopInterfaces(); char c = '\u028A'; if (daysSinceRecovChange != 201 || membersInt == 1) c = '\u028F'; reportAbuseInput = ""; canMute = false; for (int k9 = 0; k9 < RSInterface.interfaceCache.length; k9++) { if (RSInterface.interfaceCache[k9] == null || RSInterface.interfaceCache[k9].anInt214 != c) continue; openInterfaceID = RSInterface.interfaceCache[k9].parentID; break; } } pktType = -1; return true; } if (pktType == 64) { anInt1268 = inStream.method427(); anInt1269 = inStream.method428(); for (int j = anInt1268; j < anInt1268 + 8; j++) { for (int l9 = anInt1269; l9 < anInt1269 + 8; l9++) if (groundArray[plane][j][l9] != null) { groundArray[plane][j][l9] = null; spawnGroundItem(j, l9); } } for (SpawnObjectNode class30_sub1 = (SpawnObjectNode) aClass19_1179.reverseGetFirst(); class30_sub1 != null; class30_sub1 = (SpawnObjectNode) aClass19_1179.reverseGetNext()) if (class30_sub1.anInt1297 >= anInt1268 && class30_sub1.anInt1297 < anInt1268 + 8 && class30_sub1.anInt1298 >= anInt1269 && class30_sub1.anInt1298 < anInt1269 + 8 && class30_sub1.anInt1295 == plane) class30_sub1.anInt1294 = 0; pktType = -1; return true; } if (pktType == 185) { int k = inStream.method436(); RSInterface.interfaceCache[k].anInt233 = 3; if (myPlayer.desc == null) RSInterface.interfaceCache[k].mediaID = (myPlayer.anIntArray1700[0] << 25) + (myPlayer.anIntArray1700[4] << 20) + (myPlayer.equipment[0] << 15) + (myPlayer.equipment[8] << 10) + (myPlayer.equipment[11] << 5) + myPlayer.equipment[1]; else RSInterface.interfaceCache[k].mediaID = (int) (0x12345678L + myPlayer.desc.type); pktType = -1; return true; } if (pktType == 107) { aBoolean1160 = false; for (int l = 0; l < 5; l++) aBooleanArray876[l] = false; pktType = -1; return true; } if (pktType == 72) { int i1 = inStream.method434(); RSInterface class9 = RSInterface.interfaceCache[i1]; for (int k15 = 0; k15 < class9.inv.length; k15++) { class9.inv[k15] = -1; class9.inv[k15] = 0; } pktType = -1; return true; } if (pktType == 214) { ignoreCount = pktSize / 8; for (int j1 = 0; j1 < ignoreCount; j1++) ignoreListAsLongs[j1] = inStream.readQWord(); pktType = -1; return true; } if (pktType == 166) { aBoolean1160 = true; anInt1098 = inStream.readUnsignedByte(); anInt1099 = inStream.readUnsignedByte(); anInt1100 = inStream.readUnsignedWord(); anInt1101 = inStream.readUnsignedByte(); anInt1102 = inStream.readUnsignedByte(); if (anInt1102 >= 100) { xCameraPos = anInt1098 * 128 + 64; yCameraPos = anInt1099 * 128 + 64; zCameraPos = method42(plane, yCameraPos, xCameraPos) - anInt1100; } pktType = -1; return true; } if (pktType == 134) { needDrawTabArea = true; int k1 = inStream.readUnsignedByte(); int i10 = inStream.method439(); int l15 = inStream.readUnsignedByte(); currentExp[k1] = i10; currentStats[k1] = l15; maxStats[k1] = 1; for (int k20 = 0; k20 < 98; k20++) if (i10 >= anIntArray1019[k20]) maxStats[k1] = k20 + 2; pktType = -1; return true; } if (pktType == 71) { int l1 = inStream.readUnsignedWord(); int j10 = inStream.method426(); if (l1 == 65535) l1 = -1; tabInterfaceIDs[j10] = l1; needDrawTabArea = true; tabAreaAltered = true; pktType = -1; return true; } if (pktType == 74) { int i2 = inStream.method434(); if (i2 == 65535) i2 = -1; if (i2 != currentSong && musicEnabled && !lowMem && prevSong == 0) { nextSong = i2; songChanging = true; onDemandFetcher.method558(2, nextSong); } currentSong = i2; pktType = -1; return true; } if (pktType == 121) { int j2 = inStream.method436(); int k10 = inStream.method435(); if (musicEnabled && !lowMem) { nextSong = j2; songChanging = false; onDemandFetcher.method558(2, nextSong); prevSong = k10; } pktType = -1; return true; } if (pktType == 109) { resetLogout(); pktType = -1; return false; } if (pktType == 70) { int k2 = inStream.readSignedWord(); int l10 = inStream.method437(); int i16 = inStream.method434(); RSInterface class9_5 = RSInterface.interfaceCache[i16]; class9_5.anInt263 = k2; class9_5.anInt265 = l10; pktType = -1; return true; } if (pktType == 73 || pktType == 241) { // mapReset(); int l2 = anInt1069; int i11 = anInt1070; if (pktType == 73) { l2 = inStream.method435(); i11 = inStream.readUnsignedWord(); aBoolean1159 = false; } if (pktType == 241) { i11 = inStream.method435(); inStream.initBitAccess(); for (int j16 = 0; j16 < 4; j16++) { for (int l20 = 0; l20 < 13; l20++) { for (int j23 = 0; j23 < 13; j23++) { int i26 = inStream.readBits(1); if (i26 == 1) anIntArrayArrayArray1129[j16][l20][j23] = inStream.readBits(26); else anIntArrayArrayArray1129[j16][l20][j23] = -1; } } } inStream.finishBitAccess(); l2 = inStream.readUnsignedWord(); aBoolean1159 = true; } if (anInt1069 == l2 && anInt1070 == i11 && loadingStage == 2) { pktType = -1; return true; } anInt1069 = l2; anInt1070 = i11; baseX = (anInt1069 - 6) * 8; baseY = (anInt1070 - 6) * 8; aBoolean1141 = (anInt1069 / 8 == 48 || anInt1069 / 8 == 49) && anInt1070 / 8 == 48; if (anInt1069 / 8 == 48 && anInt1070 / 8 == 148) aBoolean1141 = true; loadingStage = 1; aLong824 = System.currentTimeMillis(); aRSImageProducer_1165.initDrawingArea(); aTextDrawingArea_1271.drawText(0, "Loading - please wait.", 151, 257); aTextDrawingArea_1271.drawText(0xffffff, "Loading - please wait.", 150, 256); aRSImageProducer_1165.drawGraphics(4, super.graphics, 4); if (pktType == 73) { int k16 = 0; for (int i21 = (anInt1069 - 6) / 8; i21 <= (anInt1069 + 6) / 8; i21++) { for (int k23 = (anInt1070 - 6) / 8; k23 <= (anInt1070 + 6) / 8; k23++) k16++; } aByteArrayArray1183 = new byte[k16][]; aByteArrayArray1247 = new byte[k16][]; anIntArray1234 = new int[k16]; anIntArray1235 = new int[k16]; anIntArray1236 = new int[k16]; k16 = 0; for (int l23 = (anInt1069 - 6) / 8; l23 <= (anInt1069 + 6) / 8; l23++) { for (int j26 = (anInt1070 - 6) / 8; j26 <= (anInt1070 + 6) / 8; j26++) { anIntArray1234[k16] = (l23 << 8) + j26; if (aBoolean1141 && (j26 == 49 || j26 == 149 || j26 == 147 || l23 == 50 || l23 == 49 && j26 == 47)) { anIntArray1235[k16] = -1; anIntArray1236[k16] = -1; k16++; } else { int k28 = anIntArray1235[k16] = onDemandFetcher.method562(0, j26, l23); if (k28 != -1) onDemandFetcher.method558(3, k28); int j30 = anIntArray1236[k16] = onDemandFetcher.method562(1, j26, l23); if (j30 != -1) onDemandFetcher.method558(3, j30); k16++; } } } } if (pktType == 241) { int l16 = 0; int ai[] = new int[676]; for (int i24 = 0; i24 < 4; i24++) { for (int k26 = 0; k26 < 13; k26++) { for (int l28 = 0; l28 < 13; l28++) { int k30 = anIntArrayArrayArray1129[i24][k26][l28]; if (k30 != -1) { int k31 = k30 >> 14 & 0x3ff; int i32 = k30 >> 3 & 0x7ff; int k32 = (k31 / 8 << 8) + i32 / 8; for (int j33 = 0; j33 < l16; j33++) { if (ai[j33] != k32) continue; k32 = -1; break; } if (k32 != -1) ai[l16++] = k32; } } } } aByteArrayArray1183 = new byte[l16][]; aByteArrayArray1247 = new byte[l16][]; anIntArray1234 = new int[l16]; anIntArray1235 = new int[l16]; anIntArray1236 = new int[l16]; for (int l26 = 0; l26 < l16; l26++) { int i29 = anIntArray1234[l26] = ai[l26]; int l30 = i29 >> 8 & 0xff; int l31 = i29 & 0xff; int j32 = anIntArray1235[l26] = onDemandFetcher.method562(0, l31, l30); if (j32 != -1) onDemandFetcher.method558(3, j32); int i33 = anIntArray1236[l26] = onDemandFetcher.method562(1, l31, l30); if (i33 != -1) onDemandFetcher.method558(3, i33); } } int i17 = baseX - anInt1036; int j21 = baseY - anInt1037; anInt1036 = baseX; anInt1037 = baseY; for (int j24 = 0; j24 < 16384; j24++) { NPC npc = sessionNPCs[j24]; if (npc != null) { for (int j29 = 0; j29 < 10; j29++) { npc.smallX[j29] -= i17; npc.smallY[j29] -= j21; } npc.x -= i17 * 128; npc.y -= j21 * 128; } } for (int i27 = 0; i27 < maxPlayers; i27++) { Player player = playerArray[i27]; if (player != null) { for (int i31 = 0; i31 < 10; i31++) { player.smallX[i31] -= i17; player.smallY[i31] -= j21; } player.x -= i17 * 128; player.y -= j21 * 128; } } aBoolean1080 = true; byte byte1 = 0; byte byte2 = 104; byte byte3 = 1; if (i17 < 0) { byte1 = 103; byte2 = -1; byte3 = -1; } byte byte4 = 0; byte byte5 = 104; byte byte6 = 1; if (j21 < 0) { byte4 = 103; byte5 = -1; byte6 = -1; } for (int k33 = byte1; k33 != byte2; k33 += byte3) { for (int l33 = byte4; l33 != byte5; l33 += byte6) { int i34 = k33 + i17; int j34 = l33 + j21; for (int k34 = 0; k34 < 4; k34++) if (i34 >= 0 && j34 >= 0 && i34 < 104 && j34 < 104) groundArray[k34][k33][l33] = groundArray[k34][i34][j34]; else groundArray[k34][k33][l33] = null; } } for (SpawnObjectNode class30_sub1_1 = (SpawnObjectNode) aClass19_1179.reverseGetFirst(); class30_sub1_1 != null; class30_sub1_1 = (SpawnObjectNode) aClass19_1179.reverseGetNext()) { class30_sub1_1.anInt1297 -= i17; class30_sub1_1.anInt1298 -= j21; if (class30_sub1_1.anInt1297 < 0 || class30_sub1_1.anInt1298 < 0 || class30_sub1_1.anInt1297 >= 104 || class30_sub1_1.anInt1298 >= 104) class30_sub1_1.unlink(); } if (destX != 0) { destX -= i17; destY -= j21; } aBoolean1160 = false; pktType = -1; return true; } if (pktType == 208) { int i3 = inStream.method437(); if (i3 >= 0) writeInterface(i3); anInt1018 = i3; pktType = -1; return true; } if (pktType == 99) { anInt1021 = inStream.readUnsignedByte(); pktType = -1; return true; } if (pktType == 75) { int j3 = inStream.method436(); int j11 = inStream.method436(); RSInterface.interfaceCache[j11].anInt233 = 2; RSInterface.interfaceCache[j11].mediaID = j3; pktType = -1; return true; } if (pktType == 114) { anInt1104 = inStream.method434() * 30; pktType = -1; return true; } if (pktType == 60) { anInt1269 = inStream.readUnsignedByte(); anInt1268 = inStream.method427(); while (inStream.currentOffset < pktSize) { int k3 = inStream.readUnsignedByte(); manageModelCreations(inStream, k3); } pktType = -1; return true; } if (pktType == 35) { int l3 = inStream.readUnsignedByte(); int k11 = inStream.readUnsignedByte(); int j17 = inStream.readUnsignedByte(); int k21 = inStream.readUnsignedByte(); aBooleanArray876[l3] = true; anIntArray873[l3] = k11; anIntArray1203[l3] = j17; anIntArray928[l3] = k21; anIntArray1030[l3] = 0; pktType = -1; return true; } if (pktType == 174) { int i4 = inStream.readUnsignedWord(); int l11 = inStream.readUnsignedByte(); int k17 = inStream.readUnsignedWord(); if (wave_on && !lowMem && anInt1062 < 50) { anIntArray1207[anInt1062] = i4; anIntArray1241[anInt1062] = l11; anIntArray1250[anInt1062] = k17 + Sounds.anIntArray326[i4]; anInt1062++; } pktType = -1; return true; } if (pktType == 104) { int j4 = inStream.method427(); int i12 = inStream.method426(); String s6 = inStream.readString(); if (j4 >= 1 && j4 <= 5) { if (s6.equalsIgnoreCase("null")) s6 = null; atPlayerActions[j4 - 1] = s6; atPlayerArray[j4 - 1] = i12 == 0; } pktType = -1; return true; } if (pktType == 78) { destX = 0; pktType = -1; return true; } if (pktType == 253) { String s = inStream.readString(); if (s.endsWith(":tradereq:")) { String s3 = s.substring(0, s.indexOf(":")); long l17 = TextClass.longForName(s3); boolean flag2 = false; for (int j27 = 0; j27 < ignoreCount; j27++) { if (ignoreListAsLongs[j27] != l17) continue; flag2 = true; break; } if (!flag2 && anInt1251 == 0) pushMessage("wishes to trade with you.", 4, s3); } else if (s.endsWith(":duelreq:")) { String s4 = s.substring(0, s.indexOf(":")); long l18 = TextClass.longForName(s4); boolean flag3 = false; for (int k27 = 0; k27 < ignoreCount; k27++) { if (ignoreListAsLongs[k27] != l18) continue; flag3 = true; break; } if (!flag3 && anInt1251 == 0) pushMessage("wishes to duel with you.", 8, s4); } else if (s.endsWith(":chalreq:")) { String s5 = s.substring(0, s.indexOf(":")); long l19 = TextClass.longForName(s5); boolean flag4 = false; for (int l27 = 0; l27 < ignoreCount; l27++) { if (ignoreListAsLongs[l27] != l19) continue; flag4 = true; break; } if (!flag4 && anInt1251 == 0) { String s8 = s.substring(s.indexOf(":") + 1, s.length() - 9); pushMessage(s8, 8, s5); } } else { pushMessage(s, 0, ""); } pktType = -1; // serverMessage(s); return true; } if (pktType == 1) { for (int k4 = 0; k4 < playerArray.length; k4++) if (playerArray[k4] != null) playerArray[k4].anim = -1; for (int j12 = 0; j12 < sessionNPCs.length; j12++) if (sessionNPCs[j12] != null) sessionNPCs[j12].anim = -1; pktType = -1; return true; } if (pktType == 50) { long l4 = inStream.readQWord(); int i18 = inStream.readUnsignedByte(); String s7 = TextClass.fixName(TextClass.nameForLong(l4)); for (int k24 = 0; k24 < friendsCount; k24++) { if (l4 != friendsListAsLongs[k24]) continue; if (friendsNodeIDs[k24] != i18) { friendsNodeIDs[k24] = i18; needDrawTabArea = true; if (i18 > 0) pushMessage(s7 + " has logged in.", 5, ""); if (i18 == 0) pushMessage(s7 + " has logged out.", 5, ""); } s7 = null; break; } if (s7 != null && friendsCount < 200) { friendsListAsLongs[friendsCount] = l4; friendsList[friendsCount] = s7; friendsNodeIDs[friendsCount] = i18; friendsCount++; needDrawTabArea = true; } for (boolean flag6 = false; !flag6; ) { flag6 = true; for (int k29 = 0; k29 < friendsCount - 1; k29++) if (friendsNodeIDs[k29] != nodeID && friendsNodeIDs[k29 + 1] == nodeID || friendsNodeIDs[k29] == 0 && friendsNodeIDs[k29 + 1] != 0) { int j31 = friendsNodeIDs[k29]; friendsNodeIDs[k29] = friendsNodeIDs[k29 + 1]; friendsNodeIDs[k29 + 1] = j31; String s10 = friendsList[k29]; friendsList[k29] = friendsList[k29 + 1]; friendsList[k29 + 1] = s10; long l32 = friendsListAsLongs[k29]; friendsListAsLongs[k29] = friendsListAsLongs[k29 + 1]; friendsListAsLongs[k29 + 1] = l32; needDrawTabArea = true; flag6 = false; } } pktType = -1; return true; } if (pktType == 110) { if (tabID == 12) needDrawTabArea = true; energy = inStream.readUnsignedByte(); pktType = -1; return true; } if (pktType == 254) { headiconDrawType = inStream.readUnsignedByte(); if (headiconDrawType == 1) anInt1222 = inStream.readUnsignedWord(); if (headiconDrawType >= 2 && headiconDrawType <= 6) { if (headiconDrawType == 2) { anInt937 = 64; anInt938 = 64; } if (headiconDrawType == 3) { anInt937 = 0; anInt938 = 64; } if (headiconDrawType == 4) { anInt937 = 128; anInt938 = 64; } if (headiconDrawType == 5) { anInt937 = 64; anInt938 = 0; } if (headiconDrawType == 6) { anInt937 = 64; anInt938 = 128; } headiconDrawType = 2; anInt934 = inStream.readUnsignedWord(); anInt935 = inStream.readUnsignedWord(); anInt936 = inStream.readUnsignedByte(); } if (headiconDrawType == 10) anInt933 = inStream.readUnsignedWord(); pktType = -1; return true; } if (pktType == 248) { int i5 = inStream.method435(); int k12 = inStream.readUnsignedWord(); if (backDialogID != -1) { backDialogID = -1; inputTaken = true; } if (inputDialogState != 0) { inputDialogState = 0; inputTaken = true; } openInterfaceID = i5; invOverlayInterfaceID = k12; needDrawTabArea = true; tabAreaAltered = true; aBoolean1149 = false; pktType = -1; return true; } if (pktType == 79) { int j5 = inStream.method434(); int l12 = inStream.method435(); RSInterface class9_3 = RSInterface.interfaceCache[j5]; if (class9_3 != null && class9_3.type == 0) { if (l12 < 0) l12 = 0; if (l12 > class9_3.scrollMax - class9_3.height) l12 = class9_3.scrollMax - class9_3.height; class9_3.scrollPosition = l12; } pktType = -1; return true; } if (pktType == 68) { for (int k5 = 0; k5 < variousSettings.length; k5++) if (variousSettings[k5] != anIntArray1045[k5]) { variousSettings[k5] = anIntArray1045[k5]; adjustVolume(k5); needDrawTabArea = true; } pktType = -1; return true; } if (pktType == 196) { long l5 = inStream.readQWord(); int j18 = inStream.readDWord(); int l21 = inStream.readUnsignedByte(); boolean flag5 = false; for (int i28 = 0; i28 < 100; i28++) { if (anIntArray1240[i28] != j18) continue; flag5 = true; break; } if (l21 <= 1) { for (int l29 = 0; l29 < ignoreCount; l29++) { if (ignoreListAsLongs[l29] != l5) continue; flag5 = true; break; } } if (!flag5 && anInt1251 == 0) try { anIntArray1240[anInt1169] = j18; anInt1169 = (anInt1169 + 1) % 100; String s9 = TextInput.method525(pktSize - 13, inStream); if (l21 != 3) s9 = Censor.doCensor(s9); if (l21 == 2 || l21 == 3) pushMessage(s9, 7, "@cr2@" + TextClass.fixName(TextClass.nameForLong(l5))); else if (l21 == 1) pushMessage(s9, 7, "@cr1@" + TextClass.fixName(TextClass.nameForLong(l5))); else pushMessage(s9, 3, TextClass.fixName(TextClass.nameForLong(l5))); } catch (Exception exception1) { SignLink.reporterror("cde1"); } pktType = -1; return true; } if (pktType == 85) { anInt1269 = inStream.method427(); anInt1268 = inStream.method427(); pktType = -1; return true; } if (pktType == 24) { anInt1054 = inStream.method428(); if (anInt1054 == tabID) { if (anInt1054 == 3) tabID = 1; else tabID = 3; needDrawTabArea = true; } pktType = -1; return true; } if (pktType == 246) { int i6 = inStream.method434(); int i13 = inStream.readUnsignedWord(); int k18 = inStream.readUnsignedWord(); if (k18 == 65535) { RSInterface.interfaceCache[i6].anInt233 = 0; pktType = -1; return true; } else { ItemDef itemDef = ItemDef.forID(k18); RSInterface.interfaceCache[i6].anInt233 = 4; RSInterface.interfaceCache[i6].mediaID = k18; RSInterface.interfaceCache[i6].anInt270 = itemDef.modelRotation1; RSInterface.interfaceCache[i6].anInt271 = itemDef.modelRotation2; RSInterface.interfaceCache[i6].anInt269 = (itemDef.modelZoom * 100) / i13; pktType = -1; return true; } } if (pktType == 171) { boolean flag1 = inStream.readUnsignedByte() == 1; int j13 = inStream.readUnsignedWord(); RSInterface.interfaceCache[j13].aBoolean266 = flag1; pktType = -1; return true; } if (pktType == 142) { int j6 = inStream.method434(); writeInterface(j6); if (backDialogID != -1) { backDialogID = -1; inputTaken = true; } if (inputDialogState != 0) { inputDialogState = 0; inputTaken = true; } invOverlayInterfaceID = j6; needDrawTabArea = true; tabAreaAltered = true; openInterfaceID = -1; aBoolean1149 = false; pktType = -1; return true; } if (pktType == 126) { String s1 = inStream.readString(); int k13 = inStream.method435(); RSInterface.interfaceCache[k13].message = s1; if (RSInterface.interfaceCache[k13].parentID == tabInterfaceIDs[tabID]) needDrawTabArea = true; pktType = -1; return true; } if (pktType == 206) { publicChatMode = inStream.readUnsignedByte(); privateChatMode = inStream.readUnsignedByte(); tradeMode = inStream.readUnsignedByte(); aBoolean1233 = true; inputTaken = true; pktType = -1; return true; } if (pktType == 240) { if (tabID == 12) needDrawTabArea = true; weight = inStream.readSignedWord(); pktType = -1; return true; } if (pktType == 8) { int k6 = inStream.method436(); int l13 = inStream.readUnsignedWord(); RSInterface.interfaceCache[k6].anInt233 = 1; RSInterface.interfaceCache[k6].mediaID = l13; pktType = -1; return true; } if (pktType == 122) { int l6 = inStream.method436(); int i14 = inStream.method436(); int i19 = i14 >> 10 & 0x1f; int i22 = i14 >> 5 & 0x1f; int l24 = i14 & 0x1f; RSInterface.interfaceCache[l6].textColor = (i19 << 19) + (i22 << 11) + (l24 << 3); pktType = -1; return true; } if (pktType == 53) { needDrawTabArea = true; int i7 = inStream.readUnsignedWord(); RSInterface class9_1 = RSInterface.interfaceCache[i7]; int j19 = inStream.readUnsignedWord(); for (int j22 = 0; j22 < j19; j22++) { int i25 = inStream.readUnsignedByte(); if (i25 == 255) i25 = inStream.method440(); class9_1.inv[j22] = inStream.method436(); class9_1.invStackSizes[j22] = i25; } for (int j25 = j19; j25 < class9_1.inv.length; j25++) { class9_1.inv[j25] = 0; class9_1.invStackSizes[j25] = 0; } pktType = -1; return true; } if (pktType == 230) { int j7 = inStream.method435(); int j14 = inStream.readUnsignedWord(); int k19 = inStream.readUnsignedWord(); int k22 = inStream.method436(); RSInterface.interfaceCache[j14].anInt270 = k19; RSInterface.interfaceCache[j14].anInt271 = k22; RSInterface.interfaceCache[j14].anInt269 = j7; pktType = -1; return true; } if (pktType == 221) { anInt900 = inStream.readUnsignedByte(); needDrawTabArea = true; pktType = -1; return true; } if (pktType == 177) { aBoolean1160 = true; anInt995 = inStream.readUnsignedByte(); anInt996 = inStream.readUnsignedByte(); anInt997 = inStream.readUnsignedWord(); anInt998 = inStream.readUnsignedByte(); anInt999 = inStream.readUnsignedByte(); if (anInt999 >= 100) { int k7 = anInt995 * 128 + 64; int k14 = anInt996 * 128 + 64; int i20 = method42(plane, k14, k7) - anInt997; int l22 = k7 - xCameraPos; int k25 = i20 - zCameraPos; int j28 = k14 - yCameraPos; int i30 = (int) Math.sqrt(l22 * l22 + j28 * j28); yCameraCurve = (int) (Math.atan2(k25, i30) * 325.94900000000001D) & 0x7ff; xCameraCurve = (int) (Math.atan2(l22, j28) * -325.94900000000001D) & 0x7ff; if (yCameraCurve < 128) yCameraCurve = 128; if (yCameraCurve > 383) yCameraCurve = 383; } pktType = -1; return true; } if (pktType == 249) { anInt1046 = inStream.method426(); unknownInt10 = inStream.method436(); pktType = -1; return true; } if (pktType == 65) { updateNPCs(inStream, pktSize); pktType = -1; return true; } if (pktType == 27) { messagePromptRaised = false; inputDialogState = 1; amountOrNameInput = ""; inputTaken = true; pktType = -1; return true; } if (pktType == 187) { messagePromptRaised = false; inputDialogState = 2; amountOrNameInput = ""; inputTaken = true; pktType = -1; return true; } if (pktType == 97) { int l7 = inStream.readUnsignedWord(); writeInterface(l7); if (invOverlayInterfaceID != -1) { invOverlayInterfaceID = -1; needDrawTabArea = true; tabAreaAltered = true; } if (backDialogID != -1) { backDialogID = -1; inputTaken = true; } if (inputDialogState != 0) { inputDialogState = 0; inputTaken = true; } openInterfaceID = l7; aBoolean1149 = false; pktType = -1; return true; } if (pktType == 218) { int i8 = inStream.method438(); dialogID = i8; inputTaken = true; pktType = -1; return true; } if (pktType == 87) { int j8 = inStream.method434(); int l14 = inStream.method439(); anIntArray1045[j8] = l14; if (variousSettings[j8] != l14) { variousSettings[j8] = l14; adjustVolume(j8); needDrawTabArea = true; if (dialogID != -1) inputTaken = true; } pktType = -1; return true; } if (pktType == 36) { int k8 = inStream.method434(); byte byte0 = inStream.readSignedByte(); anIntArray1045[k8] = byte0; if (variousSettings[k8] != byte0) { variousSettings[k8] = byte0; adjustVolume(k8); needDrawTabArea = true; if (dialogID != -1) inputTaken = true; } pktType = -1; return true; } if (pktType == 61) { anInt1055 = inStream.readUnsignedByte(); pktType = -1; return true; } if (pktType == 200) { int l8 = inStream.readUnsignedWord(); int i15 = inStream.readSignedWord(); RSInterface class9_4 = RSInterface.interfaceCache[l8]; class9_4.anInt257 = i15; if (i15 == -1) { class9_4.anInt246 = 0; class9_4.anInt208 = 0; } pktType = -1; return true; } if (pktType == 219) { if (invOverlayInterfaceID != -1) { invOverlayInterfaceID = -1; needDrawTabArea = true; tabAreaAltered = true; } if (backDialogID != -1) { backDialogID = -1; inputTaken = true; } if (inputDialogState != 0) { inputDialogState = 0; inputTaken = true; } openInterfaceID = -1; aBoolean1149 = false; pktType = -1; return true; } if (pktType == 34) { needDrawTabArea = true; int i9 = inStream.readUnsignedWord(); RSInterface class9_2 = RSInterface.interfaceCache[i9]; while (inStream.currentOffset < pktSize) { int j20 = inStream.method422(); int i23 = inStream.readUnsignedWord(); int l25 = inStream.readUnsignedByte(); if (l25 == 255) l25 = inStream.readDWord(); if (j20 >= 0 && j20 < class9_2.inv.length) { class9_2.inv[j20] = i23; class9_2.invStackSizes[j20] = l25; } } pktType = -1; return true; } if (pktType == 105 || pktType == 84 || pktType == 147 || pktType == 215 || pktType == 4 || pktType == 117 || pktType == 156 || pktType == 44 || pktType == 160 || pktType == 101 || pktType == 151) { manageModelCreations(inStream, pktType); pktType = -1; return true; } if (pktType == 106) { tabID = inStream.method427(); needDrawTabArea = true; tabAreaAltered = true; pktType = -1; return true; } if (pktType == 164) { int j9 = inStream.method434(); writeInterface(j9); if (invOverlayInterfaceID != -1) { invOverlayInterfaceID = -1; needDrawTabArea = true; tabAreaAltered = true; } backDialogID = j9; inputTaken = true; openInterfaceID = -1; aBoolean1149 = false; pktType = -1; return true; } SignLink.reporterror("T1 - " + pktType + "," + pktSize + " - " + anInt842 + "," + anInt843); resetLogout(); } catch (IOException _ex) { dropClient(); } catch (Exception exception) { String s2 = "T2 - " + pktType + "," + anInt842 + "," + anInt843 + " - " + pktSize + "," + (baseX + myPlayer.smallX[0]) + "," + (baseY + myPlayer.smallY[0]) + " - "; for (int j15 = 0; j15 < pktSize && j15 < 50; j15++) s2 = s2 + inStream.buffer[j15] + ","; SignLink.reporterror(s2); resetLogout(); } return true; }
private Rectangle[] checkCollisions() { int px = (int) player.x / BLOCK_SIZE; int py = (int) Math.floor(player.y / BLOCK_SIZE); int[] x = {px, px + 1, px + 1, px}; int[] y = {py, py, py + 1, py + 1}; Rectangle[] r = {new Rectangle(), new Rectangle(), new Rectangle(), new Rectangle()}; try { Tile[] tiles = {map[x[0]][y[0]], map[x[1]][y[1]], map[x[2]][y[2]], map[x[3]][y[3]]}; boolean inWater = false; boolean broke = false; for (int i = 0; i < tiles.length; i++) { if (tiles[i] != null) switch (tiles[i]) { case BLOCK: r[i].set(x[i], y[i], 1, 1); break; case EXIT: { player.win = true; Sounds.get().play(Sounds.WIN); } break; case DEATH: die(); break; case WATER: { if (!inWater) inWater = true; } break; case GLASS: { if (!player.abilities.contains(Ability.SOLID)) r[i].set(x[i], y[i], 1, 1); if (Math.abs(player.vy) == Player.MAX_SPEED_Y && player.abilities.contains(Ability.SOLID)) { map[x[i]][y[i]] = null; broke = true; Sounds.get().play(Sounds.CRASH); } } break; case TUBE_UP: case TUBE_RIGHT: case TUBE_DOWN: case TUBE_LEFT: { if (!player.abilities.contains(Ability.LIQUID)) { r[i].set(x[i], y[i], 1, 1); } else { Point otherTube = tubes.get(new Point(x[i], y[i])); // System.out.printf("Transporting to %d:%d%n", // otherTube.x, otherTube.y); // System.out.printf("Where is %s%n", // map[otherTube.x][otherTube.y]); // System.out.printf("Up is %s%n", // map[otherTube.x][otherTube.y+1]); // System.out.printf("Down is %s%n", // map[otherTube.x][otherTube.y-1]); // System.out.printf("Left is %s%n", // map[otherTube.x-1][otherTube.y]); // System.out.printf("Right is %s%n", // map[otherTube.x+1][otherTube.y]); if (otherTube != null) switch (map[otherTube.x][otherTube.y]) { case TUBE_UP: { /*if (player.vy < 0)*/ { player.stop(); player.x = otherTube.x * BLOCK_SIZE; player.y = otherTube.y * BLOCK_SIZE + BLOCK_SIZE + 1; player.abilities.remove(Ability.LIQUID); Sounds.get().play(Sounds.WHEEP); } } break; case TUBE_RIGHT: { /*if (player.vx < 0)*/ { player.stop(); player.x = otherTube.x * BLOCK_SIZE + BLOCK_SIZE + 1; player.y = otherTube.y * BLOCK_SIZE; player.abilities.remove(Ability.LIQUID); Sounds.get().play(Sounds.WHEEP); } } break; case TUBE_DOWN: { /*if (player.vy > 0)*/ { player.stop(); player.x = otherTube.x * BLOCK_SIZE; player.y = otherTube.y * BLOCK_SIZE - BLOCK_SIZE - 1; player.abilities.remove(Ability.LIQUID); Sounds.get().play(Sounds.WHEEP); } } break; case TUBE_LEFT: { /*if (player.vx > 0)*/ { player.stop(); player.x = otherTube.x * BLOCK_SIZE - BLOCK_SIZE - 1; player.y = otherTube.y * BLOCK_SIZE; player.abilities.remove(Ability.LIQUID); Sounds.get().play(Sounds.WHEEP); } } break; } renderer.cam.position.set(player.x, player.y, 0); } } break; case AB_SWIM: { getAbility(Ability.SWIM, x[i], y[i]); } break; case AB_GAS: { getAbility(Ability.GAS, x[i], y[i]); } break; case AB_SLICK: { getAbility(Ability.SLICK, x[i], y[i]); } break; case AB_NORMAL: { getAbility(Ability.NORMAL, x[i], y[i]); } break; case AB_SOLID: { getAbility(Ability.SOLID, x[i], y[i]); } break; case AB_LIQUID: { getAbility(Ability.LIQUID, x[i], y[i]); } break; default: r[i].set(-1, -1, 1, 1); break; } } if (broke) { player.abilities.remove(Ability.SOLID); player.canJump = true; } if (player.state == State.SWIM) { if (!inWater) { waterCount++; if (waterCount > 25) { player.state = State.RUNNING; player.abilities.remove(Ability.SWIM); } } } else if (inWater) { if (!player.abilities.contains(Ability.SWIM)) die(); else { player.state = State.SWIM; waterCount = 0; } } } catch (IndexOutOfBoundsException e) { for (int i = 0; i < r.length; i++) r[i].set(-1, -1, 0, 0); } return r; }
private void tryToMovePlayer() { boolean sticked = player.abilities.contains(Ability.SLICK); if (player.jumpCommand || sticked) { int nextBlock = (player.gravityDirection < 0) ? -1 : 2; Tile tile1 = map[(int) player.x / BLOCK_SIZE][(int) player.y / BLOCK_SIZE + nextBlock]; Tile tile2 = map[(int) player.x / BLOCK_SIZE + 1][(int) player.y / BLOCK_SIZE + nextBlock]; boolean onTheGround = player.state != State.SWIM && (tile1 == Tile.BLOCK || tile1 == Tile.GLASS || tile1 == Tile.TUBE_UP || tile1 == Tile.TUBE_RIGHT || tile1 == Tile.TUBE_DOWN || tile1 == Tile.TUBE_LEFT || tile2 == Tile.BLOCK || tile2 == Tile.GLASS || tile2 == Tile.TUBE_UP || tile2 == Tile.TUBE_RIGHT || tile2 == Tile.TUBE_DOWN || tile2 == Tile.TUBE_LEFT); if (!player.isJumping && onTheGround && !sticked) { // Sounds.get().play(Sounds.JUMP); player.vy -= player.gravityDirection * Player.JUMPING; player.isJumping = true; } else if (!onTheGround && sticked) { player.clearSlick(); } player.jumpCommand = false; } Rectangle pr = new Rectangle( (int) player.x / BLOCK_SIZE + (((int) player.x % BLOCK_SIZE == 0) ? 0 : 1), (int) Math.floor(player.y / BLOCK_SIZE) + (((int) player.y % BLOCK_SIZE == 0) ? 0 : 1), 1, 1); Rectangle[] rs; boolean collided = false; player.x += player.vx; pr.setX((int) player.x / BLOCK_SIZE); rs = checkCollisions(); for (Rectangle r : rs) { if (pr.overlaps(r)) { if (player.vx < 0) player.x = (r.x + 1) * BLOCK_SIZE + 0.01f; else player.x = (r.x - 1) * BLOCK_SIZE - 0.01f; collided = true; } } if (collided) { player.vx = 0; /*player.ax = 0;*/ } collided = false; player.y += player.vy; pr.setX((int) player.x / BLOCK_SIZE); pr.setY((int) Math.floor(player.y / BLOCK_SIZE)); rs = checkCollisions(); for (Rectangle r : rs) { if (pr.overlaps(r)) { if (player.vy < 0) player.y = (r.y + 1) * BLOCK_SIZE + 0.01f; else player.y = (r.y - 1) * BLOCK_SIZE - 0.01f; collided = true; } } if (collided) { if (player.isJumping && player.vy * player.gravityDirection > 0) player.isJumping = false; if (player.gravityDirection > 0 && player.vy > 0) { // if (! player.abilities.contains(Ability.SLICK)) { // wasCollided = true; // collidedCount = 50; // } if (!sticked) player.gravityDirection = -1; player.abilities.remove(Ability.GAS); } player.vy = 0; player.ay = 0; // if (! player.gravityAffection) { // wasCollided = true; // collidedCount++; // } } /*else if (! player.gravityAffection*/ /* && wasCollided*/ /*) { // if (collidedCount > 5) { // player.clearSlick(); // wasCollided = false; // } }*/ }