SHARE
TWEET

Game.java

a guest May 23rd, 2019 91 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.applet.AppletContext;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Font;
  5. import java.awt.Graphics;
  6. import java.io.ByteArrayInputStream;
  7. import java.io.DataInputStream;
  8. import java.io.EOFException;
  9. import java.io.File;
  10. import java.io.FileInputStream;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.io.OutputStream;
  14. import java.net.InetAddress;
  15. import java.net.Socket;
  16. import java.net.URL;
  17. import java.text.DecimalFormat;
  18. import java.text.DecimalFormatSymbols;
  19. import java.util.Calendar;
  20. import java.util.Date;
  21.  
  22. @SuppressWarnings("serial")
  23. public class Game extends RSApplet {
  24.  
  25.     public static String intToKOrMilLongName(int i) {
  26.         String s = String.valueOf(i);
  27.         for (int k = s.length() - 3; k > 0; k -= 3) {
  28.             s = s.substring(0, k) + "," + s.substring(k);
  29.         }
  30.         if (s.length() > 8) {
  31.             s = "@gre@" + s.substring(0, s.length() - 8) + " million @whi@(" + s + ")";
  32.         } else if (s.length() > 4) {
  33.             s = "@cya@" + s.substring(0, s.length() - 4) + "K @whi@(" + s + ")";
  34.         }
  35.         return " " + s;
  36.     }
  37.    
  38.     static final boolean musicIsntNull() {
  39.         if (aClass56_749 == null)
  40.             return false;
  41.         return true;
  42.     }
  43.     void mouseWheelDragged(int i, int j) {
  44.         if (!mouseWheelDown)
  45.             return;
  46.         this.anInt1186 += i * 3;
  47.         this.anInt1187 += (j << 1);
  48.     }
  49.    
  50.     static final void method790() {
  51.         if (aClass56_749 != null) {
  52.             method891(false);
  53.             if (anInt720 > 0) {
  54.                 aClass56_749.method831(256);
  55.                 anInt720 = 0;
  56.             }
  57.             aClass56_749.method828();
  58.             aClass56_749 = null;
  59.         }
  60.     }
  61.    
  62.     public static String getFileNameWithoutExtension(String fileName) {
  63.         File tmpFile = new File(fileName);
  64.         tmpFile.getName();
  65.         int whereDot = tmpFile.getName().lastIndexOf('.');
  66.         if (0 < whereDot && whereDot <= tmpFile.getName().length() - 2) {
  67.             return tmpFile.getName().substring(0, whereDot);
  68.         }
  69.         return "";
  70.     }
  71.    
  72.     public String indexLocation(int cacheIndex, int index) {
  73.         return Signlink.findcachedir() + "index" + cacheIndex + "/" + (index != -1 ? index + ".gz" : "");
  74.     }
  75.  
  76.     public void repackCacheIndex(int cacheIndex) {
  77.         System.out.println("Started repacking index " + cacheIndex + ".");
  78.         int indexLength = new File(indexLocation(cacheIndex, -1)).listFiles().length;
  79.         File[] file = new File(indexLocation(cacheIndex, -1)).listFiles();
  80.         try {
  81.             for (int index = 0; index < indexLength; index++) {
  82.                 int fileIndex = Integer.parseInt(getFileNameWithoutExtension(file[index].toString()));
  83.                 byte[] data = fileToByteArray(cacheIndex, fileIndex);
  84.                 if(data != null && data.length > 0) {
  85.                     decompressors[cacheIndex].method234(data.length, data, fileIndex);
  86.                     System.out.println("Repacked " + fileIndex + ".");
  87.                 } else {
  88.                     System.out.println("Unable to locate index " + fileIndex + ".");
  89.                 }
  90.             }
  91.         } catch(Exception e) {
  92.             System.out.println("Error packing cache index " + cacheIndex + ".");
  93.         }
  94.         System.out.println("Finished repacking " + cacheIndex + ".");
  95.     }
  96.  
  97.     public byte[] fileToByteArray(int cacheIndex, int index) {
  98.         try {
  99.             if (indexLocation(cacheIndex, index).length() <= 0 || indexLocation(cacheIndex, index) == null) {
  100.                 return null;
  101.             }
  102.             File file = new File(indexLocation(cacheIndex, index));
  103.             byte[] fileData = new byte[(int)file.length()];
  104.             FileInputStream fis = new FileInputStream(file);
  105.             fis.read(fileData);
  106.             fis.close();
  107.             return fileData;
  108.         } catch(Exception e) {
  109.             return null;
  110.         }
  111.     }
  112.    
  113.     public void musics() {
  114.         for(int MusicIndex = 0; MusicIndex < 3536; MusicIndex++) {
  115.             byte[] abyte0 = GetMusic(MusicIndex);
  116.                 if (abyte0 != null && abyte0.length > 0) {
  117.                     decompressors[3].method234(abyte0.length, abyte0, MusicIndex);
  118.                 }
  119.             }
  120.         }
  121.    
  122.     public byte[] GetMusic(int Index) {
  123.         try {
  124.         File Music = new File(Signlink.findcachedir() + "./sounds/"+Index+".gz");
  125.         byte[] aByte = new byte[(int)Music.length()];
  126.         FileInputStream Fis = new FileInputStream(Music);
  127.         Fis.read(aByte);
  128.         Fis.close();
  129.         return aByte;
  130.         } catch(Exception e) {
  131.         return null;
  132.         }
  133.     }
  134.    
  135.     static final void setVolume(int i) {
  136.         if (musicIsntNull()) {
  137.             if (fetchMusic)
  138.                 musicVolume2 = i;
  139.             else
  140.                 method900(i);
  141.         }
  142.     }
  143.    
  144.     static final void method900(int i) {
  145.         if (aClass56_749 != null) {
  146.             if (anInt720 == 0) {
  147.                 if (anInt478 >= 0) {
  148.                     anInt478 = i;
  149.                     aClass56_749.method830(i, 0);
  150.                 }
  151.             } else if (aByteArray347 != null)
  152.                 anInt1478 = i;
  153.         }
  154.     }
  155.    
  156.     static final synchronized void method55(boolean bool) {
  157.         if (musicIsntNull()) {
  158.             method891(bool);
  159.             fetchMusic = false;
  160.         }
  161.     }
  162.    
  163.     static final void method891(boolean bool) {
  164.         method853(0, null, bool);
  165.     }
  166.    
  167.     static final boolean constructMusic() {
  168.         anInt720 = 20;
  169.         try {
  170.             aClass56_749 = (Class56) Class.forName("Class56_Sub1_Sub1").newInstance();
  171.         } catch (Throwable throwable) {
  172.             return false;
  173.         }
  174.         return true;
  175.     }
  176.    
  177.     final synchronized void method58(int i_30_, int volume,
  178.             boolean bool, int music) {
  179.         if (musicIsntNull()) {
  180.             nextSong = music;
  181.             onDemandFetcher.method558(2, nextSong);
  182.             musicVolume2 = volume;
  183.             anInt139 = -1;
  184.             aBoolean995 = true;
  185.             anInt116 = i_30_;
  186.         }
  187.     }
  188.    
  189.     final synchronized void method56(int i, boolean bool, int music) {
  190.         if (musicIsntNull()) {
  191.             nextSong = music;
  192.             onDemandFetcher.method558(2, nextSong);
  193.             musicVolume2 = i;
  194.             anInt139 = -1;
  195.             aBoolean995 = true;
  196.             anInt116 = -1;
  197.         }
  198.     }
  199.    
  200.     public void sendFrame126(String str,int i) {
  201.         RSInterface.interfaceCache[i].disabledText = str;
  202.         if(RSInterface.interfaceCache[i].parentID == tabInterfaceIDs[tabID])
  203.             needDrawTabArea = true;
  204.     }
  205.    
  206.     public static byte[] musicData;
  207.    
  208.     static final synchronized void method49() {
  209.         if (musicIsntNull()) {
  210.             if (fetchMusic) {
  211.                 byte[] is = musicData;
  212.                 if (is != null) {
  213.                     if (anInt116 >= 0)
  214.                         method684(aBoolean995, anInt116, musicVolume2, is);
  215.                     else if (anInt139 >= 0)
  216.                         method899(anInt139, -1, aBoolean995, is, musicVolume2);
  217.                     else
  218.                         method853(musicVolume2, is, aBoolean995);
  219.                     fetchMusic = false;
  220.                 }
  221.             }
  222.             method368(0);
  223.         }
  224.     }
  225.    
  226.     static final int method1004(int i) {
  227.         return (int) (Math.log((double) i * 0.00390625) * 868.5889638065036 + 0.5);
  228.     }
  229.    
  230.     static final void method853(int i_2_, byte[] is, boolean bool) {
  231.         if (aClass56_749 != null) {
  232.             if (anInt478 >= 0) {
  233.                 aClass56_749.method833();
  234.                 anInt478 = -1;
  235.                 aByteArray347 = null;
  236.                 anInt720 = 20;
  237.                 anInt155 = 0;
  238.             }
  239.             if (is != null) {
  240.                 if (anInt720 > 0) {
  241.                     aClass56_749.method831(i_2_);
  242.                     anInt720 = 0;
  243.                 }
  244.                 anInt478 = i_2_;
  245.                 aClass56_749.method827(i_2_, is, 0, bool);
  246.             }
  247.         }
  248.     }
  249.    
  250.     static final void method899(int i, int i_29_, boolean bool, byte[] is, int i_30_) {
  251.         if (aClass56_749 != null) {
  252.             if (i_29_ >= (anInt478 ^ 0xffffffff)) {
  253.                 i -= 20;
  254.                 if (i < 1)
  255.                     i = 1;
  256.                 anInt720 = i;
  257.                 if (anInt478 == 0)
  258.                     anInt2200 = 0;
  259.                 else {
  260.                     int i_31_ = method1004(anInt478);
  261.                     i_31_ -= anInt155;
  262.                     anInt2200 = ((anInt2200 - 1 + (i_31_ + 3600)) / anInt2200);
  263.                 }
  264.                 aBoolean475 = bool;
  265.                 aByteArray347 = is;
  266.                 anInt1478 = i_30_;
  267.             } else if (anInt720 != 0) {
  268.                 aBoolean475 = bool;
  269.                 aByteArray347 = is;
  270.                 anInt1478 = i_30_;
  271.             } else
  272.                 method853(i_30_, is, bool);
  273.         }
  274.     }
  275.    
  276.     static final void method684(boolean bool, int i, int i_2_, byte[] is) {
  277.         if (aClass56_749 != null) {
  278.             if (anInt478 >= 0) {
  279.                 anInt2200 = i;
  280.                 if (anInt478 != 0) {
  281.                     int i_4_ = method1004(anInt478);
  282.                     i_4_ -= anInt155;
  283.                     anInt720 = (i_4_ + 3600) / i;
  284.                     if (anInt720 < 1)
  285.                         anInt720 = 1;
  286.                 } else
  287.                     anInt720 = 1;
  288.                 aByteArray347 = is;
  289.                 anInt1478 = i_2_;
  290.                 aBoolean475 = bool;
  291.             } else if (anInt720 == 0)
  292.                 method853(i_2_, is, bool);
  293.             else {
  294.                 anInt1478 = i_2_;
  295.                 aBoolean475 = bool;
  296.                 aByteArray347 = is;
  297.             }
  298.         }
  299.     }
  300.    
  301.     static final void method368(int i) {
  302.         if (aClass56_749 != null) {
  303.             if (anInt478 < i) {
  304.                 if (anInt720 > 0) {
  305.                     anInt720--;
  306.                     if (anInt720 == 0) {
  307.                         if (aByteArray347 == null)
  308.                             aClass56_749.method831(256);
  309.                         else {
  310.                             aClass56_749.method831(anInt1478);
  311.                             anInt478 = anInt1478;
  312.                             aClass56_749.method827(anInt1478, aByteArray347, 0, aBoolean475);
  313.                             aByteArray347 = null;
  314.                         }
  315.                         anInt155 = 0;
  316.                     }
  317.                 }
  318.             } else if (anInt720 > 0) {
  319.                 anInt155 += anInt2200;
  320.                 aClass56_749.method830(anInt478, anInt155);
  321.                 anInt720--;
  322.                 if (anInt720 == 0) {
  323.                     aClass56_749.method833();
  324.                     anInt720 = 20;
  325.                     anInt478 = -1;
  326.                 }
  327.             }
  328.             aClass56_749.method832(i - 122);
  329.         }
  330.     }
  331.  
  332.     private void stopMidi() {
  333.         if (Signlink.music != null) {
  334.             if (Signlink.music.isRunning()) {
  335.                 Signlink.fadeOut();
  336.                 Signlink.music.stop();
  337.                 Signlink.midi = "stop";
  338.             }
  339.         }
  340.     }
  341.  
  342.     public boolean menuHasAddFriend(int j) {
  343.         if (j < 0) {
  344.             return false;
  345.         }
  346.         int k = menuActionID[j];
  347.         if (k >= 2000) {
  348.             k -= 2000;
  349.         }
  350.         return k == 337;
  351.     }
  352.  
  353.     public void drawChatArea() {
  354.         aRSImageProducer_1166.initDrawingArea();
  355.         Texture.lineOffsets = chatAreaOffsets;
  356.         chatBack.method361(0, 0);
  357.         if (messagePromptRaised) {
  358.             chatTextDrawingArea.drawText(0, aString1121, 40, 239);
  359.             chatTextDrawingArea.drawText(128, promptInput + "*", 60, 239);
  360.         } else if (inputDialogState == 1) {
  361.             chatTextDrawingArea.drawText(0, "Enter amount:", 40, 239);
  362.             chatTextDrawingArea.drawText(128, amountOrNameInput + "*", 60, 239);
  363.         } else if (inputDialogState == 2) {
  364.             chatTextDrawingArea.drawText(0, "Enter name:", 40, 239);
  365.             chatTextDrawingArea.drawText(128, amountOrNameInput + "*", 60, 239);
  366.         } else if (aString844 != null) {
  367.             chatTextDrawingArea.drawText(0, aString844, 40, 239);
  368.             chatTextDrawingArea.drawText(128, "Click to continue", 60, 239);
  369.         } else if (backDialogID != -1) {
  370.             drawInterface(0, 0, RSInterface.interfaceCache[backDialogID], 0);//CHANGED THIS - andrew was 0, 0
  371.         } else if (dialogID != -1) {
  372.             drawInterface(0, 0, RSInterface.interfaceCache[dialogID], 0);//CHANGED THIS - andrew was 0, 0
  373.         } else {
  374.             TextDrawingArea textDrawingArea = aTextDrawingArea_1271;
  375.             int j = 0;
  376.             DrawingArea.setDrawingArea(77, 0, 463, 0);
  377.             for (int k = 0; k < 100; k++) {
  378.                 if (chatMessages[k] != null) {
  379.                     int l = chatTypes[k];
  380.                     int i1 = 70 - j * 14 + anInt1089;
  381.                     String s1 = chatNames[k];
  382.                     byte byte0 = 0;
  383.                     if (s1 != null && s1.startsWith("@cr1@")) {
  384.                         s1 = s1.substring(5);
  385.                         byte0 = 1;
  386.                     }
  387.                     if (s1 != null && s1.startsWith("@cr2@")) {
  388.                         s1 = s1.substring(5);
  389.                         byte0 = 2;
  390.                     }
  391.                     if (l == 0) {
  392.                         if (i1 > 0 && i1 < 110) {
  393.                             textDrawingArea.method389(false, 4, 0, chatMessages[k], i1);
  394.                         }
  395.                         j++;
  396.                     }
  397.                     if ((l == 1 || l == 2) && (l == 1 || publicChatMode == 0 || publicChatMode == 1 && isFriendOrSelf(s1))) {
  398.                         if (i1 > 0 && i1 < 110) {
  399.                             int j1 = 4;
  400.                             if (byte0 == 1) {
  401.                                 modIcons[0].method361(j1, i1 - 12);
  402.                                 j1 += 14;
  403.                             }
  404.                             if (byte0 == 2) {
  405.                                 modIcons[1].method361(j1, i1 - 12);
  406.                                 j1 += 14;
  407.                             }
  408.                             textDrawingArea.method385(0, s1 + ":", i1, j1);
  409.                             j1 += textDrawingArea.getTextWidth(s1) + 8;
  410.                             textDrawingArea.method385(255, chatMessages[k], i1, j1);
  411.                         }
  412.                         j++;
  413.                     }
  414.                     if ((l == 3 || l == 7) && splitpublicChat == 0 && (l == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s1))) {
  415.                         if (i1 > 0 && i1 < 110) {
  416.                             int k1 = 4;
  417.                             textDrawingArea.method385(0, "From", i1, k1);
  418.                             k1 += textDrawingArea.getTextWidth("From ");
  419.                             if (byte0 == 1) {
  420.                                 modIcons[0].method361(k1, i1 - 12);
  421.                                 k1 += 14;
  422.                             }
  423.                             if (byte0 == 2) {
  424.                                 modIcons[1].method361(k1, i1 - 12);
  425.                                 k1 += 14;
  426.                             }
  427.                             textDrawingArea.method385(0, s1 + ":", i1, k1);
  428.                             k1 += textDrawingArea.getTextWidth(s1) + 8;
  429.                             textDrawingArea.method385(0x800000, chatMessages[k], i1, k1);
  430.                         }
  431.                         j++;
  432.                     }
  433.                     if (l == 4 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s1))) {
  434.                         if (i1 > 0 && i1 < 110) {
  435.                             textDrawingArea.method385(0x800080, s1 + " " + chatMessages[k], i1, 4);
  436.                         }
  437.                         j++;
  438.                     }
  439.                     if (l == 5 && splitpublicChat == 0 && privateChatMode < 2) {
  440.                         if (i1 > 0 && i1 < 110) {
  441.                             textDrawingArea.method385(0x800000, chatMessages[k], i1, 4);
  442.                         }
  443.                         j++;
  444.                     }
  445.                     if (l == 6 && splitpublicChat == 0 && privateChatMode < 2) {
  446.                         if (i1 > 0 && i1 < 110) {
  447.                             textDrawingArea.method385(0, "To " + s1 + ":", i1, 4);
  448.                             textDrawingArea.method385(0x800000, chatMessages[k], i1, 12 + textDrawingArea.getTextWidth("To " + s1));
  449.                         }
  450.                         j++;
  451.                     }
  452.                     if (l == 8 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s1))) {
  453.                         if (i1 > 0 && i1 < 110) {
  454.                             textDrawingArea.method385(0x7e3200, s1 + " " + chatMessages[k], i1, 4);
  455.                         }
  456.                         j++;
  457.                     }
  458.                 }
  459.             }
  460.  
  461.             DrawingArea.defaultDrawingAreaSize();
  462.             anInt1211 = j * 14 + 7;
  463.             if (anInt1211 < 78) {
  464.                 anInt1211 = 78;
  465.             }
  466.             method30(77, anInt1211 - anInt1089 - 77, 0, 463, anInt1211);
  467.             String s;
  468.             if (myPlayer != null && myPlayer.name != null) {
  469.                 s = myPlayer.name;
  470.             } else {
  471.                 s = TextClass.fixName(myUsername);
  472.             }
  473.             textDrawingArea.method385(0, s + ":", 90, 4);
  474.             textDrawingArea.method385(255, inputString + "*", 90, 6 + textDrawingArea.getTextWidth(s + ": "));
  475.             DrawingArea.method339(77, 0, 479, 0);
  476.         }
  477.         if (menuOpen && menuScreenArea == 2) {
  478.             drawMenu();
  479.         }
  480.         aRSImageProducer_1166.drawGraphics(357, super.graphics, 17);
  481.         aRSImageProducer_1165.initDrawingArea();
  482.         Texture.lineOffsets = chatBoxAreaOffsets;
  483.     }
  484.  
  485.     public void init() {
  486.         try {
  487.             nodeID = 10;
  488.             portOff = 0;
  489.             setHighMem();
  490.             isMembers = true;
  491.             Signlink.storeid = 32;
  492.             Signlink.startpriv(InetAddress.getLocalHost());
  493.             initClientFrame(503, 765);
  494.         } catch (Exception exception) {
  495.             return;
  496.         }
  497.     }
  498.  
  499.     public void startRunnable(Runnable runnable, int i) {
  500.         if (i > 10) {
  501.             i = 10;
  502.         }
  503.         if (Signlink.mainapp != null) {
  504.             Signlink.startthread(runnable, i);
  505.         } else {
  506.             super.startRunnable(runnable, i);
  507.         }
  508.     }
  509.  
  510.     public Socket openSocket(int i) throws IOException {
  511.         if (Signlink.mainapp != null) {
  512.             return Signlink.opensocket(i);
  513.         } else {
  514.             return new Socket(InetAddress.getByName(getCodeBase().getHost()), i);
  515.         }
  516.     }
  517.  
  518.     public void processMenuClick() {
  519.         if (activeInterfaceType != 0) {
  520.             return;
  521.         }
  522.         int j = super.clickMode3;
  523.         if (spellSelected == 1 && super.saveClickX >= 516 && super.saveClickY >= 160 && super.saveClickX <= 765 && super.saveClickY <= 205) {
  524.             j = 0;
  525.         }
  526.         if (menuOpen) {
  527.             if (j != 1) {
  528.                 int k = super.mouseX;
  529.                 int j1 = super.mouseY;
  530.                 if (menuScreenArea == 0) {
  531.                     k -= 4;
  532.                     j1 -= 4;
  533.                 }
  534.                 if (menuScreenArea == 1) {
  535.                     k -= 553;
  536.                     j1 -= 205;
  537.                 }
  538.                 if (menuScreenArea == 2) {
  539.                     k -= 17;
  540.                     j1 -= 357;
  541.                 }
  542.                 if (k < menuOffsetX - 10 || k > menuOffsetX + menuWidth + 10 || j1 < menuOffsetY - 10 || j1 > menuOffsetY + anInt952 + 10) {
  543.                     menuOpen = false;
  544.                     if (menuScreenArea == 1) {
  545.                         needDrawTabArea = true;
  546.                     }
  547.                     if (menuScreenArea == 2) {
  548.                         inputTaken = true;
  549.                     }
  550.                 }
  551.             }
  552.             if (j == 1) {
  553.                 int l = menuOffsetX;
  554.                 int k1 = menuOffsetY;
  555.                 int i2 = menuWidth;
  556.                 int k2 = super.saveClickX;
  557.                 int l2 = super.saveClickY;
  558.                 if (menuScreenArea == 0) {
  559.                     k2 -= 4;
  560.                     l2 -= 4;
  561.                 }
  562.                 if (menuScreenArea == 1) {
  563.                     k2 -= 553;
  564.                     l2 -= 205;
  565.                 }
  566.                 if (menuScreenArea == 2) {
  567.                     k2 -= 17;
  568.                     l2 -= 357;
  569.                 }
  570.                 int i3 = -1;
  571.                 for (int j3 = 0; j3 < menuActionRow; j3++) {
  572.                     int k3 = k1 + 31 + (menuActionRow - 1 - j3) * 15;
  573.                     if (k2 > l && k2 < l + i2 && l2 > k3 - 13 && l2 < k3 + 3) {
  574.                         i3 = j3;
  575.                     }
  576.                 }
  577.  
  578.                 if (i3 != -1) {
  579.                     doAction(i3);
  580.                 }
  581.                 menuOpen = false;
  582.                 if (menuScreenArea == 1) {
  583.                     needDrawTabArea = true;
  584.                 }
  585.                 if (menuScreenArea == 2) {
  586.                     inputTaken = true;
  587.                 }
  588.             }
  589.         } else {
  590.             if (j == 1 && menuActionRow > 0) {
  591.                 int i1 = menuActionID[menuActionRow - 1];
  592.                 if (i1 == 632 || i1 == 78 || i1 == 867 || i1 == 431 || i1 == 53 || i1 == 74 || i1 == 454 || i1 == 539 || i1 == 493 || i1 == 847 || i1 == 447 || i1 == 1125) {
  593.                     int l1 = menuActionCmd2[menuActionRow - 1];
  594.                     int j2 = menuActionCmd3[menuActionRow - 1];
  595.                     RSInterface class9 = RSInterface.interfaceCache[j2];
  596.                     if (class9.aBoolean259 || class9.aBoolean235) {
  597.                         aBoolean1242 = false;
  598.                         anInt989 = 0;
  599.                         anInt1084 = j2;
  600.                         anInt1085 = l1;
  601.                         activeInterfaceType = 2;
  602.                         anInt1087 = super.saveClickX;
  603.                         anInt1088 = super.saveClickY;
  604.                         if (RSInterface.interfaceCache[j2].parentID == openInterfaceID) {
  605.                             activeInterfaceType = 1;
  606.                         }
  607.                         if (RSInterface.interfaceCache[j2].parentID == backDialogID) {
  608.                             activeInterfaceType = 3;
  609.                         }
  610.                         return;
  611.                     }
  612.                 }
  613.             }
  614.             if (j == 1 && (anInt1253 == 1 || menuHasAddFriend(menuActionRow - 1)) && menuActionRow > 2) {
  615.                 j = 2;
  616.             }
  617.             if (j == 1 && menuActionRow > 0) {
  618.                 doAction(menuActionRow - 1);
  619.             }
  620.             if (j == 2 && menuActionRow > 0) {
  621.                 determineMenuSize();
  622.             }
  623.         }
  624.     }
  625.  
  626.     public void saveMidi(boolean flag, byte abyte0[]) {
  627.         Signlink.midifade = flag ? 1 : 0;
  628.         Signlink.saveMidi(abyte0, abyte0.length);
  629.     }
  630.  
  631.     public void method22() {
  632.         try {
  633.             anInt985 = -1;
  634.             aClass19_1056.removeAll();
  635.             aClass19_1013.removeAll();
  636.             Texture.method366();
  637.             unlinkMRUNodes();
  638.             worldController.initToNull();
  639.             System.gc();
  640.             for (int i = 0; i < 4; i++) {
  641.                 aClass11Array1230[i].method210();
  642.             }
  643.  
  644.             for (int l = 0; l < 4; l++) {
  645.                 for (int k1 = 0; k1 < 104; k1++) {
  646.                     for (int j2 = 0; j2 < 104; j2++) {
  647.                         byteGroundArray[l][k1][j2] = 0;
  648.                     }
  649.  
  650.                 }
  651.  
  652.             }
  653.  
  654.             ObjectManager objectManager = new ObjectManager(byteGroundArray, intGroundArray);
  655.             int k2 = aByteArrayArray1183.length;
  656.             stream.createFrame(0);
  657.             if (!aBoolean1159) {
  658.                 for (int i3 = 0; i3 < k2; i3++) {
  659.                     int i4 = (anIntArray1234[i3] >> 8) * 64 - baseX;
  660.                     int k5 = (anIntArray1234[i3] & 0xff) * 64 - baseY;
  661.                     byte abyte0[] = aByteArrayArray1183[i3];
  662.                     if (abyte0 != null) {
  663.                         objectManager.method180(abyte0, k5, i4, (anInt1069 - 6) * 8, (anInt1070 - 6) * 8, aClass11Array1230);
  664.                     }
  665.                 }
  666.  
  667.                 for (int j4 = 0; j4 < k2; j4++) {
  668.                     int l5 = (anIntArray1234[j4] >> 8) * 64 - baseX;
  669.                     int k7 = (anIntArray1234[j4] & 0xff) * 64 - baseY;
  670.                     byte abyte2[] = aByteArrayArray1183[j4];
  671.                     if (abyte2 == null && anInt1070 < 800) {
  672.                         objectManager.method174(k7, 64, 64, l5);
  673.                     }
  674.                 }
  675.  
  676.                 anInt1097++;
  677.                 if (anInt1097 > 160) {
  678.                     anInt1097 = 0;
  679.                     stream.createFrame(238);
  680.                     stream.writeWordBigEndian(96);
  681.                 }
  682.                 stream.createFrame(0);
  683.                 for (int i6 = 0; i6 < k2; i6++) {
  684.                     byte abyte1[] = aByteArrayArray1247[i6];
  685.                     if (abyte1 != null) {
  686.                         int l8 = (anIntArray1234[i6] >> 8) * 64 - baseX;
  687.                         int k9 = (anIntArray1234[i6] & 0xff) * 64 - baseY;
  688.                         objectManager.method190(l8, aClass11Array1230, k9, worldController, abyte1);
  689.                     }
  690.                 }
  691.  
  692.             }
  693.             if (aBoolean1159) {
  694.                 for (int j3 = 0; j3 < 4; j3++) {
  695.                     for (int k4 = 0; k4 < 13; k4++) {
  696.                         for (int j6 = 0; j6 < 13; j6++) {
  697.                             int l7 = anIntArrayArrayArray1129[j3][k4][j6];
  698.                             if (l7 != -1) {
  699.                                 int i9 = l7 >> 24 & 3;
  700.                                 int l9 = l7 >> 1 & 3;
  701.                                 int j10 = l7 >> 14 & 0x3ff;
  702.                                 int l10 = l7 >> 3 & 0x7ff;
  703.                                 int j11 = (j10 / 8 << 8) + l10 / 8;
  704.                                 for (int l11 = 0; l11 < anIntArray1234.length; l11++) {
  705.                                     if (anIntArray1234[l11] != j11 || aByteArrayArray1183[l11] == null) {
  706.                                         continue;
  707.                                     }
  708.                                     objectManager.method179(i9, l9, aClass11Array1230, k4 * 8, (j10 & 7) * 8, aByteArrayArray1183[l11], (l10 & 7) * 8, j3, j6 * 8);
  709.                                     break;
  710.                                 }
  711.  
  712.                             }
  713.                         }
  714.  
  715.                     }
  716.  
  717.                 }
  718.  
  719.                 for (int l4 = 0; l4 < 13; l4++) {
  720.                     for (int k6 = 0; k6 < 13; k6++) {
  721.                         int i8 = anIntArrayArrayArray1129[0][l4][k6];
  722.                         if (i8 == -1) {
  723.                             objectManager.method174(k6 * 8, 8, 8, l4 * 8);
  724.                         }
  725.                     }
  726.  
  727.                 }
  728.  
  729.                 stream.createFrame(0);
  730.                 for (int l6 = 0; l6 < 4; l6++) {
  731.                     for (int j8 = 0; j8 < 13; j8++) {
  732.                         for (int j9 = 0; j9 < 13; j9++) {
  733.                             int i10 = anIntArrayArrayArray1129[l6][j8][j9];
  734.                             if (i10 != -1) {
  735.                                 int k10 = i10 >> 24 & 3;
  736.                                 int i11 = i10 >> 1 & 3;
  737.                                 int k11 = i10 >> 14 & 0x3ff;
  738.                                 int i12 = i10 >> 3 & 0x7ff;
  739.                                 int j12 = (k11 / 8 << 8) + i12 / 8;
  740.                                 for (int k12 = 0; k12 < anIntArray1234.length; k12++) {
  741.                                     if (anIntArray1234[k12] != j12 || aByteArrayArray1247[k12] == null) {
  742.                                         continue;
  743.                                     }
  744.                                     objectManager.method183(aClass11Array1230, worldController, k10, j8 * 8, (i12 & 7) * 8, l6, aByteArrayArray1247[k12], (k11 & 7) * 8, i11, j9 * 8);
  745.                                     break;
  746.                                 }
  747.  
  748.                             }
  749.                         }
  750.  
  751.                     }
  752.  
  753.                 }
  754.  
  755.             }
  756.             stream.createFrame(0);
  757.             objectManager.method171(aClass11Array1230, worldController);
  758.             if(aRSImageProducer_1165 != null) {
  759.                 aRSImageProducer_1165.initDrawingArea();
  760.                 Texture.lineOffsets = chatBoxAreaOffsets;
  761.             }
  762.             stream.createFrame(0);
  763.             int k3 = ObjectManager.anInt145;
  764.             if (k3 > plane) {
  765.                 k3 = plane;
  766.             }
  767.             if (k3 < plane - 1) {
  768.                 k3 = plane - 1;
  769.             }
  770.             if (lowMem) {
  771.                 worldController.method275(ObjectManager.anInt145);
  772.             } else {
  773.                 worldController.method275(0);
  774.             }
  775.             for (int i5 = 0; i5 < 104; i5++) {
  776.                 for (int i7 = 0; i7 < 104; i7++) {
  777.                     spawnGroundItem(i5, i7);
  778.                 }
  779.  
  780.             }
  781.  
  782.             anInt1051++;
  783.             if (anInt1051 > 98) {
  784.                 anInt1051 = 0;
  785.                 stream.createFrame(150);
  786.             }
  787.             method63();
  788.         } catch (Exception exception) {
  789.         }
  790.         ObjectDef.mruNodes1.unlinkAll();
  791.         if (super.gameFrame != null) {
  792.             stream.createFrame(210);
  793.             stream.writeDWord(0x3f008edd);
  794.         }
  795.         if (lowMem && Signlink.cache_dat != null) {
  796.             int j = onDemandFetcher.getVersionCount(0);
  797.             for (int i1 = 0; i1 < j; i1++) {
  798.                 int l1 = onDemandFetcher.getModelIndex(i1);
  799.                 if ((l1 & 0x79) == 0) {
  800.                     Model.method461(i1);
  801.                 }
  802.             }
  803.  
  804.         }
  805.         System.gc();
  806.         Texture.method367();
  807.         onDemandFetcher.method566();
  808.         int k = (anInt1069 - 6) / 8 - 1;
  809.         int j1 = (anInt1069 + 6) / 8 + 1;
  810.         int i2 = (anInt1070 - 6) / 8 - 1;
  811.         int l2 = (anInt1070 + 6) / 8 + 1;
  812.         if (aBoolean1141) {
  813.             k = 49;
  814.             j1 = 50;
  815.             i2 = 49;
  816.             l2 = 50;
  817.         }
  818.         for (int l3 = k; l3 <= j1; l3++) {
  819.             for (int j5 = i2; j5 <= l2; j5++) {
  820.                 if (l3 == k || l3 == j1 || j5 == i2 || j5 == l2) {
  821.                     int j7 = onDemandFetcher.method562(0, j5, l3);
  822.                     if (j7 != -1) {
  823.                         onDemandFetcher.method560(j7, 3);
  824.                     }
  825.                     int k8 = onDemandFetcher.method562(1, j5, l3);
  826.                     if (k8 != -1) {
  827.                         onDemandFetcher.method560(k8, 3);
  828.                     }
  829.                 }
  830.             }
  831.  
  832.         }
  833.  
  834.     }
  835.  
  836.     public void unlinkMRUNodes() {
  837.         ObjectDef.mruNodes1.unlinkAll();
  838.         ObjectDef.mruNodes2.unlinkAll();
  839.         EntityDef.mruNodes.unlinkAll();
  840.         ItemDef.mruNodes2.unlinkAll();
  841.         ItemDef.mruNodes1.unlinkAll();
  842.         Player.mruNodes.unlinkAll();
  843.         SpotAnim.aMRUNodes_415.unlinkAll();
  844.     }
  845.  
  846.     public void method24(int i) {
  847.         int ai[] = aClass30_Sub2_Sub1_Sub1_1263.pixels;
  848.         int j = ai.length;
  849.         for (int k = 0; k < j; k++) {
  850.             ai[k] = 0;
  851.         }
  852.  
  853.         for (int l = 1; l < 103; l++) {
  854.             int i1 = 24628 + (103 - l) * 512 * 4;
  855.             for (int k1 = 1; k1 < 103; k1++) {
  856.                 if ((byteGroundArray[i][k1][l] & 0x18) == 0) {
  857.                     worldController.method309(ai, i1, i, k1, l);
  858.                 }
  859.                 if (i < 3 && (byteGroundArray[i + 1][k1][l] & 8) != 0) {
  860.                     worldController.method309(ai, i1, i + 1, k1, l);
  861.                 }
  862.                 i1 += 4;
  863.             }
  864.  
  865.         }
  866.  
  867.         int j1 = (238 + (int) (Math.random() * 20D) - 10 << 16) + (238 + (int) (Math.random() * 20D) - 10 << 8) + 238 + (int) (Math.random() * 20D) - 10;
  868.         int l1 = 238 + (int) (Math.random() * 20D) - 10 << 16;
  869.         aClass30_Sub2_Sub1_Sub1_1263.method343();
  870.         for (int i2 = 1; i2 < 103; i2++) {
  871.             for (int j2 = 1; j2 < 103; j2++) {
  872.                 if ((byteGroundArray[i][j2][i2] & 0x18) == 0) {
  873.                     method50(i2, j1, j2, l1, i);
  874.                 }
  875.                 if (i < 3 && (byteGroundArray[i + 1][j2][i2] & 8) != 0) {
  876.                     method50(i2, j1, j2, l1, i + 1);
  877.                 }
  878.             }
  879.  
  880.         }
  881.         if(aRSImageProducer_1165 != null) {
  882.             aRSImageProducer_1165.initDrawingArea();
  883.             Texture.lineOffsets = chatBoxAreaOffsets;
  884.         }
  885.         anInt1071 = 0;
  886.         for (int k2 = 0; k2 < 104; k2++) {
  887.             for (int l2 = 0; l2 < 104; l2++) {
  888.                 int i3 = worldController.method303(plane, k2, l2);
  889.                 if (i3 != 0) {
  890.                     i3 = i3 >> 14 & 0x7fff;
  891.                     int j3 = ObjectDef.forID(i3).anInt746;
  892.                     if (j3 >= 0) {
  893.                         int k3 = k2;
  894.                         int l3 = l2;
  895.                         if (j3 != 22 && j3 != 29 && j3 != 34 && j3 != 36 && j3 != 46 && j3 != 47 && j3 != 48) {
  896.                             byte byte0 = 104;
  897.                             byte byte1 = 104;
  898.                             int ai1[][] = aClass11Array1230[plane].anIntArrayArray294;
  899.                             for (int i4 = 0; i4 < 10; i4++) {
  900.                                 int j4 = (int) (Math.random() * 4D);
  901.                                 if (j4 == 0 && k3 > 0 && k3 > k2 - 3 && (ai1[k3 - 1][l3] & 0x1280108) == 0) {
  902.                                     k3--;
  903.                                 }
  904.                                 if (j4 == 1 && k3 < byte0 - 1 && k3 < k2 + 3 && (ai1[k3 + 1][l3] & 0x1280180) == 0) {
  905.                                     k3++;
  906.                                 }
  907.                                 if (j4 == 2 && l3 > 0 && l3 > l2 - 3 && (ai1[k3][l3 - 1] & 0x1280102) == 0) {
  908.                                     l3--;
  909.                                 }
  910.                                 if (j4 == 3 && l3 < byte1 - 1 && l3 < l2 + 3 && (ai1[k3][l3 + 1] & 0x1280120) == 0) {
  911.                                     l3++;
  912.                                 }
  913.                             }
  914.  
  915.                         }
  916.                         aClass30_Sub2_Sub1_Sub1Array1140[anInt1071] = mapFunctions[j3];
  917.                         anIntArray1072[anInt1071] = k3;
  918.                         anIntArray1073[anInt1071] = l3;
  919.                         anInt1071++;
  920.                     }
  921.                 }
  922.             }
  923.  
  924.         }
  925.  
  926.     }
  927.  
  928.     public void spawnGroundItem(int i, int j) {
  929.         NodeList class19 = groundArray[plane][i][j];
  930.         if (class19 == null) {
  931.             worldController.method295(plane, i, j);
  932.             return;
  933.         }
  934.         int k = 0xfa0a1f01;
  935.         Object obj = null;
  936.         for (Item item = (Item) class19.reverseGetFirst(); item != null; item = (Item) class19.reverseGetNext()) {
  937.             ItemDef itemDef = ItemDef.forID(item.ID);
  938.             int l = itemDef.value;
  939.             if (itemDef.stackable) {
  940.                 l *= item.anInt1559 + 1;
  941.                 // notifyItemSpawn(item, i + baseX, j + baseY);
  942.             }
  943.  
  944.             if (l > k) {
  945.                 k = l;
  946.                 obj = item;
  947.             }
  948.         }
  949.  
  950.         class19.insertTail(((Node) obj));
  951.         Object obj1 = null;
  952.         Object obj2 = null;
  953.         for (Item class30_sub2_sub4_sub2_1 = (Item) class19.reverseGetFirst(); class30_sub2_sub4_sub2_1 != null; class30_sub2_sub4_sub2_1 = (Item) class19.reverseGetNext()) {
  954.             if (class30_sub2_sub4_sub2_1.ID != ((Item) obj).ID && obj1 == null) {
  955.                 obj1 = class30_sub2_sub4_sub2_1;
  956.             }
  957.             if (class30_sub2_sub4_sub2_1.ID != ((Item) obj).ID && class30_sub2_sub4_sub2_1.ID != ((Item) obj1).ID && obj2 == null) {
  958.                 obj2 = class30_sub2_sub4_sub2_1;
  959.             }
  960.         }
  961.  
  962.         int i1 = i + (j << 7) + 0x60000000;
  963.         worldController.method281(i, i1, ((Animable) obj1), method42(plane, j * 128 + 64, i * 128 + 64), ((Animable) obj2), ((Animable) obj), plane, j);
  964.     }
  965.  
  966.     public void method26(boolean flag) {
  967.         for (int j = 0; j < npcCount; j++) {
  968.             NPC npc = npcArray[npcIndices[j]];
  969.             int k = 0x20000000 + (npcIndices[j] << 14);
  970.             if (npc == null || !npc.isVisible() || npc.desc.aBoolean93 != flag) {
  971.                 continue;
  972.             }
  973.             int l = npc.x >> 7;
  974.             int i1 = npc.y >> 7;
  975.             if (l < 0 || l >= 104 || i1 < 0 || i1 >= 104) {
  976.                 continue;
  977.             }
  978.             if (npc.anInt1540 == 1 && (npc.x & 0x7f) == 64 && (npc.y & 0x7f) == 64) {
  979.                 if (anIntArrayArray929[l][i1] == anInt1265) {
  980.                     continue;
  981.                 }
  982.                 anIntArrayArray929[l][i1] = anInt1265;
  983.             }
  984.             if (!npc.desc.aBoolean84) {
  985.                 k += 0x80000000;
  986.             }
  987.             worldController.method285(plane, npc.anInt1552, method42(plane, npc.y, npc.x), k, npc.y, (npc.anInt1540 - 1) * 64 + 60, npc.x, npc, npc.aBoolean1541);
  988.         }
  989.     }
  990.  
  991.     public boolean replayWave() {
  992.         return Signlink.wavereplay();
  993.     }
  994.  
  995.     public void loadError() {
  996.         String s = "ondemand";// was a constant parameter
  997.         try {
  998.             getAppletContext().showDocument(new URL(getCodeBase(), "loaderror_" + s + ".html"));
  999.         } catch (Exception exception) {
  1000.             exception.printStackTrace();
  1001.         }
  1002.         do {
  1003.             try {
  1004.                 Thread.sleep(1000L);
  1005.             } catch (Exception _ex) {
  1006.             }
  1007.         } while (true);
  1008.     }
  1009.    
  1010.     static final void sleep(long time) {
  1011.         if (time > 0L) {
  1012.             if (time % 10L != 0L)
  1013.                 threadSleep(time);
  1014.             else {
  1015.                 threadSleep(time - 1L);
  1016.                 threadSleep(1L);
  1017.             }
  1018.         }
  1019.     }
  1020.    
  1021.     static final void threadSleep(long time) {
  1022.         try {
  1023.             Thread.sleep(time);
  1024.         } catch (InterruptedException interruptedexception) {
  1025.             /* empty */
  1026.         }
  1027.     }
  1028.  
  1029.     public void buildInterfaceMenu(int i, RSInterface class9, int k, int l, int i1, int j1) {
  1030.         if (class9.type != 0 || class9.children == null || class9.aBoolean266) {
  1031.             return;
  1032.         }
  1033.         if (k < i || i1 < l || k > i + class9.width || i1 > l + class9.height) {
  1034.             return;
  1035.         }
  1036.         int k1 = class9.children.length;
  1037.         for (int l1 = 0; l1 < k1; l1++) {
  1038.             int i2 = class9.childX[l1] + i;
  1039.             int j2 = class9.childY[l1] + l - j1;
  1040.             RSInterface class9_1 = RSInterface.interfaceCache[class9.children[l1]];
  1041.             i2 += class9_1.anInt263;
  1042.             j2 += class9_1.anInt265;
  1043.             if ((class9_1.anInt230 >= 0 || class9_1.anInt216 != 0) && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1044.                 if (class9_1.anInt230 >= 0) {
  1045.                     anInt886 = class9_1.anInt230;
  1046.                 } else {
  1047.                     anInt886 = class9_1.id;
  1048.                 }
  1049.             }
  1050.             if (class9_1.type == 0) {
  1051.                 buildInterfaceMenu(i2, class9_1, k, j2, i1, class9_1.scrollPosition);
  1052.                 if (class9_1.scrollMax > class9_1.height) {
  1053.                     method65(i2 + class9_1.width, class9_1.height, k, i1, class9_1, j2, true, class9_1.scrollMax);
  1054.                 }
  1055.             } else {
  1056.                 if (class9_1.atActionType == 1 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1057.                     boolean flag = false;
  1058.                     if (class9_1.anInt214 != 0) {
  1059.                         flag = buildFriendsListMenu(class9_1);
  1060.                     }
  1061.                     if (!flag) {
  1062.                         menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip;
  1063.                         menuActionID[menuActionRow] = 315;
  1064.                         menuActionCmd3[menuActionRow] = class9_1.id;
  1065.                         menuActionRow++;
  1066.                     }
  1067.                 }
  1068.                 if (class9_1.atActionType == 2 && spellSelected == 0 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1069.                     String s = class9_1.selectedActionName;
  1070.                     if (s.indexOf(" ") != -1) {
  1071.                         s = s.substring(0, s.indexOf(" "));
  1072.                     }
  1073.                     menuActionName[menuActionRow] = s + " @gre@" + class9_1.spellName;
  1074.                     menuActionID[menuActionRow] = 626;
  1075.                     menuActionCmd3[menuActionRow] = class9_1.id;
  1076.                     menuActionRow++;
  1077.                 }
  1078.                 if (class9_1.atActionType == 3 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1079.                     menuActionName[menuActionRow] = "Close";
  1080.                     menuActionID[menuActionRow] = 200;
  1081.                     menuActionCmd3[menuActionRow] = class9_1.id;
  1082.                     menuActionRow++;
  1083.                 }
  1084.                 if (class9_1.atActionType == 4 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1085.                     menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip;
  1086.                     menuActionID[menuActionRow] = 169;
  1087.                     menuActionCmd3[menuActionRow] = class9_1.id;
  1088.                     menuActionRow++;
  1089.                 }
  1090.                 if (class9_1.atActionType == 5 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1091.                     menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip;
  1092.                     menuActionID[menuActionRow] = 646;
  1093.                     menuActionCmd3[menuActionRow] = class9_1.id;
  1094.                     menuActionRow++;
  1095.                 }
  1096.                 if (class9_1.atActionType == 6 && !aBoolean1149 && k >= i2 && i1 >= j2 && k < i2 + class9_1.width && i1 < j2 + class9_1.height) {
  1097.                     menuActionName[menuActionRow] = showInfo ? class9_1.tooltip + ", " + class9_1.id : class9_1.tooltip;
  1098.                     menuActionID[menuActionRow] = 679;
  1099.                     menuActionCmd3[menuActionRow] = class9_1.id;
  1100.                     menuActionRow++;
  1101.                 }
  1102.                 if (class9_1.type == 2) {
  1103.                     int k2 = 0;
  1104.                     for (int l2 = 0; l2 < class9_1.height; l2++) {
  1105.                         for (int i3 = 0; i3 < class9_1.width; i3++) {
  1106.                             int j3 = i2 + i3 * (32 + class9_1.invSpritePadX);
  1107.                             int k3 = j2 + l2 * (32 + class9_1.invSpritePadY);
  1108.                             if (k2 < 20) {
  1109.                                 j3 += class9_1.spritesX[k2];
  1110.                                 k3 += class9_1.spritesY[k2];
  1111.                             }
  1112.                             if (k >= j3 && i1 >= k3 && k < j3 + 32 && i1 < k3 + 32) {
  1113.                                 mouseInvInterfaceIndex = k2;
  1114.                                 lastActiveInvInterface = class9_1.id;
  1115.                                 if (class9_1.inv[k2] > 0) {
  1116.                                     ItemDef itemDef = ItemDef.forID(class9_1.inv[k2] - 1);
  1117.                                     if (itemSelected == 1 && class9_1.isInventoryInterface) {
  1118.                                         if (class9_1.id != anInt1284 || k2 != anInt1283) {
  1119.                                             menuActionName[menuActionRow] = "Use " + selectedItemName + " with @lre@" + itemDef.name;
  1120.                                             menuActionID[menuActionRow] = 870;
  1121.                                             menuActionCmd1[menuActionRow] = itemDef.id;
  1122.                                             menuActionCmd2[menuActionRow] = k2;
  1123.                                             menuActionCmd3[menuActionRow] = class9_1.id;
  1124.                                             menuActionRow++;
  1125.                                         }
  1126.                                     } else if (spellSelected == 1 && class9_1.isInventoryInterface) {
  1127.                                         if ((spellUsableOn & 0x10) == 16) {
  1128.                                             menuActionName[menuActionRow] = spellTooltip + " @lre@" + itemDef.name;
  1129.                                             menuActionID[menuActionRow] = 543;
  1130.                                             menuActionCmd1[menuActionRow] = itemDef.id;
  1131.                                             menuActionCmd2[menuActionRow] = k2;
  1132.                                             menuActionCmd3[menuActionRow] = class9_1.id;
  1133.                                             menuActionRow++;
  1134.                                         }
  1135.                                     } else {
  1136.                                         if (class9_1.isInventoryInterface) {
  1137.                                             for (int l3 = 4; l3 >= 3; l3--) {
  1138.                                                 if (itemDef.actions != null && itemDef.actions[l3] != null) {
  1139.                                                     menuActionName[menuActionRow] = itemDef.actions[l3] + " @lre@" + itemDef.name;
  1140.                                                     if (l3 == 3) {
  1141.                                                         menuActionID[menuActionRow] = 493;
  1142.                                                     }
  1143.                                                     if (l3 == 4) {
  1144.                                                         menuActionID[menuActionRow] = 847;
  1145.                                                     }
  1146.                                                     menuActionCmd1[menuActionRow] = itemDef.id;
  1147.                                                     menuActionCmd2[menuActionRow] = k2;
  1148.                                                     menuActionCmd3[menuActionRow] = class9_1.id;
  1149.                                                     menuActionRow++;
  1150.                                                 } else if (l3 == 4) {
  1151.                                                     menuActionName[menuActionRow] = "Drop @lre@" + itemDef.name;
  1152.                                                     menuActionID[menuActionRow] = 847;
  1153.                                                     menuActionCmd1[menuActionRow] = itemDef.id;
  1154.                                                     menuActionCmd2[menuActionRow] = k2;
  1155.                                                     menuActionCmd3[menuActionRow] = class9_1.id;
  1156.                                                     menuActionRow++;
  1157.                                                 }
  1158.                                             }
  1159.  
  1160.                                         }
  1161.                                         if (class9_1.usableItemInterface) {
  1162.                                             menuActionName[menuActionRow] = "Use @lre@" + itemDef.name;
  1163.                                             menuActionID[menuActionRow] = 447;
  1164.                                             menuActionCmd1[menuActionRow] = itemDef.id;
  1165.                                             menuActionCmd2[menuActionRow] = k2;
  1166.                                             menuActionCmd3[menuActionRow] = class9_1.id;
  1167.                                             menuActionRow++;
  1168.                                         }
  1169.                                         if (class9_1.isInventoryInterface && itemDef.actions != null) {
  1170.                                             for (int i4 = 2; i4 >= 0; i4--) {
  1171.                                                 if (itemDef.actions[i4] != null) {
  1172.                                                     menuActionName[menuActionRow] = itemDef.actions[i4] + " @lre@" + itemDef.name;
  1173.                                                     if (i4 == 0) {
  1174.                                                         menuActionID[menuActionRow] = 74;
  1175.                                                     }
  1176.                                                     if (i4 == 1) {
  1177.                                                         menuActionID[menuActionRow] = 454;
  1178.                                                     }
  1179.                                                     if (i4 == 2) {
  1180.                                                         menuActionID[menuActionRow] = 539;
  1181.                                                     }
  1182.                                                     menuActionCmd1[menuActionRow] = itemDef.id;
  1183.                                                     menuActionCmd2[menuActionRow] = k2;
  1184.                                                     menuActionCmd3[menuActionRow] = class9_1.id;
  1185.                                                     menuActionRow++;
  1186.                                                 }
  1187.                                             }
  1188.  
  1189.                                         }
  1190.                                         if (class9_1.actions != null) {
  1191.                                             for (int j4 = 4; j4 >= 0; j4--) {
  1192.                                                 if (class9_1.actions[j4] != null) {
  1193.                                                     menuActionName[menuActionRow] = class9_1.actions[j4] + " @lre@" + itemDef.name;
  1194.                                                     if (j4 == 0) {
  1195.                                                         menuActionID[menuActionRow] = 632;
  1196.                                                     }
  1197.                                                     if (j4 == 1) {
  1198.                                                         menuActionID[menuActionRow] = 78;
  1199.                                                     }
  1200.                                                     if (j4 == 2) {
  1201.                                                         menuActionID[menuActionRow] = 867;
  1202.                                                     }
  1203.                                                     if (j4 == 3) {
  1204.                                                         menuActionID[menuActionRow] = 431;
  1205.                                                     }
  1206.                                                     if (j4 == 4) {
  1207.                                                         menuActionID[menuActionRow] = 53;
  1208.                                                     }
  1209.                                                     menuActionCmd1[menuActionRow] = itemDef.id;
  1210.                                                     menuActionCmd2[menuActionRow] = k2;
  1211.                                                     menuActionCmd3[menuActionRow] = class9_1.id;
  1212.                                                     menuActionRow++;
  1213.                                                 }
  1214.                                             }
  1215.  
  1216.                                         }
  1217.                                         menuActionName[menuActionRow] = "Examine @lre@" + itemDef.name + (showInfo ? " @gre@(@whi@" + (class9_1.inv[k2] - 1) + "@gre@)" : "");
  1218.                                         menuActionID[menuActionRow] = 1125;
  1219.                                         menuActionCmd1[menuActionRow] = itemDef.id;
  1220.                                         menuActionCmd2[menuActionRow] = k2;
  1221.                                         menuActionCmd3[menuActionRow] = class9_1.id;
  1222.                                         menuActionRow++;
  1223.                                     }
  1224.                                 }
  1225.                             }
  1226.                             k2++;
  1227.                         }
  1228.  
  1229.                     }
  1230.  
  1231.                 }
  1232.             }
  1233.         }
  1234.  
  1235.     }
  1236.  
  1237.     public void method30(int j, int k, int l, int i1, int j1) {
  1238.         scrollBar1.method361(i1, l);
  1239.         scrollBar2.method361(i1, l + j - 16);
  1240.         DrawingArea.method336(j - 32, l + 16, anInt1002, 16, i1);
  1241.         int k1 = (j - 32) * j / j1;
  1242.         if (k1 < 8) {
  1243.             k1 = 8;
  1244.         }
  1245.         int l1 = (j - 32 - k1) * k / (j1 - j);
  1246.         DrawingArea.method336(k1, l + 16 + l1, anInt1063, 16, i1);
  1247.         DrawingArea.method341(l + 16 + l1, anInt902, k1, i1);
  1248.         DrawingArea.method341(l + 16 + l1, anInt902, k1, i1 + 1);
  1249.         DrawingArea.method339(l + 16 + l1, anInt902, 16, i1);
  1250.         DrawingArea.method339(l + 17 + l1, anInt902, 16, i1);
  1251.         DrawingArea.method341(l + 16 + l1, anInt927, k1, i1 + 15);
  1252.         DrawingArea.method341(l + 17 + l1, anInt927, k1 - 1, i1 + 14);
  1253.         DrawingArea.method339(l + 15 + l1 + k1, anInt927, 16, i1);
  1254.         DrawingArea.method339(l + 14 + l1 + k1, anInt927, 15, i1 + 1);
  1255.     }
  1256.  
  1257.     public void updateNPCs(Stream stream, int i) {
  1258.         anInt839 = 0;
  1259.         anInt893 = 0;
  1260.         method139(stream);
  1261.         method46(i, stream);
  1262.         method86(stream);
  1263.         for (int k = 0; k < anInt839; k++) {
  1264.             int l = anIntArray840[k];
  1265.             if (npcArray[l].anInt1537 != loopCycle) {
  1266.                 npcArray[l].desc = null;
  1267.                 npcArray[l] = null;
  1268.             }
  1269.         }
  1270.  
  1271.         if (stream.currentOffset != i) {
  1272.             Signlink.reporterror(myUsername + " size mismatch in getnpcpos - pos:" + stream.currentOffset + " psize:" + i);
  1273.             throw new RuntimeException("eek");
  1274.         }
  1275.         for (int i1 = 0; i1 < npcCount; i1++) {
  1276.             if (npcArray[npcIndices[i1]] == null) {
  1277.                 Signlink.reporterror(myUsername + " null entry in npc list - pos:" + i1 + " size:" + npcCount);
  1278.                 throw new RuntimeException("eek");
  1279.             }
  1280.         }
  1281.  
  1282.     }
  1283.  
  1284.     public void processChatModeClick() {
  1285.         if (super.clickMode3 == 1) {
  1286.             if (super.saveClickX >= 6 && super.saveClickX <= 106 && super.saveClickY >= 467 && super.saveClickY <= 499) {
  1287.                 publicChatMode = (publicChatMode + 1) % 4;
  1288.                 aBoolean1233 = true;
  1289.                 inputTaken = true;
  1290.                 stream.createFrame(95);
  1291.                 stream.writeWordBigEndian(publicChatMode);
  1292.                 //stream.writeWordBigEndian(publicChatMode);
  1293.                 stream.writeWordBigEndian(privateChatMode);
  1294.                 stream.writeWordBigEndian(tradeMode);
  1295.             }
  1296.             if (super.saveClickX >= 135 && super.saveClickX <= 235 && super.saveClickY >= 467 && super.saveClickY <= 499) {
  1297.                 //publicChatMode = (publicChatMode + 1) % 3;
  1298.                 privateChatMode = (privateChatMode + 1) % 3;
  1299.                 aBoolean1233 = true;
  1300.                 inputTaken = true;
  1301.                 stream.createFrame(95);
  1302.                 stream.writeWordBigEndian(publicChatMode);
  1303.                 stream.writeWordBigEndian(privateChatMode);
  1304.                 stream.writeWordBigEndian(tradeMode);
  1305.             }
  1306.             if (super.saveClickX >= 273 && super.saveClickX <= 373 && super.saveClickY >= 467 && super.saveClickY <= 499) {
  1307.                 tradeMode = (tradeMode + 1) % 3;
  1308.                 aBoolean1233 = true;
  1309.                 inputTaken = true;
  1310.                 stream.createFrame(95);
  1311.                 stream.writeWordBigEndian(publicChatMode);
  1312.                 stream.writeWordBigEndian(privateChatMode);
  1313.                 stream.writeWordBigEndian(tradeMode);
  1314.             }
  1315.             if (super.saveClickX >= 412 && super.saveClickX <= 512 && super.saveClickY >= 467 && super.saveClickY <= 499) {
  1316.                 if (openInterfaceID == -1) {
  1317.                     closeOpenInterfaces();
  1318.                     reportAbuseInput = "";
  1319.                     canMute = false;
  1320.                     for (RSInterface element : RSInterface.interfaceCache) {
  1321.                         if (element == null || element.anInt214 != 600) {
  1322.                             continue;
  1323.                         }
  1324.                         reportAbuseInterfaceID = openInterfaceID = element.parentID;
  1325.                         break;
  1326.                     }
  1327.  
  1328.                 } else {
  1329.                     pushMessage("Please close the interface you have open before using 'report abuse'", 0, "");
  1330.                 }
  1331.             }
  1332.             anInt940++;
  1333.             if (anInt940 > 1386) {
  1334.                 anInt940 = 0;
  1335.                 stream.createFrame(165);
  1336.                 stream.writeWordBigEndian(0);
  1337.                 int j = stream.currentOffset;
  1338.                 stream.writeWordBigEndian(139);
  1339.                 stream.writeWordBigEndian(150);
  1340.                 stream.writeWord(32131);
  1341.                 stream.writeWordBigEndian((int) (Math.random() * 256D));
  1342.                 stream.writeWord(3250);
  1343.                 stream.writeWordBigEndian(177);
  1344.                 stream.writeWord(24859);
  1345.                 stream.writeWordBigEndian(119);
  1346.                 if ((int) (Math.random() * 2D) == 0) {
  1347.                     stream.writeWord(47234);
  1348.                 }
  1349.                 if ((int) (Math.random() * 2D) == 0) {
  1350.                     stream.writeWordBigEndian(21);
  1351.                 }
  1352.                 stream.writeBytes(stream.currentOffset - j);
  1353.             }
  1354.         }
  1355.     }
  1356.  
  1357.     public void method33(int i) {
  1358.         int action = Varp.cache[i].anInt709;
  1359.         if (action == 0) {
  1360.             return;
  1361.         }
  1362.         int config = variousSettings[i];
  1363.         if (action == 1) {
  1364.             if (config == 1) {
  1365.                 Texture.method372(0.90000000000000002D);
  1366.             }
  1367.             if (config == 2) {
  1368.                 Texture.method372(0.80000000000000004D);
  1369.             }
  1370.             if (config == 3) {
  1371.                 Texture.method372(0.69999999999999996D);
  1372.             }
  1373.             if (config == 4) {
  1374.                 Texture.method372(0.59999999999999998D);
  1375.             }
  1376.             ItemDef.mruNodes1.unlinkAll();
  1377.             welcomeScreenRaised = true;
  1378.         }
  1379.         if (action == 3) {
  1380.             int volume = 0;
  1381.             if (config == 0)
  1382.                 volume = 255;
  1383.             if (config == 1)
  1384.                 volume = 192;
  1385.             if (config == 2)
  1386.                 volume = 128;
  1387.             if (config == 3)
  1388.                 volume = 64;
  1389.             if (config == 4)
  1390.                 volume = 0;
  1391.             if (volume != musicVolume) {
  1392.                 if (musicVolume != 0 || currentSong == -1) {
  1393.                     if (volume != 0)
  1394.                         setVolume(volume);
  1395.                     else {
  1396.                         method55(false);
  1397.                         previousSong = 0;
  1398.                     }
  1399.                 } else {
  1400.                     method56(volume, false, currentSong);
  1401.                     previousSong = 0;//TODO temp music
  1402.                 }
  1403.                 musicVolume = volume;
  1404.             }
  1405.         }
  1406.         if (action == 4) {
  1407.             SoundPlayer.setVolume(config);
  1408.             if (config == 0) {
  1409.                 aBoolean848 = true;
  1410.                 setWaveVolume(0);
  1411.             }
  1412.             if (config == 1) {
  1413.                 aBoolean848 = true;
  1414.                 setWaveVolume(-400);
  1415.             }
  1416.             if (config == 2) {
  1417.                 aBoolean848 = true;
  1418.                 setWaveVolume(-800);
  1419.             }
  1420.             if (config == 3) {
  1421.                 aBoolean848 = true;
  1422.                 setWaveVolume(-1200);
  1423.             }
  1424.             if (config == 4) {
  1425.                 aBoolean848 = false;
  1426.             }
  1427.         }
  1428.         if (action == 5) {
  1429.             anInt1253 = config;
  1430.         }
  1431.         if (action == 6) {
  1432.             anInt1249 = config;
  1433.         }
  1434.         if (action == 8) {
  1435.             splitpublicChat = config;
  1436.             inputTaken = true;
  1437.         }
  1438.         if (action == 9) {
  1439.             anInt913 = config;
  1440.         }
  1441.     }
  1442.  
  1443.     public void updateEntities() {
  1444.         try {
  1445.             int anInt974 = 0;
  1446.             for (int j = -1; j < playerCount + npcCount; j++) {
  1447.                 Object obj;
  1448.                 if (j == -1) {
  1449.                     obj = myPlayer;
  1450.                 } else if (j < playerCount) {
  1451.                     obj = playerArray[playerIndices[j]];
  1452.                 } else {
  1453.                     obj = npcArray[npcIndices[j - playerCount]];
  1454.                 }
  1455.                 if (obj == null || !((Entity) obj).isVisible()) {
  1456.                     continue;
  1457.                 }
  1458.                 if (obj instanceof NPC) {
  1459.                     EntityDef entityDef = ((NPC) obj).desc;
  1460.                     if (entityDef.childrenIDs != null) {
  1461.                         entityDef = entityDef.method161();
  1462.                     }
  1463.                     if (entityDef == null) {
  1464.                         continue;
  1465.                     }
  1466.                 }
  1467.                 if (j < playerCount) {
  1468.                     int l = 30;
  1469.                     Player player = (Player) obj;
  1470.                     if (player.headIcon >= 0) {
  1471.                         npcScreenPos(((Entity) obj), ((Entity) obj).height + 15);
  1472.                         if (spriteDrawX > -1) {
  1473.                             if (player.skullIcon < 2) {
  1474.                                 skullIcons[player.skullIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l);
  1475.                                 l += 25;
  1476.                             }
  1477.                             if (player.headIcon < 7) {
  1478.                                 headIcons[player.headIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l);
  1479.                                 l += 18;
  1480.                             }
  1481.                         }
  1482.                     }
  1483.                     if (j >= 0 && anInt855 == 10 && anInt933 == playerIndices[j]) {
  1484.                         npcScreenPos(((Entity) obj), ((Entity) obj).height + 15);
  1485.                         if (spriteDrawX > -1) {
  1486.                             headIconsHint[1].drawSprite(spriteDrawX - 12, spriteDrawY - l);
  1487.                         }
  1488.                     }
  1489.                 } else {
  1490.                     EntityDef entityDef_1 = ((NPC) obj).desc;
  1491.                     if (entityDef_1.anInt75 >= 0 && entityDef_1.anInt75 < headIcons.length) {
  1492.                         npcScreenPos(((Entity) obj), ((Entity) obj).height + 15);
  1493.                         if (spriteDrawX > -1) {
  1494.                             headIcons[entityDef_1.anInt75].drawSprite(spriteDrawX - 12, spriteDrawY - 30);
  1495.                         }
  1496.                     }
  1497.                     if (anInt855 == 1 && anInt1222 == npcIndices[j - playerCount] && loopCycle % 20 < 10) {
  1498.                         npcScreenPos(((Entity) obj), ((Entity) obj).height + 15);
  1499.                         if (spriteDrawX > -1) {
  1500.                             headIconsHint[0].drawSprite(spriteDrawX - 12, spriteDrawY - 28);
  1501.                         }
  1502.                     }
  1503.                 }
  1504.                 if (((Entity) obj).textSpoken != null && (j >= playerCount || publicChatMode == 0 || publicChatMode == 3 || publicChatMode == 1 && isFriendOrSelf(((Player) obj).name))) {
  1505.                     npcScreenPos(((Entity) obj), ((Entity) obj).height);
  1506.                     if (spriteDrawX > -1 && anInt974 < anInt975) {
  1507.                         anIntArray979[anInt974] = chatTextDrawingArea.method384(((Entity) obj).textSpoken) / 2;
  1508.                         anIntArray978[anInt974] = chatTextDrawingArea.anInt1497;
  1509.                         anIntArray976[anInt974] = spriteDrawX;
  1510.                         anIntArray977[anInt974] = spriteDrawY;
  1511.                         anIntArray980[anInt974] = ((Entity) obj).anInt1513;
  1512.                         anIntArray981[anInt974] = ((Entity) obj).anInt1531;
  1513.                         anIntArray982[anInt974] = ((Entity) obj).textCycle;
  1514.                         aStringArray983[anInt974++] = ((Entity) obj).textSpoken;
  1515.                         if (anInt1249 == 0 && ((Entity) obj).anInt1531 >= 1 && ((Entity) obj).anInt1531 <= 3) {
  1516.                             anIntArray978[anInt974] += 10;
  1517.                             anIntArray977[anInt974] += 5;
  1518.                         }
  1519.                         if (anInt1249 == 0 && ((Entity) obj).anInt1531 == 4) {
  1520.                             anIntArray979[anInt974] = 60;
  1521.                         }
  1522.                         if (anInt1249 == 0 && ((Entity) obj).anInt1531 == 5) {
  1523.                             anIntArray978[anInt974] += 5;
  1524.                         }
  1525.                     }
  1526.                 }
  1527.                 if (((Entity) obj).loopCycleStatus > loopCycle) {
  1528.                     try {
  1529.                         npcScreenPos(((Entity) obj), ((Entity) obj).height + 15);
  1530.                         if (spriteDrawX > -1) {
  1531.                             int i1 = ((Entity) obj).currentHealth * 30 / ((Entity) obj).maxHealth;
  1532.                             if (i1 > 30) {
  1533.                                 i1 = 30;
  1534.                             }
  1535.                             DrawingArea.method336(5, spriteDrawY - 3, 65280, i1, spriteDrawX - 15);
  1536.                             DrawingArea.method336(5, spriteDrawY - 3, 0xff0000, 30 - i1, spriteDrawX - 15 + i1);
  1537.                         }
  1538.                     } catch (Exception e) {
  1539.                     }
  1540.                 }
  1541.                 for (int j1 = 0; j1 < 4; j1++) {
  1542.                     if (((Entity) obj).hitsLoopCycle[j1] > loopCycle) {
  1543.                         npcScreenPos(((Entity) obj), ((Entity) obj).height / 2);
  1544.                         if (spriteDrawX > -1) {
  1545.                             if (j1 == 1) {
  1546.                                 spriteDrawY -= 20;
  1547.                             }
  1548.                             if (j1 == 2) {
  1549.                                 spriteDrawX -= 15;
  1550.                                 spriteDrawY -= 10;
  1551.                             }
  1552.                             if (j1 == 3) {
  1553.                                 spriteDrawX += 15;
  1554.                                 spriteDrawY -= 10;
  1555.                             }
  1556.                             hitMarks[((Entity) obj).hitMarkTypes[j1]].drawSprite(spriteDrawX - 12, spriteDrawY - 12);
  1557.                             aTextDrawingArea_1270.drawText(0, String.valueOf(((Entity) obj).hitArray[j1]), spriteDrawY + 4, spriteDrawX);
  1558.                             aTextDrawingArea_1270.drawText(0xffffff, String.valueOf(((Entity) obj).hitArray[j1]), spriteDrawY + 3, spriteDrawX - 1);
  1559.                         }
  1560.                     }
  1561.                 }
  1562.             }
  1563.             for (int k = 0; k < anInt974; k++) {
  1564.                 int k1 = anIntArray976[k];
  1565.                 int l1 = anIntArray977[k];
  1566.                 int j2 = anIntArray979[k];
  1567.                 int k2 = anIntArray978[k];
  1568.                 boolean flag = true;
  1569.                 while (flag) {
  1570.                     flag = false;
  1571.                     for (int l2 = 0; l2 < k; l2++) {
  1572.                         if (l1 + 2 > anIntArray977[l2] - anIntArray978[l2] && l1 - k2 < anIntArray977[l2] + 2 && k1 - j2 < anIntArray976[l2] + anIntArray979[l2] && k1 + j2 > anIntArray976[l2] - anIntArray979[l2] && anIntArray977[l2] - anIntArray978[l2] < l1) {
  1573.                             l1 = anIntArray977[l2] - anIntArray978[l2];
  1574.                             flag = true;
  1575.                         }
  1576.                     }
  1577.  
  1578.                 }
  1579.                 spriteDrawX = anIntArray976[k];
  1580.                 spriteDrawY = anIntArray977[k] = l1;
  1581.                 String s = aStringArray983[k];
  1582.                 if (anInt1249 == 0) {
  1583.                     int i3 = 0xffff00;
  1584.                     if (anIntArray980[k] < 6) {
  1585.                         i3 = anIntArray965[anIntArray980[k]];
  1586.                     }
  1587.                     if (anIntArray980[k] == 6) {
  1588.                         i3 = anInt1265 % 20 >= 10 ? 0xffff00 : 0xff0000;
  1589.                     }
  1590.                     if (anIntArray980[k] == 7) {
  1591.                         i3 = anInt1265 % 20 >= 10 ? 65535 : 255;
  1592.                     }
  1593.                     if (anIntArray980[k] == 8) {
  1594.                         i3 = anInt1265 % 20 >= 10 ? 0x80ff80 : 45056;
  1595.                     }
  1596.                     if (anIntArray980[k] == 9) {
  1597.                         int j3 = 150 - anIntArray982[k];
  1598.                         if (j3 < 50) {
  1599.                             i3 = 0xff0000 + 1280 * j3;
  1600.                         } else if (j3 < 100) {
  1601.                             i3 = 0xffff00 - 0x50000 * (j3 - 50);
  1602.                         } else if (j3 < 150) {
  1603.                             i3 = 65280 + 5 * (j3 - 100);
  1604.                         }
  1605.                     }
  1606.                     if (anIntArray980[k] == 10) {
  1607.                         int k3 = 150 - anIntArray982[k];
  1608.                         if (k3 < 50) {
  1609.                             i3 = 0xff0000 + 5 * k3;
  1610.                         } else if (k3 < 100) {
  1611.                             i3 = 0xff00ff - 0x50000 * (k3 - 50);
  1612.                         } else if (k3 < 150) {
  1613.                             i3 = 255 + 0x50000 * (k3 - 100) - 5 * (k3 - 100);
  1614.                         }
  1615.                     }
  1616.                     if (anIntArray980[k] == 11) {
  1617.                         int l3 = 150 - anIntArray982[k];
  1618.                         if (l3 < 50) {
  1619.                             i3 = 0xffffff - 0x50005 * l3;
  1620.                         } else if (l3 < 100) {
  1621.                             i3 = 65280 + 0x50005 * (l3 - 50);
  1622.                         } else if (l3 < 150) {
  1623.                             i3 = 0xffffff - 0x50000 * (l3 - 100);
  1624.                         }
  1625.                     }
  1626.                     if (anIntArray981[k] == 0) {
  1627.                         chatTextDrawingArea.drawText(0, s, spriteDrawY + 1, spriteDrawX);
  1628.                         chatTextDrawingArea.drawText(i3, s, spriteDrawY, spriteDrawX);
  1629.                     }
  1630.                     if (anIntArray981[k] == 1) {
  1631.                         chatTextDrawingArea.method386(0, s, spriteDrawX, anInt1265, spriteDrawY + 1);
  1632.                         chatTextDrawingArea.method386(i3, s, spriteDrawX, anInt1265, spriteDrawY);
  1633.                     }
  1634.                     if (anIntArray981[k] == 2) {
  1635.                         chatTextDrawingArea.method387(spriteDrawX, s, anInt1265, spriteDrawY + 1, 0);
  1636.                         chatTextDrawingArea.method387(spriteDrawX, s, anInt1265, spriteDrawY, i3);
  1637.                     }
  1638.                     if (anIntArray981[k] == 3) {
  1639.                         chatTextDrawingArea.method388(150 - anIntArray982[k], s, anInt1265, spriteDrawY + 1, spriteDrawX, 0);
  1640.                         chatTextDrawingArea.method388(150 - anIntArray982[k], s, anInt1265, spriteDrawY, spriteDrawX, i3);
  1641.                     }
  1642.                     if (anIntArray981[k] == 4) {
  1643.                         int i4 = chatTextDrawingArea.method384(s);
  1644.                         int k4 = (150 - anIntArray982[k]) * (i4 + 100) / 150;
  1645.                         DrawingArea.setDrawingArea(334, spriteDrawX - 50, spriteDrawX + 50, 0);
  1646.                         chatTextDrawingArea.method385(0, s, spriteDrawY + 1, spriteDrawX + 50 - k4);
  1647.                         chatTextDrawingArea.method385(i3, s, spriteDrawY, spriteDrawX + 50 - k4);
  1648.                         DrawingArea.defaultDrawingAreaSize();
  1649.                     }
  1650.                     if (anIntArray981[k] == 5) {
  1651.                         int j4 = 150 - anIntArray982[k];
  1652.                         int l4 = 0;
  1653.                         if (j4 < 25) {
  1654.                             l4 = j4 - 25;
  1655.                         } else if (j4 > 125) {
  1656.                             l4 = j4 - 125;
  1657.                         }
  1658.                         DrawingArea.setDrawingArea(spriteDrawY + 5, 0, 512, spriteDrawY - chatTextDrawingArea.anInt1497 - 1);
  1659.                         chatTextDrawingArea.drawText(0, s, spriteDrawY + 1 + l4, spriteDrawX);
  1660.                         chatTextDrawingArea.drawText(i3, s, spriteDrawY + l4, spriteDrawX);
  1661.                         DrawingArea.defaultDrawingAreaSize();
  1662.                     }
  1663.                 } else {
  1664.                     chatTextDrawingArea.drawText(0, s, spriteDrawY + 1, spriteDrawX);
  1665.                     chatTextDrawingArea.drawText(0xffff00, s, spriteDrawY, spriteDrawX);
  1666.                 }
  1667.             }
  1668.         } catch (Exception e) {
  1669.         }
  1670.     }
  1671.  
  1672.     public void delFriend(long l) {
  1673.         try {
  1674.             if (l == 0L) {
  1675.                 return;
  1676.             }
  1677.             for (int i = 0; i < friendsCount; i++) {
  1678.                 if (friendsListAsLongs[i] != l) {
  1679.                     continue;
  1680.                 }
  1681.                 friendsCount--;
  1682.                 needDrawTabArea = true;
  1683.                 for (int j = i; j < friendsCount; j++) {
  1684.                     friendsList[j] = friendsList[j + 1];
  1685.                     friendsNodeIDs[j] = friendsNodeIDs[j + 1];
  1686.                     friendsListAsLongs[j] = friendsListAsLongs[j + 1];
  1687.                 }
  1688.  
  1689.                 stream.createFrame(215);
  1690.                 stream.writeQWord(l);
  1691.                 break;
  1692.             }
  1693.         } catch (RuntimeException runtimeexception) {
  1694.             Signlink.reporterror("18622, " + false + ", " + l + ", " + runtimeexception.toString());
  1695.             throw new RuntimeException();
  1696.         }
  1697.     }
  1698.  
  1699.     public void drawTabArea() {
  1700.         aRSImageProducer_1163.initDrawingArea();
  1701.         Texture.lineOffsets = tabAreaOffsets;
  1702.         invBack.method361(0, 0);
  1703.         if (invOverlayInterfaceID != -1) {
  1704.             drawInterface(0, 0, RSInterface.interfaceCache[invOverlayInterfaceID], 0);
  1705.         } else if (tabInterfaceIDs[tabID] != -1) {
  1706.             drawInterface(0, 0, RSInterface.interfaceCache[tabInterfaceIDs[tabID]], 0);
  1707.         }
  1708.         if (menuOpen && menuScreenArea == 1) {
  1709.             drawMenu();
  1710.         }
  1711.         aRSImageProducer_1163.drawGraphics(205, super.graphics, 553);
  1712.         aRSImageProducer_1165.initDrawingArea();
  1713.         Texture.lineOffsets = chatBoxAreaOffsets;
  1714.     }
  1715.  
  1716.     public void method37(int j) {
  1717.         if (!lowMem) {
  1718.             if (Texture.anIntArray1480[17] >= j) {
  1719.                 Background background = Texture.aBackgroundArray1474s[17];
  1720.                 int k = background.anInt1452 * background.anInt1453 - 1;
  1721.                 int j1 = background.anInt1452 * anInt945 * 2;
  1722.                 byte abyte0[] = background.aByteArray1450;
  1723.                 byte abyte3[] = aByteArray912;
  1724.                 for (int i2 = 0; i2 <= k; i2++) {
  1725.                     abyte3[i2] = abyte0[i2 - j1 & k];
  1726.                 }
  1727.  
  1728.                 background.aByteArray1450 = abyte3;
  1729.                 aByteArray912 = abyte0;
  1730.                 Texture.method370(17);
  1731.             }
  1732.             if (Texture.anIntArray1480[24] >= j) {
  1733.                 Background background_1 = Texture.aBackgroundArray1474s[24];
  1734.                 int l = background_1.anInt1452 * background_1.anInt1453 - 1;
  1735.                 int k1 = background_1.anInt1452 * anInt945 * 2;
  1736.                 byte abyte1[] = background_1.aByteArray1450;
  1737.                 byte abyte4[] = aByteArray912;
  1738.                 for (int j2 = 0; j2 <= l; j2++) {
  1739.                     abyte4[j2] = abyte1[j2 - k1 & l];
  1740.                 }
  1741.  
  1742.                 background_1.aByteArray1450 = abyte4;
  1743.                 aByteArray912 = abyte1;
  1744.                 Texture.method370(24);
  1745.             }
  1746.             if (Texture.anIntArray1480[34] >= j) {
  1747.                 Background background_2 = Texture.aBackgroundArray1474s[34];
  1748.                 int i1 = background_2.anInt1452 * background_2.anInt1453 - 1;
  1749.                 int l1 = background_2.anInt1452 * anInt945 * 2;
  1750.                 byte abyte2[] = background_2.aByteArray1450;
  1751.                 byte abyte5[] = aByteArray912;
  1752.                 for (int k2 = 0; k2 <= i1; k2++) {
  1753.                     abyte5[k2] = abyte2[k2 - l1 & i1];
  1754.                 }
  1755.  
  1756.                 background_2.aByteArray1450 = abyte5;
  1757.                 aByteArray912 = abyte2;
  1758.                 Texture.method370(34);
  1759.             }
  1760.             if (Texture.anIntArray1480[40] >= j) {
  1761.                 Background background_2 = Texture.aBackgroundArray1474s[40];
  1762.                 int i1 = background_2.anInt1452 * background_2.anInt1453 - 1;
  1763.                 int l1 = background_2.anInt1452 * anInt945 * 2;
  1764.                 byte abyte2[] = background_2.aByteArray1450;
  1765.                 byte abyte5[] = aByteArray912;
  1766.                 for (int k2 = 0; k2 <= i1; k2++) {
  1767.                     abyte5[k2] = abyte2[k2 - l1 & i1];
  1768.                 }
  1769.  
  1770.                 background_2.aByteArray1450 = abyte5;
  1771.                 aByteArray912 = abyte2;
  1772.                 Texture.method370(40);
  1773.             }
  1774.         }
  1775.     }
  1776.  
  1777.     public void method38() {
  1778.         for (int i = -1; i < playerCount; i++) {
  1779.             int j;
  1780.             if (i == -1) {
  1781.                 j = myPlayerIndex;
  1782.             } else {
  1783.                 j = playerIndices[i];
  1784.             }
  1785.             Player player = playerArray[j];
  1786.             if (player != null && player.textCycle > 0) {
  1787.                 player.textCycle--;
  1788.                 if (player.textCycle == 0) {
  1789.                     player.textSpoken = null;
  1790.                 }
  1791.             }
  1792.         }
  1793.  
  1794.         for (int k = 0; k < npcCount; k++) {
  1795.             int l = npcIndices[k];
  1796.             NPC npc = npcArray[l];
  1797.             if (npc != null && npc.textCycle > 0) {
  1798.                 npc.textCycle--;
  1799.                 if (npc.textCycle == 0) {
  1800.                     npc.textSpoken = null;
  1801.                 }
  1802.             }
  1803.         }
  1804.  
  1805.     }
  1806.  
  1807.     public void calcCameraPos() {
  1808.         int i = anInt1098 * 128 + 64;
  1809.         int j = anInt1099 * 128 + 64;
  1810.         int k = method42(plane, j, i) - anInt1100;
  1811.         if (xCameraPos < i) {
  1812.             xCameraPos += anInt1101 + (i - xCameraPos) * anInt1102 / 1000;
  1813.             if (xCameraPos > i) {
  1814.                 xCameraPos = i;
  1815.             }
  1816.         }
  1817.         if (xCameraPos > i) {
  1818.             xCameraPos -= anInt1101 + (xCameraPos - i) * anInt1102 / 1000;
  1819.             if (xCameraPos < i) {
  1820.                 xCameraPos = i;
  1821.             }
  1822.         }
  1823.         if (zCameraPos < k) {
  1824.             zCameraPos += anInt1101 + (k - zCameraPos) * anInt1102 / 1000;
  1825.             if (zCameraPos > k) {
  1826.                 zCameraPos = k;
  1827.             }
  1828.         }
  1829.         if (zCameraPos > k) {
  1830.             zCameraPos -= anInt1101 + (zCameraPos - k) * anInt1102 / 1000;
  1831.             if (zCameraPos < k) {
  1832.                 zCameraPos = k;
  1833.             }
  1834.         }
  1835.         if (yCameraPos < j) {
  1836.             yCameraPos += anInt1101 + (j - yCameraPos) * anInt1102 / 1000;
  1837.             if (yCameraPos > j) {
  1838.                 yCameraPos = j;
  1839.             }
  1840.         }
  1841.         if (yCameraPos > j) {
  1842.             yCameraPos -= anInt1101 + (yCameraPos - j) * anInt1102 / 1000;
  1843.             if (yCameraPos < j) {
  1844.                 yCameraPos = j;
  1845.             }
  1846.         }
  1847.         i = anInt995 * 128 + 64;
  1848.         j = anInt996 * 128 + 64;
  1849.         k = method42(plane, j, i) - anInt997;
  1850.         int l = i - xCameraPos;
  1851.         int i1 = k - zCameraPos;
  1852.         int j1 = j - yCameraPos;
  1853.         int k1 = (int) Math.sqrt(l * l + j1 * j1);
  1854.         int l1 = (int) (Math.atan2(i1, k1) * 325.94900000000001D) & 0x7ff;
  1855.         int i2 = (int) (Math.atan2(l, j1) * -325.94900000000001D) & 0x7ff;
  1856.         if (l1 < 128) {
  1857.             l1 = 128;
  1858.         }
  1859.         if (l1 > 383) {
  1860.             l1 = 383;
  1861.         }
  1862.         if (yCameraCurve < l1) {
  1863.             yCameraCurve += anInt998 + (l1 - yCameraCurve) * anInt999 / 1000;
  1864.             if (yCameraCurve > l1) {
  1865.                 yCameraCurve = l1;
  1866.             }
  1867.         }
  1868.         if (yCameraCurve > l1) {
  1869.             yCameraCurve -= anInt998 + (yCameraCurve - l1) * anInt999 / 1000;
  1870.             if (yCameraCurve < l1) {
  1871.                 yCameraCurve = l1;
  1872.             }
  1873.         }
  1874.         int j2 = i2 - xCameraCurve;
  1875.         if (j2 > 1024) {
  1876.             j2 -= 2048;
  1877.         }
  1878.         if (j2 < -1024) {
  1879.             j2 += 2048;
  1880.         }
  1881.         if (j2 > 0) {
  1882.             xCameraCurve += anInt998 + j2 * anInt999 / 1000;
  1883.             xCameraCurve &= 0x7ff;
  1884.         }
  1885.         if (j2 < 0) {
  1886.             xCameraCurve -= anInt998 + -j2 * anInt999 / 1000;
  1887.             xCameraCurve &= 0x7ff;
  1888.         }
  1889.         int k2 = i2 - xCameraCurve;
  1890.         if (k2 > 1024) {
  1891.             k2 -= 2048;
  1892.         }
  1893.         if (k2 < -1024) {
  1894.             k2 += 2048;
  1895.         }
  1896.         if (k2 < 0 && j2 > 0 || k2 > 0 && j2 < 0) {
  1897.             xCameraCurve = i2;
  1898.         }
  1899.     }
  1900.  
  1901.     public void drawMenu() {
  1902.         int i = menuOffsetX;
  1903.         int j = menuOffsetY;
  1904.         int k = menuWidth;
  1905.         int l = anInt952;
  1906.         int i1 = 0x5d5447;
  1907.         DrawingArea.method336(l, j, i1, k, i);
  1908.         DrawingArea.method336(16, j + 1, 0, k - 2, i + 1);
  1909.         DrawingArea.fillPixels(j + 18, l - 19, 0, i + 1, k - 2);
  1910.         chatTextDrawingArea.method385(i1, "Choose Option", j + 14, i + 3);
  1911.         int j1 = super.mouseX;
  1912.         int k1 = super.mouseY;
  1913.         if (menuScreenArea == 0) {
  1914.             j1 -= 4;
  1915.             k1 -= 4;
  1916.         }
  1917.         if (menuScreenArea == 1) {
  1918.             j1 -= 553;
  1919.             k1 -= 205;
  1920.         }
  1921.         if (menuScreenArea == 2) {
  1922.             j1 -= 17;
  1923.             k1 -= 357;
  1924.         }
  1925.         for (int l1 = 0; l1 < menuActionRow; l1++) {
  1926.             int i2 = j + 31 + (menuActionRow - 1 - l1) * 15;
  1927.             int j2 = 0xffffff;
  1928.             if (j1 > i && j1 < i + k && k1 > i2 - 13 && k1 < i2 + 3) {
  1929.                 j2 = 0xffff00;
  1930.             }
  1931.             chatTextDrawingArea.method389(true, i + 3, j2, menuActionName[l1], i2);
  1932.         }
  1933.  
  1934.     }
  1935.  
  1936.     public void addFriend(long l) {
  1937.         try {
  1938.             if (l == 0L) {
  1939.                 return;
  1940.             }
  1941.             if (friendsCount >= 100 && anInt1046 != 1) {
  1942.                 pushMessage("Your friendlist is full. Max of 100 for free users, and 200 for members", 0, "");
  1943.                 return;
  1944.             }
  1945.             if (friendsCount >= 200) {
  1946.                 pushMessage("Your friendlist is full. Max of 100 for free users, and 200 for members", 0, "");
  1947.                 return;
  1948.             }
  1949.             String s = TextClass.fixName(TextClass.nameForLong(l));
  1950.             for (int i = 0; i < friendsCount; i++) {
  1951.                 if (friendsListAsLongs[i] == l) {
  1952.                     pushMessage(s + " is already on your friend list", 0, "");
  1953.                     return;
  1954.                 }
  1955.             }
  1956.             for (int j = 0; j < ignoreCount; j++) {
  1957.                 if (ignoreListAsLongs[j] == l) {
  1958.                     pushMessage("Please remove " + s + " from your ignore list first", 0, "");
  1959.                     return;
  1960.                 }
  1961.             }
  1962.  
  1963.             if (s.equals(myPlayer.name)) {
  1964.                 return;
  1965.             } else {
  1966.                 friendsList[friendsCount] = s;
  1967.                 friendsListAsLongs[friendsCount] = l;
  1968.                 friendsNodeIDs[friendsCount] = 0;
  1969.                 friendsCount++;
  1970.                 needDrawTabArea = true;
  1971.                 stream.createFrame(188);
  1972.                 stream.writeQWord(l);
  1973.                 return;
  1974.             }
  1975.         } catch (RuntimeException runtimeexception) {
  1976.             Signlink.reporterror("15283, " + (byte) 68 + ", " + l + ", " + runtimeexception.toString());
  1977.         }
  1978.         throw new RuntimeException();
  1979.     }
  1980.  
  1981.     public int method42(int i, int j, int k) {
  1982.         int l = k >> 7;
  1983.         int i1 = j >> 7;
  1984.         if (l < 0 || i1 < 0 || l > 103 || i1 > 103) {
  1985.             return 0;
  1986.         }
  1987.         int j1 = i;
  1988.         if (j1 < 3 && (byteGroundArray[1][l][i1] & 2) == 2) {
  1989.             j1++;
  1990.         }
  1991.         int k1 = k & 0x7f;
  1992.         int l1 = j & 0x7f;
  1993.         int i2 = intGroundArray[j1][l][i1] * (128 - k1) + intGroundArray[j1][l + 1][i1] * k1 >> 7;
  1994.         int j2 = intGroundArray[j1][l][i1 + 1] * (128 - k1) + intGroundArray[j1][l + 1][i1 + 1] * k1 >> 7;
  1995.         return i2 * (128 - l1) + j2 * l1 >> 7;
  1996.     }
  1997.  
  1998.     public static String intToKOrMil(int j) {
  1999.         if (j < 0x186a0) {
  2000.             return String.valueOf(j);
  2001.         }
  2002.         if (j < 0x989680) {
  2003.             return j / 1000 + "K";
  2004.         } else {
  2005.             return j / 0xf4240 + "M";
  2006.         }
  2007.     }
  2008.  
  2009.     public void resetLogout() {
  2010.         try {
  2011.             if (socketStream != null) {
  2012.                 socketStream.close();
  2013.             }
  2014.         } catch (Exception _ex) {
  2015.         }
  2016.         socketStream = null;
  2017.         loggedIn = false;
  2018.         loginScreenState = 0;
  2019.         // myUsername = "";
  2020.         // myPassword = "";
  2021.         unlinkMRUNodes();
  2022.         worldController.initToNull();
  2023.         for (int i = 0; i < 4; i++) {
  2024.             aClass11Array1230[i].method210();
  2025.         }
  2026.  
  2027.         System.gc();
  2028.         stopMidi();
  2029.         currentSong = -1;
  2030.         nextSong = -1;
  2031.         previousSong = 0;
  2032.         method58(10, musicVolume, false, 0);
  2033.     }
  2034.  
  2035.     public void method45() {
  2036.         aBoolean1031 = true;
  2037.         for (int j = 0; j < 7; j++) {
  2038.             anIntArray1065[j] = -1;
  2039.             for (int k = 0; k < IDK.length; k++) {
  2040.                 if (IDK.cache[k].aBoolean662 || IDK.cache[k].anInt657 != j + (aBoolean1047 ? 0 : 7)) {
  2041.                     continue;
  2042.                 }
  2043.                 anIntArray1065[j] = k;
  2044.                 break;
  2045.             }
  2046.  
  2047.         }
  2048.  
  2049.     }
  2050.  
  2051.     public void method46(int i, Stream stream) {
  2052.         while (stream.bitPosition + 21 < i * 8) {
  2053.             int k = stream.readBits(14);
  2054.             if (k == 16383) {
  2055.                 break;
  2056.             }
  2057.             if (npcArray[k] == null) {
  2058.                 npcArray[k] = new NPC();
  2059.             }
  2060.             NPC npc = npcArray[k];
  2061.             npcIndices[npcCount++] = k;
  2062.             npc.anInt1537 = loopCycle;
  2063.             int l = stream.readBits(5);
  2064.             if (l > 15) {
  2065.                 l -= 32;
  2066.             }
  2067.             int i1 = stream.readBits(5);
  2068.             if (i1 > 15) {
  2069.                 i1 -= 32;
  2070.             }
  2071.             int j1 = stream.readBits(1);
  2072.             npc.desc = EntityDef.forID(stream.readBits(ClientSettings.NPC_BITS));
  2073.             int k1 = stream.readBits(1);
  2074.             if (k1 == 1) {
  2075.                 anIntArray894[anInt893++] = k;
  2076.             }
  2077.             npc.anInt1540 = npc.desc.aByte68;
  2078.             npc.anInt1504 = npc.desc.anInt79;
  2079.             npc.anInt1554 = npc.desc.anInt67;
  2080.             npc.anInt1555 = npc.desc.anInt58;
  2081.             npc.anInt1556 = npc.desc.anInt83;
  2082.             npc.anInt1557 = npc.desc.anInt55;
  2083.             npc.anInt1511 = npc.desc.anInt77;
  2084.             npc.setPos(myPlayer.smallX[0] + i1, myPlayer.smallY[0] + l, j1 == 1);
  2085.         }
  2086.         stream.finishBitAccess();
  2087.     }
  2088.  
  2089.     public void processGameLoop() {
  2090.         if (rsAlreadyLoaded || loadingError || genericLoadingError) {
  2091.             return;
  2092.         }
  2093.         loopCycle++;
  2094.         if (!loggedIn) {
  2095.             processLoginScreenInput();
  2096.         } else {
  2097.             mainGameProcessor();
  2098.         }
  2099.         processOnDemandQueue();
  2100.         method49();
  2101.     }
  2102.  
  2103.     public void method47(boolean flag) {
  2104.         if (myPlayer.x >> 7 == destX && myPlayer.y >> 7 == destY) {
  2105.             destX = 0;
  2106.         }
  2107.         int j = playerCount;
  2108.         if (flag) {
  2109.             j = 1;
  2110.         }
  2111.         for (int l = 0; l < j; l++) {
  2112.             Player player;
  2113.             int i1;
  2114.             if (flag) {
  2115.                 player = myPlayer;
  2116.                 i1 = myPlayerIndex << 14;
  2117.             } else {
  2118.                 player = playerArray[playerIndices[l]];
  2119.                 i1 = playerIndices[l] << 14;
  2120.             }
  2121.             if (player == null || !player.isVisible()) {
  2122.                 continue;
  2123.             }
  2124.             player.aBoolean1699 = (lowMem && playerCount > 50 || playerCount > 200) && !flag && player.anInt1517 == player.anInt1511;
  2125.             int j1 = player.x >> 7;
  2126.             int k1 = player.y >> 7;
  2127.             if (j1 < 0 || j1 >= 104 || k1 < 0 || k1 >= 104) {
  2128.                 continue;
  2129.             }
  2130.             if (player.aModel_1714 != null && loopCycle >= player.anInt1707 && loopCycle < player.anInt1708) {
  2131.                 player.aBoolean1699 = false;
  2132.                 player.anInt1709 = method42(plane, player.y, player.x);
  2133.                 worldController.method286(plane, player.y, player, player.anInt1552, player.anInt1722, player.x, player.anInt1709, player.anInt1719, player.anInt1721, i1, player.anInt1720);
  2134.                 continue;
  2135.             }
  2136.             if ((player.x & 0x7f) == 64 && (player.y & 0x7f) == 64) {
  2137.                 if (anIntArrayArray929[j1][k1] == anInt1265) {
  2138.                     continue;
  2139.                 }
  2140.                 anIntArrayArray929[j1][k1] = anInt1265;
  2141.             }
  2142.             player.anInt1709 = method42(plane, player.y, player.x);
  2143.             worldController.method285(plane, player.anInt1552, player.anInt1709, i1, player.y, 60, player.x, player, player.aBoolean1541);
  2144.         }
  2145.  
  2146.     }
  2147.  
  2148.     public boolean promptUserForInput(RSInterface class9) {
  2149.         int j = class9.anInt214;
  2150.         if (anInt900 == 2) {
  2151.             if (j == 201) {
  2152.                 inputTaken = true;
  2153.                 inputDialogState = 0;
  2154.                 messagePromptRaised = true;
  2155.                 promptInput = "";
  2156.                 friendsListAction = 1;
  2157.                 aString1121 = "Enter name of friend to add to list";
  2158.             }
  2159.             if (j == 202) {
  2160.                 inputTaken = true;
  2161.                 inputDialogState = 0;
  2162.                 messagePromptRaised = true;
  2163.                 promptInput = "";
  2164.                 friendsListAction = 2;
  2165.                 aString1121 = "Enter name of friend to delete from list";
  2166.             }
  2167.         }
  2168.         if (j == 205) {
  2169.             anInt1011 = 250;
  2170.             return true;
  2171.         }
  2172.         if (j == 501) {
  2173.             inputTaken = true;
  2174.             inputDialogState = 0;
  2175.             messagePromptRaised = true;
  2176.             promptInput = "";
  2177.             friendsListAction = 4;
  2178.             aString1121 = "Enter name of player to add to list";
  2179.         }
  2180.         if (j == 502) {
  2181.             inputTaken = true;
  2182.             inputDialogState = 0;
  2183.             messagePromptRaised = true;
  2184.             promptInput = "";
  2185.             friendsListAction = 5;
  2186.             aString1121 = "Enter name of player to delete from list";
  2187.         }
  2188.         if (j >= 300 && j <= 313) {
  2189.             int k = (j - 300) / 2;
  2190.             int j1 = j & 1;
  2191.             int i2 = anIntArray1065[k];
  2192.             if (i2 != -1) {
  2193.                 do {
  2194.                     if (j1 == 0 && --i2 < 0) {
  2195.                         i2 = IDK.length - 1;
  2196.                     }
  2197.                     if (j1 == 1 && ++i2 >= IDK.length) {
  2198.                         i2 = 0;
  2199.                     }
  2200.                 } while (IDK.cache[i2].aBoolean662 || IDK.cache[i2].anInt657 != k + (aBoolean1047 ? 0 : 7));
  2201.                 anIntArray1065[k] = i2;
  2202.                 aBoolean1031 = true;
  2203.             }
  2204.         }
  2205.         if (j >= 314 && j <= 323) {
  2206.             int l = (j - 314) / 2;
  2207.             int k1 = j & 1;
  2208.             int j2 = anIntArray990[l];
  2209.             if (k1 == 0 && --j2 < 0) {
  2210.                 j2 = anIntArrayArray1003[l].length - 1;
  2211.             }
  2212.             if (k1 == 1 && ++j2 >= anIntArrayArray1003[l].length) {
  2213.                 j2 = 0;
  2214.             }
  2215.             anIntArray990[l] = j2;
  2216.             aBoolean1031 = true;
  2217.         }
  2218.         if (j == 324 && !aBoolean1047) {
  2219.             aBoolean1047 = true;
  2220.             method45();
  2221.         }
  2222.         if (j == 325 && aBoolean1047) {
  2223.             aBoolean1047 = false;
  2224.             method45();
  2225.         }
  2226.         if (j == 326) {
  2227.             stream.createFrame(101);
  2228.             stream.writeWordBigEndian(aBoolean1047 ? 0 : 1);
  2229.             for (int i1 = 0; i1 < 7; i1++) {
  2230.                 stream.writeWordBigEndian(anIntArray1065[i1]);
  2231.             }
  2232.  
  2233.             for (int l1 = 0; l1 < 5; l1++) {
  2234.                 stream.writeWordBigEndian(anIntArray990[l1]);
  2235.             }
  2236.  
  2237.             return true;
  2238.         }
  2239.         if (j == 613) {
  2240.             canMute = !canMute;
  2241.         }
  2242.         if (j >= 601 && j <= 612) {
  2243.             closeOpenInterfaces();
  2244.             if (reportAbuseInput.length() > 0) {
  2245.                 stream.createFrame(218);
  2246.                 stream.writeQWord(TextClass.longForName(reportAbuseInput));
  2247.                 stream.writeWordBigEndian(j - 601);
  2248.                 stream.writeWordBigEndian(canMute ? 1 : 0);
  2249.             }
  2250.         }
  2251.         return false;
  2252.     }
  2253.  
  2254.     public void method49(Stream stream) {
  2255.         for (int j = 0; j < anInt893; j++) {
  2256.             int k = anIntArray894[j];
  2257.             Player player = playerArray[k];
  2258.             int l = stream.readUnsignedByte();
  2259.             if ((l & 0x40) != 0) {
  2260.                 l += stream.readUnsignedByte() << 8;
  2261.             }
  2262.             method107(l, k, stream, player);
  2263.         }
  2264.  
  2265.     }
  2266.  
  2267.     public void method50(int i, int k, int l, int i1, int j1) {
  2268.         int k1 = worldController.method300(j1, l, i);
  2269.         if (k1 != 0) {
  2270.             int l1 = worldController.method304(j1, l, i, k1);
  2271.             int k2 = l1 >> 6 & 3;
  2272.             int i3 = l1 & 0x1f;
  2273.             int k3 = k;
  2274.             if (k1 > 0) {
  2275.                 k3 = i1;
  2276.             }
  2277.             int ai[] = aClass30_Sub2_Sub1_Sub1_1263.pixels;
  2278.             int k4 = 24624 + l * 4 + (103 - i) * 512 * 4;
  2279.             int i5 = k1 >> 14 & 0x7fff;
  2280.             ObjectDef class46_2 = ObjectDef.forID(i5);
  2281.             if (class46_2.anInt758 != -1) {
  2282.                 Background background_2 = mapScenes[class46_2.anInt758];
  2283.                 if (background_2 != null) {
  2284.                     int i6 = (class46_2.anInt744 * 4 - background_2.anInt1452) / 2;
  2285.                     int j6 = (class46_2.anInt761 * 4 - background_2.anInt1453) / 2;
  2286.                     background_2.method361(48 + l * 4 + i6, 48 + (104 - i - class46_2.anInt761) * 4 + j6);
  2287.                 }
  2288.             } else {
  2289.                 if (i3 == 0 || i3 == 2) {
  2290.                     if (k2 == 0) {
  2291.                         ai[k4] = k3;
  2292.                         ai[k4 + 512] = k3;
  2293.                         ai[k4 + 1024] = k3;
  2294.                         ai[k4 + 1536] = k3;
  2295.                     } else if (k2 == 1) {
  2296.                         ai[k4] = k3;
  2297.                         ai[k4 + 1] = k3;
  2298.                         ai[k4 + 2] = k3;
  2299.                         ai[k4 + 3] = k3;
  2300.                     } else if (k2 == 2) {
  2301.                         ai[k4 + 3] = k3;
  2302.                         ai[k4 + 3 + 512] = k3;
  2303.                         ai[k4 + 3 + 1024] = k3;
  2304.                         ai[k4 + 3 + 1536] = k3;
  2305.                     } else if (k2 == 3) {
  2306.                         ai[k4 + 1536] = k3;
  2307.                         ai[k4 + 1536 + 1] = k3;
  2308.                         ai[k4 + 1536 + 2] = k3;
  2309.                         ai[k4 + 1536 + 3] = k3;
  2310.                     }
  2311.                 }
  2312.                 if (i3 == 3) {
  2313.                     if (k2 == 0) {
  2314.                         ai[k4] = k3;
  2315.                     } else if (k2 == 1) {
  2316.                         ai[k4 + 3] = k3;
  2317.                     } else if (k2 == 2) {
  2318.                         ai[k4 + 3 + 1536] = k3;
  2319.                     } else if (k2 == 3) {
  2320.                         ai[k4 + 1536] = k3;
  2321.                     }
  2322.                 }
  2323.                 if (i3 == 2) {
  2324.                     if (k2 == 3) {
  2325.                         ai[k4] = k3;
  2326.                         ai[k4 + 512] = k3;
  2327.                         ai[k4 + 1024] = k3;
  2328.                         ai[k4 + 1536] = k3;
  2329.                     } else if (k2 == 0) {
  2330.                         ai[k4] = k3;
  2331.                         ai[k4 + 1] = k3;
  2332.                         ai[k4 + 2] = k3;
  2333.                         ai[k4 + 3] = k3;
  2334.                     } else if (k2 == 1) {
  2335.                         ai[k4 + 3] = k3;
  2336.                         ai[k4 + 3 + 512] = k3;
  2337.                         ai[k4 + 3 + 1024] = k3;
  2338.                         ai[k4 + 3 + 1536] = k3;
  2339.                     } else if (k2 == 2) {
  2340.                         ai[k4 + 1536] = k3;
  2341.                         ai[k4 + 1536 + 1] = k3;
  2342.                         ai[k4 + 1536 + 2] = k3;
  2343.                         ai[k4 + 1536 + 3] = k3;
  2344.                     }
  2345.                 }
  2346.             }
  2347.         }
  2348.         k1 = worldController.method302(j1, l, i);
  2349.         if (k1 != 0) {
  2350.             int i2 = worldController.method304(j1, l, i, k1);
  2351.             int l2 = i2 >> 6 & 3;
  2352.             int j3 = i2 & 0x1f;
  2353.             int l3 = k1 >> 14 & 0x7fff;
  2354.             ObjectDef class46_1 = ObjectDef.forID(l3);
  2355.             if (class46_1.anInt758 != -1) {
  2356.                 Background background_1 = mapScenes[class46_1.anInt758];
  2357.                 if (background_1 != null) {
  2358.                     int j5 = (class46_1.anInt744 * 4 - background_1.anInt1452) / 2;
  2359.                     int k5 = (class46_1.anInt761 * 4 - background_1.anInt1453) / 2;
  2360.                     background_1.method361(48 + l * 4 + j5, 48 + (104 - i - class46_1.anInt761) * 4 + k5);
  2361.                 }
  2362.             } else if (j3 == 9) {
  2363.                 int l4 = 0xeeeeee;
  2364.                 if (k1 > 0) {
  2365.                     l4 = 0xee0000;
  2366.                 }
  2367.                 int ai1[] = aClass30_Sub2_Sub1_Sub1_1263.pixels;
  2368.                 int l5 = 24624 + l * 4 + (103 - i) * 512 * 4;
  2369.                 if (l2 == 0 || l2 == 2) {
  2370.                     ai1[l5 + 1536] = l4;
  2371.                     ai1[l5 + 1024 + 1] = l4;
  2372.                     ai1[l5 + 512 + 2] = l4;
  2373.                     ai1[l5 + 3] = l4;
  2374.                 } else {
  2375.                     ai1[l5] = l4;
  2376.                     ai1[l5 + 512 + 1] = l4;
  2377.                     ai1[l5 + 1024 + 2] = l4;
  2378.                     ai1[l5 + 1536 + 3] = l4;
  2379.                 }
  2380.             }
  2381.         }
  2382.         k1 = worldController.method303(j1, l, i);
  2383.         if (k1 != 0) {
  2384.             int j2 = k1 >> 14 & 0x7fff;
  2385.             ObjectDef class46 = ObjectDef.forID(j2);
  2386.             if (class46.anInt758 != -1) {
  2387.                 Background background = mapScenes[class46.anInt758];
  2388.                 if (background != null) {
  2389.                     int i4 = (class46.anInt744 * 4 - background.anInt1452) / 2;
  2390.                     int j4 = (class46.anInt761 * 4 - background.anInt1453) / 2;
  2391.                     background.method361(48 + l * 4 + i4, 48 + (104 - i - class46.anInt761) * 4 + j4);
  2392.                 }
  2393.             }
  2394.         }
  2395.     }
  2396.  
  2397.     public void loadTitleScreen() {
  2398.         aBackground_966 = new Background(titleStreamLoader, "titlebox", 0);
  2399.         aBackground_967 = new Background(titleStreamLoader, "titlebutton", 0);
  2400.         aBackgroundArray1152s = new Background[12];
  2401.         int j = 0;
  2402.         try {
  2403.             j = Integer.parseInt(getParameter("fl_icon"));
  2404.         } catch (Exception _ex) {
  2405.         }
  2406.         if (j == 0) {
  2407.             for (int k = 0; k < 12; k++) {
  2408.                 aBackgroundArray1152s[k] = new Background(titleStreamLoader, "runes", k);
  2409.             }
  2410.  
  2411.         } else {
  2412.             for (int l = 0; l < 12; l++) {
  2413.                 aBackgroundArray1152s[l] = new Background(titleStreamLoader, "runes", 12 + (l & 3));
  2414.             }
  2415.  
  2416.         }
  2417.         aClass30_Sub2_Sub1_Sub1_1201 = new Sprite(128, 265);
  2418.         aClass30_Sub2_Sub1_Sub1_1202 = new Sprite(128, 265);
  2419.         System.arraycopy(aRSImageProducer_1110.anIntArray315, 0, aClass30_Sub2_Sub1_Sub1_1201.pixels, 0, 33920);
  2420.  
  2421.         System.arraycopy(aRSImageProducer_1111.anIntArray315, 0, aClass30_Sub2_Sub1_Sub1_1202.pixels, 0, 33920);
  2422.  
  2423.         anIntArray851 = new int[256];
  2424.         for (int k1 = 0; k1 < 64; k1++) {
  2425.             anIntArray851[k1] = k1 * 0x40000;
  2426.         }
  2427.  
  2428.         for (int l1 = 0; l1 < 64; l1++) {
  2429.             anIntArray851[l1 + 64] = 0xff0000 + 1024 * l1;
  2430.         }
  2431.  
  2432.         for (int i2 = 0; i2 < 64; i2++) {
  2433.             anIntArray851[i2 + 128] = 0xffff00 + 4 * i2;
  2434.         }
  2435.  
  2436.         for (int j2 = 0; j2 < 64; j2++) {
  2437.             anIntArray851[j2 + 192] = 0xffffff;
  2438.         }
  2439.  
  2440.         anIntArray852 = new int[256];
  2441.         for (int k2 = 0; k2 < 64; k2++) {
  2442.             anIntArray852[k2] = k2 * 1024;
  2443.         }
  2444.  
  2445.         for (int l2 = 0; l2 < 64; l2++) {
  2446.             anIntArray852[l2 + 64] = 65280 + 4 * l2;
  2447.         }
  2448.  
  2449.         for (int i3 = 0; i3 < 64; i3++) {
  2450.             anIntArray852[i3 + 128] = 65535 + 0x40000 * i3;
  2451.         }
  2452.  
  2453.         for (int j3 = 0; j3 < 64; j3++) {
  2454.             anIntArray852[j3 + 192] = 0xffffff;
  2455.         }
  2456.  
  2457.         anIntArray853 = new int[256];
  2458.         for (int k3 = 0; k3 < 64; k3++) {
  2459.             anIntArray853[k3] = k3 * 4;
  2460.         }
  2461.  
  2462.         for (int l3 = 0; l3 < 64; l3++) {
  2463.             anIntArray853[l3 + 64] = 255 + 0x40000 * l3;
  2464.         }
  2465.  
  2466.         for (int i4 = 0; i4 < 64; i4++) {
  2467.             anIntArray853[i4 + 128] = 0xff00ff + 1024 * i4;
  2468.         }
  2469.  
  2470.         for (int j4 = 0; j4 < 64; j4++) {
  2471.             anIntArray853[j4 + 192] = 0xffffff;
  2472.         }
  2473.  
  2474.         anIntArray850 = new int[256];
  2475.         anIntArray1190 = new int[32768];
  2476.         anIntArray1191 = new int[32768];
  2477.         randomizeBackground(null);
  2478.         anIntArray828 = new int[32768];
  2479.         anIntArray829 = new int[32768];
  2480.         drawLoadingText(10, "Connecting to fileserver");
  2481.         if (!aBoolean831) {
  2482.             drawFlames = true;
  2483.             aBoolean831 = true;
  2484.             startRunnable(this, 2);
  2485.         }
  2486.     }
  2487.  
  2488.     public static void setHighMem() {
  2489.         WorldController.lowMem = false;
  2490.         Texture.lowMem = false;
  2491.         lowMem = false;
  2492.         ObjectManager.lowMem = false;
  2493.         ObjectDef.lowMem = false;
  2494.     }
  2495.  
  2496.     public void loadingStages() {
  2497.         if (lowMem && loadingStage == 2 && ObjectManager.anInt131 != plane) {
  2498.             drawTextOnScreen(null, "Loading - please wait.");
  2499.             loadingStage = 1;
  2500.             aLong824 = System.currentTimeMillis();
  2501.         }
  2502.         if (loadingStage == 1) {
  2503.             int j = method54();
  2504.             if (j != 0 && System.currentTimeMillis() - aLong824 > 0x57e40L) {
  2505.                 Signlink.reporterror(myUsername + " glcfb " + aLong1215 + "," + j + "," + lowMem + "," + decompressors[0] + "," + onDemandFetcher.getNodeCount() + "," + plane + "," + anInt1069 + "," + anInt1070);
  2506.                 aLong824 = System.currentTimeMillis();
  2507.             }
  2508.         }
  2509.         if (loadingStage == 2 && plane != anInt985) {
  2510.             anInt985 = plane;
  2511.             method24(plane);
  2512.         }
  2513.     }
  2514.  
  2515.     public int method54() {
  2516.         for (int i = 0; i < aByteArrayArray1183.length; i++) {
  2517.             if (aByteArrayArray1183[i] == null && anIntArray1235[i] != -1) {
  2518.                 return -1;
  2519.             }
  2520.             if (aByteArrayArray1247[i] == null && anIntArray1236[i] != -1) {
  2521.                 return -2;
  2522.             }
  2523.         }
  2524.  
  2525.         boolean flag = true;
  2526.         for (int j = 0; j < aByteArrayArray1183.length; j++) {
  2527.             byte abyte0[] = aByteArrayArray1247[j];
  2528.             if (abyte0 != null) {
  2529.                 int k = (anIntArray1234[j] >> 8) * 64 - baseX;
  2530.                 int l = (anIntArray1234[j] & 0xff) * 64 - baseY;
  2531.                 if (aBoolean1159) {
  2532.                     k = 10;
  2533.                     l = 10;
  2534.                 }
  2535.                 flag &= ObjectManager.method189(k, abyte0, l);
  2536.             }
  2537.         }
  2538.  
  2539.         if (!flag) {
  2540.             return -3;
  2541.         }
  2542.         if (aBoolean1080) {
  2543.             return -4;
  2544.         } else {
  2545.             loadingStage = 2;
  2546.             ObjectManager.anInt131 = plane;
  2547.             method22();
  2548.             stream.createFrame(121);
  2549.             return 0;
  2550.         }
  2551.     }
  2552.  
  2553.     public void method55() {
  2554.         for (Animable_Sub4 class30_sub2_sub4_sub4 = (Animable_Sub4) aClass19_1013.reverseGetFirst(); class30_sub2_sub4_sub4 != null; class30_sub2_sub4_sub4 = (Animable_Sub4) aClass19_1013.reverseGetNext()) {
  2555.             if (class30_sub2_sub4_sub4.anInt1597 != plane || loopCycle > class30_sub2_sub4_sub4.anInt1572) {
  2556.                 class30_sub2_sub4_sub4.unlink();
  2557.             } else if (loopCycle >= class30_sub2_sub4_sub4.anInt1571) {
  2558.                 if (class30_sub2_sub4_sub4.anInt1590 > 0) {
  2559.                     NPC npc = npcArray[class30_sub2_sub4_sub4.anInt1590 - 1];
  2560.                     if (npc != null && npc.x >= 0 && npc.x < 13312 && npc.y >= 0 && npc.y < 13312) {
  2561.                         class30_sub2_sub4_sub4.method455(loopCycle, npc.y, method42(class30_sub2_sub4_sub4.anInt1597, npc.y, npc.x) - class30_sub2_sub4_sub4.anInt1583, npc.x);
  2562.                     }
  2563.                 }
  2564.                 if (class30_sub2_sub4_sub4.anInt1590 < 0) {
  2565.                     int j = -class30_sub2_sub4_sub4.anInt1590 - 1;
  2566.                     Player player;
  2567.                     if (j == unknownInt10) {
  2568.                         player = myPlayer;
  2569.                     } else {
  2570.                         player = playerArray[j];
  2571.                     }
  2572.                     if (player != null && player.x >= 0 && player.x < 13312 && player.y >= 0 && player.y < 13312) {
  2573.                         class30_sub2_sub4_sub4.method455(loopCycle, player.y, method42(class30_sub2_sub4_sub4.anInt1597, player.y, player.x) - class30_sub2_sub4_sub4.anInt1583, player.x);
  2574.                     }
  2575.                 }
  2576.                 class30_sub2_sub4_sub4.method456(anInt945);
  2577.                 worldController.method285(plane, class30_sub2_sub4_sub4.anInt1595, (int) class30_sub2_sub4_sub4.aDouble1587, -1, (int) class30_sub2_sub4_sub4.aDouble1586, 60, (int) class30_sub2_sub4_sub4.aDouble1585, class30_sub2_sub4_sub4, false);
  2578.             }
  2579.         }
  2580.  
  2581.     }
  2582.  
  2583.     public AppletContext getAppletContext() {
  2584.         if (Signlink.mainapp != null) {
  2585.             return Signlink.mainapp.getAppletContext();
  2586.         } else {
  2587.             return super.getAppletContext();
  2588.         }
  2589.     }
  2590.  
  2591.     public void drawLogo() {
  2592.         byte abyte0[] = titleStreamLoader.getDataForName("title.dat");
  2593.         Sprite sprite = new Sprite(abyte0, this);
  2594.         aRSImageProducer_1110.initDrawingArea();
  2595.         sprite.method346(0, 0);
  2596.         aRSImageProducer_1111.initDrawingArea();
  2597.         sprite.method346(-637, 0);
  2598.         aRSImageProducer_1107.initDrawingArea();
  2599.         sprite.method346(-128, 0);
  2600.         aRSImageProducer_1108.initDrawingArea();
  2601.         sprite.method346(-202, -371);
  2602.         aRSImageProducer_1109.initDrawingArea();
  2603.         sprite.method346(-202, -171);
  2604.         aRSImageProducer_1112.initDrawingArea();
  2605.         sprite.method346(0, -265);
  2606.         aRSImageProducer_1113.initDrawingArea();
  2607.         sprite.method346(-562, -265);
  2608.         aRSImageProducer_1114.initDrawingArea();
  2609.         sprite.method346(-128, -171);
  2610.         aRSImageProducer_1115.initDrawingArea();
  2611.         sprite.method346(-562, -171);
  2612.         int ai[] = new int[sprite.width];
  2613.         for (int j = 0; j < sprite.height; j++) {
  2614.             for (int k = 0; k < sprite.width; k++) {
  2615.                 ai[k] = sprite.pixels[sprite.width - k - 1 + sprite.width * j];
  2616.             }
  2617.  
  2618.             System.arraycopy(ai, 0, sprite.pixels, sprite.width * j, sprite.width);
  2619.  
  2620.         }
  2621.  
  2622.         aRSImageProducer_1110.initDrawingArea();
  2623.         sprite.method346(382, 0);
  2624.         aRSImageProducer_1111.initDrawingArea();
  2625.         sprite.method346(-255, 0);
  2626.         aRSImageProducer_1107.initDrawingArea();
  2627.         sprite.method346(254, 0);
  2628.         aRSImageProducer_1108.initDrawingArea();
  2629.         sprite.method346(180, -371);
  2630.         aRSImageProducer_1109.initDrawingArea();
  2631.         sprite.method346(180, -171);
  2632.         aRSImageProducer_1112.initDrawingArea();
  2633.         sprite.method346(382, -265);
  2634.         aRSImageProducer_1113.initDrawingArea();
  2635.         sprite.method346(-180, -265);
  2636.         aRSImageProducer_1114.initDrawingArea();
  2637.         sprite.method346(254, -171);
  2638.         aRSImageProducer_1115.initDrawingArea();
  2639.         sprite.method346(-180, -171);
  2640.         sprite = new Sprite(titleStreamLoader, "logo", 0);
  2641.         aRSImageProducer_1107.initDrawingArea();
  2642.         sprite.drawSprite(382 - sprite.width / 2 - 128, 18);
  2643.         sprite = null;
  2644.         System.gc();
  2645.  
  2646.     }
  2647.  
  2648.     public void processOnDemandQueue() {
  2649.         do {
  2650.             OnDemandData onDemandData;
  2651.             do {
  2652.                 onDemandData = onDemandFetcher.getNextNode();
  2653.                 if (onDemandData == null) {
  2654.                     return;
  2655.                 }
  2656.                 if (onDemandData.dataType == 0) {
  2657.                     Model.method460(onDemandData.buffer, onDemandData.ID);
  2658.                     if ((onDemandFetcher.getModelIndex(onDemandData.ID) & 0x62) != 0) {
  2659.                         needDrawTabArea = true;
  2660.                         if (backDialogID != -1) {
  2661.                             inputTaken = true;
  2662.                         }
  2663.                     }
  2664.                 }
  2665.                 if (onDemandData.dataType == 1 && onDemandData.buffer != null) {
  2666.                     Class36.method529(onDemandData.buffer);
  2667.                 }
  2668.                 if (onDemandData.dataType == 2 && onDemandData.ID == nextSong && onDemandData.buffer != null) {
  2669.                     musicData = new byte[onDemandData.buffer.length];
  2670.                     System.arraycopy(onDemandData.buffer, 0, musicData, 0, musicData.length);
  2671.                     fetchMusic = true;
  2672.                 }
  2673.                 if (onDemandData.dataType == 3 && loadingStage == 1) {
  2674.                     for (int i = 0; i < aByteArrayArray1183.length; i++) {
  2675.                         if (anIntArray1235[i] == onDemandData.ID) {
  2676.                             aByteArrayArray1183[i] = onDemandData.buffer;
  2677.                             if (onDemandData.buffer == null) {
  2678.                                 anIntArray1235[i] = -1;
  2679.                             }
  2680.                             break;
  2681.                         }
  2682.                         if (anIntArray1236[i] != onDemandData.ID) {
  2683.                             continue;
  2684.                         }
  2685.                         aByteArrayArray1247[i] = onDemandData.buffer;
  2686.                         if (onDemandData.buffer == null) {
  2687.                             anIntArray1236[i] = -1;
  2688.                         }
  2689.                         break;
  2690.                     }
  2691.  
  2692.                 }
  2693.             } while (onDemandData.dataType != 93 || !onDemandFetcher.method564(onDemandData.ID));
  2694.             ObjectManager.method173(new Stream(onDemandData.buffer), onDemandFetcher);
  2695.         } while (true);
  2696.     }
  2697.  
  2698.     public void calcFlamesPosition() {
  2699.         char c = '\u0100';
  2700.         for (int j = 10; j < 117; j++) {
  2701.             int k = (int) (Math.random() * 100D);
  2702.             if (k < 50) {
  2703.                 anIntArray828[j + (c - 2 << 7)] = 255;
  2704.             }
  2705.         }
  2706.         for (int l = 0; l < 100; l++) {
  2707.             int i1 = (int) (Math.random() * 124D) + 2;
  2708.             int k1 = (int) (Math.random() * 128D) + 128;
  2709.             int k2 = i1 + (k1 << 7);
  2710.             anIntArray828[k2] = 192;
  2711.         }
  2712.  
  2713.         for (int j1 = 1; j1 < c - 1; j1++) {
  2714.             for (int l1 = 1; l1 < 127; l1++) {
  2715.                 int l2 = l1 + (j1 << 7);
  2716.                 anIntArray829[l2] = (anIntArray828[l2 - 1] + anIntArray828[l2 + 1] + anIntArray828[l2 - 128] + anIntArray828[l2 + 128]) / 4;
  2717.             }
  2718.  
  2719.         }
  2720.  
  2721.         anInt1275 += 128;
  2722.         if (anInt1275 > anIntArray1190.length) {
  2723.             anInt1275 -= anIntArray1190.length;
  2724.             int i2 = (int) (Math.random() * 12D);
  2725.             randomizeBackground(aBackgroundArray1152s[i2]);
  2726.         }
  2727.         for (int j2 = 1; j2 < c - 1; j2++) {
  2728.             for (int i3 = 1; i3 < 127; i3++) {
  2729.                 int k3 = i3 + (j2 << 7);
  2730.                 int i4 = anIntArray829[k3 + 128] - anIntArray1190[k3 + anInt1275 & anIntArray1190.length - 1] / 5;
  2731.                 if (i4 < 0) {
  2732.                     i4 = 0;
  2733.                 }
  2734.                 anIntArray828[k3] = i4;
  2735.             }
  2736.  
  2737.         }
  2738.  
  2739.         System.arraycopy(anIntArray969, 1, anIntArray969, 0, c - 1);
  2740.  
  2741.         anIntArray969[c - 1] = (int) (Math.sin((double) loopCycle / 14D) * 16D + Math.sin((double) loopCycle / 15D) * 14D + Math.sin((double) loopCycle / 16D) * 12D);
  2742.         if (anInt1040 > 0) {
  2743.             anInt1040 -= 4;
  2744.         }
  2745.         if (anInt1041 > 0) {
  2746.             anInt1041 -= 4;
  2747.         }
  2748.         if (anInt1040 == 0 && anInt1041 == 0) {
  2749.             int l3 = (int) (Math.random() * 2000D);
  2750.             if (l3 == 0) {
  2751.                 anInt1040 = 1024;
  2752.             }
  2753.             if (l3 == 1) {
  2754.                 anInt1041 = 1024;
  2755.             }
  2756.         }
  2757.     }
  2758.  
  2759.     public boolean saveWave(byte abyte0[], int i) {
  2760.         return abyte0 == null || Signlink.wavesave(abyte0, i);
  2761.     }
  2762.  
  2763.     public void method60(int i) {
  2764.         RSInterface class9 = RSInterface.interfaceCache[i];
  2765.         for (int element : class9.children) {
  2766.             if (element == -1) {
  2767.                 break;
  2768.             }
  2769.             RSInterface class9_1 = RSInterface.interfaceCache[element];
  2770.             if (class9_1.type == 1) {
  2771.                 method60(class9_1.id);
  2772.             }
  2773.             class9_1.anInt246 = 0;
  2774.             class9_1.anInt208 = 0;
  2775.         }
  2776.     }
  2777.  
  2778.     public void drawHeadIcon() {
  2779.         if (anInt855 != 2) {
  2780.             return;
  2781.         }
  2782.         calcEntityScreenPos((anInt934 - baseX << 7) + anInt937, anInt936 * 2, (anInt935 - baseY << 7) + anInt938);
  2783.         if (spriteDrawX > -1 && loopCycle % 20 < 10) {
  2784.             headIconsHint[0].drawSprite(spriteDrawX - 12, spriteDrawY - 28);
  2785.         }
  2786.     }
  2787.  
  2788.     public void mainGameProcessor() {
  2789.         if (anInt1104 > 1) {
  2790.             anInt1104--;
  2791.         }
  2792.         if (anInt1011 > 0) {
  2793.             anInt1011--;
  2794.         }
  2795.         for (int j = 0; j < 5; j++) {
  2796.             if (!parsePacket()) {
  2797.                 break;
  2798.             }
  2799.         }
  2800.  
  2801.         if (!loggedIn) {
  2802.             return;
  2803.         }
  2804.         synchronized (mouseDetection.syncObject) {
  2805.             if (flagged) {
  2806.                 if (super.clickMode3 != 0 || mouseDetection.coordsIndex >= 40) {
  2807.                     stream.createFrame(45);
  2808.                     stream.writeWordBigEndian(0);
  2809.                     int j2 = stream.currentOffset;
  2810.                     int j3 = 0;
  2811.                     for (int j4 = 0; j4 < mouseDetection.coordsIndex; j4++) {
  2812.                         if (j2 - stream.currentOffset >= 240) {
  2813.                             break;
  2814.                         }
  2815.                         j3++;
  2816.                         int l4 = mouseDetection.coordsY[j4];
  2817.                         if (l4 < 0) {
  2818.                             l4 = 0;
  2819.                         } else if (l4 > 502) {
  2820.                             l4 = 502;
  2821.                         }
  2822.                         int k5 = mouseDetection.coordsX[j4];
  2823.                         if (k5 < 0) {
  2824.                             k5 = 0;
  2825.                         } else if (k5 > 764) {
  2826.                             k5 = 764;
  2827.                         }
  2828.                         int i6 = l4 * 765 + k5;
  2829.                         if (mouseDetection.coordsY[j4] == -1 && mouseDetection.coordsX[j4] == -1) {
  2830.                             k5 = -1;
  2831.                             l4 = -1;
  2832.                             i6 = 0x7ffff;
  2833.                         }
  2834.                         if (k5 == anInt1237 && l4 == anInt1238) {
  2835.                             if (anInt1022 < 2047) {
  2836.                                 anInt1022++;
  2837.                             }
  2838.                         } else {
  2839.                             int j6 = k5 - anInt1237;
  2840.                             anInt1237 = k5;
  2841.                             int k6 = l4 - anInt1238;
  2842.                             anInt1238 = l4;
  2843.                             if (anInt1022 < 8 && j6 >= -32 && j6 <= 31 && k6 >= -32 && k6 <= 31) {
  2844.                                 j6 += 32;
  2845.                                 k6 += 32;
  2846.                                 stream.writeWord((anInt1022 << 12) + (j6 << 6) + k6);
  2847.                                 anInt1022 = 0;
  2848.                             } else if (anInt1022 < 8) {
  2849.                                 stream.writeDWordBigEndian(0x800000 + (anInt1022 << 19) + i6);
  2850.                                 anInt1022 = 0;
  2851.                             } else {
  2852.                                 stream.writeDWord(0xc0000000 + (anInt1022 << 19) + i6);
  2853.                                 anInt1022 = 0;
  2854.                             }
  2855.                         }
  2856.                     }
  2857.  
  2858.                     stream.writeBytes(stream.currentOffset - j2);
  2859.                     if (j3 >= mouseDetection.coordsIndex) {
  2860.                         mouseDetection.coordsIndex = 0;
  2861.                     } else {
  2862.                         mouseDetection.coordsIndex -= j3;
  2863.                         for (int i5 = 0; i5 < mouseDetection.coordsIndex; i5++) {
  2864.                             mouseDetection.coordsX[i5] = mouseDetection.coordsX[i5 + j3];
  2865.                             mouseDetection.coordsY[i5] = mouseDetection.coordsY[i5 + j3];
  2866.                         }
  2867.  
  2868.                     }
  2869.                 }
  2870.             } else {
  2871.                 mouseDetection.coordsIndex = 0;
  2872.             }
  2873.         }
  2874.         if (super.clickMode3 != 0) {
  2875.             long l = (super.aLong29 - aLong1220) / 50L;
  2876.             if (l > 4095L) {
  2877.                 l = 4095L;
  2878.             }
  2879.             aLong1220 = super.aLong29;
  2880.             int k2 = super.saveClickY;
  2881.             if (k2 < 0) {
  2882.                 k2 = 0;
  2883.             } else if (k2 > 502) {
  2884.                 k2 = 502;
  2885.             }
  2886.             int k3 = super.saveClickX;
  2887.             if (k3 < 0) {
  2888.                 k3 = 0;
  2889.             } else if (k3 > 764) {
  2890.                 k3 = 764;
  2891.             }
  2892.             int k4 = k2 * 765 + k3;
  2893.             int j5 = 0;
  2894.             if (super.clickMode3 == 2) {
  2895.                 j5 = 1;
  2896.             }
  2897.             int l5 = (int) l;
  2898.             stream.createFrame(241);
  2899.             stream.writeDWord((l5 << 20) + (j5 << 19) + k4);
  2900.         }
  2901.         if (anInt1016 > 0) {
  2902.             anInt1016--;
  2903.         }
  2904.         if (super.keyArray[1] == 1 || super.keyArray[2] == 1 || super.keyArray[3] == 1 || super.keyArray[4] == 1) {
  2905.             aBoolean1017 = true;
  2906.         }
  2907.         if (aBoolean1017 && anInt1016 <= 0) {
  2908.             anInt1016 = 20;
  2909.             aBoolean1017 = false;
  2910.             stream.createFrame(86);
  2911.             stream.writeWord(anInt1184);
  2912.             stream.method432(minimapInt1);
  2913.         }
  2914.         if (super.awtFocus && !aBoolean954) {
  2915.             aBoolean954 = true;
  2916.             stream.createFrame(3);
  2917.             stream.writeWordBigEndian(1);
  2918.         }
  2919.         if (!super.awtFocus && aBoolean954) {
  2920.             aBoolean954 = false;
  2921.             stream.createFrame(3);
  2922.             stream.writeWordBigEndian(0);
  2923.         }
  2924.         loadingStages();
  2925.         method115();
  2926.         method90();
  2927.         anInt1009++;
  2928.         if (anInt1009 > 750) {
  2929.             dropClient();
  2930.         }
  2931.         method114();
  2932.         method95();
  2933.         method38();
  2934.         anInt945++;
  2935.         if (crossType != 0) {
  2936.             crossIndex += 20;
  2937.             if (crossIndex >= 400) {
  2938.                 crossType = 0;
  2939.             }
  2940.         }
  2941.         if (atInventoryInterfaceType != 0) {
  2942.             atInventoryLoopCycle++;
  2943.             if (atInventoryLoopCycle >= 15) {
  2944.                 if (atInventoryInterfaceType == 2) {
  2945.                     needDrawTabArea = true;
  2946.                 }
  2947.                 if (atInventoryInterfaceType == 3) {
  2948.                     inputTaken = true;
  2949.                 }
  2950.                 atInventoryInterfaceType = 0;
  2951.             }
  2952.         }
  2953.         if (activeInterfaceType != 0) {
  2954.             anInt989++;
  2955.             if (super.mouseX > anInt1087 + 5 || super.mouseX < anInt1087 - 5 || super.mouseY > anInt1088 + 5 || super.mouseY < anInt1088 - 5) {
  2956.                 aBoolean1242 = true;
  2957.             }
  2958.             if (super.clickMode2 == 0) {
  2959.                 if (activeInterfaceType == 2) {
  2960.                     needDrawTabArea = true;
  2961.                 }
  2962.                 if (activeInterfaceType == 3) {
  2963.                     inputTaken = true;
  2964.                 }
  2965.                 activeInterfaceType = 0;
  2966.                 if (aBoolean1242 && anInt989 >= 5) {
  2967.                     lastActiveInvInterface = -1;
  2968.                     processRightClick();
  2969.                     if (lastActiveInvInterface == anInt1084 && mouseInvInterfaceIndex != anInt1085) {
  2970.                         RSInterface class9 = RSInterface.interfaceCache[anInt1084];
  2971.                         int j1 = 0;
  2972.                         if (anInt913 == 1 && class9.anInt214 == 206) {
  2973.                             j1 = 1;
  2974.                         }
  2975.                         if (class9.inv[mouseInvInterfaceIndex] <= 0) {
  2976.                             j1 = 0;
  2977.                         }
  2978.                         if (class9.aBoolean235) {
  2979.                             int l2 = anInt1085;
  2980.                             int l3 = mouseInvInterfaceIndex;
  2981.                             class9.inv[l3] = class9.inv[l2];
  2982.                             class9.invStackSizes[l3] = class9.invStackSizes[l2];
  2983.                             class9.inv[l2] = -1;
  2984.                             class9.invStackSizes[l2] = 0;
  2985.                         } else if (j1 == 1) {
  2986.                             int i3 = anInt1085;
  2987.                             for (int i4 = mouseInvInterfaceIndex; i3 != i4;) {
  2988.                                 if (i3 > i4) {
  2989.                                     class9.swapInventoryItems(i3, i3 - 1);
  2990.                                     i3--;
  2991.                                 } else if (i3 < i4) {
  2992.                                     class9.swapInventoryItems(i3, i3 + 1);
  2993.                                     i3++;
  2994.                                 }
  2995.                             }
  2996.  
  2997.                         } else {
  2998.                             class9.swapInventoryItems(anInt1085, mouseInvInterfaceIndex);
  2999.                         }
  3000.                         stream.createFrame(214);
  3001.                         stream.method433(anInt1084);
  3002.                         stream.method424(j1);
  3003.                         stream.method433(anInt1085);
  3004.                         stream.method431(mouseInvInterfaceIndex);
  3005.                     }
  3006.                 } else if ((anInt1253 == 1 || menuHasAddFriend(menuActionRow - 1)) && menuActionRow > 2) {
  3007.                     determineMenuSize();
  3008.                 } else if (menuActionRow > 0) {
  3009.                     doAction(menuActionRow - 1);
  3010.                 }
  3011.                 atInventoryLoopCycle = 10;
  3012.                 super.clickMode3 = 0;
  3013.             }
  3014.         }
  3015.         if (WorldController.anInt470 != -1) {
  3016.             int k = WorldController.anInt470;
  3017.             int k1 = WorldController.anInt471;
  3018.             boolean flag = doWalkTo(0, 0, 0, 0, myPlayer.smallY[0], 0, 0, k1, myPlayer.smallX[0], true, k);
  3019.             WorldController.anInt470 = -1;
  3020.             if (flag) {
  3021.                 crossX = super.saveClickX;
  3022.                 crossY = super.saveClickY;
  3023.                 crossType = 1;
  3024.                 crossIndex = 0;
  3025.             }
  3026.         }
  3027.         if (super.clickMode3 == 1 && aString844 != null) {
  3028.             aString844 = null;
  3029.             inputTaken = true;
  3030.             super.clickMode3 = 0;
  3031.         }
  3032.         processMenuClick();
  3033.         if (fullScreenBackDialogID == -1) {
  3034.             processMainScreenClick();
  3035.             processTabClick();
  3036.             processChatModeClick();
  3037.         }
  3038.         if (super.clickMode2 == 1 || super.clickMode3 == 1) {
  3039.             anInt1213++;
  3040.         }
  3041.         if (loadingStage == 2) {
  3042.             method108();
  3043.         }
  3044.         if (loadingStage == 2 && aBoolean1160) {
  3045.             calcCameraPos();
  3046.         }
  3047.         for (int i1 = 0; i1 < 5; i1++) {
  3048.             anIntArray1030[i1]++;
  3049.         }
  3050.  
  3051.         method73();
  3052.         super.idleTime++;
  3053.         if (super.idleTime > 12000) {
  3054.             anInt1011 = 250;
  3055.             super.idleTime -= 500;
  3056.             stream.createFrame(202);
  3057.         }
  3058.         anInt988++;
  3059.         if (anInt988 > 500) {
  3060.             anInt988 = 0;
  3061.             int l1 = (int) (Math.random() * 8D);
  3062.             if ((l1 & 1) == 1) {
  3063.                 anInt1278 += anInt1279;
  3064.             }
  3065.             if ((l1 & 2) == 2) {
  3066.                 anInt1131 += anInt1132;
  3067.             }
  3068.             if ((l1 & 4) == 4) {
  3069.                 anInt896 += anInt897;
  3070.             }
  3071.         }
  3072.         if (anInt1278 < -50) {
  3073.             anInt1279 = 2;
  3074.         }
  3075.         if (anInt1278 > 50) {
  3076.             anInt1279 = -2;
  3077.         }
  3078.         if (anInt1131 < -55) {
  3079.             anInt1132 = 2;
  3080.         }
  3081.         if (anInt1131 > 55) {
  3082.             anInt1132 = -2;
  3083.         }
  3084.         if (anInt896 < -40) {
  3085.             anInt897 = 1;
  3086.         }
  3087.         if (anInt896 > 40) {
  3088.             anInt897 = -1;
  3089.         }
  3090.         anInt1254++;
  3091.         if (anInt1254 > 500) {
  3092.             anInt1254 = 0;
  3093.             int i2 = (int) (Math.random() * 8D);
  3094.             if ((i2 & 1) == 1) {
  3095.                 minimapInt2 += anInt1210;
  3096.             }
  3097.             if ((i2 & 2) == 2) {
  3098.                 minimapInt3 += anInt1171;
  3099.             }
  3100.         }
  3101.         if (minimapInt2 < -60) {
  3102.             anInt1210 = 2;
  3103.         }
  3104.         if (minimapInt2 > 60) {
  3105.             anInt1210 = -2;
  3106.         }
  3107.         if (minimapInt3 < -20) {
  3108.             anInt1171 = 1;
  3109.         }
  3110.         if (minimapInt3 > 10) {
  3111.             anInt1171 = -1;
  3112.         }
  3113.         anInt1010++;
  3114.         if (anInt1010 > 50) {
  3115.             stream.createFrame(0);
  3116.         }
  3117.         try {
  3118.             if (socketStream != null && stream.currentOffset > 0) {
  3119.                 socketStream.queueBytes(stream.currentOffset, stream.buffer);
  3120.                 stream.currentOffset = 0;
  3121.                 anInt1010 = 0;
  3122.             }
  3123.         } catch (IOException _ex) {
  3124.             dropClient();
  3125.         } catch (Exception exception) {
  3126.             resetLogout();
  3127.         }
  3128.     }
  3129.  
  3130.     public void method63() {
  3131.         Class30_Sub1 class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetFirst();
  3132.         for (; class30_sub1 != null; class30_sub1 = (Class30_Sub1) aClass19_1179.reverseGetNext()) {
  3133.             if (class30_sub1.anInt1294 == -1) {
  3134.                 class30_sub1.anInt1302 = 0;
  3135.                 method89(class30_sub1);
  3136.             } else {
  3137.                 class30_sub1.unlink();
  3138.             }
  3139.         }
  3140.  
  3141.     }
  3142.  
  3143.     void drawLoadingText(int i, String s) {
  3144.         anInt1079 = i;
  3145.         aString1049 = s;
  3146.         resetImageProducers();
  3147.         if (titleStreamLoader == null) {
  3148.             super.drawLoadingText(i, s);
  3149.             return;
  3150.         }
  3151.         aRSImageProducer_1109.initDrawingArea();
  3152.         char c = '\u0168';
  3153.         char c1 = '\310';
  3154.         byte byte1 = 20;
  3155.         chatTextDrawingArea.drawText(0xffffff, "" + ClientSettings.SERVER_NAME + " is loading - please wait...", c1 / 2 - 26 - byte1, c / 2);
  3156.         int j = c1 / 2 - 18 - byte1;
  3157.         DrawingArea.fillPixels(j, 34, 0x8c1111, c / 2 - 152, 304);
  3158.         DrawingArea.fillPixels(j + 1, 32, 0, c / 2 - 151, 302);
  3159.         DrawingArea.method336(30, j + 2, 0x8c1111, i * 3, c / 2 - 150);
  3160.         DrawingArea.method336(30, j + 2, 0, 300 - i * 3, c / 2 - 150 + i * 3);
  3161.         chatTextDrawingArea.drawText(0xffffff, s, c1 / 2 + 5 - byte1, c / 2);
  3162.         aRSImageProducer_1109.drawGraphics(171, super.graphics, 202);
  3163.         if (welcomeScreenRaised) {
  3164.             welcomeScreenRaised = false;
  3165.             if (!aBoolean831) {
  3166.                 aRSImageProducer_1110.drawGraphics(0, super.graphics, 0);
  3167.                 aRSImageProducer_1111.drawGraphics(0, super.graphics, 637);
  3168.             }
  3169.             aRSImageProducer_1107.drawGraphics(0, super.graphics, 128);
  3170.             aRSImageProducer_1108.drawGraphics(371, super.graphics, 202);
  3171.             aRSImageProducer_1112.drawGraphics(265, super.graphics, 0);
  3172.             aRSImageProducer_1113.drawGraphics(265, super.graphics, 562);
  3173.             aRSImageProducer_1114.drawGraphics(171, super.graphics, 128);
  3174.             aRSImageProducer_1115.drawGraphics(171, super.graphics, 562);
  3175.         }
  3176.     }
  3177.  
  3178.     public void method65(int i, int j, int k, int l, RSInterface class9, int i1, boolean flag, int j1) {
  3179.         int anInt992;
  3180.         if (aBoolean972) {
  3181.             anInt992 = 32;
  3182.         } else {
  3183.             anInt992 = 0;
  3184.         }
  3185.         aBoolean972 = false;
  3186.         if (k >= i && k < i + 16 && l >= i1 && l < i1 + 16) {
  3187.             class9.scrollPosition -= anInt1213 * 4;
  3188.             if (flag) {
  3189.                 needDrawTabArea = true;
  3190.             }
  3191.         } else if (k >= i && k < i + 16 && l >= i1 + j - 16 && l < i1 + j) {
  3192.             class9.scrollPosition += anInt1213 * 4;
  3193.             if (flag) {
  3194.                 needDrawTabArea = true;
  3195.             }
  3196.         } else if (k >= i - anInt992 && k < i + 16 + anInt992 && l >= i1 + 16 && l < i1 + j - 16 && anInt1213 > 0) {
  3197.             int l1 = (j - 32) * j / j1;
  3198.             if (l1 < 8) {
  3199.                 l1 = 8;
  3200.             }
  3201.             int i2 = l - i1 - 16 - l1 / 2;
  3202.             int j2 = j - 32 - l1;
  3203.             class9.scrollPosition = (j1 - j) * i2 / j2;
  3204.             if (flag) {
  3205.                 needDrawTabArea = true;
  3206.             }
  3207.             aBoolean972 = true;
  3208.         }
  3209.     }
  3210.  
  3211.     public boolean method66(int i, int j, int k) {
  3212.         int i1 = i >> 14 & 0x7fff;
  3213.         int j1 = worldController.method304(plane, k, j, i);
  3214.         if (j1 == -1) {
  3215.             return false;
  3216.         }
  3217.         int k1 = j1 & 0x1f;
  3218.         int l1 = j1 >> 6 & 3;
  3219.         if (k1 == 10 || k1 == 11 || k1 == 22) {
  3220.             ObjectDef class46 = ObjectDef.forID(i1);
  3221.             int i2;
  3222.             int j2;
  3223.             if (l1 == 0 || l1 == 2) {
  3224.                 i2 = class46.anInt744;
  3225.                 j2 = class46.anInt761;
  3226.             } else {
  3227.                 i2 = class46.anInt761;
  3228.                 j2 = class46.anInt744;
  3229.             }
  3230.             int k2 = class46.anInt768;
  3231.             if (l1 != 0) {
  3232.                 k2 = (k2 << l1 & 0xf) + (k2 >> 4 - l1);
  3233.             }
  3234.             doWalkTo(2, 0, j2, 0, myPlayer.smallY[0], i2, k2, j, myPlayer.smallX[0], false, k);
  3235.         } else {
  3236.             doWalkTo(2, l1, 0, k1 + 1, myPlayer.smallY[0], 0, 0, j, myPlayer.smallX[0], false, k);
  3237.         }
  3238.         crossX = super.saveClickX;
  3239.         crossY = super.saveClickY;
  3240.         crossType = 2;
  3241.         crossIndex = 0;
  3242.         return true;
  3243.     }
  3244.  
  3245.     public StreamLoader streamLoaderForName(int i, String s, String s1, int j, int k) {
  3246.         byte abyte0[] = null;
  3247.         int l = 5;
  3248.         try {
  3249.             if (decompressors[0] != null) {
  3250.                 abyte0 = decompressors[0].decompress(i);
  3251.             }
  3252.         } catch (Exception _ex) {
  3253.         }
  3254.         if (abyte0 != null) {
  3255.             // aCRC32_930.reset();
  3256.             // aCRC32_930.update(abyte0);
  3257.             // int i1 = (int)aCRC32_930.getValue();
  3258.             // if(i1 != j)
  3259.         }
  3260.         if (abyte0 != null) {
  3261.             StreamLoader streamLoader = new StreamLoader(abyte0);
  3262.             return streamLoader;
  3263.         }
  3264.         int j1 = 0;
  3265.         while (abyte0 == null) {
  3266.             String s2 = "Unknown error";
  3267.             drawLoadingText(k, "Requesting " + s);
  3268.             try {
  3269.                 int k1 = 0;
  3270.                 DataInputStream datainputstream = openJagGrabInputStream(s1 + j);
  3271.                 byte abyte1[] = new byte[6];
  3272.                 datainputstream.readFully(abyte1, 0, 6);
  3273.                 Stream stream = new Stream(abyte1);
  3274.                 stream.currentOffset = 3;
  3275.                 int i2 = stream.read3Bytes() + 6;
  3276.                 int j2 = 6;
  3277.                 abyte0 = new byte[i2];
  3278.                 System.arraycopy(abyte1, 0, abyte0, 0, 6);
  3279.  
  3280.                 while (j2 < i2) {
  3281.                     int l2 = i2 - j2;
  3282.                     if (l2 > 1000) {
  3283.                         l2 = 1000;
  3284.                     }
  3285.                     int j3 = datainputstream.read(abyte0, j2, l2);
  3286.                     if (j3 < 0) {
  3287.                         s2 = "Length error: " + j2 + "/" + i2;
  3288.                         throw new IOException("EOF");
  3289.                     }
  3290.                     j2 += j3;
  3291.                     int k3 = j2 * 100 / i2;
  3292.                     if (k3 != k1) {
  3293.                         drawLoadingText(k, "Loading " + s + " - " + k3 + "%");
  3294.                     }
  3295.                     k1 = k3;
  3296.                 }
  3297.                 datainputstream.close();
  3298.                 try {
  3299.                     if (decompressors[0] != null) {
  3300.                         decompressors[0].method234(abyte0.length, abyte0, i);
  3301.                     }
  3302.                 } catch (Exception _ex) {
  3303.                     decompressors[0] = null;
  3304.                 }
  3305.                 /*
  3306.                  * if(abyte0 != null) { aCRC32_930.reset();
  3307.                  * aCRC32_930.update(abyte0); int i3 =
  3308.                  * (int)aCRC32_930.getValue(); if(i3 != j) { abyte0 = null;
  3309.                  * j1++; s2 = "Checksum error: " + i3; } }
  3310.                  */
  3311.             } catch (IOException ioexception) {
  3312.                 if (s2.equals("Unknown error")) {
  3313.                     s2 = "Connection error";
  3314.                 }
  3315.                 abyte0 = null;
  3316.             } catch (NullPointerException _ex) {
  3317.                 s2 = "Null error";
  3318.                 abyte0 = null;
  3319.                 if (!Signlink.reporterror) {
  3320.                     return null;
  3321.                 }
  3322.             } catch (ArrayIndexOutOfBoundsException _ex) {
  3323.                 s2 = "Bounds error";
  3324.                 abyte0 = null;
  3325.                 if (!Signlink.reporterror) {
  3326.                     return null;
  3327.                 }
  3328.             } catch (Exception _ex) {
  3329.                 s2 = "Unexpected error";
  3330.                 abyte0 = null;
  3331.                 if (!Signlink.reporterror) {
  3332.                     return null;
  3333.                 }
  3334.             }
  3335.             if (abyte0 == null) {
  3336.                 for (int l1 = l; l1 > 0; l1--) {
  3337.                     if (j1 >= 3) {
  3338.                         drawLoadingText(k, "Game updated - please reload page");
  3339.                         l1 = 10;
  3340.                     } else {
  3341.                         drawLoadingText(k, s2 + " - Retrying in " + l1);
  3342.                     }
  3343.                     try {
  3344.                         Thread.sleep(1000L);
  3345.                     } catch (Exception _ex) {
  3346.                     }
  3347.                 }
  3348.  
  3349.                 l *= 2;
  3350.                 if (l > 60) {
  3351.                     l = 60;
  3352.                 }
  3353.                 aBoolean872 = !aBoolean872;
  3354.             }
  3355.  
  3356.         }
  3357.  
  3358.         StreamLoader streamLoader_1 = new StreamLoader(abyte0);
  3359.         return streamLoader_1;
  3360.     }
  3361.  
  3362.     public void dropClient() {
  3363.         if (anInt1011 > 0) {
  3364.             resetLogout();
  3365.             return;
  3366.         }
  3367.         drawTextOnScreen("Please wait - attempting to reestablish", "Connection lost");
  3368.         anInt1021 = 0;
  3369.         destX = 0;
  3370.         RSSocket rsSocket = socketStream;
  3371.         loggedIn = false;
  3372.         loginFailures = 0;
  3373.         login(myUsername, myPassword, true);
  3374.         if (!loggedIn) {
  3375.             resetLogout();
  3376.         }
  3377.         try {
  3378.             rsSocket.close();
  3379.         } catch (Exception _ex) {
  3380.         }
  3381.     }
  3382.    
  3383.     public void drawTextOnScreen(String s, String s1) {
  3384.         if (aRSImageProducer_1165 != null) {
  3385.             aRSImageProducer_1165.initDrawingArea();
  3386.             Texture.lineOffsets = chatBoxAreaOffsets;
  3387.             int j = 151;
  3388.             if (s != null)
  3389.                 j -= 7;
  3390.             aTextDrawingArea_1271.drawText(0, s1, j, 257);
  3391.             aTextDrawingArea_1271.drawText(0xffffff, s1, j - 1, 256);
  3392.             j += 15;
  3393.             if (s != null) {
  3394.                 aTextDrawingArea_1271.drawText(0, s, j, 257);
  3395.                 aTextDrawingArea_1271.drawText(0xffffff, s, j - 1, 256);
  3396.             }
  3397.             aRSImageProducer_1165.drawGraphics(4, super.graphics, 4);
  3398.             return;
  3399.         }
  3400.         if (super.fullGameScreen != null) {
  3401.             super.fullGameScreen.initDrawingArea();
  3402.             Texture.lineOffsets = gameScreenOffsets;
  3403.             int k = 251;
  3404.             char c = '\u012C';
  3405.             byte byte0 = 50;
  3406.             DrawingArea.method336(byte0, k - 5 - byte0 / 2, 0, c, 383 - c / 2);
  3407.             DrawingArea.fillPixels(k - 5 - byte0 / 2, byte0, 0xffffff, 383 - c / 2, c);
  3408.             if (s != null)
  3409.                 k -= 7;
  3410.             aTextDrawingArea_1271.drawText(0, s1, k, 383);
  3411.             aTextDrawingArea_1271.drawText(0xffffff, s1, k - 1, 382);
  3412.             k += 15;
  3413.             if (s != null) {
  3414.                 aTextDrawingArea_1271.drawText(0, s, k, 383);
  3415.                 aTextDrawingArea_1271.drawText(0xffffff, s, k - 1, 382);
  3416.             }
  3417.             super.fullGameScreen.drawGraphics(0, super.graphics, 0);
  3418.         }
  3419.     }
  3420.  
  3421.     public void doAction(int i) {
  3422.         if (i < 0) {
  3423.             return;
  3424.         }
  3425.         if (inputDialogState != 0) {
  3426.             inputDialogState = 0;
  3427.             inputTaken = true;
  3428.         }
  3429.         int j = menuActionCmd2[i];
  3430.         int k = menuActionCmd3[i];
  3431.         int l = menuActionID[i];
  3432.         int i1 = menuActionCmd1[i];
  3433.         if (l >= 2000) {
  3434.             l -= 2000;
  3435.         }
  3436.         if (l == 582) {
  3437.             NPC npc = npcArray[i1];
  3438.             if (npc != null) {
  3439.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, npc.smallY[0], myPlayer.smallX[0], false, npc.smallX[0]);
  3440.                 crossX = super.saveClickX;
  3441.                 crossY = super.saveClickY;
  3442.                 crossType = 2;
  3443.                 crossIndex = 0;
  3444.                 stream.createFrame(57);
  3445.                 stream.method432(anInt1285);
  3446.                 stream.method432(i1);
  3447.                 stream.method431(anInt1283);
  3448.                 stream.method432(anInt1284);
  3449.             }
  3450.         }
  3451.         if (l == 234) {
  3452.             boolean flag1 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j);
  3453.             if (!flag1) {
  3454.                 flag1 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j);
  3455.             }
  3456.             crossX = super.saveClickX;
  3457.             crossY = super.saveClickY;
  3458.             crossType = 2;
  3459.             crossIndex = 0;
  3460.             stream.createFrame(236);
  3461.             stream.method431(k + baseY);
  3462.             stream.writeWord(i1);
  3463.             stream.method431(j + baseX);
  3464.         }
  3465.         if (l == 62 && method66(i1, k, j)) {
  3466.             stream.createFrame(192);
  3467.             stream.writeWord(anInt1284);
  3468.             stream.method431(i1 >> 14 & 0x7fff);
  3469.             stream.method433(k + baseY);
  3470.             stream.method431(anInt1283);
  3471.             stream.method433(j + baseX);
  3472.             stream.writeWord(anInt1285);
  3473.         }
  3474.         if (l == 511) {
  3475.             boolean flag2 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j);
  3476.             if (!flag2) {
  3477.                 flag2 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j);
  3478.             }
  3479.             crossX = super.saveClickX;
  3480.             crossY = super.saveClickY;
  3481.             crossType = 2;
  3482.             crossIndex = 0;
  3483.             stream.createFrame(25);
  3484.             stream.method431(anInt1284);
  3485.             stream.method432(anInt1285);
  3486.             stream.writeWord(i1);
  3487.             stream.method432(k + baseY);
  3488.             stream.method433(anInt1283);
  3489.             stream.writeWord(j + baseX);
  3490.         }
  3491.         if (l == 74) {
  3492.             stream.createFrame(122);
  3493.             stream.method433(k);
  3494.             stream.method432(j);
  3495.             stream.method431(i1);
  3496.             atInventoryLoopCycle = 0;
  3497.             atInventoryInterface = k;
  3498.             atInventoryIndex = j;
  3499.             atInventoryInterfaceType = 2;
  3500.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3501.                 atInventoryInterfaceType = 1;
  3502.             }
  3503.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3504.                 atInventoryInterfaceType = 3;
  3505.             }
  3506.         }
  3507.         if (l == 315) {
  3508.             RSInterface class9 = RSInterface.interfaceCache[k];
  3509.             boolean flag8 = true;
  3510.             if (class9.anInt214 > 0) {
  3511.                 flag8 = promptUserForInput(class9);
  3512.             }
  3513.             if (flag8) {
  3514.                 stream.createFrame(185);
  3515.                 stream.writeWord(k);
  3516.             }
  3517.         }
  3518.         if (l == 561) {
  3519.             Player player = playerArray[i1];
  3520.             if (player != null) {
  3521.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, player.smallY[0], myPlayer.smallX[0], false, player.smallX[0]);
  3522.                 crossX = super.saveClickX;
  3523.                 crossY = super.saveClickY;
  3524.                 crossType = 2;
  3525.                 crossIndex = 0;
  3526.                 anInt1188 += i1;
  3527.                 if (anInt1188 >= 90) {
  3528.                     stream.createFrame(136);
  3529.                     anInt1188 = 0;
  3530.                 }
  3531.                 stream.createFrame(128);
  3532.                 stream.writeWord(i1);
  3533.             }
  3534.         }
  3535.         if (l == 20) {
  3536.             NPC class30_sub2_sub4_sub1_sub1_1 = npcArray[i1];
  3537.             if (class30_sub2_sub4_sub1_sub1_1 != null) {
  3538.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_1.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_1.smallX[0]);
  3539.                 crossX = super.saveClickX;
  3540.                 crossY = super.saveClickY;
  3541.                 crossType = 2;
  3542.                 crossIndex = 0;
  3543.                 stream.createFrame(155);
  3544.                 stream.method431(i1);
  3545.             }
  3546.         }
  3547.         if (l == 779) {
  3548.             Player class30_sub2_sub4_sub1_sub2_1 = playerArray[i1];
  3549.             if (class30_sub2_sub4_sub1_sub2_1 != null) {
  3550.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_1.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_1.smallX[0]);
  3551.                 crossX = super.saveClickX;
  3552.                 crossY = super.saveClickY;
  3553.                 crossType = 2;
  3554.                 crossIndex = 0;
  3555.                 stream.createFrame(153);
  3556.                 stream.method431(i1);
  3557.             }
  3558.         }
  3559.         if (l == 516) {
  3560.             if (!menuOpen) {
  3561.                 worldController.method312(super.saveClickY - 4, super.saveClickX - 4);
  3562.             } else {
  3563.                 worldController.method312(k - 4, j - 4);
  3564.             }
  3565.         }
  3566.         if (l == 1062) {
  3567.             anInt924 += baseX;
  3568.             if (anInt924 >= 113) {
  3569.                 stream.createFrame(183);
  3570.                 stream.writeDWordBigEndian(0xe63271);
  3571.                 anInt924 = 0;
  3572.             }
  3573.             method66(i1, k, j);
  3574.             stream.createFrame(228);
  3575.             stream.method432(i1 >> 14 & 0x7fff);
  3576.             stream.method432(k + baseY);
  3577.             stream.writeWord(j + baseX);
  3578.         }
  3579.         if (l == 679 && !aBoolean1149) {
  3580.             stream.createFrame(40);
  3581.             stream.writeWord(k);
  3582.             aBoolean1149 = true;
  3583.         }
  3584.         if (l == 431) {
  3585.             stream.createFrame(129);
  3586.             stream.method432(j);
  3587.             stream.writeWord(k);
  3588.             stream.method432(i1);
  3589.             atInventoryLoopCycle = 0;
  3590.             atInventoryInterface = k;
  3591.             atInventoryIndex = j;
  3592.             atInventoryInterfaceType = 2;
  3593.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3594.                 atInventoryInterfaceType = 1;
  3595.             }
  3596.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3597.                 atInventoryInterfaceType = 3;
  3598.             }
  3599.         }
  3600.         if (l == 337 || l == 42 || l == 792 || l == 322) {
  3601.             String s = menuActionName[i];
  3602.             int k1 = s.indexOf("@whi@");
  3603.             if (k1 != -1) {
  3604.                 long l3 = TextClass.longForName(s.substring(k1 + 5).trim());
  3605.                 if (l == 337) {
  3606.                     addFriend(l3);
  3607.                 }
  3608.                 if (l == 42) {
  3609.                     addIgnore(l3);
  3610.                 }
  3611.                 if (l == 792) {
  3612.                     delFriend(l3);
  3613.                 }
  3614.                 if (l == 322) {
  3615.                     delIgnore(l3);
  3616.                 }
  3617.             }
  3618.         }
  3619.         if (l == 53) {
  3620.             stream.createFrame(135);
  3621.             stream.method431(j);
  3622.             stream.method432(k);
  3623.             stream.method431(i1);
  3624.             atInventoryLoopCycle = 0;
  3625.             atInventoryInterface = k;
  3626.             atInventoryIndex = j;
  3627.             atInventoryInterfaceType = 2;
  3628.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3629.                 atInventoryInterfaceType = 1;
  3630.             }
  3631.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3632.                 atInventoryInterfaceType = 3;
  3633.             }
  3634.         }
  3635.         if (l == 539) {
  3636.             stream.createFrame(16);
  3637.             stream.method432(i1);
  3638.             stream.method433(j);
  3639.             stream.method433(k);
  3640.             atInventoryLoopCycle = 0;
  3641.             atInventoryInterface = k;
  3642.             atInventoryIndex = j;
  3643.             atInventoryInterfaceType = 2;
  3644.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3645.                 atInventoryInterfaceType = 1;
  3646.             }
  3647.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3648.                 atInventoryInterfaceType = 3;
  3649.             }
  3650.         }
  3651.         if (l == 484 || l == 6) {
  3652.             String s1 = menuActionName[i];
  3653.             int l1 = s1.indexOf("@whi@");
  3654.             if (l1 != -1) {
  3655.                 s1 = s1.substring(l1 + 5).trim();
  3656.                 String s7 = TextClass.fixName(TextClass.nameForLong(TextClass.longForName(s1)));
  3657.                 boolean flag9 = false;
  3658.                 for (int j3 = 0; j3 < playerCount; j3++) {
  3659.                     Player class30_sub2_sub4_sub1_sub2_7 = playerArray[playerIndices[j3]];
  3660.                     if (class30_sub2_sub4_sub1_sub2_7 == null || class30_sub2_sub4_sub1_sub2_7.name == null || !class30_sub2_sub4_sub1_sub2_7.name.equalsIgnoreCase(s7)) {
  3661.                         continue;
  3662.                     }
  3663.                     doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_7.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_7.smallX[0]);
  3664.                     if (l == 484) {
  3665.                         stream.createFrame(139);
  3666.                         stream.method431(playerIndices[j3]);
  3667.                     }
  3668.                     if (l == 6) {
  3669.                         anInt1188 += i1;
  3670.                         if (anInt1188 >= 90) {
  3671.                             stream.createFrame(136);
  3672.                             anInt1188 = 0;
  3673.                         }
  3674.                         stream.createFrame(128);
  3675.                         stream.writeWord(playerIndices[j3]);
  3676.                     }
  3677.                     flag9 = true;
  3678.                     break;
  3679.                 }
  3680.  
  3681.                 if (!flag9) {
  3682.                     pushMessage("Unable to find " + s7, 0, "");
  3683.                 }
  3684.             }
  3685.         }
  3686.         if (l == 870) {
  3687.             stream.createFrame(53);
  3688.             stream.writeWord(j);
  3689.             stream.method432(anInt1283);
  3690.             stream.method433(i1);
  3691.             stream.writeWord(anInt1284);
  3692.             stream.method431(anInt1285);
  3693.             stream.writeWord(k);
  3694.             atInventoryLoopCycle = 0;
  3695.             atInventoryInterface = k;
  3696.             atInventoryIndex = j;
  3697.             atInventoryInterfaceType = 2;
  3698.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3699.                 atInventoryInterfaceType = 1;
  3700.             }
  3701.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3702.                 atInventoryInterfaceType = 3;
  3703.             }
  3704.         }
  3705.         if (l == 847) {
  3706.             stream.createFrame(87);
  3707.             stream.method432(i1);
  3708.             stream.writeWord(k);
  3709.             stream.method432(j);
  3710.             atInventoryLoopCycle = 0;
  3711.             atInventoryInterface = k;
  3712.             atInventoryIndex = j;
  3713.             atInventoryInterfaceType = 2;
  3714.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3715.                 atInventoryInterfaceType = 1;
  3716.             }
  3717.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3718.                 atInventoryInterfaceType = 3;
  3719.             }
  3720.         }
  3721.         if (l == 626) {
  3722.             RSInterface class9_1 = RSInterface.interfaceCache[k];
  3723.             spellSelected = 1;
  3724.             anInt1137 = k;
  3725.             spellUsableOn = class9_1.spellUsableOn;
  3726.             itemSelected = 0;
  3727.             needDrawTabArea = true;
  3728.             String s4 = class9_1.selectedActionName;
  3729.             if (s4.indexOf(" ") != -1) {
  3730.                 s4 = s4.substring(0, s4.indexOf(" "));
  3731.             }
  3732.             String s8 = class9_1.selectedActionName;
  3733.             if (s8.indexOf(" ") != -1) {
  3734.                 s8 = s8.substring(s8.indexOf(" ") + 1);
  3735.             }
  3736.             spellTooltip = s4 + " " + class9_1.spellName + " " + s8;
  3737.             if (spellUsableOn == 16) {
  3738.                 needDrawTabArea = true;
  3739.                 tabID = 3;
  3740.                 tabAreaAltered = true;
  3741.             }
  3742.             return;
  3743.         }
  3744.         if (l == 78) {
  3745.             stream.createFrame(117);
  3746.             stream.method433(k);
  3747.             stream.method433(i1);
  3748.             stream.method431(j);
  3749.             atInventoryLoopCycle = 0;
  3750.             atInventoryInterface = k;
  3751.             atInventoryIndex = j;
  3752.             atInventoryInterfaceType = 2;
  3753.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3754.                 atInventoryInterfaceType = 1;
  3755.             }
  3756.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3757.                 atInventoryInterfaceType = 3;
  3758.             }
  3759.         }
  3760.         if (l == 27) {
  3761.             Player class30_sub2_sub4_sub1_sub2_2 = playerArray[i1];
  3762.             if (class30_sub2_sub4_sub1_sub2_2 != null) {
  3763.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_2.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_2.smallX[0]);
  3764.                 crossX = super.saveClickX;
  3765.                 crossY = super.saveClickY;
  3766.                 crossType = 2;
  3767.                 crossIndex = 0;
  3768.                 anInt986 += i1;
  3769.                 if (anInt986 >= 54) {
  3770.                     stream.createFrame(189);
  3771.                     stream.writeWordBigEndian(234);
  3772.                     anInt986 = 0;
  3773.                 }
  3774.                 stream.createFrame(73);
  3775.                 stream.method431(i1);
  3776.             }
  3777.         }
  3778.         if (l == 213) {
  3779.             boolean flag3 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j);
  3780.             if (!flag3) {
  3781.                 flag3 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j);
  3782.             }
  3783.             crossX = super.saveClickX;
  3784.             crossY = super.saveClickY;
  3785.             crossType = 2;
  3786.             crossIndex = 0;
  3787.             stream.createFrame(79);
  3788.             stream.method431(k + baseY);
  3789.             stream.writeWord(i1);
  3790.             stream.method432(j + baseX);
  3791.         }
  3792.         if (l == 632) {
  3793.             stream.createFrame(145);
  3794.             stream.method432(k);
  3795.             stream.method432(j);
  3796.             stream.method432(i1);
  3797.             atInventoryLoopCycle = 0;
  3798.             atInventoryInterface = k;
  3799.             atInventoryIndex = j;
  3800.             atInventoryInterfaceType = 2;
  3801.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3802.                 atInventoryInterfaceType = 1;
  3803.             }
  3804.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3805.                 atInventoryInterfaceType = 3;
  3806.             }
  3807.         }
  3808.         if (l == 493) {
  3809.             stream.createFrame(75);
  3810.             stream.method433(k);
  3811.             stream.method431(j);
  3812.             stream.method432(i1);
  3813.             atInventoryLoopCycle = 0;
  3814.             atInventoryInterface = k;
  3815.             atInventoryIndex = j;
  3816.             atInventoryInterfaceType = 2;
  3817.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  3818.                 atInventoryInterfaceType = 1;
  3819.             }
  3820.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  3821.                 atInventoryInterfaceType = 3;
  3822.             }
  3823.         }
  3824.         if (l == 652) {
  3825.             boolean flag4 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j);
  3826.             if (!flag4) {
  3827.                 flag4 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j);
  3828.             }
  3829.             crossX = super.saveClickX;
  3830.             crossY = super.saveClickY;
  3831.             crossType = 2;
  3832.             crossIndex = 0;
  3833.             stream.createFrame(156);
  3834.             stream.method432(j + baseX);
  3835.             stream.method431(k + baseY);
  3836.             stream.method433(i1);
  3837.         }
  3838.         if (l == 94) {
  3839.             boolean flag5 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j);
  3840.             if (!flag5) {
  3841.                 flag5 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j);
  3842.             }
  3843.             crossX = super.saveClickX;
  3844.             crossY = super.saveClickY;
  3845.             crossType = 2;
  3846.             crossIndex = 0;
  3847.             stream.createFrame(181);
  3848.             stream.method431(k + baseY);
  3849.             stream.writeWord(i1);
  3850.             stream.method431(j + baseX);
  3851.             stream.method432(anInt1137);
  3852.         }
  3853.         if (l == 646) {
  3854.             stream.createFrame(185);
  3855.             stream.writeWord(k);
  3856.             RSInterface class9_2 = RSInterface.interfaceCache[k];
  3857.             if (class9_2.valueIndexArray != null && class9_2.valueIndexArray[0][0] == 5) {
  3858.                 int i2 = class9_2.valueIndexArray[0][1];
  3859.                 if (variousSettings[i2] != class9_2.anIntArray212[0]) {
  3860.                     variousSettings[i2] = class9_2.anIntArray212[0];
  3861.                     method33(i2);
  3862.                     needDrawTabArea = true;
  3863.                 }
  3864.             }
  3865.         }
  3866.         if (l == 225) {
  3867.             NPC class30_sub2_sub4_sub1_sub1_2 = npcArray[i1];
  3868.             if (class30_sub2_sub4_sub1_sub1_2 != null) {
  3869.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_2.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_2.smallX[0]);
  3870.                 crossX = super.saveClickX;
  3871.                 crossY = super.saveClickY;
  3872.                 crossType = 2;
  3873.                 crossIndex = 0;
  3874.                 anInt1226 += i1;
  3875.                 if (anInt1226 >= 85) {
  3876.                     stream.createFrame(230);
  3877.                     stream.writeWordBigEndian(239);
  3878.                     anInt1226 = 0;
  3879.                 }
  3880.                 stream.createFrame(17);
  3881.                 stream.method433(i1);
  3882.             }
  3883.         }
  3884.         if (l == 965) {
  3885.             NPC class30_sub2_sub4_sub1_sub1_3 = npcArray[i1];
  3886.             if (class30_sub2_sub4_sub1_sub1_3 != null) {
  3887.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_3.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_3.smallX[0]);
  3888.                 crossX = super.saveClickX;
  3889.                 crossY = super.saveClickY;
  3890.                 crossType = 2;
  3891.                 crossIndex = 0;
  3892.                 anInt1134++;
  3893.                 if (anInt1134 >= 96) {
  3894.                     stream.createFrame(152);
  3895.                     stream.writeWordBigEndian(88);
  3896.                     anInt1134 = 0;
  3897.                 }
  3898.                 stream.createFrame(21);
  3899.                 stream.writeWord(i1);
  3900.             }
  3901.         }
  3902.         if (l == 413) {
  3903.             NPC class30_sub2_sub4_sub1_sub1_4 = npcArray[i1];
  3904.             if (class30_sub2_sub4_sub1_sub1_4 != null) {
  3905.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_4.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_4.smallX[0]);
  3906.                 crossX = super.saveClickX;
  3907.                 crossY = super.saveClickY;
  3908.                 crossType = 2;
  3909.                 crossIndex = 0;
  3910.                 stream.createFrame(131);
  3911.                 stream.method433(i1);
  3912.                 stream.method432(anInt1137);
  3913.             }
  3914.         }
  3915.         if (l == 200) {
  3916.             closeOpenInterfaces();
  3917.         }
  3918.         if (l == 1025) {
  3919.             NPC class30_sub2_sub4_sub1_sub1_5 = npcArray[i1];
  3920.             if (class30_sub2_sub4_sub1_sub1_5 != null) {
  3921.                 EntityDef entityDef = class30_sub2_sub4_sub1_sub1_5.desc;
  3922.                 if (entityDef.childrenIDs != null) {
  3923.                     entityDef = entityDef.method161();
  3924.                 }
  3925.                 if (entityDef != null) {
  3926.                     String s9;
  3927.                     if (entityDef.description != null) {
  3928.                         s9 = new String(entityDef.description);
  3929.                     } else {
  3930.                         s9 = "It's a " + entityDef.name + ".";
  3931.                     }
  3932.                     pushMessage(s9, 0, "");
  3933.                 }
  3934.             }
  3935.         }
  3936.         if (l == 900) {
  3937.             method66(i1, k, j);
  3938.             stream.createFrame(252);
  3939.             stream.method433(i1 >> 14 & 0x7fff);
  3940.             stream.method431(k + baseY);
  3941.             stream.method432(j + baseX);
  3942.         }
  3943.         if (l == 412) {
  3944.             NPC class30_sub2_sub4_sub1_sub1_6 = npcArray[i1];
  3945.             if (class30_sub2_sub4_sub1_sub1_6 != null) {
  3946.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_6.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_6.smallX[0]);
  3947.                 crossX = super.saveClickX;
  3948.                 crossY = super.saveClickY;
  3949.                 crossType = 2;
  3950.                 crossIndex = 0;
  3951.                 stream.createFrame(72);
  3952.                 stream.method432(i1);
  3953.             }
  3954.         }
  3955.         if (l == 365) {
  3956.             Player class30_sub2_sub4_sub1_sub2_3 = playerArray[i1];
  3957.             if (class30_sub2_sub4_sub1_sub2_3 != null) {
  3958.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_3.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_3.smallX[0]);
  3959.                 crossX = super.saveClickX;
  3960.                 crossY = super.saveClickY;
  3961.                 crossType = 2;
  3962.                 crossIndex = 0;
  3963.                 stream.createFrame(249);
  3964.                 stream.method432(i1);
  3965.                 stream.method431(anInt1137);
  3966.             }
  3967.         }
  3968.         if (l == 729) {
  3969.             Player class30_sub2_sub4_sub1_sub2_4 = playerArray[i1];
  3970.             if (class30_sub2_sub4_sub1_sub2_4 != null) {
  3971.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_4.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_4.smallX[0]);
  3972.                 crossX = super.saveClickX;
  3973.                 crossY = super.saveClickY;
  3974.                 crossType = 2;
  3975.                 crossIndex = 0;
  3976.                 stream.createFrame(39);
  3977.                 stream.method431(i1);
  3978.             }
  3979.         }
  3980.         if (l == 577) {
  3981.             Player class30_sub2_sub4_sub1_sub2_5 = playerArray[i1];
  3982.             if (class30_sub2_sub4_sub1_sub2_5 != null) {
  3983.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_5.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_5.smallX[0]);
  3984.                 crossX = super.saveClickX;
  3985.                 crossY = super.saveClickY;
  3986.                 crossType = 2;
  3987.                 crossIndex = 0;
  3988.                 stream.createFrame(139);
  3989.                 stream.method431(i1);
  3990.             }
  3991.         }
  3992.         if (l == 956 && method66(i1, k, j)) {
  3993.             stream.createFrame(35);
  3994.             stream.method431(j + baseX);
  3995.             stream.method432(anInt1137);
  3996.             stream.method432(k + baseY);
  3997.             stream.method431(i1 >> 14 & 0x7fff);
  3998.         }
  3999.         if (l == 567) {
  4000.             boolean flag6 = doWalkTo(2, 0, 0, 0, myPlayer.smallY[0], 0, 0, k, myPlayer.smallX[0], false, j);
  4001.             if (!flag6) {
  4002.                 flag6 = doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, k, myPlayer.smallX[0], false, j);
  4003.             }
  4004.             crossX = super.saveClickX;
  4005.             crossY = super.saveClickY;
  4006.             crossType = 2;
  4007.             crossIndex = 0;
  4008.             stream.createFrame(23);
  4009.             stream.method431(k + baseY);
  4010.             stream.method431(i1);
  4011.             stream.method431(j + baseX);
  4012.         }
  4013.         if (l == 867) {
  4014.             if ((i1 & 3) == 0) {
  4015.                 anInt1175++;
  4016.             }
  4017.             if (anInt1175 >= 59) {
  4018.                 stream.createFrame(200);
  4019.                 stream.writeWord(25501);
  4020.                 anInt1175 = 0;
  4021.             }
  4022.             stream.createFrame(43);
  4023.             stream.method431(k);
  4024.             stream.method432(i1);
  4025.             stream.method432(j);
  4026.             atInventoryLoopCycle = 0;
  4027.             atInventoryInterface = k;
  4028.             atInventoryIndex = j;
  4029.             atInventoryInterfaceType = 2;
  4030.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  4031.                 atInventoryInterfaceType = 1;
  4032.             }
  4033.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  4034.                 atInventoryInterfaceType = 3;
  4035.             }
  4036.         }
  4037.         if (l == 543) {
  4038.             stream.createFrame(237);
  4039.             stream.writeWord(j);
  4040.             stream.method432(i1);
  4041.             stream.writeWord(k);
  4042.             stream.method432(anInt1137);
  4043.             atInventoryLoopCycle = 0;
  4044.             atInventoryInterface = k;
  4045.             atInventoryIndex = j;
  4046.             atInventoryInterfaceType = 2;
  4047.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  4048.                 atInventoryInterfaceType = 1;
  4049.             }
  4050.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  4051.                 atInventoryInterfaceType = 3;
  4052.             }
  4053.         }
  4054.         if (l == 606) {
  4055.             String s2 = menuActionName[i];
  4056.             int j2 = s2.indexOf("@whi@");
  4057.             if (j2 != -1) {
  4058.                 if (openInterfaceID == -1) {
  4059.                     closeOpenInterfaces();
  4060.                     reportAbuseInput = s2.substring(j2 + 5).trim();
  4061.                     canMute = false;
  4062.                     for (RSInterface element : RSInterface.interfaceCache) {
  4063.                         if (element == null || element.anInt214 != 600) {
  4064.                             continue;
  4065.                         }
  4066.                         reportAbuseInterfaceID = openInterfaceID = element.parentID;
  4067.                         break;
  4068.                     }
  4069.  
  4070.                 } else {
  4071.                     pushMessage("Please close the interface you have open before using 'report abuse'", 0, "");
  4072.                 }
  4073.             }
  4074.         }
  4075.         if (l == 491) {
  4076.             Player class30_sub2_sub4_sub1_sub2_6 = playerArray[i1];
  4077.             if (class30_sub2_sub4_sub1_sub2_6 != null) {
  4078.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub2_6.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub2_6.smallX[0]);
  4079.                 crossX = super.saveClickX;
  4080.                 crossY = super.saveClickY;
  4081.                 crossType = 2;
  4082.                 crossIndex = 0;
  4083.                 stream.createFrame(14);
  4084.                 // stream.method432(anInt1284);
  4085.                 stream.writeWord(i1);
  4086.                 // stream.writeWord(anInt1285);
  4087.                 stream.method431(anInt1283);
  4088.             }
  4089.         }
  4090.         if (l == 639) {
  4091.             String s3 = menuActionName[i];
  4092.             int k2 = s3.indexOf("@whi@");
  4093.             if (k2 != -1) {
  4094.                 long l4 = TextClass.longForName(s3.substring(k2 + 5).trim());
  4095.                 int k3 = -1;
  4096.                 for (int i4 = 0; i4 < friendsCount; i4++) {
  4097.                     if (friendsListAsLongs[i4] != l4) {
  4098.                         continue;
  4099.                     }
  4100.                     k3 = i4;
  4101.                     break;
  4102.                 }
  4103.  
  4104.                 if (k3 != -1 && friendsNodeIDs[k3] > 9) {
  4105.                     inputTaken = true;
  4106.                     inputDialogState = 0;
  4107.                     messagePromptRaised = true;
  4108.                     promptInput = "";
  4109.                     friendsListAction = 3;
  4110.                     aLong953 = friendsListAsLongs[k3];
  4111.                     aString1121 = "Enter message to send to " + friendsList[k3];
  4112.                 } else {
  4113.                     pushMessage("That player is currently offline.", 0, "");
  4114.                 }
  4115.             }
  4116.         }
  4117.         if (l == 454) {
  4118.             stream.createFrame(41);
  4119.             stream.writeWord(i1);
  4120.             stream.method432(j);
  4121.             stream.method432(k);
  4122.             atInventoryLoopCycle = 0;
  4123.             atInventoryInterface = k;
  4124.             atInventoryIndex = j;
  4125.             atInventoryInterfaceType = 2;
  4126.             if (RSInterface.interfaceCache[k].parentID == openInterfaceID) {
  4127.                 atInventoryInterfaceType = 1;
  4128.             }
  4129.             if (RSInterface.interfaceCache[k].parentID == backDialogID) {
  4130.                 atInventoryInterfaceType = 3;
  4131.             }
  4132.         }
  4133.         if (l == 478) {
  4134.             NPC class30_sub2_sub4_sub1_sub1_7 = npcArray[i1];
  4135.             if (class30_sub2_sub4_sub1_sub1_7 != null) {
  4136.                 doWalkTo(2, 0, 1, 0, myPlayer.smallY[0], 1, 0, class30_sub2_sub4_sub1_sub1_7.smallY[0], myPlayer.smallX[0], false, class30_sub2_sub4_sub1_sub1_7.smallX[0]);
  4137.                 crossX = super.saveClickX;
  4138.                 crossY = super.saveClickY;
  4139.                 crossType = 2;
  4140.                 crossIndex = 0;
  4141.                 if ((i1 & 3) == 0) {
  4142.                     anInt1155++;
  4143.                 }
  4144.                 if (anInt1155 >= 53) {
  4145.                     stream.createFrame(85);
  4146.                     stream.writeWordBigEndian(66);
  4147.                     anInt1155 = 0;
  4148.                 }
  4149.                 stream.createFrame(18);
  4150.                 stream.method431(i1);
  4151.             }
  4152.         }
  4153.         if (l == 113) {//third
  4154.             method66(i1, k, j);
  4155.             stream.createFrame(70