Coder Social home page Coder Social logo

astrabit-st / modshot-core Goto Github PK

View Code? Open in Web Editor NEW

This project forked from elizagamedev/mkxp-oneshot

18.0 5.0 9.0 135.31 MB

A fork of mkxp, forked for OneShot, forked for OneShot mods, (not to be confused with the ModShot server)

Home Page: https://nowaffles.com

License: GNU General Public License v2.0

CMake 0.06% C++ 52.57% C 3.58% QMake 0.07% Ruby 40.06% GLSL 1.11% Shell 0.78% Python 0.51% Batchfile 0.05% Meson 0.83% Makefile 0.36%

modshot-core's Introduction

Why is this archived?

ModShot is a mess. Really! If you go back in the git history, you'll see that a lot of lines of code originate from this commit: 0954cfd039e1de59a0cb84cac611c398e2d02a21

Why?

¯\_(ツ)_/¯

This is not the worst example I could point out by the way! There's so so many others but theyr equire an understanding of C++. The whole codebase is like this, ModShot is an unstable mess- nevermind that mkxp was already really unstable!

Speaking as Lily, ModShot's main contributor, I no longer have the willpower to maintain this dumpster fire. It was genuinely contributing to my depression last year. If you knew me around June-December of 2022, you'd know that I was borderline suicidal at times. Yeah, it was that bad. In the interest of my mental health, I gave up working on ModShot, and it's been left here to sit and rot.

I'll be honest, ModShot is really not my project. A lot of the stuff here was made by @rkevin-arch. Back when this started to be a thing, I knew nothing about C++, or Ruby for that matter. Only a few months earlier, I had actually gotten a book about learning to code in Python, because I really did not know anything.

rkevin basically carried the repo from a fork of mkxp-oneshot to what it is now, adding most of the features (such as ruby gem support and audio channels) that we take for granted. The only contribution I've really made was overhauling the build system, and even then, that was not a super big change.

I've thrown this whole codebase, all of rkevin's work really- into the dumpster, and that's not right.

So, I'll be leaving this as the last commit on the repo. A credit to rkevin, the guy who you should really be crediting for creating ModShot!

If you want an alternative, please take a look at @thehatkid's mkp-z fork: ModShot-mkxp-z

On a more positive note, me and @somedevfox have been working on a rust rewrite on and off for a while now, and we'll be devoting our time to getting up to feature parity with ModShot in the near future, so keep your eyes peeled!

ModShot-Core

ModShot CI

ModShot is a even more MORE specialized fork of a specialized fork of (mkxp by Ancurio designed for OneShot) for OneShot mods.

Thanks to hunternet93 for starting the reimplementation of the journal program!

Thanks to rkevin-arch for the docker build!

Thanks to somedevfox for helping ModShot ditch conan!

Thanks to hat_kid for fixing a lot such as wallpaper bindings, unicode Win32 username issue, and introducing Win32 tray ballons and GTK notifications!

mkxp is a project that seeks to provide a fully open source implementation of the Ruby Game Scripting System (RGSS) interface used in the popular game creation software "RPG Maker XP", "RPG Maker VX" and "RPG Maker VX Ace" (trademark by Enterbrain, Inc.), with focus on Linux. The goal is to be able to run games created with the above software natively without changing a single file.

It is licensed under the GNU General Public License v2+.

ModShot also makes use of steamshim for GPL compliance while making use of Steamworks features. See LICENSE.steamshim.txt for details. You can compile ModShot with steam without compiling steamshim, but you will need to source the steamshim binary yourself.

Building

Conan is no longer supported. Long live conan. Instead, ModShot now makes use of meson, bash, and make, in a fairly simple setup. You only need to compile dependencies once.

Because of this, compiling with Visual Studio as was standard before is no longer supported, and instead compiling using the msys2 toolset is required. The main upshot of this, of course, is remaining on par with ruby in terms of gem support. (at least for windows)

