diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..951e49ee1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,3 @@ +[*.{md,mkdn}] +trim_trailing_whitespace = false +indent_style = space diff --git a/.github/create_newsletter_scaffold.sh b/.github/create_newsletter_scaffold.sh new file mode 100755 index 000000000..45184e856 --- /dev/null +++ b/.github/create_newsletter_scaffold.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ -z "${NEWSLETTER_MONTH}" ]]; then + echo "NEWSLETTER_MONTH is not set. Exiting..." + exit 1 +fi + +if [[ -z "${NEWSLETTER_YEAR}" ]]; then + echo "NEWSLETTER_YEAR is not set. Exiting..." + exit 1 +fi + +if [[ -z "${NEWSLETTER_COUNTER}" ]]; then + echo "NEWSLETTER_COUNTER is not set. Exiting..." + exit 1 +fi + +# NEWSLETTER_NEXT_MONTH_NUMBER +if [[ -z "${NEWSLETTER_NEXT_MONTH_NUMBER}" ]]; then + echo "NEWSLETTER_NEXT_MONTH_NUMBER is not set. Exiting..." + exit 1 +fi + +cp .github/newsletter-template.md index.md +sed -i "s/{{\s*NEWSLETTER_MONTH\s*}}/${NEWSLETTER_MONTH}/g" index.md +sed -i "s/{{\s*NEWSLETTER_YEAR\s*}}/${NEWSLETTER_YEAR}/g" index.md +sed -i "s/{{\s*NEWSLETTER_COUNTER\s*}}/${NEWSLETTER_COUNTER}/g" index.md +sed -i "s/{{\s*NEWSLETTER_COUNTER_NEXT\s*}}/$((NEWSLETTER_COUNTER + 1))/g" index.md +sed -i "s/{{\s*NEWSLETTER_NEXT_MONTH_NUMBER\s*}}/${NEWSLETTER_NEXT_MONTH_NUMBER}/g" index.md +# Create a dir in content/news with the counter with 3 digits as name +destination="content/news/$(printf "%03d" ${NEWSLETTER_COUNTER})" +mkdir -p $destination +mv index.md $destination/index.md +git status diff --git a/.github/newsletter-issue-template.md b/.github/newsletter-issue-template.md new file mode 100644 index 000000000..ec9566cd3 --- /dev/null +++ b/.github/newsletter-issue-template.md @@ -0,0 +1,165 @@ +--- +title: "Newsletter {{ env.NEWSLETTER_COUNTER}}: {{ env.NEWSLETTER_MONTH }} {{ env.NEWSLETTER_YEAR }}" +labels: coordination, help wanted +assignees: AngelOnFira, mamaicode, janhohenheim +--- + +**Editors:** @janhohenheim, @AngelOnFira, @mamaicode + +Another month has gone by, so it's time to put together the Rust Gamedev newsletter with {{ env.NEWSLETTER_MONTH }}'s news! + +## Current Schedule + +The deadline for all section PRs is the **28th of {{ env.NEWSLETTER_MONTH}}, {{ env.NEWSLETTER_YEAR }}**. Submissions after this date will be added to the next newsletter. +Our target release date is the **3rd of {{ env.NEWSLETTER_NEXT_MONTH }}, {{ env.NEWSLETTER_YEAR }}**. + +## Current Structure & Status + +Below is our current planned structure for the newsletter, and the status of each PR (which we'll try to keep updated). + +This is **not** an exhaustive list - if you have your own project that you want to write about, just make a comment on this issue and open a PR! + +### Game Updates + +None yet. Feel free to submit yours! + +### Learning Material Updates + +None yet. Feel free to submit yours! + +### Engine Updates + +None yet. Feel free to submit yours! + +### Tooling Updates + +None yet. Feel free to submit yours! + +### Library Updates + +None yet. Feel free to submit yours! + +### Other News + +None yet. Feel free to submit yours! + +### Discussions + +None yet. Feel free to submit yours! + +## Calls for Submissions + +### Social Media + +- [ ] Reddit +- [ ] Lemmy +- [ ] Mastodon +- [ ] Twitter/X +- [ ] Hacker News + +### Discord Servers + +- [ ] Rust GameDev +- [ ] Bevy +- [ ] Blue Engine +- [ ] Macroquad +- [ ] Fyrox +- [ ] LogLogGames (comfy engine) +- [ ] Spicy Lobster +- [ ] Rust Godot + +Let us know if you also want to receive monthly reminders on your Discord server! + +## Publishing Steps + +- [ ] Final review - by everyone +- [ ] Publish - by @janhohenheim +- [ ] Post together with next calls for submissions - by @janhohenheim +- [ ] Pin thread on social media - by @janhohenheim +- [ ] Add comment links - by @janhohenheim + +## How to Contribute + +If you want to help writing the newsletter: + +- **Read [CONTRIBUTING.md](https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/CONTRIBUTING.md?rgh-link-date=2023-09-12T16%3A17%3A34Z).** +- Choose one or more of the "🆓 **free**" sections listed below, and leave a comment letting us know you want to work on them. + - The links in brackets (like `[1](#), [2](#), [3](#)`) are suggestions of links to include in the section. Feel free to add more! + - The username listed next to the section (like `@janhohenheim?`) is a suggestion of who may want to pick up the work (usually the project's developer, or someone who has expressed interest in the past). + - You are not obligated to write a section if you're tagged or your project is listed! You're welcome to ask someone else to write the section, or to ask for your project to be excluded from this month's post. + - Extra sections not listed in the plan are welcomed - just leave a comment and open a PR! +- Write a short overview in the newsletter's Markdown file, making sure to follow the style guidelines (see below). +- Send a PR [_to the `source` branch_](https://github.com/rust-gamedev/rust-gamedev.github.io/tree/source) (example PR: [N15: A/B Street #336](https://github.com/rust-gamedev/rust-gamedev.github.io/pull/336)). +- Mention this issue in your PR's description to link it all together. + +## Style Guidelines + +The full style guide is in [CONTRIBUTING.md](https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/CONTRIBUTING.md?rgh-link-date=2023-09-12T16%3A17%3A34Z), +but here are the most important rules: + +- Write in third-person perspective. +- Each line must be 160 characters or less, for ease of reviewing/diffing. +- Only one image per section is allowed. + - The maximum size is 300kb for static images and 2.5mb for GIFs. + - The image should come before the text, and must have alt text for accessibility. + - Prefer static images to GIFs/videos, to keep the page load times down. + - To include a video, encode it as `H.264` in an `mp4` container and use + the `video_figure()` shortcode; videos autoplay in a loop (muted). +- Each section should be under 1000 characters, and under 6 paragraphs. + - This only applies to the rendered text, not the markup. +- Keep formatting minimal - no bold/italics/etc. +- Avoid long/nested bullet point lists - no changelogs! + +Please use these templates as a starting point: + +**Games/apps/libraries:** + +```md +### [Game name] + +{{ image_figure( + alt="image/GIF description", + src="https://github.com/image%20link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="https://github.com/my-video.mp4", + caption="optional video caption") }} + +[Game name] ([GitHub], [Discord], [Twitter]) by [@nickname] +is... {short project description in one sentence}. + +{An overview of the recent updates with links to more details}. + +_Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_ + +[Game name]: http://example.com +``` + +**Articles/blog posts/videos/etc:** + +```md +### [Article name] + +{{ image_figure( + alt="image/GIF description", + src="https://github.com/image%20link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="https://github.com/my-video.mp4", + caption="optional video caption") }} + +[@nickname] published an [article] about... +{overview what the resource is about}. + +_Discussions: [/r/rust_gamedev](link), [Twiter](link), [etc](link)_ + +[Article name]: http://example.com +``` diff --git a/newsletter-template.md b/.github/newsletter-template.md similarity index 63% rename from newsletter-template.md rename to .github/newsletter-template.md index 0d1de6058..35158343f 100644 --- a/newsletter-template.md +++ b/.github/newsletter-template.md @@ -1,6 +1,7 @@ +++ -title = "This Month in Rust GameDev #{TODO} - {TODO} {TODO}" +title = "This Month in Rust GameDev #{{ NEWSLETTER_COUNTER }} - {{ NEWSLETTER_MONTH }} {{ NEWSLETTER_YEAR }}" transparent = true +date = {{ NEWSLETTER_YEAR }}-{{ NEWSLETTER_NEXT_MONTH_NUMBER }}-03 draft = true +++ @@ -8,7 +9,7 @@ draft = true -Welcome to the {TODO}th issue of the Rust GameDev Workgroup's +Welcome to the {{ NEWSLETTER_COUNTER }}th issue of the Rust GameDev Workgroup's monthly newsletter. [Rust] is a systems language pursuing the trifecta: safety, concurrency, and speed. @@ -27,21 +28,21 @@ Feel free to send PRs about your own projects! [join]: https://github.com/rust-gamedev/wg#join-the-fun [pr]: https://github.com/rust-gamedev/rust-gamedev.github.io [coordination]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination -[Rust]: https://rust-lang.org -[join]: https://github.com/rust-gamedev/wg#join-the-fun +- [Announcements](#announcements) - [Game Updates](#game-updates) -- [Learning Material Updates](#learning-material-updates) - [Engine Updates](#engine-updates) +- [Learning Material Updates](#learning-material-updates) - [Tooling Updates](#tooling-updates) - [Library Updates](#library-updates) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Other News](#other-news) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) - [Meeting Minutes](#meeting-minutes) - [Discussions](#discussions) - [Requests for Contribution](#requests-for-contribution) - [Jobs](#jobs) - [Bonus](#bonus) +- [Future news](#future-news) +## Announcements + ## Game Updates ## Engine Updates @@ -75,7 +87,7 @@ If needed, a section can be split into subsections with a "------" delimiter. ## Library Updates -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub @@ -110,24 +122,38 @@ useful information --> +## Future news + + + +Editing this newsletter wouldn't be possible without [your contributions][news_current_prs]. +Thanks to everyone who helped us this month! + +If you want something mentioned in the next newsletter, [send us a pull request][pr]. + +You can also get an early look at pending issues for the [next newsletter][news_future_prs]. + +[news_current_prs]: https://github.com/rust-gamedev/rust-gamedev.github.io/pulls?q=is%3Apr+in%3Atitle+%27N{{ NEWSLETTER_COUNTER }}%27 +[news_future_prs]: https://github.com/rust-gamedev/rust-gamedev.github.io/pulls?q=is%3Apr+in%3Atitle+%27N{{ NEWSLETTER_COUNTER_NEXT }}%27 + ------ 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! +Also, subscribe to our socials if you want to receive fresh news! +- X/Twitter: [@rust_gamedev][@x_rust_gamedev] +- Mastodon: [@rust_gamedev][@mastodon_rust_gamedev] +- Reddit: [/r/rust_gamedev][/r/rust_gamedev] [/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 +[@x_rust_gamedev]: https://twitter.com/rust_gamedev +[@mastodon_rust_gamedev]: https://mastodon.gamedev.place/@rust_gamedev diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f218ed383..7035bdd57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: Zola on: push: - branches: source + branches: main pull_request: jobs: @@ -10,25 +10,74 @@ jobs: runs-on: ubuntu-latest env: BASE_URL: https://github.com/getzola/zola/releases/download - VERS: v0.14.1 + VERS: v0.19.1 ARCH: x86_64-unknown-linux-gnu - # https://github.com/marketplace/actions/github-pages#warning-limitation - GITHUB_PAT: ${{ secrets.GITHUB_PAT }} + # https://github.com/crazy-max/ghaction-github-pages/issues/1#issuecomment-623202206 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Lint uses: avto-dev/markdown-lint@v1 with: args: '.' config: '.markdownlint.json' - name: Install Zola - run: curl -L ${BASE_URL}/${VERS}/zola-${VERS}-${ARCH}.tar.gz | tar -xz - - run: ./zola --version - - run: ./zola build - - name: Deploy - if: github.ref == 'refs/heads/source' - uses: crazy-max/ghaction-github-pages@v1 + run: | + curl -L ${BASE_URL}/${VERS}/zola-${VERS}-${ARCH}.tar.gz | tar -xz + echo "Zola version: $(./zola --version)" + - name: Zola build + run: ./zola build + - name: Upload GitHub Pages artifact + uses: actions/upload-pages-artifact@v3 with: - build_dir: public - target_branch: master - keep_history: true + path: public + + links: + name: Check for Broken Links + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }} + - name: Get changed files + id: changed-files + # source: https://stackoverflow.com/a/74268200, added filtering for markdown files + run: | + if ${{ github.event_name == 'pull_request' }}; then + changed_files=$(git diff --name-only -r HEAD^1 HEAD -z | grep '\.md$' -zZ | xargs -0) + else + changed_files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} -z | grep '\.md$' -zZ | xargs -0) + fi + echo "changed_files: $changed_files" + echo "changed_files=$changed_files" >> $GITHUB_OUTPUT + - name: Check links + uses: lycheeverse/lychee-action@v1.9.0 + if: ${{ steps.changed-files.outputs.changed_files != '' }} + with: + fail: true + args: >- + --verbose + --no-progress + --accept '100..=103,200..=299,300..=399' + --exclude '[^\w]todo[^\w]?' + --exclude 'https://(www/.|old/.)?reddit\.com' + --exclude 'https://www.patreon.com/' + --exclude 'https://gamedev.social/' + --exclude 'dev.epicgames.com' + --exclude-path 'assets/logo/readme.md' + ${{ steps.changed-files.outputs.changed_files }} + + pages: + needs: zola + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + if: format('refs/heads/{0}', github.event.repository.default_branch) == github.ref + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/create-newsletter.yaml b/.github/workflows/create-newsletter.yaml new file mode 100644 index 000000000..888db62aa --- /dev/null +++ b/.github/workflows/create-newsletter.yaml @@ -0,0 +1,45 @@ +name: Create Newsletter +on: + schedule: + # Run on the 3rd of every month at 9 am + - cron: "0 9 3 * *" + workflow_dispatch: + inputs: {} +permissions: + contents: write + issues: write + pull-requests: write +jobs: + create-newsletter: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: main + - name: Set environment variables + run: | + echo "NEWSLETTER_MONTH=$(date +'%B')" >> $GITHUB_ENV + echo "NEWSLETTER_NEXT_MONTH=$(date -d' 1 month ' +'%B')" >> $GITHUB_ENV + echo "NEWSLETTER_NEXT_MONTH_NUMBER=$(date -d' 1 month ' +'%m')" >> $GITHUB_ENV + echo "NEWSLETTER_YEAR=$(date +'%Y')" >> $GITHUB_ENV + # take the amount of months since feb 2024 and add 50 + echo "NEWSLETTER_COUNTER=$(( ( ( $(date +'%Y') - 2024 ) * 12 + $(date +'%m') - 4 ) + 50 ))" >> $GITHUB_ENV + - name: Create newsletter scaffold + run: ./.github/create_newsletter_scaffold.sh + - name: Commit and create pull request + uses: peter-evans/create-pull-request@v3 + with: + commit-message: "Create newsletter N${{ env.NEWSLETTER_COUNTER }} for ${{ env.NEWSLETTER_MONTH }} ${{ env.NEWSLETTER_YEAR }}" + branch: "start-newsletter-${{ env.NEWSLETTER_COUNTER }}" + title: "Newsletter N${{ env.NEWSLETTER_COUNTER }} for ${{ env.NEWSLETTER_MONTH }} ${{ env.NEWSLETTER_YEAR }}" + body: "This PR adds the initial newsletter source file for ${{ env.NEWSLETTER_MONTH }} ${{ env.NEWSLETTER_YEAR }}." + assignees: | + AngelOnFira + janhohenheim + mamaicode + - name: Create tracking issue + uses: JasonEtco/create-an-issue@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + filename: .github/newsletter-issue-template.md diff --git a/.gitignore b/.gitignore index 489e8c016..0036b599a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ public/ .idea/ +*.DS_Store diff --git a/.markdownlint.json b/.markdownlint.json index 196cbc370..2254eb4e0 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,12 +1,21 @@ { "line-length": { - "line_length": 80, + "line_length": 160, "code_blocks": false }, - "ul-style": { - "style": "dash" - }, - "no-trailing-punctuation": { - "punctuation": ".,;:。,;:" + "blanks-around-lists": false, + "blanks-around-headings": false, + "no-multiple-blanks": false, + "no-trailing-spaces": false, + "no-trailing-punctuation": false, + "no-hard-tabs": false, + "hr-style": false, + "strong-style": false, + "no-bare-urls": false, + "emphasis-style": false, + "no-inline-html": { + "allowed_elements": [ + "abbr" + ] } -} +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 769186e3f..ef174b4f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,10 +2,13 @@ Thank you for contributing to the newsletter! 💖 -- [Writing Newsletter Sections](#writing-newsletter-sections) - - [Templates](#templates) - - [Style Guidelines](#style-guidelines) -- [Becoming an Editor](#becoming-an-editor) +- [Contributing Guide](#contributing-guide) + - [Writing Newsletter Sections](#writing-newsletter-sections) + - [Templates](#templates) + - [Games, Apps or Libraries](#games-apps-or-libraries) + - [Articles, Blog Posts or Videos](#articles-blog-posts-or-videos) + - [Style Guidelines](#style-guidelines) + - [Becoming an Editor](#becoming-an-editor) ## Writing Newsletter Sections @@ -53,8 +56,17 @@ your GitHub notifications for any further review comments from the editors. ```md ### [Game name] -![alt text](img) -_optional image label_ +{{ image_figure( + alt="image/GIF description", + src="https://github.com/image%20link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="https://github.com/my-video.mp4", + caption="optional video caption") }} [Game name] ([GitHub], [Discord], [Twitter]) by [@nickname] is... {short project description in one sentence}. @@ -71,8 +83,17 @@ _Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_ ```md ### [Article name] -![alt text](img) -_optional image label_ +{{ image_figure( + alt="image/GIF description", + src="https://github.com/image%20link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="https://github.com/my-video.mp4", + caption="optional video caption") }} [@nickname] published an [article] about... {overview what the resource is about}. @@ -96,11 +117,13 @@ _Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_ - Avoid having multiple/nested bullet points. - This guideline may be relaxed if your project has multiple parts that aren't independent enough for their own sections. -- Only include one image (<300kb) or GIF (<2.5mb). +- Only include one image (<300kb), GIF (<2.5mb) or video (<2.5mb). - Images should be placed before text, with an optional caption and mandatory alternate text for accessibility. - Unless essential to demonstrating your project, prefer static images - over GIFs, to keep the file size down. + over GIFs/videos, to keep the file size down. + - To include a video, encode it as `H.264` in an `mp4` container and use + the `video_figure()` shortcode; videos autoplay in a loop (muted). - Use singular 'they' if you’re not sure what someone's pronouns are. - If a project has been featured in previous newsletters, try to focus on what's new rather than repeating previous content. diff --git a/LICENSE-APACHE.txt b/LICENSE-APACHE.txt new file mode 100644 index 000000000..df5035b57 --- /dev/null +++ b/LICENSE-APACHE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2024 Rust GameDev Working Group + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/LICENSE-MIT.txt b/LICENSE-MIT.txt new file mode 100644 index 000000000..1375ceaa9 --- /dev/null +++ b/LICENSE-MIT.txt @@ -0,0 +1,7 @@ +Copyright 2024 Rust GameDev Working Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index f44bb0a7e..d15b1fb88 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The site is built and deployed automatically from the repo (see To preview/experiment locally: -1) [Install Zola][zola-get]. Make sure to use 0.14.1, to match [our CI config][ci]! +1) [Install Zola][zola-get]. Make sure to use 0.19.1, to match [our CI config][ci]! 2) Run `zola serve --drafts` and open the link. [zola-get]: https://getzola.org/documentation/getting-started/installation @@ -23,9 +23,9 @@ To preview/experiment locally: This project is licensed under either of: -- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or +- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE.txt) or ) -- MIT license ([LICENSE-MIT](LICENSE-MIT) or +- MIT license ([LICENSE-MIT](LICENSE-MIT.txt) or ) With the exception of: diff --git a/assets/logo/readme.md b/assets/logo/readme.md new file mode 100644 index 000000000..94cca47c6 --- /dev/null +++ b/assets/logo/readme.md @@ -0,0 +1,12 @@ +# Logo + +The vectorized logo is a re-drawn version based on +[@shmutalov](https://github.com/shmutalov)'s [original, rasterized version](https://github.com/rust-gamedev/wg/issues/4). + +It incorporates the official [rust-logo-gear-only.svg](https://github.com/rust-lang/rust-artwork/blob/master/logo/rust-logo-gear-only.svg). + +## Exporting + +The various exported PNG's in [static](../static/) can be found in [rust-gamedev-logo-raw.svg](./rust-gamedev-logo-raw.svg) as individual (Inkscape) pages. + +After exporting be sure to run `svgo` on the exported SVG and `optipng` on the exported PNGs. diff --git a/assets/logo/rust-gamedev-logo-raw.svg b/assets/logo/rust-gamedev-logo-raw.svg new file mode 100644 index 000000000..12dec1bae --- /dev/null +++ b/assets/logo/rust-gamedev-logo-raw.svg @@ -0,0 +1,622 @@ + +Rust GameDev WG Making Rust a first-class choice for game development diff --git a/config.toml b/config.toml index 3096bb917..5fc7bd5cc 100644 --- a/config.toml +++ b/config.toml @@ -3,11 +3,12 @@ description = "Stay up to date with the progress and recent developments in the base_url = "https://gamedev.rs/" default_language = "en" compile_sass = true -generate_feed = true -feed_filename = "rss.xml" +generate_feeds = true +feed_filenames = ["rss.xml"] [markdown] highlight_code = true +smart_punctuation = true [extra] date_format = "%F" diff --git a/content/blog/2019-08-18-introducing-the-rust-game-development-working-group.md b/content/blog/2019-08-18-introducing-the-rust-game-development-working-group.md index e65c39259..847e8b2c1 100644 --- a/content/blog/2019-08-18-introducing-the-rust-game-development-working-group.md +++ b/content/blog/2019-08-18-introducing-the-rust-game-development-working-group.md @@ -47,7 +47,7 @@ we've already got several projects underway: ## How can I get involved? -Our main hub for co-ordination is our [Github repository](https://github.com/rust-gamedev/wg), +Our main hub for co-ordination is our [GitHub repository](https://github.com/rust-gamedev/wg), where you can (and should!) raise issues calling out your ideas, proposals or problems with the Rust gamedev ecosystem. We also have a `#wg-gamedev` channel on the [official Rust Discord server](https://discord.gg/j6QJsMd), diff --git a/content/blog/graphics-meetup-02/index.md b/content/blog/graphics-meetup-02/index.md new file mode 100644 index 000000000..477d2e5a7 --- /dev/null +++ b/content/blog/graphics-meetup-02/index.md @@ -0,0 +1,65 @@ ++++ +title = "Rust Graphics Meetup 2" +date = 2022-05-18 +transparent = true +aliases = ["posts/graphics-meetup-02"] ++++ + + + + +![Rust Graphics Meetup](rust-graphics-meetup-2.jpg) + +The second Rust Graphics Meetup will take place on [May 21st at 16:00 +UTC+0][meetup-time]. This meetup is a chance to see what others have been +working on in the Rust graphics community. You can see the videos from the +[first meetup here][rust-graphics-meetup-1]. + +The meetup will take place on the Rust Gamedev [YouTube][youtube-stream] and [Twitch][twitch-stream]. + +[meetup-time]: https://everytimezone.com/s/b6ec5c17 +[rust-graphics-meetup-1]: https://www.youtube.com/playlist?list=PLYiOdhpKxxXJwaocrJcOCoBhlV6foaO8F +[youtube-stream]: https://www.youtube.com/watch?v=aIdsrZDActM +[twitch-stream]: https://www.twitch.tv/RustGameDev + +## Schedule + +### Vismut | [Lukas Orsvärn] + +#### 16:00 - 16:20 + +> Vismut will be a procedural texturing tool for Windows and Linux, allowing for +> a 100% non-destructive material creation workflow. This means you build +> textures from scratch using procedural nodes, allowing for changes to any step +> in the process at any time, including changing the texture's resolution. + +#### *[Recording][vismut-recording]* + +[Lukas Orsvärn]: https://github.com/lukors +[vismut-recording]: https://www.youtube.com/watch?v=0IsllXP7_pY + +### Screen-13 | [John Wells] + +#### 16:20 - 16:30 + +> Screen 13 is an easy-to-use Vulkan rendering engine in the spirit of QBasic. + +#### *[Recording][screen-13-recording]* + +[John Wells]: https://github.com/attackgoat/screen-13 +[screen-13-recording]: https://www.youtube.com/watch?v=ywZznsCXUjs + +### Optimizing wgpu with Data Driven Design | [Connor Fitzgerald] + +#### 16:30 - 17:00 + +> A look into how Data Driven Design is the key to the performance increases +> coming in wgpu 0.13 and what the future holds for solving long standing +> performance bottlenecks in the codebase. wgpu is the graphics abstraction at +> the core of many rust projects and ensuring it is as fast as possible will +> push the boundary of what is possible in safe Rust today. + +#### *[Recording][wgpu-recording]* + +[Connor Fitzgerald]: https://github.com/cwfitzgerald +[wgpu-recording]: https://www.youtube.com/watch?v=DDG4bcGs7zM diff --git a/content/blog/graphics-meetup-02/rust-graphics-meetup-2.jpg b/content/blog/graphics-meetup-02/rust-graphics-meetup-2.jpg new file mode 100644 index 000000000..fee3dcb1f Binary files /dev/null and b/content/blog/graphics-meetup-02/rust-graphics-meetup-2.jpg differ diff --git a/content/blog/graphics-meetup-03/index.md b/content/blog/graphics-meetup-03/index.md new file mode 100644 index 000000000..8e25e7c97 --- /dev/null +++ b/content/blog/graphics-meetup-03/index.md @@ -0,0 +1,59 @@ ++++ +title = "Rust Graphics Meetup 3" +date = 2023-01-25 +transparent = true +aliases = ["posts/graphics-meetup-03"] ++++ + + + + + +![Rust Graphics Meetup](rust-graphics-meetup-3.jpg) + +The third Rust Graphics Meetup will take place on [Jan 28th at 16:00 +UTC+0][meetup-time]. This meetup is a chance to see what others have been +working on in the Rust graphics community. You can see videos from the [previous +meetups here][rust-graphics-meetup-playlist]. + +The meetup will take place on the Rust Gamedev [YouTube][youtube-stream] and +[Twitch][twitch-stream]. + +[meetup-time]: https://everytimezone.com/s/0d2e3d68 +[rust-graphics-meetup-playlist]: https://www.youtube.com/watch?v=Yzr9va5UtiE&list=PLYiOdhpKxxXJwaocrJcOCoBhlV6foaO8F +[youtube-stream]: https://www.youtube.com/watch?v=63dnzjw4azI +[twitch-stream]: https://www.twitch.tv/RustGameDev + +## Schedule + +### Introduction 👋 | [Dzmitry Malyshau] & [Connor Fitzgerald] + +**16:00 - 16:05** + +### Hello, Blade! | [Dzmitry Malyshau] + +**16:05 - 16:40** + +> Introducing a lean and mean graphics library 'Blade', for fun and no profit. + +### Implementing an Extensible Renderer | [Philip Degarmo] + +**16:40 - 16:55** + +> Quick introduction to Rafx, and some ideas for making more extensible +> renderers. + +### Rend3: High Performance, Cross Platform, GPU Driven Rendering in wgpu and WebGPU | [Connor Fitzgerald] + +**16:55 - 17:25** + +> An overview of the current state of rend3: new data and gpu driven rendering +> model, performance improvements, and a look into the future. + +### Conclusion + +**17:25 - 17:30** + +[Dzmitry Malyshau]: https://github.com/kvark +[Connor Fitzgerald]: https://github.com/cwfitzgerald +[Philip Degarmo]: https://github.com/aclysma diff --git a/content/blog/graphics-meetup-03/rust-graphics-meetup-3.jpg b/content/blog/graphics-meetup-03/rust-graphics-meetup-3.jpg new file mode 100644 index 000000000..00bbb1cdc Binary files /dev/null and b/content/blog/graphics-meetup-03/rust-graphics-meetup-3.jpg differ diff --git a/content/blog/newsletter-changes/index.md b/content/blog/newsletter-changes/index.md new file mode 100644 index 000000000..32605c3b2 --- /dev/null +++ b/content/blog/newsletter-changes/index.md @@ -0,0 +1,65 @@ ++++ +title = "Newsletter Changes" +date = 2024-05-02 +transparent = true ++++ + +*Please fill out [this survey][survey] before skipping this section! More info below!* + +Hey everyone, it's been a while! As you've certainly noticed, the newsletter has +been on hiatus for some months. The reason was mostly maintainer burnout, which is +also why the newsletter of August 2023 was not published [until a few days +ago][august-news]. + +We're back now though! A couple of community members, Jan Hohenheim +([@janhohenheim]) and Thierry Berger ([@Vrixyz]), have led the revival of the +newsletter. This includes making changes requested by the community, and +improving sustainability for the long term. + +### Schedule Changes + +Thierry Berger ([@Vrixyz]), has come up with a new [monthly +schedule][monthly_schedule] that we will try out: + +- 3rd of the month: Newsletter starts. A call for submissions is made on social +media and community Discord servers interested in receiving it. At the same +time, last month's newsletter is published. +- 3rd to 28th of the month: submissions are collected and the newsletter is + written. +- 28th of the month: Submissions are closed. New submissions go into the next + month's newsletter. +- 3rd of the next month: The newsletter is published. Any submissions not edited +in time will be moved to the next month or removed entirely. + +This more strict schedule should help with the issue of late entries and reduce +the pressure of editing by having a dedicated time for it with no incoming +submissions. The goal is to be more consistent and reliable in our publishing +schedule. + +### Community Survey + +This restructuring is also a good time to improve the content of the newsletter. +We've got some community feedback on the [Rust GameDev Discord][Discord] already +and would like to hear more from you. It would be great if you could fill out +[this survey][survey] to let us know how we can improve the newsletter going +forward. The survey closes on the **28th of May 2024**. We will be evaluating +the [survey] results in an upcoming blog post, so stay tuned for that. + +### Future Steps + +Based on feedback we've already gotten, the steps for next months are: + +- Add an email subscription option to the newsletter +- Setup a system for how to edit entries that are not ready before the +newsletter ships. We are currently looking into either hiring a part-time +editor, using generative AI to add a few sentences where needed, or simply +removing these entries. + +That's all for now. Have fun reading! + +[august-news]: https://gamedev.rs/news/049/ +[@janhohenheim]: https://github.com/janhohenheim +[@Vrixyz]: https://github.com/Vrixyz +[monthly_schedule]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues/1417#issuecomment-1764534286 +[survey]: https://forms.gle/oeSb46twWsxRKYJe7 +[Discord]: https://discord.gg/game-development-in-rust-676678179678715904 diff --git a/content/blog/rust-gamedev-meetup-30/blue-engine.png b/content/blog/rust-gamedev-meetup-30/blue-engine.png new file mode 100644 index 000000000..2c5cb65b0 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-30/blue-engine.png differ diff --git a/content/blog/rust-gamedev-meetup-30/cybergate.png b/content/blog/rust-gamedev-meetup-30/cybergate.png new file mode 100644 index 000000000..86f5ec350 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-30/cybergate.png differ diff --git a/content/blog/rust-gamedev-meetup-30/gamedev-meetup.png b/content/blog/rust-gamedev-meetup-30/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/blog/rust-gamedev-meetup-30/gamedev-meetup.png differ diff --git a/content/blog/rust-gamedev-meetup-30/index.md b/content/blog/rust-gamedev-meetup-30/index.md new file mode 100644 index 000000000..92114f01c --- /dev/null +++ b/content/blog/rust-gamedev-meetup-30/index.md @@ -0,0 +1,76 @@ ++++ +title = "Rust Gamedev Meetup 30" +date = 2023-09-23 +transparent = true +aliases = ["posts/gamedev-meetup-30"] ++++ + + + + + +![Rust Gamedev Meetup](gamedev-meetup.png) + +The 30th Rust Gamedev Meetup took place on September 23rd. You can watch the +recording of the meetup [here on YouTube][meetup-video]. The meetup will take +place on the Rust Gamedev [YouTube][youtube-stream] and [Twitch][twitch-stream]. +The meetups take place on the second Saturday of every month via the [Rust +Gamedev Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[meetup-video]: https://www.youtube.com/watch?v=fAp_-Hp2gGo +[youtube-stream]: https://www.youtube.com/@RustGameDevelopment +[twitch-stream]: https://www.twitch.tv/RustGameDev + +## Talks + +### [Blue Engine] | [@ElhamAryanpur] + +![Blue engine](blue-engine.png) + +> Updates about the Blue Engine project and its 0.5.0 release. + +**Links:** + +- [Blue Engine GitHub repository] +- [Blue Engine Discord server] + +[@ElhamAryanpur]: https://github.com/ElhamAryanpur +[Blue Engine GitHub repository]: https://github.com/AryanpurTech/BlueEngine +[Blue Engine Discord server]: https://discord.gg/s7xsj9q + +### [Cybergate] | [@cybersoulK] + +![Cybergate](cybergate.png) + +> An overview of Cybergate, a multiplayer game being developed for native and +> browser play. + +**Links:** + +- [Cybergate Discord server] + +[@cybersoulK]: https://github.com/cybersoulK +[Cybergate Discord server]: https://discord.gg/R7DkHqw7zJ + +### [no_std: ?no_problem] | [@kpreid] + +![no_std: ?no_problem](no-std.png) + +> An introduction to making your Rust crates `no_std` compatible, and +> why you might want to do this. + +**Links:** + +- [YouTube Video] +- [Slides] + +[@kpreid]: https://github.com/kpreid +[YouTube Video]: https://www.youtube.com/watch?v=Oq-3bOBrpeo +[Slides]: https://docs.google.com/presentation/d/e/2PACX-1vTfI-IhBIjyz3vf1sGAQSw02xUuQaDuQ5N4KZRvIdblJrX0uf9ijarVx7gwpUNzhhPotTEqKbgFP0Qe/pub?start=false&slide=id.p + +[Blue Engine]: https://www.youtube.com/live/fAp_-Hp2gGo?si=3uhCXRBGEtJa9XY_&t=731 +[Cybergate]: https://www.youtube.com/live/fAp_-Hp2gGo?si=U8yNvON23EqAXz19&t=1581 +[no_std: ?no_problem]: https://www.youtube.com/live/fAp_-Hp2gGo?si=N_bzPJNx29XDhoyf&t=3010 diff --git a/content/blog/rust-gamedev-meetup-30/no-std.png b/content/blog/rust-gamedev-meetup-30/no-std.png new file mode 100644 index 000000000..bee974a64 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-30/no-std.png differ diff --git a/content/blog/rust-gamedev-meetup-31/gamedev-meetup.png b/content/blog/rust-gamedev-meetup-31/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/blog/rust-gamedev-meetup-31/gamedev-meetup.png differ diff --git a/content/blog/rust-gamedev-meetup-31/hardware.jpg b/content/blog/rust-gamedev-meetup-31/hardware.jpg new file mode 100644 index 000000000..a4afd4f4a Binary files /dev/null and b/content/blog/rust-gamedev-meetup-31/hardware.jpg differ diff --git a/content/blog/rust-gamedev-meetup-31/index.md b/content/blog/rust-gamedev-meetup-31/index.md new file mode 100644 index 000000000..feba3ba35 --- /dev/null +++ b/content/blog/rust-gamedev-meetup-31/index.md @@ -0,0 +1,68 @@ ++++ +title = "Rust Gamedev Meetup 31" +date = 2023-10-14 +transparent = true +aliases = ["posts/gamedev-meetup-31"] ++++ + + + + + +![Rust Gamedev Meetup](gamedev-meetup.png) + +The 31th Rust Gamedev Meetup took place on October 14th. You can watch the +recording of the meetup [here on YouTube][meetup-video]. The meetup will take +place on the Rust Gamedev [YouTube][youtube-stream] and [Twitch][twitch-stream]. +The meetups take place on the second Saturday of every month via the [Rust +Gamedev Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[meetup-video]: https://www.youtube.com/watch?v=MadryxOwjb8 +[youtube-stream]: https://www.youtube.com/@RustGameDevelopment +[twitch-stream]: https://www.twitch.tv/RustGameDev + +## Talks + +### [Games, but no video: Embedded trinkets in Rust] | [@Noxim] + +![Hardware](hardware.jpg) + +> An overview of making games with constrained hardware + +- [Slides] +- [Hardware] +- [Firmware] +- [Rustc] +- [PAC + HAL] +- [Blog post][More details] + +[Slides]: https://docs.google.com/presentation/d/1LnxSBdzKOGLGbUAiyaZShYfjJYitCOkM8MzPNLfFEQc/edit?usp=sharing +[Hardware]: https://oshwlab.com/noxim/nxr-w-101-001_copy +[Firmware]: https://owo.codes/noxim/nxr-t202-bitfiddle +[Rustc]: https://github.com/noxime/rust/tree/rv32e-upstream +[PAC + HAL]: https://github.com/ch32-rs +[More details]: https://noxim.xyz/blog/rust-ch32v003/ +[Games, but no video: Embedded trinkets in Rust]: https://www.youtube.com/live/MadryxOwjb8?si=erY49m_5_HDFkrpf&t=694 +[@Noxim]: https://github.com/Noxime + +### [Tunnet] | [@puzzled_squid] + +![tunnet title](tunnet.jpg) + +> A short game where you design, build, and optimize +> a computer network in an underground complex + +- [itch.io page] +- [YouTube trailer] +- [Website] + +![tunnet title](tunnet-network.jpg) + +[itch.io page]: https://puzzled-squid.itch.io/tunnet +[YouTube trailer]: https://www.youtube.com/watch?v=6gxytilYoOM +[Website]: https://puzzledsquid.xyz/ +[Tunnet]: https://www.youtube.com/live/MadryxOwjb8?si=vZrhqUszuv9qvG9t&t=2878 +[@puzzled_squid]: https://github.com/puzzled-squid diff --git a/content/blog/rust-gamedev-meetup-31/tunnet-network.jpg b/content/blog/rust-gamedev-meetup-31/tunnet-network.jpg new file mode 100644 index 000000000..129c877f3 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-31/tunnet-network.jpg differ diff --git a/content/blog/rust-gamedev-meetup-31/tunnet.jpg b/content/blog/rust-gamedev-meetup-31/tunnet.jpg new file mode 100644 index 000000000..569fc68ac Binary files /dev/null and b/content/blog/rust-gamedev-meetup-31/tunnet.jpg differ diff --git a/content/blog/rust-gamedev-meetup-32/blade.jpg b/content/blog/rust-gamedev-meetup-32/blade.jpg new file mode 100644 index 000000000..db06a1fb8 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-32/blade.jpg differ diff --git a/content/blog/rust-gamedev-meetup-32/gamedev-meetup.png b/content/blog/rust-gamedev-meetup-32/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/blog/rust-gamedev-meetup-32/gamedev-meetup.png differ diff --git a/content/blog/rust-gamedev-meetup-32/index.md b/content/blog/rust-gamedev-meetup-32/index.md new file mode 100644 index 000000000..4a33c8848 --- /dev/null +++ b/content/blog/rust-gamedev-meetup-32/index.md @@ -0,0 +1,101 @@ ++++ +title = "Rust Gamedev Meetup 32" +date = 2023-11-11 +transparent = true +aliases = ["posts/gamedev-meetup-32"] ++++ + + + + + +![Rust Gamedev Meetup](gamedev-meetup.png) + +The 32nd Rust Gamedev Meetup took place on November 11th. You can watch the +recording of the meetup [here on YouTube][meetup-video]. The meetup took +place on the Rust Gamedev [YouTube][youtube-stream] and [Twitch][twitch-stream]. +The meetups take place on the second Saturday of every month via the [Rust +Gamedev Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[meetup-video]: https://www.youtube.com/watch?v=MadryxOwjb8 +[youtube-stream]: https://www.youtube.com/@RustGameDevelopment +[twitch-stream]: https://www.twitch.tv/RustGameDev + +## Talks + +### [Minewars][minewars-video] | [@inodentry] + +[![Minewars](minewars.jpg)][minewars-video] + +> An upcoming multiplayer minesweeper game. **[Video link][minewars-video]** + +**Links:** + +- GitHub + Sponsors: [@inodentry] +- Mastodon: [@iyes@mastodon.gamedev.place] +- Discord: [Minewars Discord server] +- Open source client: [Minewars GitHub] +- Public documentation: [Minewars Documentation] +- Open-source vs proprietary plans: [Minewars FOSS Plans] + +[@inodentry]: https://github.com/inodentry +[@iyes@mastodon.gamedev.place]: https://mastodon.gamedev.place/@iyes +[Minewars GitHub]: https://github.com/IyesGames/minewars +[Minewars Documentation]: https://iyes.games/minewars/book/ +[Minewars FOSS Plans]: https://iyes.games/minewars/book/foss.html +[minewars-video]: https://www.youtube.com/watch?v=Mb7Xv-Mu-G4 +[Minewars Discord server]: https://discord.gg/Caxfzjwxs5 + +### [Blade][blade-video] | [@Kvark] + +[![Blade](blade.jpg)][blade-video] + +> Sharp and simple graphics library **[Video link][blade-video]** + +**Links:** + +- GitHub repo: [Blade] + +[@Kvark]: https://github.com/kvark +[Blade]: https://github.com/kvark/blade +[blade-video]: https://youtu.be/Q5IUOvuXoC8 + +### [Jarl][jarl-video] | [@zaycev] | [Video link][jarl-video] + +[![Jarl](jarl.jpg)][jarl-video] + +> A fantasy colony simulator. **[Video link][jarl-video]** + +**Links:** + +- GitHub: [@zaycev] +- Website: [Jarl Game] +- Twitter: [@jarl_game] +- YouTube: [Jarl-Game-com] +- Discord: [Jarl Discord server] + +[@zaycev]: https://github.com/zaycev +[Jarl Game]: https://jarl-game.com/ +[@jarl_game]: https://twitter.com/jarl_game +[Jarl-Game-com]: https://www.youtube.com/@Jarl-Game-com +[Jarl Discord server]: https://discord.com/invite/Dcwemjyfbb +[jarl-video]: https://www.youtube.com/watch?v=Sv7jcyqThdM + +### [The Seeker][seeker-video] | [@inodentry], [@c12hz] | [Video link][seeker-video] + +[![Seeker](theseeker.jpg)][seeker-video] + +> A 2D platformer game. **[Video link][seeker-video]** + +**Links:** + +- Discord: [Seeker Discord server] +- GitHub: [@TheSeekerGame] + +[@c12hz]: https://github.com/c12hz +[Seeker Discord server]: https://discord.gg/b7YRzMFzBN +[@TheSeekerGame]: https://github.com/TheSeekerGame/TheSeeker +[seeker-video]: https://www.youtube.com/watch?v=EGIIKbnh-1M diff --git a/content/blog/rust-gamedev-meetup-32/jarl.jpg b/content/blog/rust-gamedev-meetup-32/jarl.jpg new file mode 100644 index 000000000..ef1c46591 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-32/jarl.jpg differ diff --git a/content/blog/rust-gamedev-meetup-32/minewars.jpg b/content/blog/rust-gamedev-meetup-32/minewars.jpg new file mode 100644 index 000000000..f461e4081 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-32/minewars.jpg differ diff --git a/content/blog/rust-gamedev-meetup-32/theseeker.jpg b/content/blog/rust-gamedev-meetup-32/theseeker.jpg new file mode 100644 index 000000000..c4c847fd5 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-32/theseeker.jpg differ diff --git a/content/blog/rust-gamedev-meetup-33/blue-engine.png b/content/blog/rust-gamedev-meetup-33/blue-engine.png new file mode 100644 index 000000000..c24907b28 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-33/blue-engine.png differ diff --git a/content/blog/rust-gamedev-meetup-33/bones.png b/content/blog/rust-gamedev-meetup-33/bones.png new file mode 100644 index 000000000..c25afb22c Binary files /dev/null and b/content/blog/rust-gamedev-meetup-33/bones.png differ diff --git a/content/blog/rust-gamedev-meetup-33/galaxion.png b/content/blog/rust-gamedev-meetup-33/galaxion.png new file mode 100644 index 000000000..525d45c72 Binary files /dev/null and b/content/blog/rust-gamedev-meetup-33/galaxion.png differ diff --git a/content/blog/rust-gamedev-meetup-33/gamedev-meetup.png b/content/blog/rust-gamedev-meetup-33/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/blog/rust-gamedev-meetup-33/gamedev-meetup.png differ diff --git a/content/blog/rust-gamedev-meetup-33/index.md b/content/blog/rust-gamedev-meetup-33/index.md new file mode 100644 index 000000000..682b2438c --- /dev/null +++ b/content/blog/rust-gamedev-meetup-33/index.md @@ -0,0 +1,84 @@ ++++ +title = "Rust Gamedev Meetup 33" +date = 2023-12-09 +transparent = true +aliases = ["posts/gamedev-meetup-33"] ++++ + + + + + +![Rust Gamedev Meetup](gamedev-meetup.png) + +The 33rd Rust Gamedev Meetup took place on December 9th. You can watch the +recording of the meetup [here on YouTube][meetup-video]. The meetup took +place on the Rust Gamedev [YouTube][youtube-stream] and [Twitch][twitch-stream]. +The meetups take place on the second Saturday of every month via the [Rust +Gamedev Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[meetup-video]: https://www.youtube.com/watch?v=eItRSKJGV1I +[youtube-stream]: https://www.youtube.com/@RustGameDevelopment +[twitch-stream]: https://www.twitch.tv/RustGameDev + +## Talks + +### [Blue Engine][blue-engine-video] | [@ElhamAryanpur] + +[![Blue Engine](blue-engine.png)][blue-engine-video] + +> Updates about community work for the Blue Engine, as well as future engine +> features coming up. + +**Links:** + +- [Blue Engine GitHub repository] +- [Blue Engine Discord server] + +[@ElhamAryanpur]: https://github.com/ElhamAryanpur +[blue-engine-video]: https://www.youtube.com/watch?v=7u9YrBOnTww +[Blue Engine GitHub repository]: https://github.com/AryanpurTech/BlueEngine +[Blue Engine Discord server]: https://discord.gg/s7xsj9q + +### [Galaxion Trade Wars][galaxion-trade-wars-video] | [@Syn-Nine] + +[![Galaxion Trade Wars](galaxion.png)][galaxion-trade-wars-video] + +> Space Trading Game made in Rust based on the Trade Wars 2002 BBS game. + +**Links:** + +- [Galaxion Trade Wars GitHub repository] +- [Syn-Nine Twitter] +- [Syn-Nine Website] + +[@Syn-Nine]: https://github.com/Syn-Nine +[galaxion-trade-wars-video]: https://www.youtube.com/watch?v=oNx5wqAsvXM +[Galaxion Trade Wars GitHub repository]: https://github.com/Syn-Nine/galaxion-trade-empire/ +[Syn-Nine Twitter]: https://twitter.com/Syn9Dev +[Syn-Nine Website]: https://syn9.thehideoutgames.com/ + +### [Bones Engine][bones-engine-video] | [@zicklag] + +[![Bones Engine](bones.png)][bones-engine-video] + +> A 'meta-engine' framework made to facilitate the development of moddable, +> multiplayer 2D games. + +**Links:** + +- [@zicklag] +- [Bone Engine GitHub repository] +- [Jumpy GitHub repository] +- [Jumpy's Migration to the Bones Framework] +- [Introducing Lua Scripting in Jumpy] + +[@zicklag]: https://github.com/zicklag +[bones-engine-video]: https://www.youtube.com/watch?v=bEyZubAx_oM +[Bone Engine GitHub repository]: https://github.com/fishfolk/bones +[Jumpy GitHub repository]: https://github.com/fishfolk/jumpy +[Jumpy's Migration to the Bones Framework]: https://fishfolk.org/blog/jumpy-migration-to-bones-framework/ +[Introducing Lua Scripting in Jumpy]: https://fishfolk.org/blog/introducing-lua-scripting-in-jumpy/ diff --git a/content/blog/rustyjam-02/aaron.png b/content/blog/rustyjam-02/aaron.png new file mode 100644 index 000000000..e70629a1d Binary files /dev/null and b/content/blog/rustyjam-02/aaron.png differ diff --git a/content/blog/rustyjam-02/index.md b/content/blog/rustyjam-02/index.md new file mode 100644 index 000000000..ae4ec9e8a --- /dev/null +++ b/content/blog/rustyjam-02/index.md @@ -0,0 +1,44 @@ ++++ +title = "Rusty Jam 2" +date = 2022-06-11 +transparent = true ++++ + +![Aaron: a drawing of a humanoid fox](aaron.png) + +Hey everyone, we're finally announcing the [Rusty Jam #2][itch]! +It's a great chance to try out some new Rusty tech, +form a team of like-minded rustaceans, and feel what +a full cycle of making a game in Rust feels like in miniature! + +Submissions will be open from June 18th to June 26th. +Voting on submissions will begin as soon as the jam ends and will run for a week. + +This jam focuses more on using Rust than anything else. +That means you aren't restricted on your design, music, or graphics, +as long as you use Rust to make it! + +The optional-to-use theme for the jam is going to be announced +[in the Rusty Jam Discord][discord] and pinned in the community section. +While you're waiting for the theme, you can start looking for a team +in the #looking-for-team Discord channel. +If you want to solo jam though, that's fine too. + +[See the itch.io page for more details about dates, rules, modifiers, etc!][itch] + +------ + +This jam's mascot is Aaron the Rust-loving fox ([submitted][mascot] by vSmiles)! + +> Aaron is a proud supporter of Rust and loves spreading this love +> around the world. +> +> He hands out little red flags as he marks the places he's reached, +> and with his big furry smile, he wants Rust to be an approachable +> programming language that's suitable for anyone! +> +> He also has a very special bandana that features his little friend Ferris. + +[itch]: https://itch.io/jam/rusty-jam-2 +[discord]: https://discord.gg/8dUQJFFmxG +[mascot]: https://vsmiles.itch.io/aaron-the-rust-loving-fox diff --git a/content/blog/survey-02/ai.png b/content/blog/survey-02/ai.png new file mode 100644 index 000000000..3388c8def Binary files /dev/null and b/content/blog/survey-02/ai.png differ diff --git a/content/blog/survey-02/ai_contributions.png b/content/blog/survey-02/ai_contributions.png new file mode 100644 index 000000000..ab09afa69 Binary files /dev/null and b/content/blog/survey-02/ai_contributions.png differ diff --git a/content/blog/survey-02/comment.png b/content/blog/survey-02/comment.png new file mode 100644 index 000000000..7d2355ead Binary files /dev/null and b/content/blog/survey-02/comment.png differ diff --git a/content/blog/survey-02/content_quantity.png b/content/blog/survey-02/content_quantity.png new file mode 100644 index 000000000..55e1489df Binary files /dev/null and b/content/blog/survey-02/content_quantity.png differ diff --git a/content/blog/survey-02/contributions copy.png b/content/blog/survey-02/contributions copy.png new file mode 100644 index 000000000..849c65bb8 Binary files /dev/null and b/content/blog/survey-02/contributions copy.png differ diff --git a/content/blog/survey-02/contributions.png b/content/blog/survey-02/contributions.png new file mode 100644 index 000000000..849c65bb8 Binary files /dev/null and b/content/blog/survey-02/contributions.png differ diff --git a/content/blog/survey-02/ease.png b/content/blog/survey-02/ease.png new file mode 100644 index 000000000..f8f2a6524 Binary files /dev/null and b/content/blog/survey-02/ease.png differ diff --git a/content/blog/survey-02/ease_contributions.png b/content/blog/survey-02/ease_contributions.png new file mode 100644 index 000000000..9a386555d Binary files /dev/null and b/content/blog/survey-02/ease_contributions.png differ diff --git a/content/blog/survey-02/excitement.png b/content/blog/survey-02/excitement.png new file mode 100644 index 000000000..4b2be800e Binary files /dev/null and b/content/blog/survey-02/excitement.png differ diff --git a/content/blog/survey-02/excitement_contributions.png b/content/blog/survey-02/excitement_contributions.png new file mode 100644 index 000000000..73f05498a Binary files /dev/null and b/content/blog/survey-02/excitement_contributions.png differ diff --git a/content/blog/survey-02/frequency.png b/content/blog/survey-02/frequency.png new file mode 100644 index 000000000..0a4fbc9dd Binary files /dev/null and b/content/blog/survey-02/frequency.png differ diff --git a/content/blog/survey-02/improve.png b/content/blog/survey-02/improve.png new file mode 100644 index 000000000..ff4eadb71 Binary files /dev/null and b/content/blog/survey-02/improve.png differ diff --git a/content/blog/survey-02/index.md b/content/blog/survey-02/index.md new file mode 100644 index 000000000..095abfcd1 --- /dev/null +++ b/content/blog/survey-02/index.md @@ -0,0 +1,214 @@ ++++ +title = "Newsletter Survey Results" +date = 2024-06-03 +transparent = true +draft = false ++++ + +Since we are [rebooting the newsletter](https://gamedev.rs/blog/newsletter-changes/), we wanted to know more about our readers. +52 of you filled out the survey last month. Thank you very much! + +The biggest takeaways are: +- People are generally excited about the newsletter +- The current frequency of the newsletter is good +- Readers do not want anything in the newsletter generated by AI +- Contributing to the newsletter could be easier. If you've got ideas on how to make this happen, please [let us know](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/1519)! + +We will now go through the results in the same order as the questions were asked. The full analysis and data is open-sourced on [GitHub](https://github.com/janhohenheim/rust-gamedev-statistics/tree/main/jan-hohenheim-2024). + +## Excitement + +![Excitement barplot](excitement.png) + +On average, readers are excited about the newsletter. The mean excitement level is 3.6 out of 5, the median is 4. +Our 95% confidence interval is [3.32, 3.91] using a standard error of 0.15 (sd = 1.05, n = 52). + +These are fairly nice results. Anecdotally, we got a lot of messages about issues with the newsletter and how to improve it, +so we are happy to see that the excitement is still high. Still, the data shows that we have room for improvement. + +## Content Quantity + +![Content quantity barplot](content_quantity.png) + + +When asked about how to change the amount of content per newsletter, the majority of readers (58%) voted to leave the amount as-is or don't care. +On the other hand, this means nearly half of the readers would change something about the content quantity. +17% voted for "less content; keep only the most important news" and 25% for "more content; add sections for minor news". +These two options are luckily not mutually exclusive. +One option we could implement is to have a new section for "minor news" where we don't go into detail, +and a section for "miscellaneous links" where we only list some links without any commentary. + +## Newsletter Frequency + +![Newsletter frequency barplot](frequency.png) + +73% of readers are either happy with the current frequency or don't care. A minority of 21% would like the newsletter to become quarterly. +Arguments we've heard for this are that a lower frequency would allow editors to improve the quality that goes into each newsletter. +Counterarguments include that a lower frequency would make the newsletter less timely. +Things like calls for playtesters or job offers would be less useful if they were only sent out every three months. + +## AI + +![AI barplot](ai.png) + +This question was a catalyst for a lot of discussion on [Discord]. + +If we interpret the answers as a scale of 1-5, where 1 is "not okay at all" and 5 is "I love it", the mean answer was 2.25, the median 2. +Notably, the mode is tied at 1 and 2. The 95% confidence interval is [1.89, 2.61] using a standard error of 0.18 (sd = 1.30, n = 52). +People are generally against using an LLM to generate summaries. 79.2% of readers would prefer not to use AI. + +Viewed from another angle: while a majority of readers (65%) are at least okay with AI-generated summaries, +a significant minority (35%) are not okay at all with this proposal. +These include very active members of the community and +contributors who have announced that they would no longer want their content to be included in the newsletter if AI was used. + +The reasons people gave for not wanting AI-generated summaries were varied. +Among these were: +- Solidarity with the large number of creatives who recently lost their jobs due to AI-generated content, +inside and outside the game development industry. +- Concerns about the quality of AI-generated summaries. +- Skepticism about AI-generated summaries saving time if they still need to be edited by hand. + +## Tone + +![Tone barplot](tone.png) + +A significant majority of readers (86.5%) are happy with the current tone of the newsletter, with a minority of 11.5% wanting a less formal tone. +While votes for the latter did not reach a majority, the written feedback we got included quite a few requests for more "personality" in the newsletter. + +## Contributions + +![Contributions barplot](contributions.png) + +The majority of readers (61.5%) have not yet contributed to the newsletter and 26.9% have contributed 2-5 times. +Only 3.8% contributed exactly once, while the rest (7.7%) are heavy contributors, helping us out more than five times. + +While it might seem weird that more people contributed 2-5 times than exactly once, +keep in mind that the former is the sum of people who contributed twice, thrice, four times, and five times. +The reason we binned these together is that we are interested in the following categories: +- Pure readers +- People who contributed once and then stopped +- People who contributed a few times +- People who are regular contributors + +We are happy to see that people who contributed once seem to continue contributing in the future. + +## Ease + +![Ease barplot](ease.png) + +The mean ease of contributing is 3.0, and the median is 3. The 95% confidence interval is [2.5, 3.6] using a standard error of 0.26 (sd = 1.26, n = 23). + +Readers generally feel neutral about the ease of contributing to the newsletter. + +We can do better here, but we are not sure yet how. +We'd love to hear your ideas on [GitHub](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/1519) or on [Discord] (ping @janhohenheim). + +## Keeping up with the newsletter + +![Keeping up barplot](informed.png) + +This was a multiple-choice question. The most popular source of information about the newsletter is RSS (27.5%). +If we add the choices for the official [Rust GameDev Discord server][Discord] (21.7%) and other Discord servers (11.6%), +Discord in general becomes the leading source of information (33.3%), taking up nearly exactly a third of all votes. + +We can see the shift from X / Twitter to Mastodon reported by many OSS communities in our readers as well. +Lemmy is not looking popular as an alternative to Reddit yet, with no reader reporting it as a source of information. + +The "Email" option in the survey is meant for people who have set up some kind of email alerts manually. + +Per written feedback, a lot of people want to see proper email subscriptions implemented. While this was a goal for this month, +we have not managed to implement it yet. +We will try to [get this done](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/24) for the next newsletter. + +## What is going well + +![What is going well wordcloud](like.png) + +This was a free-text question. The above is a word cloud of the answers with some obvious words like "game" or "newsletter" removed. +Note that the inclusion of the word "AI" is misleading, as it was only mentioned in answers that read similar to +"I like that we don't use AI, please don't use LLMs". + +Going through the feedback by hand, common things readers enjoy about the newsletter are: +- A good mix of content +- Very open to contributions +- Small-scale games are featured, not just success stories or technical articles + +## What needs to be improved + +![What needs to be improved wordcloud](improve.png) + +Another free-text question. The feedback here is fairly diverse. The most common complaints we already mentioned in previous sections are: +- Add an email subscription +- Improve the ease of contributing + +Additionally, many people feel like the "Games" section reads more like an advertisement than an article aimed at other game developers. + +Among the more unique suggestions were: +- Conduct interviews +- Have a stronger sense of personality in the writing +- Make the newsletter more consistent in timing and quantity +- Have more editors to not overburden the current ones +- Have some more clarity of purpose + + +## Comments + +![Comments wordcloud](comment.png) + +This last free-text question was meant for any additional comments readers might have. +The word cloud above is dominated by one sentence: "Thank you for your work". Thank you very very much for your kind words! +We are working on this newsletter in our free time because we love the community and Rust game development, so reading this means a lot to us. + +## Correlations + +We were interested in how the responses to some questions correlated with how much people had already contributed to the newsletter. +Long story short: it seems like there is no significant correlation between how much people contributed and how they answered the other questions. + +Let's look at the correlations in turn now. +Note that all the following plots are jittered to make the data more readable. + + +### Excitement By Contributions + +![Excitement correlation](excitement_contributions.png) + +We hypothesized that people who contributed more to the newsletter would be more excited about it. +We found no evidence for this (the p-value of a Jonckheere-Terpstra test for increasing trend is 0.986). +Based on the plot above, we then hypothesized that the opposite might be true, namely that frequent contributors are less excited about the newsletter. +This actually might be the case (p-value is 0.021), but do not take this as a strong result. +It is a posthoc hypothesis and the resulting p-value is not very low considering the number of tests we run in this analysis. +For these reasons, we do not consider this result to be significant. + +### Feelings About AI By Contributions + +![AI correlation](ai_contributions.png) + +We hypothesized that there would be a correlation between how much people contributed to the newsletter and how they felt about AI-generated summaries. +We found no evidence for this (the p-value of a Jonckheere-Terpstra test for a two-sided alternative is 0.57). + +### Ease of Contributing By Contributions + +![Ease correlation](ease_contributions.png) + +We hypothesized that there would be a correlation between how much people contributed to the newsletter and how easily they found it to contribute. + +We found no evidence for this (the p-value of a Jonckheere-Terpstra test for a two-sided alternative is 0.25). + +## Conclusion + +All in all, we are happy with the results of the survey. +It seems like our readers are generally happy with the newsletter, and have good ideas on how to improve it. +We will discuss how to implement these ideas in the future and keep you updated on our progress. + +If you are interested in helping us out, we are always looking for new editors and contributors. Just leave us a message on [Discord] or [GitHub]. + +Again, thank you very much for your feedback. Rebooting the newsletter was a big ordeal for us, +and we are happy to see such an active interest in the community. We hope that we can continue to provide you with a newsletter you enjoy. + +Until next time! + +~ The Rust GameDev Newsletter Team, and Jan Hohenheim in particular + +[Discord]: https://discord.gg/yNtPTb2 +[GitHub]: https://github.com/rust-gamedev/rust-gamedev.github.io diff --git a/content/blog/survey-02/informed.png b/content/blog/survey-02/informed.png new file mode 100644 index 000000000..3616d4a7a Binary files /dev/null and b/content/blog/survey-02/informed.png differ diff --git a/content/blog/survey-02/like.png b/content/blog/survey-02/like.png new file mode 100644 index 000000000..d17610ac1 Binary files /dev/null and b/content/blog/survey-02/like.png differ diff --git a/content/blog/survey-02/tone.png b/content/blog/survey-02/tone.png new file mode 100644 index 000000000..6a4c4b6dd Binary files /dev/null and b/content/blog/survey-02/tone.png differ diff --git a/content/news/001/index.md b/content/news/001/index.md index f0d53f4a2..d4bc25734 100644 --- a/content/news/001/index.md +++ b/content/news/001/index.md @@ -115,8 +115,11 @@ 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]_ +{{ image_figure( + alt="Part of the trailer" + src="https://github.com/way-of-rhea.gif" + caption="click on the GIF to see [the full trailer](https://youtube.com/watch?v=VIzqlI-gbAY)", + link="https://youtube.com/watch?v=VIzqlI-gbAY") }} [A new trailer][rhea trailer] and the [Steam wishlist][rhea steam] were published for "Way of Rhea" by [Anthropic Studios]. @@ -464,7 +467,7 @@ Special section for other news (up to 15) in a one-liner format: [Alex Butler]: https://twitter.com/bigabgames [roboinstructus 1.0]: https://reddit.com/r/rust/comments/cdw1ct/robo_instructus_is_out_now_programming_puzzle -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub @@ -520,8 +523,11 @@ by [Michael Fairley] was released: > Clear a path to get to the hole, eat some eggs along the way, > 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]_ +{{ image_figure( + alt="Part of A snake's Tail's trailer" + src="https://github.com/a-snakes-tail.gif" + caption="click on the GIF to see [the full release trailer](https://www.youtube.com/watch?v=23pQmEuueNw)", + link="https://www.youtube.com/watch?v=23pQmEuueNw") }} A few posts about the game and how it was developed: diff --git a/content/news/002/index.md b/content/news/002/index.md index e6601dc3f..3b75a4a87 100644 --- a/content/news/002/index.md +++ b/content/news/002/index.md @@ -461,11 +461,11 @@ _Discussions: ![Live2D Piston demo](live2d-cubism.png) -- ["Github Actions CI with Rust and SDL2"] - +- ["GitHub Actions CI with Rust and SDL2"] - [Alexandru Ene] wrote a post about CI with [github actions] for [their hobby game project][after-hours] that uses Rust and SDL2. - ![Github Actions with SDL2 screencast demo](github_actions_ci.gif) + ![GitHub Actions with SDL2 screencast demo](github_actions_ci.gif) - [@phaazon] released [luminance] 0.33 that [brings geometry instancing support](https://reddit.com/r/rust/comments/d0us73/announcement_luminance033); @@ -527,7 +527,7 @@ but I'm too tired to this atm and it will be rendered correctly anyway. --> [Alexandru Ene]: https://twitter.com/_AlexEne_ -["Github Actions CI with Rust and SDL2"]: https://alexene.dev/2019/09/04/Github-actions-CI-rust-SDL2.html +["GitHub Actions CI with Rust and SDL2"]: https://alexene.dev/2019/09/04/Github-actions-CI-rust-SDL2.html [github actions]: https://github.com/features/actions [after-hours]: https://alexene.dev/2019/01/15/After-hours-game-development.html [Xprite]: https://pickitup247.com/xprite.html @@ -568,7 +568,7 @@ but I'm too tired to this atm and it will be rendered correctly anyway. [imgui-inspect]: https://github.com/aclysma/imgui-inspect [minimum]: https://github.com/aclysma/minimum -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/003/index.md b/content/news/003/index.md index b6ab52045..74851e5c5 100644 --- a/content/news/003/index.md +++ b/content/news/003/index.md @@ -523,8 +523,10 @@ 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)_ +{{ image_figure( + alt="RLSL code sample" + src="https://github.com/rlsl-example.png" + caption="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 @@ -557,8 +559,10 @@ _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_ +{{ image_figure( + alt="sailor screenshot: vector terrain map and some basic UI" + src="https://github.com/sailor.png" + caption="a screenshot from [Yatekii/sailor](https://github.com/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 +687,11 @@ _Discussions: ### [cyclone-physics-rs] -[![cyclone physics demo](cyclone-physics-demo.gif)][cyclone-video-demo] -_a little demo of "particle" simulation_ +{{ image_figure( + alt="cyclone physics demo", + src="https://github.com/cyclone-physics-demo.gif", + caption='a little demo of "particle" simulation', + link="https://twitter.com/heyrutvik/status/1180072669250834432") }} [cyclone-physics-rs] by [@heyrutvik] a new WIP game physics engine based on the ["Game Physics Engine Development" book][cyclone-physics-book]. @@ -793,7 +800,7 @@ _Discussions: [Amethyst organization]: https://github.com/amethyst [@_AndreaCatania]: https://twitter.com/_AndreaCatania -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/004/index.md b/content/news/004/index.md index d8d959bc3..e97bf85aa 100644 --- a/content/news/004/index.md +++ b/content/news/004/index.md @@ -201,8 +201,11 @@ 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._ +{{ image_figure( + alt="Demo of the basic ship collision" + src="https://github.com/recall-sing.gif" + caption="Demo of the basic ship collision.", + link="https://youtube.com/watch?v=AoPSAoqmTCk") }} [Tom Leys] is working on a "The Recall Singularity" game about designing autonomous factory ships and stations @@ -721,7 +724,7 @@ Check out the [online Demo][rust-nes-demo]. [Blaine Price]: https://blaineprice.me [@mvlabat]: https://github.com/mvlabat -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub @@ -777,8 +780,11 @@ 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]_ +{{ image_figure( + alt="Pascal Penguin logo" + src="https://github.com/penguin.png" + caption="click to see the [release trailer](https://youtube.com/watch?v=EgFr73AUwps)", + link="https://youtube.com/watch?v=EgFr73AUwps") }} ["Adventures of Pascal Penguin"][penguin-about] by [Matthew Michelotti](http://luduminis.com) diff --git a/content/news/005/index.md b/content/news/005/index.md index 3146d799d..25e14d6d6 100644 --- a/content/news/005/index.md +++ b/content/news/005/index.md @@ -258,8 +258,11 @@ _Discussions: ### [Garden Devlog: December][garden-dec] -[![Playing with dirt](garden.gif)][garden-video] -_new smooth soil editing demo_ +{{ image_figure( + alt="Playing with dirt" + src="https://github.com/garden.gif" + caption="new smooth soil editing demo", + link="https://youtube.com/watch?v=xU93FGrk1d8") }} [Garden][garden] is an upcoming game centered around growing realistic plants. @@ -802,7 +805,7 @@ Here're some of the Rust news from it: [inside-rust]: https://medium.com/embarkstudios/inside-rust-at-embark-b82c06d1d9f4 [cargo-about]: https://github.com/embarkstudios/cargo-about -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub @@ -855,8 +858,11 @@ 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]_ +{{ image_figure( + alt="Modulator video" + src="https://github.com/modulator_youtube.gif" + caption="click to see [the tutorial video][modulator-video]", + link="modulator-video") }} In the November of 2018, [@AndreaPessino] (Founder/CTO of [Ready At Dawn] Studios) diff --git a/content/news/006/index.md b/content/news/006/index.md index 0b62ad87f..1c06e7994 100644 --- a/content/news/006/index.md +++ b/content/news/006/index.md @@ -838,8 +838,10 @@ 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_ +{{ image_figure( + alt="Example walking an entry point of a SPIR-V file" + src="https://github.com/spir-q.png" + caption="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: @@ -962,7 +964,7 @@ _Discussions: [nestur]: https://github.com/spieglt/nestur -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/007/index.md b/content/news/007/index.md index 2c4c7e8e5..3d168d99a 100644 --- a/content/news/007/index.md +++ b/content/news/007/index.md @@ -177,8 +177,10 @@ 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_ +{{ image_figure( + alt="Rolling mountain landscape" + src="https://github.com/veloren1.png" + caption="Rolling mountain landscape") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -214,8 +216,11 @@ Here is the February changelog: - Added music system ``` -[![veloren development](veloren3.gif)](https://youtube.com/watch?v=1ldHQfxCT24) -_1 year of Veloren development. Click for the full video!_ +{{ image_figure( + alt="veloren development" + src="https://github.com/veloren3.gif" + caption="1 year of Veloren development. Click for the full video!" + link="https://youtube.com/watch?v=1ldHQfxCT24") }} You can read more about some specific topics: @@ -243,8 +248,11 @@ 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)_ +{{ image_figure( + alt="Gameplay demo: two giant tank armies clashing" + src="https://github.com/oxidator-play.gif" + caption="gameplay demo (35000 units)", + link="https://streamable.com/499j0") }} [Oxidator][oxidator] by [@Ruddle] is a real-time strategy game/engine written with Rust and WebGPU. @@ -270,11 +278,17 @@ Some of the current features: - Unit editor: basic editor with joint & mesh selection and parameter editing (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_ +{{ image_figure( + alt="Unit editor demo: move agent's parts" + src="https://github.com/oxidator-unit-editor.gif" + caption="Demo of the unit editor", + link="https://streamable.com/ywr44") }} -[![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_ +{{ image_figure( + alt="Map editor demo: use pencil tool to instantly create a lake and mountains" + src="https://github.com/oxidator-map-editor.gif" + caption="Demo of the map editor", + link="https://github.com/Ruddle/oxidator/blob/be4863e74/etc/map_editor.gif") }} [oxidator]: https://github.com/Ruddle/oxidator [@Ruddle]: https://github.com/Ruddle @@ -485,9 +499,11 @@ 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, -tangent and bitangent vectors in the vertex shader._ +{{ image_figure( + alt="High detail terrain chunk with PRR" + src="https://github.com/akigi.png" + caption="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. @@ -590,8 +606,10 @@ 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._ +{{ image_figure( + alt="cities, planes and keys" + src="https://github.com/china.png" + caption="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]. @@ -633,8 +651,10 @@ 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._ +{{ image_figure( + alt="Harvesting and refining some Gold" + src="https://github.com/recall-singularity.png" + caption="Harvesting and refining some Gold.") }} [Tom Leys] is working on a "The Recall Singularity" game about designing autonomous factory ships and stations. @@ -905,8 +925,10 @@ 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_ +{{ image_figure( + alt="mainloop async/await experiment in macroquad" + src="https://github.com/miniquad-sample.png" + caption="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. @@ -1160,7 +1182,7 @@ It uses vulkan and skia for rendering. [neovide]: https://github.com/Kethku/neovide -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/008/index.md b/content/news/008/index.md index 417f9993d..0af92e25e 100644 --- a/content/news/008/index.md +++ b/content/news/008/index.md @@ -334,8 +334,10 @@ Some of this month's updates: ### [Veloren][veloren] -![LoD](veloren1.png) -_Work on Level of Detail_ +{{ image_figure( + alt="LoD" + src="https://github.com/veloren1.png" + caption="Work on Level of Detail") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -433,8 +435,10 @@ Main updates: ### gfx-rs and wgpu news -![Deeper game](deeper.png) -_[deeper] uses wgpu for rendering_ +{{ image_figure( + alt="Deeper game" + src="https://github.com/deeper.png" + caption="[deeper](https://github.com/arnfaldur/deeper) uses wgpu for rendering") }} [gfx-hal-0.5](https://github.com/gfx-rs/gfx/) was released! Improvements done in March: @@ -517,8 +521,10 @@ Some of this month's updates: ### [Nannou v0.13][nannou-post] -![Daily Sketch 0114 by Mactuitui](nannou.png) -_Daily Sketch 0114 by Mactuitui_ +{{ image_figure( + alt="Daily Sketch 0114 by Mactuitui" + src="https://github.com/nannou.png" + caption="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. @@ -760,7 +766,7 @@ Full documentation is available at the [rectangle-pack docs.rs section][rectangl [rectangle-pack-homepage]: https://github.com/chinedufn/rectangle-pack [rectangle-pack-docs]: https://crates.io/crates/rectangle-pack/0.1.5 -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/009/index.md b/content/news/009/index.md index 648a2a32a..a3bb90147 100644 --- a/content/news/009/index.md +++ b/content/news/009/index.md @@ -247,8 +247,10 @@ Follow [@seratonik] on Twitter for updates. ### [Akigi][akigi] -![shadows demo](akigi-shadows.jpeg) -_new shadows_ +{{ image_figure( + alt="shadows demo" + src="https://github.com/akigi-shadows.jpeg" + caption="new shadows") }} > [Akigi][akigi] is a multiplayer online world where humans > aren't the only intelligent animals. @@ -479,8 +481,10 @@ Here's a roundup of some of them: ### [Veloren][veloren] -![Buildings](veloren1.png) -_Early procedural building generation_ +{{ image_figure( + alt="Buildings" + src="https://github.com/veloren1.png" + caption="Early procedural building generation") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -517,8 +521,10 @@ Here is the April changelog: - You can start the game by pressing "enter" from the character selection menu ``` -![Hanging out](veloren2.png) -_Early procedural building generation_ +{{ image_figure( + alt="Hanging out" + src="https://github.com/veloren2.png" + caption="Early procedural building generation") }} You can read more about some specific topics from April: @@ -632,9 +638,11 @@ 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, -but it should collide with the ground._ +{{ image_figure( + alt="an example of a multi-layered game level" + src="https://github.com/rhea-player-orb.jpeg" + caption="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] about implementing a layer system to ["Way of Rhea"'s][rhea] physics engine @@ -738,8 +746,10 @@ 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]_ +{{ image_figure( + alt="hectic screenshot: graveyard and vampires" + src="https://github.com/hectic.png" + caption="[hectic-rs](https://github.com/expenses/hectic-rs) - Rust/wgpu/specs re-write of hectic by [@expenses](https://github.com/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]), @@ -883,8 +893,10 @@ in an eternally sprawling office complex. ### [miniquad] -![miniquad logo](miniquad_logo.png) -_`miniquad` project got a logo_ +{{ image_figure( + alt="miniquad logo" + src="https://github.com/miniquad_logo.png" + caption="`miniquad` project got a logo") }} [miniquad] is a safe and cross-platform rendering library focused on portability and low-end platforms support. @@ -1075,7 +1087,7 @@ _Discussions: [Godot]: https://godotengine.org @@ -1124,8 +1136,10 @@ and highlight events from the past. --> Just an interesting Rust gamedev link from the past. :) -![example](valora-example.jpeg) -_"dead end" by turnage, 2019_ +{{ image_figure( + alt="example" + src="https://github.com/valora-example.jpeg" + caption=""dead end" by turnage, 2019") }} A few months ago a generative art library ["valora"][valora-src] was released by [@turnage]. diff --git a/content/news/010/index.md b/content/news/010/index.md index 49237a5f1..241bfb18f 100644 --- a/content/news/010/index.md +++ b/content/news/010/index.md @@ -30,7 +30,7 @@ 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) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Meeting Minutes](#meeting-minutes) - [Requests for Contribution](#requests-for-contribution) - [Jobs](#jobs) @@ -64,8 +64,10 @@ If needed, a section can be split into subsections with a "------" delimiter. ### [Veloren][veloren] -![Buildings](veloren1.png) -_The new repo banner_ +{{ image_figure( + alt="Buildings" + src="https://github.com/veloren1.png" + caption="The new repo banner") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -79,8 +81,11 @@ release as well. Veloren also now has an [Open Collective 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!_ +{{ image_figure( + alt="0.6 release trailer" + src="https://github.com/veloren_trailer.gif" + caption="0.6 release trailer. Click for the full video!" + link="https://www.youtube.com/watch?v=kjDFVgWYMd4") }} Here is the May changelog: @@ -113,8 +118,10 @@ of 0.7, and what they wanted to achieve: > clashing together. I want to be able to add people to my combat party and > interact with the game UI to do this. -![Welcome to Veloren](veloren2.png) -_Welcome to Veloren! From the 0.6 release party_ +{{ image_figure( + alt="Welcome to Veloren" + src="https://github.com/veloren2.png" + caption="Welcome to Veloren! From the 0.6 release party") }} You can read more about some specific topics from May: @@ -213,8 +220,11 @@ Some of the updates: ### [Sandbox] -[![Sandbox gameplay demo](sandbox.jpeg)](https://streamable.com/0bhbol#) -_click to see a gameplay demo_ +{{ image_figure( + alt="Sandbox gameplay demo" + src="https://github.com/sandbox.jpeg" + caption="click to see a gameplay demo" + link="https://streamable.com/0bhbol#") }} [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! @@ -320,8 +330,11 @@ 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_ +{{ image_figure( + alt="screenshot: decision tree and goal distance map in the background" + src="https://github.com/crate_before_attack.png" + caption="Decision tree and goal distance map in the background", + link="https://cratebeforeattack.com/") }} [Crate Before Attack][cratebeforeattack-site] by [koalefant (@CrateAttack)][@CrateAttack] is a realtime/turn-based multiplayer game where frogs combat their friends @@ -377,7 +390,7 @@ Dig Escape is a simple puzzle game written in Rust. You can play it in the browser [here][digescape-game]. The developer has released [some videos][digescape-progress-video] about the development of the game. They also [did a review][digescape-rust-review] on what it was like working with Rust for -the first time. Be sure to check out the [Github repo][digescape-github]. +the first time. Be sure to check out the [GitHub repo][digescape-github]. [digescape-game]: https://tantandev.itch.io/digescape [digescape-progress-video]: https://www.youtube.com/watch?v=q6-f63vZW8Y @@ -386,8 +399,10 @@ the first time. Be sure to check out the [Github repo][digescape-github]. ### [Akigi][akigi] -![cat model](akigi1.png) -_Completed cat model with rigging_ +{{ image_figure( + alt="cat model" + src="https://github.com/akigi1.png" + caption="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 @@ -420,8 +435,10 @@ Full devlogs: ### Nox Futura: Rust Edition -![worldgen menu](nox-f.png) -_Worldgen menu_ +{{ image_figure( + alt="worldgen menu" + src="https://github.com/nox-f.png" + caption="Worldgen menu") }} [Herbert Wolverson][thebracket] (the author of [bracket-lib] and [the Rust Roguelike Tutorial][rl-book]) @@ -639,8 +656,11 @@ _Discussions: ### NodeFX -[![NodeFX](nodefx.png)][NodeFXTweet] -_Click the image to see the animated version_ +{{ image_figure( + alt="NodeFX" + src="https://github.com/nodefx.png" + caption="Click the image to see the animated version", + link="https://twitter.com/MrVallentin/status/1256805858022998016") }} Project "NodeFX" by [Christian Vallentin (@MrVallentin)][@MrVallentin] is an unnamed node-based tool for creating GLSL shaders in real-time, @@ -964,7 +984,7 @@ Robo Instructus][otf-font-robo]. [gdnative-release]: https://twitter.com/toast_dev/status/1267071886040555520 [@toast_dev]: https://twitter.com/toast_dev -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/011/index.md b/content/news/011/index.md index 81fb9bffb..7bb64bd71 100644 --- a/content/news/011/index.md +++ b/content/news/011/index.md @@ -31,7 +31,7 @@ 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) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Meeting Minutes](#meeting-minutes) - [Requests for Contribution](#requests-for-contribution) - [Bonus](#bonus) @@ -93,8 +93,11 @@ Also, participants are encouraged to ### [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_ +{{ image_figure( + alt="Way of Rhea Trailer" + src="https://github.com/way-of-rhea.jpeg" + caption="Click to see the latest version of the game's trailer", + link="https://youtube.com/watch?v=eVrbZss_B3g") }} [Way of Rhea][rhea-site] ([steam][rhea-steam]) is an upcoming puzzle platformer that takes place in a world @@ -129,8 +132,10 @@ 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_ +{{ image_figure( + alt="Measuring the effects of changes" + src="https://github.com/abstreet-evaluating-impacts.gif" + caption="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. @@ -160,8 +165,11 @@ A/B Street uses a [custom GUI library][ezgui], leveraging `glium`, `usvg`, and ### [Crate Before Attack][cba-site] -[![In-game visual scripting prototype](crate_before_attack.gif)][cba-youtube-scripting] -_In-game visual scripting prototype_ +{{ image_figure( + alt="In-game visual scripting prototype" + src="https://github.com/crate_before_attack.gif" + caption="In-game visual scripting prototype", + link="https://youtu.be/LLAc9_cOR9o") }} [Crate Before Attack][cba-site] by [koalefant (@CrateAttack)][@CrateAttack] is a skill-based grappling hook multiplayer game where frogs combat their friends @@ -211,8 +219,10 @@ Some of the updates from [the June devlog][garden-devlog]: ### [Veloren][veloren] -![Animation improvements](veloren-wolf.gif) -_Animation improvements_ +{{ image_figure( + alt="Animation improvements" + src="https://github.com/veloren-wolf.gif" + caption="Animation improvements") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -281,8 +291,10 @@ Also, check out [a talk about open source and Veloren][veloren-talk]: ### [Zero to Game][zerotoga.me] -![ships with greater thrust explode](zerotogame-destruction.gif) -_The initial destruction prototype applied across different thrust levels_ +{{ image_figure( + alt="ships with greater thrust explode" + src="https://github.com/zerotogame-destruction.gif" + caption="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. @@ -329,7 +341,7 @@ without any Javascript (besides a small shim). It can be played online [here][pont-online]! The system architecture is described in a [blog post][pont-blog] -and the source is available [on Github][pont-source] +and the source is available [on GitHub][pont-source] _Discussions: [/r/rust](https://www.reddit.com/r/rust/comments/gu1bq5/pont_a_board_game_in_rust_webassembly/), @@ -379,8 +391,10 @@ 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_ +{{ image_figure( + alt="Part of the game map" + src="https://github.com/animal-chess.jpeg" + caption="Part of the game map") }} [Animal Fight Chess][AnimalChess] (斗兽棋, "Doe Show Chee") by [@netcan] is a Rust implementation of a popular Chinese game. @@ -463,8 +477,11 @@ Two devlogs were released this month: ### [Weegames][weegames-itch] -[![Weegames](weegames.jpg)][weegames-video] -_Click to see [a demo video][weegames-video]_ +{{ image_figure( + alt="Weegames" + src="https://github.com/weegames.jpg" + caption="Click to see [a demo video](https://youtube.com/watch?v=A_GqhZ_7EIw)", + link="https://youtube.com/watch?v=A_GqhZ_7EIw") }} [Weegames][weegames-itch] is a fast-paced minigame collection. There are 23 odd games all made using free images and sounds. @@ -502,8 +519,11 @@ The demo's source code [could be found here][hypervis]. ### [Boids in Rust][rboids-post-1] -[![Boids demo](rboids-video.jpeg)][rboids-video] -_Click to watch [the video demo][rboids-video]_ +{{ image_figure( + alt="Boids demo" + src="https://github.com/rboids-video.jpeg" + caption="Click to watch [the video demo](https://drive.google.com/file/d/1ri4x-jCX8SA9oX8OqDIKtXhYIrEKlGjO/view)", + link="https://drive.google.com/file/d/1ri4x-jCX8SA9oX8OqDIKtXhYIrEKlGjO/view") }} [@twitu] has published a three-part blog series about simulating a group of virtual agents (boids) @@ -624,8 +644,10 @@ seemed like now is the time to address such issues in the API. ### [This Month in Mun][mun-june] -![Language Server Diagnostics in action](mun-languageserver.gif) -_Mun language server diagnostics in action_ +{{ image_figure( + alt="Language Server Diagnostics in action" + src="https://github.com/mun-languageserver.gif" + caption="Mun language server diagnostics in action") }} [Mun] is a scripting language for gamedev focused on quick iteration times that is written in Rust. @@ -658,7 +680,7 @@ 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]. +to contribute are available on GameLisp's [GitHub Respository][glisp-github]. [gamelisp]: https://gamelisp.rs/ [glisp-playground]: https://gamelisp.rs/playground/ @@ -902,7 +924,7 @@ that allows you to play classic Nintendo Entertainment System games in the brows [gc-nes-src]: https://github.com/GarettCooper/gc_nes_emulator [garettcooper.com]: https://garettcooper.com/ -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/news/012/index.md b/content/news/012/index.md index e1e79143f..bd2b863b6 100644 --- a/content/news/012/index.md +++ b/content/news/012/index.md @@ -64,8 +64,11 @@ If needed, a section can be split into subsections with a "------" delimiter. ### [ochre][4k-post] - 4K Intro -[![Youtube preview: mountains & spheres](4k-into-youtube.jpeg)][4k-video] -_Click to [watch the demo on Youtube][4k-video]._ +{{ image_figure( + alt="Youtube preview: mountains & spheres" + src="https://github.com/4k-into-youtube.jpeg" + caption="Click to [watch the demo on Youtube](https://youtube.com/watch?v=SIkkYRQ07tU).", + link="https://youtube.com/watch?v=SIkkYRQ07tU") }} Jani Peltonen has recently released a [4K intro][4k-src] which is completely written in Rust and GLSL @@ -116,8 +119,11 @@ _Discussions: ### [Crate Before Attack][cba-site] -[![Golf Club in Crate Before Attack](crate-before-attack.gif)][cba-site] -_A new weapon: the Golf Club_ +{{ image_figure( + alt="Golf Club in Crate Before Attack" + src="https://github.com/crate-before-attack.gif" + caption="A new weapon: the Golf Club", + link="https://cratebeforeattack.com/") }} [Crate Before Attack][cba-site] by [koalefant (@CrateAttack)][@CrateAttack] is a skill-based grappling hook multiplayer game where frogs combat their friends @@ -471,8 +477,11 @@ The game is in an early stage of development, ### [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]._ +{{ image_figure( + alt="fps-game-screenshot" + src="https://github.com/fps-game-2.jpeg" + caption="Click to watch [footage from the game's current state](https://youtu.be/NIJNgr9zeXk).", + link="https://youtu.be/NIJNgr9zeXk") }} On this update, [@pingFromHeaven] talks about the lighting implementation that sets the tone for the game, how Rust is good at shortening the debugging @@ -509,8 +518,10 @@ Some of the recent updates: ### [Veloren][veloren] -![Sunrise](veloren-sunrise.gif) -_Sunrise_ +{{ image_figure( + alt="Sunrise" + src="https://github.com/veloren-sunrise.gif" + caption="Sunrise") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -524,8 +535,10 @@ 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_ +{{ image_figure( + alt="Fire particles" + src="https://github.com/veloren-fire.gif" + caption="Progress on the particle system") }} You can read more about some specific topics from July: @@ -549,8 +562,10 @@ 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_ +{{ image_figure( + alt="Quadrupeds" + src="https://github.com/veloren-quadrupeds.png" + caption="Quadruped overhaul") }} [veloren]: https://veloren.net @@ -599,8 +614,11 @@ read the book at [sokoban.iolivia.me][sokoban_book]. ### [Make Pong with Rust][tantan-video] -[![youtube preview](video-pong-tutorial.jpeg)][tantan-video] -_Click to [watch the tutorial][tantan-video]._ +{{ image_figure( + alt="youtube preview" + src="https://github.com/video-pong-tutorial.jpeg" + caption="Click to [watch the tutorial][tantan-video].", + link="tantan-video") }} [TanTan] released a [video tutorial][tantan-video] that guides you through all the step of making a pong game in Rust @@ -638,8 +656,11 @@ The full article is available [here][dod]. ### ["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]._ +{{ image_figure( + alt="youtube preview: a slide with Tower Rangers game" + src="https://github.com/rust-n-games-youtube.jpeg" + caption="Click to [watch the talk](https://youtu.be/0Bj-5C2Zfqs?t=1404).", + link="https://youtu.be/0Bj-5C2Zfqs?t=1404") }} During the recent ["Rust and Tell"][rust-n-tell] online event [Stephan @extrawurst Dilly][@extrawurst] gave a ["Rust'N'Games" talk][rust-n-games] @@ -810,8 +831,10 @@ Linux, macOS and Windows! ### [wgpu][wgpu-site] -![procgen dynamic "grass field"](tuitui-grass-field.jpeg) -_[@MacTuitui]'s everyday [nannou] experiment #1274_ +{{ image_figure( + alt='procgen dynamic "grass field"' + src="https://github.com/tuitui-grass-field.jpeg" + caption="[@MacTuitui](https://twitter.com/MacTuitui)'s everyday [nannou](https://nannou.cc) 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 @@ -931,8 +954,11 @@ You can follow progress on [GitHub][graphene] or on [Twitter][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._ +{{ image_figure( + alt="Vulkan renderer on iOS prototype" + src="https://github.com/vulkan-renderer-prototype.jpeg" + caption="Click to watch [the video demo][vulkan-renderer-prototype-video] running on iOS.", + link="vulkan-renderer-prototype-video") }} [@aclysma] published a [new vulkan-based renderer][renderer-prototype] that uses [atelier-assets] to load 3D scenes exported from blender. @@ -1014,7 +1040,7 @@ You can watch a [video of Rust interpreter running Fizzbuzz][langcraft-video]: [Langcraft]: https://github.com/SuperTails/langcraft [langcraft-video]: https://youtube.com/watch?v=Cx0w5Wn9pPU - + ## Meeting Minutes @@ -1089,8 +1115,11 @@ and highlight events from the past. --> 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]_ +{{ image_figure( + alt="youtube preview" + src="https://github.com/shar-youtube.jpeg" + caption="Click to watch [SHAR's Greenlight trailer][shar-trailer]", + link="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 diff --git a/content/news/013/index.md b/content/news/013/index.md index 683a254f5..822545c21 100644 --- a/content/news/013/index.md +++ b/content/news/013/index.md @@ -31,7 +31,7 @@ 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) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Meeting Minutes](#meeting-minutes) - [Requests for Contribution](#requests-for-contribution) @@ -113,8 +113,11 @@ for you to listen and subscribe: ### [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_ +{{ image_figure( + alt="Camera debugging in Crate Before Attack" + src="https://github.com/crate-before-attack.jpeg" + caption="Debugging camera motion: highlighted areas are points of interest", + link="https://cratebeforeattack.com/") }} [Crate Before Attack][cba-site] by [koalefant (@CrateAttack)][@CrateAttack] is a skill-based multiplayer game where frogs combat their friends @@ -144,8 +147,10 @@ More details are in [August DevLog-entry][cba-august-update]. ### [Veloren][veloren] -![Landscape](veloren-landscape1.jpeg) -_Landscape with new LoD and lighting_ +{{ image_figure( + alt="Landscape" + src="https://github.com/veloren-landscape1.jpeg" + caption="Landscape with new LoD and lighting") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -163,8 +168,10 @@ 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_ +{{ image_figure( + alt="Healing sceptre" + src="https://github.com/veloren-sceptre.gif" + caption="Healing sceptre with the new particle system") }} You can read more about some specific topics from August: @@ -262,8 +269,11 @@ It can be played in the browser or downloaded at [itch.io][Cary]. ### [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]_ +{{ image_figure( + alt="Anthropic's virtual booth at Play NYC" + src="https://github.com/way-of-rhea-play-nyc.png" + caption="Anthropic's virtual booth at [Play NYC](https://www.play-nyc.com/)", + link="https://store.steampowered.com/app/1110620/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. @@ -351,8 +361,11 @@ Chillscapes is written using an early-in-development 2d engine, ### [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_ +{{ image_figure( + alt="Dwarf Seeks Fortune" + src="https://github.com/dwarf_seeks_fortune.png" + caption="Collect all keys to unlock the door to the next level", + link="https://github.com/amethyst/dwarf_seeks_fortune") }} [Dwarf Seeks Fortune][dsf-github] is a puzzle-platformer made with the Amethyst game engine. Its developer, Jazarro, has partnered with the Amethyst organization @@ -396,8 +409,11 @@ Full devlogs: ### [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_ +{{ image_figure( + alt="SIMple Mechanics wave preset" + src="https://github.com/simple-physics-wave.gif" + caption="One of SIMple Mechanic's Lua presets, a colorful wave of bouncing circles", + link="https://mkhan45.github.io/SIMple-Physics/posts/Gifs/") }} [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 @@ -443,8 +459,11 @@ work with graphics in Rust using [SDL2][sdl2] library. ### [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]_ +{{ image_figure( + alt="youtube preview" + src="https://github.com/rustconf-amethyst-talk.png" + caption="Click to [watch the talk](https://www.youtube.com/watch?v=GFi_EdS_s_c)", + link="https://www.youtube.com/watch?v=GFi_EdS_s_c") }} Getting started with Rust + gamedev can be intimidating. At [RustConf 2020][rust-conf-2020], [Micah Tigley] gave a talk about their experience @@ -515,8 +534,10 @@ game development are planned. ### [ecs_bench_suite] -![Summary results table](ecs-bench.png) -_The full benchmark report is available [here][ecs_report]_ +{{ image_figure( + alt="Summary results table" + src="https://github.com/ecs-bench.png" + caption="The full benchmark report is available [here](https://rust-gamedev.github.io/ecs_bench_suite/target/criterion/report/index.html)") }} This month [@TomGillen] (author of the [Legion][legion] ECS) released [ecs_bench_suite] - a suite of benchmarks designed to test and compare @@ -759,8 +780,10 @@ also built. ### [gfx-rs][gfx-repo] and [wgpu][wgpu-site] -![wgpu-rs water](wgpu-water.gif) -_wgpu-rs's [water example][wgpu-water]_ +{{ image_figure( + alt="wgpu-rs water" + src="https://github.com/wgpu-water.gif" + caption="wgpu-rs's [water example](https://github.com/gfx-rs/wgpu-rs/tree/master/examples/water)") }} gfx-rs project and wgpu ecosystem have observed the release of 0.6 versions! 🎉 @@ -900,7 +923,7 @@ These last few weeks have been big for the Bevy project: - 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]: + 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. @@ -1104,7 +1127,7 @@ _Discussions: ![Current state of starframe graphics and physics](starframe-demo.gif) -[starframe] by [@moletrooper] is a work-in-progress 2D game engine +[starframe] by [@molentum] 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]. @@ -1113,11 +1136,11 @@ 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)_ +[twitter](https://twitter.com/molentum_/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/ +[starframe]: https://github.com/m0lentum/starframe +[@molentum]: https://twitter.com/molentum_ +[sf-graph-post]: https://molentum.me/blog/starframe-architecture/ ### [mochi] @@ -1171,8 +1194,11 @@ The collected profile data can be viewed ingame with [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]_ +{{ image_figure( + alt="A screenshot from the video" + src="https://github.com/optick-video.jpg" + caption="Click to watch a [video tutorial / features overview](https://youtube.com/watch?v=p57TV5342fo)", + link="https://youtube.com/watch?v=p57TV5342fo") }} [Optick][optick] by [@bombomby] is a lightweight C++ profiler for games that provides access for all the necessary tools required for @@ -1253,7 +1279,7 @@ Amongst them: [football-manager]: https://en.wikipedia.org/wiki/Football_Manager [Football Manager Tools]: https://github.com/Stromberg90/football-manager-tools -## Popular Workgroup Issues in Github +## 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); diff --git a/content/news/014/index.md b/content/news/014/index.md index ffd2a544a..b34c86bba 100644 --- a/content/news/014/index.md +++ b/content/news/014/index.md @@ -30,7 +30,7 @@ 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) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Requests for Contribution](#requests-for-contribution) diff --git a/content/news/016/index.md b/content/news/016/index.md index a9a4b1da2..0b7c57d10 100644 --- a/content/news/016/index.md +++ b/content/news/016/index.md @@ -30,12 +30,12 @@ Feel free to send PRs about your own projects! Table of contents: -- [Rust GameDev Podcast](#rust-gamedev-podcast) +- [Rust GameDev Podcast #3](#rust-gamedev-podcast-3) - [Last Call for Rust GameDev Survey](#last-call-for-rust-gamedev-survey) - [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) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Requests for Contribution](#requests-for-contribution) diff --git a/content/news/017/index.md b/content/news/017/index.md index ef0cafa10..7d9240fe3 100644 --- a/content/news/017/index.md +++ b/content/news/017/index.md @@ -29,12 +29,12 @@ Feel free to send PRs about your own projects! Table of contents: +- [Rust GameDev Podcast #4](#rust-gamedev-podcast-4) - [Rust Gamedev Meetup](#rust-gamedev-meetup) -- [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) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Requests for Contribution](#requests-for-contribution) diff --git a/content/news/018/index.md b/content/news/018/index.md index ddbe2e0d7..bb8243516 100644 --- a/content/news/018/index.md +++ b/content/news/018/index.md @@ -35,7 +35,7 @@ Table of contents: - [Learning Material Updates](#learning-material-updates) - [Engine Updates](#engine-updates) - [Library & Tooling Updates](#library-tooling-updates) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Requests for Contribution](#requests-for-contribution) diff --git a/content/news/019/index.md b/content/news/019/index.md index fa2aa10f6..687358873 100644 --- a/content/news/019/index.md +++ b/content/news/019/index.md @@ -33,7 +33,7 @@ Table of contents: - [Learning Material Updates](#learning-material-updates) - [Engine Updates](#engine-updates) - [Library & Tooling Updates](#library-tooling-updates) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Requests for Contribution](#requests-for-contribution) diff --git a/content/news/020/index.md b/content/news/020/index.md index 4c87932d2..4fcc925cf 100644 --- a/content/news/020/index.md +++ b/content/news/020/index.md @@ -31,8 +31,6 @@ Feel free to send PRs about your own projects! - [Learning Material Updates](#learning-material-updates) - [Engine Updates](#engine-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) @@ -868,7 +897,7 @@ Some of the [recent updates][dimforge-update]: [abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 [mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue [simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue -[bevy-issues]: https://github.com/bevyengine/bevy/labels/E-Good-First-Issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue ------ diff --git a/content/news/026/index.md b/content/news/026/index.md index a537b6f2f..6d2d73dca 100644 --- a/content/news/026/index.md +++ b/content/news/026/index.md @@ -37,7 +37,7 @@ Feel free to send PRs about your own projects! - [Engine Updates](#engine-updates) - [Tooling Updates](#tooling-updates) - [Library Updates](#library-updates) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) - [Requests for Contribution](#requests-for-contribution) - [Discussions](#discussions) @@ -166,14 +166,17 @@ _Discussions: [Twitter][bitgun-inventory]_ The Windows version of the game has been rewritten to use Macroquad, so now the web and downloadable versions of the game share the same codebase. Development for the web version has moved to the -[Weegames Github][weegames-github] repository. +[Weegames GitHub][weegames-github] repository. [weegames-itch]: https://yeahross.itch.io/weegames [weegames-github]: https://github.com/yeahross0/weegames ### [Veloren][veloren] -![An odd structure in the woods](veloren.jpg) _An odd structure in the woods_ +{{ image_figure( + alt="An odd structure in the woods" + src="https://github.com/veloren.jpg" + caption="An odd structure in the woods") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -211,8 +214,10 @@ September's full weekly devlogs: "This Week In Veloren...": ### [Harvest Hero Origins][hho] @ PAX West 2021 -![hho @ pax](hho_pax.jpg) -_Gemdrop Games booth at PAX West 2021_ +{{ image_figure( + alt="hho @ pax" + src="https://github.com/hho_pax.jpg" + caption="Gemdrop Games booth at PAX West 2021") }} [Harvest Hero Origins][hho] ([Discord](https://discord.gg/CJRbxQn3d9), @@ -323,8 +328,10 @@ at [Idu's Discord server's #demo-download channel][idu-discord]! ### [Antorum Online] -![Some players fishing at the beach](antorum.jpg) -_It's a good day for fishing..._ +{{ image_figure( + alt="Some players fishing at the beach" + src="https://github.com/antorum.jpg" + caption="It's a good day for fishing...") }} [Antorum Online] is a micro-multiplayer online role-playing game by [@dooskington]. The game server is written in Rust, and the official client is being developed @@ -433,8 +440,10 @@ As the godot-rust community keeps growing, the project can now be found ### [Emerald] -![hotreload](emd_texture_hotreload.gif) -_Built in texture hot reloading, just call `emd.loader().hotreload()`_ +{{ image_figure( + alt="hotreload" + src="https://github.com/emd_texture_hotreload.gif" + caption="Built in texture hot reloading, just call `emd.loader().hotreload()`") }} [Emerald] by [@bombfuse][bombfuse_twi] is a 2D game engine focused on being super portable and easy-to-use. @@ -462,10 +471,12 @@ fork and PR! ### [Starframe] -![physically-connected groups of primitives are framed with rectangles](starframe-islands.jpeg) -_Grouping bodies into disjoint "islands"_ +{{ image_figure( + alt="physically-connected groups of primitives are framed with rectangles" + src="https://github.com/starframe-islands.jpeg" + caption='Grouping bodies into disjoint "islands"') }} -[Starframe] by [@moletrooper] is a work-in-progress game engine for physics-y +[Starframe] by [@molentum] is a work-in-progress game engine for physics-y sidescrolling 2D games. This month, a lot of work was done on optimizing the physics engine. @@ -479,16 +490,18 @@ sense to work on the engine without a concrete project to use it. Thus, work has begun on a platformer based around connecting things with ropes. More details to be shown soonish! -[Starframe]: https://github.com/MoleTrooper/starframe/ -[@moletrooper]: https://twitter.com/moletrooper -[sf-grid-tweet]: https://twitter.com/moletrooper/status/1432441648890449920 -[sf-island-tweet]: https://twitter.com/moletrooper/status/1438877808412008450 +[Starframe]: https://github.com/m0lentum/starframe/ +[@molentum]: https://twitter.com/molentum_ +[sf-grid-tweet]: https://twitter.com/molentum_/status/1432441648890449920 +[sf-island-tweet]: https://twitter.com/molentum_/status/1438877808412008450 ### [Arcana] -![two synchronized views on tanks players-controlled tanks shooting each other -](arcana-tanks-multiplayer.gif) -_Two clients connected to the same server_ +{{ image_figure( + alt="two synchronized views on tanks players-controlled tanks shooting each other +" + src="https://github.com/arcana-tanks-multiplayer.gif" + caption="Two clients connected to the same server") }} [Arcana] is ECS based game engine focused on simplicity and performance. @@ -515,8 +528,11 @@ out-of-the-box atm, but stability improvements are expected next month. ### [rg3d] v0.23 -[![rg3d 0.23 feature highlights video](rg3d_video.jpg)][rg3d_0_23_video] -_A feature highlights [video][rg3d_0_23_video]_ +{{ image_figure( + alt="rg3d 0.23 feature highlights video" + src="https://github.com/rg3d_video.jpg" + caption="A feature highlights [video](https://youtube.com/watch?v=3tOdwmRWLKw)", + link="https://youtube.com/watch?v=3tOdwmRWLKw") }} [rg3d] ([Discord][rg3d_discord], [Twitter][rg3d_twitter], [Patreon][rg3d_patreon]) is a game engine that aims to be easy to use and provide a large @@ -545,8 +561,10 @@ _Discussions: [/r/rust](https://reddit.com/r/rust/comments/pnhbe4/media_rg3d_023 ### [Rust RPG Toolkit][rpg_rk] -![A dialogue window](capstone.png) -_[Capstone] - a WIP game that uses Rust RPG Toolkit_ +{{ image_figure( + alt="A dialogue window" + src="https://github.com/capstone.png" + caption="[Capstone](https://www.reddit.com/r/rust_gamedev/comments/paz35s/capstone) - a WIP game that uses Rust RPG Toolkit") }} [Rust RPG Toolkit][rpg_rk] by [@olefasting] is an engine for creating highly customizable and user modable action 2D action RPG's using Rust amd JSON. @@ -625,8 +643,10 @@ It supports modifying PC saves as well as decrypted PS4 saves ### [wgpu] -![Deno with wgpu crown](deno-wgpu.png) -_deno-wgpu_ +{{ image_figure( + alt="Deno with wgpu crown" + src="https://github.com/deno-wgpu.png" + caption="deno-wgpu") }} [wgpu] is a cross-platform, safe, pure-rust graphics API that runs natively on Vulkan, Metal, D3D12, D3D11, and OpenGLES; and on top of WebGPU on wasm. @@ -760,8 +780,10 @@ ktx2 writing support will come a future release. ### [rend3][rend3-github] -![rend3 sci-fi base scene](rend3-scifi.jpg) -_rend3 rendering a complex scene_ +{{ image_figure( + alt="rend3 sci-fi base scene" + src="https://github.com/rend3-scifi.jpg" + caption="rend3 rendering a complex scene") }} rend3 is a new 3D rendering library that focuses on having an easy to user interface without sacrificing performance or customizability. @@ -798,8 +820,10 @@ the new APIs, including the new Tables API. ### [Emergent AI][emergent-git] -![Utility AI](emergent-ai.gif) -_Example of game behavior using Utility AI_ +{{ image_figure( + alt="Utility AI" + src="https://github.com/emergent-ai.gif" + caption="Example of game behavior using Utility AI") }} [Emergent AI][emergent-git] by [@PsichiX][psichix-twitter] is a new crate designed to provide modern AI solutions for games written in Rust. Its highly modularized @@ -869,8 +893,10 @@ _Discussions: ### [KAS] GUI v0.10 -![a window with many widgets and tabs](kas-demo.gif) -_Widget gallery demo_ +{{ image_figure( + alt="a window with many widgets and tabs" + src="https://github.com/kas-demo.gif" + caption="Widget gallery demo") }} [KAS] by [@dhardy] is a general-purpose retained UI toolkit. This month v0.10 was released: @@ -893,7 +919,7 @@ _Discussions: [/r/rust](https://reddit.com/r/rust/comments/pjlb92/kas_gui_v010)_ [KAS]: https://github.com/kas-gui/kas [@dhardy]: https://github.com/dhardy -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub @@ -944,7 +970,7 @@ _Discussions: [/r/rust](https://reddit.com/r/rust/comments/pjlb92/kas_gui_v010)_ [abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 [mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue [simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue -[bevy-issues]: https://github.com/bevyengine/bevy/labels/E-Good-First-Issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue [Hacktoberfest]: https://hacktoberfest.digitalocean.com/ ------ diff --git a/content/news/027/index.md b/content/news/027/index.md index c42203e07..cc6efb8a0 100644 --- a/content/news/027/index.md +++ b/content/news/027/index.md @@ -107,8 +107,10 @@ Early Access release on Steam is expected in mid 2022. ### [The Process] -![An animated gif showing an engineer shooting rockets](the_process.gif) -_Firing Carrockets™!_ +{{ image_figure( + alt="An animated gif showing an engineer shooting rockets" + src="https://github.com/the_process.gif" + caption="Firing Carrockets™!") }} [The Process] by @setzer22 is an upcoming game about factory building, process management, and carrot production, built with Rust using the Godot game engine! @@ -172,8 +174,10 @@ is available [here][chaos-theory-src] and ### [Me And My Unicycle] -![Me And My Unicycle screenshot](me_and_my_unicycle_cover.png) -_Can you handle this unstable ride?_ +{{ image_figure( + alt="Me And My Unicycle screenshot" + src="https://github.com/me_and_my_unicycle_cover.png" + caption="Can you handle this unstable ride?") }} [Me And My Unicycle] is a 2D physics game by [@nikl_me] submitted to Ludum Dare 49. It is build with [Bevy] and [the code can be found on GitHub][mamu-source]. @@ -273,8 +277,10 @@ The developer have also written a blog post: ### [Graph Game] -![image/gameplay of the game: circle and triangles](graph_game.gif) -_Navigating the graph map can be stressful_ +{{ image_figure( + alt="image/gameplay of the game: circle and triangles" + src="https://github.com/graph_game.gif" + caption="Navigating the graph map can be stressful") }} [Graph Game] ([GitHub][graph-game-github]) uses [Bevy](https://bevyengine.org/) as its engine. You can play it from your @@ -323,8 +329,10 @@ You can stay up to date on the latest developments of Way of Rhea by ### [PaddlePunks][paddlepunks-itch] -![Animated gameplay that looks like pong mixed with an anime fighting game](paddlepunks-gameplay.gif) -_A round between a player and the AI set to Hard_ +{{ image_figure( + alt="Animated gameplay that looks like pong mixed with an anime fighting game" + src="https://github.com/paddlepunks-gameplay.gif" + caption="A round between a player and the AI set to Hard") }} PaddlePunks is a versus tennis game by [Felix Windström][paddlepunks-twitter] with a diverse cast of characters and playstyles and online play with rollback @@ -342,8 +350,10 @@ players. Updates are also posted to [Twitter][paddlepunks-twitter]. ### [Veloren][veloren] -![An early-morning sunrise](veloren.jpg) -_An early-morning sunrise_ +{{ image_figure( + alt="An early-morning sunrise" + src="https://github.com/veloren.jpg" + caption="An early-morning sunrise") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -441,8 +451,11 @@ For more details, see the [changelog][tetra-changelog]. ### [GameDev Mini Symposium][gms-talk] -[![An early-morning sunrise](gms-talk.png)][gms-talk] -_Click the image to watch the talk_ +{{ image_figure( + alt="An early-morning sunrise" + src="https://github.com/gms-talk.png" + caption="Click the image to watch the talk", + link="https://www.youtube.com/watch?v=OzUsPi4kHes") }} Back in September, the University of Glasgow's GameLab held a 'GameDev Mini Symposium' online. One of the featured speakers was @@ -487,8 +500,10 @@ or [GitHub][spv]. ### [wgpu]-0.11 release -![bevy webgl2 via wgpu](bevy-webgl2.png) -_experimental Bevy branch running on WebGL2 via wgpu_ +{{ image_figure( + alt="bevy webgl2 via wgpu" + src="https://github.com/bevy-webgl2.png" + caption="experimental Bevy branch running on WebGL2 via wgpu") }} The team is happy to announce the release of wgpu-0.11 and naga-0.7. Details can be found on the [gfx-rs blog]. The most exciting feature @@ -506,8 +521,10 @@ and the history of processing shaders with Rust. ### [rend3]-0.2 Release -![rend3-scifi](rend3-scifi.jpg) -_Improved shadows and rendering with rend3 0.2_ +{{ image_figure( + alt="rend3-scifi" + src="https://github.com/rend3-scifi.jpg" + caption="Improved shadows and rendering with rend3 0.2") }} rend3 is a 3D rendering library that focuses on having an easy to use interface without sacrificing performance or customizability. @@ -808,7 +825,7 @@ may be helpful for other people's projects! [abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 [mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue [simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue -[bevy-issues]: https://github.com/bevyengine/bevy/labels/E-Good-First-Issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue ------ diff --git a/content/news/028/index.md b/content/news/028/index.md index 4faca0606..f7ad574d6 100644 --- a/content/news/028/index.md +++ b/content/news/028/index.md @@ -25,6 +25,7 @@ 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 +- [Rust GameDev Meetup](#rust-gamedev-meetup) - [Game Updates](#game-updates) - [Learning Material Updates](#learning-material-updates) - [Engine Updates](#engine-updates) @@ -78,8 +79,10 @@ working on at the next meetup on [December 11th][rust-meetup-dec-time], fill out ### Flesh -![flesh preview](flesh.gif) -_The melee weapon in action_ +{{ image_figure( + alt="flesh preview" + src="https://github.com/flesh.gif" + caption="The melee weapon in action") }} [Flesh] by [@im_oab] is a 2D-horizontal shmup game with hand-drawn animation and an organic/fleshy theme. It is implemented using [Tetra]. This month's updates @@ -94,8 +97,10 @@ include: ### [One-Click Ninja] -![Screenshot of One-Click Ninja](one-click-ninja.png) -_Screenshot of One-Click Ninja_ +{{ image_figure( + alt="Screenshot of One-Click Ninja" + src="https://github.com/one-click-ninja.png" + caption="Screenshot of One-Click Ninja") }} One-Click Ninja is a rhythm game made in 10 days for [1-Button Jam 2021], written in Rust using the [Bevy] engine. @@ -147,8 +152,10 @@ tunnel full of spiders and other enemies! They also worked on a ### [Halloween Mahjong Solitaire][mahjong-github] -![Halloween Mahjong Solitaire screenshot](mahjong-screenshot.png) -_Screenshot of Halloween Mahjong Solitaire_ +{{ image_figure( + alt="Halloween Mahjong Solitaire screenshot" + src="https://github.com/mahjong-screenshot.png" + caption="Screenshot of Halloween Mahjong Solitaire") }} Halloween Mahjong Solitaire ([GitHub][mahjong-github]) by [@Syn-Nine][synnine-twitter] is a game created for the [Game Developers @@ -192,8 +199,10 @@ You can follow the development of Country Slice on ### [Veloren][veloren] -![Travelling merchant](veloren.jpg) -_A merchant paused in their travels_ +{{ image_figure( + alt="Travelling merchant" + src="https://github.com/veloren.jpg" + caption="A merchant paused in their travels") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -233,8 +242,11 @@ November's full weekly devlogs: "This Week In Veloren...": ### [BENDYWORM] -![An animation of a platformer where the entire world bends around -you](bendyworm.gif) _Watch out! The entire world bends around you!_ +{{ image_figure( + alt="An animation of a platformer where the entire world bends around +you" + src="https://github.com/bendyworm.gif" + caption="Watch out! The entire world bends around you!") }} BENDYWORM ([GitHub][BENDYWORM-github], [Twitter][BENDYWORM-twitter]) by [@bauxitedev][BENDYWORM-bauxitedev] is a platformer with a twist: the entire @@ -346,10 +358,13 @@ _Discussions: ### [PaddlePunks][paddlepunks-itch] -![Pong, but one of the characters rewinds time to figure out which of the other -player's ballusions is actually real](paddlepunks-rewind.gif) _One of the -characters can spend super meter to rewind time, this is strong but pretty -situational._ +{{ image_figure( + alt="Pong, but one of the characters rewinds time to figure out which of the other + player's ballusions is actually real" + src="https://github.com/paddlepunks-rewind.gif" + caption="One of the + characters can spend super meter to rewind time, this is strong but pretty + situational.") }} PaddlePunks is a versus tennis game by [Felix Windström][paddlepunks-twitter] with a diverse cast of characters and playstyles and online play with rollback @@ -523,8 +538,10 @@ to write compute shaders in a "real language". ### [Rust Roguelike Tutorial][rl-tut] -![ascii map and ui](rl-tut.jpg) -_A nasty demon monster at the exit to Abyss_ +{{ image_figure( + alt="ascii map and ui" + src="https://github.com/rl-tut.jpg" + caption="A nasty demon monster at the exit to Abyss") }} [The Roguelike Tutorial][rl-tut] by [@herberticus] got a [new 75th (!) chapter][rl-tut-new] that shows how to generate a chaotic Voronoi-based city @@ -542,8 +559,10 @@ portal. ### [Hands-on Rust][hor] -![A screenshot of a game in a browser](hor-bonus.jpg) -_A Dungeon Crawler running in a browser_ +{{ image_figure( + alt="A screenshot of a game in a browser" + src="https://github.com/hor-bonus.jpg" + caption="A Dungeon Crawler running in a browser") }} Another update from [@herberticus] is a bonus article for the [Hands-on Rust][hor] book: ["Run Your Rust Games in a Browser"][hor-bonus] that guides the @@ -635,8 +654,11 @@ Discord][graphite-discord] and get involved! ### [Solid Editor][solid] -[![youtube preview: modelling tree's branches using ball as a cursor](solid-editor.jpg)][solid-video] -_A [demo video][solid-video] of using the editor_ +{{ image_figure( + alt="youtube preview: modelling tree's branches using ball as a cursor" + src="https://github.com/solid-editor.jpg" + caption="A [demo video][solid-video] of using the editor", + link="https://youtube.com/watch?v=GuVM3W9Pfdg") }} [Solid Editor][solid] is [Solid Engine][solid-engine]'s custom-built voxel graphics editor. It is designed to be a key part of the engine's asset pipeline, @@ -876,7 +898,7 @@ useful information --> [abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 [mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue [simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue -[bevy-issues]: https://github.com/bevyengine/bevy/labels/E-Good-First-Issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue ------ diff --git a/content/news/029/10xsprintmaster.png b/content/news/029/10xsprintmaster.png new file mode 100644 index 000000000..2d4d3886f Binary files /dev/null and b/content/news/029/10xsprintmaster.png differ diff --git a/content/news/029/antorum.jpg b/content/news/029/antorum.jpg new file mode 100644 index 000000000..38e5c471e Binary files /dev/null and b/content/news/029/antorum.jpg differ diff --git a/content/news/029/bevy-combat.gif b/content/news/029/bevy-combat.gif new file mode 100644 index 000000000..0a375d7c0 Binary files /dev/null and b/content/news/029/bevy-combat.gif differ diff --git a/content/news/029/bevy-remote-devtools.gif b/content/news/029/bevy-remote-devtools.gif new file mode 100644 index 000000000..d70361f1e Binary files /dev/null and b/content/news/029/bevy-remote-devtools.gif differ diff --git a/content/news/029/bevy_proto.png b/content/news/029/bevy_proto.png new file mode 100644 index 000000000..bf8971de4 Binary files /dev/null and b/content/news/029/bevy_proto.png differ diff --git a/content/news/029/bitgun-cutscene.jpg b/content/news/029/bitgun-cutscene.jpg new file mode 100644 index 000000000..a53bd7ba9 Binary files /dev/null and b/content/news/029/bitgun-cutscene.jpg differ diff --git a/content/news/029/blackjack.gif b/content/news/029/blackjack.gif new file mode 100644 index 000000000..6e70fb8a5 Binary files /dev/null and b/content/news/029/blackjack.gif differ diff --git a/content/news/029/bomc-shots.png b/content/news/029/bomc-shots.png new file mode 100644 index 000000000..ca5b7d76b Binary files /dev/null and b/content/news/029/bomc-shots.png differ diff --git a/content/news/029/country_slice.gif b/content/news/029/country_slice.gif new file mode 100644 index 000000000..2def53eb6 Binary files /dev/null and b/content/news/029/country_slice.gif differ diff --git a/content/news/029/fishfight-poster.jpg b/content/news/029/fishfight-poster.jpg new file mode 100644 index 000000000..b2077e98c Binary files /dev/null and b/content/news/029/fishfight-poster.jpg differ diff --git a/content/news/029/fun-notation.gif b/content/news/029/fun-notation.gif new file mode 100644 index 000000000..c1b09d7c8 Binary files /dev/null and b/content/news/029/fun-notation.gif differ diff --git a/content/news/029/gamedev-meetup.png b/content/news/029/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/029/gamedev-meetup.png differ diff --git a/content/news/029/graphite_splash.png b/content/news/029/graphite_splash.png new file mode 100644 index 000000000..726e67a94 Binary files /dev/null and b/content/news/029/graphite_splash.png differ diff --git a/content/news/029/index.md b/content/news/029/index.md new file mode 100644 index 000000000..23e9dd691 --- /dev/null +++ b/content/news/029/index.md @@ -0,0 +1,817 @@ ++++ +title = "This Month in Rust GameDev #29 - December 2021" +transparent = true +date = 2022-01-19 ++++ + + + + + +Welcome to the 29th 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 + +- [Rust GameDev Meetup](#rust-gamedev-meetup) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The thirteenth Rust Gamedev Meetup happened in December. You can watch the +recording of the meetup [here on Youtube][gamedev-meetup-video]. The meetups +take place on the second Saturday every month via the [Rust Gamedev Discord +server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://youtu.be/S7aoi_4a2uE +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### [Tet-Rust][tetrust-github] + +{{ image_figure( + alt="Tet-Rust screenshot" + src="https://github.com/tet-rust-1-sm.gif" + caption="Screenshot of Tet-Rust") }} + +Tet-Rust ([GitHub][tetrust-github]) by +[@Syn-Nine][synnine-twitter] is a mini game based on the famous falling puzzle +block game. + +The game was created to exercise Syn9's [Rust Mini Game Framework][mgfw] and is +part of an open source [repository][s9-minigame-repo] of several mini-games +that use this framework. + +[tetrust-github]: https://github.com/Syn-Nine/rust-mini-games/tree/main/2d-games/tet-rust +[synnine-twitter]: https://twitter.com/Syn9Dev +[mgfw]: https://github.com/Syn-Nine/mgfw +[s9-minigame-repo]: https://github.com/Syn-Nine/rust-mini-games/ + +### The Beast of Monte Carlo + +{{ image_figure( + alt="The Beast of Monte Carlo Screenshot" + src="https://github.com/bomc-shots.png" + caption="Screenshot of The Beast of Monte Carlo") }} + +The Beast of Monte Carlo by [@Syn-Nine][synnine-twitter] is a mini role-playing +game in development to help work out new features for Syn9's +[Rust Mini Game Framework][mgfw]. + +This month's progress included: + +- prototyping tilemap and frame-based animation to make a simple walkaround +engine +- creating a general purpose maze generation algorithm and porting random world +map generation from C++ to Rust +- creating new sprite artwork and animation, as well as mocking up the battle +system + +The gameplay and art are influenced by games such as Final Fantasy VI and Lufia +II with a heavy focus on procedural content generation. + +### [10x Sprint Master] + +![In-game screenshot of 10x Sprint Master, +depicting a project workboard and two team members.](10xsprintmaster.png) + +[10x Sprint Master] ([GitHub][10xsprintmaster-github]) by [@E_net4] +is a simulation game where you play the role of +a software development lead engineer. +Write tasks, coordinate a team of developers, +fix bugs and manage feature delivery, +while trying to mitigate the torments of technical debt. + +The game was submitted to GitHub Game Off 2021, +and was written using [Yew] with graphics done in pure HTML and CSS. + +The author also published a [blog post on Dev.to][10xsprintmaster-dev] +about the game's technical and social dimensions. + +[10xsprintmaster-github]: https://github.com/Enet4/10xSprintMaster +[10x Sprint Master]: https://e-net4.itch.io/10x-sprint-master +[Yew]: https://yew.rs +[@E_net4]: https://twitter.com/E_net4 +[10xsprintmaster-dev]: https://dev.to/e_net4/10x-sprint-master-a-technical-and-social-experiment-ahp + +### [Molecoole][molecoole-steam] + +[![A molecoole with tons of cannons](molecoole1.png)][molecoole-steam] + +Molecoole is a top-down shooter roguelike where you build your character +from different atoms. Each atom has a unique ability providing +tons of variety between playthroughs. +It's made using the [Bevy Engine][bevy]. + +This month Molecoole devs focused on +adding more [variety][variety-twitter]: different enemies, atoms etc... + +They also launched their first teaser [video][teaser-twitter], +it gives us a glimpse into 3 different bioms, bosses, enemies and more. + +[molecoole-steam]: https://store.steampowered.com/app/1792170/Molecoole/ +[variety-twitter]: https://twitter.com/kiss_mrton/status/1473725282918014977 +[teaser-twitter]: https://twitter.com/kiss_mrton/status/1467242884927614976 +[bevy]: https://github.com/bevyengine/bevy + +### [Veloren][veloren] + +{{ image_figure( + alt="Winter in a town" + src="https://github.com/veloren.jpg" + caption="A peaceful winter night") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In December, Veloren ran a Christmas week. From the 20th to the 30th of +December, there were several winter-themed changes on the main server. Snow was +everywhere, decorations were added to locations, and NPC wore Christmas hats! +The 150th Veloren blog was also released in December. An experimental new +section of the newsletter gives video recaps of the last week's blog post. + +The ability to edit the appearance of characters was added to the game. Work was +done on armor tooltips to make them more clear. Skiing is in the works, with +some work to still be done on animations and physics. New images were created +for item displays, which are now stored as .vox files. + +December's full weekly devlogs: "This Week In Veloren...": +[#149][veloren-149], +[#150][veloren-150], +[#151][veloren-151], +[#152][veloren-152]. + +[veloren]: https://veloren.net +[veloren-149]: https://veloren.net/devblog-149 +[veloren-150]: https://veloren.net/devblog-150 +[veloren-151]: https://veloren.net/devblog-151 +[veloren-152]: https://veloren.net/devblog-152 + +### Country Slice + +![Country Slice](country_slice.gif) + +[Country Slice][country-slice-github] is +[@anastasiaopara][country-slice-twitter]'s hobby project, where users can draw a +small scene, and their input is amplified with real-time procedural +generation. + +This month's biggest update was adding an ability to draw +paths that, if intersected with walls, automatically generate arches. You can +read a Twitter thread that briefly covers how it +[was optimized to run in 1-2ms][country-slice-twitter-opt]. + +[country-slice-github]: https://github.com/anopara/country-slice +[country-slice-twitter]: https://twitter.com/anastasiaopara/ +[country-slice-twitter-opt]: https://twitter.com/anastasiaopara/status/1472627194409230343 + +### Fish Fight + +![Fish demo scene](fishfight-poster.jpg) + +Fish Fight ([GitHub][fish-github], [Discord][fish-discord], +[website][fish-website]) + +Fish Fight is a tactical 2D shooter, played by up to 4 players. +It is also a 2D-pixels-platformer game engine optimized for modding. + +In-game level editor was [released][fish-editor], along with an [editor tutorial][fish-tutorial]. +A retrospective devlog was posted: [Fish Fight's past, present, and future][fish-announce]. + +[fish-github]: https://github.com/fishfight/FishFight +[fish-discord]: https://discord.gg/4smxjcheE5 +[fish-website]: https://fishfight.org/ +[duck-game]: https://store.steampowered.com/app/312530/Duck_Game/ +[fish-editor]: https://github.com/fishfight/FishFight/releases/tag/v0.3 +[fish-tutorial]: https://fishfight.github.io/FishFight/editor.html +[fish-announce]: https://spicylobster.itch.io/fishfight/devlog/332434/fish-fights-past-present-and-future + +### [BITGUN][bitgun-steam] + +[![survivors talking in a cutscene: "You! Don't move! Are you infected?"]( +bitgun-cutscene.jpg)][bitgun-steam] + +BITGUN ([Steam][bitgun-steam], [Twitter][bitgun-twitter], +[Discord][bitgun-discord]) by [@LogLogGames][bitgun-twitter] is an action +roguelike zombie shooter with lots of blood. The game is built using Godot +and Rust (via [godot-rust][bitgun-godot-rust]). + +They are now heading to a public playtest via Steam and you can signup +[here][bitgun-signup] to play the game for free in exchange for a short feedback. +They recently added [cutscenes][bitgun-cutscenes], which are telling a bit more +story about this post-apocalyptic zombie world where people are scared of getting +infected and supplies are rare. They also launched a project [Name your zombie][bitgun-name] +where you can get your Twitter or TikTok username as a name of a random zombie +and a tombstone in the game! + +[bitgun-steam]: https://store.steampowered.com/app/1673940/BITGUN/ +[bitgun-twitter]: https://twitter.com/logloggames +[bitgun-discord]: https://discord.gg/XrGZQkq +[bitgun-godot-rust]: https://godot-rust.github.io/ +[bitgun-signup]: https://airtable.com/shrMUw2Xz98tdj8gW +[bitgun-cutscenes]: https://twitter.com/LogLogGames/status/1479752293306273792 +[bitgun-name]: https://loglog.games/pages/name-your-zombie/ + +### [vange-rs WebAssembly Port][vangers-wasm-post] + +![Cars, some terrain with roads and lava](vangers.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 [@caiiiycuk] ported it to the "wasm32-unknown-emscripten" target +via wgpu's GLES3 backend and [posted an article][vangers-wasm-post] +about the process and observations. + +The web version of vange-rs can be [played online here][vangers-wasm-play]. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/rdbl7u/vangers_running_on_webgl)_ + +[Vangers]: https://en.wikipedia.org/wiki/Vangers +[vangers-wasm-post]: https://caiiiycuk.medium.com/vange-rs-webassembly-in-rust-498e2f960a04 +[vangers-wasm-play]: https://caiiiycuk.github.io/vangers-web/vange-rs/ +[@caiiiycuk]: https://twitter.com/caiiiycuk +[vange.rs]: https://vange.rs + +### [Bevy Combat][bevy_combat] + +![planes shooting each other](bevy-combat.gif) + +[Bevy Combat][bevy_combat] by [@ElliotB256] is +a WIP sci-fi battle simulation written using Bevy. + +Some of the current features: + +- Combat and targetting AI; +- Simple weapons (instant hit), damage, health, shields, and mortality; +- Death animations and explosions; + +Check out the [web demo here][bevy-combat-web]. + +[bevy_combat]: https://github.com/ElliotB256/bevy_combat +[@ElliotB256]: https://github.com/ElliotB256 +[bevy-combat-web]: https://elliotb256.github.io/bevy_combat + +### Rust City + +![road, buildings with various utilities and some GUI](rust-city.jpg) + +[@oliviff] is working on a city building game. +Some of [this month's updates][rust-city-updates]: + +- Basic zoning placeholders when building roads. +- Advanced zoning for residential, commercial, and industry. +- Populating zoned areas based on demand. +- Buildings don't function unless they have utilities. +- Finances and transactions +- Population tracker. +- pipes required for a house to receive water. +- cables required for a house to receive electricity. +- build mode for pipes and cables. +- UI to toggle different layers visibility. + +[@oliviff]: https://twitter.com/oliviff +[rust-city-updates]: https://twitter.com/oliviff/status/1473266319881654274 + +### Antorum Isles (pka Antorum Online) + +![isles!](antorum.jpg) + +[Antorum Isles][antorum-play] is a micro-multiplayer online role-playing game +by [@dooskington]. +The game server is written in Rust, and the client is Unity-based. + +Main highlights of the latest [@dooskington's devlog][antorum-post]: + +- [Now you can download the client and play the game][antorum-play]! +- The project is mostly finished, it won't receive more major new features + or updates. +- The editor and the dedicated server binaries should be released soon. + +[@dooskington]: https://twitter.com/dooskington +[antorum-play]: https://antorum.ratwizard.dev +[antorum-post]: https://ratwizard.dev/dev-log/antorum/39 + +## Engine Updates + +### [Rusty Engine 3.0] + +{{ image_figure( + alt="An example Rusty Engine game" + src="https://github.com/rusty_engine3.png" + caption="The "Road Race" game prototype running under Rusty Engine 3.0") }} + +[Rusty Engine] by [Nathan Stocks] is a game engine built on top of Bevy +for people who are learning Rust. + +Version 3.0 is a large release with many breaking changes. Notable new features +include: [a full tutorial], custom asset loading (sprites, sounds, fonts), +customizable game state, an interactive collider creator, and much more. +See [the changelog for 3.0] for the full details. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/rwyrqx/rusty_engine_30), +[twitter](https://twitter.com/nathanstocks/status/1476724623903367168)_ + +[Rusty Engine 3.0]: https://github.com/CleanCut/rusty_engine/blob/main/CHANGELOG.md#300---2021-12-30 +[Rusty Engine]: https://github.com/CleanCut/rusty_engine +[a full tutorial]: https://cleancut.github.io/rusty_engine/ +[the changelog for 3.0]: https://github.com/CleanCut/rusty_engine/blob/main/CHANGELOG.md#300---2021-12-30 +[Nathan Stocks]: https://github.com/CleanCut + +### [Pyxel] + +![Examples: drawing methods, sound, tilemap and music editors](pyxel.png) + +[Pyxel] ([Discord][pyxel-discord]) by [@kitao] is a retro game engine +(inspired by [PICO-8] and [TIC-80]) that uses Python for scripting: + +- 16 color palette, +- 256x256 sized 3 image banks, +- 256x256 sized 8 tilemaps, +- 4 channels with 64 definable sounds, +- 8 peces of music which can combine arbitrary sounds, +- Image and sound editor, +- Keyboard, mouse, and gamepad inputs. + +Check out the [official][pyxel-examples1] +and [user-provided][pyxel-examples2] examples. + +[Pyxel]: https://github.com/kitao/pyxel +[@kitao]: https://twitter.com/kitao +[PICO-8]: https://lexaloffle.com/pico-8.php +[TIC-80]: https://tic80.com +[pyxel-discord]: https://discord.gg/FC7kUZJ +[pyxel-examples1]: https://github.com/kitao/pyxel#try-pyxel-examples +[pyxel-examples2]: https://github.com/kitao/pyxel/wiki/Pyxel-User-Examples + +## Learning Material Updates + +### [Rust SFML Windows Setup][sfml-video] + +[![youtube preview: ping pong window and some dev windows in background](youtube-sfml-win.jpg)][sfml-video] + +[@TheFern2] published a [video tutorial][sfml-video] on how to +set up Rust with [SFML bindings][sfml] for Windows users (using MSVC C++). + +rust-sfml's [wiki page with instructions for Windows][sfml-wiki-win] was also updated. + +[sfml-video]: https://youtube.com/watch?v=nnojR-8PT4M +[@TheFern2]: https://github.com/TheFern2 +[sfml]: https://lib.rs/sfml +[sfml-wiki-win]: https://github.com/jeremyletang/rust-sfml/wiki/Windows + +### [Rust and Unity Game Development][runity-video] + +[![Silly Youtube preview: TanTan's photo, Rust&Unity logos](youtube-runity.jpg)][runity-video] + +[@TanTanDev] published a [video][runity-video] about the process of adding Rust +support for the Unity game engine. + +> Is it really possible? YES it is! I managed to make a game 100% coded in Rust, +> but using Unity as editor and runtime. +> This has to be one of my craziest projects yet! +> +> I utilized a library called Bevy game framework/engine, +> to handle the gameplay programming. Utilizing Bevy systems I was able +> to hide the FFI code from the gameplay code. + +The resulting source code [can be found here][runity-source]. + +[runity-video]: https://youtu.be/L7M_vbo1N2g +[runity-source]: https://github.com/TanTanDev/runity +[@TanTanDev]: https://twitter.com/TanTanDev + +### [Tetris Livecoding][tetris-playlist] + +[![YouTube preview slide: title "TETRIS 1", author's face, ferris](youtube-tetris.jpg)][tetris-playlist] + +["Tetris in Rust from scratch"][tetris-playlist] is a series of livestreams +by [Over Developed] that showcases beginner/intermediate Rust concepts +using Tetris as an example. +Episodes: + +> - [In the first episode](https://youtube.com/watch?v=74UYWFNfR64), +> we lay the groundwork for the project, creating the overall structure +> and some of the primitives that will be used by the game engine. +> - [In the second episode](https://youtube.com/watch?v=ZBO99zuD3HQ), +> we flesh out some more behavior in the game engine, and fix some bugs +> that were introduced in the previous session. +> - [In the third episode](https://youtube.com/watch?v=Ro-aPSb96RM), +> we start writing the interface code for rendering the GUI. +> - [In this episode](https://youtube.com/watch?v=QLA0LqfhaoE), +> we connect the game logic to the GUI and finally see some interactivity. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/rk8zv5/livecoding_tetris_clone)_ + +[tetris-playlist]: https://youtube.com/playlist?list=PLBNbqulT6FWw9C39_WIT_dcCIj1AdxiAy + +[Over Developed]: https://youtube.com/channel/UCROob9baB-fRBDSyNq_8i4g + +## Tooling Updates + +### [Blackjack] + +![Blackjack demo: Connecting visual nodes and tweaking various parameters to +procedurally generate a beveled box in real-time](blackjack.gif) + +[Blackjack] by @setzer22 is a new procedural modeling application made in Rust, +using rend3, wgpu and egui. It follows the steps of applications like +Houdini, or Blender's geometry nodes project and provides a node-based +environment to compose procedural recipes to create 3d models. + +The project was recently announced, and an official open-source release is +planned during the following month. Here's a highlight of the upcoming features: + +- A node-based editor to compose operations like 3d math, vertex/edge/face + selections and mesh edit operations. +- Several polygon edit operations like bevel, chamfer and extrude. +- Viewport display with support for displaying primitive ids and triangle + half-edge winding. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/rufvlc/meet_blackjack), +[/r/rust](https://reddit.com/r/rust/comments/rug24x/media_meet_blackjack)_ + +[Blackjack]: https://github.com/setzer22/blackjack + +### [Graphite][graphite-repo] + +![Graphite](graphite_splash.png) + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter][graphite-twitter]) is an in-development vector and raster graphics +editor built on a non-destructive node-based workflow. + +The completion of [Sprint 10][graphite-sprint-10] wraps up a productive month +of features and stability improvements. Documents persist page reloads via +IndexedDB browser storage. The layer panel got some love. Vector anchor points +can be dragged (beginnings of the Path/Pen Tools). Per-tool footer bar hints +teach possible user input actions. And a big code cleanup/refactor took place +behind the scenes. + +Additional new features and QoL improvements: artboards, panel resizing, the +Navigate Tool, outline view mode, support for touch input and non-Latin +keyboards, an *About Graphite* dialog with version info, plus dozens of bugs +and crashes were resolved. + +[Try it right now in your browser.][graphite-live-demo] Graphite is making +steady progress towards becoming a non-destructive, procedural graphics editor +suitable for replacing traditional 2D DCC applications. [Join the +Discord][graphite-discord] and get involved! + +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.design +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-live-demo]: https://editor.graphite.design +[graphite-sprint-10]: https://github.com/GraphiteEditor/Graphite/milestone/10?closed=1 + +### [Fun Notation][notation-fun] + +![Demo that shows colored chords, notes, and tabs](fun-notation.gif) + +[Fun Notation][notation-fun] ([GitHub][notation-fun-github]) is [@yjpark]'s +experimentation on musical notations built on top of Bevy. +The idea is to help with music visualization, practicing, +and provide a nicer way to show scores or tabs. + +Some of current ideas tried in the app: + +- colors for notes (based on the relative notation), +- color and shapes for chords, +- guitar tabs to show both pitch and durations for notes. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/r9erd2/guitar_tab_viewer_bevy)_ + +[notation-fun]: https://notation.fun +[notation-fun-github]: https://github.com/notation-fun/notation +[@yjpark]: https://github.com/yjpark + +## Library Updates + +### [assets_manager] + +[assets_manager] provides a high-level API to load and cache external resources +with a focus on performance and hot-reloading. + +In addition to built-in support for new formats like WebP, glTF and fonts, +[version 0.7] brings a few quality of life improvements. Additionally, +hot-reloading is now supported for custom asset sources. + +These features led to a new crate: [ggez-assets_manager], whose goal is to ease +use of assets_manager with ggez engine! + +[assets_manager]: https://github.com/a1phyr/assets_manager/ +[version 0.7]: https://github.com/a1phyr/assets_manager/releases/tag/0.7.0 +[ggez-assets_manager]: https://github.com/a1phyr/ggez-assets_manager/ + +### [wgpu]-0.12 release + +{{ image_figure( + alt="albedo pathtracer" + src="https://github.com/wgpu-pathtracer.png" + caption="experimental pathtracer on wgpu from @llamajestic") }} + +The team concluded 2021 with the release of wgpu-0.12 and naga-0.8. +Details can be found on the [gfx-rs blog] and [wgpu reddit discussion]. +Lots of fixes are shipped alongside one much-awaited improvement: +the error messages from validating shaders were finally made readable: + +```rust + ┌─ interpolate.wgsl:21:25 + │ +21 │ out.linear_centroid = vec2(64.0, 125.0, 1.0); + │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ naga::Expression [16] + +Entry point vert_main at Vertex is invalid: + Expression [16] is invalid + Composing expects 2 components but 3 were given +``` + +[wgpu]: https://github.com/gfx-rs/wgpu +[gfx-rs blog]: https://gfx-rs.github.io/2021/12/25/this-year.html +[wgpu reddit discussion]: https://reddit.com/r/rust_gamedev/comments/rjci2n/wgpu012_is_released/ + +### [Pixels] 0.9.0 👾 + +[Pixels] is a tiny hardware-accelerated pixel frame buffer. It is popularly +used for emulators, software renderers, 2D pixel art games, and desktop +utilities. + +Version 0.9.0 brings a few breaking changes. Notably, wgpu was updated to +0.12 and it now requires Edition 2021. Full details are available in the +[release notes][pixels-changelog]. + +[pixels]: https://github.com/parasyte/pixels +[pixels-changelog]: https://github.com/parasyte/pixels/releases/tag/0.9.0 + +### [bevy_proto] + +![YAML configuration files for bevy_proto](bevy_proto.png) + +[bevy_proto] is a small plugin for the [Bevy] game engine, allowing entities to +be defined in their own config files (called "Prototypes"). These config files +are then read into a resource that you can use to spawn their pre-defined +entities from within any Bevy system. + +The recently released 0.2 version, adds a templating feature (as suggested +by [@chrisburnor](https://github.com/chrisburnor)). This new feature allows any +entity prototype to define one or more templates, from which it will inherit +additional component definitions (including those from a template's templates). + +This makes defining many entities with common functionality (such as enemy types +or weapons) much easier and reduces code duplication for an overall better +experience. + +For more info, check out +the [original PR](https://github.com/MrGVSV/bevy_proto/pull/2), or explore +the [assets](https://github.com/MrGVSV/bevy_proto/tree/main/assets) +and [examples](https://github.com/MrGVSV/bevy_proto/tree/main/examples) folders. + +[bevy_proto]: https://github.com/MrGVSV/bevy_proto +[Bevy]: https://github.com/bevyengine/bevy + +### [bevy-remote-devtools] + +![Demo of the Tauri based development app](bevy-remote-devtools.gif) + +[bevy-remote-devtools] is a plugin and UI application for the [Bevy] game +engine allowing to view entities and their components, asset resources +like meshes, events from the [tracing] crate and system timings using a +very basic profiler. It also supports all of that over network so +debugging can be done from any remote machine and vice versa. + +The first release of the 0.1 version comes with basic support for the +aforementioned features. It contains a plugin for [Bevy] that will extend +you application with a small REST HTTP API that can be consumed by the +included [Tauri] based UI application. + +[bevy-remote-devtools]: https://github.com/reneeichhorn/bevy-remote-devtools +[Bevy]: https://github.com/bevyengine/bevy +[tracing]: https://github.com/tokio-rs/tracing +[Tauri]: https://tauri.studio/en/ + +### [kajiya] + +![A rendering of a warmly-lit ruins environment](kajiya.jpg) + +[kajiya] ([Discord][kajiya_discord]) +by [@h3r2tic] is an experimental real-time global illumination +renderer made with Vulkan, and utilizing [rust-gpu][rust-gpu]. + +Last month the project was released into open source along with +a tiny sample: [Cornell McRay t'Racing][cornell-mcray]. + +The renderer is permissively licensed, and includes several cutting-edge +algorithms, including ray-traced effects. +It isn’t built to ship games (yet), but serves as a convenient +platform for learning and research. + +_Discussions: +[medium](https://medium.com/embarkstudios/homegrown-rendering-with-rust-1e39068e56a7), +[/r/rust](https://reddit.com/r/rust/comments/rkqmk3/homegrown_rendering_with_rust), +[twitter (kajiya)](https://twitter.com/h3r2tic/status/1472957370972127233), +[twitter (cornell-mcray)](https://twitter.com/h3r2tic/status/1473856011941425155)._ + +[kajiya_discord]: https://discord.gg/dAuKfZS +[cornell-mcray]: https://github.com/h3r2tic/cornell-mcray/ +[kajiya]: https://github.com/EmbarkStudios/kajiya/ +[rust-gpu]: https://github.com/EmbarkStudios/rust-gpu +[@h3r2tic]: https://github.com/h3r2tic + +### [Shard] + +[Shard] by @HindrikStegenga is an Archetype-based Entity Component System. + +Version 0.2 is a complete rewrite of the ECS, with the main new feature +that it supports no_std environments. + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/r6mn0g/shard_020)_ + +[Shard]: https://github.com/HindrikStegenga/Shard + +### [rapid-qoi] + +[rapid-qoi] by @zakarumych is an implementation of QOI format written in Rust. + +QOI format can fit nicely as a replacement for PNG +and other common loseless image formats +for game engines given its simplicity and blazing fast encoding and decoding. + +[rapid-qoi] has a simple API, zero unsafe, zero dependencies, +fast build times and high performance. +It is compatible with finalized QOI spec published in December. + +[rapid-qoi]: https://github.com/zakarumych/rapid-qoi + +### [ash] v0.34 + +[ash] is lightweight wrapper around Vulkan. + +This month [v0.34 was released][ash-0-3-4]. Highlights include: + +- Now ash defaults to linking Vulkan directly, which saves the libloading dep + and is more idiomatic for apps that don't have a fallback. +- Debug impls can be disabled for a faster build. +- More extensions and lots of miscellaneous API cleanup. + +[ash]: https://github.com/MaikKlein/ash +[ash-0-3-4]: https://github.com/MaikKlein/ash/releases/tag/0.34.0 + +## Other News + + + +- Other game updates: + - [BENDYWORM] now [runs on Linux natively]( + https://twitter.com/bauxitedev/status/1467817606111498240). + - [Rust Shooter progress report][rust-shooter]: + enemies are proper player entities with rudimentry AI now, + new indoor environment. + - [aous] is a Game Off'21 game about the survival of a mutating ant colony. + - [Embark's Arc Raiders game is using some Rust on the server side]( + https://twitter.com/repi/status/1469324284619337728). +- Other engine updates: + - [@DmitryNStepanov] did a few more [rg3d] live-coding streams, here're + the recordings: [second](https://youtube.com/watch?v=TQaCyC_tGko), + [third](https://youtube.com/watch?v=OsZCusri1Nw), + [fourth](https://youtube.com/watch?v=FGi8evJFdnw). + - [godot-rust was upgraded][godo-rust-dec] to support Godot 3.4 out of the box, + so the manual api.json is not needed. + - [Oxygengine] v0.26 brings: different image types (2D, 2D Array, 3D), + samplers instead of textures, render target fixes, + and also an [RPG template][oxygengine-rpg]. +- Other library updates: + - [bevy_midi] v0.2 is now using crossbeam-channels meaning + it is more responsive. + - [egui 0.16](https://reddit.com/r/rust/comments/rrantt/egui_016) brings: + context menus, rich text (colors, underline, etc) in all widgets, + bar charts and box plots. + +[bevy_midi]: https://github.com/BlackPhlox/bevy_midi +[godo-rust-dec]: https://twitter.com/GodotRust/status/1472269798641971200 +[Oxygengine]: https://github.com/PsichiX/Oxygengine +[oxygengine-rpg]: https://reddit.com/r/rust_gamedev/comments/r5xobe/oxygengine_rpg_game_template +[@DmitryNStepanov]: https://twitter.com/DmitryNStepanov +[rg3d]: https://github.com/mrDIMAS/rg3d +[BENDYWORM]: https://bauxite.itch.io/bendyworm +[rust-shooter]: https://reddit.com/r/rust_gamedev/comments/rj5lut/rust_shooter_another_update +[aous]: https://vleue.itch.io/aous + +## Discussions + + + +- [/r/rust_gamedev](https://reddit.com/r/rust_gamedev): + - ["Should I use a sync/await, threads, or both to make a game server?"]( + https://reddit.com/r/rust_gamedev/comments/r8jh5z/should_i_use_a_syncawait_threads_or_both_to_make_server) + - ["Rust server for Unreal Engine Client? Is this a bad idea for any reason?"]( + https://reddit.com/r/rust_gamedev/comments/rhd8ou/rust_server_for_unreal_engine_client) + +## Requests for Contribution + + + +- [Graphite is looking for contributors][graphite-contribute] to help reach + the 0.1 Alpha release. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[graphite-contribute]: https://github.com/GraphiteEditor/Graphite/issues/202 +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/s82gcd/this_month_in_rust_gamedev_29_december_2021), +[Twitter](https://twitter.com/rust_gamedev/status/1483927872532271107), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/029/kajiya.jpg b/content/news/029/kajiya.jpg new file mode 100644 index 000000000..0d3471fbe Binary files /dev/null and b/content/news/029/kajiya.jpg differ diff --git a/content/news/029/molecoole1.png b/content/news/029/molecoole1.png new file mode 100644 index 000000000..c54fccfd4 Binary files /dev/null and b/content/news/029/molecoole1.png differ diff --git a/content/news/029/pyxel.png b/content/news/029/pyxel.png new file mode 100644 index 000000000..8ae7d21d6 Binary files /dev/null and b/content/news/029/pyxel.png differ diff --git a/content/news/029/rust-city.jpg b/content/news/029/rust-city.jpg new file mode 100644 index 000000000..8e5731fb6 Binary files /dev/null and b/content/news/029/rust-city.jpg differ diff --git a/content/news/029/rusty_engine3.png b/content/news/029/rusty_engine3.png new file mode 100644 index 000000000..5d33cf3b3 Binary files /dev/null and b/content/news/029/rusty_engine3.png differ diff --git a/content/news/029/tet-rust-1-sm.gif b/content/news/029/tet-rust-1-sm.gif new file mode 100644 index 000000000..578b26d69 Binary files /dev/null and b/content/news/029/tet-rust-1-sm.gif differ diff --git a/content/news/029/vangers.jpeg b/content/news/029/vangers.jpeg new file mode 100644 index 000000000..3b64fd6a6 Binary files /dev/null and b/content/news/029/vangers.jpeg differ diff --git a/content/news/029/veloren.jpg b/content/news/029/veloren.jpg new file mode 100644 index 000000000..656dd8f84 Binary files /dev/null and b/content/news/029/veloren.jpg differ diff --git a/content/news/029/wgpu-pathtracer.png b/content/news/029/wgpu-pathtracer.png new file mode 100644 index 000000000..a5f0f7843 Binary files /dev/null and b/content/news/029/wgpu-pathtracer.png differ diff --git a/content/news/029/youtube-runity.jpg b/content/news/029/youtube-runity.jpg new file mode 100644 index 000000000..3e0b8e3b2 Binary files /dev/null and b/content/news/029/youtube-runity.jpg differ diff --git a/content/news/029/youtube-sfml-win.jpg b/content/news/029/youtube-sfml-win.jpg new file mode 100644 index 000000000..0b2653e7a Binary files /dev/null and b/content/news/029/youtube-sfml-win.jpg differ diff --git a/content/news/029/youtube-tetris.jpg b/content/news/029/youtube-tetris.jpg new file mode 100644 index 000000000..0a8b80af2 Binary files /dev/null and b/content/news/029/youtube-tetris.jpg differ diff --git a/content/news/030/ah-scanner.png b/content/news/030/ah-scanner.png new file mode 100644 index 000000000..fa9a66513 Binary files /dev/null and b/content/news/030/ah-scanner.png differ diff --git a/content/news/030/awn-header.jpg b/content/news/030/awn-header.jpg new file mode 100644 index 000000000..7b9cce236 Binary files /dev/null and b/content/news/030/awn-header.jpg differ diff --git a/content/news/030/bevy-smud.png b/content/news/030/bevy-smud.png new file mode 100644 index 000000000..d7082438e Binary files /dev/null and b/content/news/030/bevy-smud.png differ diff --git a/content/news/030/bevy_bistro_night.jpg b/content/news/030/bevy_bistro_night.jpg new file mode 100644 index 000000000..29d9e0a63 Binary files /dev/null and b/content/news/030/bevy_bistro_night.jpg differ diff --git a/content/news/030/centaur-screenshot.png b/content/news/030/centaur-screenshot.png new file mode 100644 index 000000000..beb64e761 Binary files /dev/null and b/content/news/030/centaur-screenshot.png differ diff --git a/content/news/030/country_slice_7_delete_brush.gif b/content/news/030/country_slice_7_delete_brush.gif new file mode 100644 index 000000000..777c8339d Binary files /dev/null and b/content/news/030/country_slice_7_delete_brush.gif differ diff --git a/content/news/030/erupt-bootstrap.svg b/content/news/030/erupt-bootstrap.svg new file mode 100644 index 000000000..6f5d59193 --- /dev/null +++ b/content/news/030/erupt-bootstrap.svg @@ -0,0 +1,335 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/news/030/extreme-bevy.png b/content/news/030/extreme-bevy.png new file mode 100644 index 000000000..ae0bd8302 Binary files /dev/null and b/content/news/030/extreme-bevy.png differ diff --git a/content/news/030/flesh.gif b/content/news/030/flesh.gif new file mode 100644 index 000000000..5744d081d Binary files /dev/null and b/content/news/030/flesh.gif differ diff --git a/content/news/030/flipflop.png b/content/news/030/flipflop.png new file mode 100644 index 000000000..7b414a529 Binary files /dev/null and b/content/news/030/flipflop.png differ diff --git a/content/news/030/gamedev-meetup.png b/content/news/030/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/030/gamedev-meetup.png differ diff --git a/content/news/030/godot-rust-games.jpg b/content/news/030/godot-rust-games.jpg new file mode 100644 index 000000000..f788736df Binary files /dev/null and b/content/news/030/godot-rust-games.jpg differ diff --git a/content/news/030/graphite_alpha.png b/content/news/030/graphite_alpha.png new file mode 100644 index 000000000..57aa93e18 Binary files /dev/null and b/content/news/030/graphite_alpha.png differ diff --git a/content/news/030/hgs6.jpg b/content/news/030/hgs6.jpg new file mode 100644 index 000000000..3330091e4 Binary files /dev/null and b/content/news/030/hgs6.jpg differ diff --git a/content/news/030/hho.jpg b/content/news/030/hho.jpg new file mode 100644 index 000000000..d0699d17d Binary files /dev/null and b/content/news/030/hho.jpg differ diff --git a/content/news/030/index.md b/content/news/030/index.md new file mode 100644 index 000000000..653eefaa5 --- /dev/null +++ b/content/news/030/index.md @@ -0,0 +1,961 @@ ++++ +title = "This Month in Rust GameDev #30 - January 2022" +transparent = true +date = 2022-02-10 ++++ + + + + + +Welcome to the 30th 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 + +- [Rust GameDev Meetup](#rust-gamedev-meetup) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The twelfth Rust Gamedev Meetup happened in January. You can watch the +recording of the meetup [here on Youtube][gamedev-meetup-video]. The meetups +take place on the second Saturday every month via the [Rust Gamedev Discord +server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://youtu.be/BIMsBFbPV-c +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[rust-meetup-feb-time]: https://everytimezone.com/s/48bc48be + +## Game Updates + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="https://github.com/flesh.gif" + caption="the second level's background + new enemy") }} + +[Flesh] by [@im_oab] is a 2D-horizontal shmup game with hand-drawn animation and +an organic/fleshy theme. It is implemented using [Tetra]. This month's updates +include: + +- The completed first level, with a mid-boss and main boss. +- The second level of the game with new enemies. + +[Flesh]: https://store.steampowered.com/app/1660850/Flesh/ +[@im_oab]: https://twitter.com/im_oab +[Tetra]: https://github.com/17cupsofcoffee/tetra + +### [Rusty Vangers] + +{{ image_figure( + alt="Rust engine powering original game" + src="https://github.com/vangers-integrated.jpg" + caption="Rusty Vangers engine in action within the original game") }} + +[Rusty Vangers] by [@kvark] is a modern re-implementation of the original +[Vangers] game from the last century. +It's in Rust, and uses GPU and multiple threads heavily. + +Something incredible has been brewing within the small but dedicated community +of the original game. They prototyped a pluggable rendering interface in order +to support rendering the game via [Rusty Vangers] instead of the default +CPU-based rasterizer. The plugin is made as a static library sub-crate with a +bunch of C-exported functions. +The approach worked for the terrain, so the mini working group transitioned +to moving more visual features off the old path and into the Rust-based plugin. + +At the same time, [Rusty Vangers] engine got a number of important +fixes and additions: + +- water is rendered fair as transparent surfaces +- lighting evaluation on the second layer is fixed +- dynamic terrain and palette modification is supported +- custom viewport support +- can render menu screens, not just the game levels + +[Rusty Vangers]: https://vange.rs +[Vangers]: https://www.gog.com/en/game/vangers +[@kvark]: https://github.com/kvark/ + +### [Way of Rhea][wor] + +![way of rhea capsule image](wor-capsule.jpg) + +[Way of Rhea][wor] is a puzzle adventure with hard puzzles and forgiving +mechanics being produced by [@masonremaley][wor-mason-remaley] in a custom Rust +engine. It has a demo available [on Steam][wor]. + +Latest developments: + +- [Making Your Game Go Fast by Asking Windows Nicely][wor-fast] was published, + discussing Windows-specific performance tweaks in Way of Rhea's engine +- Work started on the Snowcrab + Teleporter puzzles, completing nearly all the + puzzles in the main game +- Work began on art for The Professor (pictured left), Shrew, and Hermes +- Work began on artwork for the Mushroom Biome, and continued on the Hub World +- The narrative was reworked, and the dialogue system was improved +- The main menu, pause menu, and option screen UIs were replaced + +You can stay up to date with the latest Way of Rhea developments by +[following it on Steam][wor], signing up for [their mailing list][wor-newsletter], +or joining [their Discord][wor-discord]. + +[wor]: https://store.steampowered.com/app/1110620/Way_of_Rhea/?utm_campaign=tmirgd&utm_source=n30 +[wor-mason-remaley]: https://twitter.com/masonremaley +[wor-newsletter]: https://www.anthropicstudios.com/newsletter/signup +[wor-fast]: https://www.anthropicstudios.com/2022/01/13/asking-windows-nicely/ +[wor-discord]: https://discord.gg/JGeVt5XwPP + +### [Garden of the Centaur][centaur-github] + +{{ image_figure( + alt="Garden of the Centaur screenshot" + src="https://github.com/centaur-screenshot.png" + caption="Screenshot of Garden of the Centaur") }} + +Garden of the Centaur ([GitHub][centaur-github]) by +[@Syn-Nine][synnine-twitter] is an action-puzzle mini game where you navigate a +garden maze and steal the Centaur's gems. Getting caught spells certain doom. + +The game was created using Syn9's [Rust Mini Game Framework][mgfw] and is +part of an open source [repository][s9-minigame-repo] of several mini-games +that use this framework. + +[centaur-github]: https://github.com/Syn-Nine/rust-mini-games/tree/main/2d-games/centaur +[synnine-twitter]: https://twitter.com/Syn9Dev +[mgfw]: https://github.com/Syn-Nine/mgfw +[s9-minigame-repo]: https://github.com/Syn-Nine/rust-mini-games/ + +### [Kataster] + +![Kataster screenshot](kataster.jpg) + +[Kataster] by [@Bobox214] is a single-screen space shooter mini-game, +using [bevy] and [heron] (powered by [rapier]). + +Its goal is to be a simple demonstration game for [bevy], and provide newcomers +another example to look into when they begin their journey with the engine. + +The latest version includes: + +- Support for [bevy] 0.6 +- A new shader background to showcase integration with the new renderer. + +[Kataster]: https://github.com/Bobox214/Kataster +[bevy]: https://bevyengine.org/ +[rapier]: https://rapier.rs +[heron]: https://github.com/jcornaz/heron +[@Bobox214]: https://github.com/Bobox214 + +### [Veloren][veloren] + +{{ image_figure( + alt="Bright lantern" + src="https://github.com/veloren.jpg" + caption="A light to keep the night away") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In January, another [Veloren Reading Club was +recorded][veloren-reading-club-4]! The `entity_sync` system was refactored to +be parallel. This was the largest bottleneck during the last release party, and +this fix will allow us to more easily surpass the 200 player mark on the server. +Work has been done to improve dagger animations. Sounds for flowing rivers are +now more bubbly sounding. Work is happening to get the OpenGL renderer to work +with WGPU for Veloren, as the project transitioned to Vulkan, but wants to keep +backward compatibility for older GPUs. + +Skiing and ice skating have gotten to a playable state. The mounts system was +overhauled to make it more ergonomic to work with, you can [watch a video of +that here][veloren-mounts]. Several experimental shaders have been +added, along with a "point glow" which help lanterns look better. With these new +shaders, swimming underwater is a whole new experience! A tracking issue was +created for worldgen issues that will help coordinate direction for some large +systems in the future. + +January's full weekly devlogs: "This Week In Veloren...": +[#152][veloren-152], +[#153][veloren-153], +[#154][veloren-154], +[#155][veloren-155], +[#156][veloren-156]. + +[veloren]: https://veloren.net +[veloren-mounts]: https://www.youtube.com/watch?v=fJpeOJT78TI +[veloren-reading-club-4]: https://www.youtube.com/watch?v=nR2WDBMjkh8 + +[veloren-152]: https://veloren.net/devblog-152 +[veloren-153]: https://veloren.net/devblog-153 +[veloren-154]: https://veloren.net/devblog-154 +[veloren-155]: https://veloren.net/devblog-155 +[veloren-156]: https://veloren.net/devblog-156 + +### [Not Snake][notsnake] + +![Editor for Not Snake](notsnake.gif) + +Not Snake ([GitHub][notsnakegit], [Itch][notsnake]) by [Michael Ramirez] is a +3D snake game where you don't play as the snake. + +Not Snake is being developed using the [Bevy game engine][notsnakebevy]. The +first version can be played [here][notsnake]. An updated version +is now being worked on since the 0.6 release of [Bevy][notsnakebevy]. + +The bulk of the work this month was spent on creating a level editor +using the [egui][notsnakeegui] and [bevy_mod_picking][notsnakepick] crates to +make it easier to add new features/modes to the game. + +Current features include: + +- Able to create, customize, and delete game entities +- Multi-select entities for bulk changes +- Can play-test levels in the editor +- Camera controls +- Save/Load levels + +More details on the initial editor work and a retrospective of the first +version of the game can be read [here][notsnakepost] and a video of +the save/load feature can be seen [here][notsnakeyt]. + +[notsnake]: https://ramirezmike2.itch.io/not-snake +[notsnakepost]: https://ramirezmike2.itch.io/not-snake/devlog/333283/retrospective-working-on-new-features +[Michael Ramirez]: https://github.com/ramirezmike +[notsnakebevy]: https://bevyengine.org +[notsnakegit]: https://github.com/ramirezmike/not_snake_game +[notsnakeyt]: https://www.youtube.com/watch?v=cwI00pXDc6Q +[notsnakepick]: https://github.com/aevyrie/bevy_mod_picking +[notsnakeegui]: https://github.com/emilk/egui + +### [Harvest Hero Origins] is now available + +![harvest_hero](hho.jpg) + +[Harvest Hero Origins] is an Arcade Wave Defense game that has been +in development by [Gemdrop Games] for the past 10 months. + +It is the studio's first commercial release, developed in +the [Emerald] game engine. + +The game is available now on Windows and Linux for $2.99 with +a launch discount of 10%! + +The studio plans to provide free updates for a period of time, +before moving on to focusing 100% of their efforts on the sequel, +Harvest Hero. + +Features + +- Story Mode +- Survival Mode + - Competitive Leaderboards + - Infinitely Replayable + - 3 unique heroes + - 3 skins per hero + - Local co-op (online through steam remote play) + +[Harvest Hero Origins]: https://store.steampowered.com/app/1651500/Harvest_Hero_Origins/ +[Emerald]: https://github.com/Bombfuse/emerald +[Gemdrop Games]: https://twitter.com/gemdropgames + +### [Hydrofoil Generation] + +![hgs_screen](hgs6.jpg) + +[Hydrofoil Generation] +([Steam][hgs_steam], [Facebook][hgs_facebook], [Discord][hgs_discord]) +is a realistic sailing/foiling inshore simulator in development for PC/Steam +that will put you in the driving seat of modern competitive sailing. + +The last couple of months saw great disappointment for the failed port to WGPU +due to unexpected performance losses compared to the old renderer. The game is +now back to its original DirectX 11 renderer. + +February will see the beginning of the private alpha testing program, an +exciting opportunity to gather the first feedback about boat handling and +controls before diving into one of the most challenging tasks of the game: +sailing rules implementation. + +Content-wise, Hong Kong will soon join Den Haag as a race location while the +racecourse is becoming more and more alive with the addition of spectators +boats. The playable foiling catamaran Jx50 is also constantly getting graphical +updates and physics tweaks. + +Hydrofoil Generation is scheduled to release on Steam Early Access in Summer +2022. + +[Hydrofoil Generation]: https://hydrofoil-generation.com/ +[hgs_facebook]: https://www.facebook.com/HydrofoilGenerationSailing/ +[hgs_discord]: https://discord.gg/DtKgt2duAy/ +[hgs_steam]: https://store.steampowered.com/app/1448820/Hydrofoil_Generation/ +[hgs_trailer]: https://youtu.be/CfmCLr19Hbs + +### Country Slice + +![country_slice](country_slice_7_delete_brush.gif) + +[Country Slice][country-slice-github] is +[@anastasiaopara][country-slice-twitter]'s hobby project, where users can draw a +small procedurally assembled scene. + +The newest addition is an erase brush and an ability to continue existing walls. + +[@anastasiaopara][country-slice-twitter] also shared [a Twitter thread][country-slice-discussion] +about doing procedural generation in Houdini vs Rust & OpenGL. + +[country-slice-github]: https://github.com/anopara/country-slice +[country-slice-twitter]: https://twitter.com/anastasiaopara/ +[country-slice-discussion]: https://twitter.com/anastasiaopara/status/1477570256180817924 + +## Engine Updates + +### [godot-rust][gd-github] + +godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter]) +is a Rust library that provides bindings for the Godot game engine. + +The start of 2022 is a good opportunity to showcase a few godot-rust games in +development. More info is available in [the book][gd-book-games]. + +![godot-rust example games](godot-rust-games.jpg) + +Using custom builds of the Godot engine involved quite a bit of ceremony in the +past: manual CLI invocations, code replacement, and re-wiring of the +`gdnative-bindings` subcrate. The approach has been fundamentally overhauled, +and is now as simple as specifying the crate feature `custom-godot` +([#833][gd-833]). The library will automatically look for a `godot` executable +in the system path (or a `GODOT_BIN` environment variable), and regenerate +`api.json`. This makes using older or module-extended Godot versions a breeze. + +The latest `master` branch has now been updated to support Godot 3.4 out of the +box ([#829][gd-829]). + +Upcoming godot-rust version 0.10 seems to be finally on the horizon, with only a +handful of tasks left ([#842][gd-842]). A changelog since v0.9.3 is now +available. The continuous stream of small improvements here and there has led to +a sizable list! ([#845][gd-845]) + +[gd-833]: https://github.com/godot-rust/godot-rust/pull/833 +[gd-829]: https://github.com/godot-rust/godot-rust/pull/829 +[gd-842]: https://github.com/godot-rust/godot-rust/issues/842 +[gd-845]: https://github.com/godot-rust/godot-rust/pull/845 +[gd-github]: https://github.com/godot-rust/godot-rust +[gd-discord]: https://discord.com/invite/FNudpBD +[gd-twitter]: https://twitter.com/GodotRust +[gd-book-games]: https://godot-rust.github.io/book/projects/games.html + +### [Rusty Engine 4.0] + +{{ image_figure( + alt="An example Rusty Engine game" + src="https://github.com/rusty_engine4.png" + caption="The updated collider visualization (white outlines) in Rusty Engine 4.0") }} + +[Rusty Engine] by [Nathan Stocks] is a game engine built on top of Bevy +for people who are learning Rust. + +Notable new features in Version 4.0 include: no need for an `init!` macro, new +collider visualization, text can now be rotated and scaled, and an updated +[online tutorial]. See [the changelog for 4.0] for the full details. On the +back end Bevy has been updated to 0.6 and `bevy_prototype_debug_lines` was +replaced with `bevy_prototype_lyon`. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust_gamedev/comments/sg2cdg/rusty_engine_40/), +[twitter](https://twitter.com/nathanstocks/status/1487667704118988803)_ + +[Rusty Engine 4.0]: https://github.com/CleanCut/rusty_engine/blob/main/CHANGELOG.md#400---2022-01-29 +[Rusty Engine]: https://github.com/CleanCut/rusty_engine +[online tutorial]: https://cleancut.github.io/rusty_engine/ +[the changelog for 4.0]: https://github.com/CleanCut/rusty_engine/blob/main/CHANGELOG.md#400---2022-01-29 +[Nathan Stocks]: https://github.com/CleanCut + +### [Bevy v0.6][bevy-blog] + +{{ image_figure( + alt="bevy bistro night" + src="https://github.com/bevy_bistro_night.jpg" + caption="The Lumberyard Bistro scene rendered in the new Bevy Renderer.") }} + +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. It is +[free and open source][bevy-git] forever! + +Bevy 0.6 was a massive community effort. You can check out the +[full release blog post here][bevy-blog], but here are some highlights: + +- [A brand new modern renderer that is prettier, faster, and simpler to extend][bevy-renderer] +- [Directional and point light shadows][bevy-shadows] +- [Clustered forward rendering][bevy-clustered] +- [Frustum culling][bevy-frustum-culling] +- [Significantly faster sprite rendering with less boilerplate][bevy-sprites] +- [Native WebGL2 support][bevy-webgl2]. You can test this out by running the + [Bevy Examples in your browser][bevy-web-examples]! +- [High level custom Materials][bevy-materials] +- [More powerful shaders: preprocessors, imports, WGSL support][bevy-shaders] +- [Bevy ECS ergonomics and performance improvements. No more .system()!][bevy-ecs] + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/rz612l/bevy_06/), +[Hacker News](https://news.ycombinator.com/item?id=29854416), +[Twitter](https://twitter.com/cart_cart/status/1479879242347270145)_ + +[bevy]: https://bevyengine.org +[bevy-git]: https://github.com/bevyengine/bevy +[bevy-blog]: https://bevyengine.org/news/bevy-0-6 +[bevy-renderer]: https://bevyengine.org/news/bevy-0-6/#the-new-bevy-renderer +[bevy-shadows]: https://bevyengine.org/news/bevy-0-6/#directional-shadows +[bevy-clustered]: https://bevyengine.org/news/bevy-0-6/#clustered-forward-rendering +[bevy-sprites]: https://bevyengine.org/news/bevy-0-6/#sprite-batching +[bevy-webgl2]: https://bevyengine.org/news/bevy-0-6/#webgl2-support +[bevy-web-examples]: https://bevyengine.org/examples +[bevy-ecs]: https://bevyengine.org/news/bevy-0-6/#bevy-ecs +[bevy-materials]: https://bevyengine.org/news/bevy-0-6/#materials +[bevy-frustum-culling]: https://bevyengine.org/news/bevy-0-6/#visibility-and-frustum-culling +[bevy-shaders]: https://bevyengine.org/news/bevy-0-6/#wgsl-shaders + +### [`three-d` 0.10][three-d] + +{{ image_figure( + alt="three-d example of environment lighting" + src="https://github.com/three-d.jpg" + caption="Environment lighting example") }} + +[`three-d`][three-d] +is a 2D/3D renderer targeting both desktop and web +that aims to make rendering simple and give the user full control. + +`three-d` 0.10 has been released featuring: + +- Environment lighting (image-based lighting) +- HDR environment map +- Headless graphics context +- Tangent vertex attributes +- Texture transform +- Cube map render targets +- f16 and u16 texture data types +- and more... + +See [this Twitter thread][three-d-twitter] for videos. + +[three-d]: https://github.com/asny/three-d +[three-d-twitter]: https://twitter.com/AsgerNyman/status/1482711259673944067 + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, an alpha version of Tetra 0.7 was released, featuring: + +- Support for a wider variety of texture formats +- A more powerful API for blending +- Lots of bug fixes, cleanups, and improvements + +For more details, see the [changelog][tetra-changelog]. + +Alongside the release of this version, it was also [announced][tetra-twitter] +that Tetra is no longer under active development. The developer +has written a [retrospective blog post][tetra-retro], explaining what went well +and what didn't go so well with the engine's development, and giving some +rationale for why they decided to move on from the project. + +[Tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-twitter]: https://twitter.com/17cupsofcoffee/status/1479601522661109764 +[tetra-retro]: https://www.seventeencups.net/posts/three-years-of-tetra/ + +## Learning Material Updates + +### [Making Your Game Go Fast by Asking Windows Nicely][awn-post] + +[![A speed limit sign labeled 45 FPS](awn-header.jpg)][awn-post] + +[Mason Remaley][awn-mason-remaley] published [a blog post][awn-post] covering +Windows-specific performance tweaks employed in his Rust game engine: + +> Normally, to make your software go faster, it has to do less work. This +> usually involves improving your algorithms, skipping work the user won't see, +> factoring your target hardware into the design process, or modifying your +> game's content. +> +> We're not talking about any of that today. This post is a list of ways to make +> your game run faster on Windows–without making any major changes to your +> game's content, code, or algorithms. + +You can read more [here][awn-post]. + +_Discussions: +[/r/rust_gamedev][awn-rust-gamedev]_ + +[awn-mason-remaley]: https://twitter.com/masonremaley +[awn-post]: https://www.anthropicstudios.com/2022/01/13/asking-windows-nicely/ +[awn-rust-gamedev]: https://www.reddit.com/r/rust_gamedev/comments/s393sx/making_your_game_go_fast_by_asking_windows_nicely/ + +### [Refactoring from Legion to Bevy][rflb-post] + +[Justin Hurstwright][justin_rhw] published a [blog post][rflb-post] describing +how to migrate from Legion ECS into Bevy ECS without giving up on +the other frameworks one might rely on. + +You can read it [here][rflb-post]. + +[justin_rhw]: https://twitter.com/justin_rhw +[rflb-post]: https://justinryanh.github.io/post/refactoring_from_legion_to_bevy/ + +### [Writing an AH Scanner in Rust][trimoq-post] + +[![AH scanner workflow](ah-scanner.png)][trimoq-post] + +Trimoq ([GitHub][trimoq-github], [Twitter][trimoq-twitter]) wrote [a blog +post][trimoq-post] about writing a game client for a popular MMORPG. It +focuses on some negative parts of Rust and its ecosystem. There are three key +takeaways from this post: + +- Stay away from low-level libraries if you are not aware of how deep the rabbit + hole goes. +- Evaluate the library ecosystem of Rust thoroughly before using it for a + project that requires somewhat exotic functionality. +- Rust forces you to care about the details, regardless of whether you want to. + +The remainder of the article goes into depth on these three points. + +[trimoq-github]: https://github.com/trimoq +[trimoq-twitter]: https://twitter.com/amann_dev +[trimoq-post]: https://medium.com/digitalfrontiers/taking-rust-for-a-ride-to-azeroth-what-writing-an-ah-scanner-in-rust-taught-me-58edc936cbb + +### [Bevy Cheatbook] + +This month, [Bevy Cheatbook] focused on refactors to improve navigation, +usefulness, and make maintenance easier going forward. + +- Updated for Bevy 0.6 +- Chapters reorganized to present content better and make things easy to find +- [New page summarizing all the useful built-in types in Bevy][bevy-cb-builtins] +- Better info about [working with WASM][bevy-cb-wasm] +- Info about [cross-compiling for Windows from Linux][bevy-cb-cross] +- Internal refactor for easy management of links, easier to avoid old/stale links +- Can link everything from everywhere! All pages are now full of links! +- All mentions of Bevy APIs now link to [docs.rs][docsrs-bevy] + +The next priority for the project is to provide at least some coverage of +the areas of Bevy still not in the book: 2D, 3D, UI, scenes, rendering... + +If you'd like to support the project, donate to the author via +[GitHub Sponsors][ghsponsors-inodentry]. Follow [@IyesGames on +Twitter][twitter-iyesgames] for updates. + +[Bevy Cheatbook]: https://bevy-cheatbook.github.io +[docsrs-bevy]: https://docs.rs/bevy +[bevy-cb-builtins]: https://bevy-cheatbook.github.io/builtins.html +[bevy-cb-wasm]: https://bevy-cheatbook.github.io/platforms/wasm.html +[bevy-cb-cross]: https://bevy-cheatbook.github.io/setup/cross/linux-windows.html +[ghsponsors-inodentry]: https://github.com/sponsors/inodentry +[twitter-iyesgames]: https://twitter.com/IyesGames + +### [Extreme Bevy][extreme-bevy] + +![Screenshot of Extreme Bevy](extreme-bevy.png) + +Extreme Bevy is a [tutorial series][extreme-bevy] on how to create a low-latency +P2P web game. + +It covers how to: + +- Use [Matchbox][matchbox] for setting up P2P connections using WebRTC data + channels. +- Implement rollback using [GGRS][ggrs] +- And using [Bevy][extreme-bevy-bevy] with the above + +The game itself is also live [here][extreme-bevy-game], and [its source is on +GitHub][extreme-bevy-source] + +[ggrs]: https://github.com/gschup/ggrs +[matchbox]: https://helsing.studio/posts/introducing-matchbox +[extreme-bevy]: https://helsing.studio/posts/extreme-bevy +[extreme-bevy-source]: https://github.com/johanhelsing/extreme_bevy +[extreme-bevy-game]: https://helsing.studio/extreme +[extreme-bevy-bevy]: https://bevyengine.org + +## Tooling Updates + +### [Nodus][nodus-github] + +![Demo that shows a simple circuit](flipflop.png) + +Nodus ([GitHub][nodus-github]) by [@r4gus] is a digital circuit simulator +built with the Bevy game engine. The project is in an early stage of +development but, most of the basic features are implemented. That includes: + +- Insert components like gates, switches, clocks, or light bulbs into + the world using a radial context menu. +- Build digital circuits by connecting inputs and outputs of components + with each other. +- Save projects to a .ron file and reload them later. + +[nodus-github]: https://github.com/r4gus/nodus +[@r4gus]: https://github.com/r4gus + +### [Graphite][graphite-website] + +![Graphite](graphite_alpha.png) + +[Graphite][graphite-website] ([GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is an in-development +raster and vector 2D graphics editor that is free and open source. It is +powered by a node graph compositing engine that supercharges your layer stack, +providing a completely non-destructive editing experience. + +The team is proud and excited to announce Graphite alpha, the minimum viable +product release for a web-based vector graphics editor. After one year in +pre-alpha development by Rust Gamedev community members, this first milestone +of alpha is here. + +Graphite alpha launches **Saturday, February 12** together with a new +[project website][graphite-website]. + +Work now commences on the second alpha milestone, focused on building the node +graph system and vector render engine. You are invited to join the team and +help make this exciting endeavor possible. [Join the Discord][graphite-discord] +and get involved! + +[Try Graphite right now in your browser][graphite-live-demo] and please +[star the GitHub repo](graphite-repo) to build momentum. Thank you for helping +reach 1000⭐! + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-live-demo]: https://editor.graphite.rs + +## Library Updates + +### leafwing-input-manager + +`leafwing-input-manager` ([GitHub](https://github.com/Leafwing-Studios/leafwing-input-manager), +[crates.io](https://crates.io/crates/leafwing-input-manager)) by [@alice-i-cecile](https://twitter.com/AliceICecile) +is an ergonomic, featureful and fully documented Bevy library +for expressively abstracting over user input. + +Supports local multiplayer, enables input rebinding, integrates with `bevy_ui`, +and handles chords! + +### [rafx] + +{{ image_figure( + alt="Rafx Screenshot" + src="https://github.com/rafx-screenshot.jpg" + caption="Sci-fi base demo scene, [watch TAA demo on youtube](https://www.youtube.com/watch?v=iWYpX7RGUSA)!", + link="https://www.youtube.com/watch?v=iWYpX7RGUSA") }} + +[Rafx][rafx] is a multi-backend renderer that optionally integrates with the +[distill][rafx-distill] asset pipeline. + +Since the previous rafx update in this newsletter (6 months ago!), many new +features have been introduced to improve performance and image quality. The +main rendering pipeline has also been split into "modern" and "basic" +pipelines. Unlike the basic pipeline which focuses on wide compatibility, +the modern pipeline uses forward-clustered lighting and handles hundreds +of shadow-casting lights. It is targeting compute shaders and will be adding +bindless and GPU-driven rendering soon. + +Since the last update, the modern pipeline adds GPU-accelerated light binning, +SSAO, shadow map atlasing/caching, TAA with sharpening, and auto-exposure/HDR. +In addition, both modern and basic pipelines now support transparency. A +[video demonstrating TAA][rafx-youtube-video] (temporal anti-aliasing) is +available on youtube. + +With these performance improvements, `rafx` is now able to render challenging +scenes with photorealistic style at 60FPS/1440p on modern, mid-range GPUs. + +[rafx]: https://github.com/aclysma/rafx +[rafx-youtube-video]: https://www.youtube.com/watch?v=iWYpX7RGUSA +[rafx-distill]: https://github.com/amethyst/distill + +### [erupt-bootstrap] + +![erupt-bootstrap logo](erupt-bootstrap.svg) + +[erupt-bootstrap] by [@Friz64] is a Vulkan Bootstrapping library for Rust. + +When starting a new Vulkan project, there's always the struggle of writing a +whole bunch of boilerplate code in order to, e.g., get your first triangle on +the screen. You have to create a `VkInstance`, with the validation layers +set up and working for development. Then select the best suited +`VkPhysicalDevice` for your app's requirements. Use that to create a `VkDevice` +with the appropriate queue families chosen. Oh, and after that, you need +to struggle with managing and resizing a Vulkan swapchain. + +That's no fun — and this is where [erupt-bootstrap] comes in. It aims to +abstract over all of this to get you up and running in no time. It's inspired by +the excellent [vk-bootstrap] library for C++. + +[vk-bootstrap]: https://github.com/charles-lunarg/vk-bootstrap +[erupt-bootstrap]: https://gitlab.com/Friz64/erupt-bootstrap +[@Friz64]: https://blog.friz64.de/about + +### [Edict] + +[Edict] is a new archetype-based ECS implementation by [@zakarumych]. + +The novel feature of [Edict] is entity ownership implemented via reference counting. +This optional feature allows creating owned kind of `Entity` "reference", +that ensures the entity is alive and despawns it on drop. +Storing owning `Entity` in the component of another entity +creates ownership relation between those entities. +Even though `Entity` is an owning reference, +components of the entity are can be queried from `World` as usual. +Shared ownership is also available. + +Optimized for both high density `World`s with thousands of entities +and also for `World`s with a lower number of entities spread among many archetypes. +[Edict] is aimed at a wide range of game genres and use cases outside of games. + +Built-in change detection with epochs allows systems to query for components +that were updated since the last run of that query, +or since any other epoch as defined by `Tracks` argument. +This opens the possibility to have multiple POV on changes even in a single system. +For example, server-side netcode can track changes individually +for each client and query for changes since the last ACK. +[Edict] optimizes iteration significantly when entities +with modified components are queried. + +Although ECS abbreviation implies, [Edict] does not come +with predefined `System` trait and systems scheduler. +We can call it ECQ (Entity-Component-Query) as an alternative to ECS. + +[Edict] is added to [ecs_bench_suite] +so anyone can compare performance in some trivial examples with other ECS. + +Development focus for February is making more public API, including unsafe parts, +to allow writing custom queries, implement schedulers with parallel execution, etc. + +[@zakarumych]: https://github.com/zakarumych +[Edict]: https://github.com/zakarumych/edict +[ecs_bench_suite]: https://github.com/rust-gamedev/ecs_bench_suite + +### [bevy_backroll v0.3][backroll-github] + +[Backroll][backroll-github] is a 100% type-safe native Rust implementation of the +[GGPO][ggpo] rollback netcode library. The core library has gone through +superficial updates, but the [Bevy plugin][bevy-backroll-crates-io] has been +massively overhauled. This update significantly improves the ergonomics of setting +up rollback netcode for your game (no more ugly turbofishes! No more generic type +parameter config type!), provides an automatic way of saving and loading Bevy +components and resources, and fully parallelizes the saving and loading of game +state when a rollback occurs. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/s6uch9/bevy_backroll_v030_is_now_available/), +[Twitter](https://twitter.com/james7132/status/1483373600115621889)_ + +[backroll-github]: https://github.com/HouraiTeahouse/backroll-rs +[bevy-backroll-crates-io]: https://crates.io/bevy-backroll +[ggpo]: https://www.ggpo.net/ + +### [Bevy Smud][bevy-smud] + +{{ image_figure( + alt="Bevy Smud screenshot" + src="https://github.com/bevy-smud.png" + caption="A bevy drawn with Bevy Smud") }} + +[Bevy Smud][bevy-smud] is a new [Bevy][bevy-smud-bevy] plugin for drawing 2D +shapes using signed distance fields. + +It contains ports of all of [Inigo Quilez' 2D SDF +primitives](https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm), +and allows easily composing said primitives together. + +Shapes that share the same SDF and fill are automatically instanced, as shown in +the [demo video of 100k birds][bevy-smud-birds] + +[bevy-smud]: https://github.com/johanhelsing/bevy_smud +[bevy-smud-bevy]: https://bevyengine.org +[bevy-smud-birds]: https://twitter.com/jkhelsing/status/1486794339682508809 + +## Other News + + + +- Other game updates: + - [Molecoole] has some new gameplay footage from #screenshotsaturday. + - [Wordlet] is a command-line clone of Wordle, written in Rust. + - [BITGUN] is looking for beta testers. + - [System Fault] is now in early access. + - [Lantern] is a cute adventure game about a cat taking a nap. + - [Fish Fight] has a new devlog about their past, present and future. + - [Starframe] has a new devlog about rope physics. + - [Cake Thieves] is a strategy game about protecting cake from ants... + with cannons! + - [Idu] has released a new demo. + - [Sugarcane] is a minigame-focused Minecraft server written in Rust. +- Other learning material updates: + - '[How Bevy Uses Traits For Labelling]' explains a cool usage of traits + in the Bevy game engine. + - '[Writing a Tiny Rust Game Engine For Web]' shows how to write a game + engine with zero Rust dependencies. + - '[Extending States in Bevy]' shows how to make Bevy's `State` system more powerful. + - 'Mastering Plugin Loadings in Bevy' ([part 1][bevyplugin1] and + [part 2][bevyplugin2]) is an overview of how Bevy plugins work, and how + to write your own. + - '[Bevy Stages or The Frames Lifecycle]' is an overview of the Bevy + engine's game loop lifecycle. +- Other engine updates: + - [Fyrox 0.24] (formerly known as rg3d) has been released. +- Other tooling updates: + - [Fun Notation] is a Bevy-based guitar tab viewer. + - [gbrs] is a Rust Game Boy emulator. +- Other library updates: + - [Dimforge] posted a retrospective on their 2021, and goals for 2022. + - [poll-promise] is a crate for polling asynchronous operations. + - [ezinput 0.2] was released, providing easier input handling for Bevy. + - [bevy_asset_loader] had several new releases. + - [bevy_game_template] was published. + - [big-brain 0.10] (a library for Utility AI in Bevy) was released. + +[Molecoole]: https://twitter.com/kiss_mrton/status/1477330931199496201 +[Wordlet]: https://www.reddit.com/r/rust/comments/s9kjoh/wordlet_a_commandline_clone_of_wordle_written_in/ +[BITGUN]: https://twitter.com/LogLogGames/status/1481358714170970115 +[System Fault]: https://www.lightsout.games/news/system-fault-early-access +[Lantern]: https://qatoqat.itch.io/lantern +[Fish Fight]: https://spicylobster.itch.io/fishfight/devlog/332434/fish-fights-past-present-and-future +[Starframe]: https://molentum.me/blog/starframe-ropes/ +[Cake Thieves]: https://play.google.com/store/apps/details?id=com.GeTech.CakeThieves +[Idu]: https://twitter.com/logicsoup/status/1487924659693703169 +[Sugarcane]: https://gitlab.com/macmv/sugarcane +[How Bevy Uses Traits For Labelling]: https://deterministic.space/bevy-labels.html +[Writing a Tiny Rust Game Engine For Web]: https://ianjk.com/game-engine-in-rust/ +[Extending States in Bevy]: https://vaporsoft.net/extending-states-in-bevy/ +[bevyplugin1]: https://maz.digital/mastering-plugin-loadings-bevy-part-12 +[bevyplugin2]: https://maz.digital/mastering-plugin-loadings-bevy-part-22 +[Bevy Stages or The Frames Lifecycle]: https://maz.digital/bevy-stages-or-the-frames-lifecycle +[Fyrox 0.24]: https://rg3d.rs/general/2022/01/07/0.24-feature-highlights.html +[Fun Notation]: https://www.reddit.com/r/rust_gamedev/comments/sfdl5s/fun_notation_guitar_tab_viewer +[gbrs]: https://github.com/adamsoutar/gbrs +[Dimforge]: https://dimforge.com/blog/2022/01/02/the-year-2021-in-dimforge/ +[poll-promise]: https://github.com/EmbarkStudios/poll-promise +[ezinput 0.2]: https://twitter.com/eexsty/status/1485942270981464065 +[bevy_asset_loader]: https://crates.io/crates/bevy_asset_loader +[bevy_game_template]: https://github.com/NiklasEi/bevy_game_template +[big-brain 0.10]: https://github.com/zkat/big-brain/releases/tag/v0.10.0 + +## Discussions + + + +- [/r/rust](https://www.reddit.com/r/rust/): + - ["Rust alternative for PyGame?"](https://reddit.com/r/rust/comments/ru86vu/rust_alternative_for_pygame) + +## Requests for Contribution + + + +- [Graphite is looking for contributors][graphite-contribute] to help build the +new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[graphite-contribute]: https://github.com/GraphiteEditor/Graphite/issues/202 +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Jobs + + + +- [Embark Studios](https://careers.embark-studios.com/jobs) + (Stockholm/Hybrid Remote) - Various roles + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/spg3l1/this_month_in_rust_gamedev_30_january_2022/), +[Twitter](https://twitter.com/rust_gamedev/status/1491871330198818821), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/030/kataster.jpg b/content/news/030/kataster.jpg new file mode 100644 index 000000000..235fc5a9e Binary files /dev/null and b/content/news/030/kataster.jpg differ diff --git a/content/news/030/notsnake.gif b/content/news/030/notsnake.gif new file mode 100644 index 000000000..ef3971e3b Binary files /dev/null and b/content/news/030/notsnake.gif differ diff --git a/content/news/030/rafx-screenshot.jpg b/content/news/030/rafx-screenshot.jpg new file mode 100644 index 000000000..de897a125 Binary files /dev/null and b/content/news/030/rafx-screenshot.jpg differ diff --git a/content/news/030/rusty_engine4.png b/content/news/030/rusty_engine4.png new file mode 100644 index 000000000..496bf4724 Binary files /dev/null and b/content/news/030/rusty_engine4.png differ diff --git a/content/news/030/three-d.jpg b/content/news/030/three-d.jpg new file mode 100644 index 000000000..53edc77e4 Binary files /dev/null and b/content/news/030/three-d.jpg differ diff --git a/content/news/030/vangers-integrated.jpg b/content/news/030/vangers-integrated.jpg new file mode 100644 index 000000000..1b6c2256c Binary files /dev/null and b/content/news/030/vangers-integrated.jpg differ diff --git a/content/news/030/veloren.jpg b/content/news/030/veloren.jpg new file mode 100644 index 000000000..16aaebd9b Binary files /dev/null and b/content/news/030/veloren.jpg differ diff --git a/content/news/030/wor-capsule.jpg b/content/news/030/wor-capsule.jpg new file mode 100644 index 000000000..16c7d49eb Binary files /dev/null and b/content/news/030/wor-capsule.jpg differ diff --git a/content/news/031/bevy-jam.png b/content/news/031/bevy-jam.png new file mode 100644 index 000000000..ce606ff29 Binary files /dev/null and b/content/news/031/bevy-jam.png differ diff --git a/content/news/031/bevy_minesweeper.png b/content/news/031/bevy_minesweeper.png new file mode 100644 index 000000000..e1fa96c9b Binary files /dev/null and b/content/news/031/bevy_minesweeper.png differ diff --git a/content/news/031/blackjack.gif b/content/news/031/blackjack.gif new file mode 100644 index 000000000..a9b2996ba Binary files /dev/null and b/content/news/031/blackjack.gif differ diff --git a/content/news/031/build-a-better-buddy.png b/content/news/031/build-a-better-buddy.png new file mode 100644 index 000000000..34c986fa3 Binary files /dev/null and b/content/news/031/build-a-better-buddy.png differ diff --git a/content/news/031/dims.jpg b/content/news/031/dims.jpg new file mode 100644 index 000000000..b58102447 Binary files /dev/null and b/content/news/031/dims.jpg differ diff --git a/content/news/031/dis-order.jpg b/content/news/031/dis-order.jpg new file mode 100644 index 000000000..ab2bb1111 Binary files /dev/null and b/content/news/031/dis-order.jpg differ diff --git a/content/news/031/dynamic-assets.png b/content/news/031/dynamic-assets.png new file mode 100644 index 000000000..a26a8f02c Binary files /dev/null and b/content/news/031/dynamic-assets.png differ diff --git a/content/news/031/encase.svg b/content/news/031/encase.svg new file mode 100644 index 000000000..eeec63198 --- /dev/null +++ b/content/news/031/encase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/news/031/gamedev-meetup.png b/content/news/031/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/031/gamedev-meetup.png differ diff --git a/content/news/031/godot-rust-android-via-windows.jpg b/content/news/031/godot-rust-android-via-windows.jpg new file mode 100644 index 000000000..ca161fd9f Binary files /dev/null and b/content/news/031/godot-rust-android-via-windows.jpg differ diff --git a/content/news/031/graphite.png b/content/news/031/graphite.png new file mode 100644 index 000000000..4cbb61c39 Binary files /dev/null and b/content/news/031/graphite.png differ diff --git a/content/news/031/index.md b/content/news/031/index.md new file mode 100644 index 000000000..02eb8744d --- /dev/null +++ b/content/news/031/index.md @@ -0,0 +1,750 @@ ++++ +title = "This Month in Rust GameDev #31 - February 2022" +transparent = true +date = 2022-03-10 ++++ + + + + + +Welcome to the 31st 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 + +- [Bevy Jam](#bevy-jam-1) +- [Rust GameDev Meetup](#rust-gamedev-meetup) +- [Rust GameDev Showcase](#rust-gamedev-showcase) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## [Bevy Jam #1][bevy-jam] + +![Bevy Jam](bevy-jam.png) + +The first-ever [Bevy Jam][bevy-jam] just finished! Bevy Jam is a week-long event, +where the goal is to make a game in [Bevy Engine][bevy-engine], the free and open-source +game engine built in Rust. + +The theme was Unfair Advantage. 431 people joined the jam and 75 teams submitted +entries. A ten-day "voting period" has started, which will end on March 14th. +[Anyone can play and vote on the submissions][bevy-jam-submissions]. + +The winning team will receive any two items from the [Bevy Merch][bevy-merch] store. + +[bevy-jam]: https://itch.io/jam/bevy-jam-1/ +[bevy-jam-submissions]: https://itch.io/jam/bevy-jam-1/entries +[bevy-engine]: https://bevyengine.org/ +[bevy-merch]: https://merch.bevyengine.org/ + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 13th Rust Gamedev Meetup took place in February. You can watch the +recording of the meetup [here on Youtube][gamedev-meetup-video]. The meetups +take place on the second Saturday every month via the [Rust Gamedev Discord +server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://youtu.be/adt63Gqt6yA +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[rust-meetup-feb-time]: https://everytimezone.com/s/c1b2eb7b + +## Rust GameDev Showcase + +The Rust Gamedev Working Group is working on a showcase of games made in Rust! +If you're interested in submitting your own footage, fill out [this +form][showcase-form]. You can also read more about the process of creating the +showcase in the [showcase discussion on GitHub][showcase-discussion]. The +deadline for submissions has been extended until the 19th of March 2022. Hope to +see your game in there! + +[showcase-form]: https://docs.google.com/forms/d/1MpA7J9BFXAgoCJZJrxi8r4sqzhhYCzCtFo5kXGVOZj4/edit +[showcase-discussion]: https://github.com/rust-gamedev/wg/discussions/121 + +## Game Updates + +### [Name Needed][name-needed] + +{{ image_figure( + alt="The player orders a selection of blocks to be broken, and a brick wall to be built." + src="https://github.com/name-needed.gif" + caption="The player orders a selection of blocks to be broken, and a brick wall to be built.") }} + + +[Name Needed][name-needed] by [@DomWilliams0][domwilliams-github] is a one-man +effort to produce an open source, intuitive, and high-performance Dwarf +Fortress-esque game with a custom engine. + +Recent progress has been on procedural terrain generation, the player UI, item +stacks, and build jobs. A major refactor of the AI system integrated Rust's +superb `async`/`await` support, which is documented in the most recent devlog. + +- [Devlog #5: voxel world goals][name-needed-devlog5] +- [Devlog #6: async activities][name-needed-devlog6] +- [Devlog #7: custom async runtime][name-needed-devlog7] + +[name-needed]: https://github.com/DomWilliams0/name-needed +[domwilliams-github]: https://github.com/DomWilliams0 +[name-needed-devlog5]: https://domwillia.ms/devlog5/ +[name-needed-devlog6]: https://domwillia.ms/devlog6/ +[name-needed-devlog7]: https://domwillia.ms/devlog7/ + +### [This is Fine Sokoban][sokoban-github] + +{{ image_figure( + alt="This is Fine Sokoban screenshot" + src="https://github.com/sokoban_screenshot.gif" + caption="Screenshot of This is Fine Sokoban") }} + +This is Fine Sokoban ([GitHub][sokoban-github]) by +[@Syn-Nine][synnine-twitter] is a Sokoban game inspired by the This is Fine +meme created for the [Game Developers Refuge 4x4x4 Challenge] in February +2022. Use the arrow keys to push the TPS reports into the file folders while +the room is burning down and you're surrounded by clocks - a metaphor for +the developer's work life. + +The 4x4x4 Challenge was to create a game based on four emojis. In +this case the chosen emoji combination was: :nerd_face: :open_file_folder: +:clock830: :fire: + +The game is part of an open source repository of several mini-games that use +Syn9's [Rust Mini Game Framework][mgfw]. + +[sokoban-github]: https://github.com/Syn-Nine/rust-mini-games/tree/main/2d-games/sokoban +[synnine-twitter]: https://twitter.com/Syn9Dev +[Game Developers Refuge 4x4x4 Challenge]: https://noop.rocks/gdr/viewtopic.php?f=2&t=84 +[mgfw]: https://github.com/Syn-Nine/mgfw + +### [Build A Better Buddy][build-a-better-buddy] + +[![Build A Better Buddy Screenshot](build-a-better-buddy.png)][build-a-better-buddy] + +Build A Better Buddy is a cute auto-battler built by [@cart_cart][cart-cart] using +[Bevy Engine][buddy-bevy-engine] for [Bevy Jam #1][buddy-bevy-jam-1]. The source +code is [available here][buddy-source]. It runs on Windows, Mac, Linux, and +the Web. + +[build-a-better-buddy]: https://cart.itch.io/build-a-better-buddy +[cart-cart]: https://twitter.com/cart_cart +[buddy-bevy-jam-1]: https://itch.io/jam/bevy-jam-1/ +[buddy-bevy-engine]: https://bevyengine.org/ +[buddy-source]: https://github.com/cart/build_a_better_buddy + +### [Weegames] + +![Grid of Weegames minigames](weegames.jpg) + +[Weegames] is a fast-paced minigame collection available on web and Windows. +The latest release: + +- Uses [quad-storage] on WASM to save high scores + and a record of how games the player has played +- Fixes bug where the game was being played at an incorrect speed + when the player's monitor was not 60hz +- Adds 8 more minigames + +[Weegames]: https://yeahross.itch.io/weegames +[quad-storage]: https://crates.io/crates/quad-storage + +### [Dis-order] + +![Screenshot of Dis-order](dis-order.jpg) + +Dis-order by [@jkhelsing] is a short sokoban-esque puzzle game made in 72 hours +for MiniJam 100. In Dis-order you're making chaos instead of order, you win when +there are no patterns or order in the level. + +It's made using [Bevy][dis-order-bevy] and uses [bevy_smud][bevy_smud] for shape +rendering, and a compute pass for the [particle +effects][dis-order-particle-effects]. The levels are made with ldtk and loaded +using [bevy_ecs_ldtk][bevy_ecs_ldtk]. Read more about this in the +[post-mortem][dis-order-post-mortem]. + +[Download the game on itch.io][Dis-order]. + +[Dis-order]: https://jhelsing.itch.io/dis-order +[bevy_smud]: https://github.com/johanhelsing/bevy_smud +[dis-order-bevy]: https://bevyengine.org +[bevy_ecs_ldtk]: https://github.com/Trouv/bevy_ecs_ldtk +[dis-order-post-mortem]: https://johanhelsing.studio/posts/dis-order +[dis-order-particle-effects]: https://twitter.com/jkhelsing/status/1495604656164282374 +[@jkhelsing]: https://twitter.com/jkhelsing + +### [Molecoole][molecoole-steam] + +[![A molecoole and some enemies](molecoole.png)][molecoole-steam] + +Molecoole is a top-down shooter roguelike where you build your character from +different atoms. Each atom has a unique ability to provide tons of variety +between playthroughs. It's made using the [Bevy Engine][bevy-engine]. + +This month Molecoole launched on [Steam][molecoole-steam], making it the first +game made with Bevy Engine there! It's available on Windows and Linux. You can +check out its gameplay on [youtube][youtube-molecoole], or on the Steam page. + +[molecoole-steam]: https://store.steampowered.com/app/1792170/Molecoole/ +[youtube-molecoole]: https://www.youtube.com/watch?v=bwbVplq03ew +[bevy-engine]: https://github.com/bevyengine/bevy + +### [Veloren][veloren] + +{{ image_figure( + alt="Gnarling looking out over a fort" + src="https://github.com/veloren.jpg" + caption="Looking out over the Gnarling fort") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In February, [Veloren 0.12 was released][veloren-012-release-blog]. For the +release, a [trailer with some of the changes][veloren-012-release-trailer] was +posted. This release was 5 months in the making, so the changelog is quite +large. During the release party, the official server reached a cap of 195 +players online at once, which is another record for Veloren. Changes were made +to allow server owners to handle IPv4 and IPv6 connections. +Improvements were also made to trading price calculations to properly normalize +loot tables. + +Two Veloren Reading Clubs were held in February. [The first +one][veloren-reading-club-5] explored using Git to contribute, and how to add +some new NPC characters. [The second one][veloren-reading-club-6] explored how +some of Git's more intricate features worked, as well as how economy simulations +are done. Work was done to allow species to defend others of the same species, +to allow for more realistic combat in the wild. A [Mastodon +page][veloren-mastodon] was also created for Veloren. Gnarlings forts were also +added, which adds a whole new area for players to fight in. + +February's full weekly devlogs: "This Week In Veloren...": +[#158][veloren-158], +[#159][veloren-159], +[#160][veloren-160], +[#161][veloren-161]. + +[veloren]: https://veloren.net +[veloren-mastodon]: https://mastodon.technology/@veloren +[veloren-012-release-blog]: https://veloren.net/release-0-12/ +[veloren-012-release-trailer]: https://www.youtube.com/watch?v=604JC5QdYQE +[veloren-reading-club-5]: https://www.youtube.com/watch?v=f9PXtKEwedQ +[veloren-reading-club-6]: https://www.youtube.com/watch?v=MbiLZvuBLzc + +[veloren-158]: https://veloren.net/devblog-158 +[veloren-159]: https://veloren.net/devblog-159 +[veloren-160]: https://veloren.net/devblog-160 +[veloren-161]: https://veloren.net/devblog-161 + +## Engine Updates + +### [DIMS] + +[![dims screenshot](dims.jpg)][DIMS-first-look] + +@jfnoren ([Twitter][@jfnoren-twitter], [GitHub][@jfnoren-github]) posted a +[video][DIMS-first-look] about a first look into their engine, DIMS. DIMS allows +you to create open worlds, script gameplay, and mess around with physics. DIMS +has been in the works for several months, but you can now sign up for early +access on [their website][DIMS]. + +_Discussions: [Reddit][DIMS-reddit-discussion], [Twitter][DIMS-twitter-discussion]_ + +[@jfnoren-twitter]: https://twitter.com/jfnoren +[@jfnoren-github]: https://github.com/FredrikNoren +[DIMS]: https://www.dims.co/ +[DIMS-first-look]: https://www.youtube.com/watch?v=58HS-PN71Mw +[DIMS-reddit-discussion]: https://www.reddit.com/r/rust_gamedev/comments/snhi5u/some_months_into_building_and_wed_never_have/ +[DIMS-twitter-discussion]: https://twitter.com/jfnoren/status/1491077331850776576 + +## Learning Material Updates + +### [Bevy Minesweeper] + +{{ image_figure( + alt="screenshot" + src="https://github.com/bevy_minesweeper.png" + caption="Demo Screenshot") }} + +[@ManevilleF] published a 12 step [course][Bevy Minesweeper] on how to make a +simple 2D Minesweeper using [bevy][bevy] 0.6. +A [public repository][bevy_minesweeper_repo] is +available, as well as a live [demo][bevy_minesweeper_demo]. + +The tutorial showcases: + +- essential features of the [bevy][bevy] engine +- important ECS notions for beginners +- WASM build +- and soon, android native APK build + +_Discussions: [Twitter][bevy_minesweeper_twitter], [dev.to][Bevy Minesweeper]_ + +[Bevy Minesweeper]: https://dev.to/qongzi/bevy-minesweeper-introduction-4l7f +[bevy_minesweeper_repo]: https://gitlab.com/qonfucius/minesweeper-tutorial +[bevy_minesweeper_demo]: https://qonfucius.gitlab.io/minesweeper-tutorial/ +[bevy]: https://bevyengine.org +[@ManevilleF]: https://github.com/ManevilleF +[bevy_minesweeper_twitter]: https://twitter.com/ManevilleF/status/1495787155280510977?s=20&t=omNFCI2cWgDFNC0MC7NWTg + +### [Computing image filters with wgpu-rs] + +[@Redwarp] posted a [blog post][Computing image filters with wgpu-rs] that goes +through the process of creating a simple image processing pipeline with compute +shaders, using wgpu-rs. The post takes you through several steps in this +process: + +- Wgpu basics +- Loading a texture +- A simple shader +- Bind group +- Workgroup and dispatch + +[Computing image filters with wgpu-rs]: https://blog.redwarp.app/image-filters/ +[@Redwarp]: https://twitter.com/redwarp + +### [Actor Pattern with Async Rust] + +@Sorokya ([Twitter][sorokya-twitter], [GitHub][sorokya-github]) [published a blog +post][Actor Pattern with Async Rust] about how they improved their game server +by switching over to an actor pattern approach. This method allowed the server +to be refactored to be more modular and cleaner. + +[Actor Pattern with Async Rust]: https://eo-rs.dev/blog/the-actor-pattern-with-async-rust/ +[sorokya-twitter]: https://twitter.com/sorokya +[sorokya-github]: https://github.com/sorokya + +### [Godot-Rust to Android without Android Studio][godot-rust-to-android] + +{{ image_figure( + alt="working godot-rust on an android phone" + src="https://github.com/godot-rust-android-via-windows.jpg" + caption="Proof of concept Godot app running on Android") }} + +[@coffeecodechem] published a [blog post][godot-rust-to-android] on how to +export godot-rust as an Android APK on Windows without using Android Studio. It +goes beyond the godot-rust book that specifies "steps are tested and confirmed +to work on Linux only", and details what is needed to make it work on Windows. + +The post shows how to set up the JDK and Rust, set up the keystore, and how to +build the required GDNative libraries. + +[@coffeecodechem]: https://twitter.com/coffeecodechem +[godot-rust-to-android]: https://coffeecodechem.com/2022/02/exporting-godot-rust-android-apk-windows/ + +### [Supercharging your Web with Rust and Bevy] + +Bruno Lipovac [released a blog post][Supercharging your Web with Rust and Bevy] +that detailed building 3D applications for use on the web with Bevy. It walks +through setting up a Bevy project and importing some models. It also details +some more fine-detail items, such as lighting and sky. It then shows how to +compile the project and serve it. + +[Supercharging your Web with Rust and Bevy]: https://www.barrage.net/blog/technology/how-to-supercharge-your-web-with-3d-capabilities-by + +## Tooling Updates + +### [Vismut] + +![Vismut](vismut.png) + +[Vismut] ([GitLab][Vismut GitLab], [Zulip][Vismut Zulip]) by +[@lukors][Vismut @lukors] +will be a procedural texturing tool. + +This application saw its first public release a month ago, where it added +support for its first use case: manual channel shuffling. + +The latest version, [v0.4.0][Vismut v0.4.0], brings an all-new interface that's +not only prettier but also much easier to use thanks to `bevy_egui`! + +Upcoming versions will turn it into a fully-featured node-based procedural +texturing tool. [Read the introduction][Vismut Introduction] +on the author's blog for more information. + +[Vismut]: http://vismut.org +[Vismut GitLab]: https://gitlab.com/vismut-org/vismut +[Vismut Zulip]: https://vismut.zulipchat.com +[Vismut @lukors]: https://gitlab.com/lukors +[Vismut v0.4.0]: https://gitlab.com/vismut-org/vismut/-/releases/v0.4.0 +[Vismut Introduction]: https://orsvarn.com/introducing-vismut/ + +### [Blackjack] + +![Blackjack: Showcase of the new catmull-clark subdivision](blackjack.gif) + +[Blackjack] by @setzer22 is a new procedural modeling application made in Rust, +using rend3, wgpu, and egui. It follows the steps of applications like +Houdini, or Blender's geometry nodes project and provides a node-based +environment to compose procedural recipes to create 3d models. + +The last two months have been quite busy for Blackjack. After an initial open +source release, several new features have been added: + +- Added a resizeable viewport system, with node graph pan and zoom. +- Built an initial implementation for a properties inspector and geometry + spreadsheet panels. +- Added a subdivision node, with a fast catmull-clark subdivision technique + based on + [this recent paper][blackjack-paper] +- Separated the node graph functionality into + [its own crate][blackjack-node-graph-crate] + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/srgd41/your_rusty_procedural_3d_modeler_blackjack_just/), +[/r/rust](https://www.reddit.com/r/rust/comments/sfqung/media_blackjacks_eguibased_node_graph_now/)_ + +[Blackjack]: https://github.com/setzer22/blackjack +[blackjack-paper]: https://onrendering.com/data/papers/catmark/HalfedgeCatmullClark.pdf +[blackjack-node-graph-crate]: https://github.com/setzer22/egui_node_graph + +### [Graphite][graphite-website] + +![Graphite](graphite.png) + +Graphite is an in-development raster and vector 2D graphics editor that is free +and open source. It will be powered by a node graph compositing engine that +supercharges your layer stack, providing a completely non-destructive editing +experience. + +After officially launching the alpha version last month, work has progressed +in designing the node graph system. Also, the team has spent this month adding +polish to the application and continuing work on more website content. + +A new editor feature is the Gradient tool which makes it possible to add some +colorful pizzazz. This means that finally all vector editing tools are +implemented, but some can still use improvement. (Ask how you can help with +that!) Additional work has gone into visual changes to help aid in clarity and +discoverability for new users. + +Check out the [new website][graphite-website], try the +[Graphite editor][graphite-live-demo] right now in your browser, star on +[GitHub][graphite-repo], follow on [Twitter][graphite-twitter], and join the +[Discord][graphite-discord] to chat or get involved! + +[graphite-website]: https://graphite.rs +[graphite-live-demo]: https://editor.graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-discord]: https://discord.graphite.rs + +## Library Updates + +### [vach] + +[vach] is an archiving file format developed from the ground up for games and +other real-time applications by [@zeskeertwee] and [@sokorototo]. It is +written in pure Rust. + +Its primary objectives (in no particular order) are: + +- Have a simple, yet complete API. +- Fine control over each individual entry in an archive, i.e. neighbouring + entries can have vastly different compression schemes. +- Support compression (with multiple compression schemes), encryption, + and signatures for data authentication +- Efficient fetching of data by avoiding unnecessary traversal of the file. + Once a file is parsed, locations of every entry are known to the loader. +- Be as compact as possible - the smallest valid archive is only 13 bytes. +- Each entry has some metadata attached to it - this is implemented using + bitflags and up to 8 bits are free to the user. +- Has multithreaded implementations of both the loader and the writer. + +A [CLI][vach-cli] is allowing one to use vach as a general-purpose archive +format. The CLI is fully multithreaded, allowing for insane un/packing speeds. + +Feel free to drop into the [repo][vach] and open an issue, pull request, or +drop a star 🌟. It helps maintain momentum in the project. + +[vach]: https://github.com/zeskeertwee/vach +[vach-cli]: https://crates.io/crates/vach-cli +[@zeskeertwee]: https://github.com/zeskeertwee +[@sokorototo]: https://github.com/sokorototo + +### Sparsey 0.7 + +![Sparsey](sparsey.png) + +[Sparsey] by [@LechintanTudor] is a sparse set-based Entity Component System +with a beautiful and concise syntax. + +The biggest change in this release was the removal of component change detection +which had a significant impact on performance and memory usage. As a result, +Sparsey performs much better in all benchmarks and the codebase is easier to +maintain. + +The systems module received a major overhaul with an improved scheduling +algorithm, allowing more systems to run in parallel, and an important usability +improvement allowing systems to be added to schedules without having to call +`.system()` on the system functions. + +[Sparsey]: https://github.com/LechintanTudor/sparsey +[@LechintanTudor]: https://github.com/LechintanTudor + +### [Encase] + +![Encase Logo](./encase.svg) + +[Encase] ([docs.rs], [crates.io]) by [@teoxoy] is a new library +that provides a mechanism to layout data into GPU buffers +according to [WGSL's memory layout] rules. + +Features + +- supports all WGSL [host-shareable types] + wrapper types + (`&T`, `&mut T`, `Box`, ...) +- extensible by design; most traits can be easily implemented + for user-defined types via macros (see [design]) +- built-in support for data types from a multitude of crates + (enabled via [features]) +- covers a wide area of use cases (see [examples]) + +Example + +```rust +use encase::{WgslType, UniformBuffer}; + +#[derive(WgslType)] +struct AffineTransform2D { + matrix: glam::Mat2, + translate: glam::Vec2 +} + +let transform = AffineTransform2D { + matrix: glam::Mat2::IDENTITY, + translate: glam::Vec2::ZERO, +}; + +let mut buffer = UniformBuffer::new(Vec::new()); +buffer.write(&transform).unwrap(); +let byte_buffer = buffer.into_inner(); + +// write byte_buffer to GPU +``` + +[Encase]: https://github.com/teoxoy/encase +[docs.rs]: https://docs.rs/encase/latest/encase +[crates.io]: https://crates.io/crates/encase +[@teoxoy]: https://github.com/teoxoy +[WGSL's memory layout]: https://gpuweb.github.io/gpuweb/wgsl/#memory-layouts +[host-shareable types]: https://gpuweb.github.io/gpuweb/wgsl/#host-shareable-types +[design]: https://docs.rs/encase/latest/encase/#design +[features]: https://docs.rs/crate/encase/latest/features +[examples]: https://docs.rs/encase/latest/encase/#examples + +### [Notan] + +![Notan](notan.png) + +The first version of [Notan] was released. +[Notan] aims to be a simple and portable multimedia layer, designed to make +your own multimedia app on top of it without worrying too much about +platform-specific code. + +The main goal is to provide a set of APIs and tools that can be used to create +your project ergonomically without enforcing any structure or pattern, +always trying to stay out of your way. The idea is that you can use it as a +foundation layer or backend for your next app, game engine, or game. + +This first version comes with windowing, input, and rendering support on MacOS, +Linux, Windows, and Web. Behind feature flags, you can use a fast 2D renderer, +text rendering, and [egui] integration. + +You can try [Notan] by adding it to your `Cargo.toml` -> `notan = "0.1.0"` or +checking the [online demos]. + +[Notan]: https://github.com/Nazariglez/notan +[online demos]: https://nazariglez.github.io/notan-web/ +[egui]: https://github.com/emilk/egui + +### [bevy_asset_loader] + +![Dynamic assets](dynamic-assets.png) + +[bevy_asset_loader] by [@nikl_me] is a [Bevy] plugin that aims to reduce +boilerplate for asset handling in Bevy apps. + +Last month saw the release of version `0.9` which added support for loading +asset configurations from `.ron` files like the one shown above. This allows for +resolving asset configurations like their file path or sprite sheet dimensions +at run time. The feature is called "dynamic assets" and enables use cases like +internationalised assets. + +[@nikl_me] wrote a [blog post][dynamic_assets_post] about dynamic assets in +[bevy_asset_loader]. The post outlines the idea of the feature and describes +current and planned functionality. + +[dynamic_assets_post]: https://www.nikl.me/blog/2022/dynamic-assets-in-bevy_asset_loader/ +[bevy_asset_loader]: https://github.com/NiklasEi/bevy_asset_loader +[Bevy]: https://github.com/bevyengine/bevy +[@nikl_me]: https://twitter.com/nikl_me + +## Discussions + + + +- [/r/bevy](https://www.reddit.com/r/bevy/): + - ["Recommended Bevy/ECS Project Structure/Conventions"] +- [/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/): + - ["Which is a better game engine to start with as a beginner"] +- [gamedev wg](https://github.com/rust-gamedev/wg) + - [#121 Rust Gamedev Showcase] + - [#122 Length of meetups] + - [#119 Engine benchmark repo] + +["Recommended Bevy/ECS Project Structure/Conventions"]: https://reddit.com/r/bevy/comments/sikrv1/recommended_bevyecs_project_structureconventions +["Which is a better game engine to start with as a beginner"]: https://reddit.com/r/rust_gamedev/comments/stcnx0/which_is_a_better_game_engine_to_start_with +[#121 Rust Gamedev Showcase]: https://github.com/rust-gamedev/wg/discussions/121 +[#122 Length of meetups]: https://github.com/rust-gamedev/wg/discussions/122 +[#119 Engine benchmark repo]: https://github.com/rust-gamedev/wg/discussions/119 + +## Other News + + + +- Other game updates: + - [Fish Fight] introduced mod loading. + - [vange-rs] published a blog post about using Emscripten with Rust. + - [makiomino.fun] introduced a new level-up animation. + - [country-slice] added shadows and the ability to adjust wall height. + - [flesh] has a new animation for the mid-boss. + - [Rustenstein 3D: Game programming like it's 1992] is an article walking + through creating a Wolfenstein-like game in Rust. + - [Making a 3D Super Munchers Clone with Bevy] is a video walkthrough of + creating a 3D game in Bevy. + - [Vulkan with Rust by example] is the latest post in a series about using Vulkan + with Rust. + - [Fyrox] got assets to hot-reload. + - [Hotham] released a video demo of the engine. + - [godot-rust] introduced C#-style properties. + - [cosync] is a single-threaded executor for deferred async code for games. + - [SPIR-Q v0.5] was released after two years of v0.4 maintenance. + - [egui 0.17.0] was released, with custom text styles, any-sized fonts, and + much more. + - [sparticles-rs] is a particle system generator. + - [blender_bevy_toolkit] is making process in opening Blender files in Bevy. + +[Fish Fight]: https://reddit.com/r/rust_gamedev/comments/sokjon/fish_fight_v041_mod_loading +[vange-rs]: https://caiiiycuk.medium.com/vangers-3d-example-of-using-emscripten-in-rust-720ee8099d72 +[makiomino.fun]: https://twitter.com/makiomino/status/1496252771909218308 +[country-slice]: https://twitter.com/anastasiaopara/status/1492429686294683653 +[flesh]: https://twitter.com/Im_Oab/status/1490576387589427200 +[Rustenstein 3D: Game programming like it's 1992]: https://tech.nextroll.com/blog/dev/2022/02/02/rustenstein.html +[Making a 3D Super Munchers Clone with Bevy]: https://youtube.com/watch?v=oee3Z69sE-8 +[Vulkan with Rust by example]: https://nikitablack.github.io/post/vulkan_with_rust_by_example_6_fixing_depth/ +[Fyrox]: https://reddit.com/r/rust_gamedev/comments/sm34s6/media_finally_got_assets_hot_reloading_working_in +[Hotham]: https://reddit.com/r/rust_gamedev/comments/st4vp1/media_hotham_vr_engine_demo +[godot-rust]: https://twitter.com/GodotRust/status/1490282777039753218 +[cosync]: https://github.com/sanbox-irl/cosync +[SPIR-Q v0.5]: https://reddit.com/r/rust_gamedev/comments/sr7nnr/spirq_v05_cleaner_api +[egui 0.17.0]: https://twitter.com/ernerfeldt/status/1496200805212475396 +[sparticles-rs]: https://youtube.com/watch?v=dyxlfOyW90Q +[blender_bevy_toolkit]: https://reddit.com/r/rust_gamedev/comments/sredt1/blender_bevy_pipeline_progress + +## Requests for Contribution + + + +- [Graphite is looking for contributors][graphite-contribute] to help build the +new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[graphite-contribute]: https://github.com/GraphiteEditor/Graphite/issues/202 +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Jobs + + + +- [Embark Studios](https://careers.embark-studios.com/jobs) + (Stockholm/Hybrid Remote) - Various roles + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/Veloren/comments/tbcs3d/this_month_in_rust_gamedev_31_february_2022/), +[Twitter](https://twitter.com/rust_gamedev/status/1503474733572100096), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/031/molecoole.png b/content/news/031/molecoole.png new file mode 100644 index 000000000..3855bfd4f Binary files /dev/null and b/content/news/031/molecoole.png differ diff --git a/content/news/031/name-needed.gif b/content/news/031/name-needed.gif new file mode 100644 index 000000000..b9946df78 Binary files /dev/null and b/content/news/031/name-needed.gif differ diff --git a/content/news/031/notan.png b/content/news/031/notan.png new file mode 100644 index 000000000..bad75ad24 Binary files /dev/null and b/content/news/031/notan.png differ diff --git a/content/news/031/sokoban_screenshot.gif b/content/news/031/sokoban_screenshot.gif new file mode 100644 index 000000000..6448733c4 Binary files /dev/null and b/content/news/031/sokoban_screenshot.gif differ diff --git a/content/news/031/sparsey.png b/content/news/031/sparsey.png new file mode 100644 index 000000000..e562e734d Binary files /dev/null and b/content/news/031/sparsey.png differ diff --git a/content/news/031/veloren.jpg b/content/news/031/veloren.jpg new file mode 100644 index 000000000..4ce2f7a96 Binary files /dev/null and b/content/news/031/veloren.jpg differ diff --git a/content/news/031/vismut.png b/content/news/031/vismut.png new file mode 100644 index 000000000..abdea59c8 Binary files /dev/null and b/content/news/031/vismut.png differ diff --git a/content/news/031/weegames.jpg b/content/news/031/weegames.jpg new file mode 100644 index 000000000..e008510a9 Binary files /dev/null and b/content/news/031/weegames.jpg differ diff --git a/content/news/032/bevy-jam.png b/content/news/032/bevy-jam.png new file mode 100644 index 000000000..ce606ff29 Binary files /dev/null and b/content/news/032/bevy-jam.png differ diff --git a/content/news/032/bevy-video-series.jpg b/content/news/032/bevy-video-series.jpg new file mode 100644 index 000000000..d492cf9cc Binary files /dev/null and b/content/news/032/bevy-video-series.jpg differ diff --git a/content/news/032/bevy_match3_example.gif b/content/news/032/bevy_match3_example.gif new file mode 100644 index 000000000..8bc5ee501 Binary files /dev/null and b/content/news/032/bevy_match3_example.gif differ diff --git a/content/news/032/bloom3d.jpg b/content/news/032/bloom3d.jpg new file mode 100644 index 000000000..1f8594467 Binary files /dev/null and b/content/news/032/bloom3d.jpg differ diff --git a/content/news/032/chaz.png b/content/news/032/chaz.png new file mode 100644 index 000000000..51aef4a4f Binary files /dev/null and b/content/news/032/chaz.png differ diff --git a/content/news/032/cheatersneverwin.gif b/content/news/032/cheatersneverwin.gif new file mode 100644 index 000000000..4e27d342b Binary files /dev/null and b/content/news/032/cheatersneverwin.gif differ diff --git a/content/news/032/doslike.png b/content/news/032/doslike.png new file mode 100644 index 000000000..dec182b58 Binary files /dev/null and b/content/news/032/doslike.png differ diff --git a/content/news/032/gamedev-meetup.png b/content/news/032/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/032/gamedev-meetup.png differ diff --git a/content/news/032/godot-rust.png b/content/news/032/godot-rust.png new file mode 100644 index 000000000..01e8c5edb Binary files /dev/null and b/content/news/032/godot-rust.png differ diff --git a/content/news/032/graphite-node-graph.png b/content/news/032/graphite-node-graph.png new file mode 100644 index 000000000..704fc1aec Binary files /dev/null and b/content/news/032/graphite-node-graph.png differ diff --git a/content/news/032/index.md b/content/news/032/index.md new file mode 100644 index 000000000..8c9396c8e --- /dev/null +++ b/content/news/032/index.md @@ -0,0 +1,717 @@ ++++ +title = "This Month in Rust GameDev #32 - March 2022" +transparent = true +date = 2022-04-11 ++++ + + + + + +Welcome to the 32nd 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 + +- [Rust GameDev Podcast](#rust-gamedev-podcast) +- [Rust GameDev Meetup](#rust-gamedev-meetup) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## [Rust GameDev Podcast][gamedev-podcast-site] + +![text logo](podcast.jpeg) + +The Rust Gamedev Podcast features interviews with indie game developers creating +titles with the Rust programming language. It covers technical topics as well as +the business of open source and commercial indie games development. + +In March, two episodes were released: + +[The seventh episode][podcast-7] is a chat with Erlend and Ole about +[Fish Fight][fishfight], open source games development, and future game spin-offs. + +[In the eighth episode][podcast-8], Forest chats to Dustin about [A/B Street][abstreet]. + +Listen and Subscribe from the following platforms: +[Rust GameDev Podcast (simplecast)][gamedev-podcast-site], +[Apple Podcasts][gamedev-podcast-apple], +[Spotify][gamedev-podcast-spotify], +[RSS Feed][gamedev-podcast-rss], +or [Google Podcasts][gamedev-podcast-google]. + +[podcast-7]: https://rustgamedev.com/episodes/interview-with-fish-fight +[podcast-8]: https://rustgamedev.com/episodes/interview-with-dustin-a-b-street +[abstreet]: https://github.com/a-b-street/abstreet +[fishfight]: https://github.com/heroiclabs/fishgame-macroquad +[gamedev-podcast-site]: https://rustgamedev.com/ +[gamedev-podcast-apple]: https://podcasts.apple.com/gb/podcast/rust-game-dev/id1526304768 +[gamedev-podcast-spotify]: https://open.spotify.com/show/7HRfGnTcXkLkQd9fxJbDGj +[gamedev-podcast-rss]: https://feeds.simplecast.com/C6NQglnL +[gamedev-podcast-google]: https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9DNk5RZ2xuTA + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 14th Rust Gamedev Meetup took place in March. You can watch the +recording of the meetup [here on Youtube][gamedev-meetup-video]. The meetups +take place on the second Saturday every month via the [Rust Gamedev Discord +server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://youtu.be/dQPkyjbd36Y +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### [Bevy Jam][bevy-jam-results] + +![Bevy Jam](bevy-jam.png) + +Voting on the first-ever [Bevy Jam][bevy-jam] just finished! It was a +week-long event, where the goal was to make a game in +[Bevy Engine][bevy-engine], the free and open-source game engine +built in Rust. The theme was 'Unfair Advantage'. + +The [full results can be found on itch.io][bevy-jam-results], and you can read +an [exploration of the entries][bevy-jam-exploration] to find out about how +these entries used different asset formats, crates, and Bevy features. + +Here are the top five games: + +[bevy-jam]: https://itch.io/jam/bevy-jam-1/ +[bevy-jam-results]: https://itch.io/jam/bevy-jam-1/results +[bevy-engine]: https://bevyengine.org/ +[bevy-jam-exploration]: https://techgeneral.org/bevy-jam-1-data-exploration/ + +#### 🥇 First Place: [Petty Party][petty-party] + +![Petty Party logo](pettyparty.png) + +[Petty Party][petty-party] is a Mario Party inspired board game, +in which you play against the world's worst opponent, who's +actively rigging the game against you. + +The game was originally very hard to beat, so the devs balanced +the jam release fairly heavily in the player's favour - however, +if you beat the game, you can unlock the original difficulty +as a 'hard mode'! + +The source for the game is available on [GitHub][petty-party-source]. + +[petty-party]: https://jabuwu.itch.io/petty-party +[petty-party-source]: https://github.com/jabuwu/petty-party + +#### 🥈 Second Place: [¿Quién es el MechaBurro?][mechaburro-itchio] + +![¿Quién es el MechaBurro?](mechaburro.gif) + +[¿Quién es el MechaBurro?][mechaburro-itchio] is a singleplayer/local +multiplayer game (up to 4 players) with bots (8 total burros) +inspired by twin-stick shooters and aspects of Mario Kart. Players +choose to play as one of the burro piñatas and then attempt to be +the last burro standing in each level of the game. At the start +of each round, one burro is chosen randomly to be upgraded to the +Mechaburro, giving them an unfair advantage. + +A postmortem devlog detailing the process of making the game during the +jam can be found [here][mechaburro-postmortem], a trailer for the game is +[viewable on YouTube][mechaburro-youtube] and the source code for the game +is available [on GitHub][mechaburro-github]. + +[mechaburro-itchio]: https://ramirezmike2.itch.io/quien-es-el-mechaburro +[mechaburro-github]: https://github.com/ramirezmike/quien_es_el_mechaburro +[mechaburro-youtube]: https://www.youtube.com/watch?v=YQeb2ffm_TI +[mechaburro-postmortem]: https://ramirezmike2.itch.io/quien-es-el-mechaburro/devlog/354715/bevy-jam-1-postmortem + +#### 🥉 Third Place: [Chaz] + +![Chaz screenshot](chaz.png) + +[Chaz] is a platform racing game, where you have to stay close to your +opponent in order to see where you're going. Beat them to the floating +heart to win - but be warned, once you do, they'll steal your moves! + +The source code is available on [GitHub][chaz-source]. + +[chaz]: https://luizchagasjardim.itch.io/chaz +[chaz-source]: https://github.com/lcjgames/chaz + +#### Fourth Place: [Warlock's Gambit][warlocks-gambit-itchio] + +![Warlock's Gambit Screenshot](warlocks_gambit.jpg) + +[Warlock's Gambit][warlocks-gambit-itchio] is a puzzle game constructed like a +card game, playable in the browser. You are given a static deck and have to play +your cards carefully to beat your opponent. In keeping with the theme of the +jam, the decks are stacked against you. In fact, it's impossible to win by +default. But you have a trick up your sleeve, literally. You can drag a card in +your sleeve to play it later. + +The jam release was limited and confusing, but a post-jam update fixed the +most annoying bugs, clarified the game rules, enabled importing custom decks, +and added great code documentation (including a flow diagram demonstrating the +game state changes). + +The game code is licensed under MIT or Apache-2 and is [available on +GitHub][warlocks-gambit-github]. + +[warlocks-gambit-itchio]: https://gibonus.itch.io/warlocks-gambit +[warlocks-gambit-github]: https://github.com/team-plover/warlocks-gambit + +#### Fifth Place: [Cheaters Never Win][cheaters-never-win] + +![Clip of Cheaters Never Win gameplay](cheatersneverwin.gif) + +[Cheaters Never Win][cheaters-never-win] is an unfairly difficult +infinite runner set in a cyberpunk world. + +Collect keycaps in order to unlock cheat codes, which will give +you access to forbidden powers - like jumping, and moving left! + +Since the jam, the team has begun work on a full release for the game. + +The source for this game is available on [GitHub][cnw-source]. + +[cheaters-never-win]: https://cdsupina.itch.io/cheaters-never-win +[cnw-source]: https://github.com/Corrosive-Games/Cheaters-Never-Win + +### [V-Racer][vracer-github] + +{{ image_figure( + alt="VRacer screenshot" + src="https://github.com/vracer_screenshot.gif" + caption="Screenshot of V-Racer") }} + +V-Racer ([GitHub][vracer-github]) by +[@Syn-Nine][synnine-twitter] is a retro +drift racing game inspired by Atari +Battlezone and Wipeout, created using +Syn9's [Rust Mini Game Framework][mgfw]. +The game is part of an open source +[repository][s9-minigame-repo] of several +mini-games that use this framework. + +[vracer-github]: https://github.com/Syn-Nine/rust-mini-games/tree/main/2d-games/vracer +[synnine-twitter]: https://twitter.com/Syn9Dev +[mgfw]: https://github.com/Syn-Nine/mgfw +[s9-minigame-repo]: https://github.com/Syn-Nine/rust-mini-games/ + +### [Harvest Hero Origins - Spring Fever][hho-steam] + +![hho screenshot](spring_update_banner.png) + +Harvest Hero Origins by Gemdrop Games is an Arcade Wave Defense game featuring +a co-op survival mode. + +[Gemdrop Games][ggt] collaborated with [Pixadome][pd] to bring +their featured character Blue +from [Chenso Club][cc] to the survival roster. Please go wishlist Chenso Club +to support the developers! + +Blue is an android who wields a chainsaw to rip and tear through her enemies. +Slice and dice, then ride through enemies +in the new [Spring Fever expansion][spring-fever]! + +[hho-steam]: https://store.steampowered.com/app/1651500/Harvest_Hero_Origins/ +[ggt]: https://twitter.com/GemdropGames +[pd]: https://www.pixadome.com/ +[cc]: https://store.steampowered.com/app/1454730/Chenso_Club/ +[spring-fever]: https://store.steampowered.com/news/app/1651500/view/3112556530755817232 + +### [Veloren][veloren] + +{{ image_figure( + alt="Veloren on the Steam Deck" + src="https://github.com/veloren-steamdeck.jpg" + caption="Veloren on the Steam Deck!") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In March, Veloren was tested on the SteamDeck, which you can read about in +detail in [the weekly devblog][veloren-steamdeck-section]. Lots of work was done +with Airshipper, Veloren's launcher, including some bug fixes, but mainly the +switch to GitHub Releases as the download backend. This will make game updates +significantly faster and more reliable for players. Work is also being done to +make use of GitHub's HTTP range requests to do partial patches where possible. +Audio work was done to improve swimming sounds playing unevenly, and more sounds +to gliding. + +Veloren was also mentioned [on Hacker News][veloren-hn], and lots of great +discussions happened in the comment section. In 2021, Veloren spoke at Rust in +Arts, and [the recording has recently been posted][veloren-rust-in-arts]. The +0.13 release map is in the works, with a jungle theme. CliffTowns are being +developed, as a new town located in the mountains. Veloren recorded another +reading club episode, this time about [Tracy and +optimizations][veloren-reading-club-7]. A new series was also started, and the +first [Veloren Code Review was recorded][veloren-code-review-1]. + +March's full weekly devlogs: "This Week In Veloren...": +[#162][veloren-162], +[#163][veloren-163], +[#164][veloren-164], +[#165][veloren-165]. + +[veloren]: https://veloren.net +[veloren-reading-club-7]: https://www.youtube.com/watch?v=-w0yTCjsV0k +[veloren-code-review-1]: https://www.youtube.com/watch?v=gomKwQnEGA8 +[veloren-steamdeck-section]: https://veloren.net/devblog-162#veloren-on-steamdeck-by-angelonfira +[veloren-hn]: https://news.ycombinator.com/item?id=30667022 +[veloren-rust-in-arts]: https://rustfest.global/session/53-directors-commentary-veloren/ + +[veloren-162]: https://veloren.net/devblog-162 +[veloren-163]: https://veloren.net/devblog-163 +[veloren-164]: https://veloren.net/devblog-164 +[veloren-165]: https://veloren.net/devblog-165 + +### [rust-nonogram][rust-nonogram] + +![rust-nonogram screenshot](rust-nonogram.png) + +Nonograms (AKA Picross) are logic puzzles that involve filling in cells on a +grid. The goal of [rust-nonogram] is to be a quick and engaging time-killer. +Featuring random puzzles and simple controls, it is a great way to have some +fun and test your skills. + +[rust-nonogram]: https://github.com/henryksloan/rust-nonogram + +### [Terrain Generator][terrain-generator] + +![A screenshot looking down on mountainous terrain and an ocean](terrain_generator.jpg) + +"Terrain Generator" is a website made by [@kettlecorn][kettlecorn_twitter] that +generates procedural island landscapes. It uses WebAssembly SIMD and multithreading +via WebWorkers to speed up generation. + +The terrain is generated with multi-octave simplex noise using the new +simplex-noise crate [`clatter`][clatter]. + +Terrain Generator's code is open-sourced on [GitHub][terrain-generator-github]. + +[terrain-generator]: https://ianjk.com/terrain_generator/ +[kettlecorn_twitter]: https://twitter.com/kettlecorn +[clatter]: https://ianjk.com/terrain_generator/ +[terrain-generator-github]: https://github.com/kettle11/open_world_game + +### [Way of Rhea][wor] + +![way of rhea capsule image](wor-spotlight.jpg) + +[Way of Rhea][wor] is a puzzle adventure with hard puzzles and forgiving +mechanics being produced by [@masonremaley][wor-mason-remaley] in a custom Rust +engine. It has a demo available [on Steam][wor]. + +Latest developments: + +- A [new demo][wor] was pushed to Steam for PAX East +- The [mushroom biome][wor-mushroom] art was completed +- All puzzles for the main game are complete +- More secrets have been added +- Four out of the five [characters][wor-characters] are now in the game +- `SDL_mixer` was replaced with a custom Rust mixer built on top of +[libsoundio][wor-libsoundio] +- Numerous minor bug fixes and quality of life improvements, you can find +[more details here][wor-update] + +You can stay up to date with the latest Way of Rhea developments by +[following it on Steam][wor], signing up for [their mailing list][wor-newsletter], +or joining [their Discord][wor-discord]. + +[wor]: https://store.steampowered.com/app/1110620/Way_of_Rhea/?utm_campaign=tmirgd&utm_source=n32 +[wor-update]: https://store.steampowered.com/news/app/1110620/view/3180112431320346739?utm_campaign=tmirgd&utm_source=n32&utm_content=news +[wor-mushroom]: https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/clans/35599024/f356b295d6d71dcaebf4727eca0317269172b1d7.png +[wor-characters]: https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/clans/35599024/4dbe4158059559176d25f4d9326280d83ec6c745.png +[wor-mason-remaley]: https://twitter.com/masonremaley +[wor-newsletter]: https://www.anthropicstudios.com/newsletter/signup +[wor-discord]: https://discord.gg/JGeVt5XwPP +[wor-libsoundio]: http://libsound.io/ + +## Engine Updates + +### [godot-rust](https://github.com/godot-rust/godot-rust) + +![godot-rust logo](godot-rust.png) + +godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter]) +is a Rust library that provides bindings for the Godot game engine. + +We are pleased to announce the release of godot-rust version 0.10.0. +This update brings many new quality-of-life features, such as basic +async and serde support, more flexible exporting of Rust symbols to +Godot, better CI and doc integration, among many more features that +have previously been exclusive to the [GitHub repo][gd-github]. + +This release also makes the API much more user-friendly than +previous versions with more consistent naming, flatter module structure +and fewer redundancies. + +Thank you to all of the contributors who made this possible! + +A full list of the changes is available in the [changelog][gd-changelog]. + +[gd-announcement]: https://godot-rust.github.io/releases/ +[gd-changelog]: https://github.com/godot-rust/godot-rust/blob/master/CHANGELOG.md + +[gd-docs]: https://godot-rust.github.io/docs +[gd-github]: https://github.com/godot-rust/godot-rust +[gd-discord]: https://discord.com/invite/FNudpBD +[gd-twitter]: https://twitter.com/GodotRust + +### [Notan v0.2.1][Notan] + +![notan](notan.jpg) + +[Notan] is a simple and portable layer designed to create your own multimedia +apps on top of it without worrying about platform-specific code. + +The main goal is to provide a set of APIs and tools that can be used to create +your project in an ergonomic manner without enforcing any structure or pattern, +always trying to stay out of your way. The idea is that you can use it as a +foundation layer or backend for your next app, game engine, or game. + +Version [v0.2.1] improves and adds features focusing on the creation of apps, +like select mouse cursor or lazy loop among other things. The main focus was +to improve the integration with [egui] supporting all its features. + +[Notan]: https://github.com/Nazariglez/notan +[v0.2.1]: https://github.com/Nazariglez/notan/releases/tag/v0.2.0 +[egui]: https://github.com/emilk/egui + +### [Tetra] 0.7 + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, Tetra 0.7 was released, featuring: + +- Support for a wider variety of texture formats +- A more powerful API for blending +- Lots of bug fixes, cleanups, and improvements + +For more details, see the [changelog][tetra-changelog]. + +As mentioned in previous newsletters, this is likely to be the final release of +Tetra, as [the developer has decided to move onto other projects][tetra-retro]. + +[Tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-retro]: https://www.seventeencups.net/posts/three-years-of-tetra/ + +## Learning Material Updates + +### [Intro to Bevy Video Tutorial Series][intro-to-bevy-playlist] + +![Bevy video series title](bevy-video-series.jpg) + +Matthew Bryant ([Youtube][matthew-bryant-youtube], +[GitHub][matthew-bryant-github]) has been working on a video series on using +Bevy to create a Pokemon-style RPG, and just released four episodes. The goal is +to show and explain all the core features of Bevy while creating a real game +over ten 10-15 minute videos, currently releasing once per week. There is also +an accompanying [blog post][intro-to-bevy-blog] for the first video in the +series. + +[intro-to-bevy-playlist]: https://www.youtube.com/watch?v=WnUzWuaMzuM&list=PLT_D88-MTFOPPl75g4WshL1Gx2bnGTUkz&index=1 +[intro-to-bevy-blog]: https://www.logicprojects.net/2022/03/ +[matthew-bryant-youtube]: https://www.youtube.com/channel/UC7v3YEDa603x_84PgCPytzA +[matthew-bryant-github]: https://github.com/mwbryant + +### [Bevy Cheatbook] + +The [Bevy Cheatbook] by Ida Iyes is an unofficial reference-style book +teaching the Bevy game engine. It got many improvements over the past month. + +There is a new [guided tutorial page][bevy-cb-tutorial], to help you navigate +the book in an order that makes sense for learning, starting from beginner +topics and progressing towards more advanced! There is also a new "getting +started" page, as an alternative to Bevy's official instructions. + +New topics added to the book: working with Bevy Time/Timers/Stopwatches, ECS +data storage kinds, exclusive systems, direct World access, non-Send types, +and more… + +Many pages have been overhauled for correctness and the quality of various +code examples improved. + +If you would like to support the project, donate to the author via +her [GitHub Sponsors][ghsponsors-inodentry]. Follow [@IyesGames on +Twitter][twitter-iyesgames] for updates. + +[Bevy Cheatbook]: https://bevy-cheatbook.github.io +[bevy-cb-tutorial]: https://bevy-cheatbook.github.io/tutorial.html +[ghsponsors-inodentry]: https://github.com/sponsors/inodentry +[twitter-iyesgames]: https://twitter.com/IyesGames + +## Tooling Updates + +### [Bloom3D][bloom3d] + +![A screenshot of Bloom3D's interface and a simple low-polygon building.](bloom3d.jpg) + +[Bloom3D][bloom3d] is an extremely minimalist in-browser 3D modeling tool made +by [@kettlecorn](kettlecorn_twitter) +that released earlier this month. + +Bloom3D is built completely with Rust from the user interface to core algorithms. +The game engine and many of the libraries powering Bloom3D are open-sourced on [GitHub][koi]. + +[bloom3d]: https://bloom3d.com +[koi]: https://github.com/kettle11/koi + +### [Noumenal][noumenal-website] + +![The logo for Noumenal, a colorful cube with spheres on each corner and a +spherical hole in the center, and "Noumenal" written underneath.](noumenal.jpg) + +[Noumenal][noumenal-website] ([Discord][noumenal-discord], +[Twitter][noumenal-twitter]) by [@HackerFoo][hackerfoo-website] is a beautiful +and fast 3D modeling app for iOS. + +Noumenal officially went into [public beta][noumenal-beta] this week, and so was +presented to a larger audience for the first time. + +The goals of Noumenal are: + +- Enjoyable to use on a mobile device +- Accessible to as many people as possible +- Real-time solid modeling with boolean operations +- Non-destructive editing and robustness to prevent data loss +- Intuitive manipulation by projecting from the screen glass into 3D space +- Export to the most widely used formats, such as glTF, USDZ, and STL for 3D + printing + +These goals have led to a unique interface. + +[noumenal-website]: https://noumenal.app +[noumenal-discord]: https://discord.gg/PFeZQE48gG +[noumenal-twitter]: https://twitter.com/noumenal_app +[hackerfoo-website]: https://hackerfoo.com +[noumenal-beta]: https://testflight.apple.com/join/I6x5Yksx + +### [Graphite][graphite-website] + +![Graphite](graphite-node-graph.png) + +Graphite is an in-development raster and vector 2D graphics editor that is free +and open source. It will be powered by a node graph compositing engine that +supercharges your layer stack, providing a completely non-destructive editing +experience. + +With the completion of the node graph UX design, work has begun building the +frontend and backend systems for the big leap to node-driven vector editing. +This works by composing groups of Rust functions together at runtime and/or +compile time. [Watch the (brief) talk][graphite-gamedev-nodes-talk] about how +the backend implementation works around challenges imposed by Rust. + +New editor features this month include importing bitmap image layers and +customizing stroke styling with dashed lines and rounded or beveled corners. +The [project website][graphite-website] is also now mostly content-complete, +including new node graph mockups. + +Check out the [new website][graphite-website], try the +[Graphite editor][graphite-live-demo] right now in your browser, star on +[GitHub][graphite-repo], follow on [Twitter][graphite-twitter], and join the +[Discord][graphite-discord] to chat or get involved! + +[graphite-website]: https://graphite.rs +[graphite-gamedev-nodes-talk]: https://youtu.be/okWFrfaaADs?t=4014 +[graphite-live-demo]: https://editor.graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-discord]: https://discord.graphite.rs + +## Library Updates + +### [bevy_match3] + +![An animated gif depicting a simple match 3 game where gems are matched in sets of 3 or more and new gems drop down to take their place](bevy_match3_example.gif) + +[bevy_match3] ([GitHub](https://github.com/Sheepyhead/bevy_match3)) +by [@Sheepyhead](https://twitter.com/devsheepy) +is an event-based Bevy crate for handling the logic side of match 3 games so +you can worry about making everything else! + +This was recently released in its first public version, so there are several +parts to improve, and it could really use some battle testing. + +[bevy_match3]: https://crates.io/crates/bevy_match3 + +### [dos-like-rs] + +![Screenshot of example "rotozoom" from dos-like-rs, +depicting a rotating tile grid of Ferris.](doslike.png) + +[dos-like-rs] by [@E_net4] +provides Rust bindings to Mattias Gustavsson's `dos-like`, +a cross-platform framework for writing modern applications +with the look & feel of MS-DOS programs from the early 90's. + +A few technical details about the conception of these bindings +are presented in a [blog post on Dev.to][dos-like-rs-dev]. + +[dos-like-rs]: https://github.com/Enet4/dos-like-rs +[@E_net4]: https://twitter.com/E_net4 +[dos-like-rs-dev]: https://dev.to/e_net4/writing-bindings-to-dos-like-for-rust-some-lessons-learned-2p6k + +### [kira v0.6.0](https://github.com/tesselode/kira) + +[Kira] by [@tesselode] is a backend-agnostic library to create expressive audio +for games. It provides parameters for smoothly adjusting properties of sounds, a +flexible mixer for applying effects to audio, and a clock system for precisely +timing audio events. + +v0.6.0 is a complete rewrite with a more elegant API, support for streaming sounds, +swappable backends, and more flexible mixer routing. See the full [changelog] for +more details. + +_Discussions: [/r/rust], [twitter]_ + +[Kira]: https://github.com/tesselode/kira +[@tesselode]: https://twitter.com/tesselode +[changelog]: https://github.com/tesselode/kira/releases/tag/v0.6.0 +[/r/rust]: https://www.reddit.com/r/rust/comments/t984ss/kira_game_audio_library_v060_complete_rewrite +[twitter]: https://twitter.com/tesselode/status/1501213862988849152 + +### [screen-13 v0.2.1-alpha](https://github.com/attackgoat/screen-13) + +[Screen 13] is an easy-to-use 2D/3D rendering engine in the spirit of QBasic. The +library provides a thin Vulkan 1.1 driver using smart pointers and a fully-generic +render graph structure. + +Earlier this year [Screen 13] was updated with a dynamic graph pattern, but there +was no good starter documentation and a few bugs. There is a [getting started][s13-getting-started] +guide now! Also, a ton of new features have been added in the last month: + +- ImGui support +- Mac support +- Shader specialization + +For more details, see the [changelog][s13-change-log]. + +[Screen 13]: https://github.com/attackgoat/screen-13 +[s13-getting-started]: https://github.com/attackgoat/screen-13/blob/master/examples/getting-started.md +[s13-change-log]: https://github.com/attackgoat/screen-13/blob/master/CHANGELOG.md + +## Other News + + + +- Other game updates: + - [Space Frontiers] posted [a video][sf-video] of their Atmospherics update. +- Other learning material updates: + - [Hedgein] started a 'making one game per week' YouTube series. + +[Space Frontiers]: https://github.com/starwolves/space +[sf-video]: https://www.youtube.com/watch?v=EF5iUJNFz94 +[Hedgein]: https://www.youtube.com/watch?v=qufQVtlYqrQ + +## Requests for Contribution + + + +- [Graphite is looking for contributors][graphite-contribute] to help build the +new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[graphite-contribute]: https://github.com/GraphiteEditor/Graphite/issues/202 +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Jobs + + + +- [DIMS](https://www.dims.co/jobs) + (Stockholm/Remote) + - Tools Programmer + - Internship: Game Design +- [Embark Studios](https://careers.embark-studios.com/jobs) + (Stockholm/Hybrid Remote) + - Various roles + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/u1hfpf/this_month_in_rust_gamedev_32_march_2022/), +[Twitter](https://twitter.com/rust_gamedev/status/1513623277427728389), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/032/mechaburro.gif b/content/news/032/mechaburro.gif new file mode 100644 index 000000000..700242bf1 Binary files /dev/null and b/content/news/032/mechaburro.gif differ diff --git a/content/news/032/notan.jpg b/content/news/032/notan.jpg new file mode 100644 index 000000000..a4505e790 Binary files /dev/null and b/content/news/032/notan.jpg differ diff --git a/content/news/032/noumenal.jpg b/content/news/032/noumenal.jpg new file mode 100644 index 000000000..9f3b980a1 Binary files /dev/null and b/content/news/032/noumenal.jpg differ diff --git a/content/news/032/pettyparty.png b/content/news/032/pettyparty.png new file mode 100644 index 000000000..a0bc82aa5 Binary files /dev/null and b/content/news/032/pettyparty.png differ diff --git a/content/news/032/podcast.jpeg b/content/news/032/podcast.jpeg new file mode 100644 index 000000000..0e3134937 Binary files /dev/null and b/content/news/032/podcast.jpeg differ diff --git a/content/news/032/rust-nonogram.png b/content/news/032/rust-nonogram.png new file mode 100644 index 000000000..346422dc5 Binary files /dev/null and b/content/news/032/rust-nonogram.png differ diff --git a/content/news/032/spring_update_banner.png b/content/news/032/spring_update_banner.png new file mode 100644 index 000000000..c3f6e57e2 Binary files /dev/null and b/content/news/032/spring_update_banner.png differ diff --git a/content/news/032/terrain_generator.jpg b/content/news/032/terrain_generator.jpg new file mode 100644 index 000000000..fbe565ed8 Binary files /dev/null and b/content/news/032/terrain_generator.jpg differ diff --git a/content/news/032/veloren-steamdeck.jpg b/content/news/032/veloren-steamdeck.jpg new file mode 100644 index 000000000..8562b700e Binary files /dev/null and b/content/news/032/veloren-steamdeck.jpg differ diff --git a/content/news/032/vracer_screenshot.gif b/content/news/032/vracer_screenshot.gif new file mode 100644 index 000000000..4e83d16e1 Binary files /dev/null and b/content/news/032/vracer_screenshot.gif differ diff --git a/content/news/032/warlocks_gambit.jpg b/content/news/032/warlocks_gambit.jpg new file mode 100644 index 000000000..f82164706 Binary files /dev/null and b/content/news/032/warlocks_gambit.jpg differ diff --git a/content/news/032/wor-spotlight.jpg b/content/news/032/wor-spotlight.jpg new file mode 100644 index 000000000..c73adfaba Binary files /dev/null and b/content/news/032/wor-spotlight.jpg differ diff --git a/content/news/033/arcade_cabinet.gif b/content/news/033/arcade_cabinet.gif new file mode 100644 index 000000000..304f77b00 Binary files /dev/null and b/content/news/033/arcade_cabinet.gif differ diff --git a/content/news/033/bevy_mushroom.jpg b/content/news/033/bevy_mushroom.jpg new file mode 100644 index 000000000..1297162d0 Binary files /dev/null and b/content/news/033/bevy_mushroom.jpg differ diff --git a/content/news/033/bitgun-release-optimized.gif b/content/news/033/bitgun-release-optimized.gif new file mode 100644 index 000000000..05c2726c7 Binary files /dev/null and b/content/news/033/bitgun-release-optimized.gif differ diff --git a/content/news/033/brontefy-me.jpg b/content/news/033/brontefy-me.jpg new file mode 100644 index 000000000..409ca8cb8 Binary files /dev/null and b/content/news/033/brontefy-me.jpg differ diff --git a/content/news/033/dims.jpg b/content/news/033/dims.jpg new file mode 100644 index 000000000..f2d052d6a Binary files /dev/null and b/content/news/033/dims.jpg differ diff --git a/content/news/033/eldiron_screen.png b/content/news/033/eldiron_screen.png new file mode 100644 index 000000000..97a0f3f02 Binary files /dev/null and b/content/news/033/eldiron_screen.png differ diff --git a/content/news/033/extremely-extreme-sports.gif b/content/news/033/extremely-extreme-sports.gif new file mode 100644 index 000000000..a782ad84b Binary files /dev/null and b/content/news/033/extremely-extreme-sports.gif differ diff --git a/content/news/033/game-development-rust-webassembly.png b/content/news/033/game-development-rust-webassembly.png new file mode 100644 index 000000000..7dd570978 Binary files /dev/null and b/content/news/033/game-development-rust-webassembly.png differ diff --git a/content/news/033/gamedev-meetup.png b/content/news/033/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/033/gamedev-meetup.png differ diff --git a/content/news/033/graphite.png b/content/news/033/graphite.png new file mode 100644 index 000000000..4cbb61c39 Binary files /dev/null and b/content/news/033/graphite.png differ diff --git a/content/news/033/hotham.png b/content/news/033/hotham.png new file mode 100644 index 000000000..795286c7e Binary files /dev/null and b/content/news/033/hotham.png differ diff --git a/content/news/033/index.md b/content/news/033/index.md new file mode 100644 index 000000000..8beb70774 --- /dev/null +++ b/content/news/033/index.md @@ -0,0 +1,646 @@ ++++ +title = "This Month in Rust GameDev #33 - April 2022" +transparent = true +date = 2022-05-14 +draft = false ++++ + + + + + +Welcome to the 33rd 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Engine Updates](#engine-updates) +- [Learning Material Updates](#learning-material-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## Announcements + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 15th Rust Gamedev Meetup took place in April. You can watch the recording of +the meetup [here on Youtube][gamedev-meetup-video]. The meetups take place on +the second Saturday every month via the [Rust Gamedev Discord +server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. If you would like to show off what you've been +working on at the next meetup on [May 14th][rust-meetup-time], fill out [this +form][gamedev-meetup-form]. + +[gamedev-meetup-video]: https://youtu.be/okWFrfaaADs +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[rust-meetup-time]: https://everytimezone.com/s/1baaa280 +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 + +### Rust Graphics Meetup 2 + +The 2nd Rust Graphics Meetup will take place on the [21st of May, at 16:00 +UTC+0][graphics-meetup-time]. This meetup is a chance to show off what you've +been working on in the graphics community, or see what other people have been +doing! + +If you're interested in speaking, please fill out the +[form][graphics-meetup-form]. You can also [watch one of the +talks][rend3-graphics-meetup-talk] from the first meetup. + +[graphics-meetup-form]: https://forms.gle/DyvZ4WFZanTaLGGa7 +[graphics-meetup-time]: https://everytimezone.com/s/b6ec5c17 +[rend3-graphics-meetup-talk]: https://www.youtube.com/watch?v=F0wGz5UJTrY + +### RustConf Arcade Cabinet + +![arcade cabinet](arcade_cabinet.gif) + +[Carlo][carlosupina] is building a custom arcade cabinet that will be at +RustConf 2022 in Portland. It is an opportunity for Rust game developers to +share their games with the broader community. If you are interested in getting +your game on the cabinet, read [this Twitter thread][arcade-cabinet-thread] and +fill out the [interest form][arcade-interest-form]. + +[carlosupina]: https://twitter.com/carlosupina +[arcade-cabinet-thread]: https://twitter.com/carlosupina/status/1523715837726961664 +[arcade-interest-form]: https://forms.gle/onFm5fCygdbiArqJ7 + +## Game Updates + +### [Way of Rhea][wor] + +![way of rhea capsule image](wor-capsule.jpg) + +[Way of Rhea][wor] is a puzzle adventure with hard puzzles and forgiving +mechanics being produced by [@masonremaley][wor-mason-remaley] in a custom Rust +engine. It has a demo available [on Steam][wor]. + +Way of Rhea was recently [shown off at PAX East!][wor-pax] A [minor +patch][wor-update] has been released to the demo with post-PAX fixes: + +- An issue that made the last puzzle in the third forest level difficult to +navigate with a controller was worked around +- Colliders in the Hermes puzzle were fixed (previously you could land on top of +a gate if you held left while sliding) +- The attract mode that was used at PAX has been merged (not in demo) +- More jungle biome scenery has been placed (not in demo) +- A crash at startup on CPUs that don't support the `andn` instruction was fixed +(part of the BMI extension to x64) +- The game can now generate mini dumps on Windows and Linux in the event that it +crashes and if given consent, forward them to the developer for analysis + +You can stay up to date with the latest Way of Rhea developments by [following +it on Steam][wor], signing up for [their mailing list][wor-newsletter], or +joining [their Discord][wor-discord]. + +[wor]: https://store.steampowered.com/app/1110620/Way_of_Rhea/?utm_campaign=tmirgd&utm_source=n33 +[wor-pax]: https://twitter.com/AnthropicSt/status/1517129411790843905 +[wor-update]: https://steamcommunity.com/games/1110620/announcements/detail/3175611379276019942?utm_campaign=tmirgd&utm_source=n32&utm_content=news +[wor-mason-remaley]: https://twitter.com/masonremaley +[wor-newsletter]: https://www.anthropicstudios.com/newsletter/signup +[wor-discord]: https://discord.gg/JGeVt5XwPP + +### BITGUN + +{{ image_figure( + alt="BITGUN gameplay" + src="https://github.com/bitgun-release-optimized.gif" + caption="BITGUN gameplay") }} + +[BITGUN] ([Discord], [Twitter]) by [@darth] and [@shosanna] is an action +roguelite zombie shooter with difficult and satisfying combat you can learn and +master. Guns break quickly and you lose all your gear when you die. + +The game was just released on Steam! It has been developed by a programming duo +called LogLog Games. They have been working on it for the past year and it is +their biggest game so far (they also have 2 smaller games). [BITGUN] is written +in Godot Engine but it is using Rust language extensively (it has around 7500 +lines of Rust and 4200 lines of GDScript). + +The main changes from the demo version of the game: + +- New missions added with extra difficulty +- Improved AI which doesn't just chase the player but behaves unpredictably +- New zombie types - ranged zombie, big spider, zombie spawner +- Added comic-book style story +- Improved tutorial and new player experience +- Reworked inventory system with simplified armor + +_Discussion: [/r/rust](https://www.reddit.com/r/rust/comments/uepde7/after_working_on_our_godot_rust_game_fulltime_for/)_ + +[BITGUN]: https://store.steampowered.com/app/1673940/BITGUN/ +[Twitter]: https://twitter.com/LogLogGames +[Discord]: https://discord.com/invite/XrGZQkq +[@shosanna]: https://github.com/shosanna +[@darth]: https://github.com/darthdeus + +### [Veloren][veloren] + +{{ image_figure( + alt="Riding at night" + src="https://github.com/veloren.jpg" + caption="Out for a ride at night") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +For April Fool's day, Veloren made a post about a new direction; [Need for +Voxels: Veloren Cart][veloren-cart]. Enjoy the read! Veloren also participated +in Reddit's /r/place, and got a small place right below /r/rust. Several months +of project finances were processed, and [discussed in a blog +post][veloren-finances]. The [Veloren Reading Club saw its 8th +episode][veloren-reading-club-8], which was on the topic of graphics and +particles. A [second Veloren Code Review session][veloren-code-review-2] was +held, in which two developers went through a merge request that focused on +combat numbers. + +Work was done to improve how loadouts work, specifically surrounding inheritance +from other configs. Tweaks were made to arthropods, which should make them more +fun to fight. Work is being done to prepare for the 0.13 release, with a custom +map being built, and a special treasure map being created for the launch party. +Player bank storages are being developed, which will allow players to store +excess items in towns. + +April's full weekly devlogs: "This Week In Veloren...": +[#166][veloren-166], +[#167][veloren-167], +[#168][veloren-168], +[#169][veloren-169]. + +[veloren]: https://veloren.net + +[veloren-cart]: https://veloren.net/veloren-direction/ +[veloren-finances]: https://veloren.net/devblog-167#finances-by-angelonfira +[veloren-reading-club-8]: https://www.youtube.com/watch?v=ff9EXhCXmFY +[veloren-code-review-2]: https://www.youtube.com/watch?v=keI0VpjkgZg + +[veloren-166]: https://veloren.net/devblog-166 +[veloren-167]: https://veloren.net/devblog-167 +[veloren-168]: https://veloren.net/devblog-168 +[veloren-169]: https://veloren.net/devblog-169 + +### Oasis of Lost Hope + +![Oasis of Lost Hope](oasis-of-lost-hope.jpg) + +Oasis of Lost Hope is a game where fertile ground is steadily consumed by dark, +barren land called blight. Water helps defend an area from being consumed, but +reserves are finite. The player needs to collect ore to build more irrigation +towers and delay doom for a few more seconds. Yet one thing is certain: the days +of fertile land are counted. + +The game is an entry for the Ludum Dare 50 Jam, the theme of which was "Delay +the Inevitable". It has been developed by setzer22 and Bromeon and [open-sourced +on GitHub][oasis-gh]. The game is built on top of godot-rust alongside GDScript. +The Rust language is not exactly known for fast prototyping, but with a slightly +less safety-conservative fork of godot-rust, the game jam experience was +surprisingly smooth. When modeling mechanics such as the expanding blight or the +water pipe network, Rust really showed its strength as a strongly typed and fast +language. + +[oasis-gh]: https://github.com/Bromeon/LudumDare50 + +### [Extremely Extreme Sports][ees-itch] + +![Extremely Extreme Sports](extremely-extreme-sports.gif) + +[Extremely Extreme Sports][ees-itch] ([GitHub][ees-github], +[Discord][ees-discord]) is a multiplayer online downhill racing game [made for +Ludum Dare 50 game jam][ees-ldjam], scored top 3 in fun. Explode the mountain, +and race against the avalanche as well as your friends. + +Features: + +- Online multiplayer +- Character customization +- Emoting +- A little bit of gameplay + +Developed by [@kuviman] using [custom engine][ees-geng]. A [postmortem blog +post][ees-postmortem] was written about the jam experience, and it includes +postjam updates. + +_Discussions: [/r/rust_gamedev][ees-reddit]_ + +[ees-ldjam]: https://ldjam.com/events/ludum-dare/50/extremely-exteme-sports +[ees-itch]: https://kuviman.itch.io/extremely-extreme-sports +[ees-github]: https://github.com/kuviman/extremely-extreme-sports +[ees-geng]: https://github.com/kuviman/geng +[ees-postmortem]: https://kuviman.itch.io/extremely-extreme-sports/devlog/372532/extremely-extreme-sports-postmortem +[ees-reddit]: https://www.reddit.com/r/rust_gamedev/comments/u9zqrc/scored_top_3_in_fun_with_my_ludum_dare_game/ +[ees-discord]: https://discord.gg/DZaEMPpANY +[@kuviman]: https://github.com/kuviman + +## Engine Updates + +### [Bevy v0.7][bevy-blog] + +{{ image_figure( + alt="bevy mushroom" + src="https://github.com/bevy_mushroom.jpg" + caption="Creative Commons 'Stylized mushrooms' scene by QumoDone rendered in Bevy.") }} + +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. It +is [free and open source][bevy-git] forever! + +Bevy 0.7 was a massive community effort. You can check out the [full release +blog post here][bevy-blog], but here are some highlights: + +- [Skeletal animation and mesh skinning][bevy-animation] +- [GLTF animation importing][bevy-gltf] +- [Unlimited* point lights in a scene][bevy-unlimited] +- [Improved clustered forward rendering: dynamic/adaptive clustering and faster, + more accurate cluster assignment][bevy-light-opt] +- [Compressed texture support (KTX2 / DDS / .basis): load more textures in a + scene, faster][bevy-compressed] +- [Compute shader / pipeline specialization: Bevy's flexible shader system was + ported to compute shaders, enabling hot-reloading, shader defs, and shader + imports][bevy-compute] +- [Render to texture: cameras can now be configured to render to a texture + instead of a window][bevy-render-texture] +- [Flexible mesh vertex layouts in shaders][bevy-vertex] +- [ECS improvements: Order systems using their names, Query::many_mut, use + conflicting parameters in systems via ParamSets, WorldQuery derives][bevy-ecs] +- [Documentation improvements: better examples, more doc tests, and more + coverage][bevy-docs] +- [More audio control: pause, volume, speed, and looping][bevy-audio] +- [Power usage options to enable only updating Bevy Apps when input + occurs][bevy-power] + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/u4e63h/bevy_07/), +[Hacker News](https://news.ycombinator.com/item?id=31043668), +[Twitter](https://twitter.com/cart_cart/status/1515031150313443332)_ + +[bevy]: https://bevyengine.org +[bevy-git]: https://github.com/bevyengine/bevy +[bevy-blog]: https://bevyengine.org/news/bevy-0-7 +[bevy-animation]: https://bevyengine.org/news/bevy-0-7/#skeletal-animation +[bevy-gltf]: https://bevyengine.org/news/bevy-0-7/#gltf-animation-importing +[bevy-unlimited]: https://bevyengine.org/news/bevy-0-7/#unlimited-point-lights +[bevy-light-opt]: https://bevyengine.org/news/bevy-0-7/#light-clustering-features-and-optimizations +[bevy-compressed]: https://bevyengine.org/news/bevy-0-7/#compressed-gpu-textures +[bevy-compute]: https://bevyengine.org/news/bevy-0-7/#bevy-native-compute-shaders +[bevy-render-texture]: https://bevyengine.org/news/bevy-0-7/#render-to-texture +[bevy-vertex]: https://bevyengine.org/news/bevy-0-7/#flexible-mesh-vertex-layouts +[bevy-ecs]: https://bevyengine.org/news/bevy-0-7/#ergonomic-system-ordering +[bevy-docs]: https://bevyengine.org/news/bevy-0-7/#documentation-improvements +[bevy-audio]: https://bevyengine.org/news/bevy-0-7/#audio-control +[bevy-power]: https://bevyengine.org/news/bevy-0-7/#eventloop-power-saving-modes + +### Dims + +{{ image_figure( + alt="dims foliage" + src="https://github.com/dims.jpg" + caption="Foliage rendering in Dims") }} + +Dims is an open-world creation platform. + +In their latest [dev log][dims-dev-log] they demonstrate a new foliage rendering +and spawning system, which automatically spawns foliage and trees based on +"habitat rules". This means a user can simply "paint" a world and it will get +populated with plants and rocks automatically. + +They are also planning to host a screenshot competition in the next few weeks +for anyone who would like to try out the platform and create their own +landscapes. Sign up for the newsletter on their website to get notified when it +starts! + +_Discussions: +[Foliage rendering on reddit][dims-foliage], +[Erosion tool on reddit][dims-erosion-tool]_ + +[Website]: https://dims.co +[Twitter]: https://twitter.com/DimsWorlds +[Discord]: https://discord.gg/Z5CAVmNE57 +[dims-dev-log]: https://www.youtube.com/watch?v=jgkhsY8aZO8 +[dims-foliage]: https://www.reddit.com/r/rust_gamedev/comments/ujhr3c/the_start_of_a_tool_that_lets_you_tweak_how_and/ +[dims-erosion-tool]: https://www.reddit.com/r/rust_gamedev/comments/tuj9dg/far_from_finished_but_heres_our_terrain_tool/ + +### [Eldiron] + +{{ image_figure( + alt="Eldiron Image" + src="https://github.com/eldiron_screen.png" + caption="Behavior Nodes of Eldiron") }} + +[Eldiron] ([GitHub][eldiron-github], [Discord][eldiron-discord], +[Twitter][eldiron-twitter]) by [@markusmoenig] is a creator for classic role +playing games (RPGs) written in Rust. + +Eldiron v0.5 features inbuild tilemaps, a node-based behavior system and region +editors. + +Development Updates in April: + +- Support for 4 layers of tiles for game regions. This enables transparency and + support for top-down and isometric views. +- Game regions can now contain named areas. +- Areas can contain behavior nodes to spawn monsters, lay traps, or displace + tiles (for example to open a door). +- New "Systems" module to create behavior for Combat and soon for Crafting, + Magic and more. System behavior trees can be called from any character. + +Eldiron v1 will be able to create any kind of RPG utilizing square tiles, like +the classical Ultima series. + +[Eldiron]: https://www.eldiron.com +[eldiron-github]: https://github.com/markusmoenig/Eldiron +[eldiron-discord]: https://discord.gg/ZrNj6baSZU +[eldiron-twitter]: https://twitter.com/MarkusMoenig +[@markusmoenig]: https://github.com/markusmoenig + +### [Hotham][hotham] + +{{ image_figure( + alt="Hotham Image" + src="https://github.com/hotham.png" + caption="Screenshot from The Station, an upcoming space station simulation game, built with Hotham") }} + +[Hotham][hotham] is a game engine for standalone VR devices, trying to make VR +development just a little bit less painful. + +0.2 has been released with some _breathtaking_ maintenance and performance +improvements that make Hotham marginally easier to use. If you're interested in +Rust and VR and haven't checked out the project already, now is an excellent +time to do so. + +A huge thank you to our sponsors and contributors (big hat-tip to @jmgao) and +the wonderful members of the [Hotham discord][hotham-discord]. + +[hotham]: https://github.com/leetvr/hotham +[hotham-discord]: https://discord.gg/SZEZUX6ZsQ + +## Learning Material Updates + +### [Game Development with Rust and WebAssembly][wasm-gamedev] + +![Game Development with Rust and WebAssembly Book Cover](game-development-rust-webassembly.png) + +[Game Development with Rust and WebAssembly][wasm-gamedev] by Eric Smith (a.k.a +[@paytonrules][wasm-gamedev-twitter]) was published in April. It takes a +tutorial approach to lead the reader through building an endless runner using +Rust and WebAssembly. You can play the completed game [here][wasm-gamedev-game]. + +From the summary: This book is an easy-to-follow reference to help you develop +your own games, teaching you all about game development and how to create an +endless runner from scratch. You'll begin by drawing simple graphics in the +browser window, and then learn how to move the main character across the screen. +You'll also create a game loop, a renderer, and more, all written entirely in +Rust. After getting simple shapes onto the screen, you'll scale the challenge by +adding sprites, sounds, and user input. As you advance, you'll discover how to +implement a procedurally generated world. Finally, you'll learn how to keep your +Rust code clean and organized so you can continue to implement new features and +deploy your app on the web. + +_Discussions: [Twitter][wasm-gamedev-twitter], [Discord](https://discord.gg/EjAunSbpdV)_ + +[wasm-gamedev]: https://subscription.packtpub.com/product/game_development/9781801070973 +[wasm-gamedev-twitter]: https://www.twitter.com/paytonrules +[wasm-gamedev-game]: https://rust-games-webassembly.netlify.app + +### [Why I choose to build my game from scratch][why-article] + +[@HeavyRain266] published an article, '[Why I choose to build my game from +scratch][why-article]', a short story about their implementation of the game +'Forbidden Valley' from scratch in Rust. The author aims to show how much you +can learn from building your dream game without the help of any game engine. + +_Discussions: [r/rust_gamedev][why-article]_ + +[@HeavyRain266]: https://github.com/HeavyRain266 +[why-article]: https://www.reddit.com/r/rust_gamedev/comments/uewu9h/reasons_why_i_choose_to_build_my_game_from/ + +### [Brontefy Me][brontefy-me-episode-1] + +![devlog logo](brontefy-me.jpg) + +@hedgein ([GitHub][hedgein-github], [Twitch][hedgein-twitch]) started a devlog +series called Brontefy Me. This series walks through the development of games in +the [Bevy engine][bevy]. There are two episodes released so far. The [first +episode][brontefy-me-episode-1] focuses on getting up and running with the +engine, and the [second episode][brontefy-me-episode-2] starts expanding into +game mechanics. + +[brontefy-me-episode-1]: https://www.youtube.com/watch?v=DdD6VhmEIiU +[brontefy-me-episode-2]: https://www.youtube.com/watch?v=tx31BKX0yIA +[hedgein-github]: https://github.com/hedgein +[hedgein-twitch]: https://twitch.tv/hedgein + +## Tooling Updates + +### [Vismut 0.5][vismut-0.5] + +![Logo](vismut.png) + +[Vismut] ([GitLab][Vismut], [Zulip][vismut-zulip]) by [@lukors] will be a +procedural texturing tool. + +[Version 0.5][vismut-0.5] contains a brand new backend to create a better base +for future improvements. A [blog post][vismut-blog] describes the differences +between the old and the new architecture. + +[@lukors]: https://gitlab.com/lukors +[vismut-0.5]: https://gitlab.com/vismut-org/vismut/-/releases/v0.5.0 +[Vismut]: https://gitlab.com/vismut-org/vismut +[vismut-zulip]: https://vismut.zulipchat.com +[vismut-blog]: https://orsvarn.com/vismut-architecture/ + +### [Graphite][graphite-website] + +![Graphite](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free +in-development raster and vector 2D graphics editor. It will be powered by a +node graph compositing engine that supercharges your layer stack, providing a +completely non-destructive editing experience. + +The past month's Sprint 14 has focused on further editor features and UX +improvements: + +- **It's your type:** The Text tool now provides over 1400 fonts with +bold/italic styles from the Google Fonts library. + +- **Oh snap!:** A refactor and polish pass on the snapping system provides +better clarity and consistency. And shapes now have outlines on hover and +selection for easier targeting. + +- **Have a dialog:** Supported by a refactor that moved dialog layouts into the +Rust backend, users can now create new documents of specified sizes and export +artwork as PNG/JPG with new File menu dialogs. + +- **Pack it up:** The web component of the stack was finally upgraded to Webpack +5 which cleans up a mess of outdated dependencies. + +[Open the editor][graphite-live-demo] in your browser and give it a try. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-live-demo]: https://editor.graphite.rs + +## Library Updates + +### [Notan v0.3.0][Notan] + +![notan](notan.jpeg) + +[Notan] is a simple and portable layer designed to create your own multimedia +apps on top of it without worrying about platform-specific code. + +The main goal is to provide a set of APIs and tools that can be used to create +your project in an ergonomic manner without enforcing any structure or pattern, +always trying to stay out of your way. The idea is that you can use it as a +foundation layer or backend for your next app, game engine, or game. + +The latest version [v0.3.0] comes with audio support for all platforms using as +default backend [oddio] and [symphonia]. + +[Notan]: https://github.com/Nazariglez/notan +[v0.3.0]: https://github.com/Nazariglez/notan/releases/tag/v0.3.0 +[oddio]: https://github.com/Ralith/oddio +[symphonia]: https://github.com/pdeljanov/Symphonia + +## Other News + + + +- Other game updates: + - [Last of the Sky Folk](https://ianjk.com/ld50) is a grapple-hook based + platformer created for LD50. + - [Heute Nicht] rythm game is another LD50 submission. +- Other learning material updates + - PhaestusFox started a [Bevy tutorial servies][PhaestusFox-vid-1] and [0.6 to + 0.7 Migration Guide][PhaestusFox-vid-2] YouTube series. + - [@TantanDev] released a ["Rust multi-threading code review"][tantan-video] + video. +- Other library updates: + - [tween](https://github.com/sanbox-irl/tween) is an std-optional tweening + library, designed for use in games and animations. + - [cosync](https://github.com/sanbox-irl/cosync) provides a single-threaded, + sequential, parameterized async runtime. + - [SuInput](https://github.com/Sorenon/Action-System) is an input system + designed to give pancake and XR applications access to a huge range of input + devices while minimizing the amount of complexity needed to support them. + - [bevy_blender v0.2] with lots of new features is out. + +[Heute Nicht]: https://eira-hx.itch.io/heute-nicht +[PhaestusFox-vid-1]: https://reddit.com/r/rust_gamedev/comments/tz75eb/bevy_game_engine_tutorial_series +[PhaestusFox-vid-2]: https://reddit.com/r/rust_gamedev/comments/u4uhs2/bevy_06_to_07_migration_guide +[@TantanDev]: https://twitter.com/TantanDev +[tantan-video]: https://youtube.com/watch?v=jkHqrkcEHRc +[bevy_blender v0.2]: https://reddit.com/r/rust_gamedev/comments/u7acfc/update_on_bevy_blender_releasing_v02_and_inquiry + +## Requests for Contribution + +- [Graphite is looking for contributors][graphite-contribute] to help build the +new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[graphite-contribute]: https://github.com/GraphiteEditor/Graphite/issues/202 +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Jobs + +- [DIMS](https://www.dims.co/jobs) + (Stockholm/Remote) + - Tools Programmer + - Internship: Game Design +- [Embark Studios](https://careers.embark-studios.com/jobs) + (Stockholm/Hybrid Remote) + - Various roles + +------ + +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/content/news/033/notan.jpeg b/content/news/033/notan.jpeg new file mode 100644 index 000000000..e97d36fd6 Binary files /dev/null and b/content/news/033/notan.jpeg differ diff --git a/content/news/033/oasis-of-lost-hope.jpg b/content/news/033/oasis-of-lost-hope.jpg new file mode 100644 index 000000000..66ec04ad2 Binary files /dev/null and b/content/news/033/oasis-of-lost-hope.jpg differ diff --git a/content/news/033/veloren.jpg b/content/news/033/veloren.jpg new file mode 100644 index 000000000..c9a5ef5ae Binary files /dev/null and b/content/news/033/veloren.jpg differ diff --git a/content/news/033/vismut.png b/content/news/033/vismut.png new file mode 100644 index 000000000..a9ae1b61d Binary files /dev/null and b/content/news/033/vismut.png differ diff --git a/content/news/033/wor-capsule.jpg b/content/news/033/wor-capsule.jpg new file mode 100644 index 000000000..eb47a1933 Binary files /dev/null and b/content/news/033/wor-capsule.jpg differ diff --git a/content/news/034/arcade_cabinet.png b/content/news/034/arcade_cabinet.png new file mode 100644 index 000000000..3d32e5f34 Binary files /dev/null and b/content/news/034/arcade_cabinet.png differ diff --git a/content/news/034/battleship.gif b/content/news/034/battleship.gif new file mode 100644 index 000000000..e8fd0a51c Binary files /dev/null and b/content/news/034/battleship.gif differ diff --git a/content/news/034/bevy-material-series.png b/content/news/034/bevy-material-series.png new file mode 100644 index 000000000..bd29f6678 Binary files /dev/null and b/content/news/034/bevy-material-series.png differ diff --git a/content/news/034/bevy_silk.png b/content/news/034/bevy_silk.png new file mode 100644 index 000000000..7e708db00 Binary files /dev/null and b/content/news/034/bevy_silk.png differ diff --git a/content/news/034/bloom.jpg b/content/news/034/bloom.jpg new file mode 100644 index 000000000..14658ac51 Binary files /dev/null and b/content/news/034/bloom.jpg differ diff --git a/content/news/034/book-multiplayer.png b/content/news/034/book-multiplayer.png new file mode 100644 index 000000000..bf961468b Binary files /dev/null and b/content/news/034/book-multiplayer.png differ diff --git a/content/news/034/cnc-preview.png b/content/news/034/cnc-preview.png new file mode 100644 index 000000000..3a4e87065 Binary files /dev/null and b/content/news/034/cnc-preview.png differ diff --git a/content/news/034/country_slice.gif b/content/news/034/country_slice.gif new file mode 100644 index 000000000..bcd1f4e87 Binary files /dev/null and b/content/news/034/country_slice.gif differ diff --git a/content/news/034/dims-video-preview.jpg b/content/news/034/dims-video-preview.jpg new file mode 100644 index 000000000..8ed97b01d Binary files /dev/null and b/content/news/034/dims-video-preview.jpg differ diff --git a/content/news/034/fyrox.png b/content/news/034/fyrox.png new file mode 100644 index 000000000..e773192dc Binary files /dev/null and b/content/news/034/fyrox.png differ diff --git a/content/news/034/gamedev-meetup.png b/content/news/034/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/034/gamedev-meetup.png differ diff --git a/content/news/034/gfs-youtube-preview.jpg b/content/news/034/gfs-youtube-preview.jpg new file mode 100644 index 000000000..cf1d6b9f2 Binary files /dev/null and b/content/news/034/gfs-youtube-preview.jpg differ diff --git a/content/news/034/graphics-meetup.jpg b/content/news/034/graphics-meetup.jpg new file mode 100644 index 000000000..f34595e97 Binary files /dev/null and b/content/news/034/graphics-meetup.jpg differ diff --git a/content/news/034/graphite.png b/content/news/034/graphite.png new file mode 100644 index 000000000..e05688259 Binary files /dev/null and b/content/news/034/graphite.png differ diff --git a/content/news/034/hgs34.jpg b/content/news/034/hgs34.jpg new file mode 100644 index 000000000..544b84ee1 Binary files /dev/null and b/content/news/034/hgs34.jpg differ diff --git a/content/news/034/hug.jpg b/content/news/034/hug.jpg new file mode 100644 index 000000000..23fe23c12 Binary files /dev/null and b/content/news/034/hug.jpg differ diff --git a/content/news/034/index.md b/content/news/034/index.md new file mode 100644 index 000000000..4a8bfbc5c --- /dev/null +++ b/content/news/034/index.md @@ -0,0 +1,974 @@ ++++ +title = "This Month in Rust GameDev #34 - May 2022" +transparent = true +date = 2022-06-08 +draft = false ++++ + + + + + +Welcome to the 34th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## Announcements + +### Rust Graphics Meetup 2 + +[![Graphics meetup speakers](graphics-meetup.jpg)][graphics-meetup-playlist] + +The 2nd Rust Graphics Meetup took place on the 21st of May. The videos of the +talks have been released: + +- [Vismut][vismut-talk] - [Lukas Orsvärn] +- [Screen-13][screen-10-talk] - [John Wells] +- [Optimizing wgpu with Data Driven Design][wgpu-talk] - [Connor Fitzgerald] + +[vismut-talk]: https://youtube.com/watch?v=0IsllXP7_pY +[screen-10-talk]: https://youtube.com/watch?v=ywZznsCXUjs +[wgpu-talk]: https://youtube.com/watch?v=DDG4bcGs7zM +[Lukas Orsvärn]: https://github.com/lukors +[John Wells]: https://github.com/attackgoat/screen-13 +[Connor Fitzgerald]: https://github.com/cwfitzgerald +[graphics-meetup-playlist]: https://youtube.com/watch?v=DDG4bcGs7zM&list=PLYiOdhpKxxXJwaocrJcOCoBhlV6foaO8F&index=4 + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 16th Rust Gamedev Meetup took place in May. You can watch the recording of +the meetup [here on Youtube][gamedev-meetup-video]. Here was the schedule from +the meetup: + +- RustConf Arcade Cabinet - [@carlosupina] +- Puzzle platformer - [@tesselode] +- Veloren - [@AngelOnFira] +- Graphite - [@GraphiteEditor] + +The meetups take place on the second Saturday every month via the [Rust Gamedev +Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. If you would like to show off what you've been +working on at the next meetup on [June 11th][rust-meetup-time], fill out [this +form][gamedev-meetup-form]. + +[gamedev-meetup-video]: https://youtu.be/XOpZIzmFifk +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[rust-meetup-time]: https://everytimezone.com/s/ffc60181 +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 + +[@carlosupina]: https://twitter.com/carlosupina +[@tesselode]: https://twitter.com/tesselode +[@AngelOnFira]: https://twitter.com/AngelOnFira +[@GraphiteEditor]: https://twitter.com/graphiteeditor + +### 3D Ferris + +![colorful render of a 3d model of Ferris with additional wireframe view](raymarch_ferris_3d.jpg) + +[@RayMarch][raymarch-twitter] is +creating a game-ready 3D model of [Ferris the Rustacean][ferris]. These links +provide a more detailed look: +[360 overview][raymarch-twitter-360], +[Ferris dancing][raymarch-twitter-dance]. + +Once the model is finished, it will be published under a permissive license on +[GitHub][raymarch-github], so you can use it in your 3D game, +rendering demo, v-tuber avatar, you name it! + +If you have any feedback feel free to share on [Discord][raymarch-gamedev-discord]. + +_Discussions: [Twitter][raymarch-twitter-dance]_ + +[ferris]: https://rustacean.net/ +[raymarch-twitter]: https://twitter.com/Ray__March +[raymarch-twitter-dance]: https://twitter.com/Ray__March/status/1523717266730151936 +[raymarch-twitter-360]: https://twitter.com/Ray__March/status/1512907700740444163 +[raymarch-github]: https://github.com/RayMarch +[raymarch-gamedev-discord]: https://discord.com/channels/676678179678715904/974371568975216700 + +### RustConf Arcade Cabinet + +![arcade cabinet](arcade_cabinet.png) + +[Carlo][carlosupina] is building a custom arcade cabinet that will be at +RustConf 2022 in Portland. It is an opportunity for Rust game developers to +share their games with the broader community. If you are interested in getting +your game on the cabinet, read [this Twitter thread][arcade-cabinet-thread] and +fill out the [interest form][arcade-interest-form]. +All of the parts for the cabinet are currently in production, +and art for the sides is in progress. +Check out the latest update [here][arcade-cabinet-update-thread]. + +[carlosupina]: https://twitter.com/carlosupina +[arcade-cabinet-thread]: https://twitter.com/carlosupina/status/1523715837726961664 +[arcade-cabinet-update-thread]: https://twitter.com/carlosupina/status/1532717151240323072 +[arcade-interest-form]: https://forms.gle/onFm5fCygdbiArqJ7 + +## Game Updates + +### [Battleship] + +![Gameplay demo](battleship.gif) + +[Battleship] by [@orhun] is the [battleship game] implemented in Rust. + +Features: + +- Fully playable between 2 players on the terminal. +- No installation required. +- Works over TCP sockets. +- Very lightweight to host your own server (only has 1 dependency). + +[Battleship]: https://github.com/orhun/battleship-rs +[battleship game]: https://en.wikipedia.org/wiki/Battleship_(game) +[@orhun]: https://github.com/orhun/ + +### [ROOM4DOOM][room4doom] + +[![A screenshot of gameplay action in ROOM4DOOM.](room4doom.jpg)][room4doom] + +[ROOM4DOOM][room4doom] is a rewrite of the classic Doom engine in Rust with some +modernisation. + +[@flukejones][flukejones_twitter] has been very busy in the last 4 months completing +many parts of ROOM4DOOM; rendering, subsystems for menus, status bar, intermissions, +and of course the actual gameplay - you can now complete Doom 1 in ROOM4DOOM. + +A recent Twitter thread has been cleaned up and expanded into a blog post providing +context to the project and a walk-through of the history. +You can view that [here][room4doom_blog]. + +[room4doom]: https://gitlab.com/flukejones/room4doom +[flukejones_twitter]: https://twitter.com/flukejones +[room4doom_blog]: https://ljones.dev/blog/room4doom-20220529/ + +### [limbo_pass] + +![a ghost, stuck in limbo, on a mountain pass](limbo-pass.png) + +[limbo_pass] by [@shnewto] is a little 3D walking sim in Bevy that uses +scenes, meshes, and materials exported directly from Blender. + +Features include: + +- Blender assets exported to glTF +- Collision detection with [bevy_rapier3d] +- Looping audio with [bevy_kira_audio] + +For more info, see the [announcement post][limbo_pass_announce] and the +[gameplay video][limbo_pass_gameplay]. + +[limbo_pass_announce]: https://twitter.com/shnewto/status/1520897809968340992 +[limbo_pass_gameplay]: https://youtu.be/gxUesnuTBBI +[limbo_pass]: https://github.com/shnewto/limbo_pass +[@shnewto]: https://github.com/shnewto/ +[bevy_rapier3d]: https://github.com/dimforge/bevy_rapier +[bevy_kira_audio]: https://github.com/NiklasEi/bevy_kira_audio + +### [Hydrofoil Generation] + +![hgs_screen](hgs34.jpg) + +[Hydrofoil Generation] +([Steam][hgs_steam], [Facebook][hgs_facebook], [Discord][hgs_discord]) +is a realistic sailing/foiling inshore simulator in development for PC/Steam +that will put you in the driving seat of modern competitive sailing. +Hydrofoil Generation is based on a custom made DirectX 11 based engine. + +A new [trailer][hgs_trailer] just landed showcasing new animations, the new +Hong Kong location, and camera modes. + +Meanwhile, private beta-testing is well underway with good feedback regarding +boat controls and physics, netcode, and software stability, Rust for sure +delivered on all the promises here. + +The first set of Sailing rules has also been implemented and part of the +current beta testing process with more rules to be added in the next months. + +Sadly the target Q2 2022 Early Access release on Steam couldn't be hit and +now the team is aiming at a Q4 2022 release. + +[Hydrofoil Generation]: https://hydrofoil-generation.com/ +[hgs_facebook]: https://facebook.com/HydrofoilGenerationSailing/ +[hgs_discord]: https://discord.gg/DtKgt2duAy/ +[hgs_steam]: https://store.steampowered.com/app/1448820/Hydrofoil_Generation/ +[hgs_trailer]: https://youtu.be/oFtFdmnkkSI + +### Country Slice + +![Country_slice_gif](country_slice.gif) + +Country Slice (WIP name) is a relaxing building game being made by [@anastasiaopara]. + +This month, she added an animated undo system. You can find more details in this +[Twitter thread][country-slice-twitter], and follow the [newsletter][country-slice-newsletter] +for more updates. + +[country-slice-newsletter]: https://dashboard.mailerlite.com/forms/10395/51067704544593017/share +[country-slice-twitter]: https://twitter.com/anastasiaopara/status/1530473522224582656 +[@anastasiaopara]: https://twitter.com/anastasiaopara + +### [Way of Rhea][wor] + +[![way of rhea capsule image](wor-capsule.jpg)][wor] + +[Way of Rhea][wor] is a puzzle adventure with hard puzzles and forgiving +mechanics being produced by [@masonremaley][wor-mason-remaley] in a custom Rust +engine. You can support development by [wishlisting the game on Steam][wor], and +[giving feedback][wor-forum] on the Steam demo. + +Way of Rhea was selected to be part of the Cerebral Puzzle Showcase! The event +is over, you can still find the +[list of games and some of the demos here][wor-cps]. Recent updates: + +- More work was done on the [Jungle Biome visuals][wor-jungle] +- Dynamic gradient overlays were added to the engine to give a sense of depth +- Fixed bug where Nvidia drivers would incorrectly trigger the crash dump writer +- Fixed a long-running draw call sorting problem that could lead to popping +- Fixed an audio failure when unplugging the active speaker + +[wor]: https://store.steampowered.com/app/1110620/Way_of_Rhea/?utm_campaign=tmirgd&utm_source=n34 +[wor-mason-remaley]: https://twitter.com/masonremaley +[wor-forum]: https://steamcommunity.com/app/1110620/discussions/0/3275817732933009791/ +[wor-cps]: https://store.steampowered.com/sale/CerebralPuzzleShowcase +[wor-jungle]: https://store.steampowered.com/news/app/1110620?emclan=103582791465120432&emgid=3180116240852440293 + +### [Veloren][veloren] + +{{ image_figure( + alt="Flying down a mountain" + src="https://github.com/veloren.jpg" + caption="A glorious flight to distant lands") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In May, work was done on Wyvern models. Smoke was improved from houses, and now +has different colours and strengths. A rib cage generator was added, so now +there are large bone structures from ancient times around the world. Level of +detail objects were added, so trees can now be seen on far-off mountains. This +makes the world feel significantly more alive. A lot of work was done on the +performance of the game server, as Veloren has been seeing over 100 concurrent +players at peak on the server nearly every day for the past few weeks. + +Lots of work was done on balancing items and drop rates. Water caves have been +worked on, which now means that you might need to enter them from underwater. +Modular weapons were merged, which was a change several months in the making. +NPCs are now able to pick up items that are on the ground. Work was done on +taming and mounting various animals. Weather is still in the works, with +improvements to the ambient SFX system for rain. A new UI concept was created +for what Airshipper might be able to look like in the future. + +May's full weekly devlogs: "This Week In Veloren...": +[#170][veloren-170], +[#171][veloren-171], +[#172][veloren-172], +[#173][veloren-173], +[#174][veloren-174]. + +[veloren]: https://veloren.net + +[veloren-170]: https://veloren.net/devblog-170 +[veloren-171]: https://veloren.net/devblog-171 +[veloren-172]: https://veloren.net/devblog-172 +[veloren-173]: https://veloren.net/devblog-173 +[veloren-174]: https://veloren.net/devblog-174 + +### [Hug With Me?][hug-web] + +![Screenshot: one human hugs another](hug.jpg) + +[The Hug Game][hug-web] by [the HIHAHEHO Studio][hihaheho] +is an active ragdoll remote hugging simulator made with Bevy and rapier. + +The arms are individually controlled using a keyboard on desktop +and touch controls on mobile to make various hugs. +You can click "Random” to play with a random person or “Room” +to share a link to someone you want to play with. + +The source code of the game is [available on GitHub][hug-src]. + +[hug-web]: https://hug.hihaheho.com +[hug-src]: https://github.com/Hihaheho/Hug +[hihaheho]: https://hihaheho.com + +### [Combine&Conquer][cnc-logs] + +{{ image_figure( + alt="Preview: a factory" + src="https://github.com/cnc-preview.png" + caption="[Connect factories on different planets via spaceships](https://reddit.com/r/IndieDev/comments/uxcc7v/connect_different_planets)", + link="https://reddit.com/r/IndieDev/comments/uxcc7v/connect_different_planets") }} + +[Combine&Conquer][cnc-itch] by [Martin Buck][@I3ck] is a WIP strategy game +about automation similar to Satisfactory or Factorio. +This month's updates include: + +- [a new view to see in-flight spaceships][cnc-log-1], +- [single render node][cnc-log-2], +- [and the first public prototype release on itch.io][cnc-log-3]. + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/uzpojz/cnc)_ + +[@I3ck]: https://github.com/I3ck +[cnc-logs]: https://buckmartin.de/combine-and-conquer.html +[cnc-video]: https://reddit.com/r/IndieDev/comments/uxcc7v/connect_different_planets +[cnc-itch]: https://martinbucksoftware.itch.io +[cnc-log-1]: https://buckmartin.de/combine-and-conquer/2022-05-05-ship-view.html +[cnc-log-2]: https://buckmartin.de/combine-and-conquer/2022-05-04-single-node-notification-bg.html +[cnc-log-3]: https://buckmartin.de/combine-and-conquer/2022-05-07-itch-io-release.html + +## Engine Updates + +### [Fyrox] + +![Fyroxed](fyrox.png) + +[Fyrox] ([Discord][fyrox_discord], [Twitter][fyrox_twitter]) is a game engine that +aims to be easy to use and provide a large set of out-of-the-box features. In May +it hit version 0.25 which added a lot of new functionality: + +- Static plugin system. +- User-defined scripts. +- Play mode for the editor. +- Animation blending state machine editor. +- Prefab inheritance improvements. +- Layout and render transform support for widgets. +- Shortcuts improvements in the editor. +- UI performance improvements. +- Double click support in `fyrox-ui`. +- Better serializer error recovery. +- Tons of small improvements and fixes. + +Sometime after, the engine hit version 0.26 which was primarily focused on bug fixing, +but also added some interesting features: + +- Project template generator. +- Script API improvements. +- Shader cache fixes. +- Skybox validator. + +See full list of changes in respective blog posts - [0.25] and [0.26]. Everybody, +who wants to learn how to use the engine should check the new +[2D Platformer Tutorial][platformer_tutorial]. + +[Fyrox]: https://github.com/FyroxEngine/Fyrox +[0.25]: https://fyrox.rs/blog/post/feature-highlights-0-25/ +[0.26]: https://fyrox.rs/blog/post/feature-highlights-0-26/ +[fyrox_discord]: https://discord.com/invite/xENF5Uh +[fyrox_twitter]: https://twitter.com/DmitryNStepanov +[platformer_tutorial]: https://fyrox-book.github.io/fyrox/tutorials/platformer/part1.html + +### [miniquad] + +[![diff](miniquad_pr.png)][miniquad-pr] + +[miniquad] is a pure Rust, cross-platform graphics library. + +[The biggest PR in miniquad's history][miniquad-pr] landed this month, finishing +the effort of removing all the `sapp` legacy. + +Changes include: + +- No more `sapp-*` crates. Now it's just one crate, miniquad! + No mess with individual crates anymore, no FFI for + miniquad - sapp communication. +- On Linux, miniquad does not depend/statically link with lib*-dev packages. + Miniquad can choose between glx/egl, x11/wayland at runtime. +- MacOS implementation does not depend on any Objective C code anymore. + +[miniquad]: https://github.com/not-fl3/miniquad/ +[miniquad-pr]: https://github.com/not-fl3/miniquad/pull/278 + +### [Dims][dims-website] + +[![Video preview: terrain and some red barrels](dims-video-preview.jpg)][dims-video-1] + +[Dims][dims-website] ([Twitter][dims-twitter], [Discord][dims-discord], +[YouTube][dims-youtube]) is a WIP open-world creation platform. +Some highlights from the project's [latest dev log][dims-post]: + +- [A terrain tool](https://youtube.com/watch?v=jgkhsY8aZO8) that allows + quick landscape creation while still making sure that the biomes + are unique and diverse. +- [A tool to let creators script gameplay events][dims-video-1] + without having ever done any programming. +- The pre-alpha is now open for a limited time, + so [come and try building your own open world games][dims-website]! + +Also, a bunch of feature videos and tutorials were +[uploaded on the YouTube channel][dims-youtube] - +make sure to take a look if you're interested in Dims. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/v0zij3/were_super_excited), +[/r/worldbuilding](https://reddit.com/r/worldbuilding/comments/v102hp/what_do_you_think_of_our_world_building_tool)_ + +[dims-website]: https://dims.co +[dims-twitter]: https://twitter.com/DimsWorlds +[dims-discord]: https://discord.gg/Z5CAVmNE57 +[dims-youtube]: https://youtube.com/channel/UCR5gOwS7uSl0a0dl7MLQoqg +[dims-post]: https://dims.co/post/up-next +[dims-video-1]: https://youtube.com/watch?v=rKgv38zkey0 + +## Learning Material Updates + +### [Intro to Material/Shaders in Bevy][bevy-materials-playlist] + +![Bevy Materials video series thumbnail](bevy-material-series.png) + +[Matthew Bryant][matthew-bryant-youtube] has created +[a series about Bevy's Material abstraction][bevy-materials-playlist], +showing how to use custom WGSL shaders in Bevy. + +The series walks through the documentation to understand why steps are done in +order to build a clear theoretical understanding of Bevy's high-level abstractions. + +- The first of the three videos covers the bare minimum needed + to render a material; +- the second introduces bind groups to use textures and generic data in + the shader; +- and the final video ties into Bevy's ECS to copy game data onto the + graphics card every frame. + +He will be releasing videos about UI in Bevy and Rapier physics next month. + +[bevy-materials-playlist]: https://youtube.com/playlist?list=PLT_D88-MTFOMNRPAC-62Hz096aIjT4Noy +[matthew-bryant-youtube]: https://youtube.com/channel/UC7v3YEDa603x_84PgCPytzA + +### [Kubecon 2022, Lightning Talk: Wasmcloud + Bevy ECS][Lightning-Talk-schedule] + +![A picture of speakers](./lightingtalk.jpeg) + +[QQparty][alanpoon-qqparty] is a serverless multiplayer game built with Bevy ECS +and [Wasmcloud][wasmcloud_website]. + +This month, [@rustropy_gaming][alanpoon_twitter] joined Cosmonic to give +a series of Wasmcloud talks in Kubecon 2022 VLC. They demonstrated +how Bevy can be added into Wasmcloud's actors as a serverless +game server. + +You can check out a recording of the talk on [YouTube][Lightning-Talk-youtube], +as well as viewing the [slides][Lightning-Talk-pdf]. For updates on QQparty, +follow [@rustropy_gaming][alanpoon_twitter] on Twitter! + +[Lightning-Talk-schedule]: https://cloudnativewasmdayeu22.sched.com/event/zgbG/lightning-talk-wasmcloud-bevy-ecs-solution-to-woe-of-indie-game-developers-alan-poon-yong-quan-shopee?iframe=no&w=100%&sidebar=yes&bg=no +[Lightning-Talk-pdf]: https://static.sched.com/hosted_files/cloudnativewasmdayeu22/3c/lightingtalk-alan_pdf.pdf +[Lightning-Talk-youtube]: https://youtube.com/watch?v=8q2sPPX5aXY&list=PLj6h78yzYM2Ni0u-ONljTkv4uOutyjwq9&index=3 +[alanpoon-qqparty]: https://github.com/alanpoon/qq_party +[alanpoon_twitter]: https://twitter.com/rustropy_gaming +[wasmcloud_website]: https://wasmcloud.dev/ + +### [Rusteroids][rusteroids-youtube-playlist] + +![A screenshot of the latest Rusteroids tutorial](./rusteroids-screenshot.png) + +[Rusteroids][rusteroids-github] is a tutorial recreating a clone of Asteroids +in Rust, using SDL2 and the [Specs][rust-specs-crate] library. + +New episodes are released weekly and added to the playlist. Most recently, +collision detection was added to reset the game state when the asteroid +and player collide. The latest episode is [here][rusteroids-latest]. + +You can subscribe to the [YouTube Channel][electrocat-youtube], +to never miss an episode, or follow [@ecatstudios][ecatstudios-twitter] on +Twitter! + +[rusteroids-youtube-playlist]: https://youtube.com/playlist?list=PLFOS-Gn3aXROnSfl26esPExssd-rQw6jD +[rusteroids-github]: https://github.com/filtoid/rusteroids +[rust-specs-crate]: https://docs.rs/specs/latest/specs/ +[rusteroids-latest]: https://youtube.com/watch?v=KTDdlWErmYU&list=PLFOS-Gn3aXROnSfl26esPExssd-rQw6jD&index=9 +[electrocat-youtube]: https://youtube.com/channel/UC1m6P72nySpB3lKWDYGVipw +[ecatstudios-twitter]: https://twitter.com/ecatstudios + +### [Starting a new 2d platformer with Bevy ECS][video-platformer-bevy-ecs] + +[![Thumbnail: Hollow Knight screenshot with added Ferrises and Bevy logo](starting-a-new-2d-platformer-with-bevy-ecs.jpg)][video-platformer-bevy-ecs] + +[@chrisbiscardi] published a [video][video-platformer-bevy-ecs] +on setting up a new 2D platformer project using Bevy. The video covers +integrating with LDTK, Rapier, and becy_ecs_tilemap to get a working +character controller with collisions in a sandbox. It also touches on +staple crates such as bevy_asset_loader and iyes_loopless. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/v0keg2/starting_a_new_2d_platformer_with_bevy_ecs), +[Twitter](https://twitter.com/chrisbiscardi/status/1524008901028421632)_ + +[@chrisbiscardi]: https://twitter.com/chrisbiscardi +[video-platformer-bevy-ecs]: https://youtube.com/watch?v=gjeEYntkvoY + +### [Comparing a Voxel Game in F# and Rust][fsharp-rust-voxel] + +![Robocave screenshot](robocave.jpg) + +[This article][fsharp-rust-voxel] walks through the process of rewriting an F# +game in Rust. It explores the similarities between the languages and talks +about using simple code constructs where possible. It talks about the Rust +crates used to help with the process. Finally, it goes over a conclusion +comparing the speed of both versions of the games, and the sizes of the +codebases. + +[fsharp-rust-voxel]: https://cragwind.com/blog/posts/comparing-voxel-game-fsharp-rust/ + +### [Rustacean Station 66: Eric Smith][rustacean-station-66] + +![Rustacean Station Logo: rusty Ferris](rustacean-station.jpeg) + +In May the [Rustacean Station][rustacean-station] podcast +[interviewed Eric Smith][rustacean-station-66], the author +of ["Game Development with Rust and WebAssembly"][wasm-gamedev-book]. + +In this episode, lots is discussed about +why Rust is becoming a good language for game development, +different game engines, is Rust web-ready, +insights on Rust game development, and Eric's writing process. + +[rustacean-station]: https://rustacean-station.org +[rustacean-station-66]: https://rustacean-station.org/episode/066-eric-smith +[wasm-gamedev-book]: https://packtpub.com/product/game_development/9781801070973 +[@paytonrules]: https://twitter.com/paytonrules + +### [GamesFromScratch: Rust Game Development in 2022][gfs-video] + +[![YouTube preview: title](gfs-youtube-preview.jpg)][gfs-video] + +[GamesFromScratch shared a YouTube video][gfs-video] with an overview of +the most popular engines, frameworks, and libraries for Rust game development, +including: Amethyst, Piston, Bevy, Fyrox, ggez, godot-rust, raylib, SDL2, and SFML. + +[gfs-video]: https://youtube.com/watch?v=mLXwR88Dzkc + +### New Book: [Multiplayer Game Development in Rust][book-multiplayer] + +![Book cover with a MEAP mark](book-multiplayer.png) + +The ["Multiplayer Game Development in Rust"][book-multiplayer] book by +[@Extrawurst] and [@lyonbeckers] is now available in Manning Early Access Program. + +> Multiplayer Game Development in Rust teaches you to construct +> your own multiplayer game. You’ll build a simple game client, +> but the real work happens on the backend. Chapter-by-chapter, +> you’ll add scalability, persistence, benchmarking, and tracing +> to support game features like real-time multiplayer scorekeeping, +> leader boards, and server-to-client messaging. Along the way, +> you’ll get pro tips about what makes Rust so great for game development, +> and you’ll work with state-of-the-art technologies that +> take full advantage of the cloud. Best of all, everything you learn +> will apply to any application that requires real-time server technology. + +At the moment, 4 of 12 chapters are available: + +- Introducing Rust in Games +- Building a Game Client +- Building a Game Server +- Making a Multiplayer Client + +The book is estimated to be finished in early 2023. + +[book-multiplayer]: https://manning.com/books/multiplayer-game-development-in-rust +[@Extrawurst]: https://twitter.com/Extrawurst +[@lyonbeckers]: https://twitter.com/lyonbeckers + +### [Audio Libraries Considered Challenging][audio-hard-article] + +[@tesselode] shared [an article][audio-hard-article] about +the difficulties of making audio libraries: + +> I develop a game audio library called [Kira]. +> Here's some of the hard parts I've figured out. +> If you decide to make an audio library for some reason, +> learn from my experimentation! +> <...> +> Making audio libraries is hard. I don't know the best way to do it. +> This is just what I've tried and how it went for me. + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/ur93w8/audio_libraries)_ + +[audio-hard-article]: https://tesselode.github.io/articles/audio-libraries-considered-challenging +[Kira]: https://github.com/tesselode/kira +[@tesselode]: https://twitter.com/tesselode + +## Tooling Updates + +### [Bloom3D][bloom3d] + +[![A screenshot of Bloom3D's interface. A geometric tree is next to a building.](bloom.jpg)][bloom3d] + +[Bloom3D](bloom3d) is a minimalist web app for 3D modeling that's built in Rust. + +Bloom is powered by a custom game engine called [`koi`](koi) that is open-sourced +on GitHub. + +This month [@kettlecorn][kettlecorn_twitter] released a new version of +[Bloom3D][bloom3d] that adds a variety of new features including a +rectangle tool, move tool, and OBJ export. +Check out the [Twitter announcement thread][bloom_update_twitter] for an overview +and videos of all the new features. + +[bloom3d]: https://bloom3d.com +[koi]: https://github.com/kettle11/koi +[kettlecorn_twitter]: https://twitter.com/kettlecorn +[bloom_update_twitter]: https://twitter.com/kettlecorn/status/1529193509462360065 + +### [Graphite][graphite-website] + +![Graphite](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free, +in-development raster and vector 2D graphics editor. It will be powered by a +node graph compositing engine that supercharges your layer stack, providing a +completely non-destructive editing experience. + +- Spring cleaning: The past month's Sprint 15 work has focused mostly on + technical debt cleanup, documentation, and bug fixes around the frontend. That + continues with the Rust backend next month. + +- A radiant gradient: The Gradient tool now supports radial styles in + addition to linear. + +- New blog post: [Learn about the plans][graphite-blog-post] for + distributed computing across many CPUs and GPUs with Graphene, the Rust-based + node graph engine and renderer that will power Graphite. + +Open the [Graphite editor][graphite-live-demo] in your browser to give it a try +and share your creations with #MadeWithGraphite on Twitter. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-live-demo]: https://editor.graphite.rs +[graphite-blog-post]: https://graphite.rs/blog/distributed-computing-in-the-graphene-runtime/ + +## Library Updates + +### [bevy_mod_scripting] + +![bevy_mod_scripting logo](logo_bevy_scripting.svg) + +[bevy_mod_scripting] by @makspll is a brand new Bevy plugin +enabling multi-language scripting (currently in Lua and Rhai). + +The plugin is in early stages but as of now supports: + +- Handling events at multiple points of your stage pipeline. +- Sending events to specific, or all scripts. +- Setting event priority to order your callbacks. +- Defining custom state and APIs at initialization. +- Sending run-time error events (to for example show them in an in-game console). +- One-shot scripts. + +General Bevy API support is under-way so stay tuned! + +[bevy_mod_scripting]: https://github.com/makspll/bevy_mod_scripting + +### [bevy_silk] + +![bevy_silk logo](bevy_silk.png) + +[bevy_silk] by @[ManevilleF] is a cloth physics plugin for Bevy. + +Apply cloth physics to any mesh, by adding a single component to your entity! + +Features: + +- Collision support using [bevy_rapier](https://github.com/dimforge/bevy_rapier) +- Global and per-entity physics customization +- Dynamic smooth and flat normals +- Wind forces +- Custom cloth anchors + +The library is fully documented and the repository provides various usage examples. + +_Discussions: [Twitter](https://twitter.com/ManevilleF/status/1527313861199527937)_ + +[bevy_silk]: https://github.com/ManevilleF/bevy_silk +[ManevilleF]: https://twitter.com/ManevilleF + +### [bevy_asset_loader] + +[bevy_asset_loader] by [@nikl_me] is a Bevy plugin that helps with asset +loading and asset organisation. It greatly reduces boilerplate code for +loading states and can resolve asset configuration at run time. + +This month, version `0.11.0` was released. It supports loading lists of files +as `Vec` or `Vec>`. This is an alternative to loading +folders, which is not supported on the web. You can now track the loading +progress of your assets with [iyes_progress] and build loading bars. +Integrating with [iyes_loopless] gives you some benefits of stageless +scheduling in current Bevy. Additionally, the loading of assets fields +without attributes was improved. It now uses the `FromWorld` trait +instead of `Default`. + +More improvements will likely follow for the dynamic asset story. One goal +is to allow loading any custom values as dynamic assets. + +[bevy_asset_loader]: https://github.com/NiklasEi/bevy_asset_loader +[@nikl_me]: https://twitter.com/nikl_me +[iyes_loopless]: https://github.com/IyesGames/iyes_loopless +[iyes_progress]: https://github.com/IyesGames/iyes_progress + +### [bevy_kira_audio] + +[bevy_kira_audio] by [@nikl_me] is an alternative audio +plugin for Bevy. It uses [Kira] to play and control +game audio. + +This month saw the release of version `0.10.0`. The plugin +now uses the latest Kira release, which was a major rewrite. +The audio channel API is improved by making all channels +resources in Bevy's ECS and sounds can be directly loaded +from asset files with settings like their volume, playback +rate, or panning. Additionally, the audio backend can now +be configured before creation through a settings resource. + +[bevy_kira_audio]: https://github.com/NiklasEi/bevy_kira_audio +[@nikl_me]: https://twitter.com/nikl_me +[Kira]: https://github.com/tesselode/kira + +### [Sparsey] + +[Sparsey] by [@LechintanTudor] is a sparse set-based Entity Component System +with beautiful and concise syntax. + +The latest release, 0.8.0, adds some convenience panicking functions for +borrowing resources and a method for resetting a `World` to its default state +without having to recreate it. + +[Sparsey]: https://github.com/LechintanTudor/sparsey +[@LechintanTudor]: https://github.com/LechintanTudor + +### [Notan v0.4][Notan] + +[Notan] is a simple and portable layer designed to create your own multimedia +apps on top of it without worrying about platform-specific code. + +The main goal is to provide a set of APIs and tools that can be used to create +your project in an ergonomic manner without enforcing any structure or pattern, +always trying to stay out of your way. The idea is that you can use it as a +foundation layer or backend for your next app, game engine, or game. + +The latest version [v0.4] adds [touch support] and fixes some minor bugs. + +[Notan]: https://github.com/Nazariglez/notan +[touch support]: https://nazariglez.github.io/notan-web/examples/input_touches.html +[v0.4]: https://github.com/Nazariglez/notan/releases/tag/v0.4.0 + +### [carrier-pigeon] + +[carrier-pigeon] by [@MitchellMarinoDev] is a rusty networking library for games. +It builds on the standard library's TcpStream and UdpSocket types +and handles all the serialization, sending, receiving, and deserialization. +This way you can worry about what to send, +and pigeon will worry about how to send it. +This also allows you to send and receive different types of messages independently. + +[bevy-pigeon] is a Bevy plugin for carrier-pigeon. + +[bong][pigeon-bong] is a combination of breakout and pong +that showcases bevy-pigeon and carrier-pigeon. + +[carrier-pigeon]: https://github.com/MitchellMarinoDev/carrier-pigeon +[bevy-pigeon]: https://github.com/MitchellMarinoDev/bevy-pigeon +[pigeon-bong]: https://github.com/MitchellMarinoDev/bong +[@MitchellMarinoDev]: https://github.com/MitchellMarinoDev + +## Popular Workgroup Issues in GitHub + + + +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#124 "Wanted: a good JPEG 2000 decoder for Rust"](https://github.com/rust-gamedev/wg/issues/124). + +## Other News + + + +- Other game updates: + - After the initial release of [BITGUN], [LogLogGames] released a + [bunch of updates packed with various bugfixes and improvements][bitgun-news]. + - [Gravity Well](https://github.com/thebracket/gravity_well) + is a simple two-player (shared keyboard) game in which + you collect salvage and try not to fall into a black hole + that can be played online [here](https://bfnightly.bracketproductions.com/gravity_well). + - [Flesh](https://store.steampowered.com/app/1660850/Flesh) + got a [new enemy type](https://twitter.com/Im_Oab/status/1523210359045206017), + new [UI's fade in/out](https://twitter.com/Im_Oab/status/1525249464562491393), + and [damage animation for enemies](https://twitter.com/Im_Oab/status/1529400914364465153). + - [Grocery Bagger 9000](https://reddit.com/r/rust_gamedev/comments/uxz0oz/grocery_bagger) + is a WIP Tetris-like puzzler built with Bevy. +- Other tooling updates: + - [clymene] by [@LukeRaccoon] is a CLI atlas generation tool + that doesn't just outputs a packed image, but also a data set + about its sources, which can be either static images or animations. +- Other learning material updates: + - The Unofficial Bevy Cheatbook by got + [a WIP chapter about rendering][bevy-book-gpu]. + - [@scvalex] shared a [blog post](https://scvalex.net/posts/63) + about how the NixOS flake for Rust/egui/eframe/glutin/OpenGL + [looks like](https://gitlab.com/scvalex/sixty-two/-/tree/flake-blogpost). + - [@ychshn] shared a live-stream recording + ["Let's Code Snake with Rust and WASM"](https://youtu.be/iR7Q_6quwSI). + - PhaestusFox added a bunch of new videos + to their ["Bevy Basics"][bevy-basics] YouTube series. +- Other library updates: + - [mmap_cache](https://crates.io/crates/mmap-cache) is a low-level API + for a memory-mapped cache of a read-only key-value store. + - [crevice v0.10](https://github.com/LPGhatguy/crevice/blob/main/CHANGELOG.md#0100---2022-05-26) + brings mint integration and a couple of API improvements. + - [glyphon](https://crates.io/crates/glyphon) provides + a simple way to render 2D text with wgpu. + - [egui 0.18](https://reddit.com/r/rust/comments/ugefgv/egui_018) was released, + with the ability to embed 3D inside egui, table and date picker widgets, + better text contrast in bright mode, and more. + - Following the release of egui v0.18, + [bevy_egui 0.14](https://twitter.com/penicillin_duck/status/1520703733755166720) + and [puffin_egui 0.15.0](https://twitter.com/ernerfeldt/status/1524368923931590657) + were published. + - [bevy_puffin] integrates the [puffin] instrumentation profiler with Bevy. + - [bevy_rosc] integrates [rosc] - an Open Sound Control library - into Bevy. + - [bustsuri](https://github.com/NemuiSen/bustsuri) is a Bevy asset + that provides 2D collision detector and kinematics. + - The Bevy engine [started collaborating][sprawl-reddit] with [@dioxuslabs] + on a flexible, high-performance, cross-platform UI layout library + [sprawl](https://github.com/DioxusLabs/sprawl) + (based on abandoned [stretch](https://github.com/vislyhq/stretch)). + +[BITGUN]: https://store.steampowered.com/app/1673940/BITGUN +[bitgun-news]: https://store.steampowered.com/news/app/1673940 +[LogLogGames]: https://loglog.games +[clymene]: https://github.com/lucas-miranda/clymene +[@LukeRaccoon]: https://twitter.com/LukeRaccoon +[bevy-book-gpu]: https://bevy-cheatbook.github.io/gpu/intro.html +[@scvalex]: https://twitter.com/scvalex +[@ychshn]: https://twitter.com/ychshn +[bevy-basics]: https://youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6 +[bevy_puffin]: https://github.com/mvlabat/bevy_puffin +[puffin]: https://github.com/EmbarkStudios/puffin +[bevy_rosc]: https://github.com/DrLuke/bevy_rosc +[rosc]: https://github.com/klingtnet/rosc +[@dioxuslabs]: https://twitter.com/dioxuslabs +[sprawl-reddit]: https://reddit.com/r/rust/comments/umwjt4/bevy_and_dioxus_are_collaborating_on_stretch2 + +## Discussions + +- [/r/rust_gamedev](https://reddit.com/r/rust_gamedev/): + - ["Choosing a networking library for my game"][r-gamedev-networking] + +[r-gamedev-networking]: https://reddit.com/r/rust_gamedev/comments/ujk2s6/choosing_a_networking_library_for_my_game/ +[gamedev-wg-jpeg]: https://github.com/rust-gamedev/wg/issues/124 + +## Requests for Contribution + +- [Graphite is looking for contributors][graphite-contribute] to help build the + new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[graphite-contribute]: https://github.com/GraphiteEditor/Graphite/issues/202 +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Jobs + +- [DIMS](https://dims.co/jobs) + (Stockholm/Remote): Various roles, open applications accepted. +- [Embark Studios](https://careers.embark-studios.com/jobs) + (Stockholm/Hybrid Remote): Various roles, open applications accepted. + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/v7xxr7/this_month_in_rust_gamedev_34), +[Twitter](https://twitter.com/rust_gamedev/status/1534619187477467138), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/034/lightingtalk.jpeg b/content/news/034/lightingtalk.jpeg new file mode 100644 index 000000000..efe997956 Binary files /dev/null and b/content/news/034/lightingtalk.jpeg differ diff --git a/content/news/034/limbo-pass.png b/content/news/034/limbo-pass.png new file mode 100644 index 000000000..4a0b6f34d Binary files /dev/null and b/content/news/034/limbo-pass.png differ diff --git a/content/news/034/logo_bevy_scripting.svg b/content/news/034/logo_bevy_scripting.svg new file mode 100644 index 000000000..df6661e41 --- /dev/null +++ b/content/news/034/logo_bevy_scripting.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/news/034/miniquad_pr.png b/content/news/034/miniquad_pr.png new file mode 100644 index 000000000..c463240aa Binary files /dev/null and b/content/news/034/miniquad_pr.png differ diff --git a/content/news/034/raymarch_ferris_3d.jpg b/content/news/034/raymarch_ferris_3d.jpg new file mode 100644 index 000000000..7941e78c4 Binary files /dev/null and b/content/news/034/raymarch_ferris_3d.jpg differ diff --git a/content/news/034/robocave.jpg b/content/news/034/robocave.jpg new file mode 100644 index 000000000..3455950a0 Binary files /dev/null and b/content/news/034/robocave.jpg differ diff --git a/content/news/034/room4doom.jpg b/content/news/034/room4doom.jpg new file mode 100644 index 000000000..e4c3cc609 Binary files /dev/null and b/content/news/034/room4doom.jpg differ diff --git a/content/news/034/rustacean-station.jpeg b/content/news/034/rustacean-station.jpeg new file mode 100644 index 000000000..4900c38db Binary files /dev/null and b/content/news/034/rustacean-station.jpeg differ diff --git a/content/news/034/rusteroids-screenshot.png b/content/news/034/rusteroids-screenshot.png new file mode 100644 index 000000000..613e4883a Binary files /dev/null and b/content/news/034/rusteroids-screenshot.png differ diff --git a/content/news/034/starting-a-new-2d-platformer-with-bevy-ecs.jpg b/content/news/034/starting-a-new-2d-platformer-with-bevy-ecs.jpg new file mode 100644 index 000000000..d4f5ff1c0 Binary files /dev/null and b/content/news/034/starting-a-new-2d-platformer-with-bevy-ecs.jpg differ diff --git a/content/news/034/veloren.jpg b/content/news/034/veloren.jpg new file mode 100644 index 000000000..3ab479181 Binary files /dev/null and b/content/news/034/veloren.jpg differ diff --git a/content/news/034/wor-capsule.jpg b/content/news/034/wor-capsule.jpg new file mode 100644 index 000000000..446f37e6a Binary files /dev/null and b/content/news/034/wor-capsule.jpg differ diff --git a/content/news/035/Quoridor-screenshot.png b/content/news/035/Quoridor-screenshot.png new file mode 100644 index 000000000..026faa907 Binary files /dev/null and b/content/news/035/Quoridor-screenshot.png differ diff --git a/content/news/035/aaron.png b/content/news/035/aaron.png new file mode 100644 index 000000000..e70629a1d Binary files /dev/null and b/content/news/035/aaron.png differ diff --git a/content/news/035/arcade_cabinet.jpg b/content/news/035/arcade_cabinet.jpg new file mode 100644 index 000000000..abae70e40 Binary files /dev/null and b/content/news/035/arcade_cabinet.jpg differ diff --git a/content/news/035/botnet.svg b/content/news/035/botnet.svg new file mode 100644 index 000000000..e795fb6d0 --- /dev/null +++ b/content/news/035/botnet.svg @@ -0,0 +1 @@ + diff --git a/content/news/035/brontefyme.png b/content/news/035/brontefyme.png new file mode 100644 index 000000000..201a254e9 Binary files /dev/null and b/content/news/035/brontefyme.png differ diff --git a/content/news/035/chimera_rancher.png b/content/news/035/chimera_rancher.png new file mode 100644 index 000000000..5d896b6d5 Binary files /dev/null and b/content/news/035/chimera_rancher.png differ diff --git a/content/news/035/dims-recreating-rhodes.jpg b/content/news/035/dims-recreating-rhodes.jpg new file mode 100644 index 000000000..25762bca6 Binary files /dev/null and b/content/news/035/dims-recreating-rhodes.jpg differ diff --git a/content/news/035/fileopen.gif b/content/news/035/fileopen.gif new file mode 100644 index 000000000..4536c87ca Binary files /dev/null and b/content/news/035/fileopen.gif differ diff --git a/content/news/035/gamedev-meetup.png b/content/news/035/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/035/gamedev-meetup.png differ diff --git a/content/news/035/graphite.png b/content/news/035/graphite.png new file mode 100644 index 000000000..e05688259 Binary files /dev/null and b/content/news/035/graphite.png differ diff --git a/content/news/035/hgs_35.jpg b/content/news/035/hgs_35.jpg new file mode 100644 index 000000000..319ddd15c Binary files /dev/null and b/content/news/035/hgs_35.jpg differ diff --git a/content/news/035/hho_summer.png b/content/news/035/hho_summer.png new file mode 100644 index 000000000..1cc6392d5 Binary files /dev/null and b/content/news/035/hho_summer.png differ diff --git a/content/news/035/index.md b/content/news/035/index.md new file mode 100644 index 000000000..e912e5e85 --- /dev/null +++ b/content/news/035/index.md @@ -0,0 +1,864 @@ ++++ +title = "This Month in Rust GameDev #35 - June 2022" +transparent = true +date = 2022-07-07 ++++ + + + + + +Welcome to the 35th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## Announcements + +### [Rust GameDev Podcast][gamedev-podcast-site] + +![text logo](podcast.jpeg) + +The Rust Gamedev Podcast features interviews with indie game developers creating +titles with the Rust programming language. It covers technical topics as well as +the business of open source and commercial indie games development. + +In June, [the ninth episode][podcast-9] was released. It's a chat with Carter +Anderson about the [Bevy engine][bevy], and a dive into its history. + +Listen and Subscribe from the following platforms: +[Rust GameDev Podcast (simplecast)][gamedev-podcast-site], +[Apple Podcasts][gamedev-podcast-apple], +[Spotify][gamedev-podcast-spotify], +[RSS Feed][gamedev-podcast-rss], +or [Google Podcasts][gamedev-podcast-google]. + +[podcast-9]: https://rustgamedev.com/episodes/interview-with-carter-anderson-bevy +[bevy]: https://bevyengine.org/ +[gamedev-podcast-site]: https://rustgamedev.com/ +[gamedev-podcast-apple]: https://podcasts.apple.com/gb/podcast/rust-game-dev/id1526304768 +[gamedev-podcast-spotify]: https://open.spotify.com/show/7HRfGnTcXkLkQd9fxJbDGj +[gamedev-podcast-rss]: https://feeds.simplecast.com/C6NQglnL +[gamedev-podcast-google]: https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9DNk5RZ2xuTA + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 17th Rust Gamedev Meetup took place in June. You can watch the recording of +the meetup [here on Youtube][gamedev-meetup-video]. Here was the schedule from +the meetup: + +- Choir - [@kvark] +- RustConf Arcade Cabinet - [@carlosupina] +- retime - [@Togg] +- Graphite - [@GraphiteEditor] + +The meetups take place on the second Saturday every month via the [Rust Gamedev +Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. If you would like to show off what you've been +working on at the next meetup on [July 9th][rust-meetup-time], fill out [this +form][gamedev-meetup-form]. + +[gamedev-meetup-video]: https://youtu.be/drcX3dCS5MY +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[rust-meetup-time]: https://everytimezone.com/s/92d2228b +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 + +[@kvark]: https://twitter.com/kvark +[@carlosupina]: https://twitter.com/carlosupina +[@Togg]: https://github.com/ZKpot +[@GraphiteEditor]: https://twitter.com/graphiteeditor + +### [Rusty Jam 2][rusty-jam-ann] + +{{ image_figure( + alt="Aaron: a drawing of a humanoid fox" + src="https://github.com/aaron.png" + caption="Aaron, [the mascot of the jam](https://gamedev.rs/blog/rustyjam-02)") }} + +The [second Rusty Jam][rusty-jam-ann] just ended! +[17 games][rusty-jam-entries] were completed and submitted +over the one-week jam. The games were rated by the community +and the top three games are: + +- 🥇 ["Chick the Dog"][rusty-jam-place-1] by Uriopass +- 🥈 ["A walk around the block"][rusty-jam-place-2] by ramirezmike +- 🥉 ["Fight for the Frontier"][rusty-jam-place-3] by rand0m and logicprojects + +The Rusty Jam will be back, so stay tuned on +[the Rusty Jam Discord Server][rusty-jam-discord] for future updates! + +[rusty-jam]: https://itch.io/jam/rusty-jam-2 +[rusty-jam-entries]: https://itch.io/jam/rusty-jam-2/entries +[rusty-jam-results]: https://itch.io/jam/rusty-jam-2/results +[rusty-jam-ann]: https://gamedev.rs/blog/rustyjam-02 +[rusty-jam-discord]: https://discord.gg/jZtz6y9gCJ +[rusty-jam-place-1]: https://uriopass.itch.io/chick-the-dog +[rusty-jam-place-2]: https://ramirezmike2.itch.io/a-walk-around-the-block +[rusty-jam-place-3]: https://logicprojects.itch.io/fight-for-the-frontier + +### RustConf Arcade Cabinet + +![arcade cabinet](arcade_cabinet.jpg) + +[Carlo][carlosupina] is building a custom arcade cabinet that will be at +RustConf 2022 in Portland. It is an opportunity for Rust game developers to +share their games with the broader community. If you are interested in getting +your game on the cabinet, read [this Twitter thread][arcade-cabinet-thread] and +fill out the [interest form][arcade-interest-form]. +The arcade cabinet has been assembled and painted. He is currently in the process +of helping developers get their games playable on the machine. If you have a Bevy +game, you can use the [bevy-rust-arcade crate][bevy-rust-arcade] to quickly get +your game compatible. Deadline is the end of July! +You can find the latest update [here][arcade-cabinet-update-thread]. + +[carlosupina]: https://twitter.com/carlosupina +[arcade-cabinet-thread]: https://twitter.com/carlosupina/status/1523715837726961664 +[arcade-cabinet-update-thread]: https://twitter.com/carlosupina/status/1539032439284240386 +[arcade-interest-form]: https://forms.gle/onFm5fCygdbiArqJ7 +[bevy-rust-arcade]: https://crates.io/crates/bevy-rust-arcade + +## Game Updates + +### [Hydrofoil Generation] + +![hgs_screen](hgs_35.jpg) + +[Hydrofoil Generation] +([Steam][hgs_steam], [Facebook][hgs_facebook], [Discord][hgs_discord]) +is a realistic sailing/foiling inshore simulator in development for PC/Steam +that will put you in the driving seat of modern competitive sailing. +Hydrofoil Generation is based on a custom-made DirectX 11 based engine in +Rust. + +June saw a lot of features added to the game, most notables being "New TV +Overlays", "Control Assists", "Ropes Rendering" plus several physics +improvements. Stefano Casillo, the developer went through all of them in +a recent [devlog][hgs_devlog]. + +Work in July will focus on the physics implementation of a new boat, a +foiling multihull coming with her own set of new challenges. + +Hydrofoil Generation is targeting a Q4 2022 Early Access release on Steam. + +[Hydrofoil Generation]: https://hydrofoil-generation.com/ +[hgs_facebook]: https://facebook.com/HydrofoilGenerationSailing/ +[hgs_discord]: https://discord.gg/DtKgt2duAy/ +[hgs_steam]: https://store.steampowered.com/app/1448820/Hydrofoil_Generation/ +[hgs_devlog]: https://youtu.be/AqwqyL9RqAk + +### [RuggRogue] + +![RuggRogue gameplay screenshot](ruggrogue.png) + +[RuggRogue] by [@tung] is a simple web-playable roguelike, inspired by the +[Rust Roguelike Tutorial] and made using Rust and SDL. +It can be played natively on Windows and Linux, +and in the browser thanks to Emscripten. + +Features: + +- Discover new monsters and equipment the deeper you go. +- Hunger and regeneration: stay fed and stay healed! +- Choose between graphical tiles and ASCII display. +- Menu-based UI with hotkeys. +- Auto-run to quickly follow corridors and cross open space. +- Save and load system. +- New Game Plus mode! + +The source code is complemented by the +[RuggRogue Source Code Guide][ruggrogue-book], +a 23-chapter technical web book covering the ideas, algorithms, and structure of +the code. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/vluy7u/ruggrogue_a_simple_webplayable_roguelike_made/), +[/r/roguelikes](https://reddit.com/r/roguelikes/comments/vluuud/ruggrogue_a_simple_webplayable_roguelike_inspired/)_ + +[RuggRogue]: https://tung.github.io/ruggrogue/ +[Rust Roguelike Tutorial]: https://bfnightly.bracketproductions.com/ +[ruggrogue-book]: https://tung.github.io/ruggrogue/source-code-guide/ +[@tung]: https://github.com/tung/ + +### [Rust Game Ports] + +![games collage](rust_game_ports.jpg) + +Rust Game Ports is a port of several games to Rust/pure-Rust game engines. + +This month the last planned port has been completed; the games are: + +- Boing (Pong clone, ported to [ggez](https://github.com/ggez/ggez)) +- Cavern (Bubble Bobble clone, ported to [Macroquad](https://github.com/not-fl3/macroquad)) +- Rusty Roguelike (from the [Hands-on Rust book](https://pragprog.com/titles/hwrust/hands-on-rust); + ECS ported to [Bevy](https://github.com/bevyengine/bevy)) +- Soccer (Sensible Soccer clone, ported to [Fyrox](https://github.com/FyroxEngine/Fyrox)) + +A Bevy ECS tutorial, based on Rusty Roguelike, has been published, and it's +announced in this newsletter. + +[Rust Game Ports]: https://github.com/64kramsystem/rust-game-ports +[Saverio Miroddi/@64kramsystem]: https://twitter.com/64kramsystem + +### vetovoima + +{{ image_figure( + alt="vetovoima gravity manipulation GIF" + src="https://github.com/vetovoima.gif" + caption="vetovoima gravity manipulation") }} + +[vetovoima][vetovoima_itch] by [@MatiasKlemola][vetovoima_twitter] is an arcade game +where you control gravity! + +The world is a hollow circle with a star in the center. You're the Yellow +Block and your goal is to navigate through shifting debris to the Tall Blue +Block before the time runs out. The challenge is to survive the chaos that +ensues from changes to gravity. + +vetovoima is built with the Bevy engine using Rapier for physics and Lyon for +rendering (via Bevy plugins). + +[The alpha 1 build was recently released.](https://twitter.com/MatiasKlemola/status/1541338040521707521) + +Source available on [GitHub][vetovoima_github]. + +[vetovoima_itch]: https://yourmagicisworking.itch.io/vetovoima +[vetovoima_twitter]: https://twitter.com/MatiasKlemola +[vetovoima_github]: https://github.com/klemola/vetovoima + +### [Botnet] + +![botnet logo](botnet.svg) + +[Botnet] is an upcoming programming-based multiplayer game, +where you write scripts (compiled to WebAssembly) to control robots. +Coordinate your bots to gather resources, build new industries, +and expand your control of the server. + +This month saw the start of the project, and a majority of the foundational +code was written. Next month we'll be adding more features, and aim to flesh out +the game beyond [basic pathfinding and resource harvesting][botnet_example_bot]. + +Interested in contributing? Head over to the +[github discussion page][botnet_ideas] and suggest some ideas! + +[Botnet]: https://github.com/JMS55/botnet +[botnet_example_bot]: https://github.com/JMS55/botnet/blob/master/example_bot/src/lib.rs +[botnet_ideas]: https://github.com/JMS55/botnet/discussions/categories/ideas + +### [Star Machine] + +![Screenshot of a level in Star Machine](star_machine.png) + +[Star Machine] by [@Seldom_SE] is a puzzle game built in Bevy, where +you wire together components to escape each level. + +Although its development is currently inactive, the developer +recently made [a video demo][Star Machine] of the early levels. + +[Star Machine]: https://twitter.com/Seldom_SE/status/1532909654681849856 +[@Seldom_SE]: https://twitter.com/Seldom_SE + +### [Quoridor-rs] + +![Screenshot of a Quoridor-rs gameplay](Quoridor-screenshot.png) + +[Quoridor-rs] by [@baehyunsol] is a [Quoridor] game implemented in +[Macroquad]. + +Quoridor is a 2-4 player strategy board game. Each player has a pawn. +They move the pawn or place a wall each round. The objective of the +game is to move the pawn to the opposite side of the board. + +The game implements most of the basic Quoridor features, but it only +supports 2 players, not 3 or 4. It also doesn't have AI players or +network games. + +[Quoridor-rs]: https://github.com/baehyunsol/Quoridor-rs +[Quoridor]: https://en.wikipedia.org/wiki/Quoridor +[Macroquad]: https://github.com/not-fl3/macroquad +[@baehyunsol]: https://github.com/baehyunsol + +### [Veloren][veloren] + +{{ image_figure( + alt="Gliding above a forest" + src="https://github.com/veloren.jpg" + caption="A glider ride above the woods at night") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In June, a memory issue was found within the graphics stack. Weather is also +getting closer to completion. There is a large write-up about it in one of [this +month's blog posts][veloren-176]. + +Lots of work has also gone into optimizing the Site2 system. Site2 is used to +create many different shapes around the world, such as houses in towns, or +citadels around the world. With these optimizations, it will be significantly +easier to render chunks, which will have a dramatic effect on their load time. +You can read more about these optimizations in [this blog post][veloren-178]. + +June's full weekly devlogs: "This Week In Veloren...": +[#175][veloren-175], +[#176][veloren-176], +[#177][veloren-177], +[#178][veloren-178]. + +[veloren]: https://veloren.net + +[veloren-175]: https://veloren.net/devblog-175 +[veloren-176]: https://veloren.net/devblog-176 +[veloren-177]: https://veloren.net/devblog-177 +[veloren-178]: https://veloren.net/devblog-178 + +### [Harvest Hero Origins - Summer Heat Update!][hho_steam_spring] + +![hho summer banner](hho_summer.png) + +[Gemdrop Games] have worked with their friends at [Octosoft] +to bring Shroomella to Harvest Hero Origins! + +[Renaine] is an upcoming Action Platformer game about Aine, +an immortal Phoenix Knight. + +Shroomella is a Mushroom Shroom witch aiding Aine on her quest! +In Harvest Hero Origins, she uses her variety of magical mushrooms +to fight off the endless Grooble hordes. + +On top of that, they're adding: + +- A new map +- Two new cards +- Two new enemies +- A revised story boss fight + +The game is built on the [Emerald Game Engine]. + +[hho_steam_spring]: https://store.steampowered.com/app/1651500/Harvest_Hero_Origins/ +[Octosoft]: https://twitter.com/RenaineGame +[Renaine]: https://store.steampowered.com/app/662340/Renaine/ +[Gemdrop Games]: https://twitter.com/GemdropGames +[Emerald Game Engine]: https://github.com/Bombfuse/emerald + +### [Chimera Rancher][chimera-rancher] + +![Chimera Rancher cover art](chimera_rancher.png) + +[Chimera Rancher][chimera-rancher] is a game where you must defend your ranch +from an angry hoard of villagers with the help of your chimera friends! + +Submitted as part of [Rusty jam #2][rusty-jam] by [cdsupina][cdsupina], +[Nightly Side][nightlyside], [hedgein][hedgein], and [tigleym][tigleym]. This +game was developed using the [bevy] game engine. + +[chimera-rancher]: https://nightlyside.itch.io/chimera-rancher +[cdsupina]: https://cdsupina.itch.io/ +[tigleym]: https://tigleym.itch.io/ +[hedgein]: https://hedgein.itch.io/ +[nightlyside]: https://nightlyside.itch.io/ + +## Engine Updates + +### [ggez] 0.8.0-rc0 + +![ggez logo](../005/ggez-logo-maroon-full.svg) + +[ggez] by [@icefoxen], [@nobbele], and [@PSteinhaus] is a cross-platform game +framework for making 2D games with minimum friction. It aims to implement an +API based on the LÖVE game framework. + +This version has finally moved ggez away from pre-ll gfx and into the world +of [wgpu]! This hopefully means fewer bugs, greater stability, and easier +maintainability at the cost of some low-performance devices such as the +Raspberry Pi. + +As for the user-facing API: + +- Instead of module functions, you now have methods on sub-contexts, which + look like `ctx.keyboard.is_key_pressed(key)`. +- You are now required to pass around an explicit canvas to draw onto. +- `DrawParam` now has a Z (aka layer) parameter, so you don't have to draw + objects in order. +- Shaders are far easier to use, via normal Rust structs with a simple derive. + +As this is a rather large update and a first release candidate, there are plenty +of bugs that are currently being fixed - please send any issues you encounter +to their [issue tracker][ggez-issues]! + +_Discussions: [/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/v6a3kn/ggez_080rc0_is_out/)_ + +[ggez]: https://github.com/ggez/ggez +[@icefoxen]: https://github.com/icefoxen +[@nobbele]: https://github.com/nobbele +[@PSteinhaus]: https://github.com/PSteinhaus +[wgpu]: https://github.com/gfx-rs/wgpu +[ggez-issues]: https://github.com/ggez/ggez/issues + +### [Dims][dims-website] + +[![Video preview: Recreating Rhodes But In Our Own Game Engine](dims-recreating-rhodes.jpg)][dims-video-1] + +[Dims][dims-website] ([Twitter][dims-twitter], [Discord][dims-discord], +[YouTube][dims-youtube]) is a pre-alpha collaborative open-world +creation platform. +Users can hop in sessions and build a game together, allowing everyone +to bring out their inner game-maker. + +June brought about several developments for the platform, including: + +- Several development and testing streams, with the latest being + [a recreation of Rhodes from Red Dead Redemption 2][dims-video-1] within + the engine +- A new audio engine with advanced real-time synthesis and composition + capabilities, including network synchronisation +- Improved terrain manipulation tools, including new brushes, biome presets, + and more intuitive UI + - Choose between "Nordic Mountains" ⛰ and "Colorado Deserts" 🏜 +- Various improvements to the rendering engine, including decal and billboard + rendering, FBX loading, macOS support, and more +- Initial work on a versatile new scripting system, with independent threads of + execution for every object + +Want to try Dims out for yourself? Come join the [Discord][dims-discord] to be +notified of future public tests, see the latest features before everyone else, +and to talk to the devs personally. + +[dims-website]: https://dims.co +[dims-twitter]: https://twitter.com/DimsWorlds +[dims-discord]: https://discord.gg/Z5CAVmNE57 +[dims-youtube]: https://youtube.com/channel/UCR5gOwS7uSl0a0dl7MLQoqg +[dims-video-1]: https://www.youtube.com/watch?v=piEAGSFx-QU + +### [miniquad] + +![miniquad fileopen](fileopen.gif) + +[miniquad] is a safe and cross-platform rendering library +focused on portability and low-end platform support. + +In versions prior to 0.3, it was virtually impossible to integrate, for +example, a big in-app payments or advertisement SDK into a Miniquad Android +game. 0.3 has solved this, giving the possibility to interop with any Java code. +The developer has posted [a write-up of this functionality][miniquad-java] on +the macroquad site. + +[miniquad]: https://github.com/not-fl3/miniquad/ +[miniquad-java]: https://macroquad.rs/articles/java/ + +## Learning Material Updates + +### [Brontefy Me Devlog #3][hedgein-devlog-3] + +![Brontefy Me Devlog #3](brontefyme.png) + +[@hedgein][hedgein-github] continues the [Brontefy Me][hedgein-devlog-3] series! +In this latest devlog, she gives an update on where Brontefy Me will be +heading and why it slowed down. During a recent [stream][hedgein-stream], it +was also mentioned that [@hedgein][hedgein-github] is leaning towards hosting +a monthly Brontefy Me Game Jam for her community, as game jams give her +better accountability. Further updates will be given in her [Discord server][hedgein-discord]. + +[hedgein-stream]: https://www.twitch.tv/hedgein +[hedgein-discord]: https://discord.gg/FnU6hxNGaP +[hedgein-devlog-3]:https://www.youtube.com/watch?v=oNxMN47tKxs +[hedgein-github]:https://github.com/hedgein + +### [Learn Bevy's ECS by ripping off someone else's project] + +![Learn Bevy's ECS by ripping off](learn_bevys_ecs_by_ripping_off.png) + +"Learn Bevy's ECS by ripping off someone else's project" is a mini-book that uses +the game Rusty Roguelike from the book [Hands-on Rust](https://pragprog.com/titles/hwrust/hands-on-rust) +as a base, in order to explain Bevy's ECS. + +The idea is for a beginner to learn ECS concepts from the base book, then apply +them using Bevy; the structure of the game is ideal for a gentle introduction to +ECS architecture. + +[Learn Bevy's ECS by ripping off someone else's project]: https://saveriomiroddi.github.io/learn_bevy_ecs_by_ripping_off +[Saverio Miroddi/@64kramsystem]: https://twitter.com/64kramsystem + +### [Bevy Basics][bevy-basics] + +[@PhaestusFox] is close to finishing the [Bevy Basics][bevy-basics] +[User Input][BB-input] mini-series. + +In this 5 part mini-series, they cover how a developer can go about collecting +user input using the [Bevy][bevy] game engine. + +- [Episode 1][bb-1] is an overview of Bevy's various input structs +- [Episode 2][bb-2] covers keyboard presses +- [Episode 3][bb-3] covers mouse clicks and movement +- [Episode 4][bb-4] covers gamepad buttons and joysticks +- [Episode 5][bb-5] covers touchscreen or drawing pad strokes + +[@PhaestusFox]: https://www.youtube.com/c/PhaestusFox +[bevy-basics]: https://www.youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6 +[bb-input]: https://www.youtube.com/playlist?list=PL6uRoaCCw7GMWzJ-L2cU5ZruWkEld6a_N +[bb-1]: https://youtu.be/pB3ERI5JtrA +[bb-2]: https://youtu.be/G37yUGL3e1U +[bb-3]: https://youtu.be/1q5iQsLVGJA +[bb-4]: https://youtu.be/PjLozjlOgJ4 +[bb-5]: https://www.youtube.com/c/PhaestusFox +[bevy]: https://bevyengine.org/ + +## Tooling Updates + +### [Noumenal][noumenal-website] + +![Screen recording showing the construction of a heart shape using the Noumenal app.](noumenal.gif) + +[Noumenal][noumenal-website] ([App Store][noumenal-appstore], +[Discord][noumenal-discord], [Twitter][noumenal-twitter]) +by [@HackerFoo][hackerfoo-website] is an elegant 3D solid modeling app for iOS. + +After a final stretch of performance improvements, bug fixes, and even some new +features, Noumenal was released and is available on Apple's App Store! + +_Discussion: [/r/rust](https://reddit.com/r/rust/comments/vj40qq/noumenal_my_3d_modeling_app_for_ios)_ + +[noumenal-website]: https://noumenal.app +[noumenal-discord]: https://discord.gg/PFeZQE48gG +[noumenal-twitter]: https://twitter.com/noumenal_app +[noumenal-appstore]: https://apps.apple.com/us/app/noumenal/id1584884105 +[hackerfoo-website]: https://hackerfoo.com + +### [Graphite][graphite-website] + +![Graphite](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free, +in-development raster and vector 2D graphics editor. It will be powered by a +node graph compositing engine that supercharges your layer stack, providing a +completely non-destructive editing experience. + +June's [sprint 16][graphite-sprint] focused mainly on bug fixes and big +under-the-hood changes: + +- Ahead of the curve: A long-awaited refactor replaces the underlying +Bézier curve data structure in alignment with requirements for Pen tool +improvements and the upcoming node system. +- Sending mixed messages: The internal messaging system was upgraded to +sequence the message processing in a more predictable stack-based order. A new +subscription-based event broadcaster was integrated as well. +- Back on the menu: The application menu bar content definitions were moved +from the JS frontend to a permanent home in the Rust backend. + +Open the [Graphite editor][graphite-live-demo] in your browser to give it a try +and share your creations with #MadeWithGraphite on Twitter. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-sprint]: https://github.com/GraphiteEditor/Graphite/milestone/16 +[graphite-live-demo]: https://editor.graphite.rs + +### [quad-gif] + +![quad-gif screenshot](quad-gif.png) + +[quad-gif] by [@ollej] is a tiny library that can be used in a Macroquad game +to show a looping GIF animation. It also includes a small example binary that +displays a GIF in the middle of a window. The library can also be used as a +simple way to make an animation from a list of textures. + +[quad-gif]: https://github.com/ollej/quad-gif +[@ollej]: https://twitter.com/ollej + +## Library Updates + +### [psf2] + +[psf2] is a minimal, unopinionated, no-std parser for the v2 +[PC Screen Font][psf2-format] bitmap font format. + +PSF2 fonts are simple, compact, and readily available due to their use as Linux +console fonts. They are extremely fast to draw at their intended resolution, +making them a great choice to quickly get text on the screen, especially when a +low-resolution, fixed-width aesthetic is desired. + +The psf2 crate parses font data, exposing font size, glyph lookup, and iterators +to traverse a glyph's bitmap for easy rendering. Due to its limited scope, it is +much smaller and faster than conventional text rasterizers but cannot support +variable-width, anti-aliased, or shaped text. + +[psf2]: https://github.com/Ralith/psf2 +[psf2-format]: https://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html + +### [ezinput] + +[ezinput] by [@eexsty][ezinput_creator] is a powerful input-agnostic library, +targeting complete support for axis and button handling in the Bevy game +engine. + +EZInput strives to be simple as possible using the nifty ECS features that Bevy +offers, while still being powerful and flexible without using any unsafe code. +This and the previous 0.3.* releases were targeted for performance and +ergonomics improvements, including a new declarative macro to allow for +cleaner and smaller code. + +[ezinput]: https://crates.io/crates/ezinput/versions +[ezinput_creator]: https://github.com/eexsty + +### [glam] v0.21 + +[glam] is a simple and fast linear algebra crate for games and graphics. + +This month version 0.21 of glam was released. Because glam is not a generic +library, when support was added for `f64`, `i32`, and `u32` types back in glam +0.12, macros were used internally to avoid a lot of code duplication. This +unfortunately obfuscated the internals of glam for anyone who needed to view the +source. + +As of the 0.21 release the majority of glam code is now generated using an +offline tool and committed to the repo. The macros that were used to define +glam's internal implementation are gone. This means what users see when reading +docs or stepping through glam in the debugger is plain old Rust code. Many +functions have also been made `const fn` removing the need for macros to create +`const` values. + +[glam]: https://github.com/bitshifter/glam-rs + +### [kajiya] + +![A rendering of a fancy loft apartment](kajiya.jpg) + +[kajiya] by [@h3r2tic] is an experimental real-time global illumination +renderer. + +In June, a long-standing branch landed, bringing with it a complete +overhaul of indirect lighting. The new implementation uses spatiotemporal +reservoir resampling (ReSTIR) and a novel irradiance cache, bringing forth +larger scenes, quicker response to lighting changes, and less noise. + +A [detailed overview][kajiya-gi-overview] of the new global illumination +techniques is available, complete with animated diagrams! + +June has also seen the addition of texture compression, automatic exposure, +a new display rendering transform, and a simplification of the interface. +The viewer app now supports drag-and-drop of scene files, glTF models, +and HDRI backdrops. + +_Discussions: +[twitter (0.2 release)](https://twitter.com/h3r2tic/status/1532829918194806784), +[twitter (texture compression)](https://twitter.com/h3r2tic/status/1537212390982524929)._ + +[kajiya]: https://github.com/EmbarkStudios/kajiya/ +[kajiya-gi-overview]: https://github.com/EmbarkStudios/kajiya/blob/main/docs/gi-overview.md +[@h3r2tic]: https://github.com/h3r2tic + +### [Notan v0.5][Notan] + +![Notan texture to file](notan.gif) + +[Notan] is a simple and portable layer designed to create your own multimedia +apps on top of it without worrying about platform-specific code. + +The main goal is to provide a set of APIs and tools that can be used to create +your project in an ergonomic manner without enforcing any structure or pattern, +always trying to stay out of your way. The idea is that you can use it as a +foundation layer or backend for your next app, game engine, or game. + +The latest version [v0.5] fixes multiple bugs, improves [EGUI] support and adds +a new feature to export texture [to png] easily. + +[Notan]: https://github.com/Nazariglez/notan +[to png]: https://nazariglez.github.io/notan-web/examples/texture_to_file.html +[v0.5]: https://github.com/Nazariglez/notan/releases/tag/v0.5.0 +[EGUI]: https://github.com/emilk/egui + +## Other News + +- Other game updates: + - [Fires of Eschaton] is a PvP focused turn-based fantasy game, currently under + development. + - [Idu] is testing out some new water physics. + - [Combine and Conquer] has a new devlog about its sound support. + - [Fish Folly] is a new Fyrox showcase game, inspired by Fall Guys. + - [Punchy] is a beat-em-up spin off of [Fish Fight], built with Bevy. + - [Jungle Chess] is a WASM implementation of a Chinese board game. + - [Croquet] is working on synchronized physics, using Rapier. + - [Bevy City] is a voxel city generator, built with Bevy. + - [Measure Once] is a game about cutting wood into the right shapes. + - [Galactic Mess] has added new outfits and weapons. +- Other learning material updates: + - [Rustacean Station] interviewed the developer of egui. + - [Rusteroids] is a video tutorial series, building an asteroids + clone with Rust and SDL2. + - [NVIDIA GPU Profiling with Rust] is an introduction on how to use + NVIDIA's NSight tools with Rust. + - [Practical Programming with Dr. Xu] has continued their WGPU + tutorial series. + - [Anthropic Studios] (developers of Way of Rhea) posted a dev interview video. + - [Lyrapuff] posted a video showing how to render a triangle with + Vulkan and Rust. +- Other engine updates: + - [pufferfish] is a new, opinionated 2D game framework. +- Other tooling updates: + - [GBemulator] is a Game Boy emulator written from scratch. +- Other library updates: + - [bevy_mod_picking] released version 0.7 of their Bevy mouse + picking plugin. + - [bevy_mod_outline] is a Bevy plugin for drawing outlines around + meshes. + - [Bevy YOLECK] is a crate that allows Bevy games to be their own + level editor. + - [bevy_mod_raycast] released version 0.5 of their raycasting plugin. + - [taffy] is a cross-platform UI layout library. + +[Fires of Eschaton]: https://twitter.com/FiresOfEschaton/status/1534119771045826567 +[Idu]: https://twitter.com/epcc10/status/1532889644165120001 +[Combine and Conquer]: https://buckmartin.de/combine-and-conquer/2022-06-16-sound.html +[Fish Folly]: https://www.reddit.com/r/rust_gamedev/comments/vi5jok/media_fish_folly_a_fyrox_showcase_game_inspired/ +[Punchy]: https://twitter.com/spicylobsterfam/status/1540105977810255872 +[Fish Fight]: https://fishfight.org/ +[Jungle Chess]: https://www.reddit.com/r/rust_gamedev/comments/v3btkk/browser_jungle_chess_with_rust_wasm/ +[Croquet]: https://twitter.com/gocroquet/status/1531336194725797889 +[Bevy City]: https://mungbungo.itch.io/bevy-city +[Measure Once]: https://robtfm.github.io/measure_once/ +[Galactic Mess]: https://www.youtube.com/watch?v=DO8vwehkr38 +[Rustacean Station]: https://rustacean-station.org/episode/emil-ernerfeldt/ +[Rusteroids]: https://www.youtube.com/playlist?list=PLFOS-Gn3aXROnSfl26esPExssd-rQw6jD +[NVIDIA GPU Profiling with Rust]: https://simbleau.github.io/blog/gpu-profiling-with-rust/ +[Practical Programming with Dr. Xu]: https://www.reddit.com/r/rust/comments/vmpjcr/rust_wgpu_graphics_programming_tutorial_youtube/ +[Anthropic Studios]: https://www.youtube.com/watch?v=H0sIsrLWojs +[Lyrapuff]: https://www.youtube.com/watch?v=_PNiRGIAfY4 +[pufferfish]: https://github.com/pufferfish-rs/pufferfish +[GBemulator]: https://github.com/p4ddy1/gbemulator +[bevy_mod_picking]: https://github.com/aevyrie/bevy_mod_picking/releases/tag/v0.7.0 +[bevy_mod_outline]: https://github.com/komadori/bevy_mod_outline +[Bevy YOLECK]: https://github.com/idanarye/bevy-yoleck +[bevy_mod_raycast]: https://github.com/aevyrie/bevy_mod_raycast/releases/tag/v0.5 +[taffy]: https://github.com/DioxusLabs/taffy + +## Discussions + +- [/r/rust_gamedev](https://reddit.com/r/rust_gamedev/): + - ["Shopping list"][r-gamedev-shopping-list] (a list of things that + are missing from the ecosystem) + - ["Hands-on Rust: Further reading"][r-gamedev-further-reading] + - ["How can I start developing a 3D game engine?"][r-gamedev-3d] + - ["Bevy or Fyrox for 3D Game Development?"][r-gamedev-bevy-fyrox] + +[r-gamedev-shopping-list]: https://www.reddit.com/r/rust_gamedev/comments/v8tx37/shopping_list/ +[r-gamedev-further-reading]: https://www.reddit.com/r/rust_gamedev/comments/v4q4pr/handson_rust_further_reading +[r-gamedev-3d]: https://reddit.com/r/rust_gamedev/comments/v3z4i1/how_can_i_start_developing_a_3d_game_engine +[r-gamedev-bevy-fyrox]: https://reddit.com/r/rust_gamedev/comments/v7svhg/bevy_or_fyrox_for_3d_game_dev + +## Requests for Contribution + +- ['Are We Game Yet?' wants to know about projects/games/resources that + aren't listed yet][awgy]. +- [Graphite is looking for contributors][graphite-contribute] to help build the + new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [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]. + +[awgy]: https://github.com/rust-gamedev/arewegameyet#contribute +[graphite-contribute]: https://graphite.rs/contribute +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Jobs + +- [DIMS](https://dims.co/jobs) + (Stockholm/Remote): Various roles, open applications accepted +- [Embark Studios](https://careers.embark-studios.com/jobs) + (Stockholm/Hybrid Remote): Various roles, open applications accepted +- [Mutate](https://rustjobs.dev/featured-jobs/Mutate-Rust-Backend-Software-Engineer-7kfTlQFSagzwHhugw1p0) + (Remote): Rust Backend Software Engineer + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/vtrelw/this_month_in_rust_gamedev_35_june_2022/), +[Twitter](https://twitter.com/rust_gamedev/status/1545135032334950403), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/035/kajiya.jpg b/content/news/035/kajiya.jpg new file mode 100644 index 000000000..0d6ecd65a Binary files /dev/null and b/content/news/035/kajiya.jpg differ diff --git a/content/news/035/learn_bevys_ecs_by_ripping_off.png b/content/news/035/learn_bevys_ecs_by_ripping_off.png new file mode 100644 index 000000000..03c1f4449 Binary files /dev/null and b/content/news/035/learn_bevys_ecs_by_ripping_off.png differ diff --git a/content/news/035/notan.gif b/content/news/035/notan.gif new file mode 100644 index 000000000..959f63323 Binary files /dev/null and b/content/news/035/notan.gif differ diff --git a/content/news/035/noumenal.gif b/content/news/035/noumenal.gif new file mode 100644 index 000000000..2cd9282e9 Binary files /dev/null and b/content/news/035/noumenal.gif differ diff --git a/content/news/035/podcast.jpeg b/content/news/035/podcast.jpeg new file mode 100644 index 000000000..0e3134937 Binary files /dev/null and b/content/news/035/podcast.jpeg differ diff --git a/content/news/035/quad-gif.png b/content/news/035/quad-gif.png new file mode 100644 index 000000000..84f86a4a7 Binary files /dev/null and b/content/news/035/quad-gif.png differ diff --git a/content/news/035/ruggrogue.png b/content/news/035/ruggrogue.png new file mode 100644 index 000000000..82c046a95 Binary files /dev/null and b/content/news/035/ruggrogue.png differ diff --git a/content/news/035/rust_game_ports.jpg b/content/news/035/rust_game_ports.jpg new file mode 100644 index 000000000..4a246bd42 Binary files /dev/null and b/content/news/035/rust_game_ports.jpg differ diff --git a/content/news/035/star_machine.png b/content/news/035/star_machine.png new file mode 100644 index 000000000..94e226925 Binary files /dev/null and b/content/news/035/star_machine.png differ diff --git a/content/news/035/veloren.jpg b/content/news/035/veloren.jpg new file mode 100644 index 000000000..4f44ece79 Binary files /dev/null and b/content/news/035/veloren.jpg differ diff --git a/content/news/035/vetovoima.gif b/content/news/035/vetovoima.gif new file mode 100644 index 000000000..e86afb191 Binary files /dev/null and b/content/news/035/vetovoima.gif differ diff --git a/content/news/036/agma.gif b/content/news/036/agma.gif new file mode 100644 index 000000000..eb3871cb1 Binary files /dev/null and b/content/news/036/agma.gif differ diff --git a/content/news/036/astar-search.png b/content/news/036/astar-search.png new file mode 100644 index 000000000..6b1c60b2c Binary files /dev/null and b/content/news/036/astar-search.png differ diff --git a/content/news/036/bevy_fbx_maya_pbr.jpg b/content/news/036/bevy_fbx_maya_pbr.jpg new file mode 100644 index 000000000..eadd4384d Binary files /dev/null and b/content/news/036/bevy_fbx_maya_pbr.jpg differ diff --git a/content/news/036/bevy_terrain.jpg b/content/news/036/bevy_terrain.jpg new file mode 100644 index 000000000..d4243c744 Binary files /dev/null and b/content/news/036/bevy_terrain.jpg differ diff --git a/content/news/036/blackjack.gif b/content/news/036/blackjack.gif new file mode 100644 index 000000000..3d8452136 Binary files /dev/null and b/content/news/036/blackjack.gif differ diff --git a/content/news/036/bombercrab.jpeg b/content/news/036/bombercrab.jpeg new file mode 100644 index 000000000..63717f2bf Binary files /dev/null and b/content/news/036/bombercrab.jpeg differ diff --git a/content/news/036/bonsai.png b/content/news/036/bonsai.png new file mode 100644 index 000000000..7b1285895 Binary files /dev/null and b/content/news/036/bonsai.png differ diff --git a/content/news/036/botnet.png b/content/news/036/botnet.png new file mode 100644 index 000000000..32c998a96 Binary files /dev/null and b/content/news/036/botnet.png differ diff --git a/content/news/036/cnc.gif b/content/news/036/cnc.gif new file mode 100644 index 000000000..ce16ffb73 Binary files /dev/null and b/content/news/036/cnc.gif differ diff --git a/content/news/036/creating-mountains-from-planes-with-vertex-shaders-and-bevy.png b/content/news/036/creating-mountains-from-planes-with-vertex-shaders-and-bevy.png new file mode 100644 index 000000000..12f7ca483 Binary files /dev/null and b/content/news/036/creating-mountains-from-planes-with-vertex-shaders-and-bevy.png differ diff --git a/content/news/036/cybergate.jpg b/content/news/036/cybergate.jpg new file mode 100644 index 000000000..062034d9b Binary files /dev/null and b/content/news/036/cybergate.jpg differ diff --git a/content/news/036/cybergate.png b/content/news/036/cybergate.png new file mode 100644 index 000000000..5ac0408be Binary files /dev/null and b/content/news/036/cybergate.png differ diff --git a/content/news/036/dims-concept-art.jpg b/content/news/036/dims-concept-art.jpg new file mode 100644 index 000000000..5dfe98a91 Binary files /dev/null and b/content/news/036/dims-concept-art.jpg differ diff --git a/content/news/036/draw_sand.gif b/content/news/036/draw_sand.gif new file mode 100644 index 000000000..69466fca8 Binary files /dev/null and b/content/news/036/draw_sand.gif differ diff --git a/content/news/036/fdg.png b/content/news/036/fdg.png new file mode 100644 index 000000000..2b3e706ee Binary files /dev/null and b/content/news/036/fdg.png differ diff --git a/content/news/036/flesh.gif b/content/news/036/flesh.gif new file mode 100644 index 000000000..537160ec6 Binary files /dev/null and b/content/news/036/flesh.gif differ diff --git a/content/news/036/gamedev-meetup.png b/content/news/036/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/036/gamedev-meetup.png differ diff --git a/content/news/036/gamercade.gif b/content/news/036/gamercade.gif new file mode 100644 index 000000000..25b0762fc Binary files /dev/null and b/content/news/036/gamercade.gif differ diff --git a/content/news/036/godot-rust.png b/content/news/036/godot-rust.png new file mode 100644 index 000000000..01e8c5edb Binary files /dev/null and b/content/news/036/godot-rust.png differ diff --git a/content/news/036/graphite.png b/content/news/036/graphite.png new file mode 100644 index 000000000..e05688259 Binary files /dev/null and b/content/news/036/graphite.png differ diff --git a/content/news/036/index.md b/content/news/036/index.md new file mode 100644 index 000000000..b547b200a --- /dev/null +++ b/content/news/036/index.md @@ -0,0 +1,1232 @@ ++++ +title = "This Month in Rust GameDev #36 - July 2022" +transparent = true +date = 2022-08-11 +draft = false ++++ + + + + + +Welcome to the 36th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Engine Updates](#engine-updates) +- [Learning Material Updates](#learning-material-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) + + + +## Announcements + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 18th Rust Gamedev Meetup took place in July. You can watch the recording of +the meetup [here on Youtube][gamedev-meetup-video]. Here was the schedule from +the meetup: + +- RustConf Arcade Cabinet - [@carlosupina] +- Blackjack - [@setzer22] +- Dotrix - [@lowenware] +- Graphite - [@GraphiteEditor] + +The meetups take place on the second Saturday every month via the [Rust Gamedev +Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. If you would like to show off what you've been +working on at the next meetup on [August 13th][rust-meetup-time], fill out [this +form][gamedev-meetup-form]. + +[gamedev-meetup-video]: https://youtu.be/mnuchYuR_ck +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[rust-meetup-time]: https://everytimezone.com/s/17260ccd +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[@carlosupina]: https://twitter.com/carlosupina +[@setzer22]: https://twitter.com/playtheprocess +[@lowenware]: https://twitter.com/lowenware +[@GraphiteEditor]: https://twitter.com/graphiteeditor + +### Rust Game Ports Officialization + +![games collage](rust_game_ports.jpg) + +[64kramsystem][64kramsystem]'s Rust Game Ports [project][game-ports-project] has +been officially adopted by the Rust game development working group. + +The project is intended to be a reference for Rust game development, helping +developers, especially newcomers, to understand how to use Rust game libraries, +and design Rust games in general. + +Devs are invited to explore and contribute! There are ports for all the levels +and interests 😄 + +[64kramsystem]: https://github.com/64kramsystem +[game-ports-project]: https://github.com/rust-gamedev/rust-game-ports + +### [Ferris 3D Got Released!][ferris3d-github] + +![colorful render of a 3d model of Ferris with additional wireframe view](raymarch_ferris_3d_release.jpg) + +[@RayMarch][raymarch-twitter] created a 3d model of [Ferris the Rustacean][ferris] +for the Rust community! + +The model is [now available for free here on github][ferris3d-github]! + +It was released into the [public domain][public-domain] so you can use it +however you like, even commercially! + +_Discussions: [Twitter][raymarch-twitter-release]_ + +[ferris]: https://rustacean.net/ +[raymarch-twitter]: https://twitter.com/Ray__March +[raymarch-twitter-release]: https://twitter.com/Ray__March/status/1554115149312790529 +[ferris3d-github]: https://github.com/RayMarch/ferris3d +[public-domain]: https://creativecommons.org/publicdomain/zero/1.0/ + +### [Tokyo Rust Game Hack Event][tokyo-event]: Aug 12th + +![pixelart ferris and bombs](bombercrab.jpeg) + +The team at [tonari.no](http://tonari.no) is back with the second edition +of the Tokyo Rust Game Hack event! + +> For this edition of the Game Hack event, we're dragging you back +> through the mists of time, to the earlier days of arcade games. +> We've built a Bevy-powered, simple reimagining of classic Bomberman, +> with a modern twist. +> Players don't participate by taking turns on an arcade stick. +> Instead, we will provide a crate that defines the character's +> interaction with the world through a Player trait. +> By simply implementing that trait and compiling to a wasm target, +> you'll be able to upload your character to the game, live. +> Adapt your strategy on the fly and bomb your way into the scoreboard! + +[The player template repository][bombercrab-player] is open sourced +ahead of time so you can get a nice headstart. + +If you decide to come please sign up on [the event's page][tokyo-event]. +You can participate physically or online, see the full announcement +for the details. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/w7bktx/2022_tokyo_rust_game_hack_event)_ + +[tokyo-event]: https://bombercrab-rust-game-hack.peatix.com/view +[bombercrab-player]: https://github.com/tonarino/bombercrab-player + +## Game Updates + +### [Way of Rhea][wor] + +[![way of rhea capsule image](wor-capsule.jpg)][wor] + +[Way of Rhea][wor] is a puzzle adventure with hard puzzles and forgiving +mechanics being produced by [@masonremaley][wor-mason-remaley] in a custom Rust +engine. You can support development by +[checking out the free demo and wishlisting on Steam][wor]! + +Way of Rhea was selected to be part of [PAX Rising online][wor-pax-rising]! It +was also shown off in the June [Steam Game Festival][wor-steam-game-fest]. +Other recent updates: + +- Kotaku mentioned Way of Rhea in an article about + [fascinating upcoming indie games][wor-kotaku] +- [Lost In Cult][wor-lic], a gaming journal, announced [preorders][wor-lic-pre] for + a new edition of Lock On containing a card game containing a card with a character + from Way of Rhea featured +- Mason posted a video interview covering [why he became an indie dev][wor-interview], + among other things +- Work has begun on puzzles for the final level of the game. This area combines the + puzzle elements from all previous biomes for a final set of challenging puzzles. +- A weather system with [rain][wor-rain] and [snow][wor-snow] was added to the game +- More progress was made on the unreleased Linux platform layer +- More wildlife was added to the game +- Some logging and editor improvements were made + +[wor]: https://store.steampowered.com/app/1110620/Way_of_Rhea/?utm_campaign=tmirgd&utm_source=n36 +[wor-pax-rising]: https://store.steampowered.com/sale/PAXRisingOnline +[wor-steam-game-fest]: https://store.steampowered.com/sale/nextfest_june2022 +[wor-kotaku]: https://kotaku.com/steam-indie-games-pc-wishlist-arctic-awakening-1849140770 +[wor-mason-remaley]: https://twitter.com/masonremaley +[wor-forum]: https://steamcommunity.com/app/1110620/discussions/0/3275817732933009791/ +[wor-rain]: https://twitter.com/AnthropicSt/status/1546207348259266560 +[wor-snow]: https://twitter.com/AnthropicSt/status/1546320074923024384 +[wor-lic]: https://www.lostincult.co.uk/ +[wor-lic-pre]: https://www.lostincult.co.uk/?aff=18 +[wor-interview]: https://youtu.be/H0sIsrLWojs + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="https://github.com/flesh.gif" + caption="3rd area") }} + +[Flesh] by [@im_oab] is a 2D-horizontal shmup game with hand-drawn animation and +an organic/fleshy theme. It is implemented using [Tetra]. This month's updates +include: + +- The game has BGM. +- Support global leaderboard. +- Integrate steam SDK using [steamworks] crate. +- Add new enemy types for the 3rd area. +- Add squeezing effect when the enemy gets hit. + +[Flesh]: https://store.steampowered.com/app/1660850/Flesh/ +[@im_oab]: https://twitter.com/im_oab +[Tetra]: https://github.com/17cupsofcoffee/tetra +[steamworks]: https://crates.io/crates/steamworks + +### [CyberGate][cybergate-yt] + +{{ image_figure( + alt="hundreds of colliding colored balls in the air" + src="https://github.com/cybergate.jpg" + caption="The server and clients are able to smoothly handle over a thousand balls rained from above") }} + +CyberGate ([YouTube][cybergate-yt], [Discord][cybergate-dis]) by CyberSoul +is a new multiplayer project that aims at procedurally generating distinct +universes and gameplay experiences. CyberGate is the name of the main world +where universes can be created and accessed by quantum portals. + +Recent updates: + +- Bandwidth became 16 times smaller by implementing entity prioritization + \+ other techniques. +- Interpolation and Jitter prediction makes entities way smoother. +- Automatic and Reliable Spawn and Despawn of entities. +- Many other features and optimizations to do with rapier 3d physics, + wgpu renderer, and quinn (quic) protocol. + +[Join the Discord server][cybergate-dis] to participate in tests. + +_Discussions: [/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/vy7vms/multiplayer_stress_test_1_million_balls)_ + +[cybergate-yt]: https://youtube.com/channel/UClrsOso3Xk2vBWqcsHC3Z4Q +[cybergate-dis]: https://discord.gg/R7DkHqw7zJ + +### [Botnet] + +![A grid with dots and arrows](botnet.png) + +[Botnet] is an upcoming programming-based multiplayer game, where you write +scripts (compiled to WebAssembly) to control robots. Coordinate your network +of bots to gather resources, build new industry, and expand your control of +the server! + +This month was primarily spent on BotnetReplayViewer - a visual program to +watch matches and inspect entity data. + +Additionally, the antenna structure was added. Building an antenna gives you +control over the bay (room) it's in, letting you build additional structures, +and increasing the total number of bots you can control. Bots can also use +antennas to store resources. + +Interested in contributing? Head over to the +[GitHub discussion page][botnet_ideas] and suggest some ideas! + +[Botnet]: https://github.com/JMS55/botnet +[botnet_ideas]: https://github.com/JMS55/botnet/discussions/categories/ideas + +### [Re-Rolling!] + +![Re-rolling gameplay](re-rolling_gameplay.png) + +[Re-Rolling!] by [@mystalice](https://twitter.com/mystalice) is a top-down 2D +survival shooter where you fight off a horde of rats using weapons you randomly +rolled. + +The game was created for [GMTK Jam 2022][rr_gmtk2022] in 48 hours and was +heavily inspired by [20 Minutes Till Dawn][rr_20minutes]. + +Re-Rolling! was made with Bevy using heron for physics, bevy_egui for in-game +UI, and a handful of other helpful crates and plugins. You can browse the source +on [GitHub][rr_github]. + +[Re-Rolling!]: https://mystal.itch.io/re-rolling +[rr_gmtk2022]: https://itch.io/jam/gmtk-jam-2022 +[rr_20minutes]: https://store.steampowered.com/app/1966900/20_Minutes_Till_Dawn/ +[rr_github]: https://github.com/mystal/re-rolling + +### [Robo Instructus: 3 Years Old][robo-3] + +![game logo + OS logos](robo-os.jpg) + +In 2019 the programming puzzler [Robo Instructus][robo-site] was released +on [Steam][robo-steam] & [itch.io][robo-itch]. + +This month [Alex Butler][alex-butler] wrote ["Robo Instructus: 3 Years Old"][robo-3] +about how well the game did in the last year & to date: Sales by +platform/country/OS, player feedback, reviews & game updates. + +[robo-site]: https://www.roboinstruct.us +[robo-steam]: https://store.steampowered.com/app/1032170/Robo_Instructus +[robo-itch]: https://bigabgames.itch.io/robo-instructus +[alex-butler]: https://twitter.com/bigabgames +[robo-3]: https://blog.roboinstruct.us/2022/07/16/3-years-old.html + +### [Simon Arcade] + +{{ image_figure( + alt="Simon arcade gameplay with arrows and buttons in different colors" + src="https://github.com/simon.gif" + caption="a Simon Arcade gameplay with cheats enabled") }} + +Based on [Simon (Original)], made with [Bevy], +the goal of this game is to push buttons in the correct order, +in an ever-increasing sequence. + +This game was made to fit with the [Rust Arcade Cabinet] +and was showcased at [RustConf Portland] on August 5th 2022. + +[Simon Arcade]: https://github.com/Vrixyz/simon +[Simon (Original)]: https://en.wikipedia.org/wiki/Simon_(game) +[Rust Arcade Cabinet]: https://github.com/rust-arcade/bevy-rust-arcade +[RustConf Portland]: https://rustconf.com +[Bevy]: https://bevyengine.org + +### [Veloren][veloren] + +{{ image_figure( + alt="Gliding above a forest" + src="https://github.com/veloren.jpg" + caption="New cave systems to explore") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In July, Veloren released 0.13! You can [read the full blog post][veloren-0.13] +that includes a trailer for the release party, and information about the new +features in the release. This release party set a new record for most players on +the server at once, going from 195 to now 277! This version brings modular +weapons, real-time weather, cliff towns, cave biomes, level of detail trees, and +much more. + +Other than the release party, July saw lots of work getting done. The +translation system is undergoing an overhaul. Work is being done on the +Scrolling Combat Text system, which gives some visual indicator to how much +damage or healing you're taking. Though is going into how to better handle +server-side physics to reduce latency. + +July's full weekly devlogs: "This Week In Veloren...": +[#179][veloren-179], +[#180][veloren-180], +[#181][veloren-181], +[#182][veloren-182]. + +[veloren]: https://veloren.net +[veloren-0.13]: https://veloren.net/release-0-13 +[veloren-179]: https://veloren.net/devblog-179 +[veloren-180]: https://veloren.net/devblog-180 +[veloren-181]: https://veloren.net/devblog-181 +[veloren-182]: https://veloren.net/devblog-182 + +### [Agma] + +{{ image_figure( + alt="an animated black-colored character runs around and attacks anoter one" + src="https://github.com/agma.gif" + caption="Moving around") }} + +[Agma] by [@TuckerBMorgan] is a 3D game built in the [Storm Engine] that is based +on games like Lost Ark and Diablo. The author has been writing about their experience +with changing how they approach working on personal projects [here]. +It is built using a custom UDP-based networking stack, a custom ECS, +and a custom-skinned mesh renderer to maximize what the author could learn. + +[Agma]: https://github.com/TuckerBMorgan/Agma +[@TuckerBMorgan]: https://twitter.com/T_B_Morgan +[here]: https://medium.com/@tucker.bull.morgan/summoning-a-devil-544b130c8889 +[Storm Engine]: https://github.com/mooman219/Storm + +### [Combine&Conquer][cnc-logs] + +{{ image_figure( + alt="zoomin gout from individual tiles to the whole space system" + src="https://github.com/cnc.gif" + caption="Seamless transition between planet and space views") }} + +[Combine&Conquer][cnc-itch] by [Martin Buck][@I3ck] is a WIP strategy game +about automation similar to Satisfactory or Factorio. +This month's updates include: + +- [Audio support, a new space view, colonization of planets, + inventory overlay, and better notifications][cnc-log-0-8]. +- [New textures for structures, info box, updated overlays and modles][cnc-log-0-9]. + +[@I3ck]: https://github.com/I3ck +[cnc-itch]: https://martinbucksoftware.itch.io +[cnc-logs]: https://buckmartin.de/combine-and-conquer.html +[cnc-log-0-8]: https://buckmartin.de/combine-and-conquer/2022-07-06-v0.0.8.html +[cnc-log-0-9]: https://buckmartin.de/combine-and-conquer/2022-07-31-v0.0.9.html + +### Life Code + +[![Youtube video preview: lowpoly raccoon, "crazy eco dong game" text +and logos of Bevy, Rust and WebAssembly](lifecode.jpg)][lifecode-video] + +[Bytellation shared the first video devlog][lifecode-video] of a WIP ecosystem +coding game "Life Code": + +> The game is intended to run in the browser and will be written +> in Rust which will be compiled to WASM. +> I'm using a very new and not yet matured game engine called Bevy. +> I will be creating the art and models in the game using Blender. +> +> This will be a coding game which means players will have to use languages +> such as Python, Javascript, Rust, C++, and hopefully many more. +> It will be possible to play even if you don't know how to code but the game +> will try to guide you to use real code instead of predefined behavior sets. +> Follow my journey where I try to create an impossible solo indie game +> with little to no game dev experience. + +[lifecode-video]: https://youtube.com/watch?v=a6ZnhXGp3JI + +## Engine Updates + +### [Bevy v0.8][bevy-blog] + +{{ image_figure( + alt="bevy terrain" + src="https://github.com/bevy_terrain.jpg" + caption="Bevy-shaped mountains in a Bevy-based Witcher 3 terrain texturing tool built by rmemr") }} + +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. It +is [free and open source][bevy-git] forever! + +Bevy 0.8 was a massive community effort. You can check out the [full release +blog post here][bevy-blog], but here are some highlights: + +- [New Material System][bevy-materials] +- [Camera-driven Rendering][bevy-camera] +- [Built-in Shader Modularization][bevy-shader-mod] +- [Spot Lights][bevy-spotlights] +- [Visibility Inheritance][bevy-visibility] +- [Upgraded to wgpu 0.13][bevy-wgpu] +- [Automatic Mesh Tangent Generation][bevy-tangent] +- [Renderer Optimizations][bevy-render-opt] +- [Scene Bundle][bevy-scene] +- [Scripting / Modding Progress][bevy-scripting] +- [ECS Query Ergonomics and Usability][bevy-ecs-ergo] +- [ECS Internals Refactors][bevy-refactors] +- [Reflection Improvements][bevy-reflect] +- [Hierarchy Commands][bevy-hierarchy] +- [Bevy UI Now Uses Taffy][bevy-taffy] + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/wc0sqc/bevy_08), +[Hacker News](https://news.ycombinator.com/item?id=32287828), +[Twitter](https://twitter.com/cart_cart/status/1553411157662187521)_ + +[bevy]: https://bevyengine.org +[bevy-git]: https://github.com/bevyengine/bevy +[bevy-blog]: https://bevyengine.org/news/bevy-0-8 +[bevy-materials]: https://bevyengine.org/news/bevy-0-8/#new-material-system +[bevy-camera]: https://bevyengine.org/news/bevy-0-8/#camera-driven-rendering +[bevy-spotlights]: https://bevyengine.org/news/bevy-0-8/#spotlights +[bevy-visibility]: https://bevyengine.org/news/bevy-0-8/#visibility-inheritance +[bevy-shader-mod]: https://bevyengine.org/news/bevy-0-8/#built-in-shader-modularization +[bevy-wgpu]: https://bevyengine.org/news/bevy-0-8/#wgpu-0-13-new-wgsl-shader-syntax +[bevy-tangent]: https://bevyengine.org/news/bevy-0-8/#automatic-mesh-tangent-generation +[bevy-render-opt]: https://bevyengine.org/news/bevy-0-8/#render-phase-sorting-optimization +[bevy-scene]: https://bevyengine.org/news/bevy-0-8/#scene-bundle +[bevy-scripting]: https://bevyengine.org/news/bevy-0-8/#scripting-modding-progress-untyped-ecs-apis +[bevy-ecs-ergo]: https://bevyengine.org/news/bevy-0-8/#query-intoiter +[bevy-refactors]: https://bevyengine.org/news/bevy-0-8/#ecs-lifetimed-pointers +[bevy-reflect]: https://bevyengine.org/news/bevy-0-8/#bevy-reflection-improvements +[bevy-hierarchy]: https://bevyengine.org/news/bevy-0-8/#hierarchy-commands +[bevy-taffy]: https://bevyengine.org/news/bevy-0-8/#taffy-migration-a-refreshed-ui-layout-library + +### [Dims][dims-website] + +![Concept art of a player creating a world in Dims](dims-concept-art.jpg) + +[Dims][dims-website] ([Twitter][dims-twitter], [Discord][dims-discord], +[YouTube][dims-youtube]) is a pre-alpha collaborative open-world +creation platform. +Users can hop in sessions and build a game together, allowing everyone +to bring out their inner game-maker. + +In July, development continued to make great strides. Some of the highlights +include: + +- Continued work on the audio system, including in-game graphs of attenuation + and other audio-related functions +- The introduction of an intent system that allows for user actions to be + undone and replayed arbitrarily +- A complete UI facelift using Material UI icons and a new design language +- A new scripting system using WebAssembly + WASI and Rust as a guest language + (look forward to an article on this soon!) +- The beginnings of a shared asset database that lets you and your team easily + share assets amongst each other and with other projects +- Various infrastructural and rendering fixes, including more accurate PBR + +Want to try Dims out for yourself? Come join the [Discord][dims-discord] to be +notified of future public tests, see the latest features before everyone else, +and to talk to the devs personally. + +[dims-website]: https://dims.co +[dims-twitter]: https://twitter.com/DimsWorlds +[dims-discord]: https://discord.gg/Z5CAVmNE57 +[dims-youtube]: https://youtube.com/channel/UCR5gOwS7uSl0a0dl7MLQoqg + +### [godot-rust][gd-github] + +![godot-rust logo](godot-rust.png) + +godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter]) +is a Rust library that provides bindings for the Godot game engine. + +The last few months have been a bit quieter around godot-rust. A lot of this +can be attributed to developers exploring the [GDExtension API][gd-gdext], the +successor of GDNative for Godot 4. At this point, a lot of the foundation is +still being built, however, some more concrete plans are outlined in +[#824][gd-824]. Further updates will be posted in that issue or on Twitter. + +Nevertheless, several improvements have been integrated to godot-rust since +0.10, with [version 0.10.1 on the horizon][gd-907]. Some notable examples: + +- GDScript utility functions like lerp, ease or linear2db ([#901][gd-901]) +- Property support for standard collection types ([#883][gd-883]) +- Methods for Rect2 and Aabb ([#867][gd-867]) + +[gd-824]: https://github.com/godot-rust/godot-rust/issues/824 +[gd-883]: https://github.com/godot-rust/godot-rust/issues/883 +[gd-867]: https://github.com/godot-rust/godot-rust/issues/867 +[gd-901]: https://github.com/godot-rust/godot-rust/issues/901 +[gd-907]: https://github.com/godot-rust/godot-rust/issues/907 +[gd-github]: https://github.com/godot-rust/godot-rust +[gd-discord]: https://discord.com/invite/FNudpBD +[gd-twitter]: https://twitter.com/GodotRust +[gd-gdext]: https://godotengine.org/article/introducing-gd-extensions + +### [Gamercade] + +{{ image_figure( + alt="Gamercade preview" + src="https://github.com/gamercade.gif" + caption="WASM 3d CPU Rendering On a 2d Fantasy Console?") }} + +[Gamercade] ([Discord][Gamercade-Discord], [GitHub][Gamercade-GitHub]) +by @RobDavenport is a WASM-powered fantasy console focused +on building multiplayer neo-retro games. + +After over half a year in development, Gamercade and related tools are ready +for pre-alpha testing. This includes the [console][Gamercade-Console] itself, +as well as the [editor][Gamercade-Editor]. + +Gamercade's killer feature is the ease of developing multiplayer games. +The console is able to simplify networked game development process +in the best way possible: build a local multiplayer game, and get full online +play for free! + +The WASM Api features powerful but simple built-in features like input, +2d graphics, random number generation, and more. Limitations do exist, but are +flexible, such as resolutions up to 1920 x 1080, and a maximum of 256 color +palettes with up to 64 colors each. + +The community around the project is small, but is looking to expand. +Come on over to the [subreddit][Gamercade-Subreddit], or hang out and chat +on [Discord][Gamercade-Discord], where the developers interact with members +and post updates daily. The project is newly [open source][Gamercade-GitHub] +and looking for contributors, suggestions, as well as awesome game demos. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/w8idew/announcing_gamercade_a_new_wasm_powered_fantasy), +[/r/fantasyconsoles](https://reddit.com/r/fantasyconsoles/comments/w8ics8/announcing_gamercade_a_new_wasm_powered_fantasy)_ + +[Gamercade]: https://gamercade.io +[Gamercade-Console]: https://github.com/gamercade-io/gamercade_console +[Gamercade-Editor]: https://github.com/gamercade-io/gamercade_editor +[Gamercade-Discord]: https://discord.gg/Qafv2Fpt5j +[Gamercade-GitHub]: https://github.com/gamercade-io + +## Learning Material Updates + +### [Sand Fall With Compute Shaders in Rust][sandfall-tutorial] + +{{ image_figure( + alt="sandfall_8k" + src="https://github.com/draw_sand.gif" + caption="Drawing Sand") }} + +[@hakolao] published a [tutorial][sandfall-tutorial] about creating +[cellular automata][wiki-cgol] sand fall simulations with compute shaders. + +Typically, cellular automata sand fall is done with the CPU due to the two-way +relationship between the cells on a grid. This article shows a way to tackle +sand fall creation using compute shaders to achieve massive parallelism. + +Additional to compute shaders, this tutorial is a great introduction to the +[Vulkano](https://github.com/vulkano-rs/vulkano) library. It also works as a +good base for learning how to create simple graphics pipelines. You will also +get to use Bevy and Egui. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/vmynrq/sand_fall_with_compute_shaders_in_rust)_ + +[@hakolao]: https://github.com/hakolao +[sandfall-tutorial]: https://okkohakola.com/posts/sandfall_tutorial +[wiki-cgol]: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life + +[sand fall with compute shaders in rust]: https://www.okkohakola.com/posts/sandfall_tutorial/ + +### [Pathfinding in Rust][pf-in-rust] + +![Example of the results of doing an A* search from a start node to a goal node](astar-search.png) + +[Pathfinding in Rust: A tutorial with examples][pf-in-rust] +is an article with examples of how to use the [pathfinding] +crate to do breadth-first, Dijkstra's, and A* search. It links to the +[gregstoll/rust-pathfinding] repo which has working code for all of these. + +[pf-in-rust]: https://blog.logrocket.com/pathfinding-rust-tutorial-examples +[pathfinding]: https://crates.io/crates/pathfinding +[gregstoll/rust-pathfinding]: https://github.com/gregstoll/rust-pathfinding + +### [Creating Mountains From Planes with Vertex Shaders and Bevy][chrisbiscardi-vid1] + +{{ image_figure( + alt="vertex shaders example" + src="https://github.com/creating-mountains-from-planes-with-vertex-shaders-and-bevy.png" + caption="Creating mountains from planes with vertex shaders and Bevy", + link="https://youtube.com/watch?v=85uJc81SQZ4") }} + +[@chrisbiscardi] published a [video][chrisbiscardi-vid1] +about using the new Material shader APIs in Bevy 0.8 to transform the +vertex positions in a custom mesh plane using a vertex shader. + +_Discussions: [Twitter](https://twitter.com/chrisbiscardi/status/1549089599971938304)_ + +[chrisbiscardi-vid1]: https://youtube.com/watch?v=85uJc81SQZ4 +[@chrisbiscardi]: https://twitter.com/chrisbiscardi + +### [What's in a wgsl fragment shader? ft Bevy][chrisbiscardi-vid2] + +{{ image_figure( + alt="vertex shaders example" + src="https://github.com/whats-in-a-wgsl-fragment-shader-with-bevy.png" + caption="What's in a wgsl fragment shader? ft Bevy", + link="https://youtube.com/watch?v=SOOOc9-joVo") }} + +[@chrisbiscardi] published a [video][chrisbiscardi-vid2] +that introduces the new Material APIs in Bevy 0.8. It covers AsBindGroup, +uniforms, and using Perlin Noise in a fragment shader to render different +colors onto a cube in a variety of ways. + +_Discussions: [Twitter](https://twitter.com/chrisbiscardi/status/1546909993726726144)_ + +[chrisbiscardi-vid2]: https://youtube.com/watch?v=SOOOc9-joVo +[@chrisbiscardi]: https://twitter.com/chrisbiscardi + +### [Rusteroids][rusteroids-youtube-playlist] + +[![A screenshot of the latest Rusteroids tutorial](rusteroids-screenshot-tutorial15.png)][rusteroids-youtube-playlist] + +[Rusteroids][rusteroids-github] is a tutorial recreating a clone of Asteroids +in Rust, using SDL2 and the [Specs][rust-specs-crate] library. + +New episodes are released weekly and added to the playlist. The most +recent video shows how to safely create global state to store global values, +such as the high score. The most recent code has been released for Windows, on +[Itch.io][itch-io] (with other platforms coming soon). + +You can subscribe to the [YouTube Channel][electrocat-youtube], +to never miss an episode, or follow [@ecatstudios][ecatstudios-twitter] on +Twitter! + +[rusteroids-youtube-playlist]: https://youtube.com/playlist?list=PLFOS-Gn3aXROnSfl26esPExssd-rQw6jD +[rusteroids-github]: https://github.com/filtoid/rusteroids +[rust-specs-crate]: https://docs.rs/specs/latest/specs/ +[itch-io]: https://filtoid.itch.io/rusteroids +[electrocat-youtube]: https://youtube.com/channel/UC1m6P72nySpB3lKWDYGVipw +[ecatstudios-twitter]: https://twitter.com/ecatstudios + +### [RuggRogue Source Code Guide][ruggrogue-guide] + +![A screenshot from RuggRogue: a tiled view on a dungeon +and a classic textual UI](ruggrogue.png) + +[@tung] has been working on a simple web-playable roguelike [RuggRogue][ruggrogue] +inspired by the [Rust Roguelike Tutorial][rl-tut] +and documented the source code structure in a guide: + +> If you want to learn about the [source code][ruggrogue-src], you'll also want +> to check out the [RuggRogue Source Code Guide][ruggrogue-guide]: +> a 23-chapter technical web book about the ideas, +> algorithms and structure of the code. +> It covers topics such as rendering, event handling, game states, +> the hand-rolled field of view and pathfinding calculations, +> game balance and more. + +_Discussions: +[/r/roguelikes](https://reddit.com/r/roguelikes/comments/vluuud/ruggrogue_a_simple_webplayable_roguelike_inspired), +[/r/rust](https://reddit.com/r/rust_gamedev/comments/vluy7u/ruggrogue_a_simple_webplayable_roguelike_made)_ + +[@tung]: https://github.com/tung +[ruggrogue]: https://tung.github.io/ruggrogue +[ruggrogue-web]: https://tung.github.io/ruggrogue/play +[ruggrogue-src]: https://github.com/tung/ruggrogue +[ruggrogue-guide]: https://tung.github.io/ruggrogue/source-code-guide +[rl-tut]: https://bfnightly.bracketproductions.com/ + +## Tooling Updates + +### [NES Bundler][nes-bundler] + +{{ image_figure( + alt="NES Bundler running Data Man with GUI showing" + src="https://github.com/nes-bundler.png" + caption="NES Bundler in action") }} + +[NES Bundler][nes-bundler] is a NES ROM packaging tool by [@tedsteen]. +Did you make a NES-game but none of your friends own a Nintendo? Don't worry. +Put your ROM and configuration in NES Bundler and build an executable for Mac, +Windows or Linux. What you get is a single executable with + +- Simple UI for settings +- Re-mappable Keyboard and Gamepad input (you bundle your default mappings). +- Save/Restore state +- Netplay! + +It's early days, but the key features are there, and work is ongoing +to make it more mature! + +[nes-bundler]: https://github.com/tedsteen/nes-bundler +[@tedsteen]: https://github.com/tedsteen + +### [Blackjack] + +![Blackjack: A procedural bridge being edited in real-time](blackjack.gif) + +[Blackjack] by @setzer22 is a new procedural modeling application made in Rust, +using rend3, wgpu, and egui. It follows the steps of applications like +Houdini, or Blender's geometry nodes project and provides a node-based +environment to compose procedural recipes to create 3d models. + +The focus for the past few months has been on evolving Blackjack from a proof +of concept into a usable application. Its current status is not yet production +ready, but it can now be used to build complex procedural models editable inside +a game engine thanks to its new engine integration system. + +Some of the new features include: + +- A better data model for meshes, based on groups and channels. +- Game engine integration with Godot, more engines coming soon. +- Introduce Lua as an extension language. +- Add many new nodes: Extrude along curve, Copy to points... +- Add experimental support for L-Systems. +- Reworked Look & Feel + +A talk about Blackjack's vision and a tour of its features was shared at the +start of July in the [Rust gamedev meetup][blackjack-talk-yt]. Interested +developers are encouraged to [check the project out on GitHub][Blackjack] and +post on the Discussion boards! + +[Blackjack]: https://github.com/setzer22/blackjack +[blackjack-talk-yt]: https://onrendering.com/data/papers/catmark/HalfedgeCatmullClark.pdf + +### [bevy_shadertoy_wgsl] and [GLSL2WGSL] + +![Shaders courtesy of @leondenise.](shadertoy_wgsl_leon.gif) + +[bevy_shadertoy_wgsl] is a [Shadertoy] clone for the Bevy game engine, +where the GLSL shader language is replaced by WGSL. It already comes +with a dozen examples and plenty more to go. Feel free to add your own +shaders to the list! + +Plus, [GLSL2WGSL] is a new translator tool that should help migrate the +vast majority of GLSL code to WGSL. + +The above GIF showcases the new additions to the examples for +[bevy_shadertoy_wgsl]: two shaders originally written in [Shadertoy] by +[@leondenise], and translated to WGSL with the help of [GLSL2WGSL]. +The first part is a reproduction of Joe Gardner from the movie Soul, +and the second part is a lightweight fluid shader. + +[bevy_shadertoy_wgsl]: https://github.com/eliotbo/bevy_shadertoy_wgsl +[Shadertoy]: https://www.shadertoy.com +[GLSL2WGSL]: https://eliotbo.github.io/glsl2wgsl/ +[@leondenise]: https://twitter.com/leondenise + +### [Graphite][graphite-website] + +![Graphite logo](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free, +in-development raster and vector 2D graphics editor that will be based around a +Rust-powered node graph compositing engine. + +July's [sprint][graphite-sprint-17] focused on editor-centric +refactors upgrading stopgap measures to more robust systems. + +- Making a splash: The default document is replaced by a welcome splash screen + following a refactor allowing for zero open documents. +- Modifying for Macs: Input handling supports the nonstandard modifier keys on + Mac keyboards, including labels in the UI. +- Setting a high bar: The menu bar cleans up actions and supports new ones like + "File" > "Import". Displayed hotkeys are based on the actual key mapping + source, varying by OS. +- Keeping organized: The editor codebase is restructured to cut away technical + debt and create consistency for new contributors and better docs going forward. + +Open the [Graphite editor][graphite-live-demo] in your browser to give it a try +and share your creations with #MadeWithGraphite on Twitter. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-sprint-17]: https://github.com/GraphiteEditor/Graphite/milestone/17 +[graphite-live-demo]: https://editor.graphite.rs + +### Nintendo Switch Will Be a Tier 3 Target in Rust 1.64 + +[The pull request by @jam1garner][switch-pr] that adds a no_std support for +the aarch64-nintendo-switch-freestanding target was merged this month +after a lengthy legal investigation. +This is the first step towards working on incrementally adding support +for the Nintendo Switch. +Check out [this Twitter thread][switch-twi] for more details +about the changes. + +And btw, speaking of Nintendo targets: the std support for the Nintendo 3DS +(armv6k-nintendo-3ds) was [also merged this month][3ds-pr]! + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/vzr6oq/nintendo_switch_target_merged)_ + +[@jam1garner]: https://github.com/jam1garner +[switch-pr]: https://github.com/rust-lang/rust/pull/88991 +[switch-twi]: https://twitter.com/jam1garner/status/1547814292107378695 +[3ds-pr]: https://github.com/rust-lang/rust/pull/95897 + +## Library Updates + +### [bevy_godot] + +[bevy_godot] is an in-development library that offers a familiar Bevy environment +inside of the [Godot Engine][godot-engine]. [bevy_godot] currently features Scene +Tree integration, collision detection, spawning Godot scenes from Bevy, and +included examples to demonstrate the API. The upcoming update will feature Godot +signal events, Bevy assets integration, and a full implementation of the Dodge +the Creeps example game. + +[bevy_godot] is looking for contributors to help grow the library to fit all +Godot Engine game development needs. + +[bevy_godot]: https://github.com/rand0m-cloud/bevy_godot +[godot-engine]: https://godotengine.org + +### [hecs] + +[hecs] is a fast, lightweight, and unopinionated archetypal ECS library. + +[Version 0.8][hecs-changelog] marks a breaking change to most methods that +previously took a generic type parameter `T: Component`, replacing them with +methods taking type parameters which must be _references to_ component types +instead. This resolves a long-standing footgun where users accustomed to writing +`&T` in queries might write `world.get::<&T>`, interpreted by rustc as +referencing the valid component type `&'static T`, resulting in code that +compiles but fails to access the intended component. + +[hecs]: https://github.com/Ralith/hecs +[hecs-changelog]: https://github.com/Ralith/hecs/blob/master/CHANGELOG.md#080 + +### [bevy_mod_wanderlust] + +[bevy_mod_wanderlust] +([GitHub](https://github.com/PROMETHIA-27/bevy_mod_wanderlust)) by +[@PROMETHIA-27] is a character controller plugin for Bevy engine. + +Inspired by [this excellent video](https://www.youtube.com/watch?v=qdskE8PJy6Q), +it is implemented on top of [Rapier physics](https://rapier.rs) and highly +customizable. Wanderlust includes a variety of settings to target many different +character controller types, including 2D/3D platformers, spacecraft, and +first/third person games. + +[bevy_mod_wanderlust]: https://crates.io/crates/bevy_mod_wanderlust +[@PROMETHIA-27]: https://github.com/PROMETHIA-27 + +### [Lyon] + +![Variable width stroke in action](lyon.png) + +[Lyon] ([GitHub](https://github.com/nical/lyon)) by [Nical](https://github.com/nical) +is a collection of crates providing various 2D vector graphics utilities, including +fast tessellation algorithms, easy to integrate in typical GPU accelerated rendering +engines. + +Lyon made its symbolic [1.0.0 release](https://crates.io/crates/lyon/1.0.0) +reflecting the stability of the project. Highlights in this release include: + +- Initial support for variable line width in the stroke tessellator. +- An efficient algorithm to query positions at given distances along a path. +- Improved support for specifying custom endpoint attributes in paths and algorithms. +- And more. You can read the [announcement blog post here](https://nical.github.io/posts/lyon-1-0.html). + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/vwdxim/announcing_lyon_100), +[Twitter](https://twitter.com/nicalsilva/status/1546424285442473987?s=20&t=S1fXSoh2zWHbfTImCGYpPQ)_ + +[Lyon]: https://github.com/nical/lyon + +### [Renet] + +{{ image_figure( + alt="3D capsles shooting red dots at each other" + src="https://github.com/renet_bevy_demo.gif" + caption="Demo using renet and bevy") }} + +[Renet] by [@lucaspoffo] is a network library to create +games with the Server-Client architecture. + +Built on top of UDP, it has its own protocol to send and receive reliable messages +more suited for fast-paced games than TCP. Some other features are: + +- Connection management +- Authentication and encrypted connections +- Communication through multiple types of channels: + - Reliable Ordered: guarantee ordering and delivery of all messages + - Unreliable Unordered: no guarantee of delivery or ordering of messages + - Block Reliable: for bigger messages, such as level initialization +- Packet fragmentation and reassembly + +Renet comes with [bevy_renet], a plugin for the Bevy engine, and also with +[renet_visualizer], an egui interface to visualize network metrics. + +[Renet]: https://github.com/lucaspoffo/renet +[@lucaspoffo]: https://github.com/lucaspoffo +[bevy_renet]: https://github.com/lucaspoffo/renet/tree/master/bevy_renet +[renet_visualizer]: https://github.com/lucaspoffo/renet/tree/master/renet_visualizer + +### [miniquad] + +{{ image_figure( + alt="miniquad fileopen" + src="https://github.com/miniquad_gl2.gif" + caption="VirtualBox, gl2 as the only GPU acceleration available") }} + +[miniquad] is a safe and cross-platform rendering library +focused on portability and low-end platform support. + +This month [OpenGl 2.1/GLESv2][gl2pr] PR got merged, adding support for old +android phones, virtual machines, and just old computers. +While the PR itself is quite small, it solved a very old design issue: +[compatibilities proposal][mqcompat]. Fixing this issue opened the door for +both lower-end backends, like gl1, and higher-level backends. Metal is the +next in line. + +[miniquad]: https://github.com/not-fl3/miniquad/ +[gl2pr]: https://github.com/not-fl3/miniquad/pull/305 +[mqcompat]: https://github.com/not-fl3/miniquad/pull/176 + +### [bevy_mod_fbx] + +{{ image_figure( + alt="A model using a PBR shader featuring roughness and metalicness texture maps" + src="https://github.com/bevy_fbx_maya_pbr.jpg" + caption="model courtesy of [Samuel Rosario](https://www.artstation.com/artwork/bKJ0EE), rendered in bevy") }} + +[bevy_mod_fbx] is a pre-alpha library to load FBX (Autodesk Filmbox) files +into [bevy] 0.8, based on [fbxcel-dom]. +It currently: + +- Loads geometry and meshes +- Loads mesh attributes such as color +- Loads default material diffuse textures, normal maps, and emissive maps +- Loads the custom Maya PBR materials, including all material textures +- Load the scene tree and translate it to bevy's hierarchy + +Planned features include providing a basic Lambert/Phong shader +to better handle more standard materials, +loading animations and skinned mesh skeletons/rigs. + +The project is poorly tested and is looking for testers. It will soon be +available on crates.io. + +[fbxcel-dom]: https://lib.rs/crates/fbxcel-dom +[bevy]: https://bevyengine.org/ +[bevy_mod_fbx]: https://github.com/HeavyRain266/bevy_mod_fbx +[Samuel Rosario]: https://www.artstation.com/artwork/bKJ0EE + +### [shame] + +![logo of shame - shader metaprogramming](raymarch_shame.jpg) + +[shame] lets you author shaders and pipeline layouts +in a single seamless piece of rust code. It offers: + +- a simple and lightweight setup, +- type checks from input assembly all the way to fragment output, +- (re)generate different shaders/pipelines based on runtime parameters, +- [shader hot reloading][shame-examples], +- [examples using wgpu][shame-examples]! + +A Discord channel for questions/feedback is linked in the +[GitHub readme][shame]. + + + +[raymarch-github]: https://github.com/RayMarch +[shame]: https://github.com/RayMarch/shame +[shame-examples]: https://github.com/RayMarch/shame/tree/main/examples + +### [bonsai-bt] + +{{ image_figure( + alt='A behavior tree visualization that starts with a "root" node and branches +into leafs like "run" and "get in cover"' + src="https://github.com/bonsai.png" + caption="A visualization of a simple NPC behavior tree") }} + +[bonsai-bt] by [@Sollimann] is a Rust implementation of behavior trees. + +> A Behavior Tree (BT) is a data structure in which we can set the rules of how +> certain behaviors can occur and the order in which they would execute. +> BTs are a very efficient way of creating complex systems that +> are both modular and reactive. +> These properties are crucial in many applications, +> which has led to the spread of BT from computer game programming +> to many branches of AI and Robotics. + +_Discussions: [/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/vxk8h9/bonsaibt_a_behavior_tree_lib)_ + +[bonsai-bt]: https://github.com/Sollimann/bonsai +[@Sollimann]: https://github.com/Sollimann + +### [shades] and [shades-edsl] + +![a source code that uses shades and a running app with the result: +a gradient from green to red](shades-edsl.png) + +[@phaazon] has published [a detailed article][shades-article] that introduces +[shades] and [shades-edsl] - two Rust crates to write shaders by writing pure Rust: + +- The [shades] crate provides all needed types and other building blocks +- while [shades-edsl] provides a proc-macro [EDSL][edsl-wiki] +for transforming regular Rust code into the API from shades. + +> This crate provides an EDSL to build shaders, leveraging the Rust compiler (rustc) +> and its type system to ensure soundness and typing. +> Because shaders are written in Rust, this crate is completely language agnostic: +> it can in theory target any shading language - the current tier-1 language +> being GLSL. The EDSL allows to statically type shaders while still generating +> the actual shading code at runtime. + +[@phaazon]: https://phaazon.net +[shades-article]: https://phaazon.net/blog/shades-edsl +[shades]: https://github.com/phaazon/shades +[shades-edsl]: https://github.com/phaazon/shades-edsl +[edsl-wiki]: https://en.wikipedia.org/wiki/Domain-specific_language#External_and_Embedded_Domain_Specific_Languages + +### [fdg] + +![black dots connected with ed lines in #d space](fdg.png) + +[fdg] by [@grantshandy] is a [force-directed graph][fdg-wiki] drawing framework. + +> The goal of this project is to provide a force-directed graph framework +> and algorithms for Rust, as well as 2D and 3D visualizers +> that work on the web and desktop. +> It sits on top of [petgraph] and manages the positions of your nodes. + +You can view all the examples online [here][fdg-web]. + +The project consists of three parts: + +- [fdg-sim] - the underlying force simulation framework that handles your + dataset's positions based on a physics engine of your choice (or creation). +- [fdg-macroquad] - a visualizer that uses macroquad for rendering. +- [fdg-img] - a SVG visualizer for your graphs. + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/w92aya/fdg)_ + +[fdg]: https://github.com/grantshandy/fdg +[fdg-web]: https://grantshandy.github.io/fdg +[@grantshandy]: https://grantshandy.github.io +[petgraph]: https://crates.io/crates/petgraph +[fdg-sim]: https://github.com/grantshandy/fdg/tree/main/fdg-sim +[fdg-macroquad]: https://github.com/grantshandy/fdg/blob/main/fdg-macroquad +[fdg-img]: https://github.com/grantshandy/fdg/tree/main/fdg-img +[fdg-wiki]: https://en.wikipedia.org/wiki/Force-directed_graph_drawing +[fdg-web-json]: https://grantshandy.github.io/fdg/json.html + +## Other News + + + +- Other game updates: + - [Hydrofoil Generation devs shared](https://twitter.com/HydrofoilG) + a bunch of screenshots and videos with a new boat. + - [@epcc10] shared a few videos about Idu getting a + [better water rendering and physics][idu-1] and [better interaction with soil][idu-2]. + - [Felix Windström](https://twitter.com/sov_gott_games) shared a couple of + Paddlepunks updates: [a wizard leveling up their walls][paddlepunks-1], + and [increased the active time on witch's doritos][paddlepunks-2]. + - [Legend of Worlds released their first devlog][legendofworlds-log]. + - The [Bounce Up!][bounceup] block breaker game + shared a [video preview of the practice mode][bounceup-video]. + - [Theta Wave is now is now playable in the browser on itch.io][theta-wave-itch]. + Give it a try and let the author know what you think! + - [Fish Folly][fish-folly] posted a couple videos of + [their new AI](https://youtube.com/watch?v=YRE5g57aZEg) and + [the falling over mechanic](https://youtube.com/watch?v=RuoLInE34dM). + - [Punchy v0.0.2][punchy-2] and [v0.0.3][punchy-3] were released, featuring + scenes, egui UI, AI, playable web build, + new enemy variants, controller remapping, and throwable bottles. +- Other tooling updates: + - [annelid] is a speedrun timer with autosplitter for fxpak/sd2snes written + using egui. + - [unitypacker] is a tool for creating .unitypackages from the command line. +- Other learning material updates: + - [@PhaestusFox] released a bunch of Bevy tutorial videos covering: + gamepads, touch input, bevy 0.8 update & migration, and hierarchy. + - [The "Learn WGPU" tutorial was updated to wgpu v0.13][lear-wgpu-0-13]. + - KyleMayes [has ported vulkan-tutorial.com to vulkanalia][vulkanalia-tut]. + - [bevy_roguelike] is a project that implements reusable Bevy ECS + systems and components for writing roguelike games. +- Other library updates: + - [wgpu v0.13 and naga v0.9][wgpu-13] bring the newest WGSL spec support, + improved presentation and pipelining, and lots of performance + and correctness improvements. The devs also decided to make the DX12 backend + default on Windows and are looking for testers. + - [bevy_pancam] is a 2d-camera plugin for Bevy that works with orthographic cameras. + +[@epcc10]: https://twitter.com/epcc10 +[idu-1]: https://twitter.com/epcc10/status/1545918011185549313 +[idu-2]: https://twitter.com/epcc10/status/1547723415015919622 +[paddlepunks-1]: https://twitter.com/sov_gott_games/status/1543227926052847616 +[paddlepunks-2]: https://twitter.com/sov_gott_games/status/1548340577233580035 +[legendofworlds-log]: https://reddit.com/r/rust_gamedev/comments/w2508b/legend_of_worlds_1 +[bounceup]: https://cryscan.itch.io/bounce-up +[bounceup-video]: https://youtube.com/watch?v=ohNQgahuj6U +[theta-wave-itch]: https://reddit.com/r/rust/comments/w4h4ad/thetawave_play_itch +[fish-folly]: https://github.com/mrDIMAS/FishFolly +[punchy-2]: https://reddit.com/r/rust/comments/vt44wq/media_punchy_v002 +[punchy-3]: https://reddit.com/r/rust/comments/waltwb/media_fish_fight_punchy_v003 +[annelid]: https://github.com/dagit/annelid +[unitypacker]: https://github.com/paulfigiel/unitypacker +[lear-wgpu-0-13]: https://sotrh.github.io/learn-wgpu/news/0.13 +[bevy-basics]: https://youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6 +[@PhaestusFox]: https://youtube.com/c/PhaestusFox +[vulkanalia-tut]: https://reddit.com/r/rust_gamedev/comments/w2g16h/another_vulkan_tutorial +[wgpu-13]: https://reddit.com/r/rust_gamedev/comments/vp571t/release_of_wgpu_v013_and_call_for_testing +[bevy_pancam]: https://github.com/johanhelsing/bevy_pancam +[bevy_roguelike]: https://github.com/tomuxmon/bevy_roguelike + +## Discussions + + + +- [/r/rust](https://reddit.com/r/rust): + - ["Are these misconceptions about rust?"](https://reddit.com/r/rust/comments/vruvxx/are_these_misconceptions_about_rust) +- [/r/rust_gamedev](https://reddit.com/r/rust_gamedev): + - ["Using WGPU + crates directly or Bevy?"](https://reddit.com/r/rust_gamedev/comments/vrfjw2/using_wgpu_crates_directly_or_bevy) + - ["A 2D, lightweight graphics library, Rust-only?"](https://reddit.com/r/rust_gamedev/comments/w9l1um/a_2d_lightweight_graphics_library_rustonly) + - ["Framework or libraries for developing Android/iOS games"](https://reddit.com/r/rust_gamedev/comments/wbg7xg/framework_or_libraries_for_developing_androidios) + +## Requests for Contribution + + + +- ['Are We Game Yet?' wants to know about projects/games/resources that + aren't listed yet][awgy]. +- [Graphite is looking for contributors][graphite-contribute] to help build the + new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [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]. + +[awgy]: https://github.com/rust-gamedev/arewegameyet#contribute +[graphite-contribute]: https://graphite.rs/contribute +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/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 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/wm0rl8/this_month_in_rust_gamedev_36_july_2022), +[Twitter](https://twitter.com/rust_gamedev/status/1557819704684716035), +[Discord](https://discord.gg/yNtPTb2). + +[/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/content/news/036/lifecode.jpg b/content/news/036/lifecode.jpg new file mode 100644 index 000000000..8a6fbcfaa Binary files /dev/null and b/content/news/036/lifecode.jpg differ diff --git a/content/news/036/lyon.png b/content/news/036/lyon.png new file mode 100644 index 000000000..0165a5ad4 Binary files /dev/null and b/content/news/036/lyon.png differ diff --git a/content/news/036/miniquad_gl2.gif b/content/news/036/miniquad_gl2.gif new file mode 100644 index 000000000..76f5b1ebb Binary files /dev/null and b/content/news/036/miniquad_gl2.gif differ diff --git a/content/news/036/nes-bundler.png b/content/news/036/nes-bundler.png new file mode 100644 index 000000000..5cca15618 Binary files /dev/null and b/content/news/036/nes-bundler.png differ diff --git a/content/news/036/raymarch_ferris_3d_release.jpg b/content/news/036/raymarch_ferris_3d_release.jpg new file mode 100644 index 000000000..ac4d0278b Binary files /dev/null and b/content/news/036/raymarch_ferris_3d_release.jpg differ diff --git a/content/news/036/raymarch_shame.jpg b/content/news/036/raymarch_shame.jpg new file mode 100644 index 000000000..1654358f7 Binary files /dev/null and b/content/news/036/raymarch_shame.jpg differ diff --git a/content/news/036/re-rolling_gameplay.png b/content/news/036/re-rolling_gameplay.png new file mode 100644 index 000000000..94366afb6 Binary files /dev/null and b/content/news/036/re-rolling_gameplay.png differ diff --git a/content/news/036/renet_bevy_demo.gif b/content/news/036/renet_bevy_demo.gif new file mode 100644 index 000000000..c78824ea0 Binary files /dev/null and b/content/news/036/renet_bevy_demo.gif differ diff --git a/content/news/036/robo-os.jpg b/content/news/036/robo-os.jpg new file mode 100644 index 000000000..bd760bafc Binary files /dev/null and b/content/news/036/robo-os.jpg differ diff --git a/content/news/036/ruggrogue.png b/content/news/036/ruggrogue.png new file mode 100644 index 000000000..82c046a95 Binary files /dev/null and b/content/news/036/ruggrogue.png differ diff --git a/content/news/036/rust_game_ports.jpg b/content/news/036/rust_game_ports.jpg new file mode 100644 index 000000000..4a246bd42 Binary files /dev/null and b/content/news/036/rust_game_ports.jpg differ diff --git a/content/news/036/rusteroids-screenshot-tutorial15.png b/content/news/036/rusteroids-screenshot-tutorial15.png new file mode 100644 index 000000000..1757b8d3d Binary files /dev/null and b/content/news/036/rusteroids-screenshot-tutorial15.png differ diff --git a/content/news/036/shadertoy_wgsl_leon.gif b/content/news/036/shadertoy_wgsl_leon.gif new file mode 100644 index 000000000..4bff95139 Binary files /dev/null and b/content/news/036/shadertoy_wgsl_leon.gif differ diff --git a/content/news/036/shades-edsl.png b/content/news/036/shades-edsl.png new file mode 100644 index 000000000..58447095b Binary files /dev/null and b/content/news/036/shades-edsl.png differ diff --git a/content/news/036/simon.gif b/content/news/036/simon.gif new file mode 100644 index 000000000..d5854eccb Binary files /dev/null and b/content/news/036/simon.gif differ diff --git a/content/news/036/veloren.jpg b/content/news/036/veloren.jpg new file mode 100644 index 000000000..bd616ba8e Binary files /dev/null and b/content/news/036/veloren.jpg differ diff --git a/content/news/036/whats-in-a-wgsl-fragment-shader-with-bevy.png b/content/news/036/whats-in-a-wgsl-fragment-shader-with-bevy.png new file mode 100644 index 000000000..589f1716e Binary files /dev/null and b/content/news/036/whats-in-a-wgsl-fragment-shader-with-bevy.png differ diff --git a/content/news/036/wor-capsule.jpg b/content/news/036/wor-capsule.jpg new file mode 100644 index 000000000..66507148e Binary files /dev/null and b/content/news/036/wor-capsule.jpg differ diff --git a/content/news/037/android_playground.gif b/content/news/037/android_playground.gif new file mode 100644 index 000000000..d747bf5d8 Binary files /dev/null and b/content/news/037/android_playground.gif differ diff --git a/content/news/037/bevy_jam_2.png b/content/news/037/bevy_jam_2.png new file mode 100644 index 000000000..a28e636c8 Binary files /dev/null and b/content/news/037/bevy_jam_2.png differ diff --git a/content/news/037/bevy_kira_audio_settings.png b/content/news/037/bevy_kira_audio_settings.png new file mode 100644 index 000000000..1aeec72aa Binary files /dev/null and b/content/news/037/bevy_kira_audio_settings.png differ diff --git a/content/news/037/bombercrab.jpg b/content/news/037/bombercrab.jpg new file mode 100644 index 000000000..2a96fafda Binary files /dev/null and b/content/news/037/bombercrab.jpg differ diff --git a/content/news/037/catacomb_2.png b/content/news/037/catacomb_2.png new file mode 100644 index 000000000..8a095f4ff Binary files /dev/null and b/content/news/037/catacomb_2.png differ diff --git a/content/news/037/combo_box.png b/content/news/037/combo_box.png new file mode 100644 index 000000000..bf3afee01 Binary files /dev/null and b/content/news/037/combo_box.png differ diff --git a/content/news/037/country_slice.gif b/content/news/037/country_slice.gif new file mode 100644 index 000000000..aa1f362f6 Binary files /dev/null and b/content/news/037/country_slice.gif differ diff --git a/content/news/037/cybergate.jpg b/content/news/037/cybergate.jpg new file mode 100644 index 000000000..67c137782 Binary files /dev/null and b/content/news/037/cybergate.jpg differ diff --git a/content/news/037/gamedev-meetup.png b/content/news/037/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/037/gamedev-meetup.png differ diff --git a/content/news/037/gamercade.gif b/content/news/037/gamercade.gif new file mode 100644 index 000000000..8ddd534c8 Binary files /dev/null and b/content/news/037/gamercade.gif differ diff --git a/content/news/037/graphite.png b/content/news/037/graphite.png new file mode 100644 index 000000000..e05688259 Binary files /dev/null and b/content/news/037/graphite.png differ diff --git a/content/news/037/hot-lib-reloader.png b/content/news/037/hot-lib-reloader.png new file mode 100644 index 000000000..9ee74f0ea Binary files /dev/null and b/content/news/037/hot-lib-reloader.png differ diff --git a/content/news/037/index.md b/content/news/037/index.md new file mode 100644 index 000000000..c1d5c4353 --- /dev/null +++ b/content/news/037/index.md @@ -0,0 +1,761 @@ ++++ +title = "This Month in Rust GameDev #37 - August 2022" +transparent = true +date = 2022-09-24 +draft = false ++++ + + + + + +Welcome to the 37th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) + + + +## Announcements + +### [Bevy Jam #2][bevy-jam-results] + +![Bevy Jam 2](bevy_jam_2.png) + +Voting on [Bevy Jam #2][bevy-jam] just finished! It was a +10 day event, where the goal was to make a game in +[Bevy Engine][bevy-engine], the free and open-source game engine +built in Rust. The theme was 'Combine'. + +The [full results can be found on itch.io][bevy-jam-results]. There were 404 participants, +85 submissions, and 2,674 ratings, making it the biggest Bevy Jam yet! +(And maybe the biggest Rust game jam ever?) + +Here are the top five games: + +[bevy-jam]: https://itch.io/jam/bevy-jam-2/ +[bevy-jam-results]: https://itch.io/jam/bevy-jam-2/results +[bevy-engine]: https://bevyengine.org/ + +#### 🥇 First Place: [USA Football League Scouting Combine XLV][usa-football] + +![USA Football League Scouting Combine XLV logo](usa_football.png) + +[USA Football League Scouting Combine XLV][usa-football] is a game where you take +part in the historic unveiling of the "Combine Combine" event at this year's +USA Football League Scouting Combine! + +USAFLSCXLV is singleplayer action game where you attempt to score as many touchdowns +as you can while avoiding professional football players, navigating a corn maze +and also avoiding a combine machine harvesting the maze. + +The source for the game is available on [GitHub][usa-football-source]. + +[usa-football]: https://ramirezmike2.itch.io/usa-football-league-scouting-combine-xlv +[usa-football-source]: https://github.com/ramirezmike/bevy_jam_02_entry + +#### 🥈 Second Place: [Loot Goblin][loot-goblin] + +![Loot Goblin](loot_goblin.png) + +[Loot Goblin][loot-goblin] is a game where you craft your way to victory in a +unique adventurer's backpack simulation! + +We're going dungeon crawling, but all the hard work is done for you by the valiant +Sir Hoardalot, and you, as his resourcesful Loot Goblin are going to keep his +backpack in order! Craft potions and weapons to strengthen the hero, and help +kill the evil Ogre Necromancer. + +The source code for the game is available [on GitHub][loot-goblin-source]. + +[loot-goblin]: https://park-dev.itch.io/loot-goblin +[loot-goblin-source]: https://github.com/vanGeck/bevy-jam-2 + +#### 🥉 Third Place: [Shanty Quest: Treble at Sea][shanty-quest] + +![Shanty Quest Screenshot](shanty_quest.png) + +In [Shanty Quest: Treble at Sea][shanty-quest], you combine the magical instruments +and become the Pirate King! + +The source code is available on [GitHub][shanty-quest-source]. + +[shanty-quest]: https://jabuwu.itch.io/shanty-quest +[shanty-quest-source]: https://github.com/jabuwu/shanty-quest + +#### Fourth Place: [Combobox][combobox] + +![Combobox Screenshot](combo_box.png) + +[Combobox][combobox] is a game where you navigate through space with a tiny robot +combining boxes with unique features! + +The source code is available on [GitHub][combobox-source]. + +[combobox]: https://combobox-game.itch.io/combobox +[combobox-source]: https://github.com/ComboboxGame/Combobox + +#### Fifth Place: [Mole Rancher][mole-rancher] + +![Mole Rancher Screenshot](mole_rancher.png) + +[Mole Rancher][mole-rancher] is a game where you made it through university, got +your PhD, and now you have been selected to work in an top secret experimental +facility which promises a way to generate infinite energy through the combination +of various strange particles. + +Use power to generate curious molecules, check their properties in your logbook, +monitor their progress through your trusty E-merge device, and try not to let the +reactor overheat! + +And don't worry about those armed guards on the way in, as long as you meet your +quota then you'll have no problems... + +The source for this game is available on [GitHub][mole-rancher-source]. + +[mole-rancher]: https://infinitefall.itch.io/mole-rancher +[mole-rancher-source]: https://github.com/V4L3NC3/mole_rancher + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 19th Rust Gamedev Meetup took place in August. You can watch the recording of +the meetup [here on Youtube][gamedev-meetup-video]. Here was the schedule from +the meetup: + +- RustConf Arcade Cabinet - [@carlosupina] +- Blue Engine - [@aryanpur_elham] +- Veloren - [@VelorenProject] +- Graphite - [@GraphiteEditor] +- All is Cubes - [@switchborg] + +The meetups take place on the second Saturday every month via the [Rust Gamedev +Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://youtu.be/s9kf9HVUKYE +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[@carlosupina]: https://twitter.com/carlosupina +[@aryanpur_elham]: https://twitter.com/aryanpur_elham +[@VelorenProject]: https://twitter.com/VelorenProject +[@GraphiteEditor]: https://twitter.com/GraphiteEditor +[@switchborg]: https://twitter.com/switchborg + +### [Bombercrab Challenge Report][bombercrab-article] + +![screenshot of the game: many players, block and an explosion](bombercrab.jpg) + +[Pablo Mansanet shared a report][bombercrab-article] about how +the 2022 Tokyo Rust Game Hack went. + +[bombercrab-article]: https://blog.tonari.no/rust-game-hack-2022 + +## Game Updates + +### [Catacomb 2-64k][catacomb-2-repo] + +[![Catacomb 2 image](catacomb_2.png)][catacomb-2-repo] + +[Catacomb 2-64k][catacomb-2-repo] is a (completed) experimental +project in porting a moderately complex project, first from C to unsafe Rust, +then to (fully) safe Rust. + +The objective of the project has been to study the tooling, transformations +and the overall process required perfom real-world, exact, ports; an article +will follow in September on [64kramsystem's blog][64ramsystem-blog]. + +The port uses the [Rust-SDL2 bindings][rust-sdl2-bindings]. More exact ports +of id Software games are expected in the future, with the introduction of a +refactoring tool based on the +[Language Server Protocol][language-server-protocol]/[Rust Analyzer][rust-analyzer]. + +[catacomb-2-repo]: https://github.com/64kramsystem/catacomb_ii-64k +[64ramsystem-blog]: https://saveriomiroddi.github.io +[rust-sdl2-bindings]: https://github.com/Rust-SDL2/rust-sdl2 +[language-server-protocol]: https://microsoft.github.io/language-server-protocol +[rust-analyzer]: https://github.com/rust-lang/rust-analyzer + +### [CyberGate][cybergate-yt] + +{{ image_figure( + alt="browser udp technology" + src="https://github.com/cybergate.jpg" + caption="The new browser version works exactly like the native version") }} + +CyberGate ([YouTube][cybergate-yt], [Discord][cybergate-dis]) by CyberSoul +is a new multiplayer project that aims at procedurally generating distinct +universes and gameplay experiences. CyberGate is the name of the main world +where universes can be created and accessed by quantum portals. + +Recent updates: + +- Ported to browser (wgpu with webgl backend) +- Unreliable network protocol achieved with WebRTC +- Dynamically spawn and synchronize ECS components using macros +- Massively improved the events system and actions system +- Refactored over 50% of the project +- Small features such as grabbing objects and dash forward +- Fixed 3 major bugs that slowed down the server + +[Join the Discord server][cybergate-dis] to participate in upcoming Phase 5.0! + +_Discussions: [/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/x60n9y/cybergate_45_progress_browser_udp_client_with/)_ + +[cybergate-yt]: https://youtube.com/channel/UClrsOso3Xk2vBWqcsHC3Z4Q +[cybergate-dis]: https://discord.gg/R7DkHqw7zJ + +### [Rusty Aquarium] + +{{ image_figure( + alt="Rusty Aquarium visualization" + src="https://github.com/rustyaquarium.gif" + caption="Visualize data as a fish tank with Rusty Aquarium") }} + +[Rusty Aquarium] by [@ollej] is a data visualization tool as a virtual fish +tank written in Rust and Macroquad. Different data points control how many +fishes are shown, how they move, how fast they swim, and which size they are. +It can be used to monitor data in a visual way, while those uninitiated only +see a serene fish tank. + +Since Macroquad is cross-platform, Rusty Aquarium is available for Windows, +Mac, Linux as well as for browsers using WebAssembly. + +The aquarium can be controlled in various different ways: + +- System monitoring binary to show CPU usage, disk usage, and processes. +- Integrate with Google Sheets to control fishes. +- Back it with an URL that generates a JSON file. + +This month, a blog post with the [story behind Rusty Aquarium][RustyAquariumStory] +was published on the [Agical] blog. The code was restructured and the packaged +files now contain binaries for input data generation. + +[Rusty Aquarium]: https://github.com/ollej/rusty-aquarium +[@ollej]: https://twitter.com/ollej +[RustyAquariumStory]: https://blog.agical.se/en/posts/the-story-behind-rusty-aquarium/ +[Agical]: https://blog.agical.se/en/ + +### [Infinite Bunner] + +{{ image_figure( + alt="Infinite Bunner" + src="https://github.com/infinitebunner.gif" + caption="Port of the Infinite Bunner game to Rust and Macroquad") }} + +[Infinite Bunner] is a game from the book [Code the Classics vol 1] that has +been ported by [@ollej] to Rust and Macroquad from Python and PyGame Zero. +It is a modern version of the classic arcade game Frogger with improved +graphics and sound. + +The game has been sent in to the [Rust Game Ports][rust-game-ports] project as +an educational example. It shows how to make a 2D game in Macroquad with +graphics and sound. + +[Code the Classics vol 1] is a book from Wireframe Magazine that tells the +history of five classic video games. It also includes code listings of modern +versions of the games written in Python with the PyGame Zero framework. + +[Infinite Bunner]: https://github.com/ollej/rust-bunner-macroquad +[rust-game-ports]: https://github.com/rust-gamedev/rust-game-ports +[Code the Classics vol 1]: https://wireframe.raspberrypi.org/books/code-the-classics1 + +### Tiny Building Game + +![Country_slice_gif](country_slice.gif) + +The untitled "Tiny Building Game" is a stress-free feel-good game focused on just +building something pretty. It is being made by [@anastasiaopara] and +[@h3r2tic], who has recently joined the project! + +This month, there was a large visual update, which added [trees and flowers][twitter-thread-1], +as well as [fences and gates][twitter-thread-2]. + +Right now, the team is actively working on setting up a Steam page. Stay +tuned by following the [newsletter][country-slice-newsletter]! + +[country-slice-newsletter]: https://dashboard.mailerlite.com/forms/10395/51067704544593017/share +[twitter-thread-1]: https://twitter.com/anastasiaopara/status/1560673892574035969 +[twitter-thread-2]: https://twitter.com/anastasiaopara/status/1565629377823395841 +[@anastasiaopara]: https://twitter.com/anastasiaopara +[@h3r2tic]: https://twitter.com/h3r2tic + +### [Math It] + +{{ image_figure( + alt="Promotional image of the Math It game" + src="https://github.com/math_it.png" + caption="Promotional image of the Math It game") }} + +[Math It] was made with [Bevy] for the [Bevy Jam 2]. + +The goal of the game is to get as close as possible +to the target number and compete with others on a global leaderboard. + +[Math It]: https://vrixyz.itch.io/math-it +[Bevy Jam 2]: https://itch.io/jam/bevy-jam-2 +[Bevy]: https://bevyengine.org/ + +### [Veloren][veloren] + +{{ image_figure( + alt="A cave with lava" + src="https://github.com/veloren.jpg" + caption="A barrier of lava") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In August, long-awaited work on a new internationalization system with Fluent +was merged. The real-time simulation v2 system is now in a place, which has +allowed for blacksmiths to now sell swords and armour with only a few additional +lines of code. Work was done to implement a spectator mode in game, as well as +fix a bug about respawning while having a status effect on you persisting, such +as being on fire from swimming in lava. + +August's full weekly devlogs: "This Week In Veloren...": +[#183][veloren-183], +[#184][veloren-184], +[#185][veloren-185], +[#186][veloren-186], +[#187][veloren-187]. + +[veloren]: https://veloren.net +[veloren-183]: https://veloren.net/devblog-183 +[veloren-184]: https://veloren.net/devblog-184 +[veloren-185]: https://veloren.net/devblog-185 +[veloren-186]: https://veloren.net/devblog-186 +[veloren-187]: https://veloren.net/devblog-187 + +## Engine Updates + +### [miniquad] + +[![diff](android_playground.gif)][quad-android-playground] + +[miniquad] is a pure Rust, cross-platform graphics library. + +This month was about polishing miniquad-android experience. +To make it easier for regression testing, miniquad got +[the android playground][quad-android-playground]. + +The playground demonstrates all known android shenanigans in +one quad-based app. + +It includes: + +- onscreen keyboard +- java interop (with file dialog as an example) +- dealing with big java services (with bluetooth as an example) +- accessing permissions, both runtime and compile time + +[miniquad]: https://github.com/not-fl3/miniquad/ +[quad-android-playground]: https://github.com/not-fl3/quad-android-playground + +### [Runty8][runty8-repo] + +[![Runty 8 logo][runty8-logo]][runty8-repo] + +[Runty8][runty8-repo] is an experimental port of the [Pico8][pico8-site] +fantasy console that supports writing games in Rust. + +Its current goals are to follow Pico8's APIs as closely as possible, +to allow easily porting existing games to Rust, +as well as developing new games in a familiar development environment. + +The project is in very early stages, and is currently looking for contributors. +If you're interested, feel free to read their [contributing guide][runty8-contributing-guide] +or browse through the [open issues][runty8-open-issues]. + +[runty8-repo]: https://github.com/jjant/runty8 +[runty8-contributing-guide]: https://github.com/jjant/runty8/blob/master/CONTRIBUTING.md +[runty8-open-issues]: https://github.com/jjant/runty8/issues +[pico8-site]: https://www.lexaloffle.com/pico-8.php +[runty8-logo]: https://user-images.githubusercontent.com/15112080/188467323-037617cf-7dbc-4988-bbd7-fbafd1524455.png + +### [Gamercade] + +{{ image_figure( + alt="Gamercade preview" + src="https://github.com/gamercade.gif" + caption="Preview of the Audio Editor in Action") }} + +[Gamercade] ([Discord][Gamercade-Discord], [GitHub][Gamercade-GitHub]) +by @RobDavenport is a WASM-powered fantasy console focused +on building multiplayer neo-retro games. + +Gamercade is preparing for their first alpha release! This includes all the +core features needed for a fantasy console and game library: input, graphics, +and audio. It also has networked multiplayer, and an editor. + +They implemented the in-game sound engine from scratch. They also improved the +editor to allow creation of instruments and tracks. It synthesizes sounds at +runtime, and produces something like an 80s synth, a 90s SoundBlaster, and a +touch of SNES. Songs and Sfx are built using a tracker interface. +[This video][Gamercade-Video] shows a small sample of what it is capable of. + +"Wavetables" are great for classic sounds like 8-bit chiptunes or even more +complicated sounds. "FM Synth" is a 4-op FM synthesizer. Masters of this +technique can produce a huge variety of instruments, effects, and other +otherwordly things. "Sampler" rounds out the rest of the system, providing +pre-recorded sample playback. Samples can be pitched and played as the desired +note. + +Come hang out and chat on [Discord][Gamercade-Discord], where the developers +interact with members and post updates daily. The project is +[open source][Gamercade-GitHub] and looking for contributors, suggestions, +as well as awesome game demos. + +[Gamercade]: https://gamercade.io +[Gamercade-Discord]: https://discord.gg/Qafv2Fpt5j +[Gamercade-GitHub]: https://github.com/gamercade-io/gamercade_console +[Gamercade-Video]: https://youtube.com/watch?v=cRsOvefap_U + +## Tooling Updates + +### [Graphite][graphite-website] + +![Graphite logo](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free, +in-development raster and vector 2D graphics editor that will be based around a +Rust-powered node graph compositing engine. + +August's [sprint][graphite-sprint-18] focused on Bézier shape editing and layer +transformation improvements. + +- Ahead of the curve: Bézier shapes gain support for curve extension and shape + closing using the Pen tool and inserting points along curves with the Path + tool. +- Front and center: Layer origins may be set to control the center of rotation + and scale using the Transform tool. + +Meanwhile, design and architecture work on the Graphene node-based programming +language has been well underway. Graphene is the data graph engine that will +replace Graphite's tree-based layer system in the next few sprints and evolve +into a raster-and-vector render engine over time. + +Open the [Graphite editor][graphite-live-demo] in your browser to give it a try +and share your creations with #MadeWithGraphite on Twitter. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-sprint-18]: https://github.com/GraphiteEditor/Graphite/milestone/18 +[graphite-live-demo]: https://editor.graphite.rs + +## Library Updates + +### [hot-lib-reloader] + +![hot-lib-reloader thumbnail](hot-lib-reloader.png) + +[hot-lib-reloader] is a development tool that allows you to reload functions +of a running Rust program. This allows to do "live programming" where you +modify code and immediately see the effects in your running program. Gone +are the days of edit-compile-restart loops (to some degree). + +hot-lib-reloader works by reloading parts of your application that are defined +as dynamic libraries. This approach works on Linux, MacOS, and Windows but has +some constraints - see the [documentation] for details. There are several +[examples], showing how to create hot-reload setups with various frameworks +and libraries, e.g. bevy, egui, and [nannou]. + +[hot-lib-reloader]: https://github.com/rksm/hot-lib-reloader-rs +[documentation]: https://docs.rs/hot-lib-reloader/latest/hot_lib_reloader/ +[examples]: https://github.com/rksm/hot-lib-reloader-rs/tree/master/examples +[nannou]: https://youtu.be/hyyeLtJ7SQk + +### [bevy_kira_audio] + +{{ image_figure( + alt="Configuring a sound when playing it" + src="https://github.com/bevy_kira_audio_settings.png" + caption="Configuring a sound when playing it") }} + +[bevy_kira_audio] by [@nikl_me] is an alternative audio plugin for the [Bevy] +game engine. It uses [Kira] as its audio library and aims to integrate +well with Bevy's ECS. + +Last month saw the release of versions [0.11.0] and [0.12.0]. With the +latest version, sound settings like volume, playback-rate, or panning can +be adjusted directly when playing audio. The screenshot above shows the new API +with multiple example settings. The plugin now also offers control +over single sound instances via asset handles and will apply configurable +tweens to most operations. + +[bevy_kira_audio]: https://github.com/NiklasEi/bevy_kira_audio/ +[Kira]: https://github.com/tesselode/kira +[0.11.0]: https://github.com/NiklasEi/bevy_kira_audio/blob/main/CHANGELOG.md#v0110 +[0.12.0]: https://github.com/NiklasEi/bevy_kira_audio/blob/main/CHANGELOG.md#v0120 + +### [bevy_asset_loader] + +{{ image_figure( + alt="Configuration of a loading state" + src="https://github.com/loading_state.png" + caption="Configuration of a loading state") }} + +[bevy_asset_loader] by [@nikl_me] is a plugin for [Bevy] apps aiming to +improve a common pattern for asset-loading. The boilerplate required to set up +a loading-state is reduced to a minimum. The plugin is based on storing +asset handles in resources, which makes it easy to use them in any system +across your app. + +The screenshot above shows how a loading state can be added to the Bevy app +in the latest version of the plugin. The update also fixed issues with +configuring the same loading state in different places of your code and enabled +users to define their own dynamic assets. + +[@nikl_me]: https://twitter.com/nikl_me +[bevy_asset_loader]: https://github.com/NiklasEi/bevy_asset_loader/ + +### [Notan v0.6][Notan] + +![notan examples](notan.gif) + +[Notan] is a simple and portable layer designed to create your own +apps on top of it without worrying about platform-specific code. + +It provides a set of APIs and tools that can be used to create your +project in an ergonomic manner without enforcing any structure or pattern, +sharing the same codebase across multiple platforms. + +The main focus for version [v0.6] was improving how uniforms +are set using the layout std140 for the user with a macro, +among internal fixes and improvements. + +[Notan]: https://github.com/Nazariglez/notan +[v0.6]: https://github.com/Nazariglez/notan/releases/tag/v0.6.0 + +### [Shipyard] + +[Shipyard] is an Entity Component System focused on usability and speed. + +This monthh, 0.6 was released with big improvements to workloads and +tracking. + +The new [visualizer][shipyard-visualizer] is a first step towards visual +inspection and interaction with the library. +For now it can only show which components are used by which systems +and vice-versa. + +Learn more about this release in the [release post][shipyard-release-post]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/wi71lu/shipyard_06_release/) +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/wi72vc/shipyard_06_release/)_ + +[Shipyard]: https://github.com/leudz/shipyard +[shipyard-visualizer]: https://leudz.github.io/shipyard/visualizer +[shipyard-release-post]: https://users.rust-lang.org/t/shipyard-0-6-release/79504 + +### [Edict] + +[Edict] by [@zakarumych] is powerful Rust ECS crate that expands traditional ECS +feature set. The new version 0.2 is getting [ready for release]. This ECS is based +on archetypes for fast cache-friendly iteration. And there are quite a few novel +features: + +- [Edict] allows to express relations between entities using [`Relation`] trait. + Relations are linked to a pair of entities - origin and target. This opens a + wide range of opportunities to create entity graphs with custom logic. +- Custom hooks for components and relations to trigger actions when component is + dropped/replaced, or when relation target is dropped. +- Optional [`Component`] trait. [Edict] allows using component types that do not + implement [`Component`] with some restrictions. +- Change tracking with flexible queries for modified components suitable for + complex use cases. E.g. incremental saves can fetch all components modified + since previous save. +- Type-agnostic component borrowing. Component type may define list of types + that can be borrowed from it. Important use case is borrowing [`dyn Traits`]. +- [Edict] supports parallel execution. Built-in scheduler uses systems that + implement [`System`] trait. Functions can be safely transformed into systems + similarly to [`bevy_ecs`]. + +[Edict]: https://github.com/zakarumych/edict +[@zakarumych]: https://github.com/zakarumych +[ready for release]: https://docs.rs/edict/0.2.0-rc.3/edict/ +[`Relation`]: https://docs.rs/edict/0.2.0-rc.3/edict/relation/trait.Relation.html +[`Component`]: https://docs.rs/edict/0.2.0-rc.3/edict/component/trait.Component.html +[`dyn Traits`]: https://doc.rust-lang.org/book/ch17-02-trait-objects.html +[`System`]: https://docs.rs/edict/0.2.0-rc.3/edict/system/trait.System.html +[`bevy_ecs`]: https://crates.io/crates/bevy_ecs + +### [grid_pathfinding] + +[grid_pathfinding] is a new pathfinding crate aimed at providing a fast, +out-of-the-box system for pathfinding on various types of grids. While the +current 0.1.1 release is not very configurable yet, the idea is to make the +crate more malleable working towards a 0.2.0 release so that it will support +a range of grids (4-connected, 8-connected, weighted, etc.) as well as +heuristics. Specifically, [grid_pathfinding] 0.1 assumes a uniform-cost +8-grid with a Chebyshev cost metric and heuristic. More long-term goals are +support for multi-tile and multi-agent pathfinding variants. + +The current implementation is based on [Jump Point Search] with +[improved pruning rules]. On top of this, [connected components] are used to +avoid flood-filling behaviour if no path exists - see the +[documentation][gp-docs] and [examples][gp-examples] for information on +how to manage these components. Especially when simulating many agents in +real-time, using components can make a big difference. + +[grid_pathfinding]: https://github.com/tbvanderwoude/grid_pathfinding +[gp-docs]: https://docs.rs/grid_pathfinding/0.1.1/grid_pathfinding/ +[gp-examples]: https://github.com/tbvanderwoude/grid_pathfinding/tree/main/examples +[Jump Point Search]: https://en.wikipedia.org/wiki/Jump_point_search +[connected components]: https://en.wikipedia.org/wiki/Component_(graph_theory) +[improved pruning rules]: https://www.researchgate.net/publication/287338108_Improving_jump_point_search + +## Other News + + + + + +- Other game updates: + - [Caveth][caveth] is a game made with macroquad + where you can shoot enemies with a cannon. + - [Im-Oab released a free Steam demo of the shump Flesh][flesh-demo] + and also added [new enemy types](https://twitter.com/Im_Oab/status/1557714901434781696), + [boss animations](https://twitter.com/Im_Oab/status/1564581193454354432), + and [bullet shadows](https://twitter.com/Im_Oab/status/1562015685521604610). + - [Spherical Go][spherical-go] if the Go game's implementation + with a variety of spherical fields. + - [Combine and Conquer has a new devlog about 0.10 version][cnc-0-10] that brings + vector graphics, "merger" and "splitter" structures, new tech-tree UI, + overlay improvements, and new tiers for existing structures. + - [bevy-cheeseball] is a 3D marble game inspired by Monkey Ball + and made with Bevy and Rapier. + - [Punchy v0.04][punchy-v0-0-4] was released, + featuring MVP for the first boss enemy, an entirely refactored + fighter state model [which was written up on the wiki][punchy-wiki], + updates to the enemy AI targeting, camera progression boundaries, + updates to debug tools, a health recovery item, + and updates to the way attacks are defined and loaded from resources. +- Other learning material updates: + - [Console #118 - Interview with Connor of rend3][console-118] + - PhaestusFox added a bunch of new videos + to their ["Bevy Basics"][bevy-basics] YouTube series. + - [@fronkongames shared a quick guide][unity-guide] to integrating Rust code + into Unity. + - [@samkevich published a "Learn OpenGL with Rust" series][learn_gl_with_rust]. + - [@jack1232 released a "Rust wgpu Graphics Programming Tutorial" YouTube series][yt-wgpu]. +- Other engine updates: + - [Fyrox v0.27][fyrox-0-27] features a new Fish Folly game example, + compile-time reflection, plugin, and scripting + improvements, and two new book chapters about [particle systems][fyrox-book-1] + and [terrain][fyrox-book-2]. + - [Pyxel v0.18][pyxel]'s main highlight is the experimental web support. + - [Bevy released a blog post][bevy-birthday] about the second birthday + of the engine with a retrospective and future plans. +- Other tooling updates: + - [@HackerFoo shared a video][noumenal-vid] of a WIP meta-editor to record + contact movement to create interactive tutorials for Noumenal. + - [nbody-wasm-sim] is a WebGPU N-Body astrophysics simulation in Rust + WASM. + - [wgen] is a simple multi-threaded heightmap generator made with egui and three_d. + - [bevy-shell-template] is an opinionated, monolithic template for Bevy + with cross-platform CI/CD, native + WASM launchers, + and managed cross-platform deployment. +- Other library updates: + - [bevy_streamdeck] is a Bevy plugin to interact with Stream Deck. + - [kira v0.7 release][kira-0-7] brings a bunch of important bug fixes + some of which require breaking changes. + - [egui v0.19][egui] brings a lot of various small API improvements and optimizations. + - [Alex Dixon shared a blog post][maths-rs-post] about creating another + linear algebra library - [maths-rs]. + - [fundsp] is an audio digital signal processing library for audio processing + and synthesis. + - [bevy_ecs_tilemap] is an ECS-friendly tilemap rendering crate for Bevy. + +[flesh-demo]: https://store.steampowered.com/app/1660850/Flesh/?beta=0 +[caveth]: https://github.com/Dequog/caveth +[spherical-go]: https://github.com/Dominux/spherical-go +[cnc-0-10]: https://buckmartin.de/combine-and-conquer/2022-08-20-v0.0.10.html +[bevy-cheeseball]: https://github.com/Rust-Ninja-Sabi/rust-bevy-cheeseball +[punchy-v0-0-4]: https://reddit.com/r/rust_gamedev/comments/x1ekmg/fish_folk_punchy_v004 +[punchy-wiki]: https://github.com/fishfolks/punchy/wiki/Fighter-State-Machine +[bevy-basics]: https://youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6 +[console-118]: https://console.substack.com/p/console-118 +[unity-guide]: https://rjgameiro.medium.com/let-fun-rust-unity-f7f62609ba49 +[learn_gl_with_rust]: https://github.com/samkevich/learn_gl_with_rust +[yt-wgpu]: https://youtube.com/playlist?list=PL_UrKDEhALdJS0VrLPn7dqC5A4W1vCAUT +[fyrox-0-27]: https://fyrox.rs/blog/post/feature-highlights-0-27 +[fyrox-book-1]: https://fyrox-book.github.io/fyrox/scene/particle_system_node.html +[fyrox-book-2]: https://fyrox-book.github.io/fyrox/scene/terrain_node.html +[pyxel]: https://twitter.com/kitao/status/1564234852185960449 +[bevy-birthday]: https://bevyengine.org/news/bevys-second-birthday/ +[noumenal-vid]: https://youtube.com/watch?v=qJOPLxFfbMw +[nbody-wasm-sim]: https://github.com/simbleau/nbody-wasm-sim +[wgen]: https://github.com/jice-nospam/wgen +[bevy-shell-template]: https://github.com/kurbos/bevy-shell-template +[bevy_streamdeck]: https://github.com/vleue/bevy_streamdeck +[kira-0-7]: https://github.com/tesselode/kira/releases/tag/v0.7.0 +[egui]: https://twitter.com/ernerfeldt/status/1561010036255739904 +[maths-rs]: https://github.com/polymonster/maths-rs +[maths-rs-post]: https://www.polymonster.co.uk/blog/maths-rs +[fundsp]: https://github.com/SamiPerttu/fundsp +[bevy_ecs_tilemap]: https://github.com/StarArawn/bevy_ecs_tilemap + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/xnjeym/this_month_in_rust_gamedev_37), +[Twitter](https://twitter.com/rust_gamedev/status/1573978074550616064), +[Discord](https://discord.gg/yNtPTb2). + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/news/037/infinitebunner.gif b/content/news/037/infinitebunner.gif new file mode 100644 index 000000000..526df6413 Binary files /dev/null and b/content/news/037/infinitebunner.gif differ diff --git a/content/news/037/loading_state.png b/content/news/037/loading_state.png new file mode 100644 index 000000000..75b31a371 Binary files /dev/null and b/content/news/037/loading_state.png differ diff --git a/content/news/037/loot_goblin.png b/content/news/037/loot_goblin.png new file mode 100644 index 000000000..0a353dcfe Binary files /dev/null and b/content/news/037/loot_goblin.png differ diff --git a/content/news/037/math_it.png b/content/news/037/math_it.png new file mode 100644 index 000000000..54b5365f6 Binary files /dev/null and b/content/news/037/math_it.png differ diff --git a/content/news/037/mole_rancher.png b/content/news/037/mole_rancher.png new file mode 100644 index 000000000..d6a6b6b68 Binary files /dev/null and b/content/news/037/mole_rancher.png differ diff --git a/content/news/037/notan.gif b/content/news/037/notan.gif new file mode 100644 index 000000000..d55a7f657 Binary files /dev/null and b/content/news/037/notan.gif differ diff --git a/content/news/037/rustyaquarium.gif b/content/news/037/rustyaquarium.gif new file mode 100644 index 000000000..490965b5f Binary files /dev/null and b/content/news/037/rustyaquarium.gif differ diff --git a/content/news/037/shanty_quest.png b/content/news/037/shanty_quest.png new file mode 100644 index 000000000..afb60ae76 Binary files /dev/null and b/content/news/037/shanty_quest.png differ diff --git a/content/news/037/usa_football.png b/content/news/037/usa_football.png new file mode 100644 index 000000000..95c7ec206 Binary files /dev/null and b/content/news/037/usa_football.png differ diff --git a/content/news/037/veloren.jpg b/content/news/037/veloren.jpg new file mode 100644 index 000000000..c4c3e43db Binary files /dev/null and b/content/news/037/veloren.jpg differ diff --git a/content/news/038/change_pitch_bevy_oddio_example.png b/content/news/038/change_pitch_bevy_oddio_example.png new file mode 100644 index 000000000..d766b259b Binary files /dev/null and b/content/news/038/change_pitch_bevy_oddio_example.png differ diff --git a/content/news/038/chris-biscardi-videos.jpeg b/content/news/038/chris-biscardi-videos.jpeg new file mode 100644 index 000000000..74b9fc865 Binary files /dev/null and b/content/news/038/chris-biscardi-videos.jpeg differ diff --git a/content/news/038/cybergate.gif b/content/news/038/cybergate.gif new file mode 100644 index 000000000..83598ffc0 Binary files /dev/null and b/content/news/038/cybergate.gif differ diff --git a/content/news/038/dims-timecycle.gif b/content/news/038/dims-timecycle.gif new file mode 100644 index 000000000..630c4f0e2 Binary files /dev/null and b/content/news/038/dims-timecycle.gif differ diff --git a/content/news/038/eo-rs.PNG b/content/news/038/eo-rs.PNG new file mode 100644 index 000000000..41a5d75db Binary files /dev/null and b/content/news/038/eo-rs.PNG differ diff --git a/content/news/038/feldversuch.gif b/content/news/038/feldversuch.gif new file mode 100644 index 000000000..bdfd9b336 Binary files /dev/null and b/content/news/038/feldversuch.gif differ diff --git a/content/news/038/flesh.gif b/content/news/038/flesh.gif new file mode 100644 index 000000000..fb9316cd2 Binary files /dev/null and b/content/news/038/flesh.gif differ diff --git a/content/news/038/gamedev-meetup.png b/content/news/038/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/038/gamedev-meetup.png differ diff --git a/content/news/038/gamercade.gif b/content/news/038/gamercade.gif new file mode 100644 index 000000000..8e5b46a7d Binary files /dev/null and b/content/news/038/gamercade.gif differ diff --git a/content/news/038/godot-rust-export.png b/content/news/038/godot-rust-export.png new file mode 100644 index 000000000..f1cd10d4f Binary files /dev/null and b/content/news/038/godot-rust-export.png differ diff --git a/content/news/038/graviton.png b/content/news/038/graviton.png new file mode 100644 index 000000000..c5ea81f5a Binary files /dev/null and b/content/news/038/graviton.png differ diff --git a/content/news/038/index.md b/content/news/038/index.md new file mode 100644 index 000000000..bba06e2fe --- /dev/null +++ b/content/news/038/index.md @@ -0,0 +1,734 @@ ++++ +title = "This Month in Rust GameDev #38 - September 2022" +transparent = true +date = 2022-10-14 ++++ + + + + + +Welcome to the 38th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Engine Updates](#engine-updates) +- [Learning Material Updates](#learning-material-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) +- [Bonus](#bonus) + + + +## Announcements + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 20th Rust Gamedev Meetup took place in September. You can watch the recording +of the meetup [here on Youtube][gamedev-meetup-video]. + +The meetups take place on the second Saturday every month via the [Rust Gamedev +Discord server][rust-gamedev-discord] and are also [streamed on +Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://www.youtube.com/watch?v=QKqqDilZ448 +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### [CyberGate][cybergate-yt] + +{{ image_figure( + alt="building and fighting" + src="https://github.com/cybergate.gif" + caption="building shelter and fighting a colony of red monsters") }} + +CyberGate ([YouTube][cybergate-yt], [Discord][cybergate-dis]) by CyberSoul +is an attempt to use artificial intelligence to build diverse universe experiences +with strange creatures and procedural gameplay styles. +Currently in Phase 5.2 (analogously version 0.5.2), +they finalized a playable game with the tech they have developed up until now. + +Recent updates: + +- In-house Transport layer with Reliability and Package aggregation, over WebRTC +- Implemented Winit background process on all browsers +- Introduced Grabbing and Building Mechanics +- Created enemy AI that groups and flies in colonies. Includes a deadly night mode +- Usernames and life points with Fontdue.rs +- Menu and leaderboard using yakui.rs +- Improved the Automation to push Server Updates +- Improved wasm related performance, latency, and connection freezing bugs. + +[Join the Discord server][cybergate-dis] to participate in upcoming Phase 6.0! + +_Discussions: [/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/xo03s5/cybergate_release_5_webrtc_multiplayer_with/)_ + +[cybergate-yt]: https://youtube.com/channel/UClrsOso3Xk2vBWqcsHC3Z4Q +[cybergate-dis]: https://discord.gg/R7DkHqw7zJ + +### [Graviton][graviton-website] + +{{ image_figure( + alt="Graviton" + src="https://github.com/graviton.png" + caption="Take a little break to relax and draw some sand art") }} + +[Graviton](https://www.gravitongame.art/) by +[@hakolao](https://github.com/hakolao) +is a relaxing simulation game in which you draw colored sand and watch it +interact with gravity. + +The game is going to be released in early access on +[Steam](https://store.steampowered.com/app/2137280/Graviton__A_Relaxing_Sand_Simulation/?utm_source=rust_gamedev&utm_medium=web) +during this October. + +_Discussions: [/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/xfqd2t/graviton_relaxing_sand_art)_ + +[graviton-website]: https://www.gravitongame.art/ + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="https://github.com/flesh.gif" + caption="4th area") }} + +[Flesh] by [@im_oab] is a 2D-horizontal shmup game with hand-drawn animation and +an organic/fleshy theme. It is implemented using [Tetra]. This month's updates +include: + +- Finishing up the last area of the game. +- Making animation of the game's intro/ending. + +[Flesh]: https://store.steampowered.com/app/1660850/Flesh/ +[@im_oab]: https://twitter.com/im_oab +[Tetra]: https://github.com/17cupsofcoffee/tetra + +### Thetawave + +{{ image_figure( + alt="thetawave-boss" + src="https://github.com/thetawave.gif" + caption="First boss in progress") }} + +Thetawave is a physics based, cosmic horror themed space shooter by +[@carlosupina]. +In the past month, work has begun on the first boss enemy in the game, +the [Repeater]. + +Thetawave has also joined the [@spicylobsterfam] incubator. +Feel free to reach out to the developer +if you are interested in contributing! + +[Repeater]: https://twitter.com/carlosupina/status/1572976552165474307 +[@carlosupina]: https://twitter.com/carlosupina +[@spicylobsterfam]: https://twitter.com/spicylobsterfam + +### [Ultimechs] + +![Ultimechs - let the games begin](ultimechs.png) + +[Ultimechs] +([Discord](https://discord.com/invite/srX92DRt9G), +[Twitter](https://twitter.com/ultimechs), +[Facebook](https://www.facebook.com/Ultimechs/), +[Reddit](https://www.reddit.com/r/Ultimechs/), +[YouTube](https://www.youtube.com/channel/UC6t6delBJRxnaBcqBPpC3Gg)) +by [Resolution Games](https://www.resolutiongames.com) +is a future sports game played with mechs. +It is VR, multiplayer, and free to play. + +Ultimechs is partially written in Rust. +The Rust code is for the core of the game, including the game rules, +networking, and physics (that use [Rapier]). +The rest of the game, including the graphics, audio, user input, +and everything that happens outside the arena, +is made in [Unity](https://unity.com/). + +The game was released on the 15th of September +on the [Meta Quest 2][ultimechs-quest] and [SteamVR][ultimechs-steamvr]. + +There is [a conference talk][ultimechs-talk] +and [a blog post][ultimechs-post] +about the choice of Rust and how they combined Rust with the studio's +standard tools Unity and C#. +[Another blog post][ultimechs-post-2] +goes into more depth about calling Rust code from C# in Unity. + +[Ultimechs]: https://www.resolutiongames.com/ultimechs +[ultimechs-quest]: https://www.oculus.com/experiences/quest/5118731164870081/ +[ultimechs-steamvr]: https://store.steampowered.com/app/1657780/Ultimechs/ +[Rapier]: https://www.rapier.rs/ +[ultimechs-talk]: https://www.youtube.com/watch?v=nLCNsIs1-ZU +[ultimechs-post]: https://www.resolutiongames.com/blog/programming-a-vr-game-using-rust +[ultimechs-post-2]: https://www.resolutiongames.com/blog/calling-rust-from-c-in-unity + +### [eo.rs][eo-rs-website] + +{{ image_figure( + alt="npcs talking" + src="https://github.com/eo-rs.PNG" + caption="NPCs chatting in the game world") }} + +[eo-rs][eo-rs-website] by [@sorokya](https://github.com/sorokya) +is a development library and game server for the MMORPG +[Endless Online](https://www.endless-online.com). + +Recent updates: + +- Made NPCs appear and move around in the game world +- Created a proxy tool to document interactions between the original client and server +- Implemented player stat calculations +- Made NPCs talk + +[eo-rs-website]: https://eo-rs.dev + +### Tiny Building Game + +![Tiny_building_game_gif](tiny_building_game.gif) + +The untitled "Tiny Building Game" is a stress-free feel-good game focused on just +building something pretty. It is being made by [@anastasiaopara] and +[@h3r2tic]. + +This month, the team welcomed [Martin] (sound design) and [Oda] (music) as well as +adding various game elements, such as fences, gates, pillars and [butterflies]. You +can watch this short [YouTube video] to catch a glimpse of how it's all coming together. + +Right now, the team is working towards the game announcement. Stay +tuned by following the [newsletter][country-slice-newsletter]! + +[country-slice-newsletter]: https://dashboard.mailerlite.com/forms/10395/51067704544593017/share +[@anastasiaopara]: https://twitter.com/anastasiaopara +[@h3r2tic]: https://twitter.com/h3r2tic +[Oda]: https://twitter.com/OdaTilset +[Martin]: https://twitter.com/MartinKvale +[butterflies]: https://twitter.com/h3r2tic/status/1573747327751360512 +[YouTube video]: https://youtu.be/CizG3hv7DhQ + +### [Veloren][veloren] + +{{ image_figure( + alt="Riding into the sunset" + src="https://github.com/veloren.jpg" + caption="Riding into the sunset") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In September the official Veloren server saw a new all time high of more than +400 players logged in at the same time, with an average load of 200 players. +This caused slow in-game responses and the development team quickly +optimized to reduce the server load and introduced a new graphical +server browser for balancing. + +Due to the more diverse user base, a lot of languages received translation +updates. The most common crash dialog was improved to suggest the workaround +of trying a different graphics backend, while the large number of players +still using DX11 block an upgrade to a more recent WGPU version. + +Septembers's full weekly devlogs: "This Week In Veloren...": +[#188][veloren-188], +[#189][veloren-189], +[#190][veloren-190]. + +[veloren]: https://veloren.net +[veloren-188]: https://veloren.net/devblog-188 +[veloren-189]: https://veloren.net/devblog-189 +[veloren-190]: https://veloren.net/devblog-190 + +### [Subfuse][subfuse] + +{{ image_figure( + alt="Escape the hotel" + src="https://github.com/subfuse.png" + caption="Escape the hotel") }} + +[Subfuse][subfuse] is a short 1st person puzzle/escape game made for +[Bevy Jam #2][bevy-jam-2] with an accompanying [postmortem][subfuse-postmortem] +that goes into some detail about the process of making the game. + +[subfuse]: https://dgriffin.itch.io/subfuse +[subfuse-postmortem]: https://dgriffin.itch.io/subfuse/devlog/422315/subfuse-postmortem +[bevy-jam-2]: https://itch.io/jam/bevy-jam-2 + +## Engine Updates + +### [godot-rust][gd-github] + +{{ image_figure( + alt="godot-rust new export syntax" + src="https://github.com/godot-rust-export.png" + caption="The new `#[method]` syntax, which replaces existing `#[export]` and allows omitting +the base parameter.") }} + +godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter]) +is a Rust library that provides bindings for the Godot engine. +In September, development was divided into three tasks: + +- Maintenance releases [0.10.1][gd-0.10.1] and [0.10.2][gd-0.10.2] +- Godot 3.5 support in v0.11 ([#910][gd-910]) +- Ongoing [GDExtension][gd-gdext] efforts ([#824][gd-824]) + +Besides support for Godot 3.5.1, a change that many users will notice is the +new `#[method]` + `#[base]` syntax, replacing `#[export]` as illustrated above. + +The GDExtension/Rust binding has finally reached a state where a first +experimental version is within reach in October. If you are fine with the +bugs and missing features, you can give it a try very soon! + +[gd-0.10.1]: https://github.com/godot-rust/godot-rust/pulls?q=is%3Apr+milestone%3Av0.10.1 +[gd-0.10.2]: https://github.com/godot-rust/godot-rust/pulls?q=is%3Apr+milestone%3Av0.10.2 +[gd-824]: https://github.com/godot-rust/godot-rust/issues/824 +[gd-910]: https://github.com/godot-rust/godot-rust/issues/910 +[gd-github]: https://github.com/godot-rust/godot-rust +[gd-discord]: https://discord.gg/aKUCJ8rJsc +[gd-twitter]: https://twitter.com/GodotRust +[gd-gdext]: https://godotengine.org/article/introducing-gd-extensions + +### [Gamercade] + +{{ image_figure( + alt="Gamercade preview" + src="https://github.com/gamercade.gif" + caption="Gamercade Sprite Animations") }} + +[Gamercade] ([Discord][Gamercade-Discord], [GitHub][Gamercade-GitHub]) +by @RobDavenport is a WASM-powered fantasy console focused +on building multiplayer neo-retro games. + +Gamercade has launched their first official release! Version `0.1.0` has +all of the functions and features need to start building awesome single- +and multi-player games: input, graphics, audo, networking, and more. +[The full release article][Gamercade-Release] goes into higher detail about +the feature set of Gamercade, and includes example images and animations. + +Full controller support made it into the `0.1.0` release, including analog +sticks, analog triggers, as well as emulation of those for those without +a game pad. Additionally, they added a command line tool, called `gccl` which +streamlines many of the pain points in developing Gamercade games. A number of +quality-of-life and bug fixes also made it into the release. + +The team is already planning out their feature set for the next release, `0.2.0`, +which is based around the theme of "two." The next release will include more +multiplayer features like two or more local players, two or more networked instances, +stereo sound support, and much more. + +Come hang out and chat on [Discord][Gamercade-Discord], where the developers +interact with members and post updates daily. The project is +[open source][Gamercade-GitHub] and looking for contributors, suggestions, +as well as your awesome game creations. + +[Gamercade]: https://gamercade.io +[Gamercade-Discord]: https://discord.gg/Qafv2Fpt5j +[Gamercade-GitHub]: https://github.com/gamercade-io/gamercade_console +[Gamercade-Release]: https://gamercade.io/blog/gamercade-0-1-0 + +### [Dims][dims-website] + +![A short video of changing the speed of the day/night cycle from Dims script parameters](dims-timecycle.gif) + +[Dims][dims-website] ([Twitter][dims-twitter], [Discord][dims-discord], +[YouTube][dims-youtube]) is a pre-alpha collaborative open-world +creation platform. +Users can hop in sessions and build a game together, allowing everyone +to bring out their inner game-maker. + +In September, the platform continued to make steady progress, with new features +and bugfixes being made on a daily basis. The highlights are: + +- The team's very first game of entirely scripted multiplayer Team Deathmatch 🎉 +- All player logic was moved to the Rust scripting layer, allowing for it to be + changed on the fly +- The implementation of animation retargeting, so you can use any animation with + any model, as long as they share the same skeletal structure +- Scripting now has greater access to the ECS, allowing it to move the sun 🌅 +- Initial work on an asset database and pipeline, so that you can import any + asset and use it amongst your Dims projects +- An all-new object manipulation/placement tool suite + - Objects can now be consistently stacked, moved as a group, placed within + each other, and more! +- Many other infrastructural changes and improvements, including macOS and + Linux builds + +Want to try Dims out for yourself? Come join the [Discord][dims-discord] to be +notified of future public tests, see the latest features before everyone else, +and to talk to the devs personally. + +[dims-website]: https://dims.co +[dims-twitter]: https://twitter.com/DimsWorlds +[dims-discord]: https://discord.gg/Z5CAVmNE57 +[dims-youtube]: https://youtube.com/channel/UCR5gOwS7uSl0a0dl7MLQoqg + +## Learning Material Updates + +### [Making a turn-based multiplayer game in Rust][tbs-tutrial-1] + +![A screenshot of the tic tac toe clone the tutorial covers](tbs-multiplayer-tutorial.png) + +@herluf-ba published a beginner friendly [3 part tutorial series][tbs-tutrial-1] +about making turn-based multiplayer games using rust. +It covers what games can be considered "turn-based", +how to write a simple but neat game server using [renet], +and finally how to tie it all together with a client app made with [bevy]. + +[tbs-tutrial-1]: https://herluf-ba.github.io/making-a-turn-based-multiplayer-game-in-rust-01-whats-a-turn-based-game-anyway.html +[renet]: https://github.com/lucaspoffo/renet +[bevy]: https://github.com/bevyengine/bevy + +### [Chris Biscardi's Monthly Roundup][chris-biscardi-youtube] + +![monthly videos](chris-biscardi-videos.jpeg) + +[@chrisbiscardi] publishes a Rust video every day each +month on [YouTube][chris-biscardi-youtube]. + +This month started off with a [low-level WGPU series][wgpu-playlist] +that focuses on WGPU APIs as a primitive to understand +Bevy's renderer. Moving forward with that, he explored +[debugging shaders with RenderDoc][debugging-with-renderdoc], +[porting shaders][porting-shaders] from Blender to Bevy, +[generating custom meshes][cubesphere] and interesting +types of [noise][voronoise]. + +At a higher level, Chris covered a comparison between +[Bevy and Nannou][bevy-vs-nannou] for creative coding +endeavours and the top 10 games from [Bevy Game Jam #2][bevy-game-jam-2]. +He also put (more than) [1 million particles][1-million-particles] +inside of a Bevy app, and continued working on a +[2D platformer implementation][2d-platformer-cb]. + +[@chrisbiscardi]: https://twitter.com/chrisbiscardi +[chris-biscardi-youtube]: https://www.youtube.com/c/chrisbiscardi +[wgpu-playlist]: https://www.youtube.com/playlist?list=PLWtPciJ1UMuBs_3G-jFrMJnM5ZMKgl37H +[debugging-with-renderdoc]: https://www.youtube.com/watch?v=vblsZgBcgyw +[porting-shaders]: https://www.youtube.com/watch?v=ynLEQVPRfZs +[cubesphere]: https://www.youtube.com/watch?v=s0xY4muPwj8 +[voronoise]: https://www.youtube.com/watch?v=An2GMk8URMo +[bevy-vs-nannou]: https://www.youtube.com/watch?v=Cf08TlwUNf4 +[bevy-game-jam-2]: https://www.youtube.com/watch?v=VBMzaMEOhFI +[1-million-particles]: https://www.youtube.com/watch?v=MWIO-jP6pVo +[2d-platformer-cb]: https://www.youtube.com/watch?v=VWzqmquIZHc&t=2s + +## Tooling Updates + +### Feldversuch + +![Feldversuch](feldversuch.gif) + +Feldversuch by [@siebencorgie](https://twitter.com/siebencorgie) +is an experimental extension to the class of wavetable +synthesizers based on signed distance fields. + +Feldversuch uses user defined fields not only to render the +interface, but to generate sound based on them as well. The +so-called _sampling plane_ (seen moving back and forth above) +defines the wave shape that is played back. + +Further experiments include rotation (instead of the sweep +movement) as well as different interpretations of the wave +shape. Have a look at the [presentation video](https://www.youtube.com/watch?v=GZVdzcwSEaw) +and the [blog post](https://siebencorgie.rs/gallery/feldversuch/) +for further details. + +## Library Updates + +### bevy_oddio + +{{ image_figure( + alt="an example using bevy_oddio" + src="https://github.com/change_pitch_bevy_oddio_example.png" + caption="an example using bevy_oddio") }} + +[bevy_oddio] by [@harudagondi] is an audio plugin +for the [Bevy] game engine that uses the [oddio] library. +It aims to allow first class support of non-static audio sources +like procedurally generated audio. +The library also aims to have a high amount of flexibility +in controlling custom audio sources where typical audio sink methods +would not suffice. + +The previous month saw a new [0.2.0][bevy_oddio_02] release which +irons out some bugs and added new ergonomic features to allow a +better user experience. There is now added support for `Mono` +and `Stereo` audio sources, support for more [oddio] +types, a new example for controlling volume, and much more. +A lot of the APIs have been reworked to make it more flexible +and some public items were deleted to reduce redundancy. + +The above screen shows an example of controlling a custom made audio source +([taken from here][bevy_fundsp_example]) by calling the .control() method. + +[bevy_oddio]: https://github.com/harudagondi/bevy_oddio +[@harudagondi]: https://twitter.com/harudagondi +[oddio]: https://github.com/Ralith/oddio +[bevy_oddio_02]: https://github.com/harudagondi/bevy_oddio/releases/tag/v0.2.0 +[bevy_fundsp_example]: https://github.com/harudagondi/bevy_fundsp/blob/ca08963820c83dd723784db6c6f87df8eadd60e0/examples/oddio/controlled.rs#L40-L52 + +### [Particular] + +{{ image_figure( + alt="showcase using the demo" + src="https://github.com/particular.gif" + caption="Showcase using the [demo](https://canleskis.github.io/bevy-particular-demo/)") }} + +[Particular] by [@Canleskis] is a library allowing for simulations of +N-body gravitational interaction of particles. It aims to be simple +to integrate in existing game and physics engines, such as [Bevy] or [Rapier]. +See the [demo source code] for the example of an integration (less than 50 +actual lines of code!). +The [demo] is available on the browser (Chromium-based recommended) +with various scenes you can interact with. + +Particular can be used with [rayon] to leverage multithreading on the +CPU (`parallel` feature). Although the current algorithm performs well enough +for most use cases, with a single frame taking around 5 ms with 5000 particles +on an I9 9900K, future updates will introduce other implementations to allow for +faster computation of the forces (example: [Barnes-Hut]). + +You can find more about Particular with +[this video](https://www.youtube.com/watch?v=oFrq9ckHoN8&) from +[@ChristopherBiscardi](https://github.com/ChristopherBiscardi), or +[this post](https://www.reddit.com/r/rust/comments/x7uhoq/media_particular_a_simple_library_for_nbody/) +on Reddit. + +[Particular]: https://github.com/Canleskis/particular +[demo]: https://canleskis.github.io/bevy-particular-demo/ +[demo source code]: https://github.com/Canleskis/bevy-particular-demo/blob/main/src/nbody.rs +[@Canleskis]: https://github.com/Canleskis +[rayon]: https://github.com/rayon-rs/rayon +[Barnes-Hut]: https://en.wikipedia.org/wiki/Barnes%E2%80%93Hut_simulation + +### [Notan v0.7][Notan] + +![notan examples](notan.gif) + +[Notan] is a simple and portable layer designed to create your own +apps on top of it without worrying about platform-specific code. + +It provides a set of APIs and tools that can be used to create your +project in an ergonomic manner without enforcing any structure or pattern, +sharing the same codebase across multiple platforms. + +The focus of version [v0.7] was improvements and fixes, however the main +improvement was how textures are created, allowing to create textures that +depend on the backend. The main benefit of this new feature is that Notan +can now load on browsers to the GPU `HtmlImageElement` or it could load +other types of browser's images as well (like `HtmlCanvasElement`). + +[Notan]: https://github.com/Nazariglez/notan +[v0.7]: https://github.com/Nazariglez/notan/releases + +### [Polyanya] + +{{ image_figure( + alt="example of pathfinding" + src="https://github.com/polyanya.gif" + caption="Navigating through a mesh in the online [demo](https://vleue.github.io/bevy_pathmesh/)") }} + +[Polyanya] by [@FrancoisMockers] is a library implementing +[Polyanya][polyanya-paper], a Compromise-free Pathfinding algorithm on a +Navigation Mesh. It is currently the fastest known optimal online any angle +path planning algorithm. Unlike A*, any angle path planning techniques are not +bound to a grid and will find a taut path. + +An integration with [Bevy] is on-going, with a [few examples][polyanya-demo] +available in WASM. Next area of work will be around navigation mesh editing. + +[Polyanya]: https://github.com/vleue/polyanya +[polyanya-paper]: https://www.ijcai.org/proceedings/2017/0070.pdf +[polyanya-demo]: https://vleue.github.io/bevy_pathmesh/ +[@FrancoisMockers]: https://twitter.com/FrancoisMockers + +## Popular Workgroup Issues in GitHub + + + +- [#90: Rust on Consoles](https://github.com/rust-gamedev/wg/issues/90) + +## Other News + + + +- Other game updates: + - [Disk-0 Madness] is a bullet hell game, written in Rust for the WASM-4 + fantasy console. + - [Combine and Conquer] released version 0.1, moving into early access. + - [bevy-rapier-car-sim] is a 3D car simulation in Rust. + - [PongRust] is an 'unbeatable' Pong game. + - [My Roguelite] is a browser-based 3D roguelite. + - [Life Code] is an ecosystem simulation game. + - [Klod] released a retrospective post about their Katamari-inspired platformer. +- Other engine updates: + - [Rustacean Station] interviewed the developer of the Fyrox engine. + - [The Fyrox Book] added a new chapter on property inheritance. + - [Bevy's scheduling overhaul RFC] was merged. +- Other learning material updates: + - [LogRocket] posted about Bevy's ECS API. + - [Wade Zimmerman] wrote about their native iOS game dev journey with Rust. + - [Rust and Tell] featured a talk on hot reloading. + - [Bevy Basics] continued their series of beginner Bevy tutorials. + - [Yishn] coded an Astroids clone with Bevy. +- Other library updates: + - [big-brain] released version 0.14 of its Utility AI library, with fixes and + lots more observability improvements. + - [egui_dock] adds docking support to egui. + - [Valence] is a framework for building Minecraft servers in Rust. + - [Luminance] is a type-safe graphics framework, which is currently undergoing + a major rewrite. + - [Bevy ECSS] is a library for integrating a subset of CSS with Bevy's ECS system. + - [dtm] is a fast encoder/decoder for the DTM image format. + +[Disk-0 Madness]: https://maxcurzi.itch.io/disk-0-madness +[Combine and Conquer]: https://buckmartin.de/combine-and-conquer/2022-09-23-v0.1.0.html +[bevy-rapier-car-sim]: https://github.com/alexichepura/bevy-rapier-car-sim +[PongRust]: https://larsdu.github.io/PongRust/ +[My Roguelite]: https://ostwilkens.github.io/my-roguelite/ +[Life Code]: https://www.youtube.com/watch?v=ftVkklmO1Dk +[Klod]: https://devildahu.ch/devlog/making-of-klod-tech/ +[Rustacean Station]: https://rustacean-station.org/episode/dmitry-stepanov/ +[The Fyrox Book]: https://fyrox-book.github.io/fyrox/scene/inheritance.html +[Bevy's scheduling overhaul RFC]: https://github.com/bevyengine/rfcs/pull/45 +[LogRocket]: https://blog.logrocket.com/rust-bevy-entity-component-system +[Wade Zimmerman]: https://devmap.org/native-ios-game-development-w-rust-a1134887c35f +[Rust and Tell]: https://www.youtube.com/watch?v=-UUImyqX8j0 +[Bevy Basics]: https://www.youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6 +[Yishn]: https://www.youtube.com/watch?v=QCys49c44PU +[big-brain]: https://github.com/zkat/big-brain/releases/tag/v0.14.0 +[egui_dock]: https://crates.io/crates/egui_dock +[Valence]: https://github.com/valence-rs/valence +[Luminance]: https://phaazon.net/blog/2022-luminance-redesign-part-1 +[Bevy ECSS]: https://github.com/afonsolage/bevy_ecss +[dtm]: https://github.com/Ku95/dtm + +## Discussions + + + +- /r/rust_gamedev + - ["Should I use an existing physics engine or implement it myself?"](https://reddit.com/r/rust_gamedev/comments/x8if87/rubber_duck_question_should_i_use_an_existing) + - ["Ecs fundamentally at odds with borrow checker?"](https://reddit.com/r/rust_gamedev/comments/xajcgd/ecs_fundamentally_at_odds_with_borrow_checker) + - ["Best Engine for Choice-Driven, Semi-Free-Roam, 2D Gamedev"](https://reddit.com/r/rust_gamedev/comments/xc0fes/best_engine_for_choicedriven_semifreeroam_2d) + - ["Turn-based game - architecture feedback/opinons"](https://reddit.com/r/rust_gamedev/comments/xe1d6p/turnbased_game_architecture_feedbackopinons) + +## Requests for Contribution + + + +- ['Are We Game Yet?' wants to know about projects/games/resources that + aren't listed yet][awgy]. +- [Graphite is looking for contributors][graphite-contribute] to help build the + new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [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]. + +[awgy]: https://github.com/rust-gamedev/arewegameyet#contribute +[graphite-contribute]: https://graphite.rs/contribute +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/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 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +## Bonus + + + +![Ruffle logo](ruffle.svg) + +[Ruffle] is an open-source Flash Player emulator, written in Rust. It aims to run +natively on all modern operating systems and web browsers, leveraging Rust's +memory safety guarentees to avoid the security pitfalls that Flash became +notorious for in its later years. + +Many of today's game developers got their start developing +in Flash, and Ruffle aims to help preserve this part of internet (and +gaming!) history for future generations to look back on. + +For a look back at the history of Flash gaming, and the influence it has has +on games today, check out [Flash Game History]. + +[Ruffle]: https://ruffle.rs/ +[Flash Game History]: https://www.flashgamehistory.com/ + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/y3u42s/this_month_in_rust_gamedev_38_september_2022/), +[Twitter](https://twitter.com/rust_gamedev/status/1580915833941151744), +[Discord](https://discord.gg/yNtPTb2). + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/news/038/notan.gif b/content/news/038/notan.gif new file mode 100644 index 000000000..66febdced Binary files /dev/null and b/content/news/038/notan.gif differ diff --git a/content/news/038/particular.gif b/content/news/038/particular.gif new file mode 100644 index 000000000..f1d06744a Binary files /dev/null and b/content/news/038/particular.gif differ diff --git a/content/news/038/polyanya.gif b/content/news/038/polyanya.gif new file mode 100644 index 000000000..b9498f917 Binary files /dev/null and b/content/news/038/polyanya.gif differ diff --git a/content/news/038/ruffle.svg b/content/news/038/ruffle.svg new file mode 100644 index 000000000..d15aca4f1 --- /dev/null +++ b/content/news/038/ruffle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/news/038/subfuse.png b/content/news/038/subfuse.png new file mode 100644 index 000000000..e40974802 Binary files /dev/null and b/content/news/038/subfuse.png differ diff --git a/content/news/038/tbs-multiplayer-tutorial.png b/content/news/038/tbs-multiplayer-tutorial.png new file mode 100644 index 000000000..003baf700 Binary files /dev/null and b/content/news/038/tbs-multiplayer-tutorial.png differ diff --git a/content/news/038/thetawave.gif b/content/news/038/thetawave.gif new file mode 100644 index 000000000..6c28ccd2d Binary files /dev/null and b/content/news/038/thetawave.gif differ diff --git a/content/news/038/tiny_building_game.gif b/content/news/038/tiny_building_game.gif new file mode 100644 index 000000000..41852be22 Binary files /dev/null and b/content/news/038/tiny_building_game.gif differ diff --git a/content/news/038/ultimechs.png b/content/news/038/ultimechs.png new file mode 100644 index 000000000..12d4eefd9 Binary files /dev/null and b/content/news/038/ultimechs.png differ diff --git a/content/news/038/veloren.jpg b/content/news/038/veloren.jpg new file mode 100644 index 000000000..04b370c72 Binary files /dev/null and b/content/news/038/veloren.jpg differ diff --git a/content/news/039/blackjack.gif b/content/news/039/blackjack.gif new file mode 100644 index 000000000..c6eb6194a Binary files /dev/null and b/content/news/039/blackjack.gif differ diff --git a/content/news/039/cybergate.gif b/content/news/039/cybergate.gif new file mode 100644 index 000000000..1ddc36d5d Binary files /dev/null and b/content/news/039/cybergate.gif differ diff --git a/content/news/039/digital-extinction.jpeg b/content/news/039/digital-extinction.jpeg new file mode 100644 index 000000000..2b466a70f Binary files /dev/null and b/content/news/039/digital-extinction.jpeg differ diff --git a/content/news/039/fyroxed.gif b/content/news/039/fyroxed.gif new file mode 100644 index 000000000..89c5c93b7 Binary files /dev/null and b/content/news/039/fyroxed.gif differ diff --git a/content/news/039/graphite.png b/content/news/039/graphite.png new file mode 100644 index 000000000..e05688259 Binary files /dev/null and b/content/news/039/graphite.png differ diff --git a/content/news/039/index.md b/content/news/039/index.md new file mode 100644 index 000000000..716ca6c52 --- /dev/null +++ b/content/news/039/index.md @@ -0,0 +1,759 @@ ++++ +title = "This Month in Rust GameDev #39 - October 2022" +transparent = true +date = 2022-11-11 ++++ + + + + + +Welcome to the 39th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Engine Updates](#engine-updates) +- [Learning Material Updates](#learning-material-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) + + + +## Announcements + +### [Game Development in Rust Discord][gamedev-discord] + +![Discord projects forum](projects.png) + +The ['Game Development in Rust' Discord server][gamedev-discord] now has a +\#projects forum, where you can share updates on what you've been +working on. + +[gamedev-discord]: https://discord.gg/yNtPTb2 + +## Game Updates + +### miam + +![A screenshot of miam, the player is reproducing a burger order +while the chef is changing the menu](miam.png) + +[miam] ([GitHub][miam-src]) by [yopox], [on100balec], and [hadri] +is a cooking game made for the Ludum Dare 51. +"miam" is the French interjection for "yum". + +The theme of the game jam was "Every 10 seconds". +Here instead of having 10 seconds to make a burger, +the chef is really indecisive and comes to change +the menu every 10 seconds. + +The game was built using Bevy 0.8 with [bevy_game_template] +to save precious time when starting the game jam. +[bevy_tweening] was also really useful to polish the game. + +The game was ranked 120th overall and 94th for audio out of 1240 jam entries. + +_Discussions: [Submission page](https://ldjam.com/events/ludum-dare/51/miam)_ + +[miam]: https://yopox.itch.io/miam +[miam-src]: https://www.github.com/yopox/LD51 +[yopox]: https://mstdn.social/@yopox +[on100balec]: https://soundcloud.com/jmen_balec +[hadri]: https://github.com/HadrienRenaud +[bevy_game_template]: https://github.com/NiklasEi/bevy_game_template +[bevy_tweening]: https://github.com/djeedai/bevy_tweening + +### [Jumpy] + +{{ image_figure( + alt="Online Game Fish Selection Screen" + src="https://github.com/jumpy.png" + caption="Online Game Fish Selection Screen") }} + +[Jumpy] ([GitHub][Jumpy], [Discord][jumpy_discord], [Twitter][jumpy_twitter]) by +[Spicy Lobster][spicy_lobster] is a pixel-style, tactical 2D shooter with a fishy +theme. + +In the last month, +the devs started [rewriting][jumpy_rewrite] Jumpy to use the [Bevy] game engine. +Massive progress has been made, +establishing foundational features such as input mapping, UI, and localization, +along with the addition of a few major features: + +- Network play, complete with a matchmaking server for joining public games online. +- A scripting engine using TypeScript/JavaScript powered by [`bevy_mod_js_scripting`]. +- A revamped map editor that renders the actual game in the viewport. + This lets you switch back and forth between editing and playing, + and has the potential for multiplayer map editing in the future. + +The physics have been ported from the old version of the game +with the basic gameplay and the sword item nearly finished. +The next tasks include porting some of the old items to the new scripting system +and finishing off the map editor's editing functionality. + +_Discussions: [GitHub][jumpy_discussions], [Twitter][jumpy_twitter]_ + +[Jumpy]: https://github.com/fishfolks/jumpy +[jumpy_rewrite]: https://github.com/fishfolks/jumpy/pull/466 +[Bevy]: https://bevyengine.org +[jumpy_discussions]: https://github.com/fishfolks/jumpy/discussions +[jumpy_twitter]: https://twitter.com/spicylobsterfam +[jumpy_discord]: https://discord.gg/4smxjcheE5 +[spicy_lobster]: https://spicylobster.itch.io/ +[`bevy_mod_js_scripting`]: https://github.com/jakobhellermann/bevy_mod_js_scripting + +### [CyberGate][cybergate-yt] + +{{ image_figure( + alt="State Syncronization" + src="https://github.com/cybergate.gif" + caption="The health bar that is closer updates more frequently") }} + +CyberGate ([YouTube][cybergate-yt], [Discord][cybergate-dis]) by CyberSoul +is an attempt to use artificial intelligence to build diverse universe experiences +with strange creatures and procedural gameplay styles. + +Recent updates: + +- Constructed powerful and extremely fast synchronization for states: + - Able to Extract and Merge partial changes of components and global states. + - Restrict visibility, if the state is conditionally decided to be private. + - Limit the frequency of these state updates based on object priority. +- Big improvement of the organization of the networking systems +- Improved timers in 70 places, resulting in higher performance and flexibility +- Better health bars +- Several minor game content fixes + +[Join the Discord server][cybergate-dis] to participate in upcoming Phase 6.0! + +[cybergate-yt]: https://youtube.com/channel/UClrsOso3Xk2vBWqcsHC3Z4Q +[cybergate-dis]: https://discord.gg/R7DkHqw7zJ + +### Digital Extinction + +{{ image_figure( + alt="selection circles & health bars in Digital Extinction" + src="https://github.com/digital-extinction.jpeg" + caption="selection circles & health bars in Digital Extinction") }} + +[Digital Extinction] ([GitHub][de-github], [Discord][de-discord], +[Reddit][de-reddit]) by [@Indy2222] is a 3D real-time strategy game made with +[Bevy]. + +The game repository was opened a month ago under the GPLv3 license. Here is the +summary of the changes since the opening of the repository. It consists of +commit range `f23d51e..ffd5987` (2022-10-09–2022-11-03). There were 50 +non-merge commits in total, with the most notable improvements below: + +- Object & map bounds repulsion was added. +- Terrain got a texture. +- Select all (CTRL+A) and select all visible (CTRL+Shift+A) functionality was + introduced. +- Circle markers below selected objects are now displayed. +- Drag selection was implemented. +- Simple health bars were introduced. + +A more detailed update summary is available [here][de-newsletter]. + +[Digital Extinction]: https://de-game.org +[de-github]: https://github.com/DigitalExtinction/Game +[de-discord]: https://discord.gg/vHMFuCWGSX +[de-reddit]: https://www.reddit.com/r/DigitalExtinction/ +[@Indy2222]: https://github.com/Indy2222/ +[de-newsletter]: https://mgn.cz/blog/de01/ + +### [Turn-based strategy game (ThousandthStar's devlog)] + +![Skeleton](skeleton.png) + +[ThousandthStar] ([GitHub](https://github.com/ThousandthStar/multiplayer_game)) +is creating a simple turn-based strategy game using the Bevy game engine. It's a +small side project he's been building in his spare time. + +The game aims to be a cross between Chess and the game [Clash Mini](https://clash.com). +Players move their troops around the board and try to get them to their opponent's +side. The game is far from playable, but here is some of the progress that has +been done: + +- Server and client troop information exchange through packets. +- Threads to allow for multiple games to run at the same time. +- Tile selection appears when troops are clicked. + +More features are currently under development: + +- Troop movement. +- Troop attacks. + +The game uses an extremely simple 8x pixel art style. The palette is +[Paper Pixels](https://lospec.com/palette-list/paper-pixels) with some extra colors. + +_Discussions: [/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/ylksma/discussion_thread_for_thousandthstars_multiplayer)_ + +[ThousandthStar]: https://github.com/ThousandthStar +[Turn-based strategy game (ThousandthStar's devlog)]: https://dev.to/thousandthstar-start-of-the-game-development-blog-series-p42 + +### vetovoima + +![vetovoima](vetovoima.png) + +[vetovoima][vetovoima_itch] by [@MatiasKlemola][vetovoima_twitter] is an arcade game +where you control gravity. + +This month, the origin story of vetovoima was released +[on the Valuemotive blog][vetovoima_blog]. In the story, an abstract idea +turns into an arcade game, which eventually makes it to RustConf 2022! + +[vetovoima_itch]: https://yourmagicisworking.itch.io/vetovoima +[vetovoima_twitter]: https://twitter.com/MatiasKlemola +[vetovoima_blog]: https://www.valuemotive.com/post/hobby-project-spotlight-vetovoima + +## Engine Updates + +### [Fyrox] + +![Fyroxed](fyroxed.gif) + +[Fyrox] ([Discord][fyrox_discord], [Twitter][fyrox_twitter]) is a game engine that +aims to be easy to use and provide a large set of out-of-the-box features. In October +it hit version 0.28 which added new functionality and improved existing: + +- Asset preview during instantiation (see the gif above). +- Improved and deterministic script processing. +- Scripts are now compatible with saved games. +- Major text box widget improvements. +- Prefab property inheritance via reflection. +- Automatic node handle mapping via reflection. +- Sprite sheet animation support. +- Multi-borrow context to solve borrowing issues. +- Editor now stores list of recently used files, scene settings, and more. +- World Viewer now allows you to change a node type. +- Major [book] improvements. +- See the full list of changes in the [blog post][0.28]. + +[Fyrox]: https://github.com/FyroxEngine/Fyrox +[0.28]: https://fyrox.rs/blog/post/feature-highlights-0-28/ +[fyrox_discord]: https://discord.com/invite/xENF5Uh +[fyrox_twitter]: https://twitter.com/DmitryNStepanov +[book]: https://fyrox-book.github.io/ + +### [miniquad] + +{{ image_figure( + alt="ios-miniquad" + src="https://github.com/ios_zemeroth.png" + caption="[zemeroth](https://github.com/ozkriff/zemeroth/) on the iOS simulator") }} + +[miniquad] is a pure Rust, cross-platform graphics library. + +This month was about improving miniquad on mobile experience. + +On iOS, miniquad got [an article](https://macroquad.rs/articles/ios/) +on setting up the developer environment, getting provisioning files, +etc. + +TL;DR: even on old Macs/Xcode, mini/macroquad-based games can +be built with + +```rust +cargo build --target aarch64-apple-ios && ios_deploy +``` + +No iOS-specific code required and no need to deal with Xcode projects. + +For Android, miniquad got +[a writeup](https://www.patreon.com/posts/73600033) +on Java interop, AAB bundles and other Android specific internals. + +[miniquad]: https://github.com/not-fl3/miniquad/ + +## Learning Material Updates + +### WGPU Wiki + +[@wumpf](https://twitter.com/wumpf/) updated the +[wgpu wiki](https://github.com/gfx-rs/wgpu/wiki/Learning-wgpu) +to include an explanation of some of the fundamental +wgpu/WebGPU concepts. + +It includes info diagrams on how `RenderPipeline` connects +to other resources as well as an overview on the data structures +involved in rendering a frame. + +### [Learn Wgpu] Updated + +The Learn Wgpu tutorial has been updated to 0.14! + +The API changes from 0.13 are pretty simple - check them out +[here](https://sotrh.github.io/learn-wgpu/news/0.14/) + +[Learn Wgpu]: https://sotrh.github.io/learn-wgpu + +### [wgpu-openxr-example][wgpu-openxr-example] + +![A screenshot of the desktop mode of the example](wgpu-openxr-example.png) + +[`wgpu-openxr-example`][wgpu-openxr-example] is an example of how to wire up +wgpu (Vulkan-only) to OpenXR by [@philpax](https://github.com/philpax) +([Dims][dims]). It displays a triangle in the centre and a triangle per hand, +and renders to both a window and your XR headset with both head and headset tracking. + +It has multiple modes of operation, including disabling XR integration +entirely at compile-time with a Cargo feature, to make it easy to understand +each step in the process of integrating OpenXR. + +[wgpu-openxr-example]: https://github.com/philpax/wgpu-openxr-example +[dims]: https://www.dims.co/ + +## Tooling Updates + +### [Blackjack] + +![Blackjack: A height field terrain built from a noise function being edited in +real time](blackjack.gif) + +[Blackjack] by @setzer22 is a procedural modeling application made in Rust, +using rend3, wgpu, and egui. It follows the steps of applications like Houdini, +or Blender's geometry nodes project and provides a node-based environment to +compose procedural recipes to create 3d models. + +The past couple months have been busy for Blackjack, the work continues with a +focus of filling in all the missing bits to enable usage in more indie gamedev +workflows. + +Some of the changes include: + +- New nodes for geometry editing, like: _Resample curve_, _Point cloud_, + _Polygon_, _Line from points_ or _Edit geometry_. +- A new type of mesh, the height map with its set of nodes. +- A way to import OBJ meshes into procedural graphs. +- Bug fixes in extrude and bevel nodes, making them more robust and handle more + kinds of meshes. +- A new DragValue widget offering more precise control when tweaking parameters. +- Smoother camera controls and various editor UX improvements. + +Blackjack has no release notes yet, but make sure to check out the recently +merged PRs ([1][blackjack-pr-1], [2][blackjack-pr-2], [3][blackjack-pr-3]) for a +more in-depth summary of the changes and lots of animated gifs. + +On the social side, a first [blog post][blackjack-blog-post] in a series was +published on Ko-fi showing a real gamedev use case using Blackjack and the Godot +engine together to implement a racing game. Additionally, Blackjack now has a +[Twitter account][blackjack-twitter]. Consider following both for more frequent +updates! + +Currently, development is focused on implementing the next major feature: +Gizmos. There are [some initial results][blackjack-gizmos], and the full PR for +it is expected to land sometime during November. + +[Blackjack]: https://github.com/setzer22/blackjack +[blackjack-pr-1]: https://github.com/setzer22/blackjack/pull/45 +[blackjack-pr-2]: https://github.com/setzer22/blackjack/pull/46 +[blackjack-pr-3]: https://github.com/setzer22/blackjack/pull/52 +[blackjack-gizmos]: https://twitter.com/Blackjack3dRust/status/1587900630718615552 +[blackjack-blog-post]: https://ko-fi.com/post/New-nodes-Improved-Lua-bindings-and-lots-of-QoL-i-S6S6FK40S +[blackjack-twitter]: https://twitter.com/Blackjack3dRust + +### [Graphite][graphite-website] + +![Graphite logo](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free, +in-development raster and vector 2D graphics editor that will be based around a +Rust-powered node graph compositing engine. + +September and October's [sprint 19][graphite-sprint-19] focused on major new +features and improvements to make Graphite more useful and usable. + +- Like magic: [Stable Diffusion][graphite-stable-diffusion], the open source AI + image generator, is integrated into Graphite as the Imaginate tool. It + provides an innovative non-destructive workflow to interactively co-create + art with a skilled AI. +- Right on the nodes: Graphite's node graph engine is finally up and running, + now integrated with a node-powered tool that desaturates the underlying + artwork. A graph panel will be ready shortly. Just in time for + [Nodevember][graphite-nodevember]! +- With flying colors: The color picker menu gains hex/RGB/HSV controls. + Gradients get unlimited color transitions. The Eyedropper tool is rewritten + to sample pixels from the viewport. The editor UI gets a color scheme design + refresh for improved clarity, plus helpful new input widgets. + +Open the [Graphite editor][graphite-live-demo] in your browser to give it a try +and share your creations with #MadeWithGraphite on Twitter. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-sprint-19]: https://github.com/GraphiteEditor/Graphite/milestone/19 +[graphite-stable-diffusion]: https://en.wikipedia.org/wiki/Stable_Diffusion +[graphite-nodevember]: https://nodevember.io/ +[graphite-live-demo]: https://editor.graphite.rs + +## Library Updates + +### [glutin] + +[glutin] ([GitHub][glutin-github], [docs.rs][glutin-docs]) +by [@kchibisov] ([rust-windowing]) is a crate that is well known for +being an OpenGL platform initialization on top of winit. + +With glutin `0.30`, this is no longer the case. The crate was +rewritten from scratch and redesigned around [raw-window-handle], so +you don't need [winit] anymore in this equation and it could be used with +whatever windowing library you prefer, like [smithay-client-toolkit] for +pure Wayland clients. + +Given everything is based on raw-window-handle the crate is more low-level +now and also exposes the underlying platform API like `EGL`, `GLX`, and `WGL` +directly. There's already an interest of using glutin to handle `EGL` in +projects like [Smithay]. + +Previously with glutin `0.29` everything was based around the single +[`WindowedContext`] - while this was convinient for some users and worked on +desktop platforms, that fact was a major pain on Android where the window +gets destroyed over time, but its context could be kept around, or when you +fail to query configuration with supplied parameters leading to chain creating +`WindowedContext` and causing delays on startup. For example, you can create all +the objects and then fail on setting vsync, forcing you to start over. + +None of that is an issue with glutin `0.30.0`. The API is now structured around +`Display`, `Context`, `Surface`, and `Config`, where every object is built from +the `Display` and has its own role which is close to what you usually can find +in OpenGL native rendering platforms specifications, like `EGL`. + +Unfortunatelly, the new API isn't as easy to bootstrap as it was with old +glutin, especially when you want to use platforms like `WGL` and `GLX`. +However, if you're using winit there will be (or is already) a special crate +[glutin-winit] to handle platform-specific `Display` creation for you. + +To see the new API in action, look at the [glutin examples]. They +should work on desktop platforms and Android (you may even notice that there's +no special code for Android at all!). + +One note to add, is that iOS is **no longer** supported, but only due to +lack of maintainers for it. If you rely on iOS support in glutin, the devs +encourage you to help contributing to it upstream, or you'd stuck with glutin +`0.29` which won't receive any updates anymore. + +For further info, check out the [winit matrix room](https://matrix.to/#/#winit:matrix.org) +or [#winit](https://web.libera.chat/#winit) at libera.chat. + +[glutin]: https://crates.io/crates/glutin +[glutin examples]: https://github.com/rust-windowing/glutin/tree/master/glutin_examples +[glutin-winit]: https://github.com/rust-windowing/glutin/pull/1517 +[winit]: https://crates.io/crates/winit +[Smithay]: https://github.com/smithay/smithay +[`WindowedContext`]: https://docs.rs/glutin/0.29.1/glutin/type.WindowedContext.html +[smithay-client-toolkit]: https://crates.io/crates/smithay-client-toolkit +[glutin-github]: https://github.com/rust-windowing/glutin +[raw-window-handle]: https://crates.io/crates/raw-window-handle +[glutin-docs]: https://docs.rs/glutin +[@kchibisov]: https://github.com/kchibisov +[rust-windowing]: https://github.com/rust-windowing + +### [presser] + +[presser] ([GitHub][presser-github], [docs.rs][presser-docs]) +by [@fu5ha] ([Embark Studios][embark]) +is a crate to help you copy things into raw buffers without +invoking spooky action at a distance (undefined behavior). + +Ever done something like this? + +```rust +#[derive(Clone, Copy)] +#[repr(C)] +struct MyDataStruct { + a: u8, + b: u32, +} + +let my_data = MyDataStruct { a: 0, b: 42 }; + +// 🚨 MyDataStruct contains 3 padding bytes after `a`, which are +// uninit, therefore getting a slice that includes them is UB! +let my_data_bytes: &[u8] = transmute(&my_data); + +// allocate an uninit buffer of some size +let my_buffer: MyBufferType = some_api.alloc_buffer_size(2048); + +// 🚨 this is UB for the same reason, these bytes are uninit!* +let buffer_as_bytes: &mut [u8] = + slice::from_raw_parts(my_buffer.ptr(), my_buffer.size()); + +// 🚨 this is UB because not only are both slices invalid, +// this is not ensuring proper alignment! +buffer_as_bytes.copy_from_slice(my_data_bytes); +``` + +[presser] can help. + +```rust +// borrow our raw allocation as a presser::Slab, asserting we have +// unique access to it. see the docs for more. +let slab = unsafe { raw_allocation.borrow_as_slab(); } + +// now we may safely copy `my_data` into `my_buffer`, +// starting at a minimum offset of 0 into the buffer +let copy_record = presser::copy_to_offset(&my_data, &mut slab, 0)?; +``` + +If you're not convinced this is actually an issue, read more in the +[crate readme][presser-readme]. If you're intrigued and want to know more, +see the [docs][presser-docs]. + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/y5mq3w/presser), +[Twitter](https://twitter.com/fu5ha/status/1581705656218062848)_ + +[presser]: https://crates.io/crates/presser +[presser-github]: https://github.com/embarkstudios/presser +[presser-docs]: https://docs.rs/presser +[@fu5ha]: https://github.com/fu5ha +[embark]: https://github.com/embarkstudios +[presser-readme]: https://crates.io/crates/presser + +### [Hanabi] + +The [Hanabi] library ([GitHub][hanabi-github], [docs.rs][hanabi-docs]) is a +modern VFX library for the [Bevy Game Engine][bevy]. It focuses on scale to produce +stunning visual effects (VFX) in real time, offloading most of the work to +the GPU (compute shaders), with minimal CPU intervention. The design is inspired +by modern particle systems found in other industry-leading game engines. + +This month, [Hanabi] v0.4.0 was released, adding a 3D cone emitter and some +more testing, followed by v0.4.1 providing several bug fixes and support for custom +MSAA settings. Both versions target the latest Bevy 0.8 release. + +The internal architecture was also updated to decouple particle spawning and update, +allowing to update over [6 millions particles][hanabi-6m] in real time with close +to zero CPU usage. This new architecture will be available in the upcoming v0.5.0 +release as part of the upgrade to the imminent Bevy 0.9 release. + +[Hanabi]: https://crates.io/crates/bevy_hanabi +[hanabi-github]: https://github.com/djeedai/bevy_hanabi +[hanabi-docs]: https://github.com/djeedai/bevy_hanabi +[hanabi-6m]: https://twitter.com/djeedai/status/1586812459737923586 + +### [`seldom_state`] + +`seldom_state` by [Seldom] ([GitHub][seldom-github]) is a component-based +state machine plugin for Bevy. It's useful for AI, player state, animation, +and other entities that occupy varying states. + +In October, `seldom_state` recieved its 0.2 and 0.2.1 updates. 0.2 gave `Done` +and `DoneTrigger` success and failure variants, and changed states to be +bundles instead of components. 0.2.1 added `insert_on_enter` +and `remove_on_exit` methods to the state machine, which let you automatically +add and remove bundles upon state change. + +_Discussions: +[0.2](https://twitter.com/Seldom_SE/status/1581696118064177152), +[0.2.1](https://twitter.com/Seldom_SE/status/1586647959201906688)_ + +[`seldom_state`]: https://github.com/Seldom-SE/seldom_state +[Seldom]: https://twitter.com/Seldom_SE +[seldom-github]: https://github.com/Seldom-SE + +### MarpII + +MarpII ([GitLab](https://gitlab.com/tendsinmende/marpii), +[Twitter](https://twitter.com/siebencorgie), +[Mastodon](https://mastodon.social/@siebencorgie)) by +[Siebencorgie](https://github.com/siebencorgie) +is a highlevel-ish helper for Vulkan using +[Ash](https://crates.io/crates/ash). + +MarpII is the successor to [Marp](https://gitlab.com/tendsinmende/marp), which +was a Rust-y abstraction layer over low-level Vulkan bindings. + +The new crate does not focus on wrapping Vulkan into one safe wrapper, but +instead provides multiple levels of helpers that should make using it easier. +This includes handling resource lifetimes and providing simplifications for +common operations. + +The main crate provides utilities for robust Vulkan context (instances, devices, +etc.) and resource (images, buffers, descriptors etc.) creation. Lately, +higher level helpers like a +[resource managing frame graph](https://siebencorgie.rs/posts/marpii-rmg/) and +helpers for descriptor creation and command buffer recording joined the project. + +## Other News + + + +- Other game updates: + - [Yomi Hustle](https://twitter.com/ivy_sly_/status/1589988615123193856) is an + online turn-based TAS fighter, which is going into open beta on November 10th. + - [TheGrimsey](https://thegrimsey.net/2022/10/13/Bevy.html) is writing a devlog + of their experiences with Bevy. + - [Tiny Building Game](https://twitter.com/h3r2tic/status/1578125088280530946) + introduced a shader refactoring dev tool. + - [Embark](https://medium.com/embarkstudios/embarks-creative-playground-call-for-early-players-2e1d56d21ede) + is looking for early players for their creative platform. + - [R:Vust](https://sethmaddev.itch.io/rvust) is a side-scrolling SHMUP. + - [Tomb Explorer](https://www.youtube.com/watch?v=z8DCqoxHtDs) has a new + devlog video. + - [Tantan](https://www.youtube.com/watch?v=2-pXntcUWfM) is working on a voxel game. + - [Punchy](https://github.com/fishfolk/punchy/releases/tag/v0.1.0) + released the first MVP of their scripting engine. + - [Bungo Drifter](https://mungbungo.itch.io/bungo-drifter) is an infinite + voxel city generator. + - [Vange-rs](https://www.reddit.com/r/rust_gamedev/comments/yicr23/driving_through_the_voxel_grid_in_vangers/) + added a new style of rendering. + - [RainyCloud](https://store.steampowered.com/app/1343230/RainyCloud/) is an + experimental game where you control a cloud. + - [Life Code](https://www.youtube.com/watch?v=S2jxKva4n1U) released another + devlog for their ecosystem sim. +- Other engine updates: + - [GGEZ](https://www.reddit.com/r/rust_gamedev/comments/xvm9eb/ggez_080rc1) + published a new release candidate for v0.8. + - [Pyxel](https://twitter.com/kitao/status/1578669120416993280) has a new + tutorial of how to use their web version. +- Other learning material updates: + - [Rustacean Station](https://rustacean-station.org/episode/forest-anderson/) + interviewed Forest Anderson about Veloren, a multiplayer voxel RPG. + - [Rukai](https://www.youtube.com/watch?v=g4Xqf2MFXpk) gave a talk about how + they built a frame data website in Rust. + - [LittleB0xes](http://www.littleboxesgames.fr/posts/psycho-pong-part-one/) + started a tutorial series for Macroquad. + - [Dan Olson from Treyarch](https://www.youtube.com/watch?v=GtRo-eF8-TE) gave + a talk on using Rust for game tooling. + - [Larry Du](https://dublog.net/blog/rust-2/) made a web game using Bevy. + - [Ryosuke](https://dev.to/whoisryosuke/primitive-geometry-in-wgpu-and-rust-1da1) + wrote about rendering primitive geometry with WGPU. + - [PhaestusFox](https://www.youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6) + has posted more episodes of their 'Bevy Basics' tutorial series. +- Other tooling updates: + - [Modmapper](https://www.hallada.net/2022/10/05/modmapper-putting-every-skyrim-mod-on-a-map-with-rust.html) + is an interactive map of every Skyrim mod on Nexus Mods. + - [LelsersLasers](https://lelserslasers.itch.io/3d-cellular-automata-wgpu-rust) + is building 3D cellular automata with WGPU. + - [Vismut](https://orsvarn.com/vismut-0-6/) released version 0.6 of their + procedural texturing tool. +- Other library updates: + - [psx-sdk-rs](https://github.com/ayrtonm/psx-sdk-rs) is a basic Rust SDK for + the PlayStation 1. + - [WGPU 0.14](https://github.com/gfx-rs/wgpu/releases/tag/v0.14.0) was released. + - [gba](https://github.com/rust-console/gba/blob/main/CHANGELOG.md) is a crate + for Game Boy Advance development. + - [quinn](https://github.com/quinn-rs/quinn/releases/tag/0.9.0) released + version 0.9 of their pure-Rust QUIC implementation. + - [iyes_loopless 0.8](https://twitter.com/IyesGames/status/1585975134170468352) + provides usability improvements for Bevy game loops. + - [leafwing_abilities](https://twitter.com/AliceICecile/status/1582169655460114433) + is a library for managing game character abilities. + - [dualquat](https://github.com/knickish/dualquat) is a library for use in + dual quaternion-based physics simulations. + - [seed_creator](https://www.reddit.com/r/rust_gamedev/comments/yaw82r/random_seed_creation_showcase_for_wasm4_fantasy) + creates random seeds for the WASM4 fantasy console. + - [bevy-hikari](https://github.com/cryscan/bevy-hikari) implements global + illumination for Bevy. + - [bevy_ecs_tilemap](https://github.com/StarArawn/bevy_ecs_tilemap/releases/tag/v0.8.0) + added many new features. + - [bevy_mod_mesh_tools](https://github.com/DGriffin91/bevy_mod_mesh_tools) + provides helper code for working with meshes. + +## Discussions + + + +- /r/rust_gamedev: + - [SDL2 vs Winit/Pixels/CPAL/etc. Is going "native" really worth it?](https://www.reddit.com/r/rust_gamedev/comments/xyjdy5/sdl2_vs_winitpixelscpaletc_is_going_native_really/) + - [What's the best 2D engine like pygame, but for Rust?](https://www.reddit.com/r/rust_gamedev/comments/y72as6/whats_the_best_2d_engine_like_pygame_but_for_rust) + - [Best way to draw massive amount of individual pixels every frame](https://www.reddit.com/r/rust_gamedev/comments/xz642j/falling_sand_simulation_best_way_to_draw_pixels) + +## Requests for Contribution + + + +- ['Are We Game Yet?' wants to know about projects/games/resources that + aren't listed yet][awgy]. +- [Graphite is looking for contributors][graphite-contribute] to help build the + new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [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]. + +[awgy]: https://github.com/rust-gamedev/arewegameyet#contribute +[graphite-contribute]: https://graphite.rs/contribute +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/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 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue + +------ + +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! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/yslo3f/this_month_in_rust_gamedev_39_october_2022/), +[Twitter](https://twitter.com/rust_gamedev/status/1591162878190649345), +[Discord](https://discord.gg/yNtPTb2). + +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev +[@rust_gamedev]: https://twitter.com/rust_gamedev diff --git a/content/news/039/ios_zemeroth.png b/content/news/039/ios_zemeroth.png new file mode 100644 index 000000000..47a6bd268 Binary files /dev/null and b/content/news/039/ios_zemeroth.png differ diff --git a/content/news/039/jumpy.png b/content/news/039/jumpy.png new file mode 100644 index 000000000..b96ed8bc2 Binary files /dev/null and b/content/news/039/jumpy.png differ diff --git a/content/news/039/miam.png b/content/news/039/miam.png new file mode 100644 index 000000000..7149da71e Binary files /dev/null and b/content/news/039/miam.png differ diff --git a/content/news/039/projects.png b/content/news/039/projects.png new file mode 100644 index 000000000..f878fadb9 Binary files /dev/null and b/content/news/039/projects.png differ diff --git a/content/news/039/skeleton.png b/content/news/039/skeleton.png new file mode 100644 index 000000000..9203d6c69 Binary files /dev/null and b/content/news/039/skeleton.png differ diff --git a/content/news/039/vetovoima.png b/content/news/039/vetovoima.png new file mode 100755 index 000000000..1fdcb5f92 Binary files /dev/null and b/content/news/039/vetovoima.png differ diff --git a/content/news/039/wgpu-openxr-example.png b/content/news/039/wgpu-openxr-example.png new file mode 100644 index 000000000..bd31779f0 Binary files /dev/null and b/content/news/039/wgpu-openxr-example.png differ diff --git a/content/news/040/8bd-ui-prev.png b/content/news/040/8bd-ui-prev.png new file mode 100644 index 000000000..f31304eb8 Binary files /dev/null and b/content/news/040/8bd-ui-prev.png differ diff --git a/content/news/040/animation_editor.png b/content/news/040/animation_editor.png new file mode 100644 index 000000000..bda11834c Binary files /dev/null and b/content/news/040/animation_editor.png differ diff --git a/content/news/040/bevy-hikari-n40.jpeg b/content/news/040/bevy-hikari-n40.jpeg new file mode 100644 index 000000000..cdda060cb Binary files /dev/null and b/content/news/040/bevy-hikari-n40.jpeg differ diff --git a/content/news/040/bevy_atmosphere.png b/content/news/040/bevy_atmosphere.png new file mode 100644 index 000000000..568583dce Binary files /dev/null and b/content/news/040/bevy_atmosphere.png differ diff --git a/content/news/040/bevy_bloom_lion.jpeg b/content/news/040/bevy_bloom_lion.jpeg new file mode 100644 index 000000000..cbe826951 Binary files /dev/null and b/content/news/040/bevy_bloom_lion.jpeg differ diff --git a/content/news/040/bevy_quickmenu.gif b/content/news/040/bevy_quickmenu.gif new file mode 100644 index 000000000..497f49680 Binary files /dev/null and b/content/news/040/bevy_quickmenu.gif differ diff --git a/content/news/040/cnc.jpg b/content/news/040/cnc.jpg new file mode 100644 index 000000000..58b8e5c57 Binary files /dev/null and b/content/news/040/cnc.jpg differ diff --git a/content/news/040/cybergate.png b/content/news/040/cybergate.png new file mode 100644 index 000000000..3f8d6c5e7 Binary files /dev/null and b/content/news/040/cybergate.png differ diff --git a/content/news/040/defold.png b/content/news/040/defold.png new file mode 100644 index 000000000..a6163364b Binary files /dev/null and b/content/news/040/defold.png differ diff --git a/content/news/040/digital-extinction.jpeg b/content/news/040/digital-extinction.jpeg new file mode 100644 index 000000000..908cc30aa Binary files /dev/null and b/content/news/040/digital-extinction.jpeg differ diff --git a/content/news/040/eldiron.png b/content/news/040/eldiron.png new file mode 100644 index 000000000..113110ef2 Binary files /dev/null and b/content/news/040/eldiron.png differ diff --git a/content/news/040/embark-logo.jpg b/content/news/040/embark-logo.jpg new file mode 100644 index 000000000..7d030a707 Binary files /dev/null and b/content/news/040/embark-logo.jpg differ diff --git a/content/news/040/gamedev-meetup.png b/content/news/040/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/040/gamedev-meetup.png differ diff --git a/content/news/040/godot-rust-gdextension.png b/content/news/040/godot-rust-gdextension.png new file mode 100644 index 000000000..3c3110bee Binary files /dev/null and b/content/news/040/godot-rust-gdextension.png differ diff --git a/content/news/040/graphite.png b/content/news/040/graphite.png new file mode 100644 index 000000000..e05688259 Binary files /dev/null and b/content/news/040/graphite.png differ diff --git a/content/news/040/iced-cosmic.png b/content/news/040/iced-cosmic.png new file mode 100644 index 000000000..cf588ae0b Binary files /dev/null and b/content/news/040/iced-cosmic.png differ diff --git a/content/news/040/index.md b/content/news/040/index.md new file mode 100644 index 000000000..689252d97 --- /dev/null +++ b/content/news/040/index.md @@ -0,0 +1,1174 @@ ++++ +title = "This Month in Rust GameDev #40 - November 2022" +transparent = true +date = 2022-12-19 +draft = false ++++ + + + + + +Welcome to the 40th 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 + +- [Announcements](#announcements) +- [Game Updates](#game-updates) +- [Engine Updates](#engine-updates) +- [Learning Material Updates](#learning-material-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Other News](#other-news) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) +- [Jobs](#jobs) + + + +## Announcements + +### Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The 21st Rust Gamedev Meetup took place in November. You can watch the recording +of the meetup [here on Youtube][gamedev-meetup-video]. + +The meetups take place on the second Saturday of every month via the +[Rust Gamedev Discord server][rust-gamedev-discord] and are also +[streamed on Twitch][rust-gamedev-twitch]. +If you would like to speak at the next meetup, please +[respond to the monthly GitHub issue that will be created][gamedev-meetup-speakers]. + +[gamedev-meetup-video]: https://youtube.com/watch?v=BS_446HI12I +[gamedev-meetup-speakers]: https://github.com/rust-gamedev/meetup#how-to-sign-up-to-speak +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### [Jumpy] + +{{ image_figure( + alt="Swords, Crates, Grenades, & Mines" + src="https://github.com/jumpy.png" + caption="Jumpy Items: Swords, Crates, Grenades, & Mines") }} + +[Jumpy] ([GitHub][Jumpy], [Discord][jumpy_discord], [Twitter][jumpy_twitter]) by +[Spicy Lobster][spicy_lobster] is a pixel-style, tactical 2D shooter with a fishy +theme. + +In the last month, Jumpy migrated from a client-server networking model to a P2P +Rollback model using [GGRS]. This was to address shortcomings with the server +model that had been implemented, and to take advantage of the excellent +user experience that rollback networking can offer. + +The rollback model did come with the new requirement to run up to 8 simulation +frames per 16ms screen refresh, though, and unfortunately the JavaScript +bindings used to implement the game items were not performant enough to keep up. +For now, scripting has been temporarily disabled. + +This sparked a quick migration of the TypeScript files to Rust, and also +[a discussion][jumpy_wasm_discussion] about future possibilities for using WASM to +get better determinism and rollback performance, along with lower-overhead WASM +scripts. + +With promising ideas for future improvements, the rest of the month was spent +focusing on getting the initial items completed, with Grenades, Swords, Crates, +and Mines all landing recently. + +With just one more item planned and minimal clean up work, an MVP release is +just around the corner! + +[Jumpy]: https://github.com/fishfolks/jumpy +[Bevy]: https://bevyengine.org +[GGRS]: https://github.com/gschup/ggrs +[jumpy_twitter]: https://twitter.com/spicylobsterfam +[jumpy_discord]: https://discord.gg/4smxjcheE5 +[spicy_lobster]: https://spicylobster.itch.io +[jumpy_wasm_discussion]: https://github.com/fishfolk/jumpy/discussions/489 + +### [CyberGate][cybergate-yt] + +{{ image_figure( + alt="At the Abyss" + src="https://github.com/cybergate.png" + caption="The abyss is the deepest, hardest level, filled with monsters of all sizes and strength") }} + +CyberGate ([YouTube][cybergate-yt], [Discord][cybergate-dis]) by CyberSoul is an +ambitious endeavor to create an immersive universe experience with the power of +artificial intelligence and procedurally generated gameplay styles. Explore a +world filled with strange creatures and thrilling adventures! + +The latest updates include: + +- A new islands map featuring a safe zone and progressively more challenging + levels. +- Collectible Cubic Orbs that provide health, points, and bullets. +- An intuitive interface for day cycle, inventory (bullets), and cooldowns. +- Upgrade your stats as you level up. +- And an Emergency Recall feature for when you’re stranded. + +Be among the first to experience the wonders of AI-driven universe with +CyberGate! [Join the Discord server][cybergate-dis] to participate in +the upcoming Phase 7.0! + +[cybergate-yt]: https://youtube.com/channel/UClrsOso3Xk2vBWqcsHC3Z4Q +[cybergate-dis]: https://discord.gg/R7DkHqw7zJ + +### Rusty Vangers + +![Vange-rs rendered with a voxel tree](voxel-3rd-person.jpg) + +[Rusty Vangers] ([GitHub][vangers-src], [Itch-io][vangers-itch]) is an +experimental re-implementation of the [Vangers] game, +using GPUs and multi-threading in Rust. + +The project has started with a strong focus on rendering, +since efficient GPU implementation of a Voxel world as large as +2048x16384x256 (that's about 8 giga-voxels!) turned into a tough challenge, +even though the original game from 1998 easily does it on CPU. + +Finally, after years of experiments, a method has been implemented +that is fast and universal when it comes to viewing angles. It's based +on an acceleration structure in the form of a voxel octree. +This work has landed at the start of November, and now it's possible +to [ride through][vangers-video] the strange worlds +while looking from behind the car, or even from inside it. + +This method runs on all APIs (including OpenGL!), thanks to wgpu/naga +portability. It's suitably fast, regardless of perspective, even on +an old macBook with an integrated GPU. It concludes the rendering story +of the project, and the devs can shift focus on other areas. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/ypf38k/voxel_tracing_vange_rs)_ + +[Rusty Vangers]: https://vange.rs +[vangers-src]: https://github.com/kvark/vange-rs +[vangers-itch]: https://kvark.itch.io/vangers +[Vangers]: https://store.steampowered.com/app/264080/Vangers +[vangers-video]: https://vimeo.com/manage/videos/765602608 + +### Digital Extinction + +{{ image_figure( + alt="laser trail in Digital Extinction" + src="https://github.com/digital-extinction.jpeg" + caption="Laser trail in Digital Extinction") }} + +[Digital Extinction] ([GitHub][de-github], [Discord][de-discord], +[Reddit][de-reddit]) by [@Indy2222] is a 3D real-time strategy game made with +[Bevy]. + +Here is the summary of the changes since the last update. It consists of commit +range ffd5987..494096b (2022-11-03-2022-11-27). There were 75 non-merge commits +in total. + +The most notable updates are: + +- trails after laser fires are briefly visible, +- flying drones no longer slide on terrain but fly in height, +- simple main menu and map selection were added, +- a game design document was kicked off, +- both Rust API, and other technical documentation are automatically published + at [docs.de-game.org][de-docs], +- many community-related improvements have been made, +- the game was migrated to the new Bevy v0.9, +- there were some code quality and performance improvements, +- de_tools crate was fixed. + +A more detailed update summary is available [here][de-update-02]. + +[Digital Extinction]: https://de-game.org +[de-github]: https://github.com/DigitalExtinction/Game +[de-discord]: https://discord.gg/vHMFuCWGSX +[de-reddit]: https://reddit.com/r/DigitalExtinction +[@Indy2222]: https://github.com/Indy2222 +[de-docs]: https://docs.de-game.org +[de-update-02]: https://mgn.cz/blog/de02 + +### [Space Frontiers] + +![In-game screenshot of a player pointing a laser gun.](space_frontiers_ingame_screenshot.png) + +[Space Frontiers] ([GitHub], [Discord], [Twitter], [Reddit], [Steam Group]) +by [Star Wolves] is an online sci-fi action community RPG game simulating +space (and spaceships) in 3D. + +The game has been in-development for over two years. +The server and client were successfully prototyped with Godot several +years ago. After that, the server, with all its features, was +successfully ported to [Bevy]. The client is now getting the same +porting treatment! + +The project is commercial, [open-source] and has a proprietary license. +There is a milestone for a license change to free open-source. + +Space Frontiers seeks to deliver customized community gameplay experiences. +Read more about plugins and content customization in the [development journal]. + +The official StarWolves.io forum and discussion board were launched a week ago. +The first 50 registrants will receive a permanent unique forum group/title. + +[Star Wolves]: https://starwolves.io +[development journal]: https://starwolves.io/showthread.php?tid=1 +[Space Frontiers]: https://github.com/starwolves/space +[GitHub]: https://github.com/starwolves/space +[open-source]: https://github.com/starwolves/space +[Steam Group]: https://steamcommunity.com/groups/starwolvescommunity +[Discord]: https://discord.gg/yYpMun9CTT +[Twitter]: https://twitter.com/starwolvesstar +[Reddit]: https://reddit.com/u/StarwolvesStar + +### [Timely Defuse] + +![Screenshot of Timely Defuse, featuring a chubby hero disarming a bomb. +Dynamites are scattered about. +"WAVE 5" and a score of 199 appear at the top.](timely-defuse.png) + +[Timely Defuse] ([GitHub][timely-defuse-github]) by [@E_net4] +is a mobile Web game using Bevy, submitted to GitHub Game Off 2022. +In this game, explosives are coming out of nowhere +and it's the hero's job to stop as many of them from exploding as possible. + +Some remarks about the experience of creating Timely Defuse +were shared on [Dev.to][timely-defuse-dev]. + +[Timely Defuse]: https://e-net4.itch.io/timely-defuse +[timely-defuse-github]: https://github.com/Enet4/timely-defuse +[@E_net4]: https://hachyderm.io/@E_net4 +[timely-defuse-dev]: https://dev.to/e_net4/timely-wrap-up-quick-notes-on-timely-defuse-441o + +### [Spaceviata] + +![Screenshot of Spaceviata, showing the galaxy with some stars discovered and the game UI.](spaceviata.png) + +[Spaceviata] ([GitHub][spaceviata-github]) by [@FrancoisMockers] +is a strategy game made with [Bevy], submitted to GitHub Game Off 2022. + +Starting with one star, your goal in this turn-by-turn game is to conquer the +galaxy, fighting against AI players, and balancing exploration with +colonization to avoid stretching your resources too thin. + +[Spaceviata]: https://vleue.itch.io/spaceviata +[spaceviata-github]: https://github.com/mockersf/spaceviata +[@FrancoisMockers]: https://hachyderm.io/@FrancoisMockers + +### [Scummstreets] + +[Scummstreets] is a new multiplayer online role-playing game by [@dooskington]. +The game is a fork/sequel to [Antorum Isles], so the game server is written in Rust, +and the official client is made with Unity. It's still in a pre-alpha state. + +There was one dev log published this month: + +- [2: Character And Combat Work](https://ratwizard.dev/dev-log/scummstreets/2) + +[Scummstreets]: https://ratwizard.dev/dev-log/scummstreets +[Antorum Isles]: https://antorum.ratwizard.dev +[@dooskington]: https://twitter.com/dooskington + +### [8bit Duels] + +{{ image_figure( + alt="UI preview" + src="https://github.com/8bd-ui-prev.png" + caption="UI preview") }} + +[@ThousandthStar] is creating an 8bit themed multiplayer game. It's a turn-based +strategy game and is currently under development. This month, the +[blog][8bit-blog] got moved from [dev.to][8bit-dev.to] to ThousandthStar's own +blog on GitHub. + +The game is soon getting a UI, and more packets need to be implemented before +the game is ready to play. ThousandthStar is excited for the game to be +playable, but it will probably take some time, since he is doing it as a side +project when he has some time. The game is lacking troop spawns, a turn system, +and some more troops! Any and all ideas posted to the +[r/rust_gamedev][8bit-r/rust_gamedev] thread are greatly appreciated. + +If possible, ThousandthStar would like the art to be made up of voxel models +instead of just pixel art, but he doesn't know if he'll reach that point yet. + +_Discussion: [r/rust_gamedev][8bit-r/rust_gamedev]_ + +[8bit Duels]: https://thousandthstar.github.io +[@ThousandthStar]: https://github.com/ThousandthStar +[8bit-blog]: https://thousandthstar.github.io +[8bit-dev.to]: https://dev.to/thousandthstar +[8bit-r/rust_gamedev]: https://reddit.com/r/rust_gamedev/comments/ylksma/thousandthstars_multiplayer + +### [Veloren][veloren] + +{{ image_figure( + alt="A riverside" + src="https://github.com/veloren.jpeg" + caption="Reflections on the river") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +Doors were worked on, and now they open more consistently in a single direction. +There is ongoing work to add train tracks to the world, as well as train +stations in villages. A talk about Veloren was given at the Rust and Cpp Cardiff +Meetup, which [you can watch here][rust-and-cpp-cardiff-meetup]. + +Work was done on minotaurs to improve their attacks. A new dungeon type, adlet, +is being worked on. Bird animations are also having some work done. Houses are +seeing an uplift with some tests being done. In December, Veloren will be +hosting a Christmas event in the second half of the month. + +November's full weekly devlogs: "This Week In Veloren...": +[#197][veloren-197], +[#198][veloren-198], +[#199][veloren-199]. + +[veloren]: https://veloren.net +[veloren-197]: https://veloren.net/devblog-197 +[veloren-198]: https://veloren.net/devblog-198 +[veloren-199]: https://veloren.net/devblog-199 +[rust-and-cpp-cardiff-meetup]: https://youtube.com/watch?v=bT2SeYXpQm8 + +### [Combine&Conquer][cnc-logs] + +![top view on lots of machinery and belts](cnc.jpg) + +[Combine&Conquer][cnc-itch] ([Steam][cnc-steam]) by [Martin Buck][@I3ck] +is a WIP multi-planetary automation game similar to Satisfactory or Factorio. +[This month's updates][cnc-log-0-3] include: + +- Reworked belts/arms/assemblers, +- modules improvements, +- structure tiers additions, +- color palettes, +- UI and planet visuals improvements. + +Also, [check out a cool video][cnc-vid] with the progress of the project +over two years of development. + +[@I3ck]: https://github.com/I3ck +[cnc-itch]: https://martinbucksoftware.itch.io +[cnc-steam]: https://store.steampowered.com/app/2220850/Combine_And_Conquer +[cnc-logs]: https://buckmartin.de/combine-and-conquer.html +[cnc-log-0-3]: https://buckmartin.de/combine-and-conquer/2022-11-22-v0.3.0.html +[cnc-vid]: https://reddit.com/r/rust_gamedev/comments/yk9onb/the_two_year_development_progress_of_my + +## Engine Updates + +### [Pixel Engine][pixel_engine] + +[pixel_engine] by [@Maix0] is a 2D game engine that started as a Rust-version +of olcPixelGameEngine (written in C++). It was used as a learning project +for Maix0, where he worked on it for over 3 years. + +This engine has a very straightforward API and is mostly CPU based +(the exception is Decals which are GPU-sprites) but it can achieve some things. +Use it as a way to learn new algorithms or to make a simple game. + +It uses [wgpu] underneath so there is support for all desktop targets and WASM +(even though there is a bug in the WASM builds +where the keyboard layout is only QWERTY). + +The most recent addition is the [SpriteRef], a way to create a view +inside a sprite where it is possible to draw in it. +You can have multiple non-overlapping views at the same time. + +[pixel_engine]: https://github.com/Maix0/pixel_engine +[@Maix0]: https://github.com/Maix0 +[SpriteRef]: https://docs.rs/pixel_engine/0.6.0/pixel_engine/graphics/struct.SpriteMutRef.html +[wgpu]: https://wgpu.rs + +### [Fyrox] + +![Animation Editor](animation_editor.png) + +[Fyrox] ([Discord][fyrox_discord], [Twitter][fyrox_twitter]) is a game engine that +aims to be easy to use and provide a large set of out-of-the-box features. In November +it got a lot of new functionality and improved existing: + +- Major animation system rework +- New animation editor +- Reworked animation blending state machine editor +- Major improvements to the curve editor widget +- Curve-based animation system +- Smart placement mode for move gizmo +- Node and property selectors +- Better WebAssembly support - asynchronous scene loading and WASM project template +- Various improvements for project template generator +- Lots of bug fixes + +[Fyrox]: https://github.com/FyroxEngine/Fyrox +[fyrox_discord]: https://discord.com/invite/xENF5Uh +[fyrox_twitter]: https://twitter.com/DmitryNStepanov + +### [Bevy v0.9][bevy_news] + +![bevy bloom lion](bevy_bloom_lion.jpeg) + +[Bevy][bevy_engine] is a refreshingly simple data-driven game engine built in Rust. +It is [free and open source][bevy_repo] forever! + +Bevy 0.9 brought many incredible new features. +You can check out the [full release blog post here][bevy_news], +but here are some highlights: + +- [HDR Post Processing, Tonemapping, and Bloom](https://bevyengine.org/news/bevy-0-9/#hdr-post-processing-tonemapping-and-bloom) +- [FXAA](https://bevyengine.org/news/bevy-0-9/#fxaa-fast-approximate-anti-aliasing) +- [Deband Dithering](https://bevyengine.org/news/bevy-0-9/#deband-dithering) +- [Other Post Processing Improvements](https://bevyengine.org/news/bevy-0-9/#post-processing-view-target-double-buffering) +- [New Scene Format](https://bevyengine.org/news/bevy-0-9/#new-scene-format) +- [Code Driven Scene Construction](https://bevyengine.org/news/bevy-0-9/#dynamic-scene-builder) +- [Improved Entity/Component APIs](https://bevyengine.org/news/bevy-0-9/#improved-entity-component-apis) +- [Exclusive System Rework](https://bevyengine.org/news/bevy-0-9/#exclusive-system-rework) +- [Enum Reflection](https://bevyengine.org/news/bevy-0-9/#enum-reflection) +- [Time Shader Globals](https://bevyengine.org/news/bevy-0-9/#time-shader-globals) +- [Plugin Settings](https://bevyengine.org/news/bevy-0-9/#plugin-settings) +- [Bevy UI Z-Indices](https://bevyengine.org/news/bevy-0-9/#bevy-ui-z-indices) + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/ytiv2a/bevy_09), +[Hacker News](https://news.ycombinator.com/item?id=33577284), +[Twitter](https://twitter.com/cart_cart/status/1591543728233385984)_ + +[bevy_engine]: https://bevyengine.org +[bevy_news]: https://bevyengine.org/news/bevy-0-9 +[bevy_repo]: https://github.com/bevyengine/bevy + +### [godot-rust][gd-github] + +![godot-rust GDExtension](godot-rust-gdextension.png) + +godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter]) +is a Rust library that provides bindings for the Godot engine. Just this month, +a [Mastodon account][gd-mastodon] was opened to share development info. + +November brings the long-awaited GDExtension binding, enabling access to Godot 4 +features from Rust. Still in an early experimental phase, it is already possible +to run smaller examples like Godot's famous Dodge-the-Creeps tutorial game. + +Compared to the GDNative binding, APIs are a bit simpler now: + +- One central `Gd` pointer combining `Ref`/`Instance` and their type-states +- Self-registering classes: `#[derive(GodotClass)]` and you're good-to-go +- Less `unsafe`, less `unwrap()`, more runtime checks + +The repository is available at [godot-rust/gdextension][gd-github], while the +current development status is tracked in [#24][gd-24]. The [book][gd-book] as +well as documentation are still under construction. + +[gd-24]: https://github.com/godot-rust/gdextension/issues/24 +[gd-book]: https://github.com/godot-rust/book +[gd-github]: https://github.com/godot-rust/gdextension +[gd-discord]: https://discord.gg/aKUCJ8rJsc +[gd-twitter]: https://twitter.com/GodotRust +[gd-mastodon]: https://mastodon.gamedev.place/@GodotRust + +### [defold-rs] + +![Defold logo](defold.png) + +[@JustAPotota] is working on rusty bindings for the [Defold][defold] engine +and [has started a thread about this on Defold's forum][defold-rs-thread] +where you can fond all more info and updates. + +The project is split up into a few different parts: + +- [defold-rs] - Rust bindings to dmSDK and test project for new bindings +- [defold-rs-extender] - Custom build server +- [defold-rs-template] - Rust port of the native extension template + +> It works the same way as regular C/C++ extensions: everything is done +> on the build server and you only need the standard Defold editor +> to build games. <...> +> +> These extensions are full Cargo projects. The main benefit being that +> you can use any of the Rust libraries on crates.io in your Defold game +> just by listing them in your Cargo.toml. +> Theoretically, you could even write a game with the Bevy game engine +> and embed it into a Defold project! + +Note that the project is in an early stage: +only bundling for Windows and Linux is currently supported, +you must host your own build server and it provides +no sandboxing or security against malicious extensions. + +[@JustAPotota]: https://github.com/JustAPotota +[defold-rs]: https://github.com/JustAPotota/defold-rs +[defold-rs-extender]: https://github.com/JustAPotota/defold-rs-extender +[defold-rs-template]: https://github.com/JustAPotota/defold-rs-template +[defold-rs-thread]: https://forum.defold.com/t/writing-native-extensions-in-rust/71980 +[defold]: https://defold.com + +## Learning Material Updates + +### [Render Pipelines in wgpu][render-pipelines-post] + +![Floating bananas and cubes with stony texture](render-pipelines.jpg) + +[@whoisryosuke] wrote [a blog post][render-pipelines-post] +on how to parse #GLTF files in Rust, render them using WebGPU, +and play animations imported from Blender! + +[@whoisryosuke]: https://mastodon.gamedev.place/@whoisryosuke +[render-pipelines-post]: https://dev.to/whoisryosuke/render-pipelines-in-wgpu-and-rust-2dh3 + +### [Rapier Physics Engine Showcase][rapier-tut-video] + +![Youtube preview: bevy logo, rapier logo and a piece of Rust code](rapier-bevy-yt.jpg) + +[Matthew Bryant][matthew-bryant] released [a video][rapier-tut-video] +with a broad overview of some of the core features and organization +of the [Rapier][rapier] physics engine's [Bevy plugin][rapier-bevy]. + +[rapier-tut-video]: https://youtube.com/watch?v=GwlZ5EPu8l0 +[matthew-bryant]: https://youtube.com/@logicprojects +[rapier]: https://rapier.rs +[rapier-bevy]: https://github.com/dimforge/bevy_rapier + +### [Evaluating Health & Quality of Crates at Embark][embark-guide] + +![Embark's logo: title and a person in space helmet](embark-logo.jpg) + +[@repi] shared [some internal guidelines][embark-guide] about how they +look into and evaluate health & quality of Rust crates +at [Embark Studios][embark]. + +> note: I wrote this for our internal documentation & guidelines at Embark +> so not all of it is likely relevant for other companies, +> but sharing here as others expressed interest in seeing it +> +> these are not exact rules but things to consider, esp. for adding dependencies +> for long term use in large Rust project in production. +> +> our project is ~500k LoC and uses ~700 crates, so some care and +> active gardening is in needed. which is why we (read: @ca1ne) +> also built `cargo-deny` and `cargo-about` early on and use it heavily. + +[@jntrnr] made a [video overview of the guide][jntrnr-video]. + +[@repi]: https://mastodon.gamedev.place/@repi +[embark]: https://embark.dev +[embark-guide]: https://gist.github.com/repi/d98bf9c202ec567fd67ef9e31152f43f +[@jntrnr]: https://jntrnr.com +[jntrnr-video]: https://youtube.com/watch?v=4sZTcBg50wc + +## Tooling Updates + +### [Boytacean][boytacean] + +Boytacean ([GitHub][boytacean], [Working Emulator][boytacean-web]) +by [@joamag] is a Game Boy emulator written in Rust +with both Native (using SDL) and Web (using WebAssembly) frontends that has been +created as a learning experiment to better understand both Rust capabilities and +Game Boy hardware. +The Web frontend is especially interesting making use of Web standards like +[Gamepad API][gamepad-api] to provide a rich and joyful experience for both +desktop and mobile devices. +Performance wise the web version runs smoothly with little to no significant +hardware requirements. + +Even though Boytacean supports most Game Boy games and passes most well-known +test ROMs there are still some features lacking like support for Game Boy Color +and APU (sound) support. + +You can check this [Reddit post][boytacean-red-ann] for more information. + +[boytacean]: https://github.com/joamag/boytacean +[boytacean-web]: https://boytacean.joao.me +[@joamag]: https://github.com/joamag +[gamepad-api]: https://developer.mozilla.org/docs/Web/API/Gamepad_API/Using_the_Gamepad_API +[boytacean-red-ann]: https://reddit.com/r/rust/comments/ywxugc/game_boy_emulator_using_rust + +### [Graphite][graphite-website] + +![Graphite logo](graphite.png) + +Graphite ([website][graphite-website], [GitHub][graphite-repo], +[Discord][graphite-discord], [Twitter][graphite-twitter]) is a free, +in-development raster and vector 2D graphics editor based around a Rust-powered +node graph compositing engine. + +November's [sprint 20][graphite-sprint-20] introduces: + +- Filling in the blanks: The Imaginate tool gains Inpaint/Outpaint, letting + users [replace content][graphite-inpaint-demo] in masked areas and even + ["uncrop"][graphite-outpaint-demo] entire images, powered by + [Stable Diffusion][graphite-stable-diffusion]. +- Going native: Graphite is now available as a desktop app, thanks to Tauri. + The app now has access to system resources like rustc and the GPU, which lets + it compile and run node graph effects as SPIR-V compute shaders in Vulkan for + hardware-accelerated rendering. +- Connecting the dots: The node graph compositor now + [supports interactive editing][graphite-nodes-demo], so users can drag nodes + and chain together effects. Nodes can be set in the Properties panel or + exposed as inputs in the graph. + +It's easy to get involved with the project by developing new nodes. Join the +project [Discord][graphite-discord] and ask how to begin. + +Stay tuned for the imminent Alpha Milestone 2 release and progress converting +existing features into nodes. + +Open the [Graphite editor][graphite-editor] in your browser to give it a try +and share your creations with #MadeWithGraphite on Twitter. + +[graphite-website]: https://graphite.rs +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://discord.graphite.rs +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-sprint-20]: https://github.com/GraphiteEditor/Graphite/milestone/20 +[graphite-inpaint-demo]: https://youtube.com/watch?v=Ck2R0yqTLcU&t=3269 +[graphite-outpaint-demo]: https://youtube.com/watch?v=Ck2R0yqTLcU&t=3862s +[graphite-nodes-demo]: https://youtube.com/watch?v=Ck2R0yqTLcU&t=4332 +[graphite-stable-diffusion]: https://en.wikipedia.org/wiki/Stable_Diffusion +[graphite-editor]: https://editor.graphite.rs + +## Library Updates + +### [bevy_atmosphere v0.5][bevy_atmosphere] + +![bevy_atmosphere collage: colored skies](bevy_atmosphere.png) + +bevy_atmosphere ([crates.io][bevy_atmosphere], +[docs.rs](https://docs.rs/bevy_atmosphere/latest/bevy_atmosphere/), +[GitHub](https://github.com/JonahPlusPlus/bevy_atmosphere)) +is now compatible with Bevy 0.9. + +The focus of this update was decoupling the atmospheric model from the +compute pipeline. What this means is that users can choose a different model +or create their own using the `Atmospheric` trait. This sets the groundwork for +having a variety of models to choose from, each for a different type of game. + +With the removal of the `Atmosphere` resource, comes the addition of the +`AtmosphereModel` resource and the `Nishita` and `Gradient` models. `Nishita` +is the same model that was used in the previous version of bevy_atmosphere. +`Gradient` is a new model that provides a simple gradient of three colors, +making it ideal for stylized games. + +There is also the `Atmosphere` and `AtmosphereMut` system params, +which can be used to work with a particular model +without having to cast it from `AtmosphereModel`. + +If you want to read more about the technical changes, check out the developer's +[blog post](https://jonahplusplus.dev/2022/12/01/bevy_atmosphere_0.5.html)! + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/za948o/bevy_atmosphere_05_is_now_released), +[/r/bevy](https://reddit.com/r/bevy/comments/za93oo/bevy_atmosphere_05_is_now_released), +[/r/rust](https://reddit.com/r/rust/comments/za93zb/bevy_atmosphere_05_is_now_released)_ + +[bevy_atmosphere]: https://crates.io/crates/bevy_atmosphere + +### [Bevy Sequential Actions] + +{{ image_figure( + alt="Bevy sequential actions simple demo" + src="https://github.com/sequential_actions.gif" + caption="An entity with a queue of repeating actions.") }} + +`bevy-sequential-actions` ([GitHub][seq-actions-gh], [docs.rs][seq-actions-docs]) +is a simple helper library for the [Bevy][bevy] game engine. +It aims to execute a queue of various actions in a sequential manner. + +An action is anything that implements the `Action` trait, +and can be added to any `Entity` that contains the `ActionsBundle`. +In the image above, the following actions have been added: + +```rust +commands + .actions(entity) + .config(AddConfig { + order: AddOrder::Back, + start: true, + repeat: Repeat::Forever, + }) + .add(WaitAction::new(1.0)) + .add(MoveAction::new(Vec3::X * 2.0)) + .add(WaitAction::new(1.0)) + .add(MoveAction::new(Vec3::X * -2.0)); +``` + +With version `0.6` comes the ability to +add a collection of actions that run in parallel. +This means that all actions will start and stop at the same time, +as the whole collection is treated as "one action". +In other words, the action queue will only advance +when all actions in the collection are finished. + +```rust +commands + .actions(agent) + .add_many( + ExecutionMode::Parallel, + actions![ + action_a, + action_b, + action_c, + ] + ); +``` + +[Bevy Sequential Actions]: https://crates.io/crates/bevy-sequential-actions +[seq-actions-gh]: https://github.com/hikikones/bevy-sequential-actions +[seq-actions-docs]: https://docs.rs/bevy-sequential-actions + +### [Sparsey] v0.10 + +[Sparsey] by [@LechintanTudor] is an Entity Component System focused on +flexibility, conciseness and providing features exclusive to its sparse +set-based implementation. + +The latest release takes advantage of the newly added Generic Associated Types +to provide a uniform interface for running systems, functions and closures that +borrow data from World and Resources, via the "run", "run_locally" and +"run_exclusive" functions. + +Example: + +```rust +let heaviest = sparsey::run(&world, &resources, |weights: Comp| { + (&weights) + .iter() + .with_entity() + .max_by_key(|(_entity, &weight)| weight) + .map(|(entity, _weight)| entity) +}); +``` + +[Sparsey]: https://github.com/LechintanTudor/sparsey +[@LechintanTudor]: https://github.com/LechintanTudor + +### [Bevy Quickmenu][bevy_quickmenu_crates] + +![Bevy Quickmenu simple menu demo](bevy_quickmenu.gif) + +bevy_quickmenu ([crates.io][bevy_quickmenu_crates], +[docs.rs][bevy_quickmenu_docs], [GitHub][bevy_quickmenu_github]) allows quickly +creating nested game menus that can be navigated with keyboard, gamepad or +mouse. + +Bevy Quickmenu builds on BevyUI and allows defining nested menu structures in a +super simple way. Its also very extensible and customisable. If you game needs +menus and you would like to support multiple input methods, give it a try. + +For example, a simple vertical menu can be defined like this: + +```rust +fn root_menu(state: &CustomState) -> Menu { + Menu::new( + "root", + vec![ + MenuItem::image(state.logo.clone()), + MenuItem::headline("Menu"), + MenuItem::action("Start", Actions::Close), + MenuItem::screen("Sound", Screens::Sound) + .with_icon(MenuIcon::Sound), + MenuItem::screen("Controls", Screens::Controls) + .with_icon(MenuIcon::Controls), + ], + ) +} +``` + +For a more involved example, check out [this definition of a settings screen +with control device selection and a sound menu][bevy_quickmenu_settings]. +[Version `0.1.5`][bevy_quickmenu_0.1.5] was just released which simplifies +generics and makes it easier to create dynamic menus. + +_Discussion: +[/r/rust_gamedev][bevy_quickmenu_reddit]_ + +[bevy_quickmenu_crates]: https://crates.io/crates/bevy_quickmenu +[bevy_quickmenu_docs]: https://docs.rs/bevy_quickmenu +[bevy_quickmenu_github]: https://github.com/terhechte/bevy_quickmenu +[bevy_quickmenu_settings]: https://github.com/terhechte/bevy_quickmenu/blob/main/examples/settings.rs +[bevy_quickmenu_0.1.5]: https://github.com/terhechte/bevy_quickmenu/releases/tag/0.1.5 +[bevy_quickmenu_reddit]: https://reddit.com/r/bevy/comments/yyl73c/new_plugin_bevy_quickmenu + +### [Notan v0.8][Notan] + +![notan examples](notan.gif) + +[Notan] is a simple abstraction layer that provides cross-platform windowing, +input, audio, graphics and other features, in an ergonomic manner without +enforcing any structure or pattern and treating WebAssembly as a first-class citizen. + +The version [v0.8] is one of the biggest releases, adding several improvements +in the drawing APIs and fixes and improvements in some other features like the +clipboard support. + +You can check the [demos] online and read more about the changes on the [changelog]. + +[Notan]: https://github.com/Nazariglez/notan +[v0.8]: https://github.com/Nazariglez/notan/releases/tag/v0.8.0 +[changelog]: https://github.com/Nazariglez/notan/blob/main/CHANGELOG.md +[demos]: https://nazariglez.github.io/notan-web + +### [Bevy Hikari] v0.3 + +{{ image_figure( + alt="bevy-hikari screenshot" + src="https://github.com/bevy-hikari-n40.jpeg" + caption="Direct lighting, emissive lighting and indirect global illumination under 4x +temporal upscaling.") }} + +`bevy-hikari` ([crates.io][hikari-crates], [docs.rs][hikari-docs], +[GitHub][hikari-github]), a path tracing renderer for [Bevy], is now compatible +with the 0.9 version of the engine. + +In recent updates, the renderer implements light BVH, which allows faster and +more accurate multiple emissive sampling. It also features a spatial upscaler +based on FSR 1.0 and a temporal upscaler based on SMAA Tu4x, making it more +affordable for median end devices. + +[Bevy Hikari]: https://github.com/cryscan/bevy-hikari +[hikari-crates]: https://crates.io/crates/bevy-hikari +[hikari-docs]: https://docs.rs/bevy-hikari +[hikari-github]: https://github.com/cryscan/bevy-hikari + +### [Bevy Vfx Bag] + +{{ image_figure( + alt="Bevy vfx bag gif" + src="https://github.com/underwater.gif" + caption="A composite effect applied to Bevy's 3D shapes example.") }} + +`bevy-vfx-bag` ([GitHub][bevy-vfx-bag-gh], [docs.rs][bevy-vfx-bag-docs]) +is a visual effects library for the [Bevy][bevy] game engine. + +It had its initial 0.1.0 release aligned with Bevy's recent 0.9.0 release. +Each effect has a plugin and effects are applied in order: + +```rust +// Shows an example of adding three post processing effects: +app + .add_plugin(BevyVfxBagPlugin) // Always needed + .add_plugin(RaindropsPlugin) // Shows rain on-screen + .add_plugin(ChromaticAberrationPlugin) // Skews color channels + .add_plugin(LutPlugin) // Allows using a look-up table to remap colors for + // having a specific "feel" to your game + .run(); +``` + +The camera which receives these effects is marked as such: + +```rust +commands + .spawn(Camera3dBundle { ... }) + .insert(PostProcessingInput) // Marks this camera for post processing usage +``` + +Effect settings can be changed at runtime: + +```rust +fn update(time: Res