Help Skelly to find bones, combine them to build his body back

Overview

Bones Collector

Help Skelly to find bones, combine them to build his body back! Game made for the bevy Jam#2.

Play it here in your browser: itch.io!

img

Retrospective

This is my first game ever made. I started learning Bevy+Rust in the same time in June 2022, 3 months ago, and I thought that this Bevy Jam was a good timing to have fun.

First impressions

Really happy to have something functional with a beginning, an understandable goal (open the gate), different (small) steps and a clear end. As said, this is my first game, in Rust and Bevy that I did not know anything about 3 months ago. I really love Rust and Bevy, there are so intuitive for me, I can write down stuff really fast and make something work easily. I work with Python in my job and I clearly, I consider now to switch to a rust-focused job (but I wait a bit to see if this is just a wow-effect).

The most important for me is that I finished a personal project, from beginning to end, and this is a first time for me. Even if at the end, the game is a five-minutes-long game, I am proud of it.

Planning

I organized it like my work project, with Github's issues and milestone, because I know this is something that works for me. Having issues written in advance helped me stay focused and, moreover, helped me to avoid the pitfall: "oh I have an idea! what if I added this new fancy feature??". Each time I had a thought like these, I added it to the issue board in the last milestone named "Cool stuff to add If I have time at the end". Obviously you know what happened to this milestone.

I also tracked my time (using Toggl) to manage my energy, not working for too long session as I know this exhaust me really fast, not neglect breaks and rest time (this is how I work). This last point was kinda problematic for a Jam, as I can not do long working-session, but I kept all free-time free these 10 days so that I can space out my sessions.

Time spent and Difficulties

I've spent a total of 31h working on this game during the 10 days of the Jam, that's a lot for a five-minutes-game long, but this is my first try. Most hours have been put in :

  • Understanding how Bevy's 3D Animation is working
    • bevy_animation crate was a hell for me to understand. I feel like this crate is still a prototype and lacks a lot of manipulating functions. Another high probability option is that I don't get the philosophy behind this crate :)
    • Thanks to this discussion, I manage to write an animation_handler file and make the game working. But I really feel that this is a hack and that bevy_animation crate is not meant to be used like this.
  • Manipulating assets:
    • The main mechanic of this game is to update the SceneModel of the player on certain conditions. The SceneBundle is inserted as a child of the player entity and the Bevy's GLTF loader adds an AnimationPlayer entity each time a SceneHandle is added to an entity. To update a model, I had to (in this function) :
      • Remove the SceneBundle child from the player's entity
      • Remove the AnimationPlayer associated (the "associated" is key, was not easy to get it. Again this hack helped me.)
      • Adds the new model (SceneHandle) with a SceneBundle to the player's entity
    • I had to extract each body part (head, arm, leg, bone) from the full-body Skeleton Asset using Blender (v2.8). First time I used Blender aaaaand it took me many (many!) hours. Two parts were difficult:
      • The extracted body parts were dim, and after investigating the light (under Bevy and Blender), shader, renderer etc.. I could not understand why. So in the game, I put a very bright light so that darkest parts were bright enough. You can see the difference when the full-body version of Skelly is loaded, he is way brighter than all other parts.
      • Animations and file formats. The initial skeleton model had 10 animations on Sketchab. You can download the file in different format (flx, obj, glb, gltf). First I took the GLTF file to start coding the game, in this format, animations are well organized and recognised by bevy_animation. Then I wanted to extract body parts, I was on a different computer so I downloaded the asset again and as Blender can open any format, I took the first: FBX. In this format, I learned (after maybe 5~ hours of struggling) that animations are baked into one object. An baked animation can not be well imported using bevy_animation. I thought first that my inexperience in Blender was the problem, that I erased animation while removing body part. I lost so many hours.

If the game was manipulating only one SceneHandle for the player, I would have not lost 20 hours~ on these two points. I have no regret, just a fact :)

What's missing

A lot of stuff were supposed to be added into the game:

  • Audio, obviously. I really wanted to have a nice "pickup" sound when collecting bones, to make it satisfying.
  • A starter and ending screen.
  • Two rooms to collect bones:
    • First room that can be only access with the "Only-Head" model, like entering by a head-sized hole in a wall to collect bones to unlock the Arm-less skeleton
    • Second room only accessible with legs, like required to jump or something similar, to collect arms.
  • A zombie to fight in the last room, nothing fancy, just to use the attack animation and making the Full-Body-Skeleton creation process satisfying: "Now I have arms, so I can hit!".

Takeaway for the next Jam

This is mostly for me but can be helpful :)

  • Do not neglect your health (eat well, move/sport, sleep enough), this is how you gain energy and can last efficiently,
  • Milestone + Issues written in advance (and I insist on "in advance") is a great strategy,
  • 3D manipulation (with Blender here) is time-consuming, try to limit as possible its usage in Jam, or ask someone else,
  • Try to limit most game mechanics to your comfort zone,
  • Add few mechanics that you feel uncomfortable with so that you can use this opportunity to learn something new,
  • Bevy-inspector-egui is a most have, I think this game would not have been possible without, abuse it,
  • Use Bevy's CI-CD template and try a full release and make it work on itch at least two days before the deadline,
  • If you do not know of to program a feature, just write something, do not spend hours looking for the perfect solution on the web. Write something, test it and do not be afraid of making small steps. You'll figure it out when doing.
  • Do not be afraid of making small steps (it deserved its bullet point)
  • Abuse cargo clippy and reformat regularly, do not wait too long before cleaning stuff (can be hard in a rush like Jams)

Credits

