Giter VIP home page Giter VIP logo

osus-revented's Introduction

osus-revented

The suspicious osu clone named osus, redone!

This game, originally just a fun way to learn raylib, turned into me (ohasanov) rewriting the raylib library for our purposes. The library, based on raylib 3.5, originally used GLFW as the window and input manager, which I scrapped since it weirdly doesn't support multithreading. The miniaudio library that shipped with raylib also had a ton of lag in the audio department. Both of those were basically rewritten. Although it is a crude way to do it, it is a good learning experience.

The current way we handle audio and video is by using SDL2 as the backend and a modified miniaudio library. SDL2 also doesn't "support" multithreading but at least it allowed us to poll input on a different thread than the video thread. And yes, we know that this is a pretty hacky way of doing it but probably as every developer says, this problem is for our future selves to fix.

Everything summerized the current implementation of our library is not the best (but it works!).

I (ohasanov) also am planning to add more game modes to this which originally may not have existed in osu!. This is just going to be a playground, in which we mess around with audio, 2D graphics and shaders.

Currently the game is running at a pretty constant speed, but it really is dependant on the OS, since we use OS Sleep functions to actually throttle our code (frame limit). On a mobile core2duo from about 2007-8 it manages to easily reach the 900-1000Hz game logic speed, but we will make the game even faster, as we learn how to properly do multithreading.

To build the game you only need the basic tools installed:

-> GCC and G++ (and also MinGW variants for the windows builds, there is no native windows build support right now)

-> Make

-> CMake

-> SDL2

To actually build the game follow the steps below:

1 - create directories called "build" and "object"

2 - run ./linuxmakeall.sh or ./windowsmakeall.sh

When you just want to run the game, use ./linuxmakefast or ./windowsmakefast.sh, or just move the executable to the parent directory and just run it like every other binary executable!

(note: these scrips compile with 12 threads, the numbers may need to be changed on your pc... be warned)

Expect to see many bugs and slowdowns, as this is a "Work In Progress" project, but we hope that we can make it better and for that we need your support!

When you encounter a bug, or see something missing, just report it using the "Issues" tab on github! We will check the issue as fast as we can and we will try to fix it :D

Some interesting things: -> make sure that the skins are uniform. i will implement some "dividers" to the global variables, if you absolutely need to use a skin that is non-standard. OSU!'s skin management is honestly not good. not good at all. even though some objects need to be 128x128 pixels for example, there are some skins that just have 160x160 pixel objects for no apparent reason. i will not try to support this BS. just rescale them yourselves. -> some maps are also offset for some reason, i cant figure out why. i will try to implement a per-map-offset feature but yeah... cringe moment. -> this will be ported to the 3ds. the code already has opengl1.1 support... this is why the spinny menu is still wip, since the 3ds doesnt have enough vram to render that :) -> this clone also uses OS sleep. This may lead to innacuracies or stutters. i really dont want to spin-lock, since that kills the performance.

alt text

osus-revented's People

Contributors

ohasanov-hbrw avatar tixvage avatar

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.