Git Product home page Git Product logo

rscplus's Introduction

rscplus

RuneScape Classic is made and owned by Jagex Ltd. and this project is not in any way affiliated with them.

The code is licensed under GPLv3 in hopes of protecting people from malicious modifications.

Download

The latest release can be found here.

Chat

You can reach us on #rscplus at irc.libera.chat, or join our Discord server (Invite link)

Changes since RSC went offline

  • No longer contact RuneScape.com to get world total counts
  • Toggleable buttons to control Replay playback
  • Queued replay recordings
  • Bank filter / sorting
  • Many more!

Features

  • Game resolution changing (about 80% complete)
  • NPC Dialogue options with 1-9 on keyboard
  • Roof hiding
  • Option to always show combat style menu, and persistent combat style setting
  • XP Drops
  • Screenshots
  • Mouse wheel zoom
  • Middle mouse camera rotation
  • HP, Prayer, and fatigue bars on the bottom right of the screen
  • Fatigue on-screen alert
  • Integrated Twitch chat into in-game chat
  • Inventory free space counter
  • Highlight friends and show their names when they're near you
  • Notifications for PMs, trades, duel requests, low HP, and high fatigue
  • Configurable item name patching
  • Recording and playback of game sessions using the real data the server sent
  • And more...

All features that modify the interface can be disabled if desired.

Chat Commands

::help - displays all keyboard commands and chat commands in game

::[skillname] - Tells skill level and xp in chat

::next_[skillname] - Tells how much xp needed until next level in chat

::total - Shows total level and total xp in chat

::fatigue - Shows the fatigue percentage accurately in chat

::screenshot - Take screenshot (Saved in the screenshots directory)

::sleep - Sleep, provided you have a sleeping bag in inventory

::banksearch [aWord] - Searches current bank state for banked items containing "aWord". Note that withdrawing all of a certain item's type will push it to the end of the bank and thus withdrawing all should not be done if your bank is tidy. To exit the search mode, speak to the banker again.

::togglestartsearchedbank [[aWord]] - Toggle between searchable bank mode and normal mode; specifying the parameter updates the search keyword stored.

::togglebypassattack - Toggle bypass right click attack

::toggleroofs - Toggle roof hiding

::togglecolor - Toggle colored text in terminal

::togglecombat - Toggle combat experience menu

::togglefatigue - Toggle fatigue alert

::debug - Toggle debug mode

::togglelogindetails - Toggle IP/Dns login details shown at welcome screen

::toggletwitch - Toggle twitch chat hidden/shown

::toggleiteminfo - Toggle Item info

::togglenpcinfo - Toggle NPC info

::toggleplayerinfo - Toggle Player info

::toggleowninfo - Toggle own player info

::togglehitbox - Toggle hitboxes for NPC info

::togglexpdrops - Toggle XP drops

::togglefatiguedrops - Toggle fatigue drops

::fov <value> - Change FoV to specified value (range of 7 to 16)

::logout - Logout

::togglefriendinfo - Toggle Player info for Friends only

::toggleposition - Toggle player's position

::toggleretrofps - Toggle retro FPS overlay (Early RSC style)

::toggleinvcount - Toggle the overlay of current inventory used

::togglebuffs - Toggle combat (de)buffs and cooldowns display

::toggledeathitems - Toggle displaying which items are kept upon dying

::togglestatusdisplay - Toggle Hits/Prayer/Fatigue display

::cmb - WARNING! Because of color codes, this command will break the character limit and may be bannable. Don't send this command across PM to RS2/RS3 because they'll see a bunch of RS1 color codes and you may get banned if you're reported. Mimic's osbuddy's !cmb; outputs combat level (with decimal), Att, Str, Def, Hits, Ranged, Magic, and Prayer levels.

::cmbnocolor - Mimic's osbuddy's !cmb; doesn't use color codes and is within character limits

::xmas - Formats your message in festive Red Green and White colours

::rainbow - Formats your message in all the colours of the rainbow (or at least 6)

::system - Hides your username and outputs your message

::update - Manually check if RSC+ is up to date

Controls

  • Middle mouse click - Rotate camera
  • Mouse wheel scroll - Zoom camera

All keybinds are configurable via the Settings GUI

General

  • Ctrl + x - Sleep, provided you have a sleeping bag in inventory
  • Ctrl + l - Logout
  • Ctrl + s - Take screenshot (Saved in the screenshots directory)
  • Ctrl + o - Open the options/settings window
  • Ctrl + c - Toggle combat experience menu
  • Ctrl + [ - Toggle XP drops
  • Ctrl + ] - Toggle fatigue drops
  • Ctrl + f - Toggle fatigue alert
  • Ctrl + v - Toggle inventory full alert
  • Ctrl + a - Toggle bypass right click attack
  • Ctrl + r - Toggle roof hiding
  • Ctrl + q - Toggle start on searchable bank mode (uses previously stored keyword on searchable bank)
  • Ctrl + z - Toggle colored chat text in terminal

