rscplus / rscplus Goto Github PK
View Code? Open in Web Editor NEWRuneScape Classic client mod & preservation platform
Home Page: https://rsc.plus
License: GNU General Public License v3.0
RuneScape Classic client mod & preservation platform
Home Page: https://rsc.plus
License: GNU General Public License v3.0
Several places, RSC+ draws text on the game window using its own font. If we used the same method that the retro FPS counter uses to draw text, it might look nicer.
All other features of the client probably do not give an advantage that could save time. Item Name patch can be used to identify herbs, but herblaw is not used in most speedruns & it is advantageous to pick up & identify even a guam leaf b/c the time save from not picking it up is below the xp/hr for herblaw.
In RSC, there is no way to sort your bank unless you are very particular with the order in which you deposit your items. It very quickly becomes nonviable to change the order of things, as the player acquires hundreds of items. And then later on, you can accidentally withdraw all of a stackable item and remove it from where you would like it, and not be able to put it back where it was before unless investing several hours of time.
I would like to offer players the ability to change the order in which items are displayed in their bank, to always be organized, and to be organized instantly.
We can sort by item ID as a preset, but we could also offer the user the ability to add weights to certain items to readjust their position.
Similar to the integrations in the RS3 and OSRS clients, it would be really nice to have a button somewhere in the interface that you could click to toggle click opening the relevant wiki page.
Maybe underneath the inventory satchel would be an unobtrusive place.
as said in #60
but also
https://en.wikipedia.org/wiki/Color_blindness
8% of all males and 0.5% of all females are red-green colourblind. This is actually a huge amount of people. Playing RSC as a colourblind person I would imagine is currently a frustrating thing, since several of the UI elements in the RSC client were not designed with colourblindness in mind.
We should support user-configurable colours for both "bad" and "good" which would apply in the following situations:
A few hooks needed for this I think.
Some are in
private void drawChatMessageTabs(boolean var1) {
First need a hook to disable this.surface.drawSprite((byte) 61, -4 + this.gameHeight, this.spriteMedia + 23, 0);
.
At the same place, need a hook to draw our own image there instead.
Then we need a hook to conditionally disable drawing
this.surface.drawstringCenter("Report abuse", 0, this.gameHeight - -6, 457, 0xffffff);
It would be additionally nice if we could inject our own logic to drawstringCenter afterwards, to facilitate #70.
Finally, where this code is
if (super.mouseX > 417 && super.mouseX < 497 && super.lastMouseButtonDown == 1) {
this.showDialogReportAbuseStep = 1;
super.inputTextCurrent = "";
super.inputTextFinal = "";
}
we need to abort that functionality, and add a hook to call our own function instead (which could be Nothing, if button is completely disabled, but could be #70)
It is worth noting that even if this "Report abuse" button is disabled, the ability to report players will remain accessible via the right click menu of players.
This would be good so that users no longer have to manually download replays as a prerequisite to playing them. They would always have an up to date replay library, and the issues currently plaguing Windows Users on extracting the replay library with its long file names, would no longer be an issue.
#28 would be a good prerequisite.
Similar to later games, it would be nice to have a toggle to enable or disable music. It would be nice to use libADLMIDI to produce these sounds, to give the midis a lo-fi sound.
In the authentic client's player appearance screen, there is a selector for "Gender"
line 9838 of client.java:
this.panelAppearance.addText(true, false, 1, var7, -var4 + var6, "Gender");
This selector does 2 things. Most visibly, it changes the size of the player's bust, to add D cup sized breasts. It will also (sometimes, if the developer remembers) adjust the pronouns used in NPC dialogue to be feminine instead of masculine.
This is an error, since there are many female players who may have flat chests (naturally flat, post-masectomy with no implant/bra, transgender w/out hormones). It is also an error because it is possible that the player may wish to be addressed as female while visually using the flat chest option.
We can fix this client sided.
First, replace the string "Gender" with "Body Type" on the player appearance screen.
Secondly, we can scan incoming lines of dialogue and change lines of dialogue with gendered pronouns in them to match the player's preference. The player's preferred gender can be set as an RSC+ option.
RSC+'s config gui is pretty good. It is organized by category & everything is logically placed.
However, there are upwards of 100 items, and it would be faster for users if instead of having to determine the category and then read everything in that category, they could type in a search box to be brought to the relevant tickbox immediately.
Change the buttons that affect the speed setting to be something more obvious
I shouldn't need to know 80's technology to find a button without spamming them all
Although it is not the ideal way to do things, if a player is using the RSC+ client on a server that has no official translation support, the RSC+ client could do the work of parsing incoming strings and replacing them with entirely different strings.
The reasons we would want to do this are:
This could be potentially prohibitively resource intensive, since the client will have to compare & identify possibly thousands of strings if not implemented in a smart way. (e.g., one easy smart optimization would be to sort all strings by length, and only compare strings of proper length... and then you can also go alphabetically after that.) ... (or just use a hashmap with string as key)
In RS2, when levelling up it doesn't only say "Congratulations, you are now level xx", it also informs the user of what actions they can now perform, as seen in the picture below. This is not authentic to RSC, but it is good interface design & would help players to realize their options, and to try new actions in the game. The detriment is that it is from RS2, and many players would like to avoid an experience inauthentic to RSC while playing, so we may need to keep this option off by default, and only enabled on "Heavy" or up preset.
It would not be computationally expensive to implement this client-side. We could store the players previous levels, and if they receive a level up message (already detected for screenshots), then we can additionally display a message like @gr2@RSC+: @whi@You can now fish for trout
Additional things that should be offered to toggle
This is likely not a complete list.
Follow-up for issue #41 .
Basically had been found out that in the registration part (notably) but also in the other places where the username is sent for account security, the hashing algorithm used to pass in username treated all letters as lowercase. There are several issues in that, for example not being able to have a username with capital letters after the first one. Another issue is for example if you have Aplayer and aPlayer, both should be distinct, but if logging in like aPlayer and doing some account security change or recovery, will try to find for Aplayer and apply it there. To fix it, there must be new hash placed, which maintains capitalization of letters by default even vanilla settings.
A side note enhancement will be the centering of the confirm cancel recovery request, which in general should also apply for other input popup boxes probably
During Replay or while logged into a server, selecting "Remove X" once an item has been offered will crash the client.
[ GAME][07:07:42] Error: client.JA(3,2,null,true,{...}) client.RA(null,12,2,true) client.G(8) client.DC(0) client.AB(13) client.JD(false) | client.a client.a client.n client.I client.f client.b e.run java.lang.Thread.run:745 | java.lang.NullPointerException
[ GAME][07:07:42] error_game_crash
[ ERROR][07:07:42] Error game reported: crash
the @cya@ isn't replaced in that message.
Steps to reproduce:
[ GAME][05:31:27] Error: client.PB(-43) client.DC(0) client.AB(13) client.JD(false) | client.c client.I client.f client.b e.run java.lang.Thread.run:745 | java.lang.ArrayIndexOutOfBoundsException: -1
[ GAME][05:31:27] error_game_crash
This method https://github.com/RSCPlus/rscplus/blob/master/src/Game/Menu.java#L85
should be made a configurable setting, and probably disabled if in speedrunner mode.
I spun up a new server with the default RSCP configuration, registered a new player without logging in to it, then logged in using the server generated RSA modulus locally with RSC+. After skipping tutorial island, I looked at the inventory and saw 3 iron maces (item id 0) and when I clicked an item to equip, it sent the inventory update to the client and the actual items appeared.
Second attempt with a new player resulted in an empty inventory until I logged off and then logged back in.
as title says
Would be nice b/c then one replay format could be used for both use in wireshark and for playback in client
When Jagex placed the sell and buy x on store probably they thought was sent over as integer or an oversight of them (likely). Anyways currently is Integer.parseInt(input) and should be more like type of Short.parseUnsignedShort(input), that can be simulated that if the input > 65535 to throw NumberFormatException, else return the parsed num
This requires hooking every single string in the client. There couldn't be that many of them, right?
OrN#145
mudclient 127 from March 18th 2002 has more advanced Account Manangement than later versions of the client, such as the one that RSC+ is based on.
These Account Management features include:
I'm not sure precisely when these features were removed, but by mudclient 192 (April 8th 2004), the features are gone, and the client instructs the user to use the website instead.
It would be useful for private server use if these features were intact in the client, but RSC+ WILL NOT implement private server exclusive features. If this feature enters RSC+, it must behave identically to how it did in Client 127. This way, it is not a private server feature, it is just reintroducing past functionality, similar to the FPS counter already in RSC+.
This feature must look exactly like it did in Client 127, and the network protocol must be exactly the same as Client 127 (regarding opcode, packet structure, and encryption).
Here is some 127 deob code for the relevant packets to be implemented:
this.conn.enter(2);
this.conn.short_put(version);
this.conn.long_put(DataUtil.encode_name(s));
this.conn.enc_cred_put(pass, id, this.exp, this.mod);
this.conn.int_put(seed());
this.conn.send();
this.conn.read();
int j = this.conn.read();
this.conn.close();
System.out.println("Newplayer response: " + j);
this.conn.enter(208);
for (int j1 = 0; j1 < 5; j1++) {
String s2 = this.aStringArray975[j1];
if ((s2 == null) || (s2.length() == 0))
s2 = String.valueOf(j1 + 1);
if (s2.length() > 50)
s2 = s2.substring(0, 50);
this.conn.byte_put(s2.length());
this.conn.str_put(s2);
this.conn.enc_cred_put(DataUtil.base47_encode(this.aClass6_966
.text(this.anIntArray971[j1])), this.sess_id,
this.RSA_EXP, this.RSA_MOD);
}
this.conn.exit();
this.conn.enter(8);
this.conn.long_put(DataUtil
.encode_name(this.aString947));
this.conn.int_put(seed());
this.conn.enc_cred_put(new StringBuilder().append(s4)
.append(s6).toString(), i1, this.RSA_EXP,
this.RSA_MOD);
for (int k1 = 0; k1 < 5; k1++) {
this.conn.enc_cred_put(DataUtil
.base47_encode(this.lost_ui
.text(this.anIntArray989[k1])), i1,
this.RSA_EXP, this.RSA_MOD);
}
this.conn.send();
this.conn.read();
int l1 = this.conn.read();
System.out.println(new StringBuilder()
.append("Recover response: ").append(l1)
.toString());
if (l1 == 0) {
this.ui_state = 2;
status_text(
"Sorry, recovery failed. You may try again in 1 hour",
"");
this.aBoolean976 = true;
return;
}
if (l1 == 1) {
this.ui_state = 2;
status_text(
"Your pass has been reset. You may now use the new pass to login",
"");
return;
}
this.ui_state = 2;
status_text("Recovery failed! Attempts exceeded?", "");
return;
Although there is no client opcode 2 or client opcode 208 in the modern client, client opcode 8 is already CLIENT_OPCODE_SEND_DUEL_SETTINGS
. Obviously there is no conflict on our side if the client just sending opcode 8 with all this "extra" data, but if a server were implementing the hybrid RSC127/RSC235 protocol we are looking to adapt here, they would have to write a small distinction to figure out which opcode 8 the client is talking about. It could be done either by seeing that there is no Player associated with the connection, or by checking if packet length is 4 bytes long or not (RSC235 client opcode 8 is always 4 bytes, and RSC127 client opcode 8 can never be 4 bytes). If it were not possible to distinguish the two opcodes, there would be a problem, but it works out.
RSC+ currently automatically skips the first screen of the client with this line of code here:
Line 457 in 398a715
This should probably have been an option in the first place. We skip this screen right now because:
a. After the removal of these Account Management options, the initial screen really serves no purpose.
b. Actually, it is a hindrance. Every time this screen is loaded, the saved Username and Password are cleared. And also it is an extra click before you get into the client.
This screen has been disabled in RSC+ since 2016 and all features of the client have been programmed assuming that it is skipped. The screen must be made functional again, it must be tested with replay compatibility (drag-n-drop & queue especially). It must actually be extended to work (currently, even if this one line of code is removed, the "Click here to login" button seems to be broken) and it must be extended further to implement the RSC127 interface.
Like all other things, this feature must be on a toggle. If the user desires to restore the original RSC+ functionality of always launching directly to login screen on start, that must be possible.
Furthermore, I would probably like it if this login screen is only shown at the beginning of client run. Once the user has "click here to login", the client should not show the screen again unless the user clicks "Cancel" or relaunches the client.
Probably should.
Not very fan that was added back in the first reopening, since some people learned mechanics with it. Anyways option can be featured as config option
might be implemented enough to the point where it doesn't matter, now that we have RSCMinus playback which can pretty much handle disconnects as they were.
has been implemented already, we store IP address in metadata.bin
I'm happy with these fields being stored in metadata.bin
has been implemented, it's stored in metadata.bin
OrN#172
This would be neat.
Sometimes, after either combatant has fled from a battle or you have killed an NPC, a second HP overlay bar will display during/when engaging combat with a new NPC (of the same type?). The HP bars will swap intermittently between themselves which causes a flickering effect. This typically clears up once combat has ended again, though it can sometimes persist for a few battles, which can cause even more HP overlays to display (as seen below).
Currently, there are a couple of settings related to sounds in the client.
I would like to add these settings:
OrN#173
I don't think more needs to be said, other than probably #30 needs to be completed first.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.