A feature-rich, production-ready, general purpose 2D/3D game engine written in Rust with a scene editor.

Last update: Jun 22, 2022

RG3D

Rust Game engine 3D (and 2D)

License (MIT) CI Status Crates.io docs.rs Discord Lines of code

A feature-rich, production-ready, general purpose 2D/3D game engine written in Rust with a scene editor.

Video

Support

If you want to support the development of the project, click the link below. I'm working on the project full time and use my savings to drive development forward, I'm looking for any financial support.

Become a patron!

Community

Join the Discord server

Tutorials

Writing a 3D Shooter using rg3d:

Writing a role-playing game using rg3d

Important notes:

The engine is suitable for any kind of games, not only shooters, the fact that there are two 3d shooters that were made with the engine, and a set of tutorials about 3d shooters just means that @mrDIMAS loves 3d shooters. There will be more tutorials about games in different genre, but again - nothing stops you from making an RPG, RTS, rogue-like, etc.

Screenshots

These screenshots are from Station Iapetus which is a commercial project made with the engine.

1

2

These screenshots are from rusty-shooter which is a big demo for the engine.

3

4

5

Examples

There are many examples covering various aspects of the engine. Also don't hesitate to create an issue or ask on Discord if you need help!

Editor

editor

Features

  • Exceptional safety, reliability, and speed.
  • PC (Windows, Linux, macOS) and Web (WebAssembly) support - Check online example.
  • Deferred shading.
    • Renderer based on OpenGL 3.3 Core (released in 2010) which means that your game will run on almost any relatively modern GPU.
    • Directional light.
    • Point light + shadows.
    • Spot light + shadows.
    • Bump mapping.
    • Screen-Space Ambient Occlusion (SSAO).
    • Soft shadows.
    • Volumetric light (spot, point).
    • Instancing - render lots of objects without any overhead.
    • Fast Approximate Anti-Aliasing (FXAA)
    • Parallax mapping.
  • Custom shaders and rendering techniques.
  • Render in texture.
  • Sky box.
  • 2D support.
  • Multi-camera rendering.
  • Multiple scenes.
  • Lightmap generator.
  • Fully customizable vertex format.
  • Level-of-detail (LOD) support.
  • Scene graph with pivot, camera, mesh, light, particle system, sprite nodes.
  • Built-in save/load - save/load the state of the engine in one call.
  • High quality binaural sound with HRTF support.
  • Skinning.
  • Particle systems with soft particles.
  • A* pathfinder.
  • Navmesh.
  • FBX Loader.
  • Full TTF/OTF fonts support (thanks to fontdue and ttf-parser crates).
  • PNG, JPG, TGA, DDS, etc. textures (thanks to image crate).
  • Compressed textures support (DXT1, DXT3, DTX5)
  • Advanced node-based UI with lots of widgets.
  • Animation blending state machine - similar to Mecanim in Unity Engine.
  • Animation retargetting - allows you to remap animation from one model to another.
  • Async asset management (textures, models, sound buffers).
  • Advanced physics (thanks to the rapier physics engine)
    • Rigid bodies.
    • Rich set of various colliders.
    • Joints.
    • Ray cast.
    • Many other useful features.
  • Core library.
  • Fast iterative compilation
    • Debug: ~3 seconds
    • Release: ~8 seconds
  • Lots of examples.

Frequently asked questions

Q: Does rg3d use ECS?

A: No. It uses generational pools (arenas) which are optimized for efficient memory management to retain more static type safety.

Q: Examples running too slow on my PC, FPS is too low, help!

A: First, make sure you run examples on the discrete GPU, not on a built-in of your CPU. Built-in GPUs are very slow and not suitable for rg3d. Second, make sure your discrete GPU is powerful enough to run modern games at a decent frame rate.

Supported Operating Systems

  • Windows - full support
  • Linux - full support
  • macOS - full support
  • WebAssembly - full support
  • Android - not supported

Compiler version

rg3d requires the latest stable Rust compiler.

Contributing

Contributions are very welcome! Feel free to open Issues and Pull Requests.

Check the good first issue label to see where you can help.

GitHub