Assets

Logo

Logo has been generated with MidJourney's AI.

Tutorials

I've watched and used a lot of Logic Projects's tutorial videos. Thank you if you're around :)

You might also like...
A visual canvas and virtual machine for writing assembly to build cool things. Create machines and connect them together.
A visual canvas and virtual machine for writing assembly to build cool things. Create machines and connect them together.

Visual Assembly Canvas A highly visual assembly editor, infinite canvas for wiring blocks and machines together, bytecode virtual machine runnable nat

🌈 Brings back colour console to Win64 for Garry's Mod SRCDS
🌈 Brings back colour console to Win64 for Garry's Mod SRCDS

🌈 gmsv_concolormsg This module for Garry's Mod fixes x86-64 Windows 64-bit SRCDS not displaying colours. Why does it do that? Who knows! But it's eas

An open source artifact manager. Written in Rust back end and an Vue front end to create a fast and modern experience

nitro_repo Nitro Repo is an open source free artifact manager. Written with a Rust back end and a Vue front end to create a fast and modern experience

Adds back-and-forth jumping between current and previous focused windows to Sway.

sway-focus-back-and-forth Implements back-and-forth movement between the current and the previous focused windows. It also can be seen as a fix to thi

Firefox used to have this feature a while back (from Firefox 11 to 46) and it is so good, that I feel it needs revival.
Firefox used to have this feature a while back (from Firefox 11 to 46) and it is so good, that I feel it needs revival.

3D WebPage Inspector By: Seanpm2001, Et; Al. Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af A

Fixed point to floating point (and back) conversion utility

fixed2float Simple utility for fixed point to real number conversions, using the VisSim (Fxm.b) and Q (Qm.n) notations. Usage as a dependency of your

RedMaple offers an oppinionated yet extremely flexible data modeling system based on events for back-end applications.

RedMaple offers an oppinionated yet extremely flexible data modeling system based on events for back-end applications.

Remember how cool smlinux was? It's now time to bring it back.

smbuilder Remember how cool smlinux was? It's now time to bring it back. What is smbuilder? In short, smbuilder (stylized as all lowercase) is an app

Generate and translate standard uuids into shorter formats and back.

short-uuid Generate and translate standard UUIDs into shorter or just different formats and back. A port of the JavaScript npm package short-uuid so b

Comments
  • Add egui

    Add egui

    cargo.toml:

    bevy-inspector-egui = "0.12.1"

    main:

    use bevy_inspector_egui::WorldInspectorPlugin;

    .add_plugin(WorldInspectorPlugin::new() <- après default

    Pour les components:

    Ajouter un nom : .insert(Name::new("name"));

    https://youtu.be/VSnhfm00Vz4

    core 
    opened by thmsgntz 2
  • Add tasks

    Add tasks

    • Devant la pièce 3 : message pour dire qu'il faut des bras
    • Devant la pièce 2 : message pour dire qu'il faut des jambes
    • Pièce 1 : récolter ce qu'il faut pour jambe
    • Pièce 2 : récolter ce qu'il faut pour bras
    • Pièce 3 : un zombie à tuer
    • Pièce 3 : un bras qui sert d'arme
    opened by thmsgntz 1
Owner
Thomas
Thomas
command line tools for coprolite research (paleontology and archaeology): estimate the producer's body mass based on coprolite diameter by the use of regression models

OVERVIEW OF COPROSIZE coprosize employs power, exponential and cubic regression models allowing to estimate the producer's body mass based on coprolit

Piotr Bajdek 7 Nov 25, 2022
fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find

fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find. While it does not aim to support all of find's powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases.

David Peter 25.9k Jan 9, 2023
fas stand for Find all stuff and it's a go app that simplify the find command and allow you to easily search everything you nedd

fas fas stands for Find all stuff and it's a rust app that simplify the find command and allow you to easily search everything you need. Note: current

M4jrT0m 1 Dec 24, 2021
A CLI tool connected to GPT-3 to help find the right terminal command

Command Recall A CLI tool connected to GPT-3 to help find the right terminal command Install to install the cli: cargo install --git https://github.co

Camille Moatti 102 Feb 18, 2023
lemmy-help is a emmylua parser as well as a CLI which takes that parsed tree and converts it into vim help docs.

lemmy-help is a emmylua parser as well as a CLI which takes that parsed tree and converts it into vim help docs.

Vikas Raj 117 Jan 3, 2023
Save cli commands and fuzzy find them later

crow - cli command memorizer What is crow? | Installation | Usage | FAQ What is crow? crow (command row) is a CLI tool to help you memorize CLI comman

sandstorm 7 Feb 17, 2022
Find potential unused enabled feature flags and prune them.

Potential unused, enabled feature flag finder and pruner. This cargo tool allows you to find and prune enabled, but, potentially unused feature flags

Timon 118 Jun 29, 2023
Find and clean heavy build or cache directories.

ProjClean Find and clean heavy build or cache directories. ProjClean finds directories such as node_modules(node), target(rust), build(java) and their

null 42 Sep 25, 2022
A simple CLI to build VEXCode V5 Pro projects and download them to the V5 brain.

vexer A simple CLI to build VEXCode V5 Pro projects and download them to the V5 brain. (WIP) This currently is only tested on and only works on window

null 2 May 16, 2022
A visual canvas and virtual machine for writing assembly to build cool things. Create machines and connect them together.

Visual Assembly Canvas A highly visual assembly editor, infinite canvas for wiring blocks and machines together, bytecode virtual machine runnable nat

Phoomparin Mano 31 Oct 11, 2023