Git Product home page Git Product logo

celeste-wasm's People

Contributors

bomberfish avatar co1acraft avatar r58playz avatar velzie avatar

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

celeste-wasm's Issues

Dynamically loaded assets and/or lossy compression

Hi people, first of all congratulations on this port! I'll say you've actually beat me on time, because I had the same idea about a week ago, but didn't actually start anything, and then today I decide to Google "celeste wasm" and magically I see this project appear out of nowhere!

The game runs pretty well even on Firefox, performance-wise, although in general it uses a lot of system memory, and the huge download makes jumping into the game to have fun slow. Loading issues are especially prevalent with the single-file HTML version. I think that this port could be made much more enjoyable by implementing one (or both) of two practices that are pretty standard when creating web games, regarding game assets (music, sfxs, textures, backgrounds, ...):

  • Dynamic asset loading (realistically applies only to the HTTP-served version): I'm not sure of if there are implementation difficulties with the runtime environment you're using here, but it would be useful to have the game download just the assets it needs as it's being played. The game could start almost immediately, as it would only need to download the code initially, and maybe things like localization data, and the rest would be downloaded as the player progresses. Vanilla JavaScript games can do this easily (on there it would require more effort to preload assets, actually), but a notable example of a WASM-based game engine using this technique is Ren'Py, which can be made to load everything as needed, usually with pixelated version of images being preloaded to avoid annoying pop-in effects. In the wild, I've also seen Unity Web games do this to a degree (at least with music, I don't know about the rest), as well as other minor engines.

  • Using lossily-compressed assets (applies to all): Another common practice, especially when porting games initially made for other platforms to the web, is using lossy compression, applied to assets to a degree where the space savings (and, in some cases, performance gains due to faster decoding) are notable, but the game is still pleasant to play. Many ports of mobile games do this, and you will probably notice it by playing a random one on HTML gaming sites, but a notable example is Eaglercraft, a port of Minecraft Java edition that, for release 1.8, manages to pack the entire game in a single HTML file of just ~15 MB. Optionally, this port could be distributed in two flavours, one with the unaltered assets for the most hardcore gamers (sorry I had to write it it's too funny), and the highly-optimized one for everyone else. I think I would actually like to try and implement this improvement myself, but I'm standing at a dead end after being confronted with Celeste's .data file format, which I can't really find much information online, and the most I've found is extractor programs with no repacking feature. (I haven't yet tried to write any packing code myself by reading the unpacking one, because I can't get if this is a Celeste-specific format or is just a strange but common format for which good tooling already exists.)

Let me know if these ideas fit on your roadmap! This porting has so much potential, it's truly the Universal Binary Executable for Celeste, and I think these two improvements would go a long way to making it more accessible and pleasant (even realistically usable on mobile, I predict).

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.