Overlays

  • Ctrl + u - Toggle Hits/Prayer/Fatigue display
  • Ctrl + y - Toggle combat (de)buffs and cooldowns display
  • Ctrl + e - Toggle inventory count overlay
  • Alt + p - Toggle position
  • Alt + f - Toggle retro FPS overlay
  • Ctrl + i - Toggle Item name ovelay
  • Ctrl + p - Toggle Player name overlay
  • Unbound - Toggle Friend name overlay
  • Ctrl + n - Toggle NPC name overlay
  • Ctrl + h - Toggle hitboxes
  • Ctrl + g - Toggle food heal overlay
  • Unbound - Toggle time until health regen
  • Ctrl + d - Toggle debug mode

Streaming & Privacy

  • Ctrl + t - Toggle twitch chat hidden/shown
  • Ctrl + j - Toggle IP/DNS shown at login screen

Replay (only used while a recording is played back)

  • Ctrl + b - Stop playback
  • Space - Pause playback
  • Ctrl + Right - Increase playback speed
  • Ctrl + Left - Decrease playback speed
  • Ctrl + Down - Reset playback speed

Miscellaneous

  • Ctrl + 1-5 - World switch on login screen

Contributing

  • Fork the project
  • Work on it
  • Pull request the branch

I will not accept any game automation features (macroing, etc.)

Building Build Status

You must have git, apache-ant, and jdk 1.7 or 1.8 installed to do this.

git clone https://github.com/RSCPlus/rscplus
cd rscplus
ant dist

The result should be in the dist folder.

There is an Eclipse project in the source root you can import.

If you are running rsc+ in Eclipse and want colorized console output, you may want to use an extension called ANSI Escape in Console and add -Djansi.passthrough=true to VM arguments for your run configuration.

If you are running rsc+ in IntelliJ IDEA and want colorized console output, you need to add -Djansi.passthrough=true to VM options for your run configuration.

If you are running rsc+ from console, and want to output console text with colorization to a log file, add -Djansi.passthrough=true to your java arguments.

Contributors

Check here for contributors

Thanks to Warriorccc0 (Brinner) for testing various things on Windows.

rscplus's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

rscplus's Issues

Option to hide "Report abuse" button

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.

Possible XP Bar improvements

as said in #60

  • Ability to change XP progress bar between Level & Goal mode (currently stuck in Level mode, but could add another right-click menu option for this)
  • Ability to change colour of XP progress bar to user's favourite colour, or depending on percent progress
  • Could offer per-account preferred skill pin
  • Could maybe space the right-click menu out a bit more
  • Maybe if an XP Level goal ends up being a round Level (e.g. 70.0), it should just say 70 instead of 70.0
  • Indicate how long the session has elapsed
  • Option to permanently stick the hover-menu somewhere on screen (top right corner while interfaces are closed?)
  • Make sure not to reset entire XP session on log out
  • Hours/Minutes to next level / goal
  • play Level Advance sound if reaching goal & goal level is not already on a level boundary
  • Can also put green message "Congratulations, you reached xxxxx XP!"

but also

  • Add menu option to change shown skill without having to gain XP in it. The menu option will do nothing except inform the user they can click on the skill names in the stats menu in order to set that as the active skill.

Option to inform the user that "You can now xxxxx" when leveling up

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

hunter60

OrN#173: VR Support

OrN#173

I don't think more needs to be said, other than probably #30 needs to be completed first.

Implement speedrunner mode checkbox in streamer tab

While "speedrunner mode" is active:

  1. recording replay is always done
  2. client looks for when server sends first player update packet after appearance packet for "start of run" & records the time, also outputting it to console
  3. certain features of the client may need to be disabled
    • The ability to desync camera position from player position should not be possible b/c it is too weird. It doesn't save time, we just would not like to that feature on while demonstrating a speedrun b/c the audience would be jarred.
    • keyboard shortcut to activate sleeping bag should not work. Saves a very slight amount of time & mouse movement
    • "Always left click to attack" should not work. I never used this feature & I generally don't like switching options.
  4. client should look for if player position is equal to the inside of the champion's guild & announce time
  5. client should look for if player completes Dragon Slayer & give time
  6. output time logged in & ticks logged in when logging out.

