diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..f58bad3a2 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,3 @@ +Please, read the [contributing guidelines][contributing] before submitting a PR. + +[contributing]: https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/CONTRIBUTING.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a08f54948..1197b208a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,12 +7,12 @@ jobs: runs-on: ubuntu-latest env: BASE_URL: https://github.com/getzola/zola/releases/download - VERS: v0.10.1 + VERS: v0.12.2 ARCH: x86_64-unknown-linux-gnu # https://github.com/marketplace/actions/github-pages#warning-limitation GITHUB_PAT: ${{ secrets.GITHUB_PAT }} steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Lint uses: avto-dev/markdown-lint@v1 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..f53e401f5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,234 @@ +# Contributing Guide + +## Workflow Overview + +- In the last week of the month, a [coordination issue][coordination] + with an initial outline of this month's news is created by a coordinator. + + News are mostly collected from [/r/rust_gamedev], [@rust_gamedev] on Twitter, + and the "\#showcase-only" [Rust GameDev channel on Discord][gd-discord]. + Feel free to suggest sections if something cool isn't listed. + +- During the following few days, contributors take "🆓 **free**" sections + and submit corresponding PRs. + + Leave a comment like "Taking {section\_name\_1} and {section\_name\_2}" + in the coordination issue to claim free sections you are interested in. + Claimed sections are marked as "🚧 WIP by @nickname" in the plan. + This is done to avoid work duplication. + + You aren't required to be a project's author to write about it. + + Some free sections have a nickname with a question mark in brackets + (like "🆓 **free** (@nickname?)") - + it's just an invitation to write the corresponding section if you want, + but anyone is free to take it. + +- Submitted PRs are reviewed, tweaked if needed, and merged. + + Feel free to help with reviews. + +- After all the contributors' PRs are processed, coordinators + take and write all sections that no one has submitted. + +- In the first week of the next month, the final draft is reviewed and merged. + +- A small PR that adds links to discussions + (see the comment at the bottom of the draft) is made. + +- A draft of the next newsletter is added to the repo. + +## PRs + +- The current draft is `/posts/newsletter-{N}/index.md`, + where `{N}` is this issue's number. + +- Place the sections accordingly to how they're ordered + in the coordination issue. + +- PRs are sent against the `source` branch. + +- Mention the coordination issue in the PR's description to link it all together. + +- Don't send PRs from your main branch, create a unique branch + (named like `n14_zemeroth`, `n12_veloren`, etc) for each PR. + This allows sending multiple simultaneous PRs + and simplifies the creation of the next PRs. + +- Make sure that the "Allow edits from maintainers" box is checked + ([avoid using org accounts][gh-org] if possible) + \- it makes updating/tweaking the PR easier for the coordinators. + +- Don't bother resolving merge conflicts in your PR + as they will likely to re-appear after yet another PR is merged. + It easier for a coordinator to update the PR right before merging it. + +- Don't worry about cleaning up the PR's commit history + \- we're squashing the PR into one commit before the merge anyway. + +[coordination]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination +[@rust_gamedev]: https://twitter.com/rust_gamedev +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[gd-discord]: https://discord.gg/yNtPTb2 +[gh-org]: https://github.com/isaacs/github/issues/1681 + +## Style + +Please, try to maintain a consistent style with the rest of the newsletter. + +- In general, the sections are expected to have this structure: + + ```markdown + ### [Project] + + ![alt image description](image.jpeg) + _image caption_ + + [Project] by [@Author] is an awesome Rust project. + + A paragraph or two with a summary and [useful links][other-link]. + + _Discussions: + [/r/rust](https://reddit.com/r/rust/123456), + [twitter](https://twitter.com/todo/status/123456)_ + + [Project]: https://first.link + [@Author]: https://author.link + [other-link]: https://other.link + ``` + + It was decided to use an image + short TLDR-overview section scheme + because people, in general, don't follow the links in digests. + This way readers should get a general idea of what's going on + just by scrolling through the issue. + + But please don't make the sections too long/detailed, + otherwise, the newsletter as a whole will become too bloated. + It's not a strict limit, but please try to keep the sections under 200 words. + +- Games are quite visual-oriented media + so the default section structure includes one image before the text. + One image is preferred, two images are usually the max. + + Keep the file size in mind: GIFs should be <2MB in size + ([ezgif.com] is a nice online tool for quick editing/optimization), + static images should be optimized too + (prefer jpeg to png for complex screenshots, etc). + + All images should have a short but meaningful and descriptive alt text + (more info about alt text [here](https://moz.com/learn/seo/alt-text) + and [here](https://webaim.org/techniques/alttext/)). + + Image files should be placed in the same folder as the post + and be named using "\-" to split the words, not "\_". + +- Markdown doesn't natively support videos, + so the usual workaround is to include a clickable screenshot of the video: + [example 1](https://rust-gamedev.github.io/posts/newsletter-012/#ochre-4k-intro), + [example 2](https://rust-gamedev.github.io/posts/newsletter-012/#rust-n-games-talk). + +- Contributions should be written clearly and simply so that + they are accessible to readers for whom English is not their first language. + +- Keep in mind that more than half of readers consume the newsletter + using mobile devices. + So try to avoid things that don't work well with small screens: + nested lists, long titles, images with important small details, + code blocks with long lines, etc. + +- Don't use fourth-level headers. + Divide a section into subsections using a `------` line if needed. + +- Avoid using bold, italic, etc rich formatting if possible. + +- Write from a third-person perspective even if you're writing + about your project's updates. + +- Use singular "they" if you're not sure what the person's pronouns are. + +- If the project was already featured in the newsletter, + use a one-sentence description at the beginning of the section + as a reminder for readers + and describe only the updates next. + +- It's ok to add a donation/sponsorship link, + but avoid making it a central point of your section. + +- Discussion links should be added at the end of the (sub)section only if + they already contain some actual interesting discussions. + +[ezgif.com]: https://ezgif.com + +## Formatting + +As with the style, keeping the MD formatting consistent over the newsletter +is important too. +So, please, try to follow the formatting guidelines +but don't worry too much about them: +they are easier to fix for coordinators than issues with the content itself. + +- Some of the basic formatting rules are enforced on CI using [markdownlint]. + + If you're working on your PR locally, consider installing + one of the markdownlint extensions for your editor + ([vscode][vscode-lint], [sublime][sublime-lint], [vim][vim-lint]), + otherwise please check the results of the CI run. + +- Insert line breaks ([softbreak]) at 80 chars. + +- Use [reference-style links][md-reflinks] and group them into blocks + at the end of the (sub)sections. + + URLs in these references block can break the 80 chars rule: + + ```markdown + [Rapier][rapier], a new pure-rust physics engine, + released an [official Bevy plugin][bevy-rapier]. + + [rapier]: https://rapier.rs + [bevy-rapier]: https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine/#reaching-out-to-other-communities-bevy-and-javascript + ``` + +- Use only dashes (`-`) for list items, `**` for bold, and `_` for italic. + +- Don't use double linebreaks and trailing whitespaces. + +- Only use inline code formatting ("\`mycrate\`") for crate names + if this helps to avoid confusion. + +- Don't use GitHub shortcodes (like `:tada:`) - they won't be rendered + by normal MD renderers. Use plain Unicode emojis instead. + +- Consequent list item lines are indented with two spaces. Example: + + ```markdown + - Aaaaaaaa aaaaaaa aaaaaaaaaa (Aaaaaaa) aaaaaaaa aaaa + aaaaaa aaaa. Aaaaaa aaaa aa'a aaaaaaaa aaaaaa aaa aaaaaaa. + aaaaa aaaaa aa aaaaaaaaa, aaaaaaa. + - Aaaaaaaaaaaaa aaaaaaaaaaa aaa aaaaaaa aaaaa. + - Aaaaaaaaaaaaaa aaaaaaa aaaaaaaa AaaAA aaaa aaa aaa'a + aaaa aaaaa aaaaa `aaa_aaaaa` aaaa, aaaa `aaaa_aaaaa_aaa`, + aaaaa. + - Aaaaaaa aaaaa aaaaaa (aaaaaaa aaaaaaa). + ``` + +- Try to strip unneeded parts of URLs. + For example, remove `www.`, `old.`, and description parts of Reddit links: + + - `https://old.reddit.com/r/rust/comments/i7bcwu/introducing_bevy_a_refreshingly_simple_datadriven` + - `https://reddit.com/r/rust/comments/i7bcwu/introducing_bevy` + +- Use a consistent list item termination + (don't mix items ending with ";", ",", ".", etc). + +[markdownlint]: https://github.com/DavidAnson/markdownlint +[vscode-lint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint +[sublime-lint]: https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint +[vim-lint]: https://github.com/fannheyward/coc-markdownlint +[softbreak]: https://spec.commonmark.org/0.29/#soft-line-breaks +[md-reflinks]: https://www.markdownguide.org/basic-syntax/#reference-style-links + +Ping the coordinators in the current coordination issue +or WG's Discord channel if there are any questions. +If something in this guide is unclear file an issue +and we'll try to improve it. diff --git a/README.md b/README.md index 4a584cb84..cb0c14378 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,21 @@ # rust-gamedev.github.io -## Newsletter Creation Workflow - -- At the beginning of the month, a draft of the newsletter is created - from a [template](./newsletter-template.md). - - This should be called `index.md`, and placed in a folder named - `/posts/newsletter-xxx` (where `xxx` is the issue number). -- During the month PRs with the month's news, meeting notes, etc - are reviewed and merged into the draft. - - All images should be placed in the same folder as the post. - - Check the comments in the draft file. -- At the end of the month, the draft is reviewed as a whole - and polished if needed. -- On the first working day of the next month, the final PR - (that removes `draft = true` from the post's front matter and adds the date) - is sent. -- The link to the newsletter is shared on social networks, etc. -- A small PR that adds links to Reddit, Twitter, etc discussions - (see the comment at the bottom of the draft) is made. -- A new draft for the next month is created from the template, goto 1. +## Contributing Guide + +To contribute to the newsletter, please see [CONTRIBUTING]. + +[CONTRIBUTING]: CONTRIBUTING.md + +## Building from Source + +The site is built and deployed automatically from the repo (see .github/workflows/ci.yml). + +To preview/experiment locally: + +1) [Install Zola][zola-get]. +2) Run `zola serve --drafts` and open the link. + +[zola-get]: https://getzola.org/documentation/getting-started/installation ## License diff --git a/config.toml b/config.toml index f46e327c8..f849a592c 100644 --- a/config.toml +++ b/config.toml @@ -4,7 +4,8 @@ base_url = "https://rust-gamedev.github.io/" default_language = "en" compile_sass = true highlight_code = true -generate_rss = true +generate_feed = true +feed_filename = "rss.xml" [extra] date_format = "%F" diff --git a/content/posts/newsletter-001/index.md b/content/posts/newsletter-001/index.md index 7a38816e6..5cc2ae62c 100644 --- a/content/posts/newsletter-001/index.md +++ b/content/posts/newsletter-001/index.md @@ -116,8 +116,7 @@ Also, check out ### Way of Rhea [Trailer][rhea trailer] and [Steam Wishlist][rhea steam] Announced [![Part of the trailer](way-of-rhea.gif)][rhea trailer] - -^ _click on the GIF to see [the full trailer][rhea trailer]_ +_click on the GIF to see [the full trailer][rhea trailer]_ [A new trailer][rhea trailer] and the [Steam wishlist][rhea steam] were published for "Way of Rhea" by [Anthropic Studios]. @@ -522,8 +521,7 @@ by [Michael Fairley] was released: > and make sure to press all the buttons. [![Part of A snake's Tail's trailer](a-snakes-tail.gif)][snake trailer] - -^ _click on the GIF to see [the full release trailer][snake trailer]_ +_click on the GIF to see [the full release trailer][snake trailer]_ A few posts about the game and how it was developed: diff --git a/content/posts/newsletter-003/index.md b/content/posts/newsletter-003/index.md index cd60a7328..a7f0eacf8 100644 --- a/content/posts/newsletter-003/index.md +++ b/content/posts/newsletter-003/index.md @@ -131,12 +131,15 @@ it's pretty active. [veloren-survey]: https://veloren.net/devblog-36/#player-survey [veloren-video]: https://www.youtube.com/watch?v=iwP7SXdWcTg -### [PF Sandbox][pf-sandbox] +### [Canon Collision][canon-collision] ![Exported models with textureas and skeletal animations](pf-sandbox.jpg) -[PF Sandbox][pf-sandbox] by [@rukai] is a platform fighter sandbox featuring: -in game Fighter and Stage Editor, replays, and TAS tools. +[Canon Collision][canon-collision] by [@rukai] is an Undertale + Homestuck +fan-made platform fighter with powerful tools for modding. +It was forked from another project of rukai's +[PF Sandbox](https://github.com/rukai/PF_Sandbox) so he could focus on making +a game rather then an engine. This month, [exporting and hot-reloading assets from blender](https://twitter.com/thisIsRukai/status/1180477120113340417), @@ -145,7 +148,7 @@ This month, and [animations](https://twitter.com/thisIsRukai/status/1188261107124727808) were added to the project. -[pf-sandbox]:https://github.com/rukai/PF_Sandbox +[canon-collision]:https://canoncollision.com [@rukai]: https://twitter.com/thisIsRukai ### [Antorum][antorum] @@ -521,8 +524,7 @@ Also, see this GameDev WG tracker/complaint issue: ### [RLSL][rlsl]: a Rust to SPIR-V Compiler ![RLSL code sample](rlsl-example.png) - -^ _a simple fragment shader that renders a red circle (temporary syntax)_ +_a simple fragment shader that renders a red circle (temporary syntax)_ This month, [@MaikKlein_DEV] gave a talk at [The Khronos Group](https://www.khronos.org)'s meetup in Munich @@ -556,8 +558,7 @@ _Discussions: ### [gfx-rs v0.4][gfx-v0-4] ![sailor screenshot: vector terrain map and some basic UI](sailor.png) - -^ _a screenshot from [Yatekii/sailor] - a wgpu-based sailing navigation application_ +_a screenshot from [Yatekii/sailor] - a wgpu-based sailing navigation application_ [gfx-rs v0.4 was released](https://reddit.com/r/rust/comments/dm89t2/gfxhal_version_04_release): major changes were described in [the last blog post](https://gfx-rs.github.io/2019/10/01/update.html), @@ -683,8 +684,7 @@ _Discussions: ### [cyclone-physics-rs] [![cyclone physics demo](cyclone-physics-demo.gif)][cyclone-video-demo] - -^ _a little demo of "particle" simulation_ +_a little demo of "particle" simulation_ [cyclone-physics-rs] by [@heyrutvik] a new WIP game physics engine based on the ["Game Physics Engine Development" book][cyclone-physics-book]. diff --git a/content/posts/newsletter-004/index.md b/content/posts/newsletter-004/index.md index 165c5d09e..9afc940d1 100644 --- a/content/posts/newsletter-004/index.md +++ b/content/posts/newsletter-004/index.md @@ -201,8 +201,7 @@ about the implementation of a drop table system to handle monster loot. ### [Recall Singularity: November Progress][recall-s-nov-text] [![Demo of the basic ship collision](recall-sing.gif)][recall-s-nov-video] - -^ _Demo of the basic ship collision._ +_Demo of the basic ship collision._ [Tom Leys] is working on a "The Recall Singularity" game about designing autonomous factory ships and stations @@ -778,8 +777,7 @@ and highlight events from the past. --> Just an interesting Rust gamedev link from the past. :) [![Pascal Penguin logo](penguin.png)][penguin-video] - -^ _click to see the [release trailer][penguin-video]_ +_click to see the [release trailer][penguin-video]_ ["Adventures of Pascal Penguin"][penguin-about] by [Matthew Michelotti](http://luduminis.com) diff --git a/content/posts/newsletter-005/index.md b/content/posts/newsletter-005/index.md index 8aad24858..9f5b66ab0 100644 --- a/content/posts/newsletter-005/index.md +++ b/content/posts/newsletter-005/index.md @@ -258,8 +258,7 @@ _Discussions: ### [Garden Devlog: December][garden-dec] [![Playing with dirt](garden.gif)][garden-video] - -^ _new smooth soil editing demo_ +_new smooth soil editing demo_ [Garden][garden] is an upcoming game centered around growing realistic plants. @@ -856,8 +855,7 @@ and highlight events from the past. --> Just an interesting Rust gamedev link from the past. :) [![Modulator video](modulator_youtube.gif)][modulator-video] - -^ _click to see [the tutorial video][modulator-video]_ +_click to see [the tutorial video][modulator-video]_ In the November of 2018, [@AndreaPessino] (Founder/CTO of [Ready At Dawn] Studios) diff --git a/content/posts/newsletter-006/index.md b/content/posts/newsletter-006/index.md index 6b5c60f93..3f887eb4c 100644 --- a/content/posts/newsletter-006/index.md +++ b/content/posts/newsletter-006/index.md @@ -838,8 +838,7 @@ Btw, [@resinten] continues working on a luminance-based game: ### [SPIR-Q][spir-q] v0.4.1 ![Example walking an entry point of a SPIR-V file](spir-q.png) - -^ _Example walking an entry point of a SPIR-V file_ +_Example walking an entry point of a SPIR-V file_ [SPIR-Q][spir-q] is a lightweight [SPIR-V] query library. This month v0.2..v0.4.1 versions were released: diff --git a/content/posts/newsletter-007/index.md b/content/posts/newsletter-007/index.md index 7471619bf..c40e3ce50 100644 --- a/content/posts/newsletter-007/index.md +++ b/content/posts/newsletter-007/index.md @@ -177,8 +177,7 @@ This month an alpha version was published on itch: [check it out here][colony-it ### [Veloren][veloren] ![Rolling mountain landscape](veloren1.png) - -^ _Rolling mountain landscape_ +_Rolling mountain landscape_ [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -215,8 +214,7 @@ Here is the February changelog: ``` [![veloren development](veloren3.gif)](https://youtube.com/watch?v=1ldHQfxCT24) - -^ _1 year of Veloren development. Click for the full video!_ +_1 year of Veloren development. Click for the full video!_ You can read more about some specific topics: @@ -245,8 +243,7 @@ February's full weekly devlogs: "This Week In Veloren...": ### [Oxidator][oxidator] [![Gameplay demo: two giant tank armies clashing](oxidator-play.gif)][oxidator-video-play] - -^ _gameplay demo (35000 units)_ +_gameplay demo (35000 units)_ [Oxidator][oxidator] by [@Ruddle] is a real-time strategy game/engine written with Rust and WebGPU. @@ -273,12 +270,10 @@ Some of the current features: (speed, turn rate, health, etc); [![Unit editor demo: move agent's parts](oxidator-unit-editor.gif)][oxidator-video-unit-editor] - -^ _Demo of the unit editor_ +_Demo of the unit editor_ [![Map editor demo: use pencil tool to instantly create a lake and mountains](oxidator-map-editor.gif)][oxidator-video-map-editor] - -^ _Demo of the map editor_ +_Demo of the map editor_ [oxidator]: https://github.com/Ruddle/oxidator [@Ruddle]: https://github.com/Ruddle @@ -490,8 +485,7 @@ Tetra itself also received two small updates recently: ### [Akigi][akigi] ![High detail terrain chunk with PRR](akigi.png) - -^ _Sampling a heightmap in the vertex shader and also computing the normal, +_Sampling a heightmap in the vertex shader and also computing the normal, tangent and bitangent vectors in the vertex shader._ [Akigi][akigi] is a multiplayer online world where most believe that humans are inferior. @@ -596,8 +590,7 @@ Check them out in the [latest winter devlog][grumpy_visitors]. ### [Make China Great Again][china-great] ![cities, planes and keys](china.png) - -^ _Turn back planes to the port, by clicking right keys to the virus beat._ +_Turn back planes to the port, by clicking right keys to the virus beat._ [Make China Great Again][china-great] ([source][china-great-src]) by [@PsichiX] is a GlobalGameJam game written using [Oxygengine]. @@ -640,8 +633,7 @@ dependency updates, bugfixes and performance optimizations. ### [Recall Singularity: February Progress][recall-s-feb] ![Harvesting and refining some Gold](recall-singularity.png) - -^ _Harvesting and refining some Gold._ +_Harvesting and refining some Gold._ [Tom Leys] is working on a "The Recall Singularity" game about designing autonomous factory ships and stations. @@ -913,8 +905,7 @@ A showcase game is [being developed](https://github.com/lcnr/akari) with crow. ### miniquad: ["Rust 2D Engine 2020 Roadmap"][fedor-road] ![mainloop async/await experiment in macroquad](miniquad-sample.png) - -^ _mainloop async/await experiment in macroquad_ +_mainloop async/await experiment in macroquad_ [miniquad] by [@fedor_games] is a safe cross-platform rendering library focused on portability and low-end platforms support. diff --git a/content/posts/newsletter-008/index.md b/content/posts/newsletter-008/index.md index 0745422eb..e5f576928 100644 --- a/content/posts/newsletter-008/index.md +++ b/content/posts/newsletter-008/index.md @@ -334,8 +334,7 @@ Some of this month's updates: ### [Veloren][veloren] ![LoD](veloren1.png) - -^ _Work on Level of Detail_ +_Work on Level of Detail_ [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -434,8 +433,7 @@ Main updates: ### gfx-rs and wgpu news ![Deeper game](deeper.png) - -^ _[deeper] uses wgpu for rendering_ +_[deeper] uses wgpu for rendering_ [gfx-hal-0.5](https://github.com/gfx-rs/gfx/) was released! Improvements done in March: @@ -519,8 +517,7 @@ Some of this month's updates: ### [Nannou v0.13][nannou-post] ![Daily Sketch 0114 by Mactuitui](nannou.png) - -^ _Daily Sketch 0114 by Mactuitui_ +_Daily Sketch 0114 by Mactuitui_ [Nannou][nannou] is a creative coding framework that aims to make it easy for artists to express themselves with simple, fast, reliable code. diff --git a/content/posts/newsletter-009/index.md b/content/posts/newsletter-009/index.md index f61034973..c535ba2c8 100644 --- a/content/posts/newsletter-009/index.md +++ b/content/posts/newsletter-009/index.md @@ -247,8 +247,7 @@ Follow [@seratonik] on Twitter for updates. ### [Akigi][akigi] ![shadows demo](akigi-shadows.jpeg) - -^ _new shadows_ +_new shadows_ > [Akigi][akigi] is a multiplayer online world where humans > aren't the only intelligent animals. @@ -480,8 +479,7 @@ Here's a roundup of some of them: ### [Veloren][veloren] ![Buildings](veloren1.png) - -^ _Early procedural building generation_ +_Early procedural building generation_ [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -519,8 +517,7 @@ Here is the April changelog: ``` ![Hanging out](veloren2.png) - -^ _Early procedural building generation_ +_Early procedural building generation_ You can read more about some specific topics from April: @@ -635,8 +632,7 @@ explaining why they've chosen Rust for their project's backend. ### [Symmetric Matrices & Triangle Numbers][matrices-post] ![an example of a multi-layered game level](rhea-player-orb.jpeg) - -^ _The pink orb should not collide with the player, +_The pink orb should not collide with the player, but it should collide with the ground._ [Anthropic Studios][anthropic] has [shared a post][matrices-post] @@ -742,8 +738,7 @@ and additional information about contributing are available on the [github repos ### `gfx-rs` and `wgpu` News ![hectic screenshot: graveyard and vampires](hectic.png) - -^ _[hectic-rs] - Rust/wgpu/specs re-write of hectic by [@expenses]_ +_[hectic-rs] - Rust/wgpu/specs re-write of hectic by [@expenses]_ wgpu-0.5 release happened! See the [changelog][wgpu-0-5]. It's based on `gfx-hal-0.5` (which was covered in the [March newsletter][gfx-march]), @@ -888,8 +883,7 @@ in an eternally sprawling office complex. ### [miniquad] ![miniquad logo](miniquad_logo.png) - -^ _`miniquad` project got a logo_ +_`miniquad` project got a logo_ [miniquad] is a safe and cross-platform rendering library focused on portability and low-end platforms support. @@ -1130,8 +1124,7 @@ and highlight events from the past. --> Just an interesting Rust gamedev link from the past. :) ![example](valora-example.jpeg) - -^ _"dead end" by turnage, 2019_ +_"dead end" by turnage, 2019_ A few months ago a generative art library ["valora"][valora-src] was released by [@turnage]. diff --git a/content/posts/newsletter-010/index.md b/content/posts/newsletter-010/index.md index ea24a9848..fd8a4d94d 100644 --- a/content/posts/newsletter-010/index.md +++ b/content/posts/newsletter-010/index.md @@ -64,8 +64,7 @@ If needed, a section can be split into subsections with a "------" delimiter. ### [Veloren][veloren] ![Buildings](veloren1.png) - -^ _The new repo banner_ +_The new repo banner_ [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -80,8 +79,7 @@ account][veloren-opencollective], and you can donate towards our infrastructure costs. GamingOnLinux [wrote an article][gamingonlinux] on Veloren's development. [![0.6 release trailer](veloren_trailer.gif)](https://www.youtube.com/watch?v=kjDFVgWYMd4) - -^ _0.6 release trailer. Click for the full video!_ +_0.6 release trailer. Click for the full video!_ Here is the May changelog: @@ -115,8 +113,7 @@ of 0.7, and what they wanted to achieve: > interact with the game UI to do this. ![Welcome to Veloren](veloren2.png) - -^ _Welcome to Veloren! From the 0.6 release party_ +_Welcome to Veloren! From the 0.6 release party_ You can read more about some specific topics from May: @@ -216,8 +213,7 @@ Some of the updates: ### [Sandbox] [![Sandbox gameplay demo](sandbox.jpeg)](https://streamable.com/0bhbol#) - -^ _click to see a gameplay demo_ +_click to see a gameplay demo_ [Sandbox] is a falling sand game by JMS55 that provides a variety of fun particle types to place, and then you get to watch the resulting interactions! @@ -324,8 +320,7 @@ Follow [@seratonik] on Twitter for updates. ### [Crate Before Attack][cratebeforeattack-site] [![screenshot: decision tree and goal distance map in the background](crate_before_attack.png)][cratebeforeattack-site] - -^ _Decision tree and goal distance map in the background_ +_Decision tree and goal distance map in the background_ [Crate Before Attack][cratebeforeattack-site] by [koalefant (@CrateAttack)][@CrateAttack] is a realtime/turn-based multiplayer game where frogs combat their friends @@ -391,8 +386,7 @@ the first time. Be sure to check out the [Github repo][digescape-github]. ### [Akigi][akigi] ![cat model](akigi1.png) - -^ _Completed cat model with rigging_ +_Completed cat model with rigging_ > [Akigi][akigi] is a magical multiplayer online world where humans aren't the > only intelligent animals. Akigi is a solo project, and the developer hopes to @@ -426,8 +420,7 @@ Full devlogs: ### Nox Futura: Rust Edition ![worldgen menu](nox-f.png) - -^ _Worldgen menu_ +_Worldgen menu_ [Herbert Wolverson][thebracket] (the author of [bracket-lib] and [the Rust Roguelike Tutorial][rl-book]) @@ -646,8 +639,7 @@ _Discussions: ### NodeFX [![NodeFX](nodefx.png)][NodeFXTweet] - -^ _Click the image to see the animated version_ +_Click the image to see the animated version_ Project "NodeFX" by [Christian Vallentin (@MrVallentin)][@MrVallentin] is an unnamed node-based tool for creating GLSL shaders in real-time, diff --git a/content/posts/newsletter-011/blub-fluid.gif b/content/posts/newsletter-011/blub-fluid.gif new file mode 100644 index 000000000..9aa2871b1 Binary files /dev/null and b/content/posts/newsletter-011/blub-fluid.gif differ diff --git a/content/posts/newsletter-011/boundless.jpeg b/content/posts/newsletter-011/boundless.jpeg new file mode 100644 index 000000000..67da631e0 Binary files /dev/null and b/content/posts/newsletter-011/boundless.jpeg differ diff --git a/content/posts/newsletter-011/crate_before_attack.gif b/content/posts/newsletter-011/crate_before_attack.gif new file mode 100644 index 000000000..734a70cbd Binary files /dev/null and b/content/posts/newsletter-011/crate_before_attack.gif differ diff --git a/content/posts/newsletter-011/doom-fire.gif b/content/posts/newsletter-011/doom-fire.gif new file mode 100644 index 000000000..e682ceae6 Binary files /dev/null and b/content/posts/newsletter-011/doom-fire.gif differ diff --git a/content/posts/newsletter-011/ecs-talk.png b/content/posts/newsletter-011/ecs-talk.png new file mode 100644 index 000000000..799d22af9 Binary files /dev/null and b/content/posts/newsletter-011/ecs-talk.png differ diff --git a/content/posts/newsletter-011/garden.jpeg b/content/posts/newsletter-011/garden.jpeg new file mode 100644 index 000000000..b884b2c7a Binary files /dev/null and b/content/posts/newsletter-011/garden.jpeg differ diff --git a/content/posts/newsletter-011/glisp-logo.png b/content/posts/newsletter-011/glisp-logo.png new file mode 100644 index 000000000..776c8d9c5 Binary files /dev/null and b/content/posts/newsletter-011/glisp-logo.png differ diff --git a/content/posts/newsletter-011/goeld.jpg b/content/posts/newsletter-011/goeld.jpg new file mode 100644 index 000000000..991568629 Binary files /dev/null and b/content/posts/newsletter-011/goeld.jpg differ diff --git a/content/posts/newsletter-011/index.md b/content/posts/newsletter-011/index.md index c94618fed..49c70ba9d 100644 --- a/content/posts/newsletter-011/index.md +++ b/content/posts/newsletter-011/index.md @@ -1,8 +1,7 @@ +++ title = "This Month in Rust GameDev #11 - June 2020" -date = 2020-07-01 +date = 2020-07-07 transparent = true -draft = true +++ Welcome to the eleventh issue of the Rust GameDev Workgroup’s @@ -27,13 +26,13 @@ Feel free to send PRs about your own projects! Table of contents: +- [Legion Game Jam](#legion-game-jam) - [Game Updates](#game-updates) - [Learning Material Updates](#learning-material-updates) - [Library & Tooling Updates](#library-tooling-updates) - [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) - [Meeting Minutes](#meeting-minutes) - [Requests for Contribution](#requests-for-contribution) -- [Jobs](#jobs) - [Bonus](#bonus) +## [Legion Game Jam][legion-jam] + +[![The Roman Empire at its greatest extent](roman-empire.jpeg)][roman-empire-wiki] + +The "Legion" game jam by [Laticoda] is about +[the Roman Empire][roman-empire-wiki] for the background theme +and ECS paradigm for the technical side. +The conditions are: + +- Open-source & Rust only. +- Projects should use some ECS library + (you can choose [Legion][legion] if you don't have one). +- Team working and recycling old assets are allowed. + +> Submissions open to August 1st 2020. +> +> It can be RPG, strategic, arcade or else; multi or solo. What you want. +> Just try to include a little bit of history and culture taste. +> Don't be afraid, it is not ranked. + +Also, participants are encouraged to +[document the development process at the event's forum][legion-jam-forum]. + +[legion-jam]: https://itch.io/jam/legion-jam-rustlang +[Laticoda]: https://itch.io/profile/laticoda +[roman-empire-wiki]: https://wikipedia.org/wiki/Roman_Empire +[legion]: https://github.com/TomGillen/legion +[legion-jam-forum]: https://itch.io/jam/legion-jam-rustlang/community + ## Game Updates ### [Way of Rhea][rhea-site] [![Way of Rhea Trailer](way-of-rhea.jpeg)][rhea-trailer] - -^ _Click to see the latest version of the game's trailer_ +_Click to see the latest version of the game's trailer_ [Way of Rhea][rhea-site] ([steam][rhea-steam]) is an upcoming puzzle platformer that takes place in a world where you can only interact with objects that match your current color. -It's being build in a custom engine, and custom scripting language both written +It's being built in a custom engine, and custom scripting language both written in Rust by [Mason Remaley][@masonremaley]. This month's updates: - A demo was released as part of the @@ -102,8 +129,7 @@ or [subscribe to its newsletter][rhea-newsletter]. ### [A/B Street][abstreet] - Adjust Traffic Patterns in Real Cities ![Measuring the effects of changes](abstreet-evaluating-impacts.gif) - -^ _Measuring the effects of some changes_ +_Measuring the effects of some changes_ [A/B Street][abstreet] is a traffic simulation game exploring how small changes to roads affect cyclists, transit users, pedestrians, and drivers. @@ -131,11 +157,61 @@ A/B Street uses a [custom GUI library][ezgui], leveraging `glium`, `usvg`, and [abstreet-reddit]: https://old.reddit.com/r/Seattle/comments/hdtucd/ab_street_think_you_can_fix_seattles_traffic/ [abstreet-stranger]: https://www.thestranger.com/slog/2020/06/29/43999454/ab-streets-game-lets-you-create-the-seattle-street-grid-of-your-dreams +### [Crate Before Attack][cba-site] + +[![In-game visual scripting prototype](crate_before_attack.gif)][cba-youtube-scripting] +_In-game visual scripting prototype_ + +[Crate Before Attack][cba-site] by [koalefant (@CrateAttack)][@CrateAttack] +is a skill-based grappling hook multiplayer game where frogs combat their friends +while navigating the landscape with their sticky tongues. + +A summary of recent changes: + +- Visuals: added two new artist-painted levels: + [Space][cba-youtube-space] + and [Dinosaurs][cba-youtube-dinosaurs]. +- Gameplay: [AI can now play all game modes][cba-youtube-ai], + added Quick Game option, +- In-game [visual scripting prototype][cba-youtube-scripting]. +- Physics tweaks and [improved terrain normal sampling][cba-youtube-normals] +- Multiplayer: added in-game chat, private matches with secret links, + improved game setup UI. Numerous bugfixes and tweaks +- [Playable Browser build][cba-play]. + +More details in [June Update DevLog-entry][cba-june-update] +and on [the YouTube channel][cba-youtube]. + +[cba-site]: https://cratebeforeattack.com +[cba-june-update]: https://cratebeforeattack.com/posts/20200630-june-update/ +[cba-play]: https://cratebeforeattack.com/play +[cba-youtube]: https://youtube.com/channel/UC_xMilPTLuuE5iLs1Ml9zow +[cba-youtube-ai]: https://youtu.be/IUBZgusI7aI +[cba-youtube-space]: https://youtu.be/IOmD1LRJ6NA +[cba-youtube-dinosaurs]: https://youtu.be/UgIBNolI7Wo +[cba-youtube-scripting]: https://youtu.be/LLAc9_cOR9o +[cba-youtube-normals]: https://youtu.be/r5BAe03MRZo +[@CrateAttack]: https://twitter.com/CrateAttack + +### [Garden]: June Devlog + +![screenshot: concrete & trees](garden.jpeg) + +[Garden][garden] is an upcoming game centered around growing realistic plants. +Some of the updates from [the June devlog][garden-devlog]: + +- Soil collision detection & changes to the soil column generation. +- Plant sim & terrain updates happen at different times & separately. +- Proper Global Illumination research. +- Automatic in-game texture reloading. + +[garden]: https://epcc.itch.io/garden +[garden-devlog]: https://cyberplant.xyz/posts/june + ### [Veloren][veloren] ![Animation improvements](veloren-wolf.gif) - -^ _Animation improvements_ +_Animation improvements_ [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -202,6 +278,43 @@ Also, check out [a talk about open source and Veloren][veloren-talk]: [veloren-docs]: https://docs.veloren.net/veloren_voxygen/index.html [veloren-talk]: https://youtube.com/watch?v=aS26sqT09Pw +### [Zero to Game][zerotoga.me] + +![ships with greater thrust explode](zerotogame-destruction.gif) +_The initial destruction prototype applied across different thrust levels_ + +[Zero to Game][zerotoga.me] is a project that documents +the creation of an independent space game from zero. + +> My plan for this website is to narrate my independent development +> of a computer game in the Rust programming language. +> I've never done this before, and so I hope to be able to show you +> the progression right from zero all the way up to a game. +> +> - Zero game programming experience. +> - Zero experience in the Rust programming language. +> - Zero experience making assets, images, sounds, models, etcetera. + +Currently published posts: + +- [\#1 "Finding Zero"](https://zerotoga.me/dev/findingzero) + \- where the game development journey is beginning. +- [\#2 "Inspiring Design"](https://zerotoga.me/dev/inspiringdesign) + \- how Factorio, Screeps, and Space Station 13 are inspiring the game's design. +- [\#3 "Picking Technology"](https://zerotoga.me/dev/pickingtechnology) + \- researching a technology path for the game project to start out on. +- [\#4 "Leading Design Challenges"](https://zerotoga.me/dev/leadingdesignchallenges) + \- the spacetime issues with combining gameplay inside and outside of spaceships. +- [\#5 "Fast Spaceship Physics"](https://zerotoga.me/dev/fastspaceshipphysics) + \- prototyping a spaceship physics simulation aimed at speed. +- [\#6 "Physical Destruction"](https://zerotoga.me/dev/physicaldestruction) + \- the structure and implementation of a spaceship destruction prototype. +- [\#7 "Rendering in Rust"](https://zerotoga.me/dev/renderinginrust) + \- working through from tutorial code to meet the needs + of the game's first Rust scene render. + +[zerotoga.me]: https://zerotoga.me + ### [Pont][pont-online] ![Screenshot of the Pont board game](pont_screenshot.png) @@ -266,8 +379,7 @@ Web, Mac, Linux, Windows (untested) & possible even iOS & Android. ### [Animal Chess][AnimalChess] ![Part of the game map](animal-chess.jpeg) - -^ _Part of the game map_ +_Part of the game map_ [Animal Fight Chess][AnimalChess] (斗兽棋, "Doe Show Chee") by [@netcan] is a Rust implementation of a popular Chinese game. @@ -293,6 +405,17 @@ a python module to use AlphaZero algorithm for training. [animal-chess-wiki]: https://en.wikipedia.org/wiki/Jungle_(board_game) [animal-chess-pieces]: http://ancientchess.com/graphics-rules/dou_shou_qi_jungle_game-pieces-values.jpg +### [rs-type] + +![screenshot: planets and words](rs-type.png) + +[rs-type] is a WIP typing game +inspired by [zty.pe](https://zty.pe/). +It can load [KTouch courses](https://github.com/KDE/ktouch/tree/master/data/courses) +and also has a built-in basic vector drawing tool for painting backgrounds. + +[rs-type]: https://github.com/akiross/rs-type + ### [Guacamole Runner][guacamole] ![gif](guacamole.gif) @@ -318,17 +441,29 @@ they plant flowers which gives them points. are represented on your keyboard lights, instead of a computer screen. [TanTan] released a [video][wooting_snake-video] -documenting the process making this project. +documenting the process of making this project. [wooting_snake-git]: https://github.com/TanTanDev/wooting_snake [wooting_snake-video]: https://youtu.be/OhhscXz-60g [TanTan]: https://twitter.com/Tantan22430802 +### [boundless] + +![terrain, bg trees, and a character](boundless.jpeg) + +[Anthony Brigante][abrigante] started working on a 2D sandbox game. +Two devlogs were released this month: + +- ["Hello, Rust"](https://abrigante.com/post/2020/06/04/Hello-Rust.html) +- ["From Sandbox to Production - Rendering"](https://abrigante.com/post/2020/06/08/From-Sandbox-To-Production-Rendering.html) + +[boundless]: https://github.com/abrigante1/boundless/tree/production +[abrigante]: https://abrigante.com/ + ### [Weegames][weegames-itch] [![Weegames](weegames.jpg)][weegames-video] - -^ _Click to see [a demo video][weegames-video]_ +_Click to see [a demo video][weegames-video]_ [Weegames][weegames-itch] is a fast-paced minigame collection. There are 23 odd games all made using free images and sounds. @@ -340,8 +475,87 @@ The more minigames you beat the faster they get. [weegames-repository]: https://github.com/yeahross0/weegames [weegames-video]: https://youtube.com/watch?v=A_GqhZ_7EIw +### [blub] + +![Fluid demo](blub-fluid.gif) + +[blub] is a WIP 3D fluid simulation playground build with wgpu-rs and imgui-rs. +It focuses primarily on hybrid approaches lagrangian/eularian approaches +(PIC/FLIP/APIC..). Check the project's README for more details. + +[blub]: https://github.com/wumpf/blub + ## Learning Material Updates +### [Hypervis: 4D Physics Visualization][ldn-talk] + +[![Screenshot of the talk](ldn-4d-talk.jpeg)][ldn-talk] + +This month, [Tyler Zhang gave a talk][ldn-talk] at +London Virtual Talks about the theory and implementation +of 4D physics visualization. +The demo's source code [could be found here][hypervis]. + +[hypervis]: https://github.com/t-veor/hypervis +[ldn-talk]: https://youtube.com/watch?v=_22oxXEX_xc?t=709 + +### [Boids in Rust][rboids-post-1] + +[![Boids demo](rboids-video.jpeg)][rboids-video] +_Click to watch [the video demo][rboids-video]_ + +[@twitu] has published a three-part blog series +about simulating a group of virtual agents (boids) +that will swim around an enclosed space behaving like a school of fish. + +> This is a beautiful application of procedural graphics generation, +> where simple rules create complex patterns. +> It's almost entirely inspired by Sebastian Lague's +> [Coding Adventure with boids][Sebastian-boids]. + +1) [A fistful of boids][rboids-post-1] + \- Setting up the scene and basic animation +2) [For a few boids more][rboids-post-2] + \- Generating boids and obstacle avoidance +3) [The school, the boid and the Rusty][rboids-post-3] + \- Simulating a flock, parallelism and benchmarking performance + +[The source code with tagged stages is available here][rboids]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/gsldbi/3d_boids)_ + +[rboids]: https://github.com/twitu/rboids +[@twitu]: https://github.com/twitu +[rboids-video]: https://drive.google.com/file/d/1ri4x-jCX8SA9oX8OqDIKtXhYIrEKlGjO/view +[rboids-post-1]: https://blog.bitsacm.in/a-fistful-of-boids +[rboids-post-2]: https://blog.bitsacm.in/for-a-few-boids-more +[rboids-post-3]: https://blog.bitsacm.in/the-school-the-boid-and-the-rusty +[Sebastian-boids]: https://youtube.com/watch?v=bqtqltqcQhw + +### [DOOM Fire][doomfire] + +![The fire effect itself](doom-fire.gif) + +[doomfire] by [@r-marques] is Rust implementations of the DOOM fire effect +(based on [Fabien Sanglard's blog post][fabien-fire]) +using different 2d graphics libraries: +[minifb](https://github.com/emoon/rust_minifb), +[pixels](https://github.com/parasyte/pixels), +[sdl2](https://github.com/Rust-SDL2/rust-sdl2), +[wasm-bindgen](https://github.com/rustwasm/wasm-bindgen) +\+ [Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API). + +> This could be helpful for someone new to rust and trying +> to get into game development and looking for the right libraries to use. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/gvcj6d/doom_fire_implemented_in_rust)_ + +[doomfire]: https://github.com/r-marques/doomfire +[@r-marques]: https://github.com/r-marques +[fabien-fire]: https://fabiensanglard.net/doom_fire_psx + ## Library & Tooling Updates ### [rust-psp] @@ -355,10 +569,10 @@ This project is a port and improvement of the unofficial C/C++ PSPSDK from nightly and a cargo subcommand. The psp crate provides a `psp::sys` submodule that houses the entire Sony PSP -API. We are working to have theseinterfaces merged into the libc crate. -The PSP unfortunately uses non-standard dynamic linking, +API. The authors are working to have these interfaces merged into the libc crate. +The PSP, unfortunately, uses non-standard dynamic linking, (and some libraries are statically linked!), so function definitions -marked extern are not enough. Eventually we will wrap this sys lib with a more +marked extern are not enough. Eventually, this sys lib will be wrapped with a more rust-friendly library. Rather than patching LLVM or rustc, the rust-psp team has also merged a @@ -380,16 +594,42 @@ channel in the [PSP Homebrew discord server](https://discord.gg/WY8XhDG). [rust-psp]: https://github.com/overdrivenpotato/rust-psp +### [glam] + +[glam] is a simple and fast linear algebra crate for games and graphics. + +This month [glam 0.9] was published to crates.io. This update is a breaking +change from 0.8. + +In 0.9 the `Vec3` type was changed from being a 128 byte SIMD vector type to a +tuple of three floats. This changes the size of `Vec3` from 16 bytes to 12 bytes +and the alignment from 16 bytes to 4 bytes. This might not affect all users but +if `Vec3` was used in a context where the size or alignment mattered, such as in +FFI or as input to shaders, this could cause breakage. + +The SIMD parts of `Vec3` were moved to a new type, `Vec3A` (`A` for Aligned) +which is 16 byte aligned and thus 16 bytes in size. The `Vec3A` type is still +there for users who want the performance benefits of the SIMD implementation. + +The motivation for this change was that it is potentially surprising and +confusing for new users that the `Vec3` type was not 12 bytes. Also, it's common +that users needed a `Vec3` that was just 12 bytes. + +While glam is reasonably stable it has not yet reached a 1.0 release so it +seemed like now is the time to address such issues in the API. + +[glam]: https://github.com/bitshifter/glam-rs +[glam 0.9]: https://github.com/bitshifter/glam-rs/blob/master/CHANGELOG.md#090---2020-06-28 + ### [This Month in Mun][mun-june] ![Language Server Diagnostics in action](mun-languageserver.gif) - -^ _Mun language server diagnostics in action_ +_Mun language server diagnostics in action_ [Mun] is a scripting language for gamedev focused on quick iteration times that is written in Rust. -After the dust of the [Mun v0.2 release][mun-release] settled, this month focus +After the dust of the [Mun v0.2 release][mun-release] settled, this month's focus has been on fixing several issues found by community members, improving the overall quality of the code base and working towards the next release: Mun v0.3. @@ -404,6 +644,41 @@ Their [June updates][mun-june] include: [mun-release]: https://mun-lang.org/blog/2020/05/16/release-mun-v0-2-0 [mun-june]: https://mun-lang.org/blog/2020/06/30/this-month-june +### [GameLisp] + +![logo](glisp-logo.png) + +[GameLisp] (glisp) is a scripting language built for and in Rust and utilizes +syntax from the LISP family of programming languages. It provides a fast and +efficient garbage collector that runs every frame instead of freezing a thread. + +GameLisp also provides [a playground][glisp-playground] to experiment with +different projects. A reference guide is also [available][glisp-reference] as +well as [API documentation][glisp-docsrs] for integration into Rust. + +The crate has had its [initial release][glisp-cratesio], a roadmap and ways +to contribute are available on GameLisp's [Github Respository][glisp-github]. + +[gamelisp]: https://gamelisp.rs/ +[glisp-playground]: https://gamelisp.rs/playground/ +[glisp-reference]: https://gamelisp.rs/reference/ +[glisp-docsrs]: https://docs.rs/glsp/0.1.0/glsp/ +[glisp-cratesio]: https://crates.io/crates/glsp/ +[glisp-github]: https://github.com/fleabitdev/glsp/ + +### [safe_arch] v0.5 + +[safe_arch] is a crate by [@lokathor] that safely exposes +CPU arch intrinsics via `#[cfg()]`. +This month v0.4 and v0.5 versions were released. +The main improvements are: + +- 256 bit supports +- Almost all the API was reworked for better naming consistency + +[safe_arch]: https://github.com/Lokathor/safe_arch +[@lokathor]: https://twitter.com/lokathor + ### [yaks] [yaks] is a minimalistic framework for automatic multithreading @@ -432,6 +707,65 @@ written with the framework on platforms without threading - notably, web. [`hecs`]: https://crates.io/crates/hecs [Rayon]: https://crates.io/crates/rayon +### [macroquad] + +[macroquad] by [@fedor_games] is cross-platform +(Windows/Linux/macOS/Android/WASM) game framework +build on top of [miniquad]. + +The project now has [a Discord community server](https://discord.gg/WfEp6ut) +([Matrix bridge](https://matrix.to/#/#quad-general:matrix.org)) +with channels for all the quad-family projects: +miniquad, macroquad, good-web-game, and nanoserde. + +Also, two new examples came from the awesome macroquad community: + +- "snake" - try it [in the browser][mq-snake-web] ([source][mq-snake]) + + [![snake demo](macroquad_snake.gif)][mq-snake-web] + +- "asteroids" - try it [in the browser][mq-asteroids-web] ([source][mq-asteroids]) + + [![asteroids](macroquad_asteroids.gif)][mq-asteroids-web] + +------ + +megaui is macroquad's imgui-like UI system. +Recently, megaui got decent input widgets: input fields, editboxes, and sliders. +All of them support copy-pasting back and forth from the browser. +Check out [the web demo](https://not-fl3.github.io/miniquad-samples/ui.html) +([source](https://github.com/not-fl3/macroquad/blob/master/examples/ui.rs)): + +![ui](macroquad_ui.gif) + +------ + +[nanoserde] by [@fedor_games] is a fork of makepad-tinyserde +with syn/quote/proc_macro2 dependencies removed. +It attempts to solve a serde's problems of long clean compilation time, +increased incremental build time, and build artifacts size. +nanoserde may be useful when the whole game has less than a minute +clean build time and spending ~40s on serde is unreasonable. + +```text +> cargo tree +nanoserde v0.1.0 (/../nanoserde) +└── nanoserde-derive v0.1.0 (/../nanoserde/derive) +``` + +Some benchmarks and tiled map deserializing example +[could be found here][nanoserde-bench]. + +[macroquad]: https://github.com/not-fl3/macroquad +[miniquad]: https://github.com/not-fl3/miniquad +[mq-snake]: https://github.com/not-fl3/macroquad/blob/master/examples/snake.rs +[mq-asteroids]: https://github.com/not-fl3/macroquad/blob/master/examples/asteroids.rs +[mq-snake-web]: https://not-fl3.github.io/miniquad-samples/snake.html +[mq-asteroids-web]: https://not-fl3.github.io/miniquad-samples/asteroids.html +[nanoserde]: https://github.com/not-fl3/nanoserde/ +[@fedor_games]: https://twitter.com/fedor_games +[nanoserde-bench]: https://github.com/not-fl3/nanoserde-bench + ### [Tetra 0.4][tetra-040] [Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month, @@ -450,6 +784,52 @@ still a work in progress, so contributions are welcomed! [tetra-040]: https://twitter.com/17cupsofcoffee/status/1275778769077317637 [tetra-dist]: https://tetra.seventeencups.net/distributing/ +### [NodeFX][@MrVallentin] + +[![NodeFX](nodefx.png)][nodefx-sdf2] + +Project "NodeFX" by [Christian Vallentin (@MrVallentin)][@MrVallentin] +is an unnamed node-based tool for creating GLSL shaders in real-time, +entirely written in Rust. + +This month added support for both 2D and 3D SDF nodes. The above screenshot is +a meta example of creating a node using some of the 2D SDF primitives and +operations. +[An example of some 3D SDFs can be found on Twitter.][nodefx-sdf3] + +Next month is all about adding more UI, to make the application more +user-friendly and fully-fledged. After UI has been added, there is a planned +release of the application. +More information can be found on [Twitter][@MrVallentin]. + +[@MrVallentin]: https://twitter.com/MrVallentin +[nodefx-sdf2]: https://twitter.com/MrVallentin/status/1276609598699581442 +[nodefx-sdf3]: https://twitter.com/MrVallentin/status/1276961197645008896 + +### [Göld][goeld] + +![Chumtoad](goeld.jpg) + +[Göld][goeld] is a WIP game engine for hacking together 3D games using old tech. +It uses wgpu-rs and is based on the simple mental model of PyGame or Löve, +but for Goldsrc/Quake-era tech. + +The ultimate goal of the project is to have a simple engine that can do +basically everything that many simplistic 3D games will need, +without making an attempt at being too general. + +Current features: + +- Quake 2 maps loading (although not Quake/Goldsrc maps yet) + and rendering with proper BSP culling and frustum culling. +- Loading and rendering of HL1 models. +- Simple dynamic lighting system. + +[goeld]: https://github.com/Vurich/goeld + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/gwqbxl/been_working_on_a_webgpurust_reimplementation)_ + ### [Arsenal Game Engine][arsenal] [Arsenal] is the concept for a 2D and 3D game engine that is fully integrated @@ -500,10 +880,42 @@ The goal of the project is to be able to compose images without using the mouse. [vimnail-git]: https://github.com/TanTanDev/vimnail [vimnail-video]: https://youtu.be/2cSY43OcuZc +### [GC NES Emulator][gc-nes] + +[![screenshot of the web version: main area, scaling settings and drag-n-drop area](nes-emu.png)][gc-nes] + +This month [Garett Cooper][garettcooper.com] released [GC NES Emulator][gc-nes] +that allows you to play classic Nintendo Entertainment System games in the browser. + +> The core of the GC NES Emulator is implemented in the Rust programming language, +> which supports Web Assembly as a compilation target. +> With a WASM version of the emulator, I've written a javascript wrapper +> that takes the frame rendered with the Rust code +> and displays it on an HTML 5 canvas. +> At present, this is done completely synchronously, +> though I would like to move it into a worker at some point in the future + +[The source code is available here][gc-nes-src]. + +[gc-nes]: https://garettcooper.com/#/nes-emulator +[gc-nes-src]: https://github.com/GarettCooper/gc_nes_emulator +[garettcooper.com]: https://garettcooper.com/ + ## Popular Workgroup Issues in Github +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#51 "Using wasm-bindgen for games"](https://github.com/rust-gamedev/wg/issues/51); + - [#75 "Standardised API for sharing thread pools"](https://github.com/rust-gamedev/wg/issues/75); + - [#77 "Can we contribute to OpenXR to get Keyboard/Mouse support to be official?"](https://github.com/rust-gamedev/wg/issues/77); +- [rust-gamedev/rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): + - [#30 "CI: Add markdownlint checks"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/30); +- [rust-gamedev/arewegameyet](https://github.com/rust-gamedev/arewegameyet): + - [#95 "How do we remove crates?"](https://github.com/rust-gamedev/arewegameyet/issues/95); + - [#261 "Make .rs domain primary?"](https://github.com/rust-gamedev/arewegameyet/issues/261); + - [#320 "A different section for gamejam games?"](https://github.com/rust-gamedev/arewegameyet/issues/320); + ## Meeting Minutes @@ -517,6 +929,7 @@ or [join the next meeting][join]. +- [gl-rs is seeking new maintainers](https://github.com/brendanzab/gl-rs/issues/524); - [Embark's open issues][embark-open-issues] ([embark.rs]); - [winit's "Good first issue" and “help wanted” issues][winit-issues]; - [gfx-rs's "contributor-friendly" issues][gfx-issues]; @@ -540,10 +953,6 @@ or [join the next meeting][join]. [abstreet-issues]: https://github.com/dabreegster/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 -## Jobs - - - ## Bonus Just an interesting Rust gamedev link from the past. :) +[![a screenshot of the first slide](ecs-talk.png)][ecs-talk-video] + +During RustConf 2018, Catherine West gave a keynote talk +"Using Rust For Game Development" that introduced a lot of people +to the concept of ECS and is now considered a classic. +You can [watch the recording here][ecs-talk-video] ([slides][ecs-talk-slides]). + +A few months later [an extended text version was released][ecs-talk-post]. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/9dwqa4/rustconf_2018_closing_keynote), +[/r/programming](https://reddit.com/r/programming/comments/9dwq73/rustconf_2018_closing_keynote)_ + +[ecs-talk-video]: https://youtube.com/watch?v=aKLntZcp27M +[ecs-talk-post]: https://kyren.github.io/2018/09/14/rustconf-talk.html +[ecs-talk-slides]: https://kyren.github.io/rustconf_2018_slides/index.html + ------ That's all news for today, thanks for reading! @@ -558,12 +984,9 @@ That's all news for today, thanks for reading! Subscribe to [@rust_gamedev on Twitter][@rust_gamedev] or [/r/rust_gamedev subreddit][/r/rust_gamedev] if you want to receive fresh news! - +[/r/rust](https://reddit.com/r/rust/comments/hn0qso/this_month_in_rust_gamedev_11_june_2020), +[twitter](https://twitter.com/rust_gamedev/status/1280577098369949696). [/r/rust_gamedev]: https://reddit.com/r/rust_gamedev [@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/posts/newsletter-011/ldn-4d-talk.jpeg b/content/posts/newsletter-011/ldn-4d-talk.jpeg new file mode 100644 index 000000000..b158baf0e Binary files /dev/null and b/content/posts/newsletter-011/ldn-4d-talk.jpeg differ diff --git a/content/posts/newsletter-011/macroquad_asteroids.gif b/content/posts/newsletter-011/macroquad_asteroids.gif new file mode 100644 index 000000000..7cc9f8188 Binary files /dev/null and b/content/posts/newsletter-011/macroquad_asteroids.gif differ diff --git a/content/posts/newsletter-011/macroquad_snake.gif b/content/posts/newsletter-011/macroquad_snake.gif new file mode 100644 index 000000000..d28197d10 Binary files /dev/null and b/content/posts/newsletter-011/macroquad_snake.gif differ diff --git a/content/posts/newsletter-011/macroquad_ui.gif b/content/posts/newsletter-011/macroquad_ui.gif new file mode 100644 index 000000000..fb5a1f345 Binary files /dev/null and b/content/posts/newsletter-011/macroquad_ui.gif differ diff --git a/content/posts/newsletter-011/nes-emu.png b/content/posts/newsletter-011/nes-emu.png new file mode 100644 index 000000000..896aefe85 Binary files /dev/null and b/content/posts/newsletter-011/nes-emu.png differ diff --git a/content/posts/newsletter-011/nodefx.png b/content/posts/newsletter-011/nodefx.png new file mode 100644 index 000000000..77e5c205e Binary files /dev/null and b/content/posts/newsletter-011/nodefx.png differ diff --git a/content/posts/newsletter-011/rboids-video.jpeg b/content/posts/newsletter-011/rboids-video.jpeg new file mode 100644 index 000000000..212ca655e Binary files /dev/null and b/content/posts/newsletter-011/rboids-video.jpeg differ diff --git a/content/posts/newsletter-011/roman-empire.jpeg b/content/posts/newsletter-011/roman-empire.jpeg new file mode 100644 index 000000000..8e90ee9e0 Binary files /dev/null and b/content/posts/newsletter-011/roman-empire.jpeg differ diff --git a/content/posts/newsletter-011/rs-type.png b/content/posts/newsletter-011/rs-type.png new file mode 100644 index 000000000..7b2432dc6 Binary files /dev/null and b/content/posts/newsletter-011/rs-type.png differ diff --git a/content/posts/newsletter-011/zerotogame-destruction.gif b/content/posts/newsletter-011/zerotogame-destruction.gif new file mode 100644 index 000000000..3c297bcab Binary files /dev/null and b/content/posts/newsletter-011/zerotogame-destruction.gif differ diff --git a/content/posts/newsletter-012/4k-into-youtube.jpeg b/content/posts/newsletter-012/4k-into-youtube.jpeg new file mode 100644 index 000000000..4c6c415b6 Binary files /dev/null and b/content/posts/newsletter-012/4k-into-youtube.jpeg differ diff --git a/content/posts/newsletter-012/abstreet.jpeg b/content/posts/newsletter-012/abstreet.jpeg new file mode 100644 index 000000000..dce413dfa Binary files /dev/null and b/content/posts/newsletter-012/abstreet.jpeg differ diff --git a/content/posts/newsletter-012/canon-collision.png b/content/posts/newsletter-012/canon-collision.png new file mode 100644 index 000000000..1048229ec Binary files /dev/null and b/content/posts/newsletter-012/canon-collision.png differ diff --git a/content/posts/newsletter-012/crate-before-attack.gif b/content/posts/newsletter-012/crate-before-attack.gif new file mode 100644 index 000000000..40bcb182f Binary files /dev/null and b/content/posts/newsletter-012/crate-before-attack.gif differ diff --git a/content/posts/newsletter-012/data_oriented_design.svg b/content/posts/newsletter-012/data_oriented_design.svg new file mode 100644 index 000000000..ec0ccd46c --- /dev/null +++ b/content/posts/newsletter-012/data_oriented_design.svg @@ -0,0 +1,330 @@ + + + +Gnuplot +Produced by GNUPLOT 5.4 patchlevel 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 12 + + + + + + + + + + + + + 14 + + + + + + + + + + + + + 16 + + + + + + + + + + + + + 18 + + + + + + + + + + + + + 20 + + + + + 0 + + + + + 500000 + + + + + 1x106 + + + + + 1.5x106 + + + + + 2x106 + + + + + 2.5x106 + + + + + 3x106 + + + + + 3.5x106 + + + + + 4x106 + + + + + 4.5x106 + + + + + 5x106 + + + + + + + + + Average time (ms) + + + + + Input + + + + + LinkedList + + + + + LinkedList + + + + + + gnuplot_plot_2 + + + + + + + + + + + + + + + + Vector + + + + + Vector + + + + + + gnuplot_plot_4 + + + + + + + + + + + + + + + + + + + + + + + + + + LinkedList: Comparison + + + + + + + diff --git a/content/posts/newsletter-012/dont-stop.gif b/content/posts/newsletter-012/dont-stop.gif new file mode 100644 index 000000000..edc9aea29 Binary files /dev/null and b/content/posts/newsletter-012/dont-stop.gif differ diff --git a/content/posts/newsletter-012/embark-logo-bg.jpg b/content/posts/newsletter-012/embark-logo-bg.jpg new file mode 100644 index 000000000..7d030a707 Binary files /dev/null and b/content/posts/newsletter-012/embark-logo-bg.jpg differ diff --git a/content/posts/newsletter-012/fps-game-2.jpeg b/content/posts/newsletter-012/fps-game-2.jpeg new file mode 100644 index 000000000..290271968 Binary files /dev/null and b/content/posts/newsletter-012/fps-game-2.jpeg differ diff --git a/content/posts/newsletter-012/graphene-demo.jpeg b/content/posts/newsletter-012/graphene-demo.jpeg new file mode 100644 index 000000000..5f3529ac7 Binary files /dev/null and b/content/posts/newsletter-012/graphene-demo.jpeg differ diff --git a/content/posts/newsletter-012/graphene.png b/content/posts/newsletter-012/graphene.png new file mode 100644 index 000000000..cf1582158 Binary files /dev/null and b/content/posts/newsletter-012/graphene.png differ diff --git a/content/posts/newsletter-012/hex_strat_gameplay.gif b/content/posts/newsletter-012/hex_strat_gameplay.gif new file mode 100644 index 000000000..070c1127e Binary files /dev/null and b/content/posts/newsletter-012/hex_strat_gameplay.gif differ diff --git a/content/posts/newsletter-012/index.md b/content/posts/newsletter-012/index.md new file mode 100644 index 000000000..35997d485 --- /dev/null +++ b/content/posts/newsletter-012/index.md @@ -0,0 +1,1150 @@ ++++ +title = "This Month in Rust GameDev #12 - July 2020" +date = 2020-08-06 +transparent = true +draft = false ++++ + +Welcome to the twelfth issue of the Rust GameDev Workgroup’s +monthly newsletter. +[Rust] is a systems language pursuing the trifecta: +safety, concurrency, and speed. +These goals are well-aligned with game development. +We hope to build an inviting ecosystem for anyone wishing +to use Rust in their development process! +Want to get involved? [Join the Rust GameDev working group!][join] + +You can follow the newsletter creation process +by watching [the coordination issues][coordination]. +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. +Feel free to send PRs about your own projects! + +[Rust]: https://rust-lang.org +[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 + +Table of contents: + +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Meeting Minutes](#meeting-minutes) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) +- [Bonus](#bonus) + + + +## Game Updates + +### [ochre][4k-post] - 4K Intro + +[![Youtube preview: mountains & spheres](4k-into-youtube.jpeg)][4k-video] +_Click to [watch the demo on Youtube][4k-video]._ + +Jani Peltonen has recently released a [4K intro][4k-src] +which is completely written in Rust and GLSL +and published an article ["Writing a winning 4K intro in Rust"][4k-post]: + +> A 4K intro is a demo where the entire program (including any data) +> has to be 4096 bytes or less so it is important +> that the code is as space efficient as possible. +> Rust has a bit of a reputation for creating bloated executables so I wanted +> to find out if is possible to create very space efficient code with it. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/enbbxu/writing_a_4k_intro_in_rust), +[hacker news](https://news.ycombinator.com/item?id=23742870)_ + +[4k-post]: https://www.codeslow.com/2020/07/writing-winning-4k-intro-in-rust.html +[4k-src]: https://github.com/janiorca/sphere_dance +[4k-video]: https://youtube.com/watch?v=SIkkYRQ07tU + +### [Robo Instructus: 1 Year Later][robo-year] + +![game logo + OS logos](robo-os.jpg) + +One year ago [Alex Butler] released the "[Robo Instructus][robo-site]" puzzle game +on [Steam][robo-steam] & [itch.io][robo-itch]. + +This month Alex released a devlog post ["Robo Instructus: 1 Year Later"][robo-year] +about how well the game did after the release: +sales by platform/country/OS, player feedback & reviews, etc. + +> People mostly don’t publish sales figures, +> I guess it makes more business sense to be vague. +> But maybe these will be helpful or interesting in some way. + +Also, Alex continues to maintain and polish the game: [1.29 version][robo-1-29] +brings auto-scrolling improvements, better lang parsing, +bugfixes, and dependency updates. + +_Discussions: +[/r/rust](https://reddit.com/r/rust_gamedev/comments/hsf2su/robo_instructus_1_year_later)_ + +[Alex Butler]: https://twitter.com/bigabgames +[robo-site]: https://www.roboinstruct.us +[robo-steam]: https://store.steampowered.com/app/1032170/Robo_Instructus +[robo-itch]: https://bigabgames.itch.io/robo-instructus +[robo-year]: https://blog.roboinstruct.us/2020/07/16/1-year-later.html +[robo-1-29]: https://store.steampowered.com/newshub/app/1032170/view/4355495589078346745 + +### [Crate Before Attack][cba-site] + +[![Golf Club in Crate Before Attack](crate-before-attack.gif)][cba-site] +_A new weapon: the Golf Club_ + +[Crate Before Attack][cba-site] by [koalefant (@CrateAttack)][@CrateAttack] +is a skill-based grappling hook multiplayer game where frogs combat their friends +while navigating the landscape with their sticky tongues. + +A summary of July changes: + +- Gameplay: added a new melee weapon: + [the Golf Club][cba-youtube-golf-club]. +- Maps: added new map [Ruins][cba-youtube-observation] + by [Kesha Astafyev][cba-spoon-tar] +- Animation: added eye tracking, frogs will track the closest danger + with their eyes such as a projectile or a pet. +- Lobby: it is now possible to observe a match after it was started, + added chat, user list with country flags, match details, and map previews. +- Localization: the game comes in three languages now: English, Spanish, Russian. +- Numerous bugfixes and tweaks. + +Here is [a Playable Browser build][cba-play]. +More details are on [the YouTube channel][cba-youtube] +and in [July Update DevLog-entry][cba-july-update]. + +[cba-site]: https://cratebeforeattack.com +[cba-july-update]: https://cratebeforeattack.com/posts/20200731-july-update/ +[cba-play]: https://cratebeforeattack.com/play +[cba-youtube]: https://youtube.com/channel/UC_xMilPTLuuE5iLs1Ml9zow +[cba-youtube-golf-club]: https://youtu.be/UYxZQh68T6E +[cba-youtube-observation]: https://youtu.be/D63xy7sXStk +[cba-spoon-tar]: https://www.behance.net/spoon_tar +[@CrateAttack]: https://twitter.com/CrateAttack + +### [Wonder] + +[![Lines drawn with a ball ready to roll down them](wonder-screenshot.png)][Wonder] + +[Wonder] ([source code][Wonder-source]) is a casual physics puzzle game by [@kettlecorn] +made for the web with WebAssembly, browser APIs, and no game framework. +The objective is to collect all the stars on each level +by drawing lines for the ball to roll along. + +The game was made in 48 hours for the +[Ludum Dare game jam][ludum-dare] that occurred in April. +@kettlecorn recently published an article going into the technical and +creative challenges encountered making the game: +["Making a Game in 48 hours with Rust and WebAssembly"][48-hour-jam]. + +Wonder can be [played in the browser on itch.io][Wonder]. + +[Wonder]: https://kettlecorn.itch.io/wonder +[Wonder-source]: https://github.com/kettle11/LD46 +[@kettlecorn]: https://twitter.com/kettlecorn +[ludum-dare]: https://ldjam.com +[48-hour-jam]: https://ianjk.com/rust-gamejam/ + +### Vlad Zhukov's [Online RTS Prototype][hex_strat] + +[![gameplay demo](hex_strat_gameplay.gif)][hex_strat] + +[Vlad Zhukov] shared a video of a WIP multiplayer online strategy game +where you fight with other players for territory. +Currently, there are two types of resources and 5 types of buildings. +To build on the tile you need to occupy it with your warriors first. +The player who occupied all enemies' tiles win. + +The game is written with [miniquad](https://github.com/not-fl3/miniquad) +and a custom GUI library. +Some parts of the game are promised to be open-sourced in the future. +Read more about crates used in this project [here][hex-strat-crates]. + +_Discussions: +[twitter](https://twitter.com/VladZhukov0/status/1288091150339969024), +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/hzdzqg/my_new_online_strategy_game)_ + +[hex_strat]: https://twitter.com/VladZhukov0/status/1288091150339969024 +[Vlad Zhukov]: https://twitter.com/VladZhukov0 +[hex-strat-crates]: https://reddit.com/r/rust_gamedev/comments/hzdzqg/my_new_online_strategy_game/fzk4l25 + +### [A/B Street][abstreet] + +![screenshot](abstreet.jpeg) + +[A/B Street][abstreet] is a traffic simulation game exploring +how small changes to roads affect cyclists, transit users, pedestrians, +and drivers. + +This month [versions v0.2.2..v0.2.5][abstreet-releases] were released. +Some of the updates: + +- A new random traffic scenario generator that makes people go between + houses and workplaces. +- New commute pattern explorer tool. +- New character art to give cutscenes a bit more personality. +- Lots of pathfinding and user interface improvements. +- Bugfixes and improved performance (especially startup time on large maps). + +[abstreet]: https://abstreet.org +[abstreet-releases]: https://github.com/dabreegster/abstreet/releases + +### [Tennis Academy Dash][tennis-academy-dash] + +![gameplay](tennis_academy.gif) + +[@oliviff] released [Tennis Academy Dash][tennis-academy-dash] +[v0.2][tennis-academy-update]: + +This release features: + +- a layering/scene management system +- transitioning between UI scenes and game scenes +- improving the level loading to work with string config files +- adding a 5th level + +[@oliviff]: https://twitter.com/oliviff +[tennis-academy-dash]: https://iolivia.itch.io/tennis-academy-dash +[tennis-academy-update]: https://twitter.com/oliviff/status/1285298082033348609 + +### [protochess] + +[![demo](protochess.gif)][protochess] + +[protochess] ([source][protochess-src]) is an online multiplayer chess website +that lets you build custom pieces/boards. + +> Want a piece that can move like a knight + queen? Sure. +> Want to play on a 16x16 sized board? Impractical but you can do it! + +The frontend is written in Svelte with routing from Routify +and styling with the Bulma CSS framework. +All the chess logic is written in Rust, and compiled to WebAssembly to run singleplayer. +The multiplayer websocket server uses Warp +and is modeled after [this project](https://www.mattkeeter.com/projects/pont/). + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/hki9fu/protochesscom_a_chess_website_that_lets_you_play)_ + +[protochess]: https://protochess.com/ +[protochess-src]: https://github.com/raytran/protochess + +### Nox Futura (Rust Edition) + +![SSAO demo](nox-futura.jpeg) + +[Herbert Wolverson][thebracket] +(the author of [bracket-lib] and [the Rust Roguelike Tutorial][rl-book]) +continues porting their old ["Nox Futura" project][nox-f-old] to Rust. +The game uses wgpu, Legion, and Dear ImGui. + +Some of this month's updates: + +- [The project's repo is now public][noxfutura-src]; +- Voxel-friendly SSAO; +- The render pipeline is now about 75% done; +- Jobs board, buildings creation, and lumberjacking; +- 3D cursor and mouse picking; +- Voxelized Vegetation and growing trees; +- Improved A* pathfinding and performance in general. + +Check out Sharing Saturday devlogs for more detailed reports: +[\#1](https://reddit.com/r/roguelikedev/comments/hktr2y/sharing_saturday_318/fwutz7n), +[\#2](https://reddit.com/r/roguelikedev/comments/hp04g6/sharing_saturday_319/fxnsn8h), +[\#3](https://reddit.com/r/roguelikedev/comments/ht6wcc/sharing_saturday_320/fygjvkg), +[\#4](https://reddit.com/r/roguelikedev/comments/hxcvp8/sharing_saturday_321/fz5atmd). + +[noxfutura-src]: https://github.com/thebracket/noxfutura +[thebracket]: https://bracketproductions.com +[bracket-lib]: https://github.com/thebracket/bracket-lib +[rl-book]: http://bfnightly.bracketproductions.com/rustbook/ +[nox-f-old]: https://thebracket.itch.io/nox-futura + +### [🏕 Textcamp!][textcamp] + +![gameplay](textcamp.png) + +[@peat] released a simple multiplayer demo of [Textcamp][textcamp-demo], a +text-based adventure game. + +The goal of Textcamp is to build a modern [MUD] platform that can be played +by [_anyone, anywhere_][textcamp]. It's very early in development, so please +[say hello][textcamp-twitter] if you're interested in contributing code or +stories! + +This demo features: + +- Basic scene, mob, and item templating, with spawning and combat. +- Multiplayer authentication and support for hundreds of players. + +[@peat]: https://twitter.com/peat +[textcamp]: https://text.camp/ +[textcamp-repo]: https://github.com/textcamp/textcamp +[textcamp-twitter]: https://twitter.com/textdotcamp +[textcamp-demo]: http://play.text.camp:8080/ +[MUD]: https://en.wikipedia.org/wiki/MUD + +### [Canon Collision][canon-collision] + +![Basic Projectiles](canon-collision.png) + +[Canon Collision][canon-collision] by [@rukai] is an Undertale + Homestuck +fan-made platform fighter with powerful tools for modding. + +This month, he started work on the project again after taking a break. +Notable changes: + +- [basic projectiles](https://twitter.com/thisIsRukai/status/1287377878460456963), +- [WIP grab implementation (with some humorous results)](https://www.youtube.com/watch?v=sSrBGpT-Ebs), +- [New animations + attacks](https://www.youtube.com/watch?v=AaPkRSNhoSM), +- and [custom shaders](https://twitter.com/thisIsRukai/status/1279324105125163008). + +[canon-collision]:https://canoncollision.com +[@rukai]: https://twitter.com/thisIsRukai + +### pGLOWrpg + +![Improved river pathfinding, paths respect topography](pglowrpg_12.gif) + +The [@pGLOWrpg] (Procedurally Generated Living Open World RPG) is a long-term +project in development by [@Roal_Yr], which aims to be a text-based game with +maximum portability and accessibility and focus on interactions and emergent +narrative. + +For the past month(s) the main focus of the development was on the river +generation system in the worldgen. Main features of the river generator are: + +- High robustness with most edge cases covered; +- Single-pass with subsequent iterations generation, with numerous options to + tweak the process for either precision of the pattern or speed of generation; +- Rivers are sorted upon intersections, their widths are adjusted, waterfalls + are formed when necessary; +- Inflow and outflow directions are recorded for each cell, which allows + following the river upstream or downstream; +- Simple yet effective erosion model implemented, which ensures no upwards flows + are allowed; +- Each stream has its unique ID, which will later be linked to the stream data; +- Streams have 12 orders of magnitude from smallest brooks to major rivers; +- All the options are available to user under "General", "Advanced" and + "Very advanced" sections for any level of fine-tuning. + +Further development will involve re-factoring of the code and making it ready +to be published prior to implementing new features. For small dev reports follow +[@pGLOWrpg] on Twitter. + +[@Roal_Yr]: https://twitter.com/Roal_Yr +[@pGLOWrpg]: https://twitter.com/pglowrpg + +### [Sandbox] + +![Sandbox screenshot](sandbox_screenshot.png) + +[Sandbox] is a falling sand game by JMS55 that provides a variety of fun +particle types to place, and then you get to watch the resulting interactions! + +As they didn't make it in time for last month's newsletter, this month's edition +covers the work they did in June and July: + +- Released version 1.0 and 1.1, created a flatpak package and associated metadata, + and published it to [Flathub]. +- Several new particles such as Fire, Mirror, Glitch, and some hidden ones, + and tweaked or overhalled almost every other particle! +- A fancy new glow post process effect for Acid/Fire/Electricity, + created using wgpu-rs compute shaders. + - As a precursor to this, they made a PR to the pixels crate that removes the + old RenderPass approach in favor of giving the user direct access to wgpu. +- Made a slick new icon and background for the game. +- Added a video recording feature using gstreamer-rs and x264enc, + and then later removed it (for now). + - Moving from recording the raw texture generated for pixels + to the post-processed texture from wgpu + involved a major overhaul, and it proved too glitchy and slow. + Hopefully, it will be revived later, in the form of recording user inputs. +- Many structural improvements, such as less glitchy particle + placement with Bresenham's line algorithm, + better error handling, and ensuring particles + are only ever stored on the heap. +- Performance improvements, including generating noise in a separate thread. +- Currently WIP: UI using imgui. + +![Sandbox icon](sandbox_icon.svg) + +Got any ideas? Leave an [issue on github][Sandbox], or add it yourself! + +[Sandbox]: https://github.com/JMS55/sandbox +[Flathub]: https://flathub.org/apps/details/com.github.jms55.Sandbox + +### [Pushin' Boxes][pushin-homepage] + +[![Pushin' Boxes gameplay](pushin_boxes_gameplay.gif)][pushin-itch] + +[Pushin' Boxes][pushin-homepage] ([itch][pushin-itch]) +is a [Sokoban][pushin-sokoban] clone made with [ggez][pushin-ggez] by +[@septum][septum-twitter]. It features 16 levels of puzzling box-pushin' action +where the player controls a little robot (named プシン). +Check out a [blog post][pushin-post] about the game's release. + +[The source code is available on GitLab][pushin-repository]. + +[pushin-homepage]: https://septum.io/games/pushin-boxes +[pushin-itch]: https://septum.itch.io/pushin-boxes +[pushin-sokoban]: https://en.wikipedia.org/wiki/Sokoban +[pushin-post]: https://septum.io/blog/my-first-game +[pushin-ggez]: https://github.com/ggez/ggez +[pushin-repository]: https://gitlab.com/septum___/pushin_boxes +[septum-twitter]: https://twitter.com/septum___ + +### [Don't Stop][dont-stop] + +![gameplay sample](dont-stop.gif) + +[Don't Stop][dont-stop] by @superahtoms is a rhythm game +written using Rust and SDL2 for the [GMTK 2020 jam][gmtk2020]. + +> Ever just wanted to keep dancing but the fuzz wants you to stop? +> Well now you can! Just keep on dancing, don't let the bouncers grab you +> while you're doing it or your fun stops! +> Keep being the life of the party because you are Party Pat! +> +> Be like wind, be fast, dance and don't get caught! + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/hq0ecp/gmtk_submission_dont_stop)_ + +[dont-stop]: https://superahtoms.itch.io/dont-stop +[gmtk2020]: https://itch.io/jam/gmtk-2020 + +### [shotcaller] + +[shotcaller] is a WIP quick (~7mins) ASCII-rendered RTS/MOBA game. + +> In the way "MOBA" games such as DOTA2 or LoL are usually played, +> the captain of the team is the default shotcaller. +> +> > The shotcaller needs to be unbiased and not have tunnel vision. +> > You need to be able to think in the future and tell +> > what would happen if you did this or that. +> > This becomes crucial when deciding to base-race or teleport back to defend. +> > ~reddit-user +> +> Everyone on the team can play the part of Shotcaller on occasion. +> The act of shotcalling is not typically the most prevalent activity of any player, +> even for a captain — after all, they also need to play their hero. +> +> But in this game, all you do is shotcalling and big-picture strategizing. +> The game plays as if you were controlling the 6th-person-in-the-booth “coach” player, +> and your team (of AI-played bots) actually follows +> your instructions to the letter, within their designed constraints. + +The game is in an early stage of development, +[check out the design document][shotcaller-gdd] for details and plans. + +[shotcaller]: https://github.com/amethyst/shotcaller +[shotcaller-gdd]: https://www.notion.so/Shotcaller-7374d2b2819c42ccb40f01dc7089d419 + +### [On FPS Game Progress \#2][on-fps-game-2] + +[![fps-game-screenshot](fps-game-2.jpeg)][on-fps-game-2-youtube] +_Click to watch [footage from the game's current state][on-fps-game-2-youtube]._ + +On this update, [@pingFromHeaven] talks about the lighting implementation that +sets the tone for the game, how Rust is good at shortening the debugging +times, which is especially valuable when working directly with OpenGL and why +he doesn't describe what the game is about. + +The next update is going to be about establishing the mood further, which +includes a more elaborate environment with more details, basic SFX and +particles. + +[on-fps-game-2-youtube]: https://youtu.be/NIJNgr9zeXk +[on-fps-game-2]: http://atilkockar.com/on-fps-game-progress-2/ +[@pingFromHeaven]: https://twitter.com/pingFromHeaven + +### [Zemeroth][zemeroth] + +![new agent info panel](zemeroth.jpeg) + +[Zemeroth][zemeroth] by [@ozkriff] is a minimalistic 2D turn-based tactical game. + +Some of the recent updates: + +- The game got a new development roadmap: ["Final Push"][zemeroth-final-push]. +- UI updates: [widget stretching][zemeroth-stretch] and [more informative "dots"][zemeroth-dots]. +- A few actions [got additional effects][zemeroth-flare]. +- The work on adding sounds has begun. + +[zemeroth]: https://github.com/ozkriff/zemeroth +[@ozkriff]: https://twitter.com/ozkriff +[zemeroth-final-push]: https://twitter.com/ozkriff/status/1280874966855176199 +[zemeroth-stretch]: https://twitter.com/ozkriff/status/1284154997190594560 +[zemeroth-dots]: https://twitter.com/ozkriff/status/1284418956296626176 +[zemeroth-flare]: https://twitter.com/ozkriff/status/1282051985907298306 + +### [Veloren][veloren] + +![Sunrise](veloren-sunrise.gif) +_Sunrise_ + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In July, Veloren reached its 1000th merge! Lots of work has been done towards +the 0.7 release. The release date has been pushed from the beginning of August +to mid-August. A loot table system was added to item drops. Lots of work has +been done on animations and quadrupeds. Networking has switched to a new +system. Significant improvements have been made to pathfinding system to improve +fast quadruped movement. Particle systems are being implemented and optimized. A +crafting GUI has been added. Translations have stabilized significantly, and +there is a framework for translators to know what needs to be done. + +![Fire particles](veloren-fire.gif) +_Progress on the particle system_ + +You can read more about some specific topics from July: + +- [Networking Milestone](https://veloren.net/devblog-75#networking-milestone-by-xmac94x) +- [The Case of the Disappearing Entities](https://veloren.net/devblog-75#the-case-of-the-disappearing-entities-by-imbris) +- [Pathfinding](https://veloren.net/devblog-75#pathfinding-with-zesterer) +- [GUID Insights](https://veloren.net/devblog-75#guid-insights-by-sharp) +- [Particle System](https://veloren.net/devblog-76#particle-system-by-lobster) +- [Translation Help](https://veloren.net/devblog-76#we-need-your-help-for-translations-this-is-how-it-s-done-by-xmac94x) +- [Particle Improvements](https://veloren.net/devblog-77#particle-improvements-by-lobster) +- [CPU Workloads](https://veloren.net/devblog-77#cpu-workloads-by-angelonfira) +- [Refactoring WORLD_SIZE](https://veloren.net/devblog-78#refactoring-world-size-by-sharp) + +July's full weekly devlogs: "This Week In Veloren...": +[#75](https://veloren.net/devblog-75), +[#76](https://veloren.net/devblog-76), +[#77](https://veloren.net/devblog-77), +[#78](https://veloren.net/devblog-78). + +In August, 0.7 will be released. Work will continue on castle and cave +generation. The inaugural episode of the Rust Game Dev podcast will be released, +which features an interview by Veloren developers. + +![Quadrupeds](veloren-quadrupeds.png) +_Quadruped overhaul_ + +[veloren]: https://veloren.net + +## Learning Material Updates + +### [Rust on iOS with SDL2][rust-ios-sdl2-post] + +[![Rust on iOS with SDL2 demo](rust-ios-sdl2-screenshot.png)][rust-ios-sdl2-post] + +[@aclysma] published a [tutorial][rust-ios-sdl2-post] that describes setting up +Rust/SDL2 on iOS. The resulting app can run in the simulator as well as on +physical devices. [SDL2][sdl2-project] is a mature library providing basic rendering, +audio, and input support. It can also be used to set up an opengl or vulkan +surface. This demo is using [Rust-SDL2][rust-sdl2] for bindings. + +[rust-ios-sdl2-post]: https://blog.aclysma.com/rust-on-ios-with-sdl2/ +[@aclysma]: https://twitter.com/aclysma +[sdl2-project]: https://www.libsdl.org/download-2.0.php +[rust-sdl2]: https://crates.io/crates/sdl2 + +### [Rust Sokoban Tutorial][sokoban_book] + +![sokoban update](rust_sokoban.png) + +The Rust Sokoban tutorial is an online book aimed at Rust gamedev beginners +which walks through making a simple Sokoban game using ggez and ECS (with specs). +It tries to teach the basics of architecting in ECS and basic Rust concepts +through a hands-on approach. + +This month: + +- the book was officially released on July 10th; +- the project received 3 external contributions; +- a few text edits were done, including fixing an issue with code + snippets not appearing correctly; +- work on translations has started (🇨🇳 translation coming soon 🤞). + +You can follow +the release discussion [on Twitter][sokoban_release], +provide feedback [on github][sokoban_github] and +read the book at [sokoban.iolivia.me][sokoban_book]. + +[sokoban_release]: https://twitter.com/oliviff/status/1281641563257360384 +[sokoban_book]: https://sokoban.iolivia.me +[sokoban_github]: https://github.com/iolivia/rust-sokoban + +### [Make Pong with Rust][tantan-video] + +[![youtube preview](video-pong-tutorial.jpeg)][tantan-video] +_Click to [watch the tutorial][tantan-video]._ + +[TanTan] released a [video tutorial][tantan-video] +that guides you through all the step of making a pong game in Rust +using the GGEZ framework. + +The source code [can be found here][tantan-pong-src]. + +[TanTan]: https://twitter.com/Tantan22430802 +[tantan-video]: https://youtube.com/watch?v=TUE_HSgQiG0 +[tantan-pong-src]: https://github.com/TanTanDev/rusty_pong + +### [An Introduction to Data-Oriented Design in Rust][dod] + +![vector vs linked list perf](data_oriented_design.svg) + +Data-Oriented Design is an approach to program optimization focused on +considering the features and limitations of the target hardware, and +carefully controlling the memory layout of data to take advantage of +those. + +In [this article][dod], [jamesmcm][jamesmcm] provides benchmarks and +code for four example scenarios: + +- [Array of Structs vs. Struct of Arrays][wikisoa] +- Branching in a hot loop +- Iteration in a vector vs. a linked list +- Monomorphisation vs. [Dynamic Dispatch][traitobj] + +The full article is available [here][dod]. + +[jamesmcm]: https://github.com/jamesmcm +[wikisoa]: https://en.wikipedia.org/wiki/AoS_and_SoA +[traitobj]: https://doc.rust-lang.org/book/ch17-02-trait-objects.html#trait-objects-perform-dynamic-dispatch +[dod]: http://jamesmcm.github.io/blog/2020/07/25/intro-dod/#en + +### ["Rust'N'Games" Talk][rust-n-games] + +[![youtube preview: a slide with Tower Rangers game](rust-n-games-youtube.jpeg)][rust-n-games] +_Click to [watch the talk][rust-n-games]._ + +During the recent ["Rust and Tell"][rust-n-tell] online event +[Stephan @extrawurst Dilly][@extrawurst] gave a ["Rust'N'Games" talk][rust-n-games] +about their experience of using Rust in games at [Gameroasters]. + +[rust-n-games]: https://youtu.be/0Bj-5C2Zfqs?t=1404 +[rust-n-tell]: https://berline.rs/2020/07/28/rust-and-tell.html +[@extrawurst]: https://twitter.com/extrawurst +[Gameroasters]: https://www.gameroasters.com/ + +## Library & Tooling Updates + +### [A Servo Browser Plugin for Unity][servo-unity-post] + +![Functional scheme](servo-unity.png) + +[Servo for Unity][servo-unity] is a Unity native plugin and a set +of Unity C# script components allow third parties to incorporate +Servo browser windows into Unity scenes. + +[A blog post about the project][servo-unity-post] gives a good +overview of the project goals, capabilities, architecture, challenges, +and future development plans. + +[servo-unity]: https://github.com/MozillaReality/servo-unity +[servo-unity-post]: https://blog.mozvr.com/a-browser-plugin-for-unity + +### [big-brain] + +[big-brain] by [Kat Marchán] is a [utility AI] library for games, +built on the specs ECS. + +> It lets you define complex, intricate AI behaviors for your entities +> based on their perception of the world. +> Definitions are almost entirely data-driven, using plain .ron files, +> and you only need to program considerations (entities that look at your game world), +> and actions (entities that perform actual behaviors upon the world). +> No other code is needed for actual AI behavior. + +[big-brain]: https://github.com/zkat/big-brain +[Kat Marchán]: https://twitter.com/zkat__ +[utility AI]: https://en.wikipedia.org/wiki/Utility_system + +### [weasel] v0.8 + +[weasel] by [@Trisfald] is a customizable battle system for turn-based games. + +This month [v0.8 was released][weasel-v0-8]. +Highlights include: + +- New event types +- Inanimate objects +- Status effects +- Many new examples + +[weasel]: https://github.com/Trisfald/weasel +[weasel-v0-8]: https://github.com/Trisfald/weasel/releases/tag/v0.8.0 +[@Trisfald]: https://github.com/Trisfald + +### [naia] + +[naia] (**n**etworking **a**rchitecture for **i**nteractive **a**pplications) +is a cross-platform (currently WebAssembly & Linux) networking engine that intends +to make multiplayer game development in Rust dead simple and lightning fast. + +> At the highest level, you register Event and Entity implementations +> in a module shared by Client & Server. +> Then, naia will facilitate sending/receiving those Events between Client & Server, +> and also keep a pool of tracked Entities synced with each Client +> for whom they are "in-scope". +> Entities are "scoped" to Clients with whom they share the same Room, +> as well as being sufficiently customizable to, for example, +> only keep Entities persisted & synced while within a Client's viewport +> or according to some other criteria. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/hj2eey/naia)_ + +[naia]: https://github.com/naia-rs/naia + +### [voronator] + +![Voronoi diagram example](voronator.png) + +[voronator] by [Felipe Santos] is ... +a Rust port of the [d3-delaunay] and [delaunator] libraries +that provide delaunay triangulation and Voronoi diagram generation. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/hjbl0y/introducing_voronator)_ + +[voronator]: https://github.com/fesoliveira014/voronator-rs +[Felipe Santos]: https://twitter.com/fesoliveira0 +[d3-delaunay]: https://github.com/d3/d3-delaunay +[delaunator]: https://github.com/mapbox/delaunator + +### [This Month in Mun][mun-july] + +[![Mun logo](mun-logo.png)][Mun] + +[Mun] is a scripting language for gamedev focused on quick iteration times +that is written in Rust. + +[Rustacean Station][rustacean] released [a podcast about Mun][rustacean-mun] +in which the Mun Core Team sat down with host Jeremy +to talk about why they chose Rust to develop Mun. If you are interested in +having an inside look into Mun's origins and evolution, we recommend you check +it out - or any of Rustacean Station's other podcasts for that matter! + +Their additional [July updates][mun-july] include: + +- initial support for the Language Server Protocol; +- a community entry for the [Make It or Break It content] of Spaceship + recreated with Mun & Rust; +- CLI support for creating Mun projects; +- performance benchmarks and improvements; +- bugfixes and improved documentation. + +[Mun]: https://mun-lang.org +[mun-july]: https://mun-lang.org/blog/2020/07/30/this-month-july +[rustacean]: https://rustacean-station.org +[rustacean-mun]: https://rustacean-station.org/episode/020-mun +[Make It or Break It content]: https://github.com/mun-lang/mun/issues/220 + +### ash(-window) + +[`ash-window`], an interoperability library for [`ash`] and [`raw-window-handle`], +is now part of the `ash` repository and will be updated more closely +with new `ash` releases. + +[`ash-window`]: https://crates.io/crates/ash-window +[`ash`]: https://crates.io/crates/ash +[`raw-window-handle`]: https://crates.io/crates/raw-window-handle + +### grr 0.8 + +[`grr`](https://github.com/msiglreith/grr) is a modern OpenGL 4.5+ wrapper. +It provides a cleaned up API built around Vulkan's naming scheme. +The latest release further pushes the crate towards +full compatibility with the core features. + +Most notable changes: + +- Added support for a bunch of Formats +- Extended transfer operations (Attachment <-> Host <-> Buffer <-> Image) +- Raw context access +- Shader & Pipeline log control +- Device submission control + +Special thanks to [@masonium](https://github.com/masonium) +for contributing a lot of these features and fixes! + +### [miniquad] + +![miniquad ios](miniquad_ios.jpg) + +[miniquad] is a safe and cross-platform rendering library +focused on portability and low-end platforms support. + +This month opengl backend of miniquad was successfully ported to iOS. +With this update [macroquad], [good-web-game] and all the games +build directly with [miniquad] can be run on IOS, Android, WASM, +Linux, macOS and Windows! + +[miniquad]: https://github.com/not-fl3/miniquad +[macroquad]: https://github.com/not-fl3/macroquad +[good-web-game]: https://github.com/not-fl3/good-web-game + +### [wgpu][wgpu-site] + +![procgen dynamic "grass field"](tuitui-grass-field.jpeg) +_[@MacTuitui]'s everyday [nannou] experiment #1274_ + +The work is ongoing to validate all the incoming commands and guarantee API safety. +Special thanks to [@GabrielMajeri] for helping to convert assertions +into errors at `wgpu` level. +The wgpu devs are also introspecting shader requirements +and matching them against the pipelines, but this will take more effort +before it will become universally available. + +[@cwfitzgerald] has been busy adding a few handy native-only extensions, +such as descriptor indexing and push constants. +They have also converted the project's logging to [tracing](https://crates.io/crates/tracing), +setting up the infrastructure for CPU profiling. + +In the past 2 months, the API for descriptor structures in `wgpu-rs` +have been undergoing a turbulent period. +First, non-exhaustive semantics led to introduction of constructors. +Then, efforts to reduce code duplication inside `wgpu` project has led to the +[bovine invasion](https://github.com/gfx-rs/wgpu-rs/pull/460) on wgpu-rs API side. +The devs are figuring out the plan to address that with a builder pattern now, +which will address both the `Cow`s and non-exhaustives, +hopefully putting an end to the turbulence. + +In the meantime, `wgpu-rs` ecosystem is flourishing with applications and libraries. +The [showcase gallery](https://wgpu.rs/#showcase) was updated with a few shiny images. + +------ + +Finally, [@kunalmohan] has been busy +[implementing WebGPU in Servo][webgpu-in-servo], based on `wgpu`. +Thanks to this work, Servo is currently ahead of Gecko +in terms of API being up-to-date and covered 🎉. +It's already capable of rendering most of the examples, +and the devs are looking forward to the day when the same Rust code +(rendering with `wgpu-rs`) will be deployable to the Web, +and viewable from Firefox, Servo, Chrome, and other browsers. + +[@GabrielMajeri]: https://github.com/GabrielMajeri +[@cwfitzgerald]: https://github.com/cwfitzgerald +[@kunalmohan]: https://github.com/kunalmohan +[webgpu-in-servo]: https://github.com/servo/servo/projects/24 +[@MacTuitui]: https://twitter.com/MacTuitui +[nannou]: https://nannou.cc +[wgpu-site]: https://wgpu.rs + +### [luminance v0.40][luminance-v0-40] + +![logo](luminance-logo.svg) + +[luminance] by [@phaazon] is a type-safe, type-level and stateless +graphics framework. + +This month [luminance v0.40 got released][luminance-v0-40]. +Some of the highlights: + +- The complete backend/architecture redesign. +- A new platform crate has appeared: + [luminance-sdl2], which adds support for the sdl2 crate. +- [luminance-webgl] and luminance-web-sys, to support the Web! +- A [luminance-examples-web] crate is available to test with `yarn` easily. +- [luminance-front], which is a front crate to ease working with luminance types. +- The type system experience has been greatly improved. Most of the time, + you will not have to annotate types anymore — like Program or Tess. +- About `Tess`, a BIG update has landed, has it’s now heavily typed + (vertex type, index type, vertex instance data type, memory interleaving type). +- More render states features, such as the possibility to enable or disable + depth writes, separate RGB/alpha blending, etc. etc. +- Also, the [luminance book][luminance-book] got updated. + +A complete changes list and a migration guide can be found +[in the CHANGELOG][luminance-v0-40-changelog]. + +luminance-0.41 got released a few days after to fix some type design problems with +the gates, and to enhance the error flow in graphics pipelines, revisited to be more +flexible and seamless. + +Also, check out the +["The compile-time deinterleaving interface"][luminance-typesafe-deinterleaving] +blog post that delves deep into this new feature. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/hsgfav/the_new_luminance_is_there)_ + +[@phaazon]: https://twitter.com/phaazon_ +[luminance]: https://github.com/phaazon/luminance-rs +[luminance-v0-40-changelog]: https://github.com/phaazon/luminance-rs/blob/master/luminance/CHANGELOG.md#040 +[luminance-v0-40]: https://phaazon.net/blog/luminance-0.40 +[luminance-front]: https://crates.io/crates/luminance-front +[luminance-typesafe-deinterleaving]: https://phaazon.net/blog/typesafe-deinterleaving +[luminance-webgl]: https://crates.io/crates/luminance-webgl +[luminance-examples-web]: https://github.com/phaazon/luminance-rs/tree/master/luminance-examples-web +[luminance-sdl2]: https://crates.io/crates/luminance-sdl2 +[luminance-book]: https://rust-tutorials.github.io/learn-luminance/ + +### [Graphene][graphene] - Vulkan Render Graph + +![execution flow example](graphene.png) + +[Graphene][graphene] is a Vulkan render graph. Still heavily a work in progress, +it is built to be a simpler abstraction over Vulkan, with long-term ambitions to +serve as a graphics test-bench. + +Currently, it implements a mesh render pass followed by a chromatic aberration +post-process in less than [250 lines of Rust code][graphene_example_code]. +Current features include easy Vulkan initialization, automatic swapchain +resizing, glTF mesh loading, and shader hot-reloading. +Check out a ["Render graphs" blog post][graphene_blog] +for a more in-depth introduction to the project. + +![chromatic aberration demo](graphene-demo.jpeg) + +You can follow progress on [GitHub][graphene] or on [Twitter][apoorvaj]. + +[graphene]: https://github.com/ApoorvaJ/graphene +[graphene_blog]: https://apoorvaj.io/render-graphs-1/ +[graphene_example_code]: https://github.com/ApoorvaJ/graphene/blob/a1ee574d92445f4cff195ca517af2912ebfce697/src/demos/00/main.rs +[apoorvaj]: https://twitter.com/ApoorvaJ + +### Vulkan Renderer (Name TBD) + +[![Vulkan renderer on iOS prototype](vulkan-renderer-prototype.jpeg)][vulkan-renderer-prototype-video] +_Click to watch [the video demo][vulkan-renderer-prototype-video] running on iOS._ + +[@aclysma] published a [new vulkan-based renderer][renderer-prototype] that +uses [atelier-assets] to load 3D scenes exported from blender. + +> The objective of this repo is to build a scalable, flexible, data driven +> renderer. Scalable in the sense of performance as well as suitability for +> use in large, real-world projects. This means streaming, LODs, visibility +> systems, and multi-threaded draw call submission need to be possible. +> Additionally it means thinking through how an asset pipeline would work for +> a team with dedicated artists and supporting workflow-friendly features +> like hot reloading assets, possibly on remote devices. + +This video demonstrates the renderer running on iOS and receiving asset updates +via wifi. The scene is "sponza" exported from blender. Vulkan is supported on +windows and linux natively. Support for macOS and iOS is via the +well-established [MoltenVK][moltenvk] project. + +The demo was ported from PC to iOS over a single weekend and out of +approximately 300 crate dependencies (including complex, OS-specific ones like +tokio), all but a few worked out-of-the-box! + +[@aclysma]: https://twitter.com/aclysma +[renderer-prototype]: https://github.com/aclysma/renderer_prototype +[atelier-assets]: https://github.com/amethyst/atelier-assets +[vulkan-renderer-prototype-video]: https://www.youtube.com/watch?v=Ks_HQbejHE4 +[moltenvk]: https://github.com/KhronosGroup/MoltenVK + +### [Ludusavi] + +![Demo of Ludusavi GUI](ludusavi.gif) + +[Ludusavi] is a tool written in Rust by [@mtkennerly] for backing up PC game +save data. It has backup info for more than 7,000 games, is cross-platform for +Windows, Linux, and Mac, and has a GUI as well as a command line interface. +The GUI was created using the [Iced] crate. + +The [backup info] is sourced from [PCGamingWiki] so that everyone can help to +expand the data, and it's stored in a documented format so that other backup +tools can share the same data set. A [plugin] for [Playnite] was also just +released. + +[Ludusavi]: https://github.com/mtkennerly/ludusavi +[@mtkennerly]: https://twitter.com/mtkennerly +[Iced]: https://crates.io/crates/iced +[backup info]: https://github.com/mtkennerly/ludusavi-manifest +[PCGamingWiki]: https://www.pcgamingwiki.com/wiki/Home +[plugin]: https://github.com/mtkennerly/ludusavi-playnite +[Playnite]: https://playnite.link + +### [Langcraft] + +[Langcraft] is the Minecraft LLVM target you've never wanted. + +Langcraft started as a dare to the `#lang-dev` channel of the Rust +Community Discord to be able to parse Rust code in Minecraft. +Naturally, it grew into a full code generator that can translate +most LLVM IR to +[Minecraft data packs](https://minecraft.gamepedia.com/Data_Pack), +the game's deliberately-limited in-game scripting language. Langcraft +is entirely language independent, so any language with an LLVM-based +compiler can (with the right API bindings) run in Minecraft. Currently, +bindings to both C and Rust exist. While not as visually impressive as +a redstone computer, Langcraft does stretch the bounds of the game quite +a bit, using jukeboxes for memory, armor stands to represent pointers, +and rearranging compiled code to make it run in the bounds of the data +packs' fixed instruction limit. + +This is all, naturally, entirely useless. The project is also still +heavily work-in-progress and does not pretend to be stable, but it is +usable. A handwritten interpreter for a Rust-like language has already +been demonstrated running, and even more complex projects like [CHIP-8 +emulators](https://github.com/Dhole/chip8-rs.git) function (albeit at +extremely slow speed). + +You can watch a [video of Rust interpreter running Fizzbuzz][langcraft-video]: + +[![youtube preview](longcraft-video.jpeg)][langcraft-video] + +[Langcraft]: https://github.com/SuperTails/langcraft +[langcraft-video]: https://youtube.com/watch?v=Cx0w5Wn9pPU + + + +## Meeting Minutes + + + +[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 + + + +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [winit's "Good first issue" and “help wanted” issues][winit-issues]. +- [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]. + +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[winit-issues]: https://github.com/rust-windowing/winit/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3A%22status%3A+help+wanted%22+label%3A%22Good+first+issue%22 +[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/dabreegster/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 + +## Jobs + + + +- [Embark] is looking to hire Open Source Engineer + specifically to work on Rust projects (Remote or Stockholm, Sweden): + + > At Embark, we love the openness and collaborative nature + > of the quickly growing ecosystem and community around Rust, + > including its tens of thousands of open source crates. + > We're committed to supporting a thriving open source ecosystem + > for game development in Rust. + > + > As an Open Source Engineer at Embark, you will work with our community + > and engineering teams on open source. + > You'll help maintain and develop our open source presence, + > and be a key link between Embark and the greater software ecosystem. + + You can find all of the details on their [job offer page][embark-job]. + + ------ + + Btw, Embark are also [looking for Software Engineer interns][embark-job-intern]. + + ![Embark's logo](embark-logo-bg.jpg) + +[Embark]: https://www.embark-studios.com +[embark-job]: https://www.embark-studios.com/jobs/910166-open-source-engineer +[embark-job-intern]: https://www.embark-studios.com/jobs/915561-internship-software-engineer-rust + +## Bonus + + + +Just an interesting Rust gamedev link from the past. :) + +[![youtube preview](shar-youtube.jpeg)][shar-trailer] +_Click to watch [SHAR's Greenlight trailer][shar-trailer]_ + +[SHAR][shar-itch] (Russian "Шар" - ball) by [@fedor_games] (author of [miniquad]/[macroquad]) +is a 3rd-person online action game that aims to create unique experience +combining destructible world and team-based ball game. + +> SHAR is an action combination of tactical and sports game in the destructible world. +> The rules are extremely simple: two teams, one ball. +> The team that carries the ball into the opponent's gates gets a score, +> the team with the most score at the end of the game is the winner. +> However, this is where things get interesting! +> Players have the variety of skills and tricks and destructible environment +> to fiddle around to slam the opponent and win the game. + +Some of the game's features: + +- A network-synchronized physics engine powered by bullet-rs; +- A bunch of physics-based player skills; +- Extensive build-in editors for game maps, skeletal animation, + effects & particle systems; +- Modding support. + +The game was built on top of a homegrown game engine using: +winit, glium, imgui-rs, [tinyecs], [awesomium-rs], [ears]. + +[![A screenshot from the recording](shar-talk.jpeg)][shar-talk] + +During RustFest Zurich 2017, Fedor gave a self-descriptive talk +"SHAR: Rust's gamedev experience". +You can [watch the recording here][shar-talk]. + +The game was in active development around 2016-2017. +In 2017 the game [passed Steam Greenlight][shar-greenlight]. +During 2018 [the project was suspended][shar-death]. + +[shar-itch]: https://fedorgames.itch.io/shar +[@fedor_games]: https://twitter.com/fedor_games +[shar-trailer]: https://youtube.com/watch?v=OVYQs3KY2EE +[shar-death]: https://fedorgames.itch.io/shar/devlog/52720/time-to-move-on +[shar-greenlight]: https://steamcommunity.com/sharedfiles/filedetails/?id=868228143 +[shar-talk]: https://youtube.com/watch?v=nXR8f4r6ggM +[macroquad]: https://github.com/not-fl3/macroquad +[tinyecs]: https://github.com/not-fl3/tinyecs +[awesomium-rs]: https://github.com/not-fl3/awesomium-rs +[ears]: https://github.com/nickbrowne/ears + +------ + +That's all news for today, thanks for reading! + +Subscribe to [@rust_gamedev on Twitter][@rust_gamedev] +or [/r/rust_gamedev subreddit][/r/rust_gamedev] if you want to receive fresh news! + +**Discussions of this post**: +[/r/rust](https://reddit.com/r/rust/comments/i4uhta/this_month_in_rust_gamedev_12_july_2020), +[twitter](https://twitter.com/rust_gamedev/status/1291405227191611392). + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/posts/newsletter-012/longcraft-video.jpeg b/content/posts/newsletter-012/longcraft-video.jpeg new file mode 100644 index 000000000..8d74fc603 Binary files /dev/null and b/content/posts/newsletter-012/longcraft-video.jpeg differ diff --git a/content/posts/newsletter-012/ludusavi.gif b/content/posts/newsletter-012/ludusavi.gif new file mode 100644 index 000000000..85a64d3d7 Binary files /dev/null and b/content/posts/newsletter-012/ludusavi.gif differ diff --git a/content/posts/newsletter-012/luminance-logo.svg b/content/posts/newsletter-012/luminance-logo.svg new file mode 100644 index 000000000..1afc77d3e --- /dev/null +++ b/content/posts/newsletter-012/luminance-logo.svg @@ -0,0 +1,72 @@ + + + luminance logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + luminance logo + Wed Feb 12 2020 + + + Dimitri Sabadie <dimitri.sabadie@gmail.com> + + + + + CC BY-ND 4.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/posts/newsletter-012/miniquad_ios.jpg b/content/posts/newsletter-012/miniquad_ios.jpg new file mode 100644 index 000000000..ad9531586 Binary files /dev/null and b/content/posts/newsletter-012/miniquad_ios.jpg differ diff --git a/content/posts/newsletter-012/mun-logo.png b/content/posts/newsletter-012/mun-logo.png new file mode 100644 index 000000000..02295dc77 Binary files /dev/null and b/content/posts/newsletter-012/mun-logo.png differ diff --git a/content/posts/newsletter-012/nox-futura.jpeg b/content/posts/newsletter-012/nox-futura.jpeg new file mode 100644 index 000000000..fa898a2f6 Binary files /dev/null and b/content/posts/newsletter-012/nox-futura.jpeg differ diff --git a/content/posts/newsletter-012/pglowrpg_12.gif b/content/posts/newsletter-012/pglowrpg_12.gif new file mode 100644 index 000000000..d9b404de6 Binary files /dev/null and b/content/posts/newsletter-012/pglowrpg_12.gif differ diff --git a/content/posts/newsletter-012/protochess.gif b/content/posts/newsletter-012/protochess.gif new file mode 100644 index 000000000..77e716a90 Binary files /dev/null and b/content/posts/newsletter-012/protochess.gif differ diff --git a/content/posts/newsletter-012/pushin_boxes_gameplay.gif b/content/posts/newsletter-012/pushin_boxes_gameplay.gif new file mode 100644 index 000000000..bca6b6c73 Binary files /dev/null and b/content/posts/newsletter-012/pushin_boxes_gameplay.gif differ diff --git a/content/posts/newsletter-012/robo-os.jpg b/content/posts/newsletter-012/robo-os.jpg new file mode 100644 index 000000000..bd760bafc Binary files /dev/null and b/content/posts/newsletter-012/robo-os.jpg differ diff --git a/content/posts/newsletter-012/rust-ios-sdl2-screenshot.png b/content/posts/newsletter-012/rust-ios-sdl2-screenshot.png new file mode 100644 index 000000000..d0aaedc1f Binary files /dev/null and b/content/posts/newsletter-012/rust-ios-sdl2-screenshot.png differ diff --git a/content/posts/newsletter-012/rust-n-games-youtube.jpeg b/content/posts/newsletter-012/rust-n-games-youtube.jpeg new file mode 100644 index 000000000..f6c7f9bbe Binary files /dev/null and b/content/posts/newsletter-012/rust-n-games-youtube.jpeg differ diff --git a/content/posts/newsletter-012/rust_sokoban.png b/content/posts/newsletter-012/rust_sokoban.png new file mode 100644 index 000000000..f10a719e1 Binary files /dev/null and b/content/posts/newsletter-012/rust_sokoban.png differ diff --git a/content/posts/newsletter-012/sandbox_icon.svg b/content/posts/newsletter-012/sandbox_icon.svg new file mode 100644 index 000000000..385d743d7 --- /dev/null +++ b/content/posts/newsletter-012/sandbox_icon.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/posts/newsletter-012/sandbox_screenshot.png b/content/posts/newsletter-012/sandbox_screenshot.png new file mode 100644 index 000000000..dea1d0d87 Binary files /dev/null and b/content/posts/newsletter-012/sandbox_screenshot.png differ diff --git a/content/posts/newsletter-012/servo-unity.png b/content/posts/newsletter-012/servo-unity.png new file mode 100644 index 000000000..a92db5c43 Binary files /dev/null and b/content/posts/newsletter-012/servo-unity.png differ diff --git a/content/posts/newsletter-012/shar-talk.jpeg b/content/posts/newsletter-012/shar-talk.jpeg new file mode 100644 index 000000000..cf6c3dda4 Binary files /dev/null and b/content/posts/newsletter-012/shar-talk.jpeg differ diff --git a/content/posts/newsletter-012/shar-youtube.jpeg b/content/posts/newsletter-012/shar-youtube.jpeg new file mode 100644 index 000000000..02203a491 Binary files /dev/null and b/content/posts/newsletter-012/shar-youtube.jpeg differ diff --git a/content/posts/newsletter-012/tennis_academy.gif b/content/posts/newsletter-012/tennis_academy.gif new file mode 100644 index 000000000..68fdb4cca Binary files /dev/null and b/content/posts/newsletter-012/tennis_academy.gif differ diff --git a/content/posts/newsletter-012/textcamp.png b/content/posts/newsletter-012/textcamp.png new file mode 100644 index 000000000..d62ab18c3 Binary files /dev/null and b/content/posts/newsletter-012/textcamp.png differ diff --git a/content/posts/newsletter-012/tuitui-grass-field.jpeg b/content/posts/newsletter-012/tuitui-grass-field.jpeg new file mode 100644 index 000000000..a5c08a69b Binary files /dev/null and b/content/posts/newsletter-012/tuitui-grass-field.jpeg differ diff --git a/content/posts/newsletter-012/veloren-fire.gif b/content/posts/newsletter-012/veloren-fire.gif new file mode 100644 index 000000000..a06dcf764 Binary files /dev/null and b/content/posts/newsletter-012/veloren-fire.gif differ diff --git a/content/posts/newsletter-012/veloren-quadrupeds.png b/content/posts/newsletter-012/veloren-quadrupeds.png new file mode 100644 index 000000000..b20e17da3 Binary files /dev/null and b/content/posts/newsletter-012/veloren-quadrupeds.png differ diff --git a/content/posts/newsletter-012/veloren-sunrise.gif b/content/posts/newsletter-012/veloren-sunrise.gif new file mode 100644 index 000000000..675d9b116 Binary files /dev/null and b/content/posts/newsletter-012/veloren-sunrise.gif differ diff --git a/content/posts/newsletter-012/video-pong-tutorial.jpeg b/content/posts/newsletter-012/video-pong-tutorial.jpeg new file mode 100644 index 000000000..1d04801a3 Binary files /dev/null and b/content/posts/newsletter-012/video-pong-tutorial.jpeg differ diff --git a/content/posts/newsletter-012/voronator.png b/content/posts/newsletter-012/voronator.png new file mode 100644 index 000000000..3ae0aa962 Binary files /dev/null and b/content/posts/newsletter-012/voronator.png differ diff --git a/content/posts/newsletter-012/vulkan-renderer-prototype.jpeg b/content/posts/newsletter-012/vulkan-renderer-prototype.jpeg new file mode 100644 index 000000000..c45795444 Binary files /dev/null and b/content/posts/newsletter-012/vulkan-renderer-prototype.jpeg differ diff --git a/content/posts/newsletter-012/wonder-screenshot.png b/content/posts/newsletter-012/wonder-screenshot.png new file mode 100644 index 000000000..9317b7ffc Binary files /dev/null and b/content/posts/newsletter-012/wonder-screenshot.png differ diff --git a/content/posts/newsletter-012/zemeroth.jpeg b/content/posts/newsletter-012/zemeroth.jpeg new file mode 100644 index 000000000..60c5daa43 Binary files /dev/null and b/content/posts/newsletter-012/zemeroth.jpeg differ diff --git a/content/posts/newsletter-013/abstreet.png b/content/posts/newsletter-013/abstreet.png new file mode 100644 index 000000000..7488fd75c Binary files /dev/null and b/content/posts/newsletter-013/abstreet.png differ diff --git a/content/posts/newsletter-013/amethyst-logo.png b/content/posts/newsletter-013/amethyst-logo.png new file mode 100644 index 000000000..6d7116659 Binary files /dev/null and b/content/posts/newsletter-013/amethyst-logo.png differ diff --git a/content/posts/newsletter-013/bevy_logo.png b/content/posts/newsletter-013/bevy_logo.png new file mode 100644 index 000000000..22508c73c Binary files /dev/null and b/content/posts/newsletter-013/bevy_logo.png differ diff --git a/content/posts/newsletter-013/bevy_showcase.png b/content/posts/newsletter-013/bevy_showcase.png new file mode 100644 index 000000000..e93eed7a7 Binary files /dev/null and b/content/posts/newsletter-013/bevy_showcase.png differ diff --git a/content/posts/newsletter-013/cary_screenshot.png b/content/posts/newsletter-013/cary_screenshot.png new file mode 100644 index 000000000..eea6fc284 Binary files /dev/null and b/content/posts/newsletter-013/cary_screenshot.png differ diff --git a/content/posts/newsletter-013/chargrid-roguelike-tutorial-2020.png b/content/posts/newsletter-013/chargrid-roguelike-tutorial-2020.png new file mode 100644 index 000000000..2f707e4da Binary files /dev/null and b/content/posts/newsletter-013/chargrid-roguelike-tutorial-2020.png differ diff --git a/content/posts/newsletter-013/chillscapes_main_menu.png b/content/posts/newsletter-013/chillscapes_main_menu.png new file mode 100644 index 000000000..b0a71f7c0 Binary files /dev/null and b/content/posts/newsletter-013/chillscapes_main_menu.png differ diff --git a/content/posts/newsletter-013/crate-before-attack.jpeg b/content/posts/newsletter-013/crate-before-attack.jpeg new file mode 100644 index 000000000..dac7d9109 Binary files /dev/null and b/content/posts/newsletter-013/crate-before-attack.jpeg differ diff --git a/content/posts/newsletter-013/cute-c2-collision.gif b/content/posts/newsletter-013/cute-c2-collision.gif new file mode 100644 index 000000000..d1df8a9f6 Binary files /dev/null and b/content/posts/newsletter-013/cute-c2-collision.gif differ diff --git a/content/posts/newsletter-013/dwarf_seeks_fortune.png b/content/posts/newsletter-013/dwarf_seeks_fortune.png new file mode 100644 index 000000000..d8221d772 Binary files /dev/null and b/content/posts/newsletter-013/dwarf_seeks_fortune.png differ diff --git a/content/posts/newsletter-013/ecs-bench.png b/content/posts/newsletter-013/ecs-bench.png new file mode 100644 index 000000000..597b50ba6 Binary files /dev/null and b/content/posts/newsletter-013/ecs-bench.png differ diff --git a/content/posts/newsletter-013/egregoria.png b/content/posts/newsletter-013/egregoria.png new file mode 100644 index 000000000..ff52667b4 Binary files /dev/null and b/content/posts/newsletter-013/egregoria.png differ diff --git a/content/posts/newsletter-013/egui.png b/content/posts/newsletter-013/egui.png new file mode 100644 index 000000000..00101a6d5 Binary files /dev/null and b/content/posts/newsletter-013/egui.png differ diff --git a/content/posts/newsletter-013/event-chain-assets-graph.png b/content/posts/newsletter-013/event-chain-assets-graph.png new file mode 100644 index 000000000..4e8803ef0 Binary files /dev/null and b/content/posts/newsletter-013/event-chain-assets-graph.png differ diff --git a/content/posts/newsletter-013/football-manager.jpeg b/content/posts/newsletter-013/football-manager.jpeg new file mode 100644 index 000000000..c35c399d6 Binary files /dev/null and b/content/posts/newsletter-013/football-manager.jpeg differ diff --git a/content/posts/newsletter-013/garden.jpeg b/content/posts/newsletter-013/garden.jpeg new file mode 100644 index 000000000..cb6c473a2 Binary files /dev/null and b/content/posts/newsletter-013/garden.jpeg differ diff --git a/content/posts/newsletter-013/hexasphere.gif b/content/posts/newsletter-013/hexasphere.gif new file mode 100644 index 000000000..8795c345d Binary files /dev/null and b/content/posts/newsletter-013/hexasphere.gif differ diff --git a/content/posts/newsletter-013/index.md b/content/posts/newsletter-013/index.md new file mode 100644 index 000000000..d135156ec --- /dev/null +++ b/content/posts/newsletter-013/index.md @@ -0,0 +1,1318 @@ ++++ +title = "This Month in Rust GameDev #13 - August 2020" +date = 2020-09-07 +transparent = true ++++ + +Welcome to the 13th issue of the Rust GameDev Workgroup’s +monthly newsletter. +[Rust] is a systems language pursuing the trifecta: +safety, concurrency, and speed. +These goals are well-aligned with game development. +We hope to build an inviting ecosystem for anyone wishing +to use Rust in their development process! +Want to get involved? [Join the Rust GameDev working group!][join] + +You can follow the newsletter creation process +by watching [the coordination issues][coordination]. +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. +Feel free to send PRs about your own projects! + +[Rust]: https://rust-lang.org +[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 + +Table of contents: + +- [Rust GameDev Podcast](#rust-gamedev-podcast) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Meeting Minutes](#meeting-minutes) +- [Requests for Contribution](#requests-for-contribution) + + + +## [Rust GameDev Podcast][podcast] + +![text logo](podcast.jpeg) + +This month [Richard @patchfx Patching][richardpatching] started +[Rust GameDev Podcast][podcast]! + +> Over the lockdown period I have been working on a new podcast +> for Rust game developers. I have been interviewing indie teams +> and library creators, discussing custom engines, procedural generation, +> open source and the business of games development. + +- [The first episode][podcast-1] is an interview + with the team behind Veloren, an open-source multiplayer + voxel RPG written in Rust. + + Find out about the game's origin, its engine development, + pros and cons of a big open-source project, CI and build pipeline, + importance of artists, procedural generation, + community building, managing players' expectations, + and upcoming developments. + +- [The second episode][podcast-2] is an interview with Herbert Wolverson, + creator of [bracket-lib] (pka RLTK), [Rust Roguelike Tutorial][rltut], + and [Nox Futura][noxf]. + + A very wide-ranging interview covering many interesting topics: + where the bracket-lib came from and what the creator is doing now, + as well as practical questions and issues discovered + in the course of creating their game, [Nox Futura]. + Lots of interesting talk about a new Rust games development book + Herbert is writing, C++ vs Rust, learning Rust, code architecture and + ECS's in roguelikes, emergent behavior, and hilarious bugs in Dwarf Fortress. + +The show has been distributed on most major platforms +for you to listen and subscribe: +[Rust Game Dev Podcast (simplecast)](https://rustgamedev.com/), +[Apple Podcasts](https://podcasts.apple.com/gb/podcast/rust-game-dev/id1526304768), +[Spotify](https://open.spotify.com/show/7HRfGnTcXkLkQd9fxJbDGj), +[RSS Feed](https://feeds.simplecast.com/C6NQglnL), +[Google Podcasts](https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9DNk5RZ2xuTA). + +[podcast]: https://rustgamedev.com +[richardpatching]: https://richardpatching.com +[podcast-1]: https://rustgamedev.com/episodes/interview-with-team-veloren +[bracket-lib]: https://crates.io/crates/bracket-lib +[noxf]: https://thebracket.itch.io/nox-futura +[rltut]: http://bfnightly.bracketproductions.com +[podcast-2]: https://rustgamedev.com/episodes/interview-with-herbert-wolverson-bracket-lib + +## Game Updates + +### [Crate Before Attack][cba-site] + +[![Camera debugging in Crate Before Attack](crate-before-attack.jpeg)][cba-site] +_Debugging camera motion: highlighted areas are points of interest_ + +[Crate Before Attack][cba-site] by [koalefant (@CrateAttack)][@CrateAttack] +is a skill-based multiplayer game where frogs combat their friends +while navigating the landscape with their sticky tongues. + +A [playable browser build][cba-play] can be tried online. + +Recent changes are: + +- Training mode improvements, including a new map [Dungeon][cba-youtube-dungeon] + by [Kesha Astafyev][cba-spoon-tar]. +- [Better camera motion][cba-youtube-camera-motion]: + multiple points of interest are tracked dynamically. +- Improved GPU performance by merging multiple render passes into one. +- Added control hints. +- Numerous bugfixes and tweaks. + +More details are in [August DevLog-entry][cba-august-update]. + +[cba-site]: https://cratebeforeattack.com +[cba-youtube-dungeon]: https://youtu.be/cukyVXQ0n0c +[cba-youtube-camera-motion]: https://youtu.be/3y7Hfa-v3e8 +[cba-august-update]: https://cratebeforeattack.com/posts/20200831-august-update/ +[cba-play]: https://cratebeforeattack.com/play +[cba-spoon-tar]: https://www.behance.net/spoon_tar +[@CrateAttack]: https://twitter.com/CrateAttack + +### [Veloren][veloren] + +![Landscape](veloren-landscape1.jpeg) +_Landscape with new LoD and lighting_ + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In August, Veloren 0.7 was released! Airshipper, Veloren's launcher, also got +updated to 0.4.0. Veloren was featured in the inaugural episode of the [Rust +Game Dev Podcast][veloren-interview]. Although the 0.7 release party saw the +largest number of concurrent players at 57, it ran into some significant issues +which you can read about below. + +The largest merge in Veloren so far also happened in August. It included +monumental changes to lighting and added level of detail functionality to see +far-off mountains. Lots of work has been done on the animation, combat, SFX, and +UX front. Animations for movement and combat were added and improved. Work +continued on particle systems, which have been added to Veloren in places like +campfires, fireworks, and weapons. + +![Healing sceptre](veloren-sceptre.gif) +_Healing sceptre with the new particle system_ + +You can read more about some specific topics from August: + +- [Airshipper 0.4.0 Progress](https://veloren.net/devblog-79#airshipper-0-4-progress-by-songtronix) +- [Animation and Movement Updates](https://veloren.net/devblog-79#animation-and-movement-updates-by-slipped) +- [Particle Timing](https://veloren.net/devblog-80#particle-timing-by-lobster) +- 0.7 Release: [Party Statistics](https://veloren.net/devblog-81#0-7-release-party-statistics) + and [Kick Disaster](https://veloren.net/devblog-81#0-7-release-party-kick-disaster-by-xmac94x) +- [Lighting and World Changes](https://veloren.net/devblog-81#sharp-s-lighting-and-world-changes-branch) +- [0.8 Intro Meeting](https://veloren.net/devblog-82#0-8-intro-meeting) +- [Audio SFX](https://veloren.net/devblog-82#audio-with-ellinia) +- [Photo Gallery](https://veloren.net/devblog-83#photo-gallery) + +August's full weekly devlogs: "This Week In Veloren...": +[#79](https://veloren.net/devblog-79), +[#80](https://veloren.net/devblog-80), +[#81](https://veloren.net/devblog-81), +[#82](https://veloren.net/devblog-82), +[#83](https://veloren.net/devblog-83). + +In September, work on 0.8 will continue. Some large systems being worked on +include networking, improved persistence stability, and player experience. Game +design is working on improving the connection between the experience a new +player has, and the current game design. The in-progress 0.8 version will likely +be completed more quickly than 0.7, as to not include too many changes. + +[veloren]: https://veloren.net +[veloren-interview]: https://rustgamedev.com/episodes/interview-with-team-veloren + +### [A/B Street][abstreet] + +![Two-way cycletracks and shared left-turn lanes](abstreet.png) + +[A/B Street][abstreet] is a traffic simulation game exploring how small changes +to roads affect cyclists, transit users, pedestrians, and drivers. Any city +with OpenStreetMap coverage can be used! + +Some of this month's updates: + +- Multiple traffic signals can be edited together. +- An [API][abstreet-api] and tools were added, to control maps and simulation + from any language. +- [Michael Kirk][mkirk], a new team member, fixed HiDPI scaling issues in a + consistent way. +- Many new cities imported, with better support for countries that drive on the + left and support for using alternate languages from OpenStreetMap for roads + and buildings. +- Backwards compatibility for a player's edits to the map. +- Two-way cycletracks and roads with multiple direction changes. + +[abstreet]: https://abstreet.org +[abstreet-api]: https://dabreegster.github.io/abstreet/dev/api.html +[mkirk]: https://github.com/michaelkirk + +### [Egregoria] + +![Egregoria buildings screenshot](egregoria.png) + +[Egregoria]'s objective is to become a granular society simulation, +filled with fully autonomous agents interacting with their world in real time. +Egregoria was previously known as Scale, +but was renamed to fit the theme better. + +The [5th devlog][egregoria-blog-post] was published, talking about +the renaming, project management, buildings and scripting. + +A [Discord][egregoria-discord] server was launched to discuss the project. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/igzbl9/egregoria_devblog_5)_ + +[Egregoria]: https://github.com/Uriopass/Egregoria +[egregoria-blog-post]: http://douady.paris/blog/egregoria_5.html +[egregoria-discord]: https://discord.gg/CAaZhUJ + +### [Cary] + +[![Dodging bullets and carrying Cary to temporary safety](cary_screenshot.png)][Cary] + +In [Cary] the player has to bring the titular character to the exit by carrying +them or otherwise making sure they don't – nor the player themselves – +touch any of the traps. +Easier said than done when you have limited stamina and Cary keeps running +into spikes. + +Made with hecs and wgpu (no framework), but uses WebGL on the web +because of the current implementation status of WebGPU. + +Made during the [Extra Credits game jam][extra-credits-jam], +it's a rather small game. +It can be played in the browser or downloaded at [itch.io][Cary]. + +[Cary]: https://specificprotagonist.itch.io/cary +[extra-credits-jam]: https://itch.io/jam/extra-credits-game-jam-6 + +### [Way of Rhea] + +[![Anthropic's virtual booth at Play NYC](way-of-rhea-play-nyc.png)][Way of Rhea] +_Anthropic's virtual booth at [Play NYC]_ + +[Way of Rhea] is a puzzle platformer that takes place in a world where you can +only interact with items that match your current color. + +Way of Rhea has a [free Steam demo][Way of Rhea] temporarily available as part of +[Play NYC]! +The new demo includes a level that wasn't part of the Steam Game Festival, +showing off how circuit puzzles will work in the game. Since Play NYC +couldn't be in person this year, the devs temporarily themed this level to look +like last year's Play NYC venue, included placing virtual booths for other games +throughout the level. + +Follow [@AnthropicSt] or [@masonremaley] on Twitter or +[sign up for the mailing list][anthropic-newsletter] for updates. + +[Way of Rhea]: https://store.steampowered.com/app/1110620/Way_of_Rhea/ +[Play NYC]: https://www.play-nyc.com/ +[@AnthropicSt]: https://twitter.com/anthropicst +[@masonremaley]: https://twitter.com/masonremaley +[anthropic-newsletter]: https://www.anthropicstudios.com/newsletter/signup/tech + +### [vange-rs] + +![vangers-shadow](vangers-shadows.jpeg) + +[vange-rs] is the project of re-implementing the [Vangers] game (from 1998) +in Rust using modern development practices, parallel computations, and GPU. + +This month vange-rs got real-time shadows! +See [video on /r/rust_gamedev][vangers-shadow-video] and technical description +on the [Hybrid Shadows][vangers-shadow-blog] post of the blog. + +Another exciting development - the new bruteforce rendering technique allowing +to shift the camera behind the mechos as in 3rd person view. +See [video on /r/rust_gamedev][vangers-bars-video] and technical description on +the [Bar Painting][vangers-bars-blog] post of the blog. + +[Vangers]: https://en.wikipedia.org/wiki/Vangers +[vange-rs]: https://github.com/kvark/vange-rs +[vangers-shadow-video]: https://reddit.com/r/rust_gamedev/comments/i32p6r/realtime_hybrid_shadows_in_vangers +[vangers-shadow-blog]: https://kvark.github.io/vange-rs/2020/08/04/shadows.html +[vangers-bars-video]: https://reddit.com/r/rust_gamedev/comments/igejxy/vangers_3rd_person_camera +[vangers-bars-blog]: https://kvark.github.io/vange-rs/2020/08/29/bar-painting.html + +### [Garden][garden] + +![screenshot: concrete, trees, shadows](garden.jpeg) + +[Garden][garden] is an upcoming game centered around growing realistic plants. +Some of the updates from [the July & August devlog][garden-devlog]: + +- A new player inventory system; +- Better collision detection and camera movement; +- Minimalist, scrollable text-based GUI for choosing which species to plant + or the type of material to build with (or destroy) something; +- Plant growth now depends directly on the amount of light + every individual leaf receives, calculated on the GPU; +- Variable leaf alignment and ease of creating variety; +- Better bark, detailed trunks, and new species; +- Completely new lighting using GI. + +[garden]: https://epcc.itch.io/garden +[garden-devlog]: https://cyberplant.xyz/posts/july-august/ + +### [Chillscapes][chillscapes-itch] + +![Chillscapes Main Menu](chillscapes_main_menu.png) + +[Chillscapes][chillscapes-github] is a lo-fi +rhythm experience created for the [NEOC#03 Rhythm Game Jam][neoc]. Using +layerable lo-fi music tracks, the game has you tap with the rhythm of the loops +being added, before changing the music up by adding another loop into the mix. +Last week, [a retrospective update was published][chillscapes-retrospective] +reflecting on what the developer's takeaways were from the experience. + +Chillscapes is written using an early-in-development 2d engine, +[Kludgine][kludgine]. For audio playback, rodio was utilized. The source code is +[available on GitHub][chillscapes-github]. + +[chillscapes-itch]: https://khonsulabs.itch.io/chillscapes +[chillscapes-github]: https://github.com/khonsulabs/chillscapes +[chillscapes-retrospective]: https://community.khonsulabs.com/t/chillscapes-retrospective-and-kludgine-update/28 +[neoc]: https://itch.io/jam/neoc03-rhythm-jam +[kludgine]: https://github.com/khonsulabs/kludgine + +### [Dwarf Seeks Fortune][dsf-github] + +[![Dwarf Seeks Fortune](dwarf_seeks_fortune.png)][dsf-github] +_Collect all keys to unlock the door to the next level_ + +[Dwarf Seeks Fortune][dsf-github] is a puzzle-platformer made with the Amethyst game +engine. Its developer, Jazarro, has partnered with the Amethyst organization +to make it an official Amethyst showcase game. It aims to be a learning +resource for anyone looking to get started with Amethyst. + +The game currently sports a growing feature set, two playable levels and an +early version of an integrated level editor. It is ready for your +contributions, so if you're interested, check out the +[contributor's guide][dsf-contributing] or the [good first issues][dsf-good-first-issues]. +If you have any questions, open an issue on GitHub or approach +Jazarro on [the Amethyst discord][amethyst-discord]. + +[dsf-github]: https://github.com/amethyst/dwarf_seeks_fortune +[dsf-contributing]: https://github.com/amethyst/dwarf_seeks_fortune/blob/master/CONTRIBUTING.md +[dsf-good-first-issues]: https://github.com/amethyst/dwarf_seeks_fortune/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[kv-ii]: https://en.wikipedia.org/wiki/King%27s_Valley_II +[amethyst-discord]: https://discord.com/invite/amethyst + +### [Akigi][akigi] + +[Akigi][akigi] is a WIP online multiplayer game. + +This month was mostly dedicated to the custom engine's scenery placement tool +([video demo](https://devjournal.akigi.com/august-2020/082-2020-08-30.html)). +Some of the updates: + +- [Terrain code refactoring and other required groundwork](https://devjournal.akigi.com/august-2020/080-2020-08-16.html). +- [Mouse-terrain intersection](https://devjournal.akigi.com/august-2020/082-2020-08-30.html#mouse-terrain-intersection). +- [Switching between Play and Place modes](https://devjournal.akigi.com/august-2020/082-2020-08-30.html#play-mode-place-mode). +- [Custom UI system](https://devjournal.akigi.com/august-2020/082-2020-08-30.html#user-interfaces). + +Full devlogs: +[#078](https://devjournal.akigi.com/august-2020/078-2020-08-02.html), +[#079](https://devjournal.akigi.com/august-2020/079-2020-08-09.html), +[#080](https://devjournal.akigi.com/august-2020/080-2020-08-16.html), +[#081](https://devjournal.akigi.com/august-2020/081-2020-08-23.html), +[#082](https://devjournal.akigi.com/august-2020/082-2020-08-30.html). + +[akigi]: https://akigi.com + +### [SIMple Physics][simple-physics-site] + +[![SIMple Mechanics wave preset](simple-physics-wave.gif)][simple-physics-gifs] +_One of SIMple Mechanic's Lua presets, a colorful wave of bouncing circles_ + +[SIMple Physics][simple-physics-site] by [@mkhan45] is a set of educational physics +simulators meant to help students and teachers conduct labs without expensive equipment +or in person classes. Each simulator uses serializable graphs, object inspection, +Lua scripting, and a few other features to help students learn. Currently, there +is a simulator for mechanics/projectile motion and one for universal gravitation, +but the goal is to include one for electronics/magnetism and one for waves/optics. + +Written in Rust using `ggez`, `specs`, `imgui-rs`, and `nphysics`, +this project's goals include: +performance, accessibility/portability, ease of use, and extensibility. + +To find out more about the project, visit the site [here][simple-physics-site], +watch some cool gifs [here][simple-physics-gifs], or read the GitHub page +[here][simple-physics-github]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/ibk2rf/announcing_simple_physics)_ + +[simple-physics-site]: https://mkhan45.github.io/SIMple-Physics/ +[simple-physics-gifs]: https://mkhan45.github.io/SIMple-Physics/posts/Gifs/ +[simple-physics-github]: https://mkhan45.github.io/SIMple-Physics/posts/Gifs/ +[@mkhan45]: https://github.com/mkhan45 + +## Learning Material Updates + +### [Writing NES Emulator in Rust][rust_nes_tutorial] + +![writing nes emulator](nes_emulator_rust.png) + +"Writing NES Emulator in Rust" is a tutorial by [@bugzmanov] on creating a fully +capable NES/Famicom emulator from scratch in the online book format. It walks +through major steps of emulating NES platform components to run +all-time classics, like Pacman, Donkey Kong, and Super Mario Bros. + +It's a fun way of getting into hardware internals and fundamentals of +computer systems. The tutorial also covers game-dev basics and how to +work with graphics in Rust using [SDL2][sdl2] library. + +[rust_nes_tutorial]: https://bugzmanov.github.io/nes_ebook/index.html +[@bugzmanov]: https://twitter.com/bugzmanov +[sdl2]:https://www.libsdl.org/ + +### [Beginning Game Development with Amethyst][rustconf-talk-video] + +[![youtube preview](rustconf-amethyst-talk.png)][rustconf-talk-video] +_Click to [watch the talk][rustconf-talk-video]_ + +Getting started with Rust + gamedev can be intimidating. At +[RustConf 2020][rust-conf-2020], [Micah Tigley] gave a talk about their experience +beginning game development using the [Amethyst][amethyst-link] game engine and +learning about ECS by implementing examples that aim to be accessible for +beginners. + +Supporting blog posts for the talk: + +- ["Creating a Simple Spritesheet Animation with Amethyst"][micah-blog-part1] +- ["Running Animation"][micah-blog-part2] +- ["Camera Follow System"][micah-blog-part3] + +The source code for the [demo can be found here][micah-demo-src]. + +[Micah Tigley]: https://twitter.com/micah_tigley +[rustconf-talk-video]: https://www.youtube.com/watch?v=GFi_EdS_s_c +[micah-blog-part1]: https://mtigley.dev/posts/sprite-animations-with-amethyst +[micah-blog-part2]: https://mtigley.dev/posts/running-animation +[micah-blog-part3]: https://mtigley.dev/posts/camera-follow-system +[micah-demo-src]: https://github.com/tigleym/sprite_animations_demo +[amethyst-link]: https://amethyst.rs/ +[rust-conf-2020]: https://rustconf.com + +### [Chargrid Roguelike Tutorial 2020][chargrid-roguelike-tutorial-2020] + +![Chargrid Roguelike Tutorial 2020](chargrid-roguelike-tutorial-2020.png) + +[Chargrid][chargrid] by [@stevebob] is a collection of crates for building +applications with text UIs that run in terminals, graphical windows, and web +pages. It was made specifically with roguelike development in mind, though is +general-purpose enough to be used for other applications. + +[Chargrid Roguelike Tutorial 2020][chargrid-roguelike-tutorial-2020] +is a tutorial series about making a traditional roguelike from scratch +using chargrid for rendering and input handling. Reference code is available in +[this git repo][chargrid-roguelike-tutorial-2020-reference-code] +organized with one branch for each subsection. + +[chargrid-roguelike-tutorial-2020]: https://gridbugs.org/roguelike-tutorial-2020/ +[chargrid-roguelike-tutorial-2020-reference-code]: https://github.com/stevebob/chargrid-roguelike-tutorial-2020 +[chargrid]: https://github.com/stevebob/chargrid/ +[@stevebob]: https://github.com/stevebob + +### [Event Chaining as a Decoupling Method in ECS][event-chaining] + +![graph: FileSignal -> AssetSignal -> AssetEvent](event-chain-assets-graph.png) + +[@jojolepro] released a [blog post][event-chaining] that provides +an in-depth look at how using events in entity-component-system architectures +can improve system reusability dramatically. + +Using events in this way also allows for: + +- easier testing, +- additional configurability, +- possible performance improvements, +- higher reusability - especially if using generics. + +The blog also has an [RSS feed][jojolepro-rss] and more in-depth posts about +game development are planned. + +[event-chaining]: https://www.jojolepro.com/blog/2020-08-20_event_chaining/ +[jojolepro-rss]: https://www.jojolepro.com/blog/blog.xml +[@jojolepro]: https://github.com/jojolepro + +## Library & Tooling Updates + +### [ecs_bench_suite] + +![Summary results table](ecs-bench.png) +_The full benchmark report is available [here][ecs_report]_ + +This month [@TomGillen] (author of the [Legion][legion] ECS) released +[ecs_bench_suite] - a suite of benchmarks designed to test and compare +Rust ECS library performance across a variety of challenging circumstances. +Later, the project was adopted by the Rust GameDev WG +so that all Rust ECS developers can converge on a neutral, +community-maintained benchmark. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/icczxh/ecs_bench_suite)_ + +[ecs_bench_suite]: https://github.com/rust-gamedev/ecs_bench_suite +[@TomGillen]: https://github.com/TomGillen +[legion]: https://github.com/amethyst/legion +[ecs_report]: https://rust-gamedev.github.io/ecs_bench_suite/target/criterion/report/index.html + +### [Rapier: 2D and 3D Physics Engines Focused on Performance][rapier-august] + +[![Rapier logo](rapier-logo.svg)][Rapier] + +[Rapier] is a new set of 2D and 3D physics engines written 100% in Rust. +It is 5 to 10 times faster than [nphysics], close to the performances of the +CPU version of PhysX, and often slightly faster than Box2D. + +[For its first release][rapier-august] Rapier includes: + +- rigid-body dynamics; +- colliders and sensors; +- joint constraints; +- optional serialization of the physics state; +- optional cross-platform determinism on IEEE-754 compliant targets; +- optional explicit SIMD and parallelism; +- JavaScript bindings with official NPM packages. + +This new physics engine is developed by the recently created [Dimforge] +single-member Open-Source company [replacing][dimforge-replace] the former +Rustsim organization created on GitHub by [@sebcrozet]. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/igkul2/announcing_rapier_2d_and_3d_physics_engines/)_ + +[Rapier]: https://rapier.rs +[rapier-august]: https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine +[dimforge-replace]: https://www.dimforge.com/blog/2020/08/18/rustsim-becomes-dimforge +[Dimforge]: https://dimforge.com +[@sebcrozet]: https://github.com/sebcrozet/ +[nphysics]: https://nphysics.org + +### [NeoCogi's Libraries][neocogi-repo] + +![Jude3D](jude3d.jpeg) + +[Jude3D](https://neocogi.com) is a web based 3D sculpting application. +It's a WebAssembly application, written in C/C++ and compiled using Emscripten +but after much thinking, the authors decided to move the development to Rust! + +Many problems arise when moving existing C/C++/WebAssembly code to Rust. +The two most important ones: + +- The new code should still interop with the already existing code. +- Payload size matters on the web: your WASM app should be as small as possible. + +These led the authors to drop using Rust's std in favor to their own libs (`!#[no_std]`), +at least until the std library crates are split up accordingly and stabilized, +for example, the `alloc` crate. + +The good news is that they are +[releasing most of the libraries as they make them as open source][neocogi-repo]! +Also, a [WASM glfw3/GLES2 example][neocogi-example-src] that showcases the libs +is included ([live demo][neocogi-example-demo]). + +[Jude3D in action]: https://twitter.com/weloraiby/status/1167228654922928130 +[neocogi-repo]: https://github.com/NeoCogi +[neocogi-example-src]: https://github.com/NeoCogi/rs-glfw3-gles2-test +[neocogi-example-demo]: https://neocogi.github.io/rs-glfw3-gles2-test + +### [cute-c2] + +![cute-c2 collision](cute-c2-collision.gif) + +cute-c2 is a 2D collision detection library that has had its first release to +[crates.io][cute-c2]. The library is a Rust wrapper around the [c2.h] library. + +The library can detect collisions between circles, rectangles, capsules and +up to eight-sided convex polygons. There are also functions for manifold +generation, the GJK algorithm, and ray casting operations. There is an example +program in the repository. + +[cute-c2]: https://crates.io/crates/c2 +[c2.h]: https://github.com/RandyGaul/cute_headers/blob/master/cute_c2.h + +### [hexasphere] v1.0 + +![hexasphere example gif](hexasphere.gif) + +The [hexasphere] library provides a customizable interface for subdividing 3D +triangle meshes. Custom and stateful interpolation functions can be implemented +as well as per-vertex attributes. + +All that's required to define a base shape are the initial vertices, triangles +based on the indices of the vertices in the initial vertices, and numbered +edges. As long as the winding of the triangles remains consistent throughout +the base mesh, all of the resulting triangles will retain that winding. + +This library also provides a few interesting base shapes (which can be used alone +if the shape is not subdivided): +Icosahedron, Tetrahedron, Cube, Square Plane, Triangle Plane +(all of which are pictured above). + +[hexasphere]: https://crates.io/crates/hexasphere + +### [blitz-path](https://github.com/BezPowell/blitz-path) + +[blitz-path](https://github.com/BezPowell/blitz-path) is a new crate providing +an implementation of the [JPS](https://en.wikipedia.org/wiki/Jump_point_search) +pathfinding algorithm. + +JPS is an optimization of the A* search algorithm for uniform-cost grids, which +are common in games. While fully functional, the code is still in an early +state and any suggestions for improvements - especially on how best to +integrate it with the existing ecosystem - are greatly appreciated. + +### [This Month in Mun][mun-august] + +[![Mun logo](mun-logo.png)][Mun] + +[Mun] is a scripting language for gamedev focused on quick iteration times +that is written in Rust. + +[August updates][mun-august] include: + +- compiler support for type aliases; +- shared diagnostics between compiler and language server; +- support for the official [inkwell][mun-inkwell] crate; +- refactors and quality of life improvements. + +[Mun]: https://mun-lang.org +[mun-august]: https://mun-lang.org/blog/2020/08/30/this-month-august/ +[mun-inkwell]: https://crates.io/crates/inkwell + +### [inline_tweak] + +![Demo with moving traffic lights](inline-tweak.gif) + +[inline_tweak] by [@Uriopass] is a library that allows you to +tweak at runtime any number literal directly from your code. +It works by parsing the file when a change occurs +(inspired by [this blogpost][tuxedolabs-post] from Tuxedo labs). +Usage example: + +```rust +use inline_tweak::tweak; +loop { + // Try changing the value while the application is running + println!("{}", tweak!(3.14)); +} +``` + +A `watch!()` macro that sleeps until the file is modified is also provided. + +The library is minimal, only requiring the `lazy_static` dependency +to hold modified values. +In release mode, the tweaking code is disabled and compiled away. + +[inline_tweak]: https://crates.io/crates/inline_tweak +[@Uriopass]: https://github.com/Uriopass +[tuxedolabs-post]: http://blog.tuxedolabs.com/2018/03/13/hot-reloading-hardcoded-parameters.html + +### [yacurses] + +[yacurses] by [@Lokathor] is a cross-platform curses bindings crate that's +small, simple, easy to understand, and most importantly safe to use. +It wraps over `ncurses` on Unix and a bundled `pdcurses` on Windows. +If you're looking to make a terminal-based roguelike +(or any other terminal-based game), give it a try. + +[yacurses]:https://lib.rs/crates/yacurses +[@Lokathor]: https://github.com/Lokathor + +### [SPIR-Q] v0.4.6 + +[SPIR-Q] is a light-weight shader reflection library, which allows you to query +the types, offsets, sizes and even names in your shaders procedurally. + +This month v0.4.2..v0.4.6 versions were released. +Some of the updates: + +- Specialization constants enumeration. +- Dynamically sized multi-binding support. +- Improved entrypoint debug printing. +- Better manifest merging method for pipeline construction. +- Bugfixes and various small API improvements. + +_Discussions: [/r/rust_gamedev][spirq-discussion]_ + +[SPIR-Q]: https://github.com/PENGUINLIONG/spirq-rs +[spirq-discussion]: https://reddit.com/r/rust_gamedev/comments/i6hxh6/spirq_042 + +### [Inline SPIR-V] + +![inline-spirv](inline-spirv-demo.png) + +[Inline SPIR-V] is a single-crate build-time shader compilation library based on +shaderc which provides procedural macros to help you translate shader sources, +in either GLSL or HLSL, inline or from-file, into SPIR-Vs and embed the SPIR-Vs +right inside your code as `u32` slices. Despite basic shader compilation, +`inline-spirv` also support `#include` directives, macro substitution, +post-compile optimization, as well as descriptor auto-binding. + +_Discussions: [/r/rust_gamedev][inline-spirv-discussion]_ + +[Inline SPIR-V]: https://github.com/PENGUINLIONG/inline-spirv-rs +[inline-spirv-discussion]: https://reddit.com/r/rust_gamedev/comments/ic1005/inline_spirv + +### [rspirv-reflect] v0.1 + +![Traverse Research banner](traverse-research-banner.png) + +[Traverse Research] has created the [rspirv-reflect] library to replace +their very basic use-case of the existing [spirv-reflect-rs] / [spirv-reflect] +libraries that are already out there. The current iteration of `rspirv-reflect` +is pretty minimal, but it allows you to extract the binding setup from a SPIR-V +binary. `rspirv-reflect` supports the latest version of SPIR-V (version 1.5 as +of writing) and it also supports all the new shader stages (both ray tracing +and mesh/task shaders) as well as the existing ones. + +Traverse Research wanted to reduce their reliance on C and C++ unsafe +libraries and at the same time they needed to support newer features that were +slow to become available in the existing `spirv-reflect` library. The primary +use-case for this library is in conjunction with the Rust wrapper around the +DirectX Shader Compiler ([dxc]), called [hassle-rs] that Traverse Research +also built. + +[Traverse Research]: https://traverseresearch.nl +[rspirv-reflect]: https://github.com/Traverse-Research/rspirv-reflect +[spirv-reflect]: https://github.com/KhronosGroup/SPIRV-Reflect +[spirv-reflect-rs]: https://github.com/gwihlidal/spirv-reflect-rs +[hassle-rs]: https://github.com/Traverse-Research/hassle-rs +[dxc]: https://github.com/microsoft/DirectXShaderCompiler + +### [gfx-rs][gfx-repo] and [wgpu][wgpu-site] + +![wgpu-rs water](wgpu-water.gif) +_wgpu-rs's [water example][wgpu-water]_ + +gfx-rs project and wgpu ecosystem have observed the release of 0.6 versions! 🎉 + +Some of the updates: + +- Reworked project structure: + - `wgpu-core` - a safe pure-Rust internal API, implementing WebGPU specification; + - `wgpu-rs` - the idiomatic Rust wrapper; + - `wgpu-native` - the C API wrapper, aiming to be compatible with [Dawn]; + - Gecko and Servo - for implementing WebGPU API in the browsers. +- Ability to record API traces, replay them on a different machine, + and run data-driven tests. +- `write_buffer` and `write_texture` for update the GPU data + without intermediate staging buffers or encoders. +- A number of powerful native-only extensions, such as descriptor indexing, + as well as web-compatible extensions like depth-clamping. +- [naga] v0.2 - an experimental shader translation library. +- The [showcase gallery](https://wgpu.rs/#showcase) was updated. + +Read about the details on [gfx-rs blog](https://gfx-rs.github.io/2020/08/18/release-0.6.html). + +[@sothr](https://github.com/sothr) has reworked the +[wgpu instancing tutorial][wgpu-instancing-tutor]. +See discussion at [/r/rust_gamedev][wgpu-instancing-reddit]. + +[gfx-repo]: https://github.com/gfx-rs/gfx +[wgpu-site]: https://wgpu.rs +[wgpu-water]: https://github.com/gfx-rs/wgpu-rs/tree/master/examples/water +[wgpu-instancing-tutor]: https://sotrh.github.io/learn-wgpu/beginner/tutorial7-instancing/#the-instance-buffer +[wgpu-instancing-reddit]: https://reddit.com/r/rust_gamedev/comments/i8np5v/simplified_instancing_tutorial_learn_wgpu +[naga]: https://github.com/gfx-rs/naga +[Dawn]: https://dawn.googlesource.com/dawn + +### [KAS] v0.5 and [KAS-text] v0.1 + +![KAS text layout](kas-text-layout.png) + +[KAS] by [@dhardy] is a general purpose UI toolkit; its +initial aim is "old school" desktop apps with a good keyboard and touchscreen +support. Unlike many modern immediate-mode UIs, KAS's widgets retain state, +allowing minimal per-frame updates. KAS supports embedded WebGPU graphics now, +and will (eventually) support being embedded within other contexts (requiring +only a supply of input events and implementation of some basic graphics routines). + +KAS v0.5 switches to a new crate for text layout, +[KAS-text]. KAS-text is a text layout +engine supporting multi-line editing, shaping and bidirectional text; future +versions will also support formatting. KAS-text is not tied to any particular +raster or render system; its positioned-glyph output is relatively easy to +adapt to crates like `wgpu_glyph` and `gfx_glyph`. +For more, see the article ["Why I created KAS-text"][kas-article]. + +[KAS]: https://github.com/kas-gui/kas +[KAS-text]: https://github.com/kas-gui/kas-text +[kas-article]: https://kas-gui.github.io/blog/why-kas-text.html +[@dhardy]: https://github.com/dhardy + +### [Egui] + +![Egui](egui.png) + +[Egui] is a highly portable immediate mode GUI library in pure Rust. +Egui can be integrated anywhere you can paint textured triangles. +You can compile Egui to WASM and render it on a web page using [egui_web] +or compile and run natively using [egui_glium]. + +Check out the [Egui web demo](https://emilk.github.io/egui/index.html). + +Example: + +```rust +Window::new("Debug").show(ui.ctx(), |ui| { + ui.label(format!("Hello, world {}", 123)); + if ui.button("Save").clicked { + my_save_function(); + } + ui.text_edit(&mut my_string); + ui.add(Slider::f32(&mut value, 0.0..=1.0).text("float")); +}); +``` + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/hzwvsk/emigui_deserves_more_love)_ + +[Egui]: https://github.com/emilk/egui/ +[egui_glium]: https://crates.io/crates/egui_glium +[egui_web]: https://crates.io/crates/egui_web + +### [voxel-mapper] + +![Demo: some terrain painted as grass, snow, dirt, etc](voxel-mapper.jpeg) + +[voxel-mapper] is a library and in-game editor for voxel maps, smooth or cubey. +The ultimate goal of the project is to make it easy for artists and programmers +alike to generate volumetric game content, either manually or procedurally. +The library's author [@bonsairobo] has also written a couple posts: + +- ["Smooth Voxel Mapping: a Technical Deep Dive on Real-time Surface Nets and Texturing"][voxel-post-tech] +- ["A 3rd Person Camera in a Complex Voxel World"][voxel-post-cam] + +Upcoming on the roadmap are procedural generation algorithms for generating +maps, new kinds of voxels, and graphical improvements. Currently, the library +and editor depend on the Amethyst engine version 0.15, but there is a desire to +make the library engine-agnostic. Contributions are welcome! + +[voxel-mapper]: https://github.com/amethyst/voxel-mapper +[@bonsairobo]: https://github.com/bonsairobo +[voxel-post-tech]: https://medium.com/@bonsairobo/smooth-voxel-mapping-a-technical-deep-dive-on-real-time-surface-nets-and-texturing-ef06d0f8ca14 +[voxel-post-cam]: https://medium.com/@bonsairobo/a-3rd-person-camera-in-complex-voxel-world-523944d5335c + +### [Bevy Engine][bevy] + +[![bevy logo](bevy_logo.png)](https://bevyengine.org/) + +[Bevy][bevy] by [@cart] is a brand new, refreshingly simple data-driven +game engine built in Rust. It aims to be: + +- **Capable**: Offer a complete 2D and 3D feature set. +- **Simple**: Easy for newbies to pick up, but infinitely flexible + for power users. +- **Data Focused**: Data-oriented architecture using + the Entity Component System paradigm. +- **Modular**: Use only what you need. Replace what you don't like. +- **Fast**: App logic should run quickly, and when possible, in parallel. +- **Productive**: Changes should compile quickly ... waiting isn't fun. + +These last few weeks have been big for the Bevy project: + +- Bevy was announced and [open sourced on GitHub][bevy]. +- Bevy's features were introduced in the ["Introducing Bevy"][bevy-intro] + blog post. +- Had a staggering number of people join the community. + This required some quick planning to handle the new size, + which they outlined in the [Scaling Bevy][bevy-scaling] blog post. +- Added an official [awesome-bevy repo][awesome-bevy] + with a huge number of community plugins, games, apps, and learning materials. +- Rapier, a new pure-rust physics engine, + released an [official Bevy plugin][bevy-rapier]. +- Thanks to the generosity of individuals and companies, they quickly met + their first two funding goals on @cart's [Github Sponsors page][bevy-spnsors]: + "sustainable development" and "@cart makes minimum wage working on Bevy". +- Bevy received a glowing review from the Amethyst Engine team and they agreed + to collaborate in certain areas. + See the [Addressing the Elephant in the Room][bevy-amethyst] + thread on the Amethyst forum for more details. + +Bevy users started sharing their work +on the [Bevy Discord showcase channel][bevy-discord-showcase]: + +![bevy showcase](bevy_showcase.png) + +In addition to the initial Bevy GitHub release, 114 pull requests +were merged this month. Some highlights: + +- A custom [async task system for Bevy][bevy-pr-async], + which significantly improves CPU usage and paves the way for future async work. +- Refactored data-driven ECS shader code to make it more maintainable, fix some bugs, + and ready to be optimized via the ECS change detection apis. +- Support for "logical or" ECS queries as a compliment to the default "logical and". +- Numerous CI improvements. +- Use shaderc to compile shaders for iOS builds. +- GLTF loading improvements. + +Bevy also made good progress on its three focus areas: + +- [Editor-Ready UI](https://github.com/bevyengine/bevy/issues/254) +- [Physically Based Rendering (PBR)](https://github.com/bevyengine/bevy/issues/179) +- [Scenes](https://github.com/bevyengine/bevy/issues/255) + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/i7bcwu/introducing_bevy), +[hacker news](https://news.ycombinator.com/item?id=24123283), +[twitter](https://twitter.com/cart_cart/status/1292903435155599361), +[amethyst forum](https://community.amethyst.rs/t/bevy-engine-addressing-the-elephant-in-the-room)_ + +[bevy]: https://bevyengine.org +[@cart]: https://github.com/cart +[bevy-intro]: https://bevyengine.org/news/introducing-bevy +[bevy-scaling]: https://bevyengine.org/news/scaling-bevy +[awesome-bevy]: https://github.com/bevyengine/awesome-bevy +[bevy-rapier]: https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine/#reaching-out-to-other-communities-bevy-and-javascript +[bevy-spnsors]: https://github.com/sponsors/cart +[bevy-amethyst]: https://community.amethyst.rs/t/bevy-engine-addressing-the-elephant-in-the-room +[bevy-discord-showcase]: https://discord.com/channels/691052431525675048/692648638823923732 +[bevy-pr-async]: https://github.com/bevyengine/bevy/pull/384 + +### [Minigene][minigene] + +[Minigene][minigene] is a tiled and ASCII game engine made by [@jojolepro]. +It allows to very simply create complex games running on desktop as well as +in the browser. + +While it is still under heavy development, a lot can be done already: + +- Easily create ECS systems. +- Create tiled and ASCII entities. +- Create GUI elements. +- Move entities around with A\* pathfinding. +- and much more! + +[minigene]: https://www.github.com/jojolepro/minigene + +### Tetra + +[Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month, +versions [0.4.1][tetra-041] and [0.4.2][tetra-042] were released, featuring: + +- Improved Serde support; +- Various fixes and improvements to the built-in `Camera` type; +- Many documentation improvements, based on user feedback. + +In addition, Tetra 0.5 is planned for release in early September. For more +information on the upcoming changes, see the [changelog][tetra-changelog]. + +[tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-041]: https://twitter.com/17cupsofcoffee/status/1289857217198317568 +[tetra-042]: https://twitter.com/17cupsofcoffee/status/1294316642680426497 +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md + +### [Piston] + +![text logo](piston-logo.png) + +[Piston] is a modular game engine written in Rust. + +A new [Piston Discord Channel] has been set up +for the Piston project. + +Piston consists of a core library "piston" which itself are composed of +smaller libraries for abstracting input, window and event loop. +This design helps reducing breaking changes in the ecosystem. + +The core library `pistoncore-input` is now stabilized and reached 1.0! +This is the most important core abstraction, because it glues all +libraries that are not independent of the core. + +[Piston]: https://github.com/pistondevelopers/piston +[Piston Discord Channel]: https://discord.gg/TkDnS9x + +------ + +[Dyon] is a rusty dynamically typed scripting language. +It is developed and maintained as part of the Piston project, +but can be used as a standalone library. + +Dyon is designed from the bottom up to be a good gamedev scripting language for Rust. +It uses a lifetime checker instead of garbage collection, a mutability checker, +optional namespaces and ad-hoc types, named argument syntax, +4D vectors and HTML colors, plus a lot more features! + +Recently, Dyon got better macro integration for native Rust types +using `#` as a prefix. +Here is an example of this feature is being tested in +an experimental offline 3D renderer (not open sourced): + +```text +// Called by `set_simple(scene: _, sdf: _, id: _)`. +dyon_fn!{fn set_simple__scene_sdf_id( + scene: #&mut SimpleScene, + sdf: #&Sdf, + id: f64 +) { + scene.sdfs[id as usize] = sdf.clone() +}} +``` + +To follow updates on Dyon, check out the subreddit [/r/dyon]. + +[Dyon]: https://github.com/pistondevelopers/dyon +[/r/dyon]: https://reddit.com/r/dyon/ + +------ + +[Piston-Graphics] is a library for 2D graphics, written in Rust, +that works with multiple backends. + +`Stencil::Increment` has been added and the ecosystem +has been updated to the latest version. + +[Piston-Graphics]: https://github.com/pistondevelopers/graphics + +------ + +The research branch of the Piston project, AdvancedResearch, +has released a new ECS library [Nano-ECS]. + +This ECS design stores all components in a single array +and uses bit masks for enabling/disabling components. +An entity can have maximum 64 components and must be initialized +with all components it uses in the future. +Each entity has a slice into the array that stores all components. +The `World` object, `Component` and systems are generated using macros. + +One research project with Nano-ECS is to prototype a UI framework +for Rust with a UI editor (not open sourced yet). +This project uses Piston-Graphics by default, +but can generate draw commands for processing by other 2D APIs. +It is also possible to override rendering of widgets for +custom looks with Piston-Graphics, which is often useful in gamedev. +Recently, this project has gotten to a place where +[tree-view interaction] is working. + +You can follow development at [@PistonDeveloper at Twitter]. + +[@PistonDeveloper at Twitter]: https://twitter.com/PistonDeveloper +[tree-view interaction]: https://twitter.com/PistonDeveloper/status/1299840279374110720 +[Nano-ECS]: https://github.com/advancedresearch/nano_ecs + +### [Amethyst v0.15.1][amethyst-v0-15-1-post] + +![logo](amethyst-logo.png) + +[Amethyst][amethyst] is a game engine and tool-set +for ambitious game developers. + +This month a [v0.15.1 version was released][amethyst-v0-15-1-post]. +Updates include: + +- New book chapters for [UI][amethyst-ui] and [Tiles][amethyst-tiles]; +- [Updated examples][amethyst-examples], with special attention to the pong example; +- Switch to [GitHub Actions for CI][amethyst-ga]; +- Lots of API improvements and bug fixes. + +For more details see the [full changelog][amethyst-changelog]. + +v0.16 plans include a full migration to the [Legion ECS][legion] +and a big site face lift. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/ibvheq/amethyst_engine_v0151)_ + +[amethyst]: https://amethyst.rs +[amethyst-v0-15-1-post]: https://amethyst.rs/posts/release-0.15.1 +[amethyst-examples]: https://github.com/amethyst/amethyst/tree/v0.15.1/examples +[amethyst-ui]: https://book.amethyst.rs/stable/ui.html +[amethyst-tiles]: https://book.amethyst.rs/stable/tiles.html +[amethyst-ga]: https://github.com/amethyst/amethyst/blob/v0.15.1/.github/workflows/ci.yml +[amethyst-changelog]: https://github.com/amethyst/amethyst/blob/master/docs/CHANGELOG.md#0151---2020-08-14 + +### [starframe] + +![Current state of starframe graphics and physics](starframe-demo.gif) + +[starframe] by [@moletrooper] is a work-in-progress 2D game engine +for physics-y sidescrolling games. This month it received +[an experimental graph-based entity system][sf-graph-post]. + +The next area of focus is going to be fleshing out the physics with +generalized constraints, which will enable things like friction and joints. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/iju3xq/starframe_devlog_architecture_ecs_graph/), +[twitter](https://twitter.com/moletrooper/status/1300034941816897542)_ + +[starframe]: https://github.com/moletrooper/starframe +[@moletrooper]: https://twitter.com/moletrooper +[sf-graph-post]: https://moletrooper.github.io/blog/2020/08/starframe-1-architecture/ + +### [mochi] + +![A running app on a physical device](mochi.jpg) + +[mochi] by [@richardanaya] is a game engine oriented toward +low-power mobile Linux phones/tablets. +It's written in Rust and uses Gtk and Cairo. +All drawing is done with an [Cairo Context][cairo-context] that mochi +has extended to do some really [common graphics operations][mochi-cairo]. + +This project is super alpha but usable. +Current features include: touch, screen rotation, atlases, sounds. + +[pinephone-cairo-game-starter][mochi-start] is a starter for creating +a Cairo-based game in Rust for [PinePhone][pinephone-wiki] + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/i2389n/how_to_build_a_pinephone_game_using_rust)_ + +[mochi]: https://github.com/richardanaya/mochi +[@richardanaya]: https://github.com/richardanaya +[pinephone-wiki]: https://en.wikipedia.org/wiki/PinePhone +[mochi-start]: https://github.com/richardanaya/pinephone-cairo-game-starter +[cairo-context]: https://gtk-rs.org/docs/cairo/struct.Context.html +[mochi-cairo]: https://docs.rs/mochi/latest/mochi/trait.MochiCairoExt.html + +### 🐦 [Puffin] Profiler + +![Puffin flamegraph shown with puffin-imgui](puffin.png) + +[Puffin] is a simple instrumentation profiler created by [Embark] +where you can opt-in to profile parts of your code. + +```rust +fn my_function() { + puffin::profile_function!(): + ... + if ... { + puffin::profile_scope_data!("load_image", image_name): + ... + } +} +``` + +The collected profile data can be viewed ingame with [imgui-rs]. + +[Puffin]: https://github.com/EmbarkStudios/puffin +[Embark]: https://www.embark-studios.com/ +[imgui-rs]: https://github.com/Gekkio/imgui-rs + +### [Optick][optick] Profiler + +[![A screenshot from the video](optick-video.jpg)][optic-video] +_Click to watch a [video tutorial / features overview][optic-video]_ + +[Optick][optick] by [@bombomby] is a lightweight C++ profiler for games +that provides access for all the necessary tools required for +efficient performance analysis and optimization: +instrumentation, switch-contexts, sampling, GPU counters. + +This month Rust API for Optick was released: [optick-rs]. + +Also, a set of procedural macros for simplifying the process of code markup +were published: [optick-attr]. + +```rust +// Instrument current function +#[optick_attr::profile] +fn calc() { /* Do some stuff*/ } + +// Generate performance capture for function +// to {dir}/capture_name(date-time).opt. +#[optick_attr::capture("capture_name")] +pub fn main() { + calc(); +} +``` + +[optick]: https://optick.dev/ +[optick-rs]: https://github.com/bombomby/optick-rs +[optick-attr]: https://crates.io/crates/optick-attr +[optic-video]: https://youtube.com/watch?v=p57TV5342fo +[@bombomby]: https://github.com/bombomby + +### [wowAddonManager] v1.0.2 + +![wowAddonManager Example](wowAddonManager-example.png) + +The [wowAddonManager] is a terminal user interface for managing World of +Warcraft addons on Linux made by [@mreimsbach]. It allows installing addons +from [Curseforge] for WoW Classic as well as WoW Retail. + +The [tui-rs] library was used to create the interface and [Termion] was used to +communicate with the TTY. + +[wowAddonManager]: https://github.com/MR2011/wowAddonManager +[@mreimsbach]: https://twitter.com/mreimsbach +[Curseforge]: https://www.curseforge.com/wow/addons +[tui-rs]: https://github.com/fdehau/tui-rs +[Termion]: https://gitlab.redox-os.org/redox-os/termion + +### [intellij-ron] + +[RON][ron] (Rusty Object Notation) is a simple readable data serialization format +that looks similar to Rust syntax and is designed +to support all of [Serde's data model][serde-data]. +RON is relatively popular amongst Rust game developers. + +This month [@JonahHenriksson] released [intellij-ron] - a new plugin +that adds [RON][ron] support to IntelliJ-based IDEs. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/ictnsc/ive_created_an_free_open_source_intellij_plugin)_ + +[intellij-ron]: https://github.com/ron-rs/intellij-ron +[@JonahHenriksson]: https://github.com/JonahHenriksson +[ron]: https://github.com/ron-rs/ron +[serde-data]: https://serde.rs/data-model.html + +### [".sia" Parser & Viewer][football-manager] + +![sia_viewer demo: A textured model](football-manager.jpeg) + +This month [@Stromberg90] published [Football Manager Tools] - a set of tools +for working with [Football Manager's][football-manager] 3D mesh format(.sia). +Amongst them: + +- `sia_parser` - a Rust crate for parsing .sia files. +- `sia_viewer` - a standalone Mesh(.sia) Viewer. + +[@Stromberg90]: https://github.com/Stromberg90 +[football-manager]: https://en.wikipedia.org/wiki/Football_Manager +[Football Manager Tools]: https://github.com/Stromberg90/football-manager-tools + +## Popular Workgroup Issues in Github + +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#89 "Moving ecs_bench to GDWG"](https://github.com/rust-gamedev/wg/issues/89); + - [#93 "Consider creating a game math library benchmark for the working group"](https://github.com/rust-gamedev/wg/issues/93); +- [rust-gamedev/rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): + - [#233 "Custom Domain"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/233); +- [rust-gamedev/ecs_bench_suite](https://github.com/rust-gamedev/ecs_bench_suite): + - [#6 "Benchmark compile times"](https://github.com/rust-gamedev/ecs_bench_suite/issues/6); + - [#13 "How results will be updated?"](https://github.com/rust-gamedev/ecs_bench_suite/issues/13); + +## Meeting Minutes + + + +[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 + + + +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [winit's "Good first issue" and “help wanted” issues][winit-issues]. +- [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]. + +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[winit-issues]: https://github.com/rust-windowing/winit/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3A%22status%3A+help+wanted%22+label%3A%22Good+first+issue%22 +[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/dabreegster/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 + +------ + +That's all news for today, thanks for reading! + +Subscribe to [@rust_gamedev on Twitter][@rust_gamedev] +or [/r/rust_gamedev subreddit][/r/rust_gamedev] if you want to receive fresh news! + +**Discussions of this post**: +[/r/rust](https://reddit.com/r/rust/comments/ioftll/this_month_in_rust_gamedev_13_august_2020), +[twitter](https://twitter.com/rust_gamedev/status/1303073032660037635). + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/posts/newsletter-013/inline-spirv-demo.png b/content/posts/newsletter-013/inline-spirv-demo.png new file mode 100644 index 000000000..addc0ecae Binary files /dev/null and b/content/posts/newsletter-013/inline-spirv-demo.png differ diff --git a/content/posts/newsletter-013/inline-tweak.gif b/content/posts/newsletter-013/inline-tweak.gif new file mode 100644 index 000000000..c2cbffd6b Binary files /dev/null and b/content/posts/newsletter-013/inline-tweak.gif differ diff --git a/content/posts/newsletter-013/jude3d.jpeg b/content/posts/newsletter-013/jude3d.jpeg new file mode 100644 index 000000000..211b3a6fb Binary files /dev/null and b/content/posts/newsletter-013/jude3d.jpeg differ diff --git a/content/posts/newsletter-013/kas-text-layout.png b/content/posts/newsletter-013/kas-text-layout.png new file mode 100644 index 000000000..3630ad97f Binary files /dev/null and b/content/posts/newsletter-013/kas-text-layout.png differ diff --git a/content/posts/newsletter-013/mochi.jpg b/content/posts/newsletter-013/mochi.jpg new file mode 100644 index 000000000..d4fcf3e56 Binary files /dev/null and b/content/posts/newsletter-013/mochi.jpg differ diff --git a/content/posts/newsletter-013/mun-logo.png b/content/posts/newsletter-013/mun-logo.png new file mode 100644 index 000000000..02295dc77 Binary files /dev/null and b/content/posts/newsletter-013/mun-logo.png differ diff --git a/content/posts/newsletter-013/nes_emulator_rust.png b/content/posts/newsletter-013/nes_emulator_rust.png new file mode 100644 index 000000000..16103b189 Binary files /dev/null and b/content/posts/newsletter-013/nes_emulator_rust.png differ diff --git a/content/posts/newsletter-013/optick-video.jpg b/content/posts/newsletter-013/optick-video.jpg new file mode 100644 index 000000000..12bac85a8 Binary files /dev/null and b/content/posts/newsletter-013/optick-video.jpg differ diff --git a/content/posts/newsletter-013/piston-logo.png b/content/posts/newsletter-013/piston-logo.png new file mode 100644 index 000000000..09278cf4b Binary files /dev/null and b/content/posts/newsletter-013/piston-logo.png differ diff --git a/content/posts/newsletter-013/podcast.jpeg b/content/posts/newsletter-013/podcast.jpeg new file mode 100644 index 000000000..0e3134937 Binary files /dev/null and b/content/posts/newsletter-013/podcast.jpeg differ diff --git a/content/posts/newsletter-013/puffin.png b/content/posts/newsletter-013/puffin.png new file mode 100644 index 000000000..72e98be8c Binary files /dev/null and b/content/posts/newsletter-013/puffin.png differ diff --git a/content/posts/newsletter-013/rapier-logo.svg b/content/posts/newsletter-013/rapier-logo.svg new file mode 100644 index 000000000..363266688 --- /dev/null +++ b/content/posts/newsletter-013/rapier-logo.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/posts/newsletter-013/rustconf-amethyst-talk.png b/content/posts/newsletter-013/rustconf-amethyst-talk.png new file mode 100644 index 000000000..641271a93 Binary files /dev/null and b/content/posts/newsletter-013/rustconf-amethyst-talk.png differ diff --git a/content/posts/newsletter-013/simple-physics-wave.gif b/content/posts/newsletter-013/simple-physics-wave.gif new file mode 100644 index 000000000..9eedbe3e4 Binary files /dev/null and b/content/posts/newsletter-013/simple-physics-wave.gif differ diff --git a/content/posts/newsletter-013/starframe-demo.gif b/content/posts/newsletter-013/starframe-demo.gif new file mode 100755 index 000000000..9f35283a1 Binary files /dev/null and b/content/posts/newsletter-013/starframe-demo.gif differ diff --git a/content/posts/newsletter-013/traverse-research-banner.png b/content/posts/newsletter-013/traverse-research-banner.png new file mode 100644 index 000000000..cc10cd2a5 Binary files /dev/null and b/content/posts/newsletter-013/traverse-research-banner.png differ diff --git a/content/posts/newsletter-013/vangers-shadows.jpeg b/content/posts/newsletter-013/vangers-shadows.jpeg new file mode 100644 index 000000000..dcdbd0333 Binary files /dev/null and b/content/posts/newsletter-013/vangers-shadows.jpeg differ diff --git a/content/posts/newsletter-013/veloren-landscape1.jpeg b/content/posts/newsletter-013/veloren-landscape1.jpeg new file mode 100644 index 000000000..8e894cdba Binary files /dev/null and b/content/posts/newsletter-013/veloren-landscape1.jpeg differ diff --git a/content/posts/newsletter-013/veloren-sceptre.gif b/content/posts/newsletter-013/veloren-sceptre.gif new file mode 100644 index 000000000..666a7e039 Binary files /dev/null and b/content/posts/newsletter-013/veloren-sceptre.gif differ diff --git a/content/posts/newsletter-013/voxel-mapper.jpeg b/content/posts/newsletter-013/voxel-mapper.jpeg new file mode 100644 index 000000000..a6e3e7837 Binary files /dev/null and b/content/posts/newsletter-013/voxel-mapper.jpeg differ diff --git a/content/posts/newsletter-013/way-of-rhea-play-nyc.png b/content/posts/newsletter-013/way-of-rhea-play-nyc.png new file mode 100644 index 000000000..e3a2984ac Binary files /dev/null and b/content/posts/newsletter-013/way-of-rhea-play-nyc.png differ diff --git a/content/posts/newsletter-013/wgpu-water.gif b/content/posts/newsletter-013/wgpu-water.gif new file mode 100644 index 000000000..339561924 Binary files /dev/null and b/content/posts/newsletter-013/wgpu-water.gif differ diff --git a/content/posts/newsletter-013/wowAddonManager-example.png b/content/posts/newsletter-013/wowAddonManager-example.png new file mode 100644 index 000000000..62533538d Binary files /dev/null and b/content/posts/newsletter-013/wowAddonManager-example.png differ diff --git a/content/posts/newsletter-014/BUGOUT.jpg b/content/posts/newsletter-014/BUGOUT.jpg new file mode 100644 index 000000000..2a6ed51dc Binary files /dev/null and b/content/posts/newsletter-014/BUGOUT.jpg differ diff --git a/content/posts/newsletter-014/abstreet.png b/content/posts/newsletter-014/abstreet.png new file mode 100644 index 000000000..1f248b377 Binary files /dev/null and b/content/posts/newsletter-014/abstreet.png differ diff --git a/content/posts/newsletter-014/bevy_logo.png b/content/posts/newsletter-014/bevy_logo.png new file mode 100644 index 000000000..22508c73c Binary files /dev/null and b/content/posts/newsletter-014/bevy_logo.png differ diff --git a/content/posts/newsletter-014/citybound.png b/content/posts/newsletter-014/citybound.png new file mode 100644 index 000000000..ff16be07e Binary files /dev/null and b/content/posts/newsletter-014/citybound.png differ diff --git a/content/posts/newsletter-014/cool-bear.png b/content/posts/newsletter-014/cool-bear.png new file mode 100644 index 000000000..52fba3cf1 Binary files /dev/null and b/content/posts/newsletter-014/cool-bear.png differ diff --git a/content/posts/newsletter-014/diff-gi.gif b/content/posts/newsletter-014/diff-gi.gif new file mode 100644 index 000000000..bfdd1140e Binary files /dev/null and b/content/posts/newsletter-014/diff-gi.gif differ diff --git a/content/posts/newsletter-014/ecs-bevy-tutorial.png b/content/posts/newsletter-014/ecs-bevy-tutorial.png new file mode 100644 index 000000000..1bf23198f Binary files /dev/null and b/content/posts/newsletter-014/ecs-bevy-tutorial.png differ diff --git a/content/posts/newsletter-014/femtovg.png b/content/posts/newsletter-014/femtovg.png new file mode 100644 index 000000000..d19abc407 Binary files /dev/null and b/content/posts/newsletter-014/femtovg.png differ diff --git a/content/posts/newsletter-014/galangua.png b/content/posts/newsletter-014/galangua.png new file mode 100644 index 000000000..fbae4b2d8 Binary files /dev/null and b/content/posts/newsletter-014/galangua.png differ diff --git a/content/posts/newsletter-014/garden.jpeg b/content/posts/newsletter-014/garden.jpeg new file mode 100644 index 000000000..3ede0465d Binary files /dev/null and b/content/posts/newsletter-014/garden.jpeg differ diff --git a/content/posts/newsletter-014/gfx-logo.png b/content/posts/newsletter-014/gfx-logo.png new file mode 100644 index 000000000..e0cc9047b Binary files /dev/null and b/content/posts/newsletter-014/gfx-logo.png differ diff --git a/content/posts/newsletter-014/godot.png b/content/posts/newsletter-014/godot.png new file mode 100644 index 000000000..5e872e956 Binary files /dev/null and b/content/posts/newsletter-014/godot.png differ diff --git a/content/posts/newsletter-014/index.md b/content/posts/newsletter-014/index.md new file mode 100644 index 000000000..e941aef42 --- /dev/null +++ b/content/posts/newsletter-014/index.md @@ -0,0 +1,1105 @@ ++++ +title = "This Month in Rust GameDev #14 - September 2020" +date = 2020-10-07 +transparent = true ++++ + +Welcome to the 14th issue of the Rust GameDev Workgroup's +monthly newsletter. +[Rust] is a systems language pursuing the trifecta: +safety, concurrency, and speed. +These goals are well-aligned with game development. +We hope to build an inviting ecosystem for anyone wishing +to use Rust in their development process! +Want to get involved? [Join the Rust GameDev working group!][join] + +You can follow the newsletter creation process +by watching [the coordination issues][coordination]. +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. +Feel free to send PRs about your own projects! + +[Rust]: https://rust-lang.org +[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 + +Table of contents: + +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Requests for Contribution](#requests-for-contribution) + + + +## Game Updates + +### [Veloren][veloren] + +![Landscape](veloren_river.png) +_Deer by the riverside_ + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In September, Veloren hit 5000 commits to the main repo! A privilege escalation +bug was found in the game. It was quickly patched, and a PSA was sent out to +notify server owners of its presence. A Discord bot was created to help manage a +testing server. Airshipper, Veloren's launcher, saw the release of version +0.4.0. Lots of work is going on to improve the state of Veloren's server +infrastructure. A stress test was run with 15 players to see how smaller server +could handle running the game. + +Improvements were made to the chunk compression which resulted in a ~7x memory +reduction in their storage. The settings menu has been overhauled, along with +many other elements of the UI. A stone golem boss was merged, adding a new boss +to dungeons. Work has been done on beam weapons and collisions, resulting in a +significantly improved healing sceptre. + +You can read more about some specific topics from September: + +- [Compilation Breakdown](https://veloren.net/devblog-84#compilation-breakdown-by-angelonfira) +- [Improved Server Metrics](https://veloren.net/devblog-85#improved-server-metrics-to-improve-server-performance-by-xmac94x) +- [PSA: Privilege Escalation bug](https://veloren.net/devblog-86#psa-privilege-escalation-bug) +- [Animation Changes](https://veloren.net/devblog-86#animation-changes-by-slipped) +- [Attack Updates](https://veloren.net/devblog-86#attack-updates-by-sam) +- [Beam Collisions](https://veloren.net/devblog-86#beam-collisions-by-sam) +- [Sceptre Rework](https://veloren.net/devblog-87#sceptre-rework-by-sam) +- [Memory Optimizations](https://veloren.net/devblog-87#memory-optimizations-by-sharp) +- [Art Blog #7](https://www.patreon.com/posts/art-blog-no-7-41635011) + +September's full weekly devlogs: "This Week In Veloren...": +[#84](https://veloren.net/devblog-84), +[#85](https://veloren.net/devblog-85), +[#86](https://veloren.net/devblog-86), +[#87](https://veloren.net/devblog-87). + +![Healing sceptre](veloren_night.png) +_A reprise from hunting at night_ + +In October, Veloren will keep pushing towards more scalable infrastructure. +Tests are happening to move towards a Kubernetes cluster to manage more +infrastructure from code. Optimizations will keep coming in as we find places to +improve. 0.8 may release sometime this month, however, the exact date is yet to +be set. + +[veloren]: https://veloren.net +[veloren-interview]: https://rustgamedev.com/episodes/interview-with-team-veloren + +### [A/B Street][abstreet] + +![Isometric buildings and textured areas](abstreet.png) + +[A/B Street][abstreet] is a traffic simulation game exploring how small changes +to roads affect cyclists, transit users, pedestrians, and drivers. Any city +with OpenStreetMap coverage can be used! + +Some of this month's updates: + +- finished support for driving on the left side of the road; +- isometric buildings and support for textures by [Michael][mkirk]; +- a flurry of major UI updates, thanks to the return of the project's UX + designer; +- an option to disable parking simulation, to workaround missing data; +- alleyways imported from OSM; +- more realistic traffic signal timing constraints, thanks to + [Sam][NoSuchThingAsRandom], a new contributor. + +[abstreet]: https://abstreet.org +[mkirk]: https://github.com/michaelkirk +[NoSuchThingAsRandom]: https://github.com/NoSuchThingAsRandom/ + +### [Garden][garden] + +![screenshot: trees and water](garden.jpeg) + +[Garden][garden] is an upcoming game centered around growing realistic plants. +Some of the updates from [the September devlog][garden-devlog]: + +- The project switched to Nvidia’s PhysX from a custom physics engine. +- More accurate plant clone placement. +- Significant rendering performance improvements. +- Work on saving and loading system has begun. + +[garden]: https://epcc.itch.io/garden +[garden-devlog]: https://cyberplant.xyz/posts/september/ + +### [galangua] + +![screenshot](galangua.png) + +[galangua] by [@tyfkda] is a dynamic 2D shoot 'em up game, +written in Rust using SDL2. +It works on the desktop as well as in the browser. + +[The source code is available here.][galangua-src] + +[galangua]: https://tyfkda.github.io/galangua/ +[galangua-src]: https://github.com/tyfkda/galangua +[@tyfkda]: https://twitter.com/tyfkda + +### [Way of Rhea] + +[![Way of Rhea logo](way-of-rhea-header.jpg)][Way of Rhea] + +[Way of Rhea] is a puzzle platformer that takes place in a world where you can +only interact with items that match your current color. +Changes since the last update: + +- The circuit level has been reworked: + it's now split into three different levels + and the puzzles are better tutorialized, and there are more of them. +- A tiny amount of screen shake was added to the game. +- Work has begun on a couple of new levels for the ice biome + In this biome, you have to learn to predict the behavior of the + crabs to solve the puzzles. + + ![Ice Biome](way-of-rhea-ice-biome-snowcrab.png) + +Follow [@AnthropicSt] or [@masonremaley] on Twitter or +[sign up for the mailing list][anthropic-newsletter] for updates. + +[Way of Rhea]: https://store.steampowered.com/app/1110620/Way_of_Rhea/ +[@AnthropicSt]: https://twitter.com/anthropicst +[@masonremaley]: https://twitter.com/masonremaley +[anthropic-newsletter]: https://www.anthropicstudios.com/newsletter/signup/tech + +### [Citybound] + +![Live editing of procedural architecture rules](citybound.png) + +[Citybound] is a city simulation and city building game. This month, +[Anselm Eickhoff] published [a small demo] of his domain specific language +for procedural architecture, which is interpreted by Rust and now supports +hot-code reload of building rules in the running game. + +[Citybound]: https://aeplay.org/citybound +[Anselm Eickhoff]: https://twitter.com/ae_play +[a small demo]: https://reddit.com/r/Citybound/comments/j2xg2s/sneak_peek_custom_procedural_architecture + +### Recall Singularity + +![Demo of the basic ship collision](recall_singularity.png) +_A ray-traced selection of modules_ + +The Recall Singularity is a game about designing autonomous factory ships and +stations created by [Tom Leys]. + +This month a new devlog was posted: +["Recall Singularity in Sep 2020"][recall-s-sept-text]. +You can also check out a [status update and progress video here][recall-s-sept-video]. + +Updates include: + +- Improving the robustness of the game core and networking. +- Ship sections and standalone ships. +- Different synchronization algorithms for different game modes. + +[Tom Leys]: https://twitter.com/RecallSingular1 +[recall-s-sept-text]: https://medium.com/@recallsingularity/recall-singularity-in-sep-2020-e2f33a85fd7c +[recall-s-sept-video]: https://youtube.com/watch?v=kUIiU9LtOFY + +### [Mimas] + +![Mimas screenshot](mimas.png) + +[Mimas] is a WIP voxel engine and game, inspired by Minetest and Minecraft. +It's been in development for almost 2 years and has recently seen a public +prototype release 0.4.0. + +Several of the current features: + +- Procedural map generation with hilly landscape, trees, flowers, water, and caves +- Map manipulation (removal/addition of blocks) +- Crafting +- Chests +- Textures (taken from the Minetest project, under CC-BY-SA license) +- Tools +- QUIC based network protocol with SRP based authentication +- Multiplayer: chat, (hardcoded) avatars +- Ability to add custom content (e.g. blocks) using a toml format + +Imgur screenshot [gallery]. + +[Mimas]: https://github.com/est31/mimas +[gallery]: https://imgur.com/a/vvo7len + +### [Nox Futura (Rust Edition)][noxfutura] + +![Gameplay screenshots](noxfutura.jpeg) + +[Nox Futura][noxfutura] by [@blackfuture] +is an open-source long-term passion project, +a Dwarf-Fortress and RimWorld inspired base building game. + +Some of the [recent updates][noxfutura-reddit]: + +- The WGPU-based rendered is undergoing a major restructure. +- The game was updated to Legion 0.3 - it required rewriting a lot of code, + but the new syntax sugar is a joy to use, and the backend is even faster now. +- The Greedy Voxel algorithm was significantly improved. +- OBJ models are now supported - useful for things like tree/vegetation geometry, + which can now use a stylized low-poly graphic without the added weight + of a bunch of cubes. +- Palette-based rendering - the output system is now constrained + to a 256 color palette, mostly to play with stylized 3D rendering. +- New format for data files that combines multiple RON objects in one place. + +[noxfutura]: https://github.com/thebracket/noxfutura +[thebracket]: https://bracketproductions.com +[noxfutura-reddit]: https://reddit.com/r/roguelikedev/comments/ivgdnj/sharing_saturday_329/g5t5lo0 + +### pGLOWrpg + +![pGLOWrpg banner](pglowrpg_banner.png) + +The [@pGLOWrpg] (Procedurally Generated Living Open World RPG) is a long-term +project in development by [@Roal_Yr], which aims to be a text-based game with +maximum portability and accessibility and focus on interactions and emergent +narrative. + +The pGLOWrpg meets its first official anniversary on September the 15th +and goes public at [pGLOWrpg repo]! + +For the past month the main focus of the development was on: + +- Improving the UI. +- Major refactoring. +- Unification of I/O means. +- Making things ready for publication. + +Main features of the reported version are: + +- Ability to generate one or many worlds from customizable presets. +- Ability to have output in both raw (b/w .png) and colorized images. +- Generated data is as follows: terrain, watermask, biomes, rivers, geological regions, + rainfall, and temperature. + +For main feature reports and dev blogs follow [@pGLOWrpg] on Twitter. + +[@Roal_Yr]: https://twitter.com/Roal_Yr +[@pGLOWrpg]: https://twitter.com/pglowrpg +[pGLOWrpg repo]: https://github.com/roalyr/pglowrpg + +### Oh no, Lava! + +![shooting water into lava](ohnolava_troligtvis.gif) + +"Oh no, Lava!" by [@captainfleppo] is the working title +of a platforming game which take inspiration +from an old iOS game created back in 2014. The game is running with [Bevy][bevy] +as its core. The gameplay isn't there yet, but you as a player need to jump on +furnitures, collect coins, and fight lava/fire based enemies with your water gun. + +[@captainfleppo]: https://twitter.com/captainfleppo +[bevy]: https://bevyengine.org + +### [Zemeroth][zemeroth] + +![Summoner imps throw a swordsman around](zemeroth_chain.gif) +_Be careful with chained reaction attacks!_ + +[Zemeroth][zemeroth] by [@ozkriff] is a minimalistic 2D turn-based tactical game. +Some of the recent updates: + +- The game now [stores simulated text lifetimes][zemeroth-text] for each tile + during the event processing to reduce popup text overlapping. +- Push bombs are more useful now: they still don't cause direct damage, + but [now they can push away other bombs too][zemeroth-bombs]. +- [All the assets sources are merged into the main repository][zemeroth-assets] + and the project now uses [resvg] instead of console Inkscape + for svg->png rendering. +- Abilities [don't have parameters now][zemeroth-abilities]. +- Dynamic depth-sorting [was implemented][zemeroth-zsort]. +- The work on adding sounds continues: + check out the [video of the first results][zemeroth-audio] 🔊. +- Smaller UI improvements and bugfixes. + +[zemeroth]: https://github.com/ozkriff/zemeroth +[@ozkriff]: https://twitter.com/ozkriff +[zemeroth-bombs]: https://twitter.com/ozkriff/status/1304458740758970368 +[zemeroth-abilities]: https://twitter.com/ozkriff/status/1300817277714075648 +[zemeroth-assets]: https://twitter.com/ozkriff/status/1297239743269412864 +[zemeroth-zsort]: https://twitter.com/ozkriff/status/1310603877507620865 +[zemeroth-text]: https://twitter.com/ozkriff/status/1306651821314891776 +[zemeroth-audio]: https://twitter.com/ozkriff/status/1303736184045174785 +[resvg]: https://lib.rs/resvg + +### [Akigi][akigi] + +[Akigi][akigi] is a WIP online multiplayer game. +In September, lots of work was done on terrain sculpting systems. Another tool +was added, allowing material painting onto the terrain. Along with the scenery +placement tool, there are now three separate tools in the editor's arsenal. + +Full devlogs: +[#083](https://devjournal.akigi.com/september-2020/083-2020-09-06.html), +[#084](https://devjournal.akigi.com/september-2020/084-2020-09-13.html), +[#085](https://devjournal.akigi.com/september-2020/085-2020-09-20.html), +[#086](https://devjournal.akigi.com/september-2020/086-2020-09-27.html). + +[akigi]: https://akigi.com + +### [BUGOUT] + +![Play Go against AI and friends on the web](BUGOUT.jpg) +_Playing KataGo AI in 9x9_ + +[BUGOUT] is a web application which allows you to play Go/Baduk/Weiqi +against a leading AI ([KataGo]). +It provides a multiplayer mode so that you can play other humans, +either by joining a public queue or sharing a private URL to your friend. + +The user interface is lifted from [Sabaki]. + +The initial installation's AI is powered by an energy-efficient +[dev board][nv-devboard]. + +BUGOUT is marching actively toward production, at which point the +team will publish the website address and invite users. +The author anticipates being finished with the production release +prior to Jan 1, 2021. + +[BUGOUT]: https://github.com/Terkwood/BUGOUT +[KataGo]: https://github.com/lightvector/KataGo +[Sabaki]: https://github.com/SabakiHQ/Sabaki +[nv-devboard]: https://developer.nvidia.com/embedded/jetson-nano-developer-kit + +### [Tetris Bane][tetris-bane] + +![Tetris Bane](tetris-bane.png) + +[Tetris Bane][tetris-bane] is an open-source Tetris clone +that mixes things up with multiple game modes. +There's a hard bane mode, classic mode for the purists, +ultra hard metal mode, and a chill mode. +Tetris Bane challenges you to get more then 2 lines in metal mode. + +You can [download][tetris-bane] the game for Windows, macOS and Linux. + +The game is written using [rust-sdl2]. +[The source code is available here.][tetris-bane-src] + +[tetris-bane]: https://andrew-jones.itch.io/tetris-bane +[tetris-bane-src]: https://github.com/andii1701/tetris-bane +[rust-sdl2]: https://github.com/Rust-SDL2/rust-sdl2 + +### Project YAWC + +![Screenshot of an in-progress game of Project YAWC](project_yawc.png) + +Project YAWC is an in-progress Advance-Wars style strategy game being developed +by junkmail using [ggez] as a framework. The game is currently in a closed alpha +state with working netplay. September saw the release of version A2, including +revamped netcode and the full core set of units. + +[ggez]: https://ggez.rs/ + +### [space_shooter_rs] + +![space_shooter_rs_gameplay](space_shooter_rs.gif) + +[space_shooter_rs] is a 2D shooter game made with the [Amethyst] game engine. +It is inspired by games like Raiden and the Binding of Isaac. + +In September, [Micah Tigley] joined the project and has been collaborating with +[Carlo Supina] to refactor a significant chunk of the codebase. Lots of work has +been on collision detection, combat, and movement. This will allow for easier +future development. + +Both developers wrote about the work and their experiences developing space_shooter_rs: + +- [How to Revive a Dead Project][carlo-blog-post] +- [Collaborating on Amethyst showcase project: space_shooter_rs][micah-blog-post] + +[space_shooter_rs]: https://github.com/amethyst/space_shooter_rs +[Amethyst]: https://amethyst.rs +[Carlo Supina]: https://twitter.com/carlosupina +[Micah Tigley]: https://twitter.com/micah_tigley +[carlo-blog-post]: https://micronote.tech/2020/10/How-to-Revive-a-Dead-Project +[micah-blog-post]: https://mtigley.dev/posts/contributing_to_spaceshooter_rs + +## Learning Material Updates + +### [So You Want to Live-Reload Rust][fasterthanlime-post] + +![cool bear with glasses](cool-bear.png) +_Cool bear_ + +[@fasterthanlime] published a giant blog post +["So you want to live-reload Rust"][fasterthanlime-post] +\- a very deep technical dive into reloading a dylib +and a bunch of related issues. +Lots of interesting insights for folks who want +to better understand nuances of hot reloading. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/j0ajdy/so_you_want_to_livereload_rust)_ + +[fasterthanlime-post]: https://fasterthanli.me/articles/so-you-want-to-live-reload-rust +[@fasterthanlime]: https://fasterthanli.me/ + +### [rust-wasm-hotreload] + +[rust-wasm-hotreload] by [@ShekoHex] is a PoC of using WebAssemply +as a hot-reloadable code logic at runtime without restarting the host process. +[Check out a video demo here][rust-wasm-hotreload-video]. + +[@ShekoHex]: https://twitter.com/ShekoHex +[rust-wasm-hotreload]: https://github.com/shekohex/rust-wasm-hotreload +[rust-wasm-hotreload-video]: https://twitter.com/ShekoHex/status/1302973994417651714 + +### [Learn WGPU][learn-wgpu] + +This month [@sothr] released another chapter +of the ["Learn WGPU"][learn-wgpu] tutorial: +["Threading WGPU Resource Loading with Rayon"][learn-wgpu-threading]. + +Also, the whole tutorial [was upgraded to WGPU v0.6][learn-wgpu-upgrade]. + +[@sothr]: https://github.com/sothr +[learn-wgpu]: https://sotrh.github.io/learn-wgpu +[learn-wgpu-threading]: https://sotrh.github.io/learn-wgpu/intermediate/tutorial13-threading +[learn-wgpu-upgrade]: https://sotrh.github.io/learn-wgpu/news/#_0-6 + +### [Is It Easy to Draw a Line?][Lines] + +![hexagonal strategy map with region borders](lines_hexstrat.jpeg) +_Example of result chains._ + +A small note by [@VladZhukov0] about drawing lines and chains +with signed distance fields. +The resulted lines are nice looking on edges and have rounded corners. +Chains for this article are assumed to be opaque. + +Check out the [online demo](https://pum-purum-pum-pum.github.io/lines/) +and its [source code](https://github.com/pum-purum-pum-pum/Lines). + +[Lines]: https://vladjuckov.github.io/hqlines/ +[@VladZhukov0]: https://twitter.com/VladZhukov0 + +### [OpenGL Preprocessor for Rust] + +With the full power of Cargo build scripts and [Tera], you can create an advanced +GLSL preprocessor which can generate code conditionally, in loops, and even +inherit code from other templates. + +![An OpenGL preprocessor for Rust](opengl_preprocessor.png) + +Writing plain GLSL code is uncomfortable, code is quite often is duplicated, libraries +aren't something natural for GLSL (means you can't out of the box do #include "library.glsl"). +The last point is especially problematic if some constants actually originate in +your game logic (like the number of player types). Updating these values manually +in your shader code is repetitive and prone to both error and simple forgetfulness. +It's really helpful to build some kind of preprocessor for your GLSL code, +which can include other files, so you can organize your code into manageable chunks. +With the power of [Tera], it's now easy to accomplish. +Because Rust is also often used for web projects, which need a lot of templated +web-pages preprocessing, we can borrow such technology for our needs, +combine it with cargo build scripts and create a compile-time preprocessing tool. + +[tera]: https://tera.netlify.app +[OpenGL Preprocessor for Rust]: https://codecrash.me/an-opengl-preprocessor-for-rust + +### Rust, Gamedev, ECS, and Bevy + +![Bevy hello world code snippet and two game screenshots, one displaying two +blue spheres in a grey canvas and another one displaying a gameboy colored tile +game](ecs-bevy-tutorial.png) + +[@hugopeixoto] released a couple of blog posts on ECS and Bevy, +including a tutorial on how to get started. + +- The [first part][hugopeixoto-p1] gives us an in depth overview of what ECS. + It starts with pseudocode for an object oriented approach + and goes through several iterations until we get to the ECS paradigm. + +- The [second part][hugopeixoto-p2] is a tutorial on how to use [bevy], + a data driven game engine built in Rust. + It goes over the basic features of the engine, + using the example presented in the first part. + +[@hugopeixoto]: https://twitter.com/hugopeixoto +[hugopeixoto-p1]: https://hugopeixoto.net/articles/rust-gamedev-ecs-bevy.html +[hugopeixoto-p2]: https://hugopeixoto.net/articles/rust-gamedev-ecs-bevy-p2.html +[bevy]: https://bevyengine.org + +### [Flappy Bird in Bevy][bevy-flappy-video] + +[![tantan preview](tantan_bevy.png)][bevy-flappy-video] + +[@TantanDev] is back with [another video][bevy-flappy-video]! +In this one, they made a Flappy Bird clone using Bevy +and shared their experience programming with it. + +The source code [can be found here][bevy-flappy-src]. + +[@TantanDev]: https://twitter.com/TantanDev +[bevy-flappy-video]: https://youtube.com/watch?v=Qjc0V58lB7A +[bevy-flappy-src]: https://github.com/TanTanDev/flappy_bevy + +### [Real-Time Global Illumination in WGPU][gi-post] + +[![diff-gi-gif](diff-gi.gif)][gi-post] +_Infinite light bounces in Cornell Box_ + +[DI2edd] shared his [real-time diffuse global illumination demo on /r/rust_gamedev][gi-post]. +It's written in 100% Rust and uses WGPU for graphics, proving that the API +is an excellent choice even for advanced computer graphics applications. + +The technique provides real time global illumination for static lambertian +geometry, and is the implementation of the 2017 paper ["Real-time Global +Illumination by Precomputed Local Reconstruction +from Sparse Radiance Probes"](https://arisilvennoinen.github.io/Projects/RTGI/index.html), +which proposes a spherical harmonics-based approach to solve the rendering equation +in real time. + +In practice, this means that the expensive light transport calculations are performed +in a precomputation step, which relies on - among others - [embree-rs], +and [nalgebra] to produce a compressed +representation of the scene that is then used for lighting reconstruction at runtime. + +[gi-post]: https://reddit.com/r/rust_gamedev/comments/ixocl2/real_time_diffuse_global_illumination +[DI2edd]: https://reddit.com/u/DI2edd +[embree-rs]: https://github.com/Twinklebear/embree-rs +[nalgebra]: https://github.com/dimforge/nalgebra + +## Library & Tooling Updates + +### [legion v0.3][legion-0-3] + +![Benchmarks](legion_violin.png) + +[Legion][legion] is among Rust's fastest and most powerful ECS libraries. +After months in development, v0.3 has finally been released to crates.io. +This is a huge release amounting to a near total rewrite of the library +and a major step towards a stable 1.0 release. + +[Check out the v0.3 announcement post][legion-0-3] +for an overview of the new API and all the updates. + +The project's repo has also been moved to the Amethyst org +to reflect its close collaboration with the Amethyst community. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/io6evk/legion_v03)_ + +[legion]: https://github.com/amethyst/legion +[legion-0-3]: https://amethyst.rs/posts/legion-ecs-v0.3 + +### [Thunderdome] + +[Thunderdome] is a ~~gladitorial~~ generational arena library inspired by +[generational-arena], [slotmap], and [slab]. It provides constant time +insertion, lookup, and removal via small (8 byte) keys that stay 8 bytes when +wrapped in `Option`. + +Data structures like Thunderdome's `Arena` store values and return keys that can +be later used to access those values. These keys are stable across removals and +have a generation counter to solve the [ABA Problem]. + +```rust +let mut arena = Arena::new(); + +let foo = arena.insert("Foo"); +let bar = arena.insert("Bar"); + +assert_eq!(arena[foo], "Foo"); +assert_eq!(arena[bar], "Bar"); + +arena[bar] = "Replaced"; +assert_eq!(arena[bar], "Replaced"); + +let foo_value = arena.remove(foo); +assert_eq!(foo_value, Some("Foo")); + +// The slot previously used by foo will be reused for baz. +let baz = arena.insert("Baz"); +assert_eq!(arena[baz], "Baz"); + +// foo is no longer a valid key. +assert_eq!(arena.get(foo), None); +``` + +_Discussions: +[twitter](https://twitter.com/LPGhatguy/status/1303375906493276160)_ + +[Thunderdome]: https://github.com/LPGhatguy/thunderdome +[generational-arena]: https://crates.io/crates/generational-arena +[slotmap]: https://crates.io/crates/slotmap +[slab]: https://crates.io/crates/slab +[ABA Problem]: https://en.wikipedia.org/wiki/ABA_problem + +### [Fontdue] + +[Fontdue] is a simple, no_std, pure Rust, TrueType & OpenType +font rasterizer and layout tool. +It strives to make interacting with fonts as fast as possible, +and currently has the lowest end to end latency for a font rasterizer. + +Fontdue depends on [ttf-parser] for parsing fonts, +which supports a wide range of TrueType and OpenType features. + +A non-goal of this library is to be allocation free and have a fast, +"zero cost" initial load. +Fontdue does make allocations and depends on the alloc crate. +Fonts are fully parsed on creation and relevant information is stored +in a more convenient to access format. +Unlike other font libraries, the font structures have no lifetime dependencies +since it allocates its own space. + +Project's roadmap: + +- v1.0: fontdue is designed to be a replacement for + rusttype, ab_glyph, parts of glyph_brush, and glyph_brush_layout. + This is a class of font libraries that don't tackle shaping. +- v2.0: Shaping - the complex layout of text such as Arabic and Devanagari + \- will be added. + There are two potential pure Rust libraries (allsorts or rustybuzz) + that are candidates for providing a shaping backend to Fontdue, + but are relatively immature right now. + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/ilnd41/fontdue)_ + +[Fontdue]: https://github.com/mooman219/fontdue +[ttf-parser]: https://github.com/RazrFalcon/ttf-parser + +### [ultraviolet v0.6][ultraviolet-v0-6] + +[ultraviolet] by [@fu5ha] is a crate for computer-graphics +and games-related linear algebra, but _fast_, +both in terms of productivity and in terms of runtime performance. + +This month [ultraviolet v0.6][ultraviolet-v0-6] was released. +Updates include: + +- Support for 256-bit wide AVX vectors and instructions + as well as 128-bit wide SSE instructions which were already supported. +- Support for f64/double precision floats under the f64 feature, + including f64x2 and f64x4 SIMD-accelerated types. +- Support for [mint] for most scalar types. +- Lots of smaller API and performance improvements. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/ir24mp/announcing_ultraviolet_06)_ + +[ultraviolet]: https://crates.io/crates/ultraviolet +[ultraviolet-v0-6]: https://fusha.moe/blog/posts/ultraviolet-0.6 +[@fu5ha]: https://twitter.com/fu5ha +[mint]: https://github.com/kvark/mint + +### [This Month in Mun][mun-september] + +[![Mun logo](mun-logo.png)][Mun] + +[Mun] is a scripting language for gamedev focused on quick iteration times +that is written in Rust. + +[September updates][mun-september] include: + +- on-going work for multi-file projects; +- build pipeline improvements; +- bug fixes in the Mun compiler and C++ bindings; +- a lot of refactors and quality of life improvements. + +[Mun]: https://mun-lang.org +[mun-september]: https://mun-lang.org/blog/2020/10/01/this-month-september/ + +### [audir] + +[audir] is a low level audio library supporting Windows (WASAPI), Linux (Pulse) +and Android (OpenSLES & AAudio). + +It aims at providing a minimal and mostly unsafe but feature-rich API on top of +common audio backends with focus on gaming applications. The initial release +version 0.1.0 provides basic recording and playback support for all available +backends, including a small music player example! + +Currently looking into coupling with [dasp] for dsp audio graphs to provide +a higher level entry point. + +[audir]: https://github.com/norse-rs/audir +[dasp]: https://github.com/RustAudio/dasp + +### [Crevice] + +[Crevice] is a library that helps define GLSL-compatible (std140) structs for +use in uniform and storage buffers. It uses new `const fn` capabilities +stabilized in [Rust 1.46.0] to align types with explicitly zeroed padding. + +Crevice depends heavily on [mint] to support almost any Rust math library. It +also contains helpers for safely sizing and writing buffers, making dynamic +buffer layout a breeze. + +```rust +#[derive(AsStd140)] +struct MainUniform { + orientation: mint::ColumnMatrix3, + position: mint::Vector3, + scale: f32, +} + +let value = MainUniform { + orientation: cgmath::Matrix3::identity().into(), + position: [1.0, 2.0, 3.0].into(), + scale: 4.0, +}; + +upload_data_to_gpu(value.as_std140().as_bytes()); +``` + +_Discussions: +[twitter](https://twitter.com/LPGhatguy/status/1308499131212599296)_ + +[Crevice]: https://github.com/LPGhatguy/crevice +[Rust 1.46.0]: https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html +[mint]: https://github.com/kvark/mint + +### [FemtoVG] + +![femtovg](femtovg.png) + +[FemtoVG] is a 2D canvas API in Rust, based on [nanovg]. + +Currently, FemtoVG uses OpenGL as a rendering backend. A Metal backend is 95% +done, and a wgpu backend is on the roadmap. The project is definitely looking +for contributors. + +Unlike NanoVG, FemtoVG has full text-shaping support thanks to harfbuzz. + +FemtoVG, just like the original NanoVG, is based on the _stencil-then-cover_ +approach presented in [GPU-accelerated Path Rendering][gpupathrender.pdf]. + +Join the [Discord channel](https://discord.gg/V69VdVu) +or follow [FemtoVG on twitter](https://twitter.com/femtovg). + +[FemtoVG]: https://github.com/femtovg/femtovg +[nanovg]: https://github.com/memononen/nanovg +[gpupathrender.pdf]: https://github.com/femtovg/femtovg/blob/master/assets/gpupathrender.pdf + +### [gfx-rs] and [gfx-portability] + +![gfx-rs logo](gfx-logo.png) + +[gfx-portability] is a Vulkan portability implementation based on [gfx-rs]. +It's basically a drop-in implementation of Vulkan on top of Metal and D3D12, +useful on platforms that don't have native Vulkan support, or have buggy drivers. + +It released version [0.8.1](https://github.com/gfx-rs/portability/releases/tag/0.8.1) +with official support for the new [KHR portability extension][khr-portability], +as well as a few other extensions, plus a number of correctness fixes. + +gfx-rs team asks Rust users of Vulkano, Ash, and other Vulkan-only wrappers to try +out the gfx-portability as a solution on macOS and relevant Windows 10 platforms. + +In [gfx-rs] itself, the DX12 backend, and the descriptor indexing feature support +got improved. There has been a push to get DX11 backend in a solid shape, +and it can now run [vange-rs] pretty well 🎉. + +[gfx-rs]: https://github.com/gfx-rs/gfx +[gfx-portability]: https://github.com/gfx-rs/portability +[khr-portability]: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_portability_subset.html +[vange-rs]: https://github.com/kvark/vange-rs + +### [Riddle] + +[Riddle] is a Rust media library in the vein of SDL, +building as far as possible on the most active/standard Rust libraries +(winit, wgpu, image, etc). Riddle is deliberately not an engine, or a framework. +It is a library devoted to exposing media related features in a unified way while +avoiding prescribing program structure. It provides abstractions over windowing, +input, audio, image loading/manipulation and provides a basic wgpu based 2D +renderer. +The [docs][riddle-docs] contain runnable examples for most methods and types. + +The goal is to provide a stable foundation, resilient to developments in the Rust +gamedev ecosystem, on which games, custom engines, and other media applications can +be built. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/j0xa3s/riddle_010)_ + +[Riddle]: https://github.com/vickles/riddle +[riddle-docs]: https://vickles.github.io/riddle/0.1.0/riddle + +### [Bracket-Lib] + +[bracket-lib] (previously `rltk_rs`) by [@blackfuture] +is a Rust implementation of [C++ Roguelike Toolkit][rltk-cpp]. + +Bracket-lib is going through a stability pass, focusing on freezing the API. +It will be featured in the author's upcoming book: +*Hands-on Rust: Effective Learning through 2D Game Development and Play*. +The book should be going into early access/beta in time for the next newsletter. + +[bracket-lib]: https://github.com/thebracket/bracket-lib +[@blackfuture]: https://patreon.com/blackfuture +[rltk-cpp]: https://github.com/thebracket/rltk + +### [macroquad] + +[![quadgames](quadgames.gif)][sponsors] +_Games built with miniquad/macroquad._ + +[macroquad] by [@fedor_games] is a cross-platform +(Windows/Linux/macOS/Android/iOS/WASM) +game framework build on top of [miniquad]. + +This month 0.3 preview was released, featuring: + +- Improved [documentation][macroquad-doc] on docs.rs. +- Screen reading shaders and a [tutorial about them][article-screen-reading]. +- Updated "shadertoy" - small interactive GLSL playground - example. + Check out the [web demo][shadertoy-web] and its [source code][shadertoy-src]. + + [![shadertoy](shadertoy.gif)][shadertoy-web] + +Also, [@not-fl3] (the main developer of all current \*quad projects) +has been added to the GitHub Sponsors. +Check out the project's story, vision, and roadmap +on the new [sponsors page][sponsors]! + +[macroquad]: https://github.com/not-fl3/macroquad +[miniquad]: https://github.com/not-fl3/miniquad +[article-screen-reading]: https://not-fl3.github.io/platformer-book/screen-reading.html +[shadertoy-web]: https://not-fl3.github.io/miniquad-samples/shadertoy.html +[shadertoy-src]: https://github.com/not-fl3/macroquad/blob/master/examples/shadertoy.rs +[macroquad-doc]: https://docs.rs/macroquad/0.3.0-alpha.0/macroquad/index.html +[@fedor_games]: https://twitter.com/fedor_games +[@not-fl3]: https://github.com/not-fl3 +[sponsors]: https://github.com/sponsors/not-fl3 + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month, +version [0.5][tetra-05] was released, featuring: + +- Cargo feature flags, allowing you to remove unused functionality and + shrink your build +- Relative mouse events and infinite mouse movement (allowing for FPS-style + control schemes) +- Extra methods for getting and setting the state of a playing sound + +For full details and a list of breaking changes, see the [changelog][tetra-changelog]. + +Additionally, this month [puppetmaster] released [tetrapack], a set of useful +extensions for Tetra. This includes: + +- Helpful timer types +- Looping background music +- Custom mouse cursors +- Input utility functions +- Tilemaps and tile animations + +[tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-05]: https://twitter.com/17cupsofcoffee/status/1301210538299609088 +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[puppetmaster]: https://github.com/puppetmaster- +[tetrapack]: https://github.com/puppetmaster-/tetrapack + +### [Bevy Engine v0.2][bevy-0-2] + +[![bevy logo](bevy_logo.png)][bevy] + +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. +It is [free and open source][bevy-repo] forever! + +This month, thanks to 87 contributors, 174 pull requests, and their +[generous sponsors][bevy-sponsors], Bevy 0.2 was released. You can view the +[full Bevy 0.2 announcement here][bevy-0-2]. Here are some highlights: + +- Async Task System: Bevy now has a brand new async-friendly task system, + which enables the creation of context-specific task pools. For example, you might + have separate pools for compute, IO, networking, etc. This also provides the + flexibility to load balance work appropriately according to work type and/or priority. + This new task system completely replaces Rayon and the cpu usage wins were huge! +- Initial Web Platform Support: (A subset of) Bevy now runs on the web using + WebAssembly/WASM! Specifically, Bevy apps can run Bevy ECS schedules, react to + input events, create an empty canvas (using winit), and a few other things. This + is a huge first step, but it is important to call out that there are still a + number of missing pieces, such as 2D/3D rendering, multi-threading, and sound. +- Parallel Queries: Systems that use queries already run in parallel, + but before this change the queries themselves could not be iterated in parallel. + Bevy 0.2 adds the ability to easily iterate queries in parallel, which builds on + top of the new Async Task System. +- Transform System Rewrite: Bevy's old transform system used separate + `Translation`, `Rotation`, and `Scale` components as the "source of truth", + which were then synced to a `LocalTransform` component after each update. There + are Good Reasons™ to use this approach, but it created a "lag" between the + calculated LocalTransform and the source components and dataflow between components + is hard to reason about. This problem was resolved by making a newer, simpler + transform system that uses a consolidated `Transform` type. +- Joystick/Gamepad Input: The Bevy Input plugin now has cross-platform support + for most controllers thanks to the gilrs library! +- Bevy ECS Performance Improvements: generational entity IDs, + read-only queries, lock-free world APIs, direct component lookup. + +Community plugin updates: + +- [bevy_rapier](https://github.com/dimforge/bevy_rapier): + Rapier Physics' official Bevy plugin was updated to support Bevy 0.2. +- [bevy_ninepatch](https://crates.io/crates/bevy_ninepatch): + Display 9-Patch UI elements, where you can specify how + different parts of a PNG should grow. +- [bevy_mod_picking](https://github.com/aevyrie/bevy_mod_picking): 3d cursor + picking and highlighting. +- [bevy_contrib_colors](https://crates.io/crates/bevy_contrib_colors): + A simple color library. +- [bevy_input_map](https://crates.io/crates/bevy_prototype_input_map): + Converts user inputs from different input hardware into game specific actions. + Ex: keyboard "Space" or joystick "A" can be mapped to a "Jump" Action. +- [bevy_prototype_lyon](https://github.com/Nilirad/bevy_prototype_lyon): + Draw 2D shapes, like triangles, circles, and beziers. +- [bevy_contrib_inspector](https://github.com/jakobhellermann/bevy-contrib-inspector): + Visually edit fields of your bevy resources in a browser or native view. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/iw1yyp/bevy_02), +[hacker news](https://news.ycombinator.com/item?id=24530698), +[twitter](https://twitter.com/cart_cart/status/1307445918535315456)_ + +[bevy]: https://bevyengine.org +[bevy-repo]: https://github.com/bevyengine/bevy +[bevy-0-2]: https://bevyengine.org/news/bevy-0-2 +[bevy-sponsors]: https://github.com/sponsors/cart + +### [rg3d][rg3d] + +[![a scene with lightning and a hi-poly character model](rg3d.jpg)][rg3d_twitter] +_Click to watch a [video demo of one of the new examples][rg3d_twit]._ + +[rg3d] is a game engine that aims to be easy to use and provide large set +of out-of-box features. Some of the recent updates: + +- Render to texture - it is possible to render scenes into textures. +- Added support for scenes made in [rusty-editor]. +- Added sprite graph node. +- Added simple lightmapper (still WIP). +- Added new UI widgets and features: + - Message box - classic message box with different combinations of buttons. + - Wrap panel - arranges its children by rows or columns with wrapping. + - File browser - a browser for file system. + - Color picker - classic HSV+RGB+Alpha color picker. + - "Bring into view" for scroll panel. + - Replaced font rasterizer by fontdue. + - Improved hotkeys in text box. +- Improved performance and documentation. + +Join the [rg3d's Discord channel][rg3d_discord] +or follow [Dmitry Stepanov on twitter][rg3d_twitter]. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_twit]: https://twitter.com/DmitryS36934349/status/1312836831390687232 +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryS36934349 + +### [rusty-editor] + +![rusty editor](rusty_editor.jpg) + +[rusty-editor] is a scene editor for the [rg3d] engine. +Some of the recently added features: + +- asset browser + asset previewer, +- multiselection, +- improved properties editor, +- lots of other small improvements and fixes. + +[rusty-editor]: https://github.com/mrDIMAS/rusty-editor + +### [godot-rust][godot-rust-site] v0.9 + +![cute logo](godot.png) + +[godot-rust][godot-rust-site] provides high-level Rust bindings +to the [Godot game engine][godot]. + +This month [v0.9 was released][godot-rust-v0-9]. +Besides lots of quality-of-life improvements, this update brings a massive +redesign of the API in order to solve long-standing soundness problems. +As there're numerous breaking changes, +a [chapter about migration from 0.8][godot-rust-migration] was added +to the user guide. + +[godot]: http://godotengine.org +[godot-rust-site]: https://godot-rust.github.io/ +[godot-rust-v0-9]: https://godot-rust.github.io/release-notes/0-9-0/ +[godot-rust-migration]: https://godot-rust.github.io/book/migrating-0-8.html + +## Popular Workgroup Issues in Github + +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#21 "Planning a survey for Rust game developers"](https://github.com/rust-gamedev/wg/issues/21); + - [#93 "Consider creating a game math library benchmark for the working group"](https://github.com/rust-gamedev/wg/issues/93); +- [rust-gamedev/ecs_bench_suite](https://github.com/rust-gamedev/ecs_bench_suite): + - [#13 "How results will be updated?"](https://github.com/rust-gamedev/ecs_bench_suite/issues/13); + +## Requests for Contribution + + + +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [winit's "Good first issue" and “help wanted” issues][winit-issues]. +- [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]. + +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[winit-issues]: https://github.com/rust-windowing/winit/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3A%22status%3A+help+wanted%22+label%3A%22Good+first+issue%22 +[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/dabreegster/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 + +------ + +That's all news for today, thanks for reading! + +Subscribe to [@rust_gamedev on Twitter][@rust_gamedev] +or [/r/rust_gamedev subreddit][/r/rust_gamedev] if you want to receive fresh news! + +**Discussions of this post**: +[/r/rust](https://reddit.com/r/rust/comments/j722i5/this_month_in_rust_gamedev_14_september_2020), +[twitter](https://twitter.com/rust_gamedev/status/1313986312156966913). + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/posts/newsletter-014/legion_violin.png b/content/posts/newsletter-014/legion_violin.png new file mode 100644 index 000000000..cb9ac6870 Binary files /dev/null and b/content/posts/newsletter-014/legion_violin.png differ diff --git a/content/posts/newsletter-014/lines_hexstrat.jpeg b/content/posts/newsletter-014/lines_hexstrat.jpeg new file mode 100644 index 000000000..59aa93d1d Binary files /dev/null and b/content/posts/newsletter-014/lines_hexstrat.jpeg differ diff --git a/content/posts/newsletter-014/mimas.png b/content/posts/newsletter-014/mimas.png new file mode 100644 index 000000000..bb89665dd Binary files /dev/null and b/content/posts/newsletter-014/mimas.png differ diff --git a/content/posts/newsletter-014/mun-logo.png b/content/posts/newsletter-014/mun-logo.png new file mode 100644 index 000000000..02295dc77 Binary files /dev/null and b/content/posts/newsletter-014/mun-logo.png differ diff --git a/content/posts/newsletter-014/noxfutura.jpeg b/content/posts/newsletter-014/noxfutura.jpeg new file mode 100644 index 000000000..9efff8721 Binary files /dev/null and b/content/posts/newsletter-014/noxfutura.jpeg differ diff --git a/content/posts/newsletter-014/ohnolava_troligtvis.gif b/content/posts/newsletter-014/ohnolava_troligtvis.gif new file mode 100644 index 000000000..807a5c8cc Binary files /dev/null and b/content/posts/newsletter-014/ohnolava_troligtvis.gif differ diff --git a/content/posts/newsletter-014/opengl_preprocessor.png b/content/posts/newsletter-014/opengl_preprocessor.png new file mode 100644 index 000000000..b50da403d Binary files /dev/null and b/content/posts/newsletter-014/opengl_preprocessor.png differ diff --git a/content/posts/newsletter-014/pglowrpg_banner.png b/content/posts/newsletter-014/pglowrpg_banner.png new file mode 100644 index 000000000..f1330a4d5 Binary files /dev/null and b/content/posts/newsletter-014/pglowrpg_banner.png differ diff --git a/content/posts/newsletter-014/project_yawc.png b/content/posts/newsletter-014/project_yawc.png new file mode 100644 index 000000000..d14fd9e6d Binary files /dev/null and b/content/posts/newsletter-014/project_yawc.png differ diff --git a/content/posts/newsletter-014/quadgames.gif b/content/posts/newsletter-014/quadgames.gif new file mode 100644 index 000000000..16be4a55a Binary files /dev/null and b/content/posts/newsletter-014/quadgames.gif differ diff --git a/content/posts/newsletter-014/recall_singularity.png b/content/posts/newsletter-014/recall_singularity.png new file mode 100644 index 000000000..371069ecc Binary files /dev/null and b/content/posts/newsletter-014/recall_singularity.png differ diff --git a/content/posts/newsletter-014/rg3d.jpg b/content/posts/newsletter-014/rg3d.jpg new file mode 100644 index 000000000..2a5a98d45 Binary files /dev/null and b/content/posts/newsletter-014/rg3d.jpg differ diff --git a/content/posts/newsletter-014/rusty_editor.jpg b/content/posts/newsletter-014/rusty_editor.jpg new file mode 100644 index 000000000..c3410d512 Binary files /dev/null and b/content/posts/newsletter-014/rusty_editor.jpg differ diff --git a/content/posts/newsletter-014/shadertoy.gif b/content/posts/newsletter-014/shadertoy.gif new file mode 100644 index 000000000..06f39564f Binary files /dev/null and b/content/posts/newsletter-014/shadertoy.gif differ diff --git a/content/posts/newsletter-014/space_shooter_rs.gif b/content/posts/newsletter-014/space_shooter_rs.gif new file mode 100644 index 000000000..3c614370f Binary files /dev/null and b/content/posts/newsletter-014/space_shooter_rs.gif differ diff --git a/content/posts/newsletter-014/tantan_bevy.png b/content/posts/newsletter-014/tantan_bevy.png new file mode 100644 index 000000000..0c0c0f32b Binary files /dev/null and b/content/posts/newsletter-014/tantan_bevy.png differ diff --git a/content/posts/newsletter-014/tetris-bane.png b/content/posts/newsletter-014/tetris-bane.png new file mode 100644 index 000000000..caa648ffe Binary files /dev/null and b/content/posts/newsletter-014/tetris-bane.png differ diff --git a/content/posts/newsletter-014/veloren_night.png b/content/posts/newsletter-014/veloren_night.png new file mode 100644 index 000000000..6a6b0e4aa Binary files /dev/null and b/content/posts/newsletter-014/veloren_night.png differ diff --git a/content/posts/newsletter-014/veloren_river.png b/content/posts/newsletter-014/veloren_river.png new file mode 100644 index 000000000..5b2d8970f Binary files /dev/null and b/content/posts/newsletter-014/veloren_river.png differ diff --git a/content/posts/newsletter-014/way-of-rhea-header.jpg b/content/posts/newsletter-014/way-of-rhea-header.jpg new file mode 100644 index 000000000..bac5f89e8 Binary files /dev/null and b/content/posts/newsletter-014/way-of-rhea-header.jpg differ diff --git a/content/posts/newsletter-014/way-of-rhea-ice-biome-snowcrab.png b/content/posts/newsletter-014/way-of-rhea-ice-biome-snowcrab.png new file mode 100644 index 000000000..6d1b3e32e Binary files /dev/null and b/content/posts/newsletter-014/way-of-rhea-ice-biome-snowcrab.png differ diff --git a/content/posts/newsletter-014/zemeroth_chain.gif b/content/posts/newsletter-014/zemeroth_chain.gif new file mode 100644 index 000000000..81e5601b8 Binary files /dev/null and b/content/posts/newsletter-014/zemeroth_chain.gif differ diff --git a/content/posts/newsletter-015/index.md b/content/posts/newsletter-015/index.md new file mode 100644 index 000000000..1edad460f --- /dev/null +++ b/content/posts/newsletter-015/index.md @@ -0,0 +1,112 @@ ++++ +title = "This Month in Rust GameDev #15 - October 2020" +date = 2020-11-03 +transparent = true +draft = true ++++ + + + +Welcome to the 15th issue of the Rust GameDev Workgroup's +monthly newsletter. +[Rust] is a systems language pursuing the trifecta: +safety, concurrency, and speed. +These goals are well-aligned with game development. +We hope to build an inviting ecosystem for anyone wishing +to use Rust in their development process! +Want to get involved? [Join the Rust GameDev working group!][join] + +You can follow the newsletter creation process +by watching [the coordination issues][coordination]. +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. +Feel free to send PRs about your own projects! + +[Rust]: https://rust-lang.org +[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 + +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Meeting Minutes](#meeting-minutes) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) +- [Bonus](#bonus) + + + +## Game Updates + +## Learning Material Updates + +## Library & Tooling Updates + +## Popular Workgroup Issues in Github + + + +## Meeting Minutes + + + +[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 + + + +## Jobs + + + +## Bonus + + + +------ + +That's all news for today, thanks for reading! + +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. + +Also, subscribe to [@rust_gamedev on Twitter][@rust_gamedev] +or [/r/rust_gamedev subreddit][/r/rust_gamedev] if you want to receive fresh news! + + + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev +[pr]: https://github.com/rust-gamedev/rust-gamedev.github.io diff --git a/newsletter-template.md b/newsletter-template.md index 495038607..40cace3dd 100644 --- a/newsletter-template.md +++ b/newsletter-template.md @@ -6,30 +6,46 @@ draft = true -Welcome to the {TODO}th issue of the Rust GameDev Workgroup’s +Welcome to the {TODO}th issue of the Rust GameDev Workgroup's monthly newsletter. - [Rust] is a systems language pursuing the trifecta: safety, concurrency, and speed. These goals are well-aligned with game development. - We hope to build an inviting ecosystem for anyone wishing to use Rust in their development process! Want to get involved? [Join the Rust GameDev working group!][join] +You can follow the newsletter creation process +by watching [the coordination issues][coordination]. +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. +Feel free to send PRs about your own projects! + +[Rust]: https://rust-lang.org +[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 -## News and Blog Posts +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Meeting Minutes](#meeting-minutes) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) +- [Bonus](#bonus) -### Other News +## Game Updates - +## Learning Material Updates + +## Library & Tooling Updates ## Popular Workgroup Issues in Github diff --git a/sass/_extra.scss b/sass/_extra.scss index 8c5fa5bc7..7b68f1b9d 100644 --- a/sass/_extra.scss +++ b/sass/_extra.scss @@ -7,6 +7,11 @@ li { margin: 15px 0; } +pre > code { + // To avoid grey background on code blocks. + background-color: inherit; +} + .intro { color: #ffffff; background-color: $brand-color; @@ -95,3 +100,12 @@ a.btn { border-color: $brand-color; } } + +// A hack for image captions. +// See https://stackoverflow.com/questions/19331362/using-an-image-caption-in-markdown-jekyll +img + em, +a:first-child + em:last-child { + display: block; + text-align: center; + color: $grey-color; +}