Previously, C extensions were very jank with ModShot, however now you can use a C extension right from your own Ruby install! (Provided the version is the same, and the msys2 evironment is the same. I'll get back to this later.)

Using clang

//TODO

FMOD

FMOD support is very... interesting. It involves a lot of licensing, legalese, etc. If you want to enable FMOD support, download FMOD and extract the zip into a folder named fmod. You will then need to pass -Dfmod=true as an option.

ModShot should handle everything from there, it's up to you to follow the FMOD license.

FMOD bindings also do not supply the Audio module. You may create wrapper functions for that if you wish. AL Effect bndings are not supplied as well for obvious reasons.

Functions will always return an array of values (usually two) in the order of [result, values...]. This means you can do result, value = FMOD.some_func(), which is pretty neat, right? If a result is not FMOD_OK (0) there will be no return value. Keep that in mind!

The FMOD bindings won't hold your hands either- You will need to clean up after yourself. Because of the way the bindings work as well calling the same function twice will NOT return the "same" object. Fundamentally, it is the same object, as the C++ side object is the same, but it is a brand new object as far as ruby is concerned.

Because of this behavior, you can quite easily cause a memory leak by repeatedly storing an object returned in an array somewhere constantly loaded such that ruby will not garbage collect it. i.e

array = []
100000.times do
    array << bank.get_event_list # Bad will memory leak!
end

So, be mindful of what you write! Luckily instances of objects from these bindings are very small so it's not a big deal if your code isn't perfect, but PLEASE do be mindful of this! RMXP already has a similar problem with Bitmaps, so if you've dealt with them you should know what to do. There is an == operator provided that will check if an object is the same for you as well. You can usually assign a value nil to get it garbage collected.

A feature is provided to automatically release some FMOD objects (Like System, Bank, etc) but it is disabled by default. This is because some FMOD functions will allow you to "get back" an object after it has been garbage collected from ruby, and this feature messes with that. I would not suggest using it because if you are, you're likely doing something wrong and are relying on a bandaid fix to avoid it being an issue.

The bindings should generally line up with what's documented in the latest FMOD docs- although things like FMOD_Studio_System_Create are hidden away under FMOD::Studio::System.new instead. The bindings are closest to the C# bindings for FMOD.

Plugins are potentially supported via C extensions but if you really want to add support for one you may hardcode it in. Something like ResonanceAudio would be simple enough, since all you would need to do is wrap a struct like mkxp wraps classes, and the FMOD bindings here should do the rest. It'll pull a void pointer to your wrapped data by using getPrivateData<void*>. Getting data back like this will either convert it to a string, or the user will pass in a class that the bindings will set the data of. I still haven't decided on how to do this just yet, though, but I am leaning towards the string method.

One other thing to note is that with structs you need to be mindful of method chaining. You can chain methods on the struct (like struct.position.y = 15) but if chained on the return vaue from a method it won't work.

# will not work!
eventinstance.get_3d_attributes[1].up.x = 15
# will work!
struct = eventinstance.get_3d_attributes[1]
struct.up.x = 15
eventinstance.set_3d_attributes(struct)

I hope that's enough info to get you started! There will be some direct conversions of FMOD examples in the scripts folder when I get to it. (TODO)

Options

RUBY_VER && -Dmri_version (default 3.1) sets the ruby version.
-Dsteam (default false) sets the build to use steam.
--build-type (default Release) sets the build type.
-Dbuild_static (default true) sets the build to be static. (True is faster, but with longer startup times.)
-Dfmod (default false) toggles FMOD instead of OpenAL.
-Dauto_clean_fmod (default false) toggles auto releasing SOME FMOD objects when garbage collected.

Building on Windows

First, you'll need to download msys2 and install it. Then, you'll want to determine what Ruby version you're using, as this will determine what build environment you'll be using. As is, ModShot is set up to use Ruby 3.1, so keep that in mind. Please refer to this table to determine the environment. (You can use the wrong environment and it will work fine, just not with C extensions.)

Ruby >3.1 UCRT64 (Default)
Ruby 3.0-2.0 MINGW64
Ruby <1.9 MINGW32 (NOT SUPPORTED!)

Once you've figured out the environment you need to use, pull up an msys2 shell of it. (You can search the environment name in the Windows search box to open it) From there, it's pretty much identical to the Linux setup.

# Install dependencies from package manager
sh setup.sh

# Build extra dependencies (like ruby)
cd windows; make
source vars.sh

cd ..; meson build --prefix="$PWD/build.out" --bindir=.
cd build && ninja install

Building on Linux

Building on Linux is fairly easy, as long as you're using one of the supported distros. (Manjaro, Debian/Ubuntu, Fedora/Red Hat) Unlike Windows, you don't have to worry about msys2 environments. Just use gcc and you'll be good to go. If you're not, fear not, as you can usually just install all the dependencies right from your package manager. See setup.sh.

# Install dependencies from package manager
sh setup.sh

# Build extra dependencies (like ruby)
cd linux; make
source vars.sh

cd ..; meson build --prefix="$PWD/build.out" --bindir=.
cd build && ninja install

This should create a folder called out with your build of ModShot all ready to go!

Configuration

ModShot reads configuration data from the file "oneshot.conf". The format is ini-style. Do not use quotes around file paths (spaces won't break). Lines starting with '#' are comments. See 'oneshot.conf.sample' for a list of accepted entries.

All option entries can alternatively be specified as command line options. Any options that are not arrays (eg. preloaded scripts) specified as command line options will override entries in oneshot.conf. Note that you will have to wrap values containing spaces in quotes (unlike in oneshot.conf).

The syntax is: --<option>=<value>

Example: ./oneshot --gameFolder="oneshot" --vsync=true

External gems

Modshot builds come pre-packaged with the ruby standard library in /lib/ruby/. You can require gems from this folder at any point by using require '<gem>'.

You can ship your own gems by finding the gem install location (Typically C:\Ruby27-x64\lib\ruby\gems\2.7.0\gems), going inside the gem, and copying over all the files inside lib.

modshot-core's People

Contributors

ancurio avatar blacklotus avatar carstene1ns avatar cremno avatar daverball avatar elizagamedev avatar girakacheezer avatar iandavid123 avatar kockaadmiralac avatar lacc97 avatar mathewv avatar mook avatar mshirt avatar popkirby avatar queengooborg avatar reinuseslisp avatar rkevin-arch avatar somedevfox avatar speak2erase avatar taedixon avatar thehatkid avatar urkle avatar virmskvll avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

modshot-core's Issues

[feat] Journal rewrite using screen module

  • Custom journal shim to load game path from a .journal_path file alongside it
  • Launch the game in screen mode
  • Add a titlebar and all journal functionality to screen mode
  • Add extra functionality (like getting journal position, name, etc)
  • Profit

Constant Encoding

Constants defined within C++ (i.e Oneshot::SAVE_PATH) are ASCII-8BIT encoded, causing encoding compatibility issues in Ruby scripts when trying to merge them with UTF-8 strings (Ruby's default) containing non-ASCII characters.
Major problem for players with non-ASCII characters in their name.

The error is the same as running this code:

ascii = String.new("ł", encoding:"ASCII-8BIT")
utf8 = "ł"

puts ascii.encoding, ascii 
puts utf8.encoding, utf8
puts ascii + utf8

Replicated by creating a new Windows account with non-ASCII characters in its name, and debugging OSFM.

It can be worked around on the Ruby layer by initializing and using a separate constant, which is just a re-encoding of the original constant. (via .force_encoding("UTF-8"))

meson.build:16:11: ERROR: lexer

build process went fine until I proceed to the meson build step:
meson build --prefix="$PWD/build.out" --bindir=.

Here is the error log of it: (meson-log.txt)

Build started at 2022-11-22T22:48:22.035901
Main binary: /usr/bin/python3
Python system: Linux
The Meson build system
Version: 0.45.1
Source dir: /home/cg03-dev/Downloads/ModShot-Core-master
Build dir: /home/cg03-dev/Downloads/ModShot-Core-master/build
Build type: native build

meson.build:16:11: ERROR: lexer
compilers = {
           ^

Better shaders

  • Ruby defined shaders
Sprite.shaders << Shaders[<shader name>], <args>
Sprite.shaders[<shader name>].args = <args>
Sprite.shaders.delete(<shader name>)
Sprite.add_shader(<shader name>, <args>)
Sprite.set_shader_args(<args>)
Sprite.remove_shader(<shader name>)
Shader.compile(<shader name> (string), type (symbol, :vert or :frag), <args> (hash of names and types))
Sprite.apply_shader(<shader name> (string), <args> (hash of named args))
Viewport.apply_shader(<shader name> (string), <args> (hash of named args))

TODO before ModShot's stable release

Details in the word vomit over at #31 (comment)

  • Figure out what to do with fiber support
  • Profile the game and find out what's causing the performance issues with long vertical areas
  • Documentation, documentation, documentation
  • Any feature requests from @Speak2Erase or @CryroFox that are suitable for upstream

Improve thread safety

Right now, mkxp will segfault at any point if you try to call Graphics.update or the like from another thread. This is quite irritating if you want to unhook game logic from the framerate. From what I can tell, it looks like this is in part due to any thread aside from the main thread lacking the OpenGL context.

I'm not sure just yet what the solution to this would look like, or if its even possible. More likely than not, someone with more experience (@GamingLiamStudios or @thehatkid?) may be better suited to look at this problem.

Wallpaper changing broken

The wallpaper command will apply the colour and reset on the Wallpaper.reset call, however the background itself will not change images.

Wallpaper.set(desktop, 0)

Also I'm pretty sure Niko.do_your_thing method (I believe that's the call for it) is also non-functional

Add various scripts from other mods

  • Talk to mod authors about what code they would be willing to share
  • Implement it into scripts
  • Add a meson build for scripts
  • Profit?

My motivation behind this is to make modshot more of a modding base rather than just a executable replacement. People could really benefit from having Fading Memory's sound code or OSAM's text engine.

Getting errors while building extras with makefile

I'm having trouble building the extra dependencies with the make command.
First was moving libiconv-1.16 to iconv. Exited with error 1; Directory not empty.

cd /home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64; \
tar -xzf libiconv-1.16.tar.gz; \
mv libiconv-1.16 iconv
mv: cannot move 'libiconv-1.16' to 'iconv/libiconv-1.16': Directory not empty
make: *** [Makefile:51: /home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/iconv/configure] Error 1

After manually emptying the contents in iconv/libiconv-1.16, I am greeted with this:

cd /home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64; \
tar -xzf libiconv-1.16.tar.gz; \
mv libiconv-1.16 iconv
cd /home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif; \
make -j4; make install
make[1]: Entering directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif'
Making all in include
make[2]: Entering directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif/include'
make[2]: *** No rule to make target 'all'.  Stop.
make[2]: Leaving directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif/include'
make[1]: *** [Makefile:414: all-recursive] Error 1
make[1]: Leaving directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif'
make[1]: Entering directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif'
Making install in include
make[2]: Entering directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif/include'
make[2]: *** No rule to make target 'install'.  Stop.
make[2]: Leaving directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif/include'
make[1]: *** [Makefile:414: install-recursive] Error 1
make[1]: Leaving directory '/home/cg03-dev/Downloads/ModShot-Core/linux/downloads/x86_64/libnsgif'
make: *** [Makefile:93: /home/cg03-dev/Downloads/ModShot-Core/linux/build-x86_64/lib/libnsgif.so] Error 2

Am I missing something, or is this the Makefile's fault?
p.s. would love to just bring this to a dm if this issue is like my previous issue i posted here.

SNDIO Build issues on Linux

For some reason I can't build anything on linux because of something to do with SNDIO. I had to patch CmakeList in SDL_sound (https://stackoverflow.com/questions/41608136/sdl-sndioaudio-c-undefined-reference-to-sio) to conan install properly, but I am still running into build issues.

/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_ALCbackend_stop':
sndio.c:(.text+0xdd): undefined reference to `sio_stop'
/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_ALCbackend_start':
sndio.c:(.text+0x19c): undefined reference to `sio_start'
/usr/bin/ld: sndio.c:(.text+0x1f4): undefined reference to `sio_stop'
/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_mixerProc':
sndio.c:(.text+0x2eb): undefined reference to `sio_write'
/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_ALCbackend_reset':
sndio.c:(.text+0x3ba): undefined reference to `sio_initpar'
/usr/bin/ld: sndio.c:(.text+0x439): undefined reference to `sio_setpar'
/usr/bin/ld: sndio.c:(.text+0x4a8): undefined reference to `sio_getpar'
/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_ALCbackend_close':
sndio.c:(.text+0x71d): undefined reference to `sio_close'
/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_ALCbackend_open':
sndio.c:(.text+0x768): undefined reference to `sio_open'
/usr/bin/ld: /home/matthew/.conan/data/openal/1.18.2/bincrafters/stable/package/626f84e150d34b5f2065f11593667b59f4d883df/lib/libopenal.a(sndio.c.o): in function `ALCsndioBackend_ALCbackend_Destruct':
sndio.c:(.text+0x802): undefined reference to `sio_close'
/usr/bin/ld: /home/matthew/.conan/data/sdl2/2.0.9/bincrafters/stable/package/bb534dc96718d968eca63f39045b3f4bb829c5aa/lib/libSDL2.a(SDL_sndioaudio.c.o): in function `SNDIO_Init':
SDL_sndioaudio.c:(.text+0xa7): undefined reference to `sio_open'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0xc8): undefined reference to `sio_close'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0xd6): undefined reference to `sio_setpar'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0xe4): undefined reference to `sio_getpar'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0xf2): undefined reference to `sio_start'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x100): undefined reference to `sio_stop'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x10e): undefined reference to `sio_read'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x11c): undefined reference to `sio_write'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x12a): undefined reference to `sio_nfds'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x138): undefined reference to `sio_pollfd'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x146): undefined reference to `sio_revents'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x154): undefined reference to `sio_eof'
/usr/bin/ld: SDL_sndioaudio.c:(.text+0x162): undefined reference to `sio_initpar'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/oneshot.dir/build.make:1248: bin/oneshot] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/oneshot.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Rewrite bitmap class

One big regret I have about the graphics pipeline, specifically the Bitmap class implementation, is that I didn't take the actual real-world usage of it into account. Bitmaps in Enterbrain's engine represent CPU-side 2D images, and as the rest of the engine is entirely rendering on the CPU, it's no surprise that manipulating Bitmaps down to the pixel level and rendering them using Sprites can be freely mixed at any point in the game loop. I tried my best to preserve this freedom granted by the RGSS API, but in practice most Bitmaps are loaded once and never touched again. A better design would have exploited this fact more.

From what I can gather at the moment, mkxp stores bitmaps both on the GPU and the CPU, updating the CPU side image whenever the GPU side texture is modified. This is nice for using something like get_pixel, however that is a pretty rarely used function.

This is likely what Ancurio is referring to when they said is that I didn't take the actual real-world usage of it into account.

What I may end up doing is ditching the CPU side image entirely in favor of fetching the texture from the GPU when getting a pixel. I have no idea how viable, slow, or bad of an idea that would be, but it is worth a shot.

Fix incorrect usage of rb_get_args

The current implementation of rb_get_args to get ruby strings is unsafe. When the format string uses z, it returns a char* using RSTRING_PTR, which isn't even guaranteed to be null terminated. It's sort of a miracle that we haven't seen more crashes related to this (maybe plain ASCII strings are safe, but we sure as heck shouldn't rely on it).

This means only using s is safe, but its implementation actually has an error (not incrementing the pointer at all (binding-mri.cpp#169)) and is not used anywhere in the repo (only the objectLoad function uses it and that function isn't used anywhere). We need to fix this and either port all usages of z to s, or make z somehow return a null terminated string while not leaking memory (idk how to do that).

Thanks to @CryroFox for discovering this issue.

Fix error 0x000007b

Common error. Haven't figured out the exact cause. I speculate it's to do with the dlls or icons.

rkevin's todo list

Gonna plop an issue here to document the things we need to cleanup, as I go through everything and write documentation. Will be edited as I go.

  • Remove fiber binding, gamejolt binding, discord binding
  • Find better way to deal with fibers that's serializable
  • Fix Linux build container not copying over data files anymore
  • Add a dos2unix command to the linux container so building from a repo cloned in windows would work (and remove the janky hack in conanfile after doing so
  • Make robocopy not overwrite build binaries on windows
  • Remove the build-windows.yaml, it's deprecated

Other things on my todo list:

  • Move windows binaries into lib, move ssl folder into lib
    • Figure out a way to symlink oneshot.exe to lib/oneshot.exe
      • Fix cwd issue
  • Finish up audio filters
    • Flush queued buffers when you add a non-OpenAL filter somehow SCRAPPED
    • Better API for ALEffects (figure out a way to reuse them without memory leaks / segfaults)
      • Remove memory leaks
    • Remove 3d audio disable thing in al-util.h
    • Get filters working on SE
      • And migrate the aux slot from alstream to audiostream, and make all sub alstreams attached to it
  • Better keyboard bindings
  • Remove need for linuxdeploy on linux? (manually set rpath to $ORIGIN, and save the time needed to strip stuff)
  • Documentation, documentation, documentation
  • Merge some patches into master once I'm done with audio filters
    • add-build-version: version numbers
    • better-builds: use everything-in-one-dir format instead of AppDir on linux, misc quality of life build workflow fixes
      • Release rkevin/build-oneshot-linux:1.2 and rkevin/build-oneshot-windows:1.2 docker containers and retag existing ones
    • cleanup: remove fiber, gamejolt, discord bindings
  • Fix that one compiler warning about non ISO compliant string arrays in binding-mri.cpp
  • Add F3 to close the game (when debug mode is on)

Building ruby compiles extras

Atm building ruby is the longest part of the build process, and it could be sped up significantly by disabling building extras like the c api spec

Audio bugs

  • Crossfading in a crossfade is a segfault (what??)
  • Audio channels can get desynced

rk's todo list v2

  • Valgrind build for ModShot
    • Debug audiochannel crashing issues (repro: Audio.bgm_crossfade("Audio/BGM/Menderbot.ogg", 2, 100, 100)
    • #49
  • Add features to input module
    • Set button for one frame
    • Return currently pressed buttons
  • Investigate #37
  • #45
  • pain

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.