SHARE
TWEET

Game.java

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