Skip to content

N20: Release #583

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 10, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified content/posts/newsletter-020/em_desktop_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
361 changes: 174 additions & 187 deletions content/posts/newsletter-020/index.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
+++
title = "This Month in Rust GameDev #20 - March 2021"
date = 2021-04-06
date = 2021-04-10
transparent = true
draft = true
+++

<!-- Check the post with markdownlint-->

Welcome to the 20th issue of the Rust GameDev Workgroup's
monthly newsletter.
[Rust] is a systems language pursuing the trifecta:
@@ -26,7 +23,6 @@ Feel free to send PRs about your own projects!
[join]: https://github.com/rust-gamedev/wg#join-the-fun
[pr]: https://github.com/rust-gamedev/rust-gamedev.github.io
[coordination]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination

[Rust]: https://rust-lang.org
[join]: https://github.com/rust-gamedev/wg#join-the-fun

@@ -37,8 +33,6 @@ Feel free to send PRs about your own projects!
- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github)
- [Meeting Minutes](#meeting-minutes)
- [Requests for Contribution](#requests-for-contribution)
- [Jobs](#jobs)
- [Bonus](#bonus)

<!--
Ideal section structure is:
@@ -78,9 +72,9 @@ Twitch][rust-gamedev-twitch]. If you would like to show off what you've been
working on, fill out [this form][gamedev-meetup-form].

[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6
[gamedev-meetup-video]: https://www.youtube.com/watch?v=gqCxt8XL92o
[gamedev-meetup-video]: https://youtube.com/watch?v=gqCxt8XL92o
[rust-gamedev-discord]: https://discord.gg/yNtPTb2
[rust-gamedev-twitch]: https://www.twitch.tv/rustgamedevmeetup
[rust-gamedev-twitch]: https://twitch.tv/rustgamedevmeetup

## Game Updates

@@ -123,9 +117,9 @@ about several decompilation projects.

Some of the most recent additions are:

- Karts and gliders
- Health meters
- More visuals with butterflies and fish
- Karts and gliders.
- Health meters.
- More visuals with butterflies and fish.

A stress test is scheduled for 2021-04-17 17:30 UTC and everyone is invited to join.

@@ -181,24 +175,24 @@ Originally developed using 2D Javascript canvas, its core has been fully
rewritten in Rust and WebGL2 using [wasm-bindgen].
New features include:

- The support of multiple allsky projections (mercator, aitoff, ...)
- The blending of multiple surveys
- The support of FITS file images
- The support of multiple allsky projections (mercator, aitoff, ...).
- The blending of multiple surveys.
- The support of FITS file images.

For more information, see a [talk][adass-talk] done at the ADASS 2020
conference. A web page is also available [here][al-test-url] for you to test.
You are also very welcolme to contribute to the project by e.g. posting issues
on our github.
on the project's github.

[Astronomical Observatory of Strasbourg]: https://cds.u-strasbg.fr/index-fr.gml
[Aladin Lite]: https://github.com/cds-astro/aladin-lite/tree/develop
[wasm-bindgen]: https://github.com/rustwasm/wasm-bindgen
[adass-talk]: https://www.youtube.com/watch?v=TILtJOiiRoc
[adass-talk]: https://youtube.com/watch?v=TILtJOiiRoc
[al-test-url]: https://bmatthieu3.github.io/hips_webgl_renderer/index.html

### [Portal Explorer][portal-explorer]

!["Portal in portal" scene](./portal-explorer.png)
!["Portal in portal" scene](portal-explorer.png)
_"Portal in portal" scene_

[Portal Explorer][portal-explorer] by [@optozorax][optozorax-twitter] is a web
@@ -249,7 +243,7 @@ _Orbital Decay gameplay_

[Orbital Decay][orbital-decay] by [@stevebob] is an
[open-source][orbital-decay-source] turn-based tactical roguelike with a focus
on ranged combat. Deal enough damage to enemies to get through their armour
on ranged combat. Deal enough damage to enemies to get through their armour
without breaching the hull of the station, or risk being pulled into the void.
It was made for the [7 Day Roguelike 2021][7drl-2021] game jam.

@@ -316,7 +310,7 @@ at [Rust Meetup Linz on April 22][rust-linz].

### [Bounty Bros.][bounty_bros]

[![bounty-bros-character-on-map](./bounty_bros.png)][bounty_bros_webgame]
[![bounty-bros-character-on-map](bounty_bros.png)][bounty_bros_webgame]
_Click the image to play the game in your browser!_

[Bounty Bros.][bounty_bros] is a prototype game similar to the old Legend of
@@ -327,12 +321,12 @@ In the last 2 months Bounty Bros. has gotten a lot of updates. Now you can [play
the game][bounty_bros_webgame] right inside of your browser on desktop or mobile
devices!

- You can no longer walk through walls or objects
- You can now walk into buildings
- The camera follows the player without passing beyond the map borders
- Rendering is now scaled pixel-perfect
- Mobile touch controls were added
- There is a new [retro mode][bounty_bros_retro_mode] that tries to make it it
- You can no longer walk through walls or objects.
- You can now walk into buildings.
- The camera follows the player without passing beyond the map borders.
- Rendering is now scaled pixel-perfect.
- Mobile touch controls were added.
- There is a new [retro mode][bounty_bros_retro_mode] that tries to make it
look like the game is running on an old CRT television.

All of the source code, excluding assets and artwork, was also made available
@@ -343,13 +337,13 @@ These projects were released under the
implications that you may or may not agree with, so please read it before making
use of these projects:

- [Bevy Retro][bevy_retro]: A Bevy plugin for pixel-perfect games
- [Skip'n Go][skipngo]: A simple game engine for making top-down pixel games
- [Bevy Retro][bevy_retro] ([forum][skipngo_discussions])
\- a Bevy plugin for pixel-perfect games.
- [Skip'n Go][skipngo] ([forum][bounty_bros_blog_post])
\- a simple game engine for making top-down pixel games.

You can read the full update in the [Blog Post][bounty_bros_blog_post].

_Discussions: [Skip'n Go on GitHub][skipngo_discussions], [Bevy Retro on GitHub][bevy_retro_discussions]_

[bevy_retro]: https://github.com/katharostech/bevy_retro
[bevy_retro_discussions]: https://github.com/katharostech/bevy_retro/discussions
[katharostech]: https://katharostech.com
@@ -365,7 +359,7 @@ _Discussions: [Skip'n Go on GitHub][skipngo_discussions], [Bevy Retro on GitHub]

![Improved text rendering](pglowrpg_progress.jpg)

[pGLOWrpg][pglowrpg-github] by [@Roal_Yr]
[pGLOWrpg][pglowrpg-github] ([Twitter][pglowrpg-twitter]) by [@Roal_Yr]
is a Procedurally Generated Living Open World RPG,
a long-term project in development, which aims to be a narrative text-based game
with maximum portability and accessibility.
@@ -376,8 +370,6 @@ Recent updates include:
- Switching to .ron file format for storing configs and strings.
- Implementing individual strings coloring for better visual perception.

_Discussions: [Twitter][pglowrpg-twitter]_

[@Roal_Yr]: https://twitter.com/Roal_Yr
[pglowrpg-twitter]: https://twitter.com/pglowrpg
[pglowrpg-github]: https://github.com/roalyr/pglowrpg
@@ -411,7 +403,7 @@ In the last month, the game concept has been overhauled. Most importantly:

- Planets become inhabitable over time, starting with the outermost one in order
to bring head-to-head matches to an end eventually.
- Full focus on multiplayer, including AIs
- Full focus on multiplayer, including AIs.
- Players can’t die mid-game anymore. When defeated, they re-spawn and lose a
colony for it (if they have one) instead of dying. This prevents long waiting
times when playing against friends.
@@ -423,7 +415,7 @@ You can follow the development of Stellary 2 on [Twitter][coffe-junk-studio].

### [A/B Street]

![Elevation data in A/B Street](./abstreet.jpg)
![Elevation data in A/B Street](abstreet.jpg)

[A/B Street] by [@dabreegster] is a traffic simulation game exploring how small
changes to roads affect cyclists, transit users, pedestrians, and drivers, with
@@ -487,13 +479,12 @@ _Game footage with the new weapon._

[Fishgame][fishgame] [(web build)][fishgame-itch] is an online multiplayer game,
created in a collaboration between [Nakama][nakama], an open-source scalable
game server, and the [Macroquad](https://github.com/not-fl3/macroquad/) game
engine.
game server, and the [Macroquad][macroquad] game engine.

This month fishgame migrated to [nakama-rs] (featured in this newsletter as
well).
This month:

Also a second weapon, the sword, was added to the game.
- fishgame migrated to [nakama-rs] (featured in this newsletter as well).
- Also a second weapon, the sword, was added to the game.

[fishgame]: https://github.com/heroiclabs/fishgame-macroquad
[fishgame-itch]: https://fedorgames.itch.io/fish-game?secret=UAVcggHn332a
@@ -552,7 +543,7 @@ Notable changes:

- Formations can be defined in a data file
- New `InvasionFormation` phase where formations of enemies are spawned from
a pool of formations
a pool of formations

[Theta Wave]: https://github.com/amethyst/theta-wave
[@micah_tigley]: https://twitter.com/micah_tigley
@@ -563,10 +554,11 @@ a pool of formations

### [Harvest Hero][hh_disc]

![harvest_hero_level](./harvest_hero_level_making.gif)
![harvest_hero_level](harvest_hero_level_making.gif)

[Harvest Hero][hh_disc] by [@bombfuse][bmb_twitter]
is an arcade/roguelite where you whack Groobles.
[Harvest Hero][hh_disc] ([Discord][hh_disc], [Twitter][bmb_twitter])
by [@bombfuse][bmb_twitter] is an arcade/roguelite where you whack Groobles.
Built on top of [Emerald](#Emerald).

Harvest Hero has undergone a large change, migrating
from semi-randomly generated levels to handcrafted levels
@@ -575,16 +567,12 @@ that are randomly selected throughout your playthrough.
This means using [Ogmo][ogmo] to design levels,
and using [nano-ogmo][nano-ogmo] to import them.

Built on top of [Emerald](#Emerald).

Updates:

- General UI update
- Importing ogmo levels via nano-ogmo
- [April Fools demo][gag_demo]

_Discussions: [Discord][hh_disc], [Twitter][bmb_twitter]_

[hh_disc]: https://discord.gg/CJRbxQn3d9
[bmb_twitter]: https://twitter.com/bombfuse_dev
[ogmo]: https://ogmo-editor-3.github.io/
@@ -594,10 +582,11 @@ _Discussions: [Discord][hh_disc], [Twitter][bmb_twitter]_
### [Station Iapetus]

[![Station Iapetus Youtube](station-iapetus-youtube.png)][si-youtube]
_Check [gameplay video][si-youtube] on YouTube_
_Click on the iamge to see the gameplay video on YouTube_

[Station Iapetus][Station Iapetus] by [@mrDIMAS] is a 3rd person shooter on the
prison Iapetus near the Saturn.
This month's updates include:

- Inventory fixes and improvements
- Splash damage for grenades
@@ -616,7 +605,7 @@ prison Iapetus near the Saturn.
[@mrDIMAS]: https://github.com/mrDIMAS
[rg3d]: https://github.com/mrDIMAS/rg3d
[Station Iapetus]: https://github.com/mrDIMAS/StationIapetus
[si-youtube]: https://www.youtube.com/watch?v=O_ETjSkVBME
[si-youtube]: https://youtube.com/watch?v=O_ETjSkVBME

### [Way of Rhea][wor]

@@ -679,52 +668,44 @@ demonstrating some useful patterns for structuring a Tetra project.
[Starframe] by [@moletrooper] is a work-in-progress game engine for physics-y
sidescrolling 2D games.

This month, its physics engine was revamped once more (for the last time,
hopefully), implementing a modern solver method called Extended Position-Based
Dynamics. Also, [a blog post][sf-blog-post] was published, covering the
This month, [its physics engine was revamped once more][sf-update-tweet]
(for the last time, hopefully),
implementing a modern solver method called Extended Position-Based Dynamics.
Also, [a blog post][sf-blog-post] was published, covering the
development of the physics engine so far in a great deal of mathematical
detail.

_Discussions:
[twitter (physics update)][sf-update-tweet],
[twitter (blog post)][sf-blog-tweet]_

[starframe]: https://github.com/moletrooper/starframe
[@moletrooper]: https://twitter.com/moletrooper
[sf-blog-post]: https://moletrooper.github.io/blog/2021/03/starframe-devlog-constraints/
[sf-blog-tweet]: https://twitter.com/moletrooper/status/1377273607450136576
[sf-blog-post]: https://moletrooper.github.io/blog/2021/03/starframe-devlog-constraints
[sf-update-tweet]: https://twitter.com/moletrooper/status/1360723470414450688

### Emerald

![emerald_logo](./em_desktop_icon.png)
![emerald_logo](em_desktop_icon.png)

[Emerald][emerald_github] by [@bombfuse][bombfuse_twitter]
is a 2D game engine focused on being as portable as possible.

The ultimate goal of Emerald is to be a fully
featured engine that you can slap onto any
device with relative ease.
It's currently able to run on WASM,
Raspberry Pi, Mac, Windows, and Linux
The ultimate goal of Emerald is to be a fully featured engine
that you can slap onto any device with relative ease.
It's currently able to run on WASM, Raspberry Pi, Mac, Windows, and Linux
thanks to [miniquad][miniquad_git].

Features:
Features include physics via [rapier2d][rapier_2d],
ECS via [hecs][hecs_git], and font rendering via [fontdue][fontdue_git].

- Physics via [rapier2d][rapier_2d]
- ECS via [hecs][hecs_git]
- Font rendering via [fontdue][fontdue_git]
Recent updates:

New Updates:

- Rendering to textures
- [WASM game sample][em_wasm_example]
- Rendering to textures was added ([example][em_render_texture_example]).
- [WASM game sample][em_wasm_example].

[bombfuse_twitter]: https://twitter.com/bombfuse_dev
[emerald_github]: https://github.com/Bombfuse/emerald
[rapier_2d]: https://github.com/dimforge/rapier
[miniquad_git]: https://github.com/not-fl3/miniquad
[em_wasm_example]: https://bombfuse.itch.io/him-character-demo-harvest-hero
[em_render_texture_example]: https://github.com/Bombfuse/emerald/blob/eb38d868a/examples/render_to_texture.rs
[hecs_git]: https://github.com/Ralith/hecs
[fontdue_git]: https://github.com/mooman219/fontdue

@@ -734,32 +715,32 @@ New Updates:

[rg3d] ([Discord][rg3d_discord], [Twitter][rg3d_twitter]) is a game engine that
aims to be easy to use and provide a large set of out-of-box features. Some of
the recent updates:

- Context menus and tooltips (huge thanks to [MinusGix])
- Performance improvements for UI
- Parallax Mapping
- Ability to enable/disable scenes
- Expansion strategies for TreeView
- LOD system fixes
- Graphical fixes
- First version of engine's architecture overview
- Various bug fixes and small improvements
the recent engine updates:

- Context menus and tooltips (huge thanks to [MinusGix]).
- Performance improvements for UI.
- Parallax Mapping.
- Ability to enable/disable scenes.
- Expansion strategies for TreeView.
- LOD system fixes.
- Graphical fixes.
- First version of engine's architecture overview.
- Various bug fixes and small improvements.

[Editor][rusty-editor] updates:

- Ability to edit collision groups and mask for colliders
- Ability to clear command stack
- Ability to change render path for meshes
- LOD editor
- "Collapse All", "Expand All", "Locate Selection" buttons for world outliner
- "Fit Collider" feature fixes
- Picking fixes
- Change selection when paste from clipboard
- "Slow" and "Fast" camera movement modifiers
- Navmesh selection fixes
- Simple TBN visualizer
- Parallax mapping switch in settings
- Ability to edit collision groups and mask for colliders.
- Ability to clear command stack.
- Ability to change render path for meshes.
- LOD editor.
- "Collapse All", "Expand All", "Locate Selection" buttons for world outliner.
- "Fit Collider" feature fixes.
- Picking fixes.
- Change selection when paste from clipboard.
- "Slow" and "Fast" camera movement modifiers.
- Navmesh selection fixes.
- Simple TBN visualizer.
- Parallax mapping switch in settings.

[rg3d]: https://github.com/mrDIMAS/rg3d
[rg3d_discord]: https://discord.gg/xENF5Uh
@@ -778,16 +759,16 @@ The goal of this project is to combine professional game development tools under
one highly modular toolset.

- Version 0.16.0 was focused on integration of [RAUI][raui-git] crate into the
engine to allow building rich UI/UX experience for your games using declarative
mode UI composition (which now makes currently used simple UI Elements feature
deprecated and it's gonna be removed at some point in the near future).
engine to allow building rich UI/UX experience for your games using declarative
mode UI composition (which now makes currently used simple UI Elements feature
deprecated and it's gonna be removed at some point in the near future).
- In addition to that [basic web game demo][oxygengine-basic-demo]
and [pokemon-like RPG demo][oxygengine-rpg-demo] were enhanced with new UI showing
how to build UI/UX with RAUI.
and [pokemon-like RPG demo][oxygengine-rpg-demo] were enhanced with new UI showing
how to build UI/UX with RAUI.
- Next months will be focused on making RPG showing
full potential of what you can do with RAUI in Oxygengine, as well as remaking
Visual Novel module to be entirely based on RAUI in a way similar to how RenPy
is made!
full potential of what you can do with RAUI in Oxygengine, as well as remaking
Visual Novel module to be entirely based on RAUI in a way similar to how RenPy
is made!

[psichix-twitter]: https://twitter.com/psichix
[oxygengine-git]: https://github.com/PsichiX/Oxygengine
@@ -805,22 +786,22 @@ _Material grid with varying PBR properties_
Bevy 0.5 was a massive community effort. You can check out the
[full release blog post here][bevy-blog], but here are some highlights:

- Physically Based Rendering (PBR)
- Physically Based Rendering (PBR).
- GLTF Improvements, such as support for PBR textures and a new top-level GLTF
asset type
asset type.
- Bevy ECS V2: a complete rewrite of the Bevy ECS core with a hybrid component
storage model, Archetype Graphs, stateful queries, and across-the-board performance
improvements
improvements.
- A brand new Parallel System Executor packed with features: explicit system
dependencies, system labels, system sets, improved run criteria,
and increased parallelism
and increased parallelism.
- Reliable change detection: efficiently query changes to any component or
resource at any point in time (even across frames)
resource at any point in time (even across frames).
- State System Rewrite: a new stack-based state system that makes running systems
for different states (ex: menus vs in-game) much easier.
- Rich text: style text "spans" with different colors / fonts while still
respecting layout
- HIDPI text: render crisp text at any resolution
respecting layout.
- HIDPI text: render crisp text at any resolution.
- 2D world space text, world to screen space conversions, 2d/3d orthographic
camera improvements, render layers, sprite flipping, improved color space handling,
wireframes, timer improvements, and more!
@@ -866,7 +847,7 @@ learning resources. Have fun making cool things with Bevy!
[bevy_cheatbook]: https://bevy-cheatbook.github.io
[bevy]: https://bevyengine.org

### [Bevy game template][bevy-game-template]
### [Bevy Game Template][bevy-game-template]

[Bevy game template][bevy-game-template] by [@nikl_me][nikl_twitter]
is a template repository for a Bevy game.
@@ -879,10 +860,10 @@ The repository includes a GitHub workflow for Linux, MacOS, and Windows builds
[bevy-game-template]:https://github.com/NiklasEi/bevy_game_template
[nikl_twitter]: https://twitter.com/nikl_me

### [Reverse-Engineering NES Tetris to add Hard Drop][tetris-hard-drop]
### [Reverse-Engineering NES Tetris to Add Hard Drop][tetris-hard-drop]

![NES Tetris with Hard Drop and Ghost Piece](tetris-hard-drop.gif) _NES Tetris
with Hard Drop and Ghost Piece_
![NES Tetris with Hard Drop and Ghost Piece](tetris-hard-drop.gif)
_NES Tetris with Hard Drop and Ghost Piece_

A [blog post][tetris-hard-drop] describing the process of reverse-engineering
the rendering and input-handling logic in the NES version of Tetris, and using
@@ -895,40 +876,36 @@ land).
The patching tool uses the crate
[mos6502_assembler][tetris-hard-drop-assembler] to specify 6502 assembly in
rust and generate machine code. Many of the reverse-engineering experiments
were done using [this rust NES emulator][tetris-hard-drop-nes-emulator]. The
were done using [this rust NES emulator][tetris-hard-drop-nes-emulator]. The
result is available as an [IPS Patch][tetris-hard-drop-ips-patch].

_Discussions: [Hacker News](https://news.ycombinator.com/item?id=26530604),
[/r/rust](https://reddit.com/r/rust/comments/ma6jqz/using_a_rust_dsl_to_add_hard_drop_to_nes_tetris/)_

[tetris-hard-drop]:
https://www.gridbugs.org/reverse-engineering-nes-tetris-to-add-hard-drop/
[tetris-hard-drop-nes-emulator]:
https://github.com/stevebob/mos6502/tree/master/nes-emulator
[tetris-hard-drop-assembler]:
https://github.com/stevebob/mos6502/tree/master/assembler
[tetris-hard-drop-ips-patch]:
https://github.com/stevebob/mos6502/raw/master/tetris-hard-drop-patcher/tetris-hard-drop.ips
[tetris-hard-drop-patch-tool]:
https://github.com/stevebob/mos6502/tree/master/tetris-hard-drop-patcher
[tetris-hard-drop-dsl-example]:
https://github.com/stevebob/mos6502/blob/master/tetris-hard-drop-patcher/src/main.rs#L23
_Discussions:
[Hacker News](https://news.ycombinator.com/item?id=26530604),
[/r/rust](https://reddit.com/r/rust/comments/ma6jqz/using_a_rust_dsl_to_add_hard_drop_to_nes_tetris)_

[tetris-hard-drop]: https://www.gridbugs.org/reverse-engineering-nes-tetris-to-add-hard-drop
[tetris-hard-drop-nes-emulator]: https://github.com/stevebob/mos6502/tree/master/nes-emulator
[tetris-hard-drop-assembler]: https://github.com/stevebob/mos6502/tree/master/assembler
[tetris-hard-drop-ips-patch]: https://github.com/stevebob/mos6502/raw/master/tetris-hard-drop-patcher/tetris-hard-drop.ips
[tetris-hard-drop-patch-tool]: https://github.com/stevebob/mos6502/tree/master/tetris-hard-drop-patcher
[tetris-hard-drop-dsl-example]: https://github.com/stevebob/mos6502/blob/master/tetris-hard-drop-patcher/src/main.rs#L23

### [Tutorial: Writing a tiny Entity Component System in Rust][ecs-in-rust]

[@kettlecorn][kettlecorn_twitter] wrote
a beginner-friendly [tutorial][ecs-in-rust] that dives into the
inner workings of the Entity-Component-System pattern.
The tutorial walks through a minimalist ECS
implementatation to illustrate how the pattern works, and
implementation to illustrate how the pattern works, and
why it's useful.

*Discussion: [/r/rust](https://www.reddit.com/r/rust/comments/m88ywa/tutorial_writing_a_tiny_entity_component_system/)*
_Discussion:
[/r/rust](https://reddit.com/r/rust/comments/m88ywa/tutorial_writing_a_tiny_entity_component_system)_

[kettlecorn_twitter]: https://twitter.com/kettlecorn
[ecs-in-rust]:https://ianjk.com/ecs-in-rust/

### Writing a 3D Shooter using rg3d
### Writing a 3D Shooter Using rg3d

[![Demo of the third part: shooting at a moving zombie](rg3d-tut.jpg)][rg3d-tut3]

@@ -1022,14 +999,14 @@ this newsletter too.
You can read more about the library on the [Blog][planck_blog] and on
[GitHub][Planck ECS].

_Discussions: [/r/rust][planck_reddit], Discord: jojolepro#8057_
_Discussions: [/r/rust][planck_reddit]_

[@jojolepro]: https://github.com/jojolepro
[Planck ECS]: https://github.com/jojolepro/planck_ecs
[planck_shotcaller]: https://github.com/amethyst/shotcaller
[planck_blog]: https://jojolepro.com/blog/2021-01-13_planck_ecs/
[planck_patreon]: https://patreon.com/jojolepro
[planck_reddit]: https://www.reddit.com/r/rust/comments/m73ema/yet_another_ecs_library_except_much_safer/
[planck_reddit]: https://reddit.com/r/rust/comments/m73ema/yet_another_ecs_library_except_much_safer

### [hecs] v0.5

@@ -1060,14 +1037,14 @@ Version 0.5 is hot off the presses and rolls up features from the 0.4
development cycle:

- Derive macros can now implement `PartialEq` and `PartialOrd` between
archived and unarchived types
archived and unarchived types.
- Custom type bounds for serialization and deserialization can be added
with derive attributes
with derive attributes.
- Helper types like [AlignedVec][rkyv-AlignedVec] and
[Infallible][rkyv-Infallible] were introduced to improve ergonomics
- `const_generics` are now enabled by default
- Helper functions have been added to make getting root objects easier
- Several bugfixes and performance improvements
[Infallible][rkyv-Infallible] were introduced to improve ergonomics.
- `const_generics` are now enabled by default.
- Helper functions have been added to make getting root objects easier.
- Several bugfixes and performance improvements.

A [feedback issue][rkyv-feedback] is still open for providing feedback on
further development.
@@ -1101,7 +1078,8 @@ people who need expressive audio.
v0.5.0 was released with mixer send tracks, new effects, and playback position tracking
for instances, as well as a variety of smaller improvements.

_Discussions: [/r/rust](https://www.reddit.com/r/rust/comments/m0llxm/kira_game_audio_library_v050_playback_position/),
_Discussions:
[/r/rust](https://reddit.com/r/rust/comments/m0llxm/kira_game_audio_library_v050),
[Twitter](https://twitter.com/tesselode/status/1368984205947006976)_

[Kira]: https://github.com/tesselode/kira
@@ -1119,7 +1097,7 @@ array of powerful primitives unavailable on UDP or TCP.

[Quinn 0.7][quinn_release] introduces support for Tokio 1.0 and many
optimizations and bug fixes, and updates to [draft 32][quic_32] of the proposed
standard. With last call underway in the IETF, we expect to release an
standard. With last call underway in the IETF, the devs expect to release an
implementation of the final standard soon with no major changes.

[Quinn]: https://github.com/quinn-rs/quinn
@@ -1159,7 +1137,7 @@ SMAA S2x likely to be added depending on interest.
### [wgpu]

![voxel bunny on wgpu](wgpu-conservative-bunny.png)
Voxel Bunny rendering with conservative rasterization
_Voxel Bunny rendering with conservative rasterization_

[wgpu] is a [WebGPU] implementation in Rust. It is safe, efficient,
and portable: can target both native (Vulkan/D3D/Metal) and the Web.
@@ -1179,7 +1157,8 @@ feature - was added by [@wumpf] and demonstrated on a voxel bunny 🐇
Finally, there is a blog post on Mozilla [graphics team blog] about the
progress using [wgpu] in Gecko.

_Discussions: [/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/mgvd8d/last_big_wgpurs_example_shaders_are_fully_ported/)_
_Discussions:
[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/mgvd8d/last_big_wgpurs_example_shaders_are_fully_ported)_

[naga]: https://github.com/gfx-rs/naga
[wgpu]: https://github.com/gfx-rs/wgpu
@@ -1200,7 +1179,7 @@ This past month was the [release of rust-gpu v0.3][rust-gpu-v0-3].
Some of the highlights:

- A lot of technical debt that was visible to users
(such as #[allow(unused_attributes)]) was removed.
(such as `#[allow(unused_attributes)]`) was removed.
- rust-gpu now also supports basic ADT enums and has a whole inference pass
for storage class variables.
- All Embark's shaders for their internal engine
@@ -1226,9 +1205,9 @@ _Discussions:
_Rafx rendering an example tilemap from [LDTK level editor][rafx-ldtk]_

Rafx is a multi-backend renderer that optionally integrates with the
[distill][rafx-distill] asset pipeline. This month, we introduced a fourth
layer to the library, `rafx-renderer`. It provides a plugin system, simplifying
framework setup in a project.
[distill][rafx-distill] asset pipeline. This month, a fourth layer
was introduced to the library, `rafx-renderer`. It provides a plugin system,
simplifying framework setup in a project.

The demo now includes a tilemap renderer that integrates with the [LDTK level
editor][rafx-ldtk]. The `distill` integration processes the level files offline
@@ -1255,7 +1234,7 @@ FemtoVG is a 2D canvas like vector graphics library based on nanovg that has
been previously featured in this newsletter.

This month, the FemtoVG team has implemented a new rendering backend based on
the `wgpu` framework. This work is being done in this [fork][femtovg-fork] of
the `wgpu` library. This work is being done in this [fork][femtovg-fork] of
FemtoVG and will be merged into the main repo soon. The team is currently
looking for users to try out the new backend and provide feedback.

@@ -1288,7 +1267,7 @@ can get glimpses of its development by following the author on [Twitter][h3r2tic

### [Bevy Retro][bevy_retro]

![pixel-perfect-collision-demo](./bevy_retro.gif)
![pixel-perfect-collision-demo](bevy_retro.gif)
_Pixel-perfect collision [example][bevy_retro_collision_example]_

[Bevy Retro][bevy_retro] is a new [Bevy] plugin designed for making pixel-perfect
@@ -1300,20 +1279,19 @@ so please read it before making use of this project.

Bevy Retro features:

- Web and desktop support out of the box
- It even runs in Safari on iOS!
- Integer pixel coordinates
- No need to round floats to keep pixels aligned!
- Support for sprites, sprite sheets and animations
- A super simple hierarchy system
- Web and desktop support out of the box - it even runs in Safari on iOS!
- Integer pixel coordinates - no need to round floats to keep pixels aligned!
- Support for sprites, sprite sheets and animations.
- A super simple hierarchy system.
- A custom, scaled, pixel-perfect renderer with three camera modes: fixed width,
fixed height, and letter-boxed
- An [LDtk](https://ldtk.io) map loading plugin
- Pixel-perfect collision detection
- Support for post-processing effects using custom shaders or the built-in CRT filter
- Support for custom pixel aspect ratios
fixed height, and letter-boxed.
- An [LDtk](https://ldtk.io) map loading plugin.
- Pixel-perfect collision detection.
- Support for post-processing effects using custom shaders or the built-in CRT filter.
- Support for custom pixel aspect ratios.

_Discussions: [GitHub](https://github.com/katharostech/bevy_retro/discussions)_
Feel free to discuss the project and provide feedback
[on GitHub](https://github.com/katharostech/bevy_retro/discussions).

[bevy_retro]: https://github.com/katharostech/bevy_retro
[Bevy]: https://bevyengine.org
@@ -1329,6 +1307,8 @@ _RAUI + Tetra TODO app demo_
Interface crate that is based on declarative mode UI composition similar to
React.js and UE4 Slate system.

This month's updates:

- Advanced navigation system mainly for the use in [Oxygengine][oxygengine-git]
game engine.
- [Tesselation renderer][raui-tesselation] module to allow buildings
@@ -1351,6 +1331,8 @@ _Code example of usage of this library._
[egui-macroquad] is a small library to use [egui][egui-git] inside of
[macroquad][macroquad-git]. It consists only of two functions.

Used in [Portal Explorer][portal-explorer], see the section above.

[egui-macroquad]: https://github.com/optozorax/egui-macroquad
[macroquad-git]: https://github.com/not-fl3/macroquad
[egui-git]: https://github.com/emilk/egui
@@ -1430,8 +1412,8 @@ _Discussions: [/r/rust_gamedev][Bitmapflow-Reddit]_

[Bitmapflow]: https://github.com/Bauxitedev/bitmapflow
[Bitmapflow-GitHub]: https://github.com/Bauxitedev/bitmapflow
[Bitmapflow-Youtube]: https://www.youtube.com/watch?v=rC359dDAMiI
[Bitmapflow-Reddit]: https://www.reddit.com/r/rust_gamedev/comments/mjw90q/introducing_bitmapflow_a_tool_to_generate/
[Bitmapflow-Youtube]: https://youtube.com/watch?v=rC359dDAMiI
[Bitmapflow-Reddit]: https://reddit.com/r/rust_gamedev/comments/mjw90q/introducing_bitmapflow_a_tool
[Bitmapflow-Itch]: https://bauxite.itch.io/bitmapflow
[@bauxitedev]: https://twitter.com/bauxitedev
[inbetweens]: https://en.wikipedia.org/wiki/Inbetweening
@@ -1469,31 +1451,36 @@ code and how you can help!
[graphite-architecture]: https://files.keavon.com/-/CostlyViolentPurplemarten/Architecture_Diagram.png
[graphite-docs]: https://github.com/GraphiteEditor/Graphite/blob/master/docs/index.md

## Popular Workgroup Issues in Github

<!-- Up to 10 links to interesting issues -->

## Meeting Minutes

<!-- Up to 10 most important notes + a link to the full details -->

[See all meeting issues][label_meeting] including full text notes
or [join the next meeting][join].

[label_meeting]: https://github.com/rust-gamedev/wg/issues?q=label%3Ameeting

## Requests for Contribution

<!-- Links to "good first issue"-labels or direct links to specific tasks -->

## Jobs

<!-- An optional section for new jobs related to Rust gamedev -->

## Bonus

<!-- Bonus section to make the newsletter more interesting
and highlight events from the past. -->
- [femtovg is looking for help with the wgpu backend][femtovg-help].
- [Embark's open issues][embark-open-issues] ([embark.rs]).
- [gfx-rs's "contributor-friendly" issues][gfx-issues].
- [wgpu's "help wanted" issues][wgpu-help-wanted].
- [luminance's "low hanging fruit" issues][luminance-fruits].
- [ggez's "good first issue" issues][ggez-issues].
- [Veloren's "beginner" issues][veloren-beginner].
- [Amethyst's "good first issue" issues][amethyst-issues].
- [A/B Street's "good first issue" issues][abstreet-issues].
- [Mun's "good first issue" issues][mun-issues].
- [SIMple Mechanic's good first issues][simm-issues].
- [Bevy's "good first issue" issues][bevy-issues].

[femtovg-help]: https://reddit.com/r/rust/comments/mfuo4m/femtovg_2d_vector_graphics_crate_is_looking_for
[embark.rs]: https://embark.rs
[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open
[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly
[wgpu-help-wanted]: https://github.com/gfx-rs/wgpu-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22
[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22
[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A
[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner
[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue
[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue
[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue

------