Features of the RSC+ client that we will allow in speedruns even though they give an advantage over the original 235 client:

  1. Resizable mode & increased render distance
    • This is only slightly advantageous compared to using the minimap. You can walk about as far in 1 click by using the minimap as you can with increased render distance.
  2. Number keys to select dialogue options
    • This does indeed save a lot of time smithing/fletching. It is allowed because we want to allow it & it was available in RSC+ to users during the real RSC era. A similarly speedy mousekey setup could be created for those wishing to use the original 235 client.
  3. Number of spaces shown in inventory
    • Knowing when you have a full inventory without hovering over the satchel can save you from mining an extra ore and it falling needlessly on the floor. This could save time & mouse movement.

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.

Enhancements for Account Security features

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

Decouple Gender & Bust Size in the Player Appearance Screen

In the authentic client's player appearance screen, there is a selector for "Gender"

2020-10-04-045147_257x357_scrot

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 wiki integration

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.

HP Overlay sometimes displays HP info from two separate NPCs

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).

Screenshot from 2020-12-11 16 05 42

Add more options to disable more hooks

Additional things that should be offered to toggle

  • ability to NOT be able to type numbers to select dialogue options
  • ability to toggle keyboard shortcuts on or off (not on a keyboard toggle lol)
  • the resizable hooks should be able to be disabled

This is likely not a complete list.

"Sounds" expansion; filtering & varied alert sounds.

Currently, there are a couple of settings related to sounds in the client.

  1. The built in "On" and "Off" setting in the wrench menu. These disable or enable all sounds and it is only available while on a P2P world.
  2. "Enable notification sounds" under the notifications tab

I would like to add these settings:

  1. The ability to toggle playing each specific sound. Some sounds, I would like to always hear, like the leveling up sound. But I can't usually hear that sound, because I must toggle sounds off for my sanity while fishing or other activities that spam an annoying sound.
  2. More notifications should exist, and we can have custom sounds for each notification type. Currently there is just one notification sound for all notification types. I would like to add an "inventory full" notification (in addition to the existing giant red flashing text overlay), and it could have its own sound. :-)
  3. #71, area specific music

OrN#166: replay recording improvements

OrN#166
2020-06-11-003021_743x412_scrot

  1. 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.

  2. has been implemented already, we store IP address in metadata.bin

  3. I'm happy with these fields being stored in metadata.bin

  4. has been implemented, it's stored in metadata.bin

Implement part of the old client 127 protocol for Account Creation and Password Recovery

Background information:

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:

  • Account Creation
  • Setting Account Recovery Questions
  • Recovering an Account

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.

Objective:

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:

Account creation (client opcode 2)

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);

Setting account recovery questions (client opcode 208)

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();

Using account recovery questions (client opcode 8)

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;

Challenges:

  1. 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.

  2. RSC+ currently automatically skips the first screen of the client with this line of code here:

login_screen = 2;

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.

2020-10-09-162953_800x580_scrot

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.

  1. 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.

  2. 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.

Remove X in trade window causes NPE

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

Offer client-sided server message translations

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:

  1. To offer foreign language support for servers without the feature, but DO have all server messages authentic.
  2. To replace incorrect lines of dialogue. e.g., misgendering where the Gnome Bankers always call the player Sir, or for just typos and bad grammar, if desired.

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)

Client sided bank sorting

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.

Red-Green colourblindness mode

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:

UI elements where the information is given ONLY by the colour (very important)

Health Bars
red green health

Quest List
red green quest list

Friends List (online-offline)
red green friends list

UI elements where the Red-Green colour is used as an indicator in addition to textual information

Level hardness rating
red green level-xx

Whether or not you have the runes to cast the spell
red green magic spells

Game options toggles
red green options

Sell X to general store can crash client in very specific circumstance

Steps to reproduce:

  1. Sell an item to a general store that it does not usually stock
  2. Click the item that you have sold to the store and select "Sell X"
  3. Wait for the store to naturally despawn the sold items
  4. Submit your request to Sell the item to the shop
  5. The game loses the reference to the item since it has despawned from the shop's inventory and so
[  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

Inventory update packets could be missing

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.

Bank Improvements

  • Sorting
    • Sort by Item ID (and reverse)
    • Sort by alch value (and reverse)
    • Alphabetical sort (and reverse)
    • Predefined efficient bank layouts
    • User defined item preference
  • Filtering
    • Existing ::banksearch (but resettable) (and NOT filter)
    • Items currently in inventory (for easy deposit) (and NOT filter)
    • Weapons/Armour/Runes (and NOT filter)
    • Food (including raw)/Potions (and NOT filter)
    • Tools/Resources (and NOT filter)
  • Calculate Bank Value

Search Bar for Settings

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.

XP bar blocks clicks even when it is turned off in options

I was noticing a dead click (specifically right-clicking) in the area circled in red, but only after killing an NPC, and for a short time - then right click works again. Seems like it might be the XB bar intercepting the click, even though it's not visible

image

Area specific music

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.