https://github.com/rg3dengine/rg3d/
Comments
  • 1. Add file system watcher to FileSelector and FileBrowser widgets

    Currently, if you open a FileSelector or FileBrowser and navigate to a folder and then add some content to the folder, it won't show up until you collapse\expand the folder. It can be fixed by adding file system watcher which will notify about changes in file system.

    Reviewed by mrDIMAS at 2021-03-12 08:41
  • 2. Add CI

    This PR adds CI and closes #105. The CI currently checks and tests the codebase.

    Checking it via cargo check essentially makes sure the code will compile without actually compiling it. It still takes a bit to run (10 mins), but that's mainly due to the fact that it's not using incremental compilation and the library is quite large.

    Please don't merge this until the tests on my branch have passed.

    TODO:

    • [ ] Add automated releases to the CI.
    Reviewed by gideongrinberg at 2021-05-23 23:21
  • 3. Questions regarding this game engine.

    Hi, I have some questions regarding this game engine:

    1. How does it differ to the Bevy game engine, especially in regards to its ease of use in comparison to bevy?
    2. Does it integrate its own ECS?
    3. If I used the game editor, does it do a lot of the heavy lifting for me, for example if I position a cube at a certain point, I don't have to manually code this?
    4. Am I using Rust to code my game if using the game editor?
    5. If 4 is applicable, then does (I am not sure if I am explaining this correctly) does the code get compiled to machine code, not something like where godot has some sort of linker for gdnative-rust which has some performance drawbacks or something, its all pure machine code without any costs to performance, am I correct?
    6. Is there a lot more coding compared to something like Unity if I wanted to move a simple object?
    7. If exporting my objects from Blender, what format does it support?
    Reviewed by Joe23232 at 2021-10-04 05:29
  • 4. Regardless if I use the gui game editor or not, can materials still be rendered into the game scene?

    I understand that rusty-editor currently only supports textures, however, I was wondering if the core of the game engine supports materials as well or is this something that is being worked on?

    If it is something that is being worked on, is there an issue tracker or something where I can track the progress?

    Reviewed by Joe23232 at 2021-10-11 03:28
  • 5. Some failing examples (comparison between Win/Mac/Linux)

    Hello @mrDIMAS,

    I just thought I would run the examples with the new light intensity code here on Win/Mac/Linux (I am not sure if all tests worked before light intensity...just got curious as I found some "Intensity" errors on some examples).

    Take with a grain of salt, of course (I didn't run the examples for very long each time and I might not have waited long enough for some tests to load in debug mode? Maybe?)

    Machine specs and results (rustc 1.54.0):

    Specs:

    1. Win10 21h1 - Ryzen 5 3600xt - 32GB 3200Mhz - Radeon Vega 64 - 512GB nvme Gen4x4
    2. Garuda(Arch) Linux updated today - i5-11600k - 16GB 3200Mhz - R9 380 - 512GB nvme Gen3x4
    3. Big Sur (11.5.2) - M1 - 8GB - integrated graphics (similar to R9 570? maybe) - 512GB T2
    

    Examples (debug FPS - then release...or error message):

    2d:
    Win --  289 - 2150
    Lin --  530 - 8200
    M1 --   310 - 3000
    
    3rd_person:
    Win -- wouldn't load? waited 10 minutes. Stopped at 'SsaoShader Linked' - 140 (6.5 frame time)
    Lin -- 1 (frame time 415?) - 100 (5 frame time)
    M1 -- 1 (frame time 2159) - 1 (1150 frame time)
    
    async:
    Win -- 688 - 1591
    Lin -- 1500 - 1600
    M1 -- 31 - 33
    
    compressed_textures:
    Win -- DEBUG - thread 'main' panicked at 'Attempt to get reference to resource data while it is not loaded! Path is examples/data/MetalMesh_Base_Color.png', 
    C:\Users\wilsonk\rg3d\rg3d-resource\src\lib.rs:106:17
           RELEASE - ran fine
    
    Lin -- DEBUG - thread 'main' panicked at 'Attempt to get reference to resource data while it is not loaded! Path is examples/data/MetalMesh_Base_Color.png', 
    /home/wilsonk/rg3d/rg3d-resource/src/lib.rs:106:17
          RELEASE - thread 'main' panicked at 'Attempt to get reference to resource data while it is not loaded! Path is examples/data/MetalMesh_Base_Color.png',
     /home/wilsonk/rg3d/rg3d-resource/src/lib.rs:106:17
    
    M1 -- DEBUG - thread 'main' panicked at 'Attempt to get reference to resource data while it is not loaded! Path is examples/data/MetalMesh_Base_Color.png', 
    /home/wilsonk/rg3d/rg3d-resource/src/lib.rs:106:17
          RELEASE - ran fine
    
    framework:
    Win -- one core at 100% - same
    Lin -- 4-8 cores at 20-50% - 4 cores at 12-30%
    M1 -- 4 cores stepped 50-30-20-10% - same
    
    instancing:
    Win -- too long to load (3 mins)  - 60 FPS at 4K (monitor running at 30Hz)
    Lin -- too long to load (3 mins) - loaded instances then hung for 4 mins then 1 FPS? r9 380 not powerful enough?
    M1 -- loaded two tex's after SsaoShader linked (3 mins) stopped waiting - 60 FPS (on 144Hz monitor)
    
    ligthmap:
    Win -- DEBUG - no chance to click Generate --> [ERROR]: Unable to load model from "examples/data/sponza/Sponza.rgs"! Reason Visit(FieldDoesNotExist("Intensity"))
    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Some(Visit(FieldDoesNotExist("Intensity")))', examples/lightmap.rs:255:22
        RELEASE - same
    
    Lin -- DEBUG - no chance to click Generate --> [ERROR]: Unable to load model from "examples/data/sponza/Sponza.rgs"! Reason Visit(FieldDoesNotExist("Intensity"))
    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Some(Visit(FieldDoesNotExist("Intensity")))', examples/lightmap.rs:255:22
         RELEASE - same
    
    M1 -- DEBUG - click Generate then --> [ERROR]: Unable to load model from "examples/data/sponza/Sponza.rgs"! Reason Visit(FieldDoesNotExist("Intensity"))
    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Some(Visit(FieldDoesNotExist("Intensity")))', examples/lightmap.rs:255:22
        RELEASE - same
    
    lod:
    Win -- 30 fps at 4K(monitor 30Hz), smooth - same
    Lin -- 60 fps at 4K, smooth - same
    M1 -- 109 fps at 1440p, smooth - same
    
    navmesh:
    Win -- DEBUG - [ERROR]: Unable to load model from "examples/data/navmesh_scene.rgs"! Reason Visit(FieldDoesNotExist("Intensity"))
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Some(Visit(FieldDoesNotExist("Intensity")))', examples\navmesh.rs:94:10
        RELEASE - same
    Lin -- same - same
    M1 -- same - same
    
    save_load:
    Win -- wouldn't load after minutes, stuck repeating 'SsaoShader linked'? - 112
    Lin -- 1 - 240
    M1 -- 1 - 1
    
    scene:
    Win --  DEBUG - [ERROR]: Unable to load model from "examples/data/test_scene.rgs"! Reason Visit(FieldDoesNotExist("Intensity"))
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Some(Visit(FieldDoesNotExist("Intensity")))', examples\scene.rs:76:10
        RELEASE - same
    Lin -- same - same
    M1 --  same - same
    
    simple:
    Win -- 378 - 1275
    Lin -- 780 - 1130
    M1 -- 20 - 21
    
    sound:
    Win -- stopped for minutes at SsaoShader linked again - 140  (but much longer to load than Lin?)
    Lin -- 1 - 230
    M1 -- 1 - 1
    
    terrain:
    Win -- 703 - 1145   (three times as long to load as Lin?)
    Lin -- 715 - 715
    M1 -- 1 - 1
    
    ui:
    Win -- 30 yaw/scale work (resolution choice works) - same (but much longer to load than Lin/M1??)
    Lin -- 60 yaw/scale work (NO resolution choice) - same
    M1 -- 30 yaw/scale work (resolution choice works) - 33 yaw/scale work (resolution choice works)
    
    Reviewed by wilsonk at 2021-08-18 08:41
  • 6. Sound: Various issues under Windows

    Not sure how to title this issue, and I'm not sure if my use of Windows is relevant. I've been trying to use rg3d-sound in Bevy, and have hit an odd issue where my footstep sound is slightly delayed every few seconds. I also, very occasionally, get an issue where sound glitches and can be heard panned slightly differently in the stereo field, as if the source parameters aren't quite synced.

    I thought I'd try creating a reproduction, which I have here. But while I can't reproduce the delay, I've found a few issues that may be related.

    Essentially, I took your play_sound example, subbed in my footstep sound, and added a loop { ... } block. I need to start/stop my footstep sound more or less quickly based on step length, so I need to control the looping. Here's what I discovered:

    • I have the loop set to sleep for 5 seconds, with a println! at the beginning. The print is called correctly, but the sound still seems to loop quickly despite me explicitly setting it not to.
    • If I use from_millis(5000) for the sleep, the behavior changes. After 20-30 seconds, I start getting audio artifacts similar to the ones I occasionally experience, where the source sounds slightly out of sync.

    It's quite possible that I'm misusing the library here, but it seems like it's misbehaving in ways that don't make sense. I don't understand why the source doesn't play once per 5 seconds, nor do I understand the odd audio artifacts here. I might expect performance degradation at higher speeds as the mutex deadlocks, but not at 1/5 seconds.

    Am I doing something obviously wrong? Full disclosure: haven't had my coffee yet. :)

    Thanks!

    Reviewed by ndarilek at 2020-12-11 15:19
  • 7. Window doesnt fill the screen

    hello there, I am using sway(wayland) in arch(linux) and I encountered some issues

    the window doesn't fill the screen space https://a.uguu.se/lrUKdnKe.png if I move it to a workspace of its own it keeps the same size(see next image), same if I full-screen it (then: the empty space becomes black) this is an issue because I cant see the top menu the mouse is also offset, the red dot indicates the distance where the mouse actually clicks

    here in a workspace of its own: https://a.uguu.se/DaaavkVM.png in a red box you can see a completely unrelated issue: when you scroll the assets those grey boxes vibrate into existence

    thank you anyway

    Reviewed by tekakutli at 2021-08-26 11:14
  • 8. Initial support for `#[derive(Visit)]`

    About

    This PR adds experimentals supports for #[derive(Visit)]

    How to use

    use rg3d::core::visitor::prelude::*;
    // or: use rg3d_core::visitor::prelude::*;
    
    #[derive(Visit)]
    pub struct MyCoolStruct { .. }
    

    Supported types

    • struct UnitStruct;
    • struct TupleFields(f32, f32);
    • struct NamedFields { a: f32, b: f32 }
    • enum ComplexEnum { UnitVariant, TupleVariant(f32, 32), NamedVariant { a: f32, b: f32 } }

    Generics are also considered. For example, struct Generics<T> { items: Vec<T> } implements Visit with where Vec<T>: Visit clause.

    Note

    Please run cargo expand --tests basic to know what the Visit implementations are like :)

    Old WIP comments

    Old comments

    Progress

    • [x] Struct with named fields
    Example
    // imports both the trait and the derive macro
    use rg3d::core::visitor::Visit;
    
    #[derive(Visit)]
    struct NamedFields {
        a: f32,
        snake_case: u32,
    }
    

    Part of cargo expand --test basic:

    impl rg3d::core::visitor::Visit for NamedFields {
        fn visit(
            &mut self,
            name: &str,
            visitor: &mut rg3d::core::visitor::Visitor,
        ) -> rg3d::core::visitor::VisitResult {
            visitor.enter_region(name)?;
            self.a.visit("A", visitor)?;
            self.snake_case.visit("SnakeCase", visitor)?;
            visitor.leave_region()
        }
    }
    
    • [x] Implemeint #[visit(skip)] field attribute (using darling)
    Example
    use rg3d::core::visitor::Visit;
    
    #[derive(Debug, Clone, Default, PartialEq, Visit)]
    struct SkipAttr {
        visited: f32,
        #[visit(skip)]
        skipped: u32,
    }
    

    Part of cargo expand --test basic:

    impl rg3d::core::visitor::Visit for SkipAttr {
        fn visit(
            &mut self,
            name: &str,
            visitor: &mut rg3d::core::visitor::Visitor,
        ) -> rg3d::core::visitor::VisitResult {
            visitor.enter_region(name)?;
            self.visited.visit("Visited", visitor)?;
            visitor.leave_region()
        }
    }
    
    • [x] Support plain enums
    Example
    #[derive(Debug, Clone, PartialEq, Eq, Hash, Visit)]
    enum PlainEnum {
        A,
        B,
        C,
    }
    

    Part of cargo expand --test basic:

    impl rg3d::core::visitor::Visit for PlainEnum {
        fn visit(
            &mut self,
            name: &str,
            visitor: &mut rg3d::core::visitor::Visitor,
        ) -> rg3d::core::visitor::VisitResult {
            visitor.enter_region(name)?;
            let mut id = self.clone() as u32;
            id.visit("Id", visitor)?;
            if visitor.is_reading() {
                *self = match id {
                    id if id == PlainEnum::A as u32 => PlainEnum::A,
                    id if id == PlainEnum::B as u32 => PlainEnum::B,
                    id if id == PlainEnum::C as u32 => PlainEnum::C,
                    _ => {
                        return Err(rg3d::core::visitor::VisitError::User({
                            let res = ::alloc::fmt::format(::core::fmt::Arguments::new_v1(
                                &["Invalid ID for enum `", "`: "],
                                &match (&"PlainEnum", &id) {
                                    (arg0, arg1) => [
                                        ::core::fmt::ArgumentV1::new(arg0, ::core::fmt::Display::fmt),
                                        ::core::fmt::ArgumentV1::new(arg1, ::core::fmt::Display::fmt),
                                    ],
                                },
                            ));
                            res
                        }))
                    }
                }
            }
            visitor.leave_region()
        }
    }
    
    • [x] Support one-of-the-types enums (upcasting enums)
    Example
    #[derive(Debug, Clone, PartialEq, Visit)]
    enum OneOfTheTypes {
        NamedFields(NamedFields),
        PlainEnum(PlainEnum),
        U32(u32),
    }
    

    Part of cargo expand --test basic:

    impl rg3d::core::visitor::Visit for OneOfTheTypes {
        fn visit(
            &mut self,
            name: &str,
            visitor: &mut rg3d::core::visitor::Visitor,
        ) -> rg3d::core::visitor::VisitResult {
            fn id(me: &OneOfTheTypes) -> u32 {
                match me {
                    OneOfTheTypes::NamedFields(_) => 0u32,
                    OneOfTheTypes::PlainEnum(_) => 1u32,
                    OneOfTheTypes::U32(_) => 2u32,
                    _ => ::core::panicking::panic_fmt(::core::fmt::Arguments::new_v1(
                        &["internal error: entered unreachable code: "],
                        &match (&"Unable to get ID from enum variant",) {
                            (arg0,) => [::core::fmt::ArgumentV1::new(
                                arg0,
                                ::core::fmt::Display::fmt,
                            )],
                        },
                    )),
                }
            }
            fn from_id(id: u32) -> std::result::Result<OneOfTheTypes, String> {
                match id {
                    id if id == 0u32 => Ok(OneOfTheTypes::NamedFields(Default::default())),
                    id if id == 1u32 => Ok(OneOfTheTypes::PlainEnum(Default::default())),
                    id if id == 2u32 => Ok(OneOfTheTypes::U32(Default::default())),
                    _ => Err({
                        let res = ::alloc::fmt::format(::core::fmt::Arguments::new_v1(
                            &["Unknown ID for type `", "`: `", "`"],
                            &match (&"OneOfTheTypes", &id) {
                                (arg0, arg1) => [
                                    ::core::fmt::ArgumentV1::new(arg0, ::core::fmt::Display::fmt),
                                    ::core::fmt::ArgumentV1::new(arg1, ::core::fmt::Display::fmt),
                                ],
                            },
                        ));
                        res
                    }),
                }
            }
            visitor.enter_region(name)?;
            let mut id = id(self);
            id.visit("KindId", visitor)?;
            if visitor.is_reading() {
                *self = from_id(id)?;
            }
            match self {
                OneOfTheTypes::NamedFields(v) => v.visit("Data", visitor)?,
                OneOfTheTypes::PlainEnum(v) => v.visit("Data", visitor)?,
                OneOfTheTypes::U32(v) => v.visit("Data", visitor)?,
            }
            visitor.leave_region()
        }
    }
    

    TODOs

    • [ ] Polish As in the first comment in this PR, we can support more types and make the implementation simpler.

    • [ ] #[visit(rename = ..)] attribute

    • [ ] Attribute macros on enum variant fields1

    Problems

    • The Visit macro is exposed in rg3d-core::visitor, but it requires rg3d to be in scope of user (since it implements rg3d::core::visitor::Visit). If anyone uses rg3d-core as a stand-alone crate, it doesn't make sense.

    • Replacing existing Visit implementation with the derive macro may break the byte data compatibility (if I understand correctly).

      • #[derive(Visit)] calls struct fields in the order of field declarations.
      • Each data may be given different name between before/after using #[derive(Visit)].

    Implementation problems

    • I'm using syn types for enums because I couldn't figure out how to use darling for enums.
    Reviewed by toyboot4e at 2021-04-29 01:26
  • 9. Sound: Play one-off sound, then stop audio thread again?

    I would like to add some sound an application. However, I only need to play a short sound (a few seconds) every few minutes. When using rg3d-sound, the Context spawns a mixer thread in the background which consumes 100% cpu (of one core). Unfortunately, I cannot find a way to stop this thread again (not even if I execute std::mem::drop(context) after playing the sound).

    Is there some way to create a Context in such a way that it automatically stops itself again after playing the sound, so that my application doesnt need that high CPU resources all the time?

    Reviewed by BafDyce at 2020-12-25 08:07
  • 10. Add WebAssembly support

    This feature was requested few times already, there even were some calls about WASM support. This is somewhat huge task for one person. Unfortunately I can't provide any possible solution in this case, it is some sort of RnD task.

    WASM Support Status:

    • [x] Compile for wasm32-unknown-unknown target
    • [x] Rendering
    • [x] Files and resource management (via Fetch API)
    • [x] Sound
    Reviewed by mrDIMAS at 2021-03-25 19:11
  • 11. Low fps for little geometry?

    Context: I'm playing around with level generation and wanted to generate some rooms.

    So I generated a map and instanced the floor tiles like this:

            for x in 0..level.map.len() {
                for y in 0..level.map[0].len() {
                    if level.map[x][y] == 0 {
                        continue;
                    }
    
                    let floor_handle = floor_resource
                        .lock()
                        .unwrap()
                        .instantiate_geometry(&mut scene);
    
                    scene.graph[floor_handle]
                        .local_transform_mut()
                        .set_scale(Vec3::new(0.2, 0.2, 0.2));
    
                    scene.graph[floor_handle]
                        .local_transform_mut()
                        .offset(Vec3::new(20.0 * x as f32, 0.0, 20.0 * y as f32));
                }
            }
    

    A floor tile has 8 vertices and a 16x16px texture. I'm rendering 2032 tiles in this example:

    grafik

    I shrunk the window down to less then a quarter of my 4k screen, so the resolution shouldn't be a problem. Also I set the quality settings to low (no ssao, also no lights in the scene except ambient "light").

    Any idea why it performs so poorly? My PC runs Witcher 3 at max details in 2k resolution at nearly 60fps, so I don't think the polygon count is a problem here. 😅

    Reviewed by itmuckel at 2020-10-23 00:41
  • 12. Fedora Dependencies

    I saw this repo has a "Dependencies" section but those packages are for Ubuntu. How to install dependencies on Fedora?

    This is what I get when I run cargo run:

    cargo run --package editor --release                                                                                                                                    (*master) 19:16:38 
       Compiling editor v0.1.0 (/home/forkerion/macroquarto/platformer/editor)
    error: linking with `cc` failed: exit status: 1
      |
      = note: "cc" "-m64" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.0.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.1.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.10.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.11.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.12.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.13.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.14.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.15.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.2.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.3.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.4.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.5.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.6.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.7.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.8.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.editor.7b682385-cgu.9.rcgu.o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13.2gl7w1w3xwk6wjry.rcgu.o" "-Wl,--as-needed" "-L" "/home/forkerion/macroquarto/platformer/target/release/deps" "-L" "/usr/lib64" "-L" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/forkerion/macroquarto/platformer/target/release/deps/libplatformer-5e0ef23b9444c5bb.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfyroxed_base-d3e0d678d6a3bbc5.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfyrox-554f37c6646fe82d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libinflate-27ca30933bdcf3c6.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libthiserror-29366fe6e3533868.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfyrox_ui-e154a3a9e71dd4f8.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfontdue-142a7ea6f5c3b890.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libttf_parser-928a14f823bc4a87.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libhashbrown-94ebaf924496cf8e.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libahash-6a78d2841aec63e4.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcopypasta-ea0e706fad09f9fc.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libx11_clipboard-67f1bf1e96e216a0.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libxcb-38c45ac53f7e6497.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsmithay_clipboard-cb89969dd8d28ec4.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsmithay_client_toolkit-02defd43e17bd9b3.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmemmap2-e614981961b21930.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnix-09d06ca764323b4f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsysinfo-8e3e09432ba0f2b2.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libtbc-bf28e012a1c05481.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libglutin-9d36ea0a3bec2ed6.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwayland_egl-ae975ada6bb7f248.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libosmesa_sys-598db0dcbf5a4c7d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libshared_library-7c34a661f07f54e5.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwinit-1ccd882b973070af.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmio-3cc9502301bfc89a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libpercent_encoding-76ddf766122c0991.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsmithay_client_toolkit-74005cd920b551eb.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwayland_cursor-d0273abed19944eb.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libxcursor-e507a98350a79d5c.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnom-eaa7f21f57a4c645.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmemmap2-53c164f6de68451e.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwayland_protocols-64eabe8578976a19.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwayland_client-bc20886a694563f9.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libscoped_tls-0b744f8f60832483.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwayland_commons-40516ff02fff4754.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwayland_sys-22968ddca960fafc.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcalloop-fe55eacce0dfe666.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnix-d4c5e1b6fdd66b5b.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libdlib-0b189043d9d00809.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblibloading-4d297f1e65c5d66d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libraw_window_handle-d4b5a7fee2f51af4.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcty-9adac7fba50eda29.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libparking_lot-3ef6acc3f1c437c4.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libparking_lot_core-f29573a8f0af0590.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libglutin_glx_sys-67b49a3323617c4a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libx11_dl-cb7bf3539a89f455.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libglutin_egl_sys-2af7ae7f2be278b2.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librayon-1d0e9de07040f26d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librayon_core-ae13286505bb7240.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librapier2d-d35b7f866cd6e073.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libparry2d-fd4a0fea145323b7.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librapier3d-f3b125fbf412720b.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libbit_vec-462469194546b74e.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrossbeam-498c3a0d796f49ab.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrossbeam_channel-7dfc13e093196bcd.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrossbeam_deque-ad2ee0adc1413af3.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrossbeam_queue-8848485febd9a06f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrossbeam_epoch-8705a04f825f1a22.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrossbeam_utils-0b32a26c63afdeea.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libonce_cell-afc9b5fb31f3f39c.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libparry3d-e7dc49feb80886c0.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librustc_hash-8480148b5359f3c2.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libspade-4aff83dd2a8978d5.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librobust-1a32a39c3f602d51.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liboptional-3e2831268e1a385f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libdowncast_rs-93cde496da83a4c2.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libeither-7335581cdff27c32.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libimage-ed4cba635158dfe1.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libpng-78825c76cf1f5811.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libdeflate-7a0eb732fd12629b.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libadler32-d397e97e1221aecf.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_iter-77e10e5ccfc5eda8.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libgif-285750d58953ef82.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcolor_quant-b85aadb5f83be11a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libtiff-0231dcb0916c6a93.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libflate2-29f2e56d37fce4a5.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libminiz_oxide-cb2fdb4a08c7e276.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libadler-cdad03bdeacbde58.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcrc32fast-fc8727af6afff6f8.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libweezl-a4fe62bd7af41c1f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libjpeg_decoder-d3c91c24e5956550.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libddsfile-2b1dfa9d59a31b7c.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libenum_primitive-2db9276f54ab7a77.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_traits-fe1e5037b9012369.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libglow-f28cc0c16a01e758.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libron-c979aba149b49506.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnotify-1efc5cfd03e0bab3.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwalkdir-806834212020b476.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsame_file-e8becb82035b97ea.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libinotify-c830eb6cd4f097fc.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libinotify_sys-dddb288659f7a446.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmio_extras-69680e3536def49f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblazycell-9a199c70555a26fd.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmio-598169d5da21c016.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libiovec-690bc9bc49f07d9b.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnet2-0762ed50c237c500.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcfg_if-b7517ee1b405cdac.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfiletime-6dba564e74398c3f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libbitflags-5f35ade335c71dac.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfyrox_sound-e677cd8de0cf1fb7.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libstrum-437b5f6750c830b8.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libalsa_sys-5c7a0bb3fb26a60d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libhound-82d18dfbb377fb8d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libhrtf-8c8778e977f08a53.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librubato-2e47efc3269a0fd4.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librealfft-4b27e7618abf82be.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblog-7ff299f2a5fab3c2.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librustfft-17f96d02f6736df7.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libprimal_check-55f02305ad50039c.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libtranspose-e6d6811db186f7ae.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libstrength_reduce-1ec3a68b671f4edc.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblewton-09dafdacc88f046a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libogg-68bb28ad67e07536.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libtinyvec-a82b682478407f7e.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libtinyvec_macros-2847f334fb930357.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfyrox_resource-ecc47e82875ffadd.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfyrox_core-bf97367ca6de5b24.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libbase64-d241d6571edb683d.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libinstant-049e5f11bc04101a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures-3410b3ba8bf74ccf.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_executor-ee784384eeea7961.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_cpus-310969d2ce3c1539.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_util-d5dc192bce765174.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmemchr-6732bea9ab1b270b.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_io-274524597557ee52.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libslab-510dde88db486632.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_channel-f82977ead92bd031.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libpin_project_lite-98a682410d660e59.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_sink-4b6fb6ecae0c7902.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_task-8aa58fea4933c8d6.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libpin_utils-b977a43eb4c73409.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfutures_core-0469fe110869e2f1.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libuuid-7c0c73209e3c50f9.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librand-a672bb1741a8b11a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librand_chacha-a0ab592ade51ba92.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libppv_lite86-c6149c7153252846.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librand_core-6b254065529fae41.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libgetrandom-ba1a3180adc2fc15.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libparking_lot-54cce09381dc5c66.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libparking_lot_core-bc76ece28df7c732.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblibc-d7aaba65a8691d49.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libcfg_if-d2f5240c3ba9f1eb.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsmallvec-aba1edc4f5bef118.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblock_api-2c27abeb45176655.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libscopeguard-cc20f1d9e660717a.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnalgebra-a970eb73cf6a54d7.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmatrixmultiply-f8ffc77b3bd8db68.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/librawpointer-cc7f4a4ae12d14ae.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_rational-69b0dc2fd359059e.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_integer-eb393f77418e938f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libtypenum-774d8bd2dfac2dd8.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsimba-835049c9db11ff93.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libwide-6b12de50c6cbeca5.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libsafe_arch-becf1002207bc268.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libbytemuck-d587e85f95b2ff90.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_complex-51b66b9591f6f89f.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libapprox-0b256e68a74d9e6c.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libnum_traits-1c08c1ec6f3368e6.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libserde-1e27d989c4a372f8.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libarrayvec-a124e008f7717980.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/liblazy_static-7afcd8eab5501c1b.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libmemoffset-213003319e8a6081.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libfxhash-6e8613fa629d8832.rlib" "/home/forkerion/macroquarto/platformer/target/release/deps/libbyteorder-a3fe6a063f2447da.rlib" "-Wl,--start-group" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-05b39ac0cb4c5688.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-ccaa149b737d6503.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-a94a6388c153126b.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-1ecfa264246b85c6.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-ee710154a50440b8.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-f09986d873ea8592.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-f3521e20c99619ab.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-df6036c77d75ce21.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-24f91c1a1dfc7e13.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-bffcc61991adb202.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-cf22313353d8663e.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-c45fb100f99430e9.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-0cdc47a8a81950ea.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-f1e158606c4c82f6.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-0b608b5ef4df0ec4.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-b8438dc0bcbbcc08.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-70e2ae036775ff2f.rlib" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-815d281f7068a893.rlib" "-Wl,--end-group" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-377835cfab8dae0d.rlib" "-Wl,-Bdynamic" "-lxcb" "-lxcb-render" "-lxcb-shape" "-lxcb-xfixes" "-ldl" "-lasound" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/forkerion/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/forkerion/macroquarto/platformer/target/release/deps/editor-5eed8def661c4e13" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs"
      = note: /usr/bin/ld: cannot find -lxcb
              /usr/bin/ld: cannot find -lxcb-render
              /usr/bin/ld: cannot find -lxcb-shape
              /usr/bin/ld: cannot find -lxcb-xfixes
              collect2: error: ld returned 1 exit status
              
    
    error: could not compile `editor` due to previous error
    

    Any help?

    Reviewed by L1ghtingBolt at 2022-06-20 20:22
  • 13. Sound is played with delay, without no obvious reason

    In a project of mine, a sound is played with delay, without any obvious reason (the sound file itself has no silence samples at the beginning).

    This happens all the time. I'm on Linux, with AMD discrete graphics card and open source drivers.

    The project is a very direct port of another, where this problem doesn't happen (so, it's not something related, say, to problems with the audio subsystem in itself).

    In order to reproduce:

    git clone [email protected]:64kramsystem/rust-game-ports
    cd rust-game-ports/soccer-fyrox
    cargo run --release
    

    now tap up/down arrows; the sound played should sound immediately on keypress, but it has a delay instead.

    Reviewed by 64kramsystem at 2022-06-07 21:37
  • 14. Borrowing a reserved instance from a pool raises a confusing error

    When borrowing a reserved instance from a pool, the error message is confusing:

    Attempt to borrow destroyed object at [Idx: 0; Gen: 1] handle.
    

    it makes one think that the given instance has been previously removed from the pool (instead, it's been reserved).

    I don't know if it's possible, but it'd be very clear if the message was something like:

    Attempt to borrow reserved object at [Idx: 0; Gen: 1] handle.
    
    Reviewed by 64kramsystem at 2022-06-07 12:33
  • 15. Some PNG files display red areas in part of the image

    If I open some images, either via Fyrox (in a game) or in Fyroxed, red areas are displayed as part of the image. Such corruption only displays in Fyrox; other programs/libraries (Eye of MATE, GIMP, Github web interface, the PyGame library) don't have this problem.

    This is an example:

    image

    This is how the image looks when opened on Gimp:

    image

    This is a link to the image file.

    Reviewed by 64kramsystem at 2022-05-27 21:38
  • 16. Fyroxed crashes when opening a directory with symlinks in the resource browser

    I have a project, where a directory includes subdirectories which are symlinks.

    If I click on the directory in the resource browser, Fyroxed crashes, with this stack trace:

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: StripPrefixError(())', /home/saverio/.cargo/registry/src/github.com-1ecc6299db9ec823/fyrox-core-0.20.0/src/lib.rs:339:10
    stack backtrace:
       0:     0x5649a4bdd76d - std::backtrace_rs::backtrace::libunwind::trace::h2a0687f70fa2932f
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
       1:     0x5649a4bdd76d - std::backtrace_rs::backtrace::trace_unsynchronized::hd9fe6fafb6949f1d
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x5649a4bdd76d - std::sys_common::backtrace::_print_fmt::h1cb3661b4f93f527
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/sys_common/backtrace.rs:66:5
       3:     0x5649a4bdd76d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h15d5b6f252669e68
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/sys_common/backtrace.rs:45:22
       4:     0x5649a4c01bbc - core::fmt::write::hfcda85493823842c
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/core/src/fmt/mod.rs:1196:17
       5:     0x5649a4bda2a1 - std::io::Write::write_fmt::h818d19a3163a9cb4
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/io/mod.rs:1654:15
       6:     0x5649a4bdef45 - std::sys_common::backtrace::_print::h5d648ffba569db29
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/sys_common/backtrace.rs:48:5
       7:     0x5649a4bdef45 - std::sys_common::backtrace::print::h074e8185938ef288
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/sys_common/backtrace.rs:35:9
       8:     0x5649a4bdef45 - std::panicking::default_hook::{{closure}}::hc6c114b96e5a6a24
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:295:22
       9:     0x5649a4bdec66 - std::panicking::default_hook::h8e3922ce7d759043
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:314:9
      10:     0x5649a4bdf4d6 - std::panicking::rust_panic_with_hook::h049e875c51e8c8d6
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:698:17
      11:     0x5649a4bdf3c7 - std::panicking::begin_panic_handler::{{closure}}::h41581800f94edb3f
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:588:13
      12:     0x5649a4bddc24 - std::sys_common::backtrace::__rust_end_short_backtrace::h3a787e02af7cad6d
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/sys_common/backtrace.rs:138:18
      13:     0x5649a4bdf0f9 - rust_begin_unwind
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:584:5
      14:     0x5649a4169be3 - core::panicking::panic_fmt::h17cbed6fcc59adb0
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/core/src/panicking.rs:142:14
      15:     0x5649a4169cd3 - core::result::unwrap_failed::hbed6c685deb4a495
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/core/src/result.rs:1785:5
      16:     0x5649a4175616 - fyrox_core::make_relative_path::h8558d2f36f44d910
      17:     0x5649a42c4f84 - fyroxed_base::asset::AssetBrowser::handle_ui_message::h99ec82c4456f42fb
      18:     0x5649a41a363b - fyroxed_base::Editor::handle_ui_message::h47ae8903b9a1ca31
      19:     0x5649a41aa6e3 - fyroxed_base::update::hf8bd8c418b12854a
      20:     0x5649a4375add - fyroxed_base::Editor::run::{{closure}}::haf58fc6fc1061623
      21:     0x5649a43ab0a1 - winit::platform_impl::platform::x11::EventLoop<T>::run::h415e484cdcd5eebe
      22:     0x5649a4363e03 - winit::platform_impl::platform::EventLoop<T>::run::ha09310adc33639b7
      23:     0x5649a418b2a0 - winit::event_loop::EventLoop<T>::run::hd4d5dd145a99c156
      24:     0x5649a41a811d - fyroxed_base::Editor::run::he9129b7d03deb910
      25:     0x5649a41718d7 - fyroxed::main::he670255ff561fd9e
      26:     0x5649a416f933 - std::sys_common::backtrace::__rust_begin_short_backtrace::h7a87057189921865
      27:     0x5649a416fcf9 - std::rt::lang_start::{{closure}}::h48cf321427efa244
      28:     0x5649a4bd4d76 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h34d002777f682618
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/core/src/ops/function.rs:280:13
      29:     0x5649a4bd4d76 - std::panicking::try::do_call::haf916b42928e4ca3
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:492:40
      30:     0x5649a4bd4d76 - std::panicking::try::hbe8e037c14a32ce2
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:456:19
      31:     0x5649a4bd4d76 - std::panic::catch_unwind::h1d97edf18f5c66f8
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panic.rs:137:14
      32:     0x5649a4bd4d76 - std::rt::lang_start_internal::{{closure}}::hba8cc6c7410699ad
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/rt.rs:128:48
      33:     0x5649a4bd4d76 - std::panicking::try::do_call::hacdfd236029174a3
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:492:40
      34:     0x5649a4bd4d76 - std::panicking::try::h445fd3fe7faccf2a
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panicking.rs:456:19
      35:     0x5649a4bd4d76 - std::panic::catch_unwind::h1db6954637d0b1ab
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/panic.rs:137:14
      36:     0x5649a4bd4d76 - std::rt::lang_start_internal::h1b6ff6c42d2b35e5
                                   at /rustc/4cbaac699c14b7ac7cc80e54823b2ef6afeb64af/library/std/src/rt.rs:128:20
      37:     0x5649a4171922 - main
      38:     0x7fda09c95083 - __libc_start_main
                                   at /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:308:16
      39:     0x5649a4169e8e - _start
      40:                0x0 - <unknown>
    

    You can actually find this directory here in the project repository.

    I'm not 100% sure that the symlinks cause the crashes, but other directories don't have this problem.

    Reviewed by 64kramsystem at 2022-05-27 21:33
Make production Rust binaries auditable

rust-audit Know the exact crate versions used to build your Rust executable. Audit binaries for known bugs or security vulnerabilities in production,

Jun 25, 2022
Discord RIch Presence in Rust, with native Bevy support

Discord Presence The root project for both Bevy Discord Presence and regular Discord Presence, both contained in the crates directory. TODO Allow invi

May 31, 2022
A game of snake written in Rust using the Bevy game engine, targeting WebGL2

Snake using the Bevy Game Engine Prerequisites cargo install cargo-make Build and serve WASM version Set your local ip address in Makefile.toml (loca

Dec 26, 2021
Minecraft-esque voxel engine prototype made with the bevy game engine. Pending bevy 0.6 release to undergo a full rewrite.
Minecraft-esque voxel engine prototype made with the bevy game engine. Pending bevy 0.6 release to undergo a full rewrite.

vx_bevy A voxel engine prototype made using the Bevy game engine. Goals and features Very basic worldgen Animated chunk loading (ala cube world) Optim

Jun 18, 2022
Provision Mammoth-ready Minecraft clusters with ease!

Minecraft Server Provisioner Provision Mammoth-ready Minecraft clusters with ease! Overview Provisioner is a tool designed to make the creation of Mam

Jun 21, 2022
2-player game made with Rust and "ggez" engine, based on "Conway's Game of Life"
2-player game made with Rust and

fight-for-your-life A 2-player game based on the "Conway's Game of Life", made with Rust and the game engine "ggez". Create shapes on the grid that wi

Oct 25, 2021
2d Endless Runner Game made with Bevy Game Engine
2d Endless Runner Game made with Bevy Game Engine

Cute-runner A 2d Endless Runner Game made with Bevy Game Engine. Table of contents Project Infos Usage Screenshots Disclaimer Project Infos Date: Sept

Sep 30, 2021
A game made in one week for the Bevy engine's first game jam

¿Quien es el MechaBurro? An entry for the first Bevy game jam following the theme of "Unfair Advantage." It was made in one week using the wonderful B

Jun 14, 2022
Solana Game Server is a decentralized game server running on Solana, designed for game developers

Solana Game Server* is the first decentralized Game Server (aka web3 game server) designed for game devs. (Think web3 SDK for game developers as a ser

Jun 7, 2022
A no-frills Tetris implementation written in Rust with the Piston game engine, and Rodio for music.
A no-frills Tetris implementation written in Rust with the Piston game engine, and Rodio for music.

rustris A no-frills Tetris implementation written in Rust with the Piston game engine, and Rodio for music. (C) 2020 Ben Cantrick. This code is distri

Jun 20, 2022
My first Real-Time 3D Game Engine learning project written in Rust.

EyeEngine-Rust FOA, sry for my poor English. What is Eye Engine? Eye Engine is my first Real-Time 3D Game Engine learning project. There are two editi

Jan 5, 2022
A simple Minecraft written in Rust with the Piston game engine
A simple Minecraft written in Rust with the Piston game engine

hematite A simple Minecraft written in Rust with the Piston game engine How To Open a World This method is only for personal use. Never distribute cop

Jun 18, 2022
A modular game engine written in Rust
A modular game engine written in Rust

A modular game engine written in Rust Maintainers of Piston core libraries: @bvssvni Dive into the world of Piston Guide Overview Examples Tutorials F

Jun 24, 2022
A block world game engine written in Rust.

About This is the Leafwing Studios' template repo, providing a quick, opinionated base for high-quality Bevy game projects (and libraries). We've shav

Feb 3, 2022
A refreshingly simple data-driven game engine built in Rust

What is Bevy? Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open-source forever! WARNING Bevy is still in the ve

Jun 17, 2022
RTS game/engine in Rust and WebGPU
RTS game/engine in Rust and WebGPU

What is this? A real time strategy game/engine written with Rust and WebGPU. Eventually it will be able to run in a web browser thanks to WebGPU. This

May 19, 2022
unrust - A pure rust based (webgl 2.0 / native) game engine

unrust A pure rust based (webgl 2.0 / native) game engine Current Version : 0.1.1 This project is under heavily development, all api are very unstable

Jun 20, 2022
Rust implementation of Another World (aka Out of this world) game engine
Rust implementation of Another World (aka Out of this world) game engine

RustyWorld Rust implementation of Another World (aka Out of this world) game engine. I wanted a fun project to challenge myself while learning Rust, a

Jul 1, 2021
Simple RUST game with the Bevy Engine

Simple RUST Game using the Bevy Engine YouTube videos for this code base: Episode 1 - Rust Game Development tutorial from Scratch with Bevy Engine Epi

Jun 25, 2022