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 52% rename from newsletter-template.md rename to .github/newsletter-template.md index 6b88e0d1a..35158343f 100644 --- a/newsletter-template.md +++ b/.github/newsletter-template.md @@ -1,12 +1,15 @@ +++ -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 +++ + + -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. @@ -26,18 +29,20 @@ Feel free to send PRs about your own projects! [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) -- [Library & Tooling Updates](#library-tooling-updates) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [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) - [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 ## Learning Material Updates -## Library & Tooling Updates +## Tooling Updates -## Popular Workgroup Issues in Github +## Library Updates + +## Popular Workgroup Issues in GitHub +## Other News + + + ## Meeting Minutes @@ -82,6 +104,11 @@ or [join the next meeting][join]. [label_meeting]: https://github.com/rust-gamedev/wg/issues?q=label%3Ameeting +## Discussions + + + ## Requests for Contribution @@ -95,23 +122,38 @@ or [join the next meeting][join]. +## 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 05255f3f4..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.12.2 + 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 cb0c14378..d15b1fb88 100644 --- a/README.md +++ b/README.md @@ -8,22 +8,24 @@ To contribute to the newsletter, please see [CONTRIBUTING]. ## Building from Source -The site is built and deployed automatically from the repo (see .github/workflows/ci.yml). +The site is built and deployed automatically from the repo (see +[.github/workflows/ci.yml][ci]). To preview/experiment locally: -1) [Install Zola][zola-get]. +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 +[ci]: https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/.github/workflows/ci.yml ## License 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 82a299c13..5fc7bd5cc 100644 --- a/config.toml +++ b/config.toml @@ -3,9 +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_feeds = true +feed_filenames = ["rss.xml"] + +[markdown] highlight_code = true -generate_feed = true -feed_filename = "rss.xml" +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 5fa2ce3cd..1c06e7994 100644 --- a/content/news/006/index.md +++ b/content/news/006/index.md @@ -109,7 +109,7 @@ It was also the first anniversary of This Week in Veloren! There has been a devblog each week since the end of January last year. Here are some of the big changes in this release: -```text +```txt - Added initial region system implementation - Added moon and clouds - Added proper SFX system @@ -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 fbc739553..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. @@ -196,7 +198,7 @@ is a large part of what is needed for The Content Update. Here is the February changelog: -```text +```txt - Fixed NPCs attacking the player forever after killing them - Extend run sfx to small animals to prevent sneak attacks by geese - Added sfx for wielding/unwielding weapons @@ -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 2faf6b728..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. @@ -348,7 +350,7 @@ Networking is also being reworked from the ground up. Here is the March changelog: -```text +```txt - Added sfx for wielding/unwielding weapons - Fixed NPCs attacking the player forever after killing them - Added sfx for collecting, dropping and using inventory items @@ -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 89d743187..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. @@ -495,7 +499,7 @@ more alive. Here is the April changelog: -```text +```txt - Complete rewrite of the combat system into a state machine - Abilities like Dash and Triplestrike - Fireball explosions @@ -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 06cc49408..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, @@ -737,7 +757,7 @@ Also, check out a new "Game of Life" demo [here][iced-life]. ### [beehive] -```text +```txt yz +Y __ yx / \ xz +X @@ -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 fc8f9bdab..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/ @@ -748,7 +770,7 @@ increased incremental build time, and build artifacts size. nanoserde may be useful when the whole game has less than a minute clean build time and spending ~40s on serde is unreasonable. -```text +```txt > cargo tree nanoserde v0.1.0 (/../nanoserde) └── nanoserde-derive v0.1.0 (/../nanoserde/derive) @@ -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 ac0615624..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. @@ -1016,7 +1039,7 @@ using `#` as a prefix. Here is an example of this feature is being tested in an experimental offline 3D renderer (not open sourced): -```text +```txt // Called by `set_simple(scene: _, sdf: _, id: _)`. dyon_fn!{fn set_simple__scene_sdf_id( scene: #&mut SimpleScene, @@ -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 e08956aed..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 8af52c8e4..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 7cf708647..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 06284349c..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) +### [nvtx-rs] -## Meeting Minutes +{{ image_figure( + alt="A screenshot of NVIDIA NSight Systems with only one sections measured" + src="https://github.com/nvtx.png" + caption="Watching the profile in NVIDIA NSight Systems") }} - +NVIDIA® Tools Extension SDK (NVTX) is a C-based API for annotating events, +code ranges, and resources in your applications. +[nvtx-rs] by [@simbleau] is a safe rust wrapper for it. -[See all meeting issues][label_meeting] including full text notes -or [join the next meeting][join]. +The intent is to safely wrap the NVTX library in rusty fashion +to provide a proper cross-platform library for GPU and CPU profiling. +Ideally this library would be used in benchmarking rust applications +and performing research on rust projects such as a GPU analysis +with zero-cost abstraction. -[label_meeting]: https://github.com/rust-gamedev/wg/issues?q=label%3Ameeting +[nvtx-rs]: https://github.com/simbleau/nvtx-rs +[@simbleau]: https://github.com/simbleau ## Requests for Contribution - - -## Jobs - - - -## Bonus - - + + +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [gfx-rs's "contributor-friendly" issues][gfx-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]. + +[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 +[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue ------ @@ -705,13 +852,10 @@ Want something mentioned in the next newsletter? 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 diff --git a/content/news/022/libfive.png b/content/news/022/libfive.png new file mode 100644 index 000000000..9ba89448e Binary files /dev/null and b/content/news/022/libfive.png differ diff --git a/content/news/022/nvtx.png b/content/news/022/nvtx.png new file mode 100644 index 000000000..1576b06bd Binary files /dev/null and b/content/news/022/nvtx.png differ diff --git a/content/news/022/rpg-cli.png b/content/news/022/rpg-cli.png new file mode 100644 index 000000000..0d812fbed Binary files /dev/null and b/content/news/022/rpg-cli.png differ diff --git a/content/news/023/battleship.gif b/content/news/023/battleship.gif new file mode 100644 index 000000000..7e5c96dcb Binary files /dev/null and b/content/news/023/battleship.gif differ diff --git a/content/news/023/bevy_config_cam_logo.svg b/content/news/023/bevy_config_cam_logo.svg new file mode 100644 index 000000000..262bba605 --- /dev/null +++ b/content/news/023/bevy_config_cam_logo.svg @@ -0,0 +1,120 @@ + + + +
+ +
+

Bevy Config Cam

+ +
+

🎥

+
+
+
+
+
\ No newline at end of file diff --git a/content/news/023/bevy_midi_logo.svg b/content/news/023/bevy_midi_logo.svg new file mode 100644 index 000000000..fc6f3a4c5 --- /dev/null +++ b/content/news/023/bevy_midi_logo.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

bevy_midi

+
+
+
+
+
\ No newline at end of file diff --git a/content/news/023/blightmud.png b/content/news/023/blightmud.png new file mode 100644 index 000000000..1c4fb4a99 Binary files /dev/null and b/content/news/023/blightmud.png differ diff --git a/content/news/023/cakes.png b/content/news/023/cakes.png new file mode 100644 index 000000000..2bafcd1f4 Binary files /dev/null and b/content/news/023/cakes.png differ diff --git a/content/news/023/crystalorb.gif b/content/news/023/crystalorb.gif new file mode 100644 index 000000000..7a7942f37 Binary files /dev/null and b/content/news/023/crystalorb.gif differ diff --git a/content/news/023/dango.gif b/content/news/023/dango.gif new file mode 100644 index 000000000..3f1a305e1 Binary files /dev/null and b/content/news/023/dango.gif differ diff --git a/content/news/023/egregoria.jpg b/content/news/023/egregoria.jpg new file mode 100644 index 000000000..d67d9524b Binary files /dev/null and b/content/news/023/egregoria.jpg differ diff --git a/content/news/023/egui.gif b/content/news/023/egui.gif new file mode 100644 index 000000000..87ad694f4 Binary files /dev/null and b/content/news/023/egui.gif differ diff --git a/content/news/023/erupt.svg b/content/news/023/erupt.svg new file mode 100644 index 000000000..4e24614f7 --- /dev/null +++ b/content/news/023/erupt.svg @@ -0,0 +1,213 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/news/023/fish.gif b/content/news/023/fish.gif new file mode 100644 index 000000000..188db29a8 Binary files /dev/null and b/content/news/023/fish.gif differ diff --git a/content/news/023/flesh.gif b/content/news/023/flesh.gif new file mode 100644 index 000000000..d02b6ca90 Binary files /dev/null and b/content/news/023/flesh.gif differ diff --git a/content/news/023/gamedev-meetup.png b/content/news/023/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/023/gamedev-meetup.png differ diff --git a/content/news/023/graphite-cherry-tree.png b/content/news/023/graphite-cherry-tree.png new file mode 100644 index 000000000..a23f94976 Binary files /dev/null and b/content/news/023/graphite-cherry-tree.png differ diff --git a/content/news/023/hatchooseswizard.jpg b/content/news/023/hatchooseswizard.jpg new file mode 100644 index 000000000..53030ccf4 Binary files /dev/null and b/content/news/023/hatchooseswizard.jpg differ diff --git a/content/news/023/hyperfarmer.png b/content/news/023/hyperfarmer.png new file mode 100644 index 000000000..40e04d2d4 Binary files /dev/null and b/content/news/023/hyperfarmer.png differ diff --git a/content/news/023/index.md b/content/news/023/index.md new file mode 100644 index 000000000..075f3fee4 --- /dev/null +++ b/content/news/023/index.md @@ -0,0 +1,1120 @@ ++++ +title = "This Month in Rust GameDev #23 - June 2021" +date = 2021-07-08 +transparent = true +draft = false ++++ + +Welcome to the 23rd 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 + + +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The sixth Rust Gamedev Meetup happened in June. 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 in a future meetup, fill out [this form][gamedev-meetup-form]. + +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[gamedev-meetup-video]: https://www.youtube.com/watch?v=Wuwxh958P6I +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### taileater + +![logo of a pixellated snake attempting to eat it's own tail](taileater.gif) + +taileater ([itch.io](https://szunami.itch.io/taileater), +[GitHub](https://github.com/szunami/taileater/)) is a open source puzzle game +in which you eat your own tail to win. + +The game is programmed in Rust using the Bevy engine. + +### [Egregoria] + +![Egregoria in 3D](egregoria.jpg) + +[Egregoria] ([GitHub][Egregoria], [Discord][egregoria-discord]) +by [@Uriopass] +is a simulation oriented city builder that tries +to replicate modern society as well as possible. + +It recently upgraded from a 2D top-down view to a +3D third-person camera as seen in the screenshot above. + +Elevated roads and bridges are now possible, allowing to build +[complex highway interchanges][highway-screenshot]. + +Some technical details around the renderer with more screenshots, +along with an architectural overview of the project can be read in the +[9th devlog][egregoria-blog-post]. + +[Egregoria]: https://github.com/Uriopass/Egregoria +[@Uriopass]: https://github.com/Uriopass +[egregoria-blog-post]: https://douady.paris/blog/egregoria_9.html +[egregoria-discord]: https://discord.gg/CAaZhUJ +[highway-screenshot]: http://douady.paris/blog/img/blog_9/interchange.jpg + +### [Open Combat][opencombat] + +![Open Combat logo](open_combat.jpg) + +[Open Combat][opencombat] +([/r/OpenCombatGame](https://reddit.com/r/OpenCombatGame), +[Discord](https://discord.gg/YD2V7XsBQZ), +[Forum](https://discourse.opencombat.bux.fr/)) +is a real time tactical game directly inspired by +[Close Combat Series](https://en.wikipedia.org/wiki/Close_Combat_(series)). +The player takes control of soldier units and orders them to win the battles +from a top down 2D view. + +The project recently started with Rust language after a Python language proof of +concept in 2017. More info is available at [opencombat.bux.fr][opencombat], +and you can find a +[presentation](https://youtube.com/watch?v=pxVgjBKXlIw) video and a game +making of [video](https://youtube.com/watch?v=3TOEZ7krhvI) on YouTube. + +[opencombat]: https://opencombat.bux.fr + +### [Battleship.rs](https://github.com/deepu105/battleship-rs) + +![Battleship gameplay](battleship.gif) + +[Battleship.rs](https://github.com/deepu105/battleship-rs) by +[Deepu](https://twitter.com/deepu105) is an open source Battleship game for +the terminal built in Rust using the [tui-rs](https://github.com/fdehau/tui-rs) +crate. + +The game uses different ship shapes, unlike the traditional vertical/horizontal +shapes, and has multiple game rules to choose from. There are two difficulty +levels as well. The game is supported in Linux, Mac and Docker. + +If you have docker installed, you can play the game instantly by running + +```bash +docker run --rm -it deepu105/battleship:main +``` + +The next iteration would be to support a WebAssembly version of the same. + +### [Blightmud][blightmud] + +![Blightmud logo](blightmud.png) + +[Blightmud][blightmud] ([Discord](https://discord.gg/qnxgUC5)) is a mud client +for the terminal inspired by [tintin++][tintin] and [tinyfugue][tinyfugue] +allowing users to connect and get immersed in the worlds offered by text based +online multi user dungeons known as muds. + +The project was birthed in April of 2020 and has come a long way since. It now +offers granular scripting access using [lua][lua], plugin handling, built in +text-to-speech (via [Speech dispatcher][speechd]), split view scrolling, modern +telnet protocols, and TLS connections to name a few. + +[blightmud]: https://github.com/Blightmud/Blightmud +[tintin]: https://tintin.mudhalla.net/ +[tinyfugue]: http://tinyfugue.sourceforge.net/ +[lua]: https://www.lua.org/ +[speechd]: https://freebsoft.org/speechd + +### [The Hat Chooses the Wizard][hatchooseswizard] + +{{ image_figure( + alt='Level 1-4 of the game "The Hat Chooses the Wizard" running on a Game Boy +Advance' + src="https://github.com/hatchooseswizard.jpg" + caption="Runs on real hardware!") }} + +The Hat Chooses the Wizard is a 2D platformer for the Game Boy Advance. + +It was made for this year's Game Maker's Toolkit (GMTK) game jam with the theme +joined together and came in the top 25% of over 5800 entries. The game plays +over 12 levels with the core mechanic being to throw your hat and then +accelerate towards it. You can play it on a web-based emulator embedded on the +[itch][hatchooseswizard] page. + +The game is written in pure Rust and uses [agb][agblibrary] to +interface with the hardware. The library is designed to allow you to write games +without needing a detailed understanding of the hardware while still giving full +access to all of its capabilities. It is under active development with +plenty more features on the way. + +You can find the source code for the game [here][hatchooseswizardsource] and all +feedback is welcome. + +[hatchooseswizard]: https://lostimmortal.itch.io/the-hat-chooses-the-wizard +[hatchooseswizardsource]: https://github.com/corwinkuiper/joinedtogether +[agblibrary]: https://github.com/corwinkuiper/agb + +### [Themengi] + +{{ image_figure( + alt='User highlighting objects in the game world and parsing the phrase +"dang puru rupuu kythengi" into the action "open", object "door", and mods +"red" and "left".' + src="https://github.com/themengi.gif" + caption="Demonstration of natural language parser with temporary words and grammar.") }} + +[Themengi] ([Discord][themengi-discord], [Twitter][themengi-twitter]) +is a puzzle adventure game where you learn an alien language, +with completely unknown words and grammar, to navigate the world +and find your way home. + +This month the [first devlog][themengi-video] for +Themengi was published, discussing its natural language parser using +Head-Driven Phrase Structure Grammar, the choice to use Bevy, a texture +upscaling technique for faithful pixel art rendering, and implementing an +outline shader in the Bevy render pipeline. + +[Themengi]: https://vgel.me/themengi +[themengi-discord]: https://discord.gg/GpparbnXPC +[themengi-twitter]: https://twitter.com/voooooogel +[themengi-video]: https://youtube.com/watch?v=gtIphiK7tMs + +### [Dango] + +{{ image_figure( + alt="Dango bouncing and jumping around" + src="https://github.com/dango.gif" + caption="Cute rice dumplings", + link="http://ernestwong.nz/dango-tribute/server/") }} + +[Dango] ([GitHub][dango-github]) is a little multiplayer blob physics sandbox +made by [@ErnWong] as a tribute to the [Dango Daikazoku][dango-daikazoku] from +[Clannad]. It was made using various libraries from the Rust community, +including the [Bevy] game engine, the [NPhysics] physics engine, and the +[CrystalOrb] networking library. To avoid the costs of running a server, Dango +currently runs the server in the browser and generates a unique URL that lets +other players to join using WebRTC. + +[Dango]: http://ernestwong.nz/dango-tribute/server/ +[dango-github]: https://github.com/ErnWong/dango-tribute +[@ErnWong]: https://github.com/ErnWong +[dango-daikazoku]: https://www.youtube.com/watch?v=XXDxZ0YGWG8 +[Clannad]: https://en.wikipedia.org/wiki/List_of_Clannad_episodes +[Bevy]: https://bevyengine.org/ +[NPhysics]: https://nphysics.org/ +[CrystalOrb]: https://github.com/ErnWong/crystalorb + +### [FishGame][fishgame-itch] + +![FishGame](fish.gif) + +[FishGame][fishgame-itch] is a multiplayer brawler game made in [macroquad]. + +FishGame started as a [nakama-rs] showcase, but now it's getting more life as +an independent game. To make a transition from a tech demo to a real game, +lots of playtesting and fine-tuning happened this month. Most noticeable +improvements: a new physics system with throwable everything and a new +zoom-to-fit camera system. + +[fishgame-itch]: https://fedorgames.itch.io/fish-game +[macroquad]: https://github.com/not-fl3/macroquad +[nakama-rs]: https://github.com/heroiclabs/nakama-rs + +### [Hyper Farmer][hyperfarmer-itch] + +![Hyper Farmer logo](hyperfarmer.png) + +The dubiously named [Hyper Farmer][hyperfarmer-itch] was made for the GMTK Game Jam +using the Bevy engine. For some reason, the player has to pick up all the hay from +their fields using a giant laser slung between two tractors. Apart from the +[bevy_game_template][bevy_game_template], all the artwork, music, and code was +made over about 24 hours. The game can be played in the +[browser][hyperfarmer-itch], and native builds are available +on [github releases][hyperfarmer]. + +[bevy_game_template]: https://github.com/NiklasEi/bevy_game_template +[hyperfarmer]: https://github.com/will-hart/cloud-surfer +[hyperfarmer-itch]: https://wilsk.itch.io/hyper-farmer + +### [Way of Rhea][wor] + +[![Way of Rhea on Steam](wor-dialogue.jpg)][wor] + +[Way of Rhea][wor] is a picturesque puzzle platformer-without the platforming. +Solve mind-bending color puzzles, unlock new areas of a vibrant hub world, and +talk to NPCs to unravel the mysteries of a world you left behind! + +Way of Rhea is being produced by [@masonremaley][mason-remaley]. Latest Way of +Rhea developments: + +- Most biomes now have narrative arcs, experienced in part through the + [new dialogue system][wor-speech-bubble]. +- [@masonremaley][mason-remaley] published + [a blog post, *When to Rewrite*][wor-when-to-rewrite] outlining how he views the + rewrite vs improve tradeoff in the Way of Rhea engine. +- Controller support was added, controls glyphs shown in game automatically + reflect the most recently used input device. +- Fixes a player reported bug where undo/redo resulted in a temporary slowdown + due to a lack of communication with the sleep system. +- More puzzles! + +[wor]: https://store.steampowered.com/app/1110620 +[wor-when-to-rewrite]: https://www.anthropicstudios.com/2021/06/25/when-to-rewrite/ +[wor-speech-bubble]: https://twitter.com/masonremaley/status/1400189924889042944 +[mason-remaley]: https://twitter.com/masonremaley + +### [Weegames][weegames-itch] + +![Weegames menu](weegames.jpg) + +[Weegames][weegames-itch] is a fast-paced minigame collection. +The web version now has a counter which tells you how many +of the 41 minigames you've played. Also, the game shows +a newly-added loading screen while downloading the +initial assets. + +Note: These updates have not yet been rolled out to the +downloadable Windows version. + +[weegames-itch]: https://yeahross.itch.io/weegames + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="https://github.com/flesh.gif" + caption="demo build") }} + +Flesh by [@im_oab] is a 2D-horizontal shmup game with hand-drawn animation and +organic/fleshy theme. It is implemented using [Tetra]. This month, an internal +demo build was released, with a development journal available on +[Google Drive][flesh-gdrive]. + +[@im_oab]: https://twitter.com/im_oab +[Tetra]: https://github.com/17cupsofcoffee/tetra +[flesh-gdrive]: https://drive.google.com/drive/folders/1CppHsiteHDNofsVo2wHNNz_3E9YuK4Ay + +### [Veloren][veloren] + +{{ image_figure( + alt="Cave run" + src="https://github.com/veloren.png" + caption="Turns out the cave wasn't empty") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In June, Veloren released 0.10. During the release party, some of the developers +joined a voice call to stream the game and answer some questions about +development. You can watch that stream [here][veloren-stream]. A lot of metrics +were recorded during the launch, and you can read about them in +[blog #124][veloren-124]. At peak, 118 players were playing at the same +time during the launch. + +The plugins system received a tutorial about how to get started. Caves were +overhauled with lots of new content. Veloren has officially moved fully over to +wgpu, which you can read all about in [blog #125][veloren-125]. Work has been +done on hot reloading for easier access of assets in game. Lots of new models +were added to the game, and bosses in dungeons are being overhauled with more +skills to diversify combat. + +June's full weekly devlogs: "This Week In Veloren...": +[#123][veloren-123], +[#124][veloren-124], +[#125][veloren-125], +[#126][veloren-126]. + +[veloren]: https://veloren.net +[veloren-stream]: https://www.youtube.com/watch?v=NMvEhymkqUw +[veloren-123]: https://veloren.net/devblog-123 +[veloren-124]: https://veloren.net/devblog-124 +[veloren-125]: https://veloren.net/devblog-125 +[veloren-126]: https://veloren.net/devblog-126 + +### [Projectris][projectris] + +![projectris](projectris.png) + +[Projectris][projectris] is like Tetris, but in 2D and 3D at the same time. +As the 3D piece falls, you can manipulate it, but all that matters +are the shadows it casts on the 2D game boards on either side, +each of which is played independently. + +While the full concept is already prototyped, there are still many features to +implement before this is a real game: +scoreboard, increasing fall speed, game over, JUICE. + +[@bonsairobo] is not actively working on this, but is +[happy to accept PRs][projectris]. + +[projectris]: https://github.com/bonsairobo/projectris + +### [The Process] + +{{ image_figure( + alt="The new terrain editor in The Process" + src="https://github.com/the_process.gif" + caption="Building the world, one voxel at a time") }} + +[The Process] by @setzer22 is an upcoming game about factory building, +process management, and carrot production, +built with Rust using the Godot game engine! + +In this month, the main focus has been towards the addition of a new terrain +editor to speed up the creation of game levels. Terrain meshes are built using +smooth voxels using the implementation in the [building +blocks](https://docs.rs/building_blocks_core) crate. + +This month has seen the following changes and improvements: + +- The new [terrain + editor](https://twitter.com/PlayTheProcess/status/1406707803637551107), with a + minimalistic GUI built in Godot itself. +- A new [island](https://gfycat.com/talkativeneatcatfish), fully made and + procedurally textured with the new editor +- Implemented random factory maintenance + [events](https://twitter.com/PlayTheProcess/status/1403986026402619393). +- Migration of several old GDScript code into Rust, using the ECS pattern, like + the system for character + [movement](https://twitter.com/PlayTheProcess/status/1411410261651738635). + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/o3o8d0/experimenting_with_the_building_blocks_crate)_ + +[The Process]: https://twitter.com/PlayTheProcess + +### [Not Snake][not-snake] + +![cube map, low poly dog and giant snake](notsnake.png) + +[Not Snake][not-snake] is a snake game in 3D with a twist: +you're the snake's food! + +Check out the web version on the [game's itch.io page][not-snake]. + +[not-snake]: https://ramirezmike2.itch.io/not-snake + +### [Space:CAKES][cakes] + +![screenshot](cakes.png) + +[Space:CAKES][cakes] is a sliding, repeating and funky puzzler +about reaching the delicious cupcake across your spaceship. +Made for the GMTK Game Jam. + +> You play as a cute alien, who has a limited amount of steps. +> He turns green when he can walk freely, but once he runs out of steps, +> he becomes red and can only push on crates. +> Luckily, some crates contain +1 or +2 steps for him, +> as long as he can push one into a laser. + +[cakes]: https://noxim.itch.io/spacecakes + +### [sokoban-sokoban] + +![screenshot](sokoban-sokoban.png) + +[sokoban-sokoban] ([source code][sokoban-sokoban-src]) by [@trouv] +is a sokoban-like puzzle game made in 48 hours for the GMTK 2021 game jam. + +> Somebody messed up the graveyard! You can fix it, but your movements +> are joined together. +> More specifically, the location of the gravestones in the level's movement +> table determines which movements are joined to which. +> When two movements are "joined", the associated input performs BOTH movements! + +[sokoban-sokoban]: https://trouv.itch.io/sokoban-sokoban +[sokoban-sokoban-src]: https://github.com/Trouv/sokoban-sokoban +[@trouv]: https://trouv.itch.io + +## Engine Updates + +### thRustEngine - with simple shooter game demo + +![thRustEngine screenshot](thrustengine_screenshot.jpg) + +This is a simple descent/quake style shooter written to demo +[thRustEngine]. The current repo is a placeholder. + +It loads wavefront.OBJ, and Quake1/Quake3 BSP worlds, converted to +an internal format for collision and rendering. It uses clustered +forward+ dynamic lighting and normal maps, and loads textures +asynchronously. + +The future direction depends on community feedback (a public shared +crate is planned). The current intention is to find a few close +collaborators. + +Demo videos: [free quake map demo], [custom map demo]. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/obj38y/rust_shooter_another_little_update)_ + +[thrustEngine]: https://github.com/experiment9123/thrustengine +[free quake map demo]: https://vimeo.com/569777592 +[custom map demo]: https://vimeo.com/572436649 + +### [rg3d] + +![rg3d](rg3d_logo.png) + +[rg3d] ([Discord][rg3d_discord], [Twitter][rg3d_twitter]) is a game engine that +aims to be easy to use and provide a large set of out-of-box features. Some of +the recent engine updates: + +- Initial support for custom rendering techniques. +- Word-based wrapping for FormattedText. +- Ability to specify material search options when loading a model. +- Render sky box in a single draw call. +- Fix for resource management issues. +- Fix for FBX loader in case of invalid mappings. +- Fix for triangulator. +- Physics for terrains. +- Heightfield visualization. +- Ability to pause sound contexts. +- `editable` flag for text boxes. +- Various bug fixes and small improvements. + +rusty-editor updates: + +- Ability to add/remove/edit sound sources +- Model import dialog window. +- Embed and fonts icons in the binary, which makes package distribution + easier. +- `.deb` and `.rpm` packages for Linux +- Camera fix + ability to preview scene cameras +- Icons for "shapeless" (lights, sound sources) objects in the scene. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov + +## Learning Material Updates + +### [A Trig-less Line of Sight Algorithm for 2D Games][lineofsight] + +![2D Sight Example](lineofsight.png) + +[@basstabs] published a tutorial that explains how to write a +line of sight algorithm for 2D games in Rust without using trigonometry or +square roots. It includes vector diagrams and typeset math to explain the ideas +behind each stage of the algorithm, source code for each step, tests to verify +the accuracy of the methods, and suggestions for further improvements. +Additionally, the +[repository](https://github.com/basstabs/2d-line-of-sight) contains benchmarks +and a sample application written in [ggez](https://crates.io/crates/ggez). + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/nx79kq/)_ + +[lineofsight]: https://basstabs.github.io/2d-line-of-sight/ +[@basstabs]: https://github.com/basstabs + +### [When to Rewrite][when-to-rewrite] + +[![when-to-rewrite](when-to-rewrite.jpg)][when-to-rewrite] + +[@masonremaley][mason-remaley] wrote [a blog post][when-to-rewrite] offering an +opinion on rewrites vs incremental migrations informed by his work on the +[Way of Rhea][wor] engine. + +> A working system is a valuable asset. It works. It lets you test new ideas +> cheaply. Don't take that for granted. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/o8dy0r/when_to_rewrite)_ + +[when-to-rewrite]: https://www.anthropicstudios.com/2021/06/25/when-to-rewrite/ +[mason-remaley]: https://twitter.com/masonremaley +[wor]: https://store.steampowered.com/app/1110620 + +### [Writing the Bevy Retro Renderer][bevy_retro_renderer] + +[@katharostech] published an article about their experiences writing the render +for [Bevy Retro][bevy_retro]. They walk through the different strategies and APIs +they tried and explain why they wrote their own renderer in the first place. + +[bevy_retro_renderer]: https://katharostech.com/post/writing-bevy-retros-renderer +[bevy_retro]: https://github.com/katharostech/bevy_retrograde +[@katharostech]: https://github.com/katharostech + +### [Game Development with Rust][medium_rust_gamedev] + +[@thebracket] published an article on the current state of Rust Game +Development. It covers a few games and engines made in Rust, links to some +resources for integrating Rust into major game engines (Unity and Unreal). +The article then links to some tutorials and resources for learning Rust +game development at different skill and experience levels. + +[medium_rust_gamedev]: https://medium.com/pragmatic-programmers/game-development-with-rust-31147f7b6096 +[@thebracket]: https://github.com/thebracket/ + +### [How to make plugins system with Rust and WebAssembly][devblog.arcana.rs] + +[@zakarumych] published an article about their experience creating +a fully safe plugins system using plugins compiled to WebAssembly. +It provides reasoning for choosing WASM in specific scenario +and contains strategies for interacting with WASM modules embedded +into an application, +including dealing with dynamic memory of the module, +string and array operations, function pointers, etc. + +[devblog.arcana.rs]: https://devblog.arcana.rs/how-to-make-plugins-system-with-rust-and-webassembly +[@zakarumych]: https://github.com/zakarumych/ + +### [Getting Started with ECS using Planck ECS][planck-tutorial] + +![planck logo](planck_ecs.png) + +[planck_ecs] by [@jojolepro] is a minimalist and safe ECS library. + +This month [@jojolepro] released a [tutorial][planck-tutorial] +that describes how to use ECSes in general and [planck_ecs] specifically. + +[planck-tutorial]: https://jojolepro.com/blog/2021-06-01_getting_started_with_ecs +[planck_ecs]: https://github.com/jojolepro/planck_ecs +[@jojolepro]: https://patreon.com/jojolepro + +## Tooling Updates + +### [Sugarcubes] + +![Sugarcubes Example](sugarcubes.png) + +[Sugarcubes] by [@henryksloan] is a tool for designing and testing automata. + +Sugarcubes allows for easy creation of models used in the theory of computing. +It is designed to be a more intuitive and useful alternative to JFLAP, +the most popular tool for designing automata and formal languages. +It uses macroquad for the editor, and egui for the toolbars. Sugarcubes +currently features a fully functional finite automaton editor and simulator, +and many other models, editing features and simulations are planned. + +You can check out a [live WASM demo here][Sugarcubes], +or the [source code on GitHub][Sugarcubes source]. + +[Sugarcubes]: https://henryksloan.github.io/sugarcubes/ +[Sugarcubes source]: https://github.com/henryksloan/sugarcubes +[@henryksloan]: https://github.com/henryksloan + +### [Rusty Slider] + +{{ image_figure( + alt="Rusty Slider code block example" + src="https://github.com/rustyslider.png" + caption="Supports syntax highlighting of code blocks") }} + +[Rusty Slider] by [@ollej] is a markdown slideshow viewer +written with macroquad. + +The game engine Macroquad can be used for more than just games. It’s also a +great way to quickly build multi-platform tools with graphics. + +It’s possible to write presentations in plain text using Markdown. The +application runs natively on all major platforms, and can also be used within +a browser. + +- Supports headers, bold/italic, blockquotes, lists, and code blocks with + syntax highlighting. +- Automatically change slides. +- Themes separated from content. +- Toggle a CRT shader. + +The latest feature added was to execute bash code blocks. The output of the +execution will be shown below the code block. This is meant to be used for +demo purposes, to show actual results of commands. + +[Rusty Slider]: https://ollej.github.io/rusty-slider +[@ollej]: https://twitter.com/ollej + +### [Graphite][graphite-repo] + +{{ image_figure( + alt="Geometric cherry tree" + src="https://github.com/graphite-cherry-tree.png" + caption="Geometric cherry tree artwork by BillyDM, winner of last month's first +Graphite art contest") }} + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-development vector and +raster graphics editor built on a non-destructive node-based workflow. + +Since last newsletter, the editor has received the ability to select layers via +the layer panel and by clicking or dragging a box selection in the +viewport. Selected layers can be deleted, duplicated, and copy/pasted. + +It is now possible to create, edit, and close multiple documents in their own +editor tabs. Additional frontend cleanup and polish has also improved many +parts of the editor experience. + +Lastly, support for transforms was added to the layers and document, paving +the way for moving/scaling/rotating layers and the whole document within the +viewport. + +[Try it right now in your browser.][graphite-live-demo] Graphite is making +rapid progress towards becoming a non-destructive, procedural graphics editor +suitable of replacing traditional 2D DCC applications. Please +[join the Discord][graphite-discord] - and consider asking for a tour of the +code and how you can help! + +[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 + +### [texture_generator] v0.5 + +{{ image_figure( + alt="A black&white top-down image of some building" + src="https://github.com/texture_generator.png" + caption="An depth image example") }} + +[texture_generator] by [Orchaldir] is a library to generate textures, +and a library to use those textures to render tilemaps. + +This month the v0.5 version was released. Some of the updates: + +- The editor was switched to [Iced]. +- Layered textures. +- Door handles. +- More options for depth calculation: depth gradient along X or Y + and barrel shape. +- Furniture can now have a fixed size or fill the selected area + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/nz5ban/i_switched_my_tilemap_editor_to_iced)_ + +[texture_generator]: https://github.com/Orchaldir/texture_generator +[Orchaldir]: https://github.com/Orchaldir +[texgen-v0-5]: https://github.com/Orchaldir/texture_generator/releases/tag/v0.5.0 +[Iced]: https://github.com/hecrj/iced + +## Library Updates + +### [backroll-rs] and [GGRS] + +[backroll-rs] ([Discord](https://discord.gg/VuZhs9V), +[crates.io](https://crates.io/crates/backroll)) by [@james7132] and +[GGRS]([crates.io](https://crates.io/crates/ggrs)) by [@g_schup] are pure +Rust implementations of the [GGPO] rollback networking library. + +{{ image_figure( + alt="Evo Moment 37" + src="https://github.com/rollback.jpg" + caption="[Evo Moment 37](https://www.youtube.com/watch?v=JzS96auqau0): +Only offline or with rollback!") }} + +Rollback networking is a peer-to-peer network technique designed to hide +network latency in fast-paced games with precise inputs. Traditional techniques +account for network transmission time by delaying the game execution, resulting +in a sluggish game-feel. Rollback uses input prediction and speculative +execution instead. Upon receiving inputs from remote clients, resimulation of +incorrect game states occurs. This allows for gameplay that "feels just +like offline". The open source standard for rollback netcode [GGPO] is used +in successful games like Skullgirls, Guilty Gear XX Accent Core +R or +Fightcade. For further explanation about rollback, +[click here](https://ki.infil.net/w02-netcode.html). + +Two projects in Rust were independently created to provide a working +implementation as well as helpful resources for developers. +backroll-rs features an added abstraction for the transportation layer and +also provides a bevy plugin, [bevy-backroll]. GGRS replaces the +C-style callback API of GGPO with a simpler, more understandable control flow. +The authors of both libraries recommend backroll-rs for development, +as it is currently more actively collaborated on. +GGRS is recommended as a learning resource and entry point, +with a plethora of internal documentation and explanation. + +The main requirement to make use of both presented libraries is determinism +in your game execution. Resimulation requires that the result of progressing +the game state depending on the given inputs yield the exact same results +every time. Additionally, you need to be able to load, save and progress +your gamestate without rendering the outcome. + +If you are interested in integrating rollback networking into your game or +just want to chat with other rollback developers (not limited to Rust), +check out the [GGPO Developers Discord]! + +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs +[bevy-backroll]: https://github.com/HouraiTeahouse/backroll-rs/tree/main/bevy_backroll +[GGPO Developers Discord]: https://discord.gg/8FKKhCRCCE +[GGRS]: https://github.com/gschup/ggrs +[GGPO]: https://www.ggpo.net/ +[@g_schup]: https://twitter.com/g_schup +[@james7132]: https://twitter.com/james7132 + +### [CrystalOrb] + +{{ image_figure( + alt="CrystalOrb demo animation" + src="https://github.com/crystalorb.gif" + caption="Interactive [demo](https://ernestwong.nz/crystalorb/demo) that uses the [Rapier](https://rapier.rs) physics engine.", + link="https://ernestwong.nz/crystalorb/demo") }} + +[CrystalOrb] by [@ErnWong] is a new networking library that aims to help +fast-paced client-server games synchronize their game state across multiple +clients. Just like [backroll-rs] and [GGRS], each CrystalOrb client predicts +the next game state without waiting for other remote players' inputs to arrive. +Unlike backroll-rs's and GGRS's peer-to-peer approach which only send input +data between its peers, CrystalOrb relies on having a server to send +authoritative snapshots of the entire game state to each client. In response, +each client unconditionally rolls-back to that snapshot. Although this may lead +to higher network and memory usage, it means that CrystalOrb clients can join +and leave at any time, and games that cannot guarantee full-determinism can +still work with CrystalOrb. + +This library was written as a learning exercise for the author, and as such, +the author warns that this library may not be suitable for serious games. + +There is an [interactive demo][crystalorb-demo] of CrystalOrb that features the +[Rapier] physics engine. + +[CrystalOrb]: https://github.com/ErnWong/crystalorb +[@ErnWong]: https://github.com/ErnWong +[crystalorb-demo]: https://ernestwong.nz/crystalorb/demo +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs +[GGRS]: https://github.com/gschup/ggrs +[Rapier]: https://rapier.rs + +### [glutin] (and [winit]) + +{{ image_figure( + alt="Animated image showing a window that is opened with a spinning cursor on top" + src="https://github.com/winit-bug-1.gif" + caption="This cursor may be waiting [in vain], but your patience shall be rewarded.") }} + +[glutin] is a low-level library for OpenGL context creation, written in pure Rust. +[glutin] uses and re-exports [winit], which handles window creation and management, +as well as various input devices. + +This month, glutin 0.27.0 was released, which makes glutin use the latest version +of winit (0.25.0), which was released around a month prior to glutin 0.27.0. Usually, +we try to keep glutin synced with winit, but we couldn't quite manage to do it this +time since the person who'd usually take responsibility for releasing a new version +of glutin was unavailable, and no-one had the role of "back-up releaser". +[@maroider] has offered to fill this role for now. + +The upgrade to winit 0.25.0 brings with it a slew of bugfixes, a couple of new +features, and a single breaking change to +[WindowBuilderExtMacOS::with_activation_policy], which has been replaced by +[EventLoopExtMacOS::set_activation_policy]. For a full list of changes, refer +to [winit's changelog]. + +The departure and disappearance of a couple of maintainers has left winit in need +of someone knowledgeable with X11 in order to review pull requests and address +various issues. Other backends also need some more love, but X11 is the most +pressing. + +The project could also use more helping hands in general, in anything from +mapping out platform differences and triaging bugs to reviewing PRs +and tackling outstanding issues. +The current maintainers would also be happy to have you even if +all you do is answer platform-specific questions for them. +If you're interested, come say hi in their [matrix] channel or on +any of the [other services] bridged with matrix. + +[in vain]: https://github.com/rust-windowing/winit/issues/1682 +[glutin]: https://github.com/rust-windowing/glutin +[winit]: https://github.com/rust-windowing/winit +[@maroider]: https://github.com/maroider +[WindowBuilderExtMacOS::with_activation_policy]: https://docs.rs/winit/0.24.0/x86_64-apple-darwin/winit/platform/macos/trait.WindowBuilderExtMacOS.html#tymethod.with_activation_policy +[EventLoopExtMacOS::set_activation_policy]: https://docs.rs/winit/0.25.0/x86_64-apple-darwin/winit/platform/macos/trait.EventLoopExtMacOS.html#tymethod.set_activation_policy +[winit's changelog]: https://github.com/rust-windowing/winit/blob/master/CHANGELOG.md#0250-2021-05-15 +[matrix]: https://matrix.to/#/#Glutin:matrix.org +[other services]: https://github.com/rust-windowing/winit#contact-us + +### [egui] + +![egui](egui.gif) + +[egui] by [@emilk] is an easy-to-use immediate mode GUI library in pure Rust. + +This month [version 0.13] of egui was released, with a new visual style, +resizable panels, more powerful plots, and more. + +You can try out egui in the [online demo]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/o76y9x/announcing_egui_013)_ + +[egui]: https://github.com/emilk/egui +[online demo]: https://emilk.github.io/egui +[version 0.13]: https://github.com/emilk/egui/blob/master/CHANGELOG.md +[@emilk]: https://twitter.com/ernerfeldt + +### [erupt] + +![erupt logo](erupt.svg) + +[erupt] by [@Friz64] provides bindings to the Vulkan API. + +Since being last mentioned in the newsletter shortly after its release, erupt +has undergone significant development. The generator, erupt's heart, has been +rewritten from scratch with the aim to improve maintainability. On top of that, +many bugs were fixed, the function loader was rewritten and usability was +improved while always keeping up to date with the latest Vulkan Headers as best +as possible. + +The ecosystem has gained traction, with many people using the crate for their +projects. Pure Rust Vulkan allocators with support for erupt have been released. + +[erupt]: https://gitlab.com/Friz64/erupt +[@Friz64]: https://blog.friz64.de/about + +### [smooth-bevy-cameras] + +[smooth-bevy-cameras] by [@bonsairobo] is a small plugin for Bevy Engine that +makes it simple to have [exponentially smoothed] camera transforms in your game. +Just add a new bundle to your camera entity, +and rather than updating a `Transform` directly, you can just update the `eye` +and `target` values of a `LookTransform`, which will be automatically +synchronized to the `Transform`. + +Several example controllers are provided as well: + +- First Person +- Orbit +- Unreal Engine Viewport + +[smooth-bevy-cameras]: https://github.com/bonsairobo/smooth-bevy-cameras +[@bonsairobo]: https://github.com/bonsairobo +[exponentially smoothed]: https://en.wikipedia.org/wiki/Exponential_smoothing + +### [wgpu] family re-union + +![wgpu family reunion](wgpu-family-reunion.jpg) + +[wgpu] is a [WebGPU] implementation in Rust. It is safe, efficient, +and portable: it can target both native and the Web. + +[Family reunion] is by far the biggest change in wgpu project since +the inception. First, the Rust API of [wgpu-rs] was moved to the main +[wgpu] repository. Second, the whole base was relicensed under MIT/Apache2. + +[gfx-hal] - the Vulkan Portability-like graphics API abstraction - +was detached from the project. Instead, wgpu got its own in-house unsafe +abstraction called "wgpu-hal" developed within the [wgpu] repository. + +The team released [wgpu-0.9] right before this transition, to give the new +graphics infrastructure more time to take shape. At the time of writing, +supported backends on the new HAL include Vulkan, Metal, and OpenGL ES3. + +Finally, the testing infrastructure received a major upgrade. It started +rendering the examples on the available adapters and comparing the results +with reference images. +This includes automatic testing using software adapters on CI. + +[wgpu]: https://github.com/gfx-rs/wgpu +[wgpu-rs]: https://github.com/gfx-rs/wgpu-rs +[gfx-hal]: https://github.com/gfx-rs/gfx +[wgpu-0.9]: https://crates.io/crates/wgpu/0.9.0 +[Family reunion]: https://github.com/gfx-rs/wgpu/milestone/9?closed=1 +[WebGPU]: https://www.w3.org/TR/webgpu/ + +### [rafx] + +{{ image_figure( + alt="Rafx Flythrough Demo" + src="https://github.com/rafx-flythrough-demo.jpg" + caption="A scene exported via blender with animated camera motion, [watch the demo on youtube](https://www.youtube.com/watch?v=HlJsgbGyl0I)!", + link="https://www.youtube.com/watch?v=HlJsgbGyl0I") }} + +[Rafx][rafx] is a multi-backend renderer that optionally integrates with the +[distill][rafx-distill] asset pipeline. + +This month, the asset pipeline received almost all the attention. A custom +blender add-on was prototyped, and several project layouts were tested to +decide on "best practices" to recommend for anyone that wants to use `rafx` +with 3d assets. + +Using a custom add-on will enable a workflow that supports large scenes with +many assets. The add-on currently exports textures, materials, meshes, models +(a collection of meshes of varying LOD levels), and prefabs (a list of lights, +meshes, etc. to place in the world). + +Some commercial art packs with varying art styles and complexity have been +ported to this pipeline, and one of them was loaded into the demo. A +fly-through camera was animated and exported out as json to demonstrate the +scene. + +After prototyping is complete, details and lessons learned will be +shared in hopes that it will be helpful to other projects in the rust +community, even if they do not use rafx directly. + +[rafx]: https://github.com/aclysma/rafx +[rafx-youtube-video]: https://www.youtube.com/watch?v=HlJsgbGyl0I +[rafx-distill]: https://github.com/amethyst/distill + +### [egui-tetra] + +[egui-tetra] ([GitHub][egui-github]) by [@tesselode] is a library +that integrates [egui], an immediate mode GUI library, +with [Tetra], a 2D game framework. + +egui-tetra provides helpers for integrating egui with Tetra's event loop and +rendering the GUI. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/o8jbmg/eguitetra_v010_egui_integration)_ + +[egui-tetra]: https://crates.io/crates/egui-tetra +[egui-github]: https://github.com/tesselode/egui-tetra +[@tesselode]: https://twitter.com/tesselode +[egui]: https://crates.io/crates/egui +[Tetra]: https://crates.io/crates/tetra + +### [bevy_midi] + +![bevy_midi logo](bevy_midi_logo.svg) + +[bevy_midi] by [@BlackPhlox] is a new bevy plugin that uses +[midir] to interact with the bevy game engine. + +It started out with [bevy_osc] as a +proof-of-concept interfacing with [nannou_osc] +and using other osc software to communicate with bevy. +Soon, realizing that nannou_osc is not that different +from how you interface with midi, bevy_midi was born. + +Here is one of the examples which you can use a midi controller +to play piano with [demo_audio]. + +The plugin is still in its infancy. +So it still has some performance issues, so +any feedback and contributions are highly appreciated. + +[bevy_midi]: https://github.com/BlackPhlox/bevy_midi +[bevy_osc]: https://github.com/BlackPhlox/bevy_osc +[nannou_osc]: https://github.com/nannou-org/nannou_osc +[midir]: https://github.com/Boddlnagg/midir +[demo_audio]: https://discord.com/channels/691052431525675048/692648638823923732/857177113923682304 +[@BlackPhlox]: https://github.com/BlackPhlox + +### [bevy_config_cam] + +![bevy_config_cam logo](bevy_config_cam_logo.svg) + +[bevy_config_cam] by [@BlackPhlox] +is an all-in-one purpose camera/player controller for bevy. + +With focus on plug-and-play, flexibility and ease of use, this bevy plugin is +for anyone who is prototyping in 3D and doesn't want the hassle of programming +a player-controller from scratch. Instantly switch between camera modes such as +Tracking to Topdown, Follow Behind, FPS and Free and more. + +The plugin is very new. +So any feedback and contributions are highly appreciated. + +[bevy_config_cam]: https://github.com/BlackPhlox/bevy_config_cam +[@BlackPhlox]: https://github.com/BlackPhlox + +### [assets_manager] + +[assets_manager] provides easy file loading and caching, with a focus on +hot-reloading. + +In June was released version 0.5.0, which came with many new features. +`assets_manager` has now built-in support for loading sounds and images, and +Zip archive were added as a new source to load assets from. Additionally, the +API around directories was reworked to be more powerful, and performances were +improved a bit. + +[assets_manager]: https://github.com/a1phyr/assets_manager + +## Requests for Contribution + + + +- [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-rs'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]. + +[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/good%20first%20issue + +------ + +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/ogc8qy/this_month_in_rust_gamedev_23_june_2021), +[Twitter](https://twitter.com/rust_gamedev/status/1413193117176565765), +[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/023/lineofsight.png b/content/news/023/lineofsight.png new file mode 100644 index 000000000..e10ccf7e2 Binary files /dev/null and b/content/news/023/lineofsight.png differ diff --git a/content/news/023/notsnake.png b/content/news/023/notsnake.png new file mode 100644 index 000000000..6bddc5a28 Binary files /dev/null and b/content/news/023/notsnake.png differ diff --git a/content/news/023/open_combat.jpg b/content/news/023/open_combat.jpg new file mode 100644 index 000000000..aeb51edf7 Binary files /dev/null and b/content/news/023/open_combat.jpg differ diff --git a/content/news/023/planck_ecs.png b/content/news/023/planck_ecs.png new file mode 100644 index 000000000..432792eaa Binary files /dev/null and b/content/news/023/planck_ecs.png differ diff --git a/content/news/023/projectris.png b/content/news/023/projectris.png new file mode 100644 index 000000000..311ce4bc2 Binary files /dev/null and b/content/news/023/projectris.png differ diff --git a/content/news/023/rafx-flythrough-demo.jpg b/content/news/023/rafx-flythrough-demo.jpg new file mode 100644 index 000000000..8d69a2c11 Binary files /dev/null and b/content/news/023/rafx-flythrough-demo.jpg differ diff --git a/content/news/023/rg3d_logo.png b/content/news/023/rg3d_logo.png new file mode 100644 index 000000000..53d8a734d Binary files /dev/null and b/content/news/023/rg3d_logo.png differ diff --git a/content/news/023/rollback.jpg b/content/news/023/rollback.jpg new file mode 100644 index 000000000..7bd7c4978 Binary files /dev/null and b/content/news/023/rollback.jpg differ diff --git a/content/news/023/rustyslider.png b/content/news/023/rustyslider.png new file mode 100644 index 000000000..3c33628ba Binary files /dev/null and b/content/news/023/rustyslider.png differ diff --git a/content/news/023/sokoban-sokoban.png b/content/news/023/sokoban-sokoban.png new file mode 100644 index 000000000..87a9be504 Binary files /dev/null and b/content/news/023/sokoban-sokoban.png differ diff --git a/content/news/023/sugarcubes.png b/content/news/023/sugarcubes.png new file mode 100644 index 000000000..8c13823a9 Binary files /dev/null and b/content/news/023/sugarcubes.png differ diff --git a/content/news/023/taileater.gif b/content/news/023/taileater.gif new file mode 100644 index 000000000..e4edb793a Binary files /dev/null and b/content/news/023/taileater.gif differ diff --git a/content/news/023/texture_generator.png b/content/news/023/texture_generator.png new file mode 100644 index 000000000..f75de24b1 Binary files /dev/null and b/content/news/023/texture_generator.png differ diff --git a/content/news/023/the_process.gif b/content/news/023/the_process.gif new file mode 100644 index 000000000..220a763e9 Binary files /dev/null and b/content/news/023/the_process.gif differ diff --git a/content/news/023/themengi.gif b/content/news/023/themengi.gif new file mode 100644 index 000000000..40190d548 Binary files /dev/null and b/content/news/023/themengi.gif differ diff --git a/content/news/023/thrustengine_screenshot.jpg b/content/news/023/thrustengine_screenshot.jpg new file mode 100644 index 000000000..29c2a7392 Binary files /dev/null and b/content/news/023/thrustengine_screenshot.jpg differ diff --git a/content/news/023/veloren.png b/content/news/023/veloren.png new file mode 100644 index 000000000..34d399629 Binary files /dev/null and b/content/news/023/veloren.png differ diff --git a/content/news/023/weegames.jpg b/content/news/023/weegames.jpg new file mode 100644 index 000000000..2c6b327ab Binary files /dev/null and b/content/news/023/weegames.jpg differ diff --git a/content/news/023/wgpu-family-reunion.jpg b/content/news/023/wgpu-family-reunion.jpg new file mode 100644 index 000000000..22506ddfd Binary files /dev/null and b/content/news/023/wgpu-family-reunion.jpg differ diff --git a/content/news/023/when-to-rewrite.jpg b/content/news/023/when-to-rewrite.jpg new file mode 100644 index 000000000..ff6048ed0 Binary files /dev/null and b/content/news/023/when-to-rewrite.jpg differ diff --git a/content/news/023/winit-bug-1.gif b/content/news/023/winit-bug-1.gif new file mode 100644 index 000000000..ce7bea118 Binary files /dev/null and b/content/news/023/winit-bug-1.gif differ diff --git a/content/news/023/wor-dialogue.jpg b/content/news/023/wor-dialogue.jpg new file mode 100644 index 000000000..d0dd3f194 Binary files /dev/null and b/content/news/023/wor-dialogue.jpg differ diff --git a/content/news/024/Throne.png b/content/news/024/Throne.png new file mode 100644 index 000000000..8d5ef802b Binary files /dev/null and b/content/news/024/Throne.png differ diff --git a/content/news/024/bevy-retrograde.gif b/content/news/024/bevy-retrograde.gif new file mode 100644 index 000000000..62eabd285 Binary files /dev/null and b/content/news/024/bevy-retrograde.gif differ diff --git a/content/news/024/bounty-bros.jpg b/content/news/024/bounty-bros.jpg new file mode 100644 index 000000000..6cb1c01d7 Binary files /dev/null and b/content/news/024/bounty-bros.jpg differ diff --git a/content/news/024/em_logo.svg b/content/news/024/em_logo.svg new file mode 100644 index 000000000..53c075226 --- /dev/null +++ b/content/news/024/em_logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/news/024/fishfight_weapons.png b/content/news/024/fishfight_weapons.png new file mode 100644 index 000000000..18b86fd18 Binary files /dev/null and b/content/news/024/fishfight_weapons.png differ diff --git a/content/news/024/flesh.jpg b/content/news/024/flesh.jpg new file mode 100644 index 000000000..394d03d2e Binary files /dev/null and b/content/news/024/flesh.jpg differ diff --git a/content/news/024/franzplot_scene.gif b/content/news/024/franzplot_scene.gif new file mode 100644 index 000000000..d4210eebb Binary files /dev/null and b/content/news/024/franzplot_scene.gif differ diff --git a/content/news/024/gamedev-meetup.png b/content/news/024/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/024/gamedev-meetup.png differ diff --git a/content/news/024/ggrs_logo.png b/content/news/024/ggrs_logo.png new file mode 100644 index 000000000..d1105994b Binary files /dev/null and b/content/news/024/ggrs_logo.png differ diff --git a/content/news/024/godot_egui.gif b/content/news/024/godot_egui.gif new file mode 100644 index 000000000..a0b88284b Binary files /dev/null and b/content/news/024/godot_egui.gif differ diff --git a/content/news/024/graphite_scream.png b/content/news/024/graphite_scream.png new file mode 100644 index 000000000..04369cdf9 Binary files /dev/null and b/content/news/024/graphite_scream.png differ diff --git a/content/news/024/hands-on-rust-live.jpg b/content/news/024/hands-on-rust-live.jpg new file mode 100644 index 000000000..59c626192 Binary files /dev/null and b/content/news/024/hands-on-rust-live.jpg differ diff --git a/content/news/024/hho_header.png b/content/news/024/hho_header.png new file mode 100644 index 000000000..18f26ceeb Binary files /dev/null and b/content/news/024/hho_header.png differ diff --git a/content/news/024/index.md b/content/news/024/index.md new file mode 100644 index 000000000..fb22ab7d5 --- /dev/null +++ b/content/news/024/index.md @@ -0,0 +1,794 @@ ++++ +title = "This Month in Rust GameDev #24 - July 2021" +date = 2021-08-08 +transparent = true ++++ + + + + + +Welcome to the 24th 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 + +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The seventh Rust Gamedev Meetup happened in July. 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 [August 14th][rust-meetup-august-time], fill +out [this form][gamedev-meetup-form]. + +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[gamedev-meetup-video]: https://www.youtube.com/watch?v=0cefGQyZXH4 +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[rust-meetup-august-time]: https://everytimezone.com/s/391b6160 + +## Game Updates + +### [Veloren][veloren] + +{{ image_figure( + alt="Llama ride" + src="https://github.com/veloren.png" + caption="Out for a llama ride") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In July, work focused on larger tasks that tend to come up between versions. +Optimizations were made for networking with compression, and message queue +improvements ([devblog #127][veloren-127]). Modular weapons are in the works, which +will allow for much more dynamic ways to choose what you fight with. The project +also hit 300k lines of code. + +Many contributors are working on the art and asset front, with lots of new SFX, +models, and UI elements making their way into the game. Caves are also getting a +lot of love, and a bloom feature is being integrated. Some members broke down +what they plan to have done by the 0.11 release at the beginning of September, +and you can read about that in [devblog #130][veloren-130]. + +July's full weekly devlogs: "This Week In Veloren...": +[#127][veloren-127], +[#128][veloren-128], +[#129][veloren-129], +[#130][veloren-130]. + +[veloren]: https://veloren.net +[veloren-127]: https://veloren.net/devblog-127 +[veloren-128]: https://veloren.net/devblog-128 +[veloren-129]: https://veloren.net/devblog-129 +[veloren-130]: https://veloren.net/devblog-130 + +### [Zemeroth] + +![Zemeroth on Google Play](zemeroth.jpg) + +[Zemeroth] is a turn-based hexagonal tactics game, developed by [@ozkriff]. + +This month, an early access version of the game was released as a free +download on [Google Play][zemeroth-google] - if you have an Android +device, give it a try! + +[zemeroth]: https://github.com/ozkriff/zemeroth/ +[@ozkriff]: https://twitter.com/ozkriff +[zemeroth-google]: https://play.google.com/store/apps/details?id=rust.zemeroth + +### [Harvest Hero Origins](https://store.steampowered.com/app/1651500/Harvest_Hero_Origins/) + +![hho_header](./hho_header.png) + +Harvest Hero Origins is an arcade wave defense game by [Gemdrop Games][gemdrop], +built in Rust on top of [Emerald]. A [Steam][hho-steam] page has recently been +made and the game is set to release sometime at the end of this summer. + +Battle the oncoming waves of enemies with a friend in local co-op, unlock +new playable characters and skins, and make your way to the top of the +leaderboard! + +Additionally, HHO will be at [PAXWest](https://west.paxsite.com/) +this year, so come check out their booth +if you'll be there! + +[gemdrop]: https://twitter.com/GemdropGames +[hho-steam]: https://store.steampowered.com/app/1651500/Harvest_Hero_Origins/ +[Emerald]: https://github.com/Bombfuse/emerald + +### [Shroom Kingdom][shroom-kingdom] + +{{ image_figure( + alt="Shroom Kingdom Asset Extractor" + src="https://github.com/shroom-kingdom.gif" + caption="Extracting the game assets") }} + +Shroom Kingdom ([GitHub][shrm-github], [Discord][shrm-discord], [Twitter][shrm-twitter]) +is an upcoming play-to-earn video game built with web technologies +running on the [NEAR Blockchain][near-blockchain]. +In a recent [blog post][shrm-blog] you can read the motivation behind this. + +You can play with your favorite plumber brothers. +Build your own levels or play levels from others. +Every level built on Shroom Kingdom is stored +on the blockchain as an NFT. + +By playing the game you can either actively earn SHRM tokens via participating +in game activities or earn them passively, if other people play or like your levels. +The SHRM token will be used to acquire in-game purchases such as unlocking new +building blocks or increasing level upload limits. + +You can either extract existing assets from Super Mario Maker 2 or use +compatible game mod files from e.g. [Gamebanana][gamebanana]. +The asset extractor is already working, but support for more file types +needs to be added. + +The game will likely be built with [Bevy][bevy] +and [Rapier][rapier] compiled to WebAssembly. +Next steps include developing a Proof of Concept. + +[shroom-kingdom]: https://shroomkingdom.net/ +[shrm-github]: https://github.com/Shroom-Kingdom +[shrm-discord]: https://discord.gg/SPZsgSe +[shrm-twitter]: https://twitter.com/shrm_kingdom +[shrm-blog]: https://net64-mod.github.io/blog/shroom-kingdom/ +[near-blockchain]: https://near.org +[gamebanana]: https://gamebanana.com/ +[bevy]: https://bevyengine.org/ +[rapier]: https://rapier.rs/ + +### [Wicked Potions][wicked_potions] + +{{ image_figure( + alt="Screenshot of the game" + src="https://github.com/wicked_potions.png" + caption="Match ingredients to brew wicked potions") }} + +[Wicked Potions][wicked_potions] is a match-three game developed by +[@nikl_me] and [jennifervphan] for the [Bored Pixels Jam 8][bored-pixels-jam-8]. +They wrote the game using the [Bevy game engine][bevy] and created all of the +textures and audio. + +The main focus of the game during the one-week jam period were the assets. +After the voting period, the developers plan to extend the game mechanics +and story a bit more. + +[The code for the game is available on GitHub][wicked_potions_repo]. + +[jennifervphan]: https://itch.io/profile/jennifervphan +[bored-pixels-jam-8]: https://itch.io/jam/bored-pixels-jam-8 +[wicked_potions]: https://niklme.itch.io/wicked-potions +[bevy]: https://github.com/bevyengine/bevy +[@nikl_me]: https://twitter.com/nikl_me +[wicked_potions_repo]: https://github.com/NiklasEi/wicked_potions + +### [The Process] + +{{ image_figure( + alt="Showcase image for the new inventory UI in The Process" + src="https://github.com/the_process.gif" + caption="The godot_egui backend powering a new inventory UI for The Process") }} + +[The Process] by @setzer22 is an upcoming game about factory building, +process management, and carrot production, +built with Rust using the Godot game engine! + +Continuing with last month's migration of old GDScript code to ECS in Rust, this +month's main focus has been on porting the GUI code. This has resulted in +the birth of a Godot integration for [egui](https://docs.rs/egui/) that now +powers the game's interface. + +This month has seen the following changes and improvements: + +- Finished migration of character controller code to ECS style. Now with [300% + more jumps!](https://twitter.com/PlayTheProcess/status/1413081233396011012) +- Implemented [better ambient + lighting](https://twitter.com/PlayTheProcess/status/1413943539160031246) and + enable using different skies for radiance and display. This required a [forked + godot version](https://github.com/setzer22/godot/tree/feature/cosmetic_sky). +- Implement a [new inventory and + toolbar](https://twitter.com/PlayTheProcess/status/1417774452012724226) + interface using egui. +- Integrated the [puffin + profiler](https://twitter.com/PlayTheProcess/status/1420277428199559174) into + the game using the godot_egui integration. + +[The Process]: https://twitter.com/PlayTheProcess + +### [Robo Instructus: 2 Years Old][robo-year] + +![game logo + OS logos](robo-os.jpg) + +Two years ago [Alex Butler] released the "[Robo Instructus][robo-site]" puzzle game +on [Steam][robo-steam] & [itch.io][robo-itch]. + +This month Alex released a devlog post ["Robo Instructus: 2 Years Old"][robo-year] +about how well the game did in the last year: +Sales by platform/country/OS, player feedback & reviews, etc. + +The game also continues to receive updates, the latest [1.33 version][robo-1-33] +includes full 简体中文 & Español language support. + +[Alex Butler]: https://twitter.com/bigabgames +[robo-site]: https://www.roboinstruct.us +[robo-steam]: https://store.steampowered.com/app/1032170/Robo_Instructus +[robo-itch]: https://bigabgames.itch.io/robo-instructus +[robo-year]: https://blog.roboinstruct.us/2021/07/16/2-years-later.html +[robo-1-33]: https://store.steampowered.com/news/app/1032170/view/2998819983294763294 + +### [Fish Fight][fish-fight] + +![New weapons](fishfight_weapons.png) + +Fish Fight ([Twitter][fish-fight]) is a continuation of the demo project +known as Fish Game - made by the same team of people ([@fedor_games] and +[@erlend_sh]), now operating as independents. Their goal is to make a +published game, written entirely in Rust and developed as openly as +possible. They are hoping to go public with the open source repo +within a month or so. + +Changes and improvements from the last month: + +- [Pre-alpha trailer released!][twitter-trailer] +- Loads of new weapons added: + - Mind-controlled Jellyfish + - Kick-bombs (bomberman-style) + - Cursed Skull + - Handcannon + - Gatling gun + - Sproingers + - Pirate Boots + - ..and more! +- Whole new Environmentals system added for map-wide events (mass-shark attack + incoming!) +- Physics doc & improvements + +[fish-fight]: https://twitter.com/fishfightgame +[@fedor_games]: https://twitter.com/fedor_games +[@erlend_sh]: https://twitter.com/erlend_sh +[twitter-trailer]: https://twitter.com/fishfightgame/status/1424084016467226624 + +### [Theta Wave] + +{{ image_figure( + alt="Amethyst to Bevy" + src="https://github.com/theta-wave.gif" + caption="Left: Theta Wave with Amethyst, Right: Theta Wave with Bevy (so far)", + link="https://github.com/thetawavegame/thetawave") }} + +[Theta Wave] is an open-source space shooter game by developers [@micah_tigley] and +[@carlosupina]. It is one of the showcase games for the [Amethyst Engine]. In +the past month, they finished the ["Organization"] update and +made the decision to start working on porting the game to the Bevy engine. You can +find the Bevy version of Theta Wave [here][Bevy Theta Wave]. + +Progress on this port is going strong - you can find the GitHub issue for +the port [here][Bevy Port Issue]. + +[Bevy Port Issue]: https://github.com/thetawavegame/thetawave/issues/2 +[Bevy Theta Wave]: https://github.com/thetawavegame/thetawave +[Theta Wave]: https://github.com/amethyst/theta-wave +[@micah_tigley]: https://twitter.com/micah_tigley +[@carlosupina]: https://twitter.com/carlosupina +[Amethyst Engine]: https://amethyst.rs/ +["Organization"]: https://github.com/amethyst/theta-wave/projects/5 + +### [Bounty Bros.][bounty_bros] + +{{ image_figure( + alt="bounty-bros-title-screen" + src="https://github.com/bounty-bros.jpg" + caption="Click the image to play the game in your browser!", + link="https://katharostech.github.io/skipngo_pre-releases/refs/tags/pre-release-2/?asset_url=https://katharostech.github.io/bounty-bros_pre-releases/2") }} + +[Bounty Bros.][bounty_bros] is a prototype, top-down adventure game, developed +by [Katharos Technology][katharostech] as a testing ground for a future +commercial game. + +The last two months of development added lots of new features: + +- Integrated a new physics system and character controller that allows for smoother + character movement. +- Added a new damage system and made cactuses hurt the player. +- Added a life bar and a game over screen. +- Added a pause menu and a fullscreen button. +- Started work on enemy pathfinding. + +All the new features can be tested in the latest [web demo][bounty_bros_webgame], +and the [blog post][bounty_bros] has the full details of what's new and what's +coming next! + +[bounty_bros]: https://katharostech.com/post/bounty-bros-update-4-physics-damage-pathfinding +[bounty_bros_webgame]: https://katharostech.github.io/skipngo_pre-releases/refs/tags/pre-release-2/?asset_url=https://katharostech.github.io/bounty-bros_pre-releases/2 +[katharostech]: https://katharostech.com + +### [Flesh] + +![Flesh screenshot](flesh.jpg) + +[Flesh] is a 2D horizontal SHMUP by [@Im_Oab], with a hand-drawn animation style +and an organic/fleshy theme. + +This month, a [Steam page][flesh] was published for the game - it can now be +wishlisted, ahead of a planned release later this year! + +[Flesh]: https://store.steampowered.com/app/1660850/Flesh/ +[@Im_Oab]: https://twitter.com/Im_Oab/ + +## Engine Updates + +### [ggez] + +![ggez logo](../005/ggez-logo-maroon-full.svg) + +`ggez` 0.6 has been released! `ggez` is a lightweight cross-platform +game framework for making 2D games with minimum friction, with an API +inspired by Love2D. + +This release includes many additions, improvements, and bug fixes, +including a `MeshBatch` type for drawing many instances of the same +geometry, improvements to canvas drawing, updated `winit` dependencies +that function more smoothly on Linux under Wayland, better error +handling, and more. The whole changelog is available +[here](https://github.com/ggez/ggez/blob/0.6.0/CHANGELOG.md). + +More importantly, `ggez` is now maintained by a group of volunteers, +with the original maintainer stepping down from active development after +over four years. The new maintainers are mostly responsible for the 0.6 +release, and will hopefully be bringing good ideas and tech to the +library for years to come. For details, see [this github +issue](https://github.com/ggez/ggez/issues/875). + +[ggez]: https://github.com/ggez + +### [Macroquad] + +{{ image_figure( + alt="Zemeroth running on Android" + src="https://github.com/macroquad.jpg" + caption="A Macroquad game ([Zemeroth](#zemeroth)) running on Android!") }} + +[Macroquad] is a cross-platform game framework, inspired heavily by Raylib. + +This month, a [new tutorial][macroquad-android] was published on the +Macroquad website, showing how a game written with the framework can be +ported to Android. It details all of the steps, from building to packaging +for a release on Google Play. + +In other news, Macroquad used to depend on rodio+cpal for audio on +native platforms and a custom WebAudio implementation for web, with a custom +abstraction on top of both. This month, Macroquad's audio system was +reimplemented on top of raw OS APIs - ALSA, OpenSLES, CoreAudio and WASAPI. +This functionality has now been extracted into a crate: [quad-snd]. + +[macroquad]: https://github.com/not-fl3/macroquad +[macroquad-android]: https://macroquad.rs/tutorials/android/ +[quad-snd]: https://github.com/not-fl3/quad-snd + +### [Emerald] + +![Emerald logo](./em_logo.svg) + +[Emerald] is a 2D portable game engine aiming to export to every +possible target: Windows, Linux, macOS, Android, iOS, Xbox, +Playstation, Nintendo Switch. + +In addition to being portable, [Emerald] aims to be easy to use +while providing quality features like built-in physics and +Aseprite integration. + +If any of this sounds good to you, and you'd like to be a part of it, +[Emerald] welcomes all contributors to help make an extremely portable +game engine! Join them on their [Discord server][emerald-discord]. + +[Emerald]: https://github.com/Bombfuse/emerald +[emerald-discord]: https://discord.gg/NHsz38AhkD + +### [Starframe] + +![Demonstration of Starframe's new rope physics](starframe.gif) + +[Starframe] by [@molentum] is a work-in-progress game engine for physics-y +sidescrolling 2D games. + +This month's noteworthy development was [particle-based ropes][sf-ropes-tweet] +capable of full two-way coupling with rigid bodies, demonstrated above. +Capsule-shaped colliders were also added. + +[starframe]: https://github.com/m0lentum/starframe/ +[@molentum]: https://twitter.com/molentum_ +[sf-ropes-tweet]: https://twitter.com/molentum_/status/1421204030441889792 + +## Learning Material Updates + +### [Hands-on Rust][hands-on-rust] + +[![Hands-On Rust](hands-on-rust-live.jpg)][hands-on-rust] + +["Hands-on Rust: Effective Learning through 2D Game Development and Play"][hands-on-rust] +by Herbert Wolverson is now in print, as a full color paperback and ebook. +The book teaches Rust through game development examples, and is targeted at +readers who have some experience with writing code in other languages. It +teaches beginner to intermediate-level Rust. Hands-on Rust also teaches +high-level game development concepts, notably Entity-Component System (ECS) +theory. + +After walking you through installing Rust, a few simple examples teach the +language basics. Then you put these together to make "Flappy Dragon" - a +simple Flappy Bird clone. The book then changes gear and begins to build a +dungeon crawler (roguelike) with tile graphics. + +Outside of the USA, Hands-on Rust is available through [Amazon][hands-on-amazon]. + +Herbert also published the first ["Hands-on Rust bonus content"][hands-on-flappy]. +The bonus content extends Flappy Dragon to include smooth movement and +animated sprites. + +[hands-on-rust]: https://pragprog.com/titles/hwrust/hands-on-rust/ +[hands-on-amazon]: https://www.amazon.com/dp/1680508164 +[hands-on-flappy]: https://medium.com/pragmatic-programmers/flappy-dragon-rust-647e91a34dd4 + +### [Writing an RPG using rg3d][writing-an-rpg-using-rg3d] + +{{ image_figure( + alt="rg3d RPG screenshot" + src="https://github.com/rg3d.jpg" + caption="[Click here](https://www.youtube.com/watch?v=l2ZbDpoIdqk) to see a video of the character controller in action!", + link="https://www.youtube.com/watch?v=l2ZbDpoIdqk") }} + +Dimitry Stepanov (aka @mrDIMAS) published a +[tutorial series][writing-an-rpg-using-rg3d] about +making an RPG in Rust using the rg3d game engine. In part one of the series, +he builds a character controller from scratch. While that may not sound very exciting, +it's still a great way to learn the basics of rg3d and Rust gamedev in general! + +[writing-an-rpg-using-rg3d]: https://rg3d.rs/tutorials/2021/07/09/rpg-tutorial1.html +[rg3d-video]: https://www.youtube.com/watch?v=l2ZbDpoIdqk + +## Tooling Updates + +### [Graphite][graphite-repo] + +{{ image_figure( + alt="Graphite logo" + src="https://github.com/graphite_scream.png" + caption="A recreation of "The Scream" in Graphite by Norgate") }} + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-development vector and +raster graphics editor built on a non-destructive node-based workflow. + +In the past month, the editor has gained numerous vector editing features, +including moving layers with the keyboard or mouse, filling and copying colors, +flipping and aligning selected layers, and setting blend modes and layer +opacity. + +Scrollbars, rulers, and thumbnails are now functional. Full screen support has +been added, along with a hotkey to center the artwork. An options bar with +tool-specific settings and actions has been implemented, currently allowing +the number of sides of a polygon to be selected. The order of layers can now be +changed using hotkeys. + +[Try it right now in your browser.][graphite-live-demo] Graphite is making +rapid progress towards becoming a non-destructive, procedural graphics editor +suitable of replacing traditional 2D DCC applications. The release of Graphite +0.1 is anticipated in the coming month; come +[join the Discord][graphite-discord] to help make it happen! + +[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 + +## Library Updates + +### [discord-sdk] + +[discord-sdk] is an open source implementation of the [Discord Game SDK] by +[Embark Studios](https://embark.dev). + +This month saw the release of the initial [`0.1.0`](https://github.com/EmbarkStudios/discord-sdk/blob/main/CHANGELOG.md#010---2021-07-21) +(and [`0.1.1`](https://github.com/EmbarkStudios/discord-sdk/blob/main/CHANGELOG.md#011---2021-07-28)) +version of the crate, which implements initial support for: + +- [Activities](https://discord.com/developers/docs/game-sdk/activities) +- [Lobbies](https://discord.com/developers/docs/game-sdk/lobbies) +- [Overlay](https://discord.com/developers/docs/game-sdk/overlay) +- [Relationships](https://discord.com/developers/docs/game-sdk/relationships) +- [Users](https://discord.com/developers/docs/game-sdk/users) +- Application registration (so your game can be launched by Discord) + +The API is still rough, but should be in a good enough state to try out! + +[discord-sdk]: https://github.com/EmbarkStudios/discord-sdk +[Discord Game SDK]: https://discord.com/developers/docs/game-sdk/sdk-starter-guide + +### [rkyv] + +[rkyv] is a zero-copy deserialization framework for Rust. It's an alternative +to serde that makes it easy to quickly and safely load data into memory. + +This month, rkyv 0.7 was released with many new features: + +- [Endian-agnostic serialization][rkyv_rend] +- [Greatly improved performance][rust_serde_bench] +- Enhanced `no_std` support +- [Wrapper types][rkyv_wrapper_types] +- [A new `BTreeMap` implementation][rkyv_btree_map] +- Reduced dependencies +- Support for some common external crates + +The full changelog can be found on the [release page][rkyv_0.7]. + +[rkyv]: https://github.com/rkyv/rkyv +[rkyv_rend]: https://github.com/rkyv/rend +[rust_serde_bench]: https://github.com/djkoloski/rust_serialization_benchmark +[rkyv_wrapper_types]: https://docs.rs/rkyv/0.7.4/rkyv/with/index.html +[rkyv_btree_map]: https://docs.rs/rkyv/0.7.4/rkyv/collections/btree_map/index.html +[rkyv_0.7]: https://github.com/rkyv/rkyv/releases/tag/v0.7.0 + +### [Throne] + +![Throne](Throne.png) + +[Throne] is a new scripting language for game prototyping and story logic. The +language is rule-based, which allows certain types of logic to be expressed more +concisely than using an object-based language, while remaining fast to execute +and easy to embed in an existing engine. Throne can be experimented with in the +web [playground]. + +[Throne]: https://github.com/t-mw/throne +[playground]: https://t-mw.github.io/throne-playground/ + +### [godot_egui] + +![godot_egui](godot_egui.gif) + +[godot_egui] is an integration of the [egui](https://github.com/emilk/egui) +crate for the Godot engine using Rust, enabling highly dynamic and performant +user interfaces in an immediate-mode style in Godot. + +Godot has a great GUI system, so why use `godot_egui` instead? A more in-depth +rationale can be found in the crate's README, but the main reason is to provide +a GUI system for godot-rust games that is closer to Rust's data driven +philosophy. + +Unlike other egui integrations, `godot_egui` has the special feature of being +embedded as a custom Godot scene tree node. This effectively allows combining +Godot's retained mode UI and container-based placement with the simplicity of +immediate-mode style GUI code of `egui`, getting the best of both worlds. + +The [github repository](https://github.com/setzer22/godot-egui) has an example +project and usage instructions to get you started with immediate-mode GUI +programming with Godot and Rust! + +[godot_egui]: https://docs.rs/godot_egui/ + +### [wgpu] + +![Franzplot on wgpu](./franzplot_scene.gif) + +Following the [Family Reunion] initiative, [wgpu] team has been busy rebuilding +the graphics infrastructure. The new D3D12 backend has been merged, which +concludes the trip of moving (or rewriting?) all of the implementation into +Rust. In addition to a "lean and mean" implementation of the host API side, +which turned out to match the WebGPU API very well, the new backend works with +[naga] exclusively for generation of HLSL shaders. +This is in contrast with gfx-backend-dx12, which only supported SPIRV-Cross. + +The team also wrote the blog post [Release of v0.9 and the Future of wgpu]. +One of the interesting bits is `gfx` repository switching to +maintenance mode. + +Last but not the least, Francesco Cattoglio described their adventure +with rewriting [Franzplot] on a new blog hosted by the wgpu team. This blog will +accumulate stories of wgpu users and their interesting projects. + +[wgpu]: https://github.com/gfx-rs/wgpu +[naga]: https://github.com/gfx-rs/naga +[Family Reunion]: https://gamedev.rs/news/023/#wgpu-family-re-union +[Release of v0.9 and the Future of wgpu]: https://gfx-rs.github.io/2021/07/16/release-0.9-future.html +[Franzplot]: https://gfx-rs.github.io/stories/franzplot.html + +### [GGRS] + +![GGRS](./ggrs_logo.png) + +[GGRS] by [@g_schup] is a reimagination of the [GGPO] P2P rollback network SDK +written in 100% safe Rust. + +The freshly released version 0.4 comes with tons of fixes for P2P sessions with +up to four players and any number of spectators. More importantly, the repository +now features a [tutorial] and full game [examples] for every type of session. + +[GGRS]: https://github.com/gschup/ggrs +[GGPO]: https://www.ggpo.net/ +[@g_schup]: https://twitter.com/g_schup +[tutorial]: https://gschup.github.io/ggrs/docs/getting-started/quick-start/ +[examples]: https://github.com/gschup/ggrs/tree/main/examples + +### [Bevy Retrograde][bevy_retrograde] + +{{ image_figure( + alt="physics example" + src="https://github.com/bevy-retrograde.gif" + caption="Bevy Retrograde Physics Map example") }} + +[Bevy Retrograde][bevy_retrograde] (formerly Bevy Retro) is a [Bevy] plugin +designed for making pixel-perfect games as easily as possible. + +This project was released under the [Katharos License][katharos_license]. This +license has moral and ethical implications that you may or may not agree with, +so please read it before making use of this project. + +In the last two months, Bevy Retrograde has gotten a major update and is also on +crates.io for the first time! + +- The transform system was migrated to use Bevy's own transform system. +- The pixel-perfect alignment restriction can now be optionally disabled on a + per-sprite basis. This makes it possible to do smooth character and projectile + movement if desired. +- The [Heron] physics engine ( which is powered by Rapier ) was integrated, with + a custom extension for automatically creating collision shapes from sprite + outlines. +- It was decided to start work on migrating Bevy Retrograde to use Bevy's own + rendering abstraction, making it compatible with the larger Bevy rendering + ecosystem. This will hopefully be finished in the next release. + +More information can be found in the Bevy Retrograde +[release notes][bevy_retrograde_release_notes]. + +You can ask questions or give feedback for Bevy Retrograde +[on GitHub][bevy_retrograde_discussions]. + +[Heron]: https://github.com/jcornaz/heron +[bounty_bros_blog_post]: https://katharostech.com/post/bounty-bros-update-4-physics-damage-pathfinding +[bevy_retrograde_release_notes]: https://github.com/katharostech/bevy_retrograde/releases/tag/v0.2.0 +[bevy_retrograde]: https://github.com/katharostech/bevy_retro +[Bevy]: https://bevyengine.org +[katharos_license]: https://github.com/katharostech/katharos-license +[bevy_retrograde_discussions]: https://github.com/katharostech/bevy_retro/discussions + +### [Quilkin] + +![Quilkin](quilkin.png) + +[Quilkin] is a non-transparent UDP proxy specifically designed for use with +large scale multiplayer dedicated game server deployments, to ensure security, +access control, telemetry data, metrics and more. + +This month saw the initial +[0.1.0](https://github.com/googleforgames/quilkin/releases/tag/v0.1.0) +release of the project, as well as announcement blog posts from project +co-founders [Embark Studios] and [Google Cloud]: + +- [Embark Studios: Say hi to Quilkin, an open-source UDP proxy][embark-announce] +- [Google Cloud: Introducing Quilkin: open-source UDP proxies built for game server communication][gcp-announce] + +Quilkin is being actively developed and would love contributors and feedback. +Please join the [Discord](https://discord.gg/mfBNZjBDnc), +[mailing list](https://groups.google.com/forum/#!forum/quilkin-discuss) or +follow the project on [Twitter](https://twitter.com/quilkindev). + +[Quilkin]: https://github.com/googleforgames/quilkin +[Google Cloud]: http://cloud.google.com/gaming +[Embark Studios]:(https://embark.dev) +[embark-announce]: https://medium.com/embarkstudios/say-hi-to-quilkin-an-open-source-udp-proxy-88577c795204 +[gcp-announce]: https://cloud.google.com/blog/products/gaming/introducing-quilkin + +### [bevy_asset_loader] + +[@nikl_me] wrote a [blog post][asset_handling_post] about creating +[bevy_asset_loader], a plugin to simplify asset handling in [Bevy][bevy] +applications. The post outlines how bevy_asset_loader can be used and +discusses future improvements to the crate. + +[asset_handling_post]: https://www.nikl.me/blog/2021/asset-handling-in-bevy-apps/ +[bevy_asset_loader]: https://github.com/NiklasEi/bevy_asset_loader +[bevy]: https://github.com/bevyengine/bevy +[@nikl_me]: https://twitter.com/nikl_me + +## Requests for Contribution + + + +- [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]. + +[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://www.reddit.com/r/rust_gamedev/comments/p0hgsy/this_month_in_rust_gamedev_24_july_2021/), +[Twitter](https://twitter.com/rust_gamedev/status/1424398304700420102), +[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/024/macroquad.jpg b/content/news/024/macroquad.jpg new file mode 100644 index 000000000..732be7d71 Binary files /dev/null and b/content/news/024/macroquad.jpg differ diff --git a/content/news/024/quilkin.png b/content/news/024/quilkin.png new file mode 100644 index 000000000..5dfe8d89b Binary files /dev/null and b/content/news/024/quilkin.png differ diff --git a/content/news/024/rg3d.jpg b/content/news/024/rg3d.jpg new file mode 100644 index 000000000..bf1a7b5ad Binary files /dev/null and b/content/news/024/rg3d.jpg differ diff --git a/content/news/024/robo-os.jpg b/content/news/024/robo-os.jpg new file mode 100644 index 000000000..bd760bafc Binary files /dev/null and b/content/news/024/robo-os.jpg differ diff --git a/content/news/024/shroom-kingdom.gif b/content/news/024/shroom-kingdom.gif new file mode 100644 index 000000000..09376fcc7 Binary files /dev/null and b/content/news/024/shroom-kingdom.gif differ diff --git a/content/news/024/starframe.gif b/content/news/024/starframe.gif new file mode 100755 index 000000000..ff2dd28a8 Binary files /dev/null and b/content/news/024/starframe.gif differ diff --git a/content/news/024/the_process.gif b/content/news/024/the_process.gif new file mode 100644 index 000000000..e12175bce Binary files /dev/null and b/content/news/024/the_process.gif differ diff --git a/content/news/024/theta-wave.gif b/content/news/024/theta-wave.gif new file mode 100644 index 000000000..839620b6f Binary files /dev/null and b/content/news/024/theta-wave.gif differ diff --git a/content/news/024/veloren.png b/content/news/024/veloren.png new file mode 100644 index 000000000..263d2e556 Binary files /dev/null and b/content/news/024/veloren.png differ diff --git a/content/news/024/wicked_potions.png b/content/news/024/wicked_potions.png new file mode 100644 index 000000000..58294e881 Binary files /dev/null and b/content/news/024/wicked_potions.png differ diff --git a/content/news/024/zemeroth.jpg b/content/news/024/zemeroth.jpg new file mode 100644 index 000000000..ed7a8b861 Binary files /dev/null and b/content/news/024/zemeroth.jpg differ diff --git a/content/news/025/TO_BE_DIRE.png b/content/news/025/TO_BE_DIRE.png new file mode 100644 index 000000000..9e2d6e3db Binary files /dev/null and b/content/news/025/TO_BE_DIRE.png differ diff --git a/content/news/025/adayatthemovies.png b/content/news/025/adayatthemovies.png new file mode 100644 index 000000000..bee9fe715 Binary files /dev/null and b/content/news/025/adayatthemovies.png differ diff --git a/content/news/025/dimforge.png b/content/news/025/dimforge.png new file mode 100644 index 000000000..ec0305045 Binary files /dev/null and b/content/news/025/dimforge.png differ diff --git a/content/news/025/fishfight-website.png b/content/news/025/fishfight-website.png new file mode 100644 index 000000000..cc4eb1d20 Binary files /dev/null and b/content/news/025/fishfight-website.png differ diff --git a/content/news/025/gamedev-meetup.png b/content/news/025/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/025/gamedev-meetup.png differ diff --git a/content/news/025/ggrs_logo.png b/content/news/025/ggrs_logo.png new file mode 100644 index 000000000..d1105994b Binary files /dev/null and b/content/news/025/ggrs_logo.png differ diff --git a/content/news/025/godot_egui.gif b/content/news/025/godot_egui.gif new file mode 100644 index 000000000..fd28b9afd Binary files /dev/null and b/content/news/025/godot_egui.gif differ diff --git a/content/news/025/graphite_alpha.png b/content/news/025/graphite_alpha.png new file mode 100644 index 000000000..770715aec Binary files /dev/null and b/content/news/025/graphite_alpha.png differ diff --git a/content/news/025/humankind-wiki.jpeg b/content/news/025/humankind-wiki.jpeg new file mode 100644 index 000000000..76aa6c2ef Binary files /dev/null and b/content/news/025/humankind-wiki.jpeg differ diff --git a/content/news/025/index.md b/content/news/025/index.md new file mode 100644 index 000000000..a6ca90674 --- /dev/null +++ b/content/news/025/index.md @@ -0,0 +1,920 @@ ++++ +title = "This Month in Rust GameDev #25 - August 2021" +date = 2021-09-08 +transparent = true ++++ + + + + + +Welcome to the 25th issue of the Rust GameDev Workgroup's +monthly newsletter. +[Rust] is a systems language pursuing the trifecta: +safety, concurrency, and speed. +These goals are well-aligned with game development. +We hope to build an inviting ecosystem for anyone wishing +to use Rust in their development process! +Want to get involved? [Join the Rust GameDev working group!][join] + +You can follow the newsletter creation process +by watching [the coordination issues][coordination]. +Want something mentioned in the next newsletter? +[Send us a pull request][pr]. +Feel free to send PRs about your own projects! + +[Rust]: https://rust-lang.org +[join]: https://github.com/rust-gamedev/wg#join-the-fun +[pr]: https://github.com/rust-gamedev/rust-gamedev.github.io +[coordination]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination + +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rusty Jam + +![Rusty Jam Site](rusty-jam.png) + +The first (unofficial) Rust Game Jam just completed! The [Rusty +Jam][rusty-jam-homepage] is a game jam to work on games made completely in Rust. +19 games were completed and submitted over the one-week jam. The games were +rated by the community, and the top three games were: + +- First place: [Winter][rusty-jam-first-place] by MrRafael +- Second place: [Murder User Dungeon][rusty-jam-second-place] by Sheepyhead, + cdsupina, and Nightlyside +- Third place: [To be Dire][rusty-jam-third-place] by mdaffin, TimeLark and + septum + +The Rusty Jam will be back, so stay tuned on the [Rusty Jam Discord +Server][rusty-jam-server] for more updates! + +[rusty-jam-homepage]: https://itch.io/jam/rusty-jam +[rusty-jam-entries]: https://itch.io/jam/rusty-jam/entries +[rusty-jam-first-place]: https://mrrafael.itch.io/winter +[rusty-jam-second-place]: https://sheepyhead.itch.io/murder-user-dungeon +[rusty-jam-third-place]: https://septum.itch.io/to-be-dire +[rusty-jam-server]: https://discord.gg/jZtz6y9gCJ + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The eighth Rust Gamedev Meetup happened in August. 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 [September 11th][rust-meetup-sept-time], fill +out [this form][gamedev-meetup-form]. + +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[gamedev-meetup-video]: https://www.youtube.com/watch?v=g-QZAVipiuU +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[rust-meetup-sept-time]: https://everytimezone.com/s/c603b7e6 + +## Game Updates + +### [Pixie Wrangler] + +{{ image_figure( + alt="Screenshot of Pixie Wrangler showing pixies traveling along paths drawn by +the player." + src="https://github.com/pixie_wrangler.png" + caption="Click the image to play the game in your desktop browser!", + link="https://euclidean-whale.itch.io/pixie-wrangler") }} +Pixie Wrangler ([itch.io][pw-itch], [GitHub][pw-github]) by [@rparrett] is a +puzzle game reminiscent of old school printed circuit board design software. + +Help the Pixies get from their outputs to their inputs while doing battle with +the intentionally less-than-ergonomic circuit design software. Pixie Wrangler is +currently a prototype, but includes 9 complete levels. + +Pixie Wrangler was built with [Bevy 0.5] with support from these other great +projects: [bevy_webgl2], [bevy_prototype_lyon], [bevy_asset_ron], +[bevy_easings]. + +[Pixie Wrangler]: https://euclidean-whale.itch.io/pixie-wrangler +[pw-itch]: https://euclidean-whale.itch.io/pixie-wrangler +[pw-github]: https://github.com/rparrett/pixie_wrangler +[Bevy 0.5]: https://bevyengine.org/ +[bevy_webgl2]: https://github.com/mrk-its/bevy_webgl2 +[bevy_prototype_lyon]: https://github.com/Nilirad/bevy_prototype_lyon +[bevy_asset_ron]: https://github.com/inodentry/bevy_asset_ron +[bevy_easings]: https://github.com/mockersf/bevy_extra/tree/master/bevy_easings +[@rparrett]: https://github.com/rparrett + +### [vange-rs] + +{{ image_figure( + alt="Vange-rs on wgpu-0.10" + src="https://github.com/vangers-wgpu0.10.png" + caption="vange-rs on wgpu-0.10") }} + +Vange-rs is a rewrite of the iconic Vangers game from 1998 in Rust, heavily +utilizing GPU for rendering. + +The rendering engine has seen a major upgrade. Essential shaders were rewritten +into [WGSL], which streamlined the shader pipelines and culled out the +dependency tree. Code was ported on the latest [wgpu]-0.10 release and helped +identify a few issues. Most importantly, this change made the game able to +finally be distributed, and maybe even compiled for the Web in the future. Read +more on the [WGSL-related blog post]. + +In order to take advantage of the new superpowers, the [Rusty Vangers] game (the +new working title) was published on Itch.io. + +[vange-rs]: https://github.com/kvark/vange-rs +[WGSL-related blog post]: https://vange.rs/2021/08/25/pure-rust.html +[Rusty Vangers]: https://kvark.itch.io/vangers + +### [RecWars] + +{{ image_figure( + alt="RecWars screenshot" + src="https://github.com/rec-wars.png" + caption="Click the image to play in your browser" + link="https://martin-t.gitlab.io/gitlab-pages/rec-wars/macroquad.html") }} + +[RecWars] by @martin-t is a free and open source Rust clone of [RecWar], a top +down vehicle shooter. + +The game is a work-in-progress, this month it gained split-screen for 2 players +and an in-game console to change cvars - you can edit any of the configuration +variables that define its gameplay balance while playing. + +RecWars uses the [macroquad] engine so it can be played on the desktop as well +as [in the browser][rec-wars-web]. + +[RecWars]: https://github.com/martin-t/rec-wars +[RecWar]: https://github.com/martin-t/rec-wars#the-original-game +[rec-wars-web]: https://martin-t.gitlab.io/gitlab-pages/rec-wars/macroquad.html +[macroquad]: https://github.com/not-fl3/macroquad + +### [Vehicle Evolver Deluxe] + +{{ image_figure( + alt="Vehicle Evolver Deluxe in action, showing multiple vehicles attempting to complete an obstacle course" + src="https://github.com/vehicle_evolver_deluxe.gif" + caption="Vehicle Evolver Deluxe in action!") }} + +[Vehicle Evolver Deluxe] +([GitHub](https://github.com/Bauxitedev/vehicle_evolver_deluxe), +[Twitter](https://twitter.com/bauxitedev/status/1423916614651678722)) by +[@bauxitedev] is a simulation that runs in your browser, using AI (to be +specific: [genetic algorithms](https://en.wikipedia.org/wiki/Genetic_algorithm)) +to try to build better and better vehicles. The vehicles have to overcome an +obstacle course, starting with some slight hills, followed by steeper hills, and +finally some jumps. The vehicles are made out of panels and wheels, connected +together, similar to the game +[Besiege](https://store.steampowered.com/app/346010/Besiege/), except in 2D. It +was built using Rust and the Bevy game engine. + +[Try the live web demo +here.](https://bauxitedev.github.io/vehicle_evolver_deluxe/index.html) (It needs +a relatively fast computer, on mobile browsers, it'll run really slow.) + +[There is also an in-depth explanation available on how it works internally, in +the form of an educational video.](https://www.youtube.com/watch?v=DlRNdCCSSyo) + +_Discussions: +[/r/rust](http://redd.it/ozpa6q), +[Twitter](https://twitter.com/bauxitedev/status/1423916614651678722)_ + +[Vehicle Evolver Deluxe]: +https://bauxitedev.github.io/vehicle_evolver_deluxe/index.html +[@bauxitedev]: +https://twitter.com/bauxitedev + +### Liminal Lab 000 + +{{ image_figure( + alt="Screenshot of Liminal Lab 000 showing a white-walled laboratory test chamber + with buttons on the floor, lights on the wall, and a dark cube levitating + overhead." + src="https://github.com/liminal_lab_000.png" + caption="Click the image to play the game in your desktop browser!", + link="https://pebazium.web.app/") }} + +Liminal Lab 000 ([live version][ll000-live]) by [@pebaz] is a tiny, minimalistic +puzzle game with 1 puzzle designed around the concept of [Liminal +Spaces][liminality]. Liminal Spaces are usually abandoned, transitional places +where life once thrived. These spaces are somehow familiar to the viewer but the +viewer has never been there. The unsettling feeling of being alone comes from +the realization that the viewer does not belong in that space but is merely +passing through it. + +Liminal Lab 000 was built using [Macroquad][macroquad], utilizes voxel rendering +with 8x8x8 chunks, and is hosted on Google Firebase Hosting. + +_Discussions: [/r/rust_gamedev][liminal-reddit]_ + +[ll000-live]: https://pebazium.web.app/ +[@pebaz]: https://github.com/Pebaz +[liminality]: https://aesthetics.fandom.com/wiki/Liminal_Space +[macroquad]: https://github.com/not-fl3/macroquad +[liminal-reddit]: https://www.reddit.com/r/rust_gamedev/comments/ouu7xk/liminal_lab_000_my_first_ever_3d_game/ + +### [Not Snake][not-snake] + +![Level example from Not Snake](notsnake.png) + +Not Snake ([GitHub][notsnakegit], [Itch][not-snake]) by [Michael Ramirez] is a +3D snake game where you don't play as the snake. + +Not Snake was developed using the [Bevy game engine][bevy-notsnake]. It was +completed and [released for free][not-snake] in August and can be played on +Windows, Linux, MacOS, and in browser (Chrome recommended) although there are +fewer audio/performance issues running the executables versus the browser +version. + +There have been several large changes since the last update in June including +adding new levels, new music, and adding a narrator who does an OK job of keeping +score. + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/p8fdfn), +[/r/indiegames](https://www.reddit.com/p9cx15)_ + +[not-snake]: https://ramirezmike2.itch.io/not-snake +[Michael Ramirez]: https://github.com/ramirezmike +[bevy-notsnake]: https://bevyengine.org +[notsnakegit]: https://github.com/ramirezmike/not_snake_game + +### [A Day at the Movies][dayatmovies] + +{{ image_figure( + alt='Screenshot of "A Day at the Movies"' + src="https://github.com/adayatthemovies.png" + caption="The kids getting ready to sneak into a movie") }} + +"A Day at the Movies" ([GitHub][dayatmoviesgit], [Itch][dayatmovies]) by +[Michael Ramirez] is a short game about stealth, movies, and friendship. + +"A Day at the Movies" was made using the [Bevy game engine][bevy-movieday] in 7 +days as part of the Rusty Jam. Despite the placeholder art and lack of audio, it +can be played from start-to-finish and is literally guaranteed to bring a smile +to all who play it. Just make sure to follow the instructions on how to get into +the "Ferris the Crab" movie room. + +It's playable in-browser on [itch][dayatmovies] and the code can be viewed on +[GitHub][dayatmoviesgit]. + +[dayatmovies]: https://ramirezmike2.itch.io/a-day-at-the-movies +[dayatmoviesgit]: https://github.com/ramirezmike/rust_gamejam_0821 +[bevy-movieday]: https://bevyengine.org + +### [Sombervale] + +![Screenshot of Sombervale depicting the starting location](./sombervale.png) + +Sombervale ([GitHub][sv-gh], [itch.io][sv-itch], [Twitch][sv-twitch]) by +[@blipjoy] is a game built in seven days for Rusty Jam. It is styled like an old +handheld game with a 160x128 screen resolution and 16-color palette. + +The top 3 things that went well for this project were the art, tilemap support, +and ECS. On the art side, the silhouettes in the background turned out better +than expected. The backlighting (or at least the impression of backlighting) +looks quite nice, even in motion. Tilemap support was added near the end of the +jam built on [tiled]. It catapulted development progress from seeing major +changes every day to making major changes every hour. [shipyard] is the Entity +Component System crate used in Sombervale. This had a tricky learning curve, but +simplified complex interactions between entities. + +Something that went poorly was choosing a scope that couldn't possibly be +completed on time. As usual, everything turned into a stretch goal! Secondly, a +lot of time was allocated to features that didn't make the cut. Much of this was +a result of trying to be perfect instead of efficient. It's a good game jam +lesson that often has to be relearned the hard way. + +[Sombervale]: https://blipjoy.itch.io/sombervale +[sv-gh]: https://github.com/blipjoy/sombervale +[sv-itch]: https://blipjoy.itch.io/sombervale +[sv-twitch]: https://www.twitch.tv/blipjoy +[@blipjoy]: https://github.com/blipjoy +[tiled]: https://crates.io/crates/tiled +[shipyard]: https://crates.io/crates/shipyard + +### Shattersong Online + +![Screenshot of Shattersong Online showing a portal leading between two +shards](shattersong.png) + +Shattersong Online is an online sandbox game written in Rust, with the goal of +supporting thousands of players in a shared universe, with hundreds of players +per shard. In-game portals let players travel between shards hosted on separate +physical servers. + +Since the initial announcement in July, we have worked on restructuring large +parts of the codebase to make adding new content more ergonomic. We tested out +the new organization by adding a new monster type from scratch (pictured above). + +Read the [dev blog][triplehex-blog] for more info, follow +[@triplehex][triplehex-twitter] on twitter for updates, and join the +[shattersong discord][shattersong-discord] for questions! + +[triplehex-blog]: https://triplehex.dev/shattersong-online/ +[triplehex-twitter]: https://twitter.com/triplehexdev +[shattersong-discord]: https://discord.gg/K5RHxVEK6F + +### [The Process] + +{{ image_figure( + alt="An animated gif showing a machine setup to smelt iron ore" + src="https://github.com/the_process.gif" + caption="A smelter factory setup in The Process") }} + +[The Process] by @setzer22 is an upcoming game about factory building, process +management, and carrot production, built with Rust using the Godot game engine! + +This month has seen a lot of activity: More improvements to the level editor, +in-game assets, and general gameplay improvements. But the main focus has been on +a new building system with improved ergonomics. The game is now approaching a +point where all the core mechanics for the factory simulation are in place, but +more in-game content and assets are still required to reach the first playable +demo. + +This month the game has seen the following changes and improvements: + +- New assets like + [wooden planks](https://twitter.com/PlayTheProcess/status/1423712530267054086), + [machine parts](https://twitter.com/PlayTheProcess/status/1433160712231297027) + and + [mashed carrot cans](https://twitter.com/PlayTheProcess/status/1434466387787923456), + with their in-game recipes. +- A new machine, the + [centrifuge](https://twitter.com/PlayTheProcess/status/1430923976574910466) +- A new system to tweak properties with + [OSD sliders](https://twitter.com/PlayTheProcess/status/1424638751041536001) + to speed up iteration times. Short explanation + [here](https://twitter.com/PlayTheProcess/status/1424638756246675459). +- A new egui-powered + [main menu](https://twitter.com/PlayTheProcess/status/1425785805453373444) + for the main game screen. +- Improvements to the building system: + [ghost markers](https://twitter.com/PlayTheProcess/status/1427560636289069059), + [ramps](https://twitter.com/PlayTheProcess/status/1428300028712558595), + [walls](https://twitter.com/PlayTheProcess/status/1429391914130882564), + [machines](https://twitter.com/PlayTheProcess/status/1430229400923119621) + and + [conveyor belts](https://twitter.com/PlayTheProcess/status/1430479444213485574)! + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/p7ccad/a_3d_building_system_overhaul_for_the_process/)_ + +[The Process]: https://twitter.com/PlayTheProcess + +### [Murder-User Dungeon][murder-user-dungeon] + +![Murder-User Dungeon gameplay screenshots](mud_screenshots.png) + +Murder-User Dungeon (MUD) ([GitHub][mud-github], [Itch][mud-itch]) by +[@Nightlyside][nightlyside], [@cdsupina][cdsupina], [@Shippyhead][sheepyhead] is +a 2D game made for the [Rusty Jam 21][rusty-jam-21] in just one week with the +theme "*Illusion of Security*". + +> Tony is a young man. Finally having his own apartment is a good thing! He will +> learn how to live by himself and how to enjoy the small things in life like +> playing on his old retro computer: the Astaria 3600 running SafeOS 3.1. +> +> However, you will quickly realize that the internet is not so friendly. You +> will meet new people in the Labyrinth(TM) game, and not being friendly to them +> can have a serious impact on your real life! +> +> In Murder-User Dungeon you will juggle between exploring the Labyrinth(TM) +> game in your console, hiding from vengeful gamers and making sure you fulfill +> your human needs. +> +> To win the game, you must reach the end of the Labyrinth(TM)! + +The developers aimed to make the player feel that they were safe in their +apartment at first - however as the game goes on and the player makes enemies of +other gamers in the Labyrinth, they risk them coming to their apartment to get +revenge. + +The team split development of the game, so that each member could work +independently on separate features. While [@cdsupina][cdsupina] worked on the +needs system and the graphics, [@Sheepyhead][sheepyhead] worked on the UI and +menus, and [@Nightlyside][nightlyside] worked on the console and Labyrinth +gameplay. + +MUD was developed using the [Bevy game engine][bevy-engine], Rapier2D for +collisions, Aseprite for the graphics, and a lot of free assets from the +internet (which are credited at the end of the game's description). + +Linux and Windows builds are available on the Itch page, and feedback is +welcomed! + +_Discussions: +[r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/pddreu/rusty_jam_submission_murderuser_dungeon/), +[r/rust](https://www.reddit.com/r/rust/comments/pddyv5/rusty_jam_submission_murderuser_dungeon/), +[Rusty Jam Discord](https://discord.gg/KkeMUu5kxH)_ + +[murder-user-dungeon]: https://sheepyhead.itch.io/murder-user-dungeon +[bevy-engine]: https://bevyengine.org/ +[rusty-jam-21]: https://itch.io/jam/rusty-jam +[mud-itch]: https://sheepyhead.itch.io/murder-user-dungeon +[mud-github]: https://github.com/TheRealTeamFReSh/MurderUserDungeon +[nightlyside]: https://nightlyside.github.io/ +[cdsupina]: https://github.com/cdsupina +[sheepyhead]: https://github.com/Sheepyhead + +### [Theta Wave] + +{{ image_figure( + alt="Theta Wave Mobs" + src="https://github.com/theta-wave.gif" + caption="All mobs ported to Bevy Theta Wave", + link="https://github.com/thetawavegame/thetawave") }} + +[Theta Wave] is an open-source space shooter game by developers [@micah_tigley] +and [@carlosupina]. In the past month, they have been working towards porting +Theta Wave to the Bevy Engine. Most of the work this month has been focused on +implementing all of the existing mobs in Bevy and Rapier. + +Progress on this port is going strong - you can find the GitHub issue for the +port [here][Bevy Port Issue]. + +_Discussions: +[Twitter](https://twitter.com/carlosupina/status/1432039838463705090)_ + +[Bevy Port Issue]: https://github.com/thetawavegame/thetawave/issues/2 +[Theta Wave]: https://github.com/thetawavegame/thetawave +[@micah_tigley]: https://twitter.com/micah_tigley +[@carlosupina]: https://twitter.com/carlosupina + +### [Shroom Kingdom][shroom-kingdom] + +{{ image_figure( + alt="SHRM token distribution" + src="https://github.com/shroom-kingdom.png" + caption="SHRM token distribution") }} + +Shroom Kingdom ([GitHub][shrm-github], [Discord][shrm-discord], +[Twitter][shrm-twitter]) is an upcoming play-to-earn video game built with web +technologies running on the [NEAR Blockchain][near-blockchain]. + +This month the [whitepaper draft][shrm-whitepaper] has been published and a lot +of thoughts have been put into the token economics and how to integrate the game +with the blockchain. The Shroom Kingdom DAO (Decentralised Autonomous +Organization) is looking for self-motivated people, who want to help build the +project. DAO members will be rewarded with the $SHRM token, which will soon be +launched on the NEAR mainnet after the final feedback round from NEAR core team +members. + +A Proof of Concept has also been published for the app, which will be built with +Bevy and Rapier compiled to WebAssembly and which uses React for the GUI. + +To incentivise early adoption of the project, an [NFT airdrop][shrm-nft-airdrop] +has been announced. The NFT will only be acquirable for a limited amount of +time. + +[shroom-kingdom]: https://shroomkingdom.net/ +[shrm-github]: https://github.com/Shroom-Kingdom +[shrm-discord]: https://discord.gg/SPZsgSe +[shrm-twitter]: https://twitter.com/shrm_kingdom +[shrm-whitepaper]: https://whitepaper.shroomkingdom.net/ +[shrm-nft-airdrop]: https://shroomkingdom.net/blog/nft-airdrop/ +[near-blockchain]: https://near.org + +### [Fish Fight][fish-website] + +![Screenshot of fishfight.org website](fishfight-website.png) + +[Fish Fight][fish-website] ([GitHub][fish-github], [Discord][fish-discord], +[website][fish-website]) is a love letter to its spiritual +predecessor [Duck Game][duck-game]. + +[As promised][fish-reloaded], +after months of private prototyping of early invitees, the Fish Fight devs are +finally ready to make their code and community channels available to the general +public. They also launched their website! You can read the [announcement +post][fish-announce] and the [design doc][fish-designdoc]. + +[fish-announce]: https://fishfight.itch.io/ff/devlog/291737/fish-fight-is-open-source +[fish-github]: https://github.com/fishfight/FishFight +[fish-discord]: https://discord.gg/4smxjcheE5 +[fish-designdoc]: https://www.notion.so/erlendsh/Fish-Fight-1647ed74217e4e38a59bd28f4f5bc81a +[fish-website]: https://fishfight.org/ +[duck-game]: https://store.steampowered.com/app/312530/Duck_Game/ +[fish-reloaded]: https://fishfight.itch.io/ff/devlog/281554/fish-fight-reloaded + +### [TO BE DIRE][tbd-itch] + +![TO BE DIRE cover art](TO_BE_DIRE.png) + +TO BE DIRE by [@mdaffin], [@TimeLark] and [@septum], is a prototype survival +game made in a week with [Bevy][tbd-bevy] for the first [Rusty Jam][tbd-jam]. + +The main idea behind the design of TO BE DIRE is venturing out of the safe zone +in order to survive, adding elements of gameplay like gathering resources, and +maintaining the player character health and hunger, which are common for the +genre, finally having the implementation of the monsters and fear system as a +way to further address the first Rusty Jam's theme "Illusion of Security". [Read +more about TO BE DIRE's design in the issues at GitLab][tbd-issues]. + +Download the game at [itch.io][tbd-itch] (available for Linux and Windows) +and/or get the source code at [GitLab][tbd-gitlab]. + +[tbd-itch]: https://septum.itch.io/to-be-dire +[tbd-gitlab]: https://gitlab.com/mdaffin/tbd +[tbd-issues]: https://gitlab.com/mdaffin/tbd/-/issues?scope=all&state=closed +[tbd-jam]: https://itch.io/jam/rusty-jam +[tbd-bevy]: https://bevyengine.org +[@mdaffin]: https://mdaffin.itch.io +[@TimeLark]: https://timelark.itch.io +[@septum]: https://septum.itch.io + +### [Veloren][veloren] + +{{ image_figure( + alt="Exploring dungeons" + src="https://github.com/veloren.jpg" + caption="Exploring the caves") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In August, lots of preparation was done to get Veloren ready for the 0.11 +release coming in September. Work was done on refactoring parts of the codebase, +and making server administration more ergonomic. Towers were added, which allow +for above-ground dungeons. Skill trees were tweaked for better progression. +Modular weapons had a heavy amount of work put into them and were recently +merged. Work was done to prevent the camera from clipping through walls as much. + +Improvements were made to the physics system, as well as other optimizations to +the real-time simulation system. Terrain persistence was completed and is now +being tested on the main server. Balancing was done to loot tables, and more +animations were added to characters. In September, 0.11 will be released. Come +out to the [release party on the 11th at 18:00 UTC][veloren-release-event]! + +August's full weekly devlogs: "This Week In Veloren...": +[#131][veloren-131], +[#132][veloren-132], +[#133][veloren-133], +[#134][veloren-134], +[#135][veloren-135]. + +[veloren]: https://veloren.net +[veloren-131]: https://veloren.net/devblog-131 +[veloren-132]: https://veloren.net/devblog-132 +[veloren-133]: https://veloren.net/devblog-133 +[veloren-134]: https://veloren.net/devblog-134 +[veloren-135]: https://veloren.net/devblog-135 +[veloren-release-event]: https://opencollective.com/veloren/events/veloren-0-11-release-party-05c1a306 + +### [What's the word][whats-the-word] + +![What's the word](whats-the-word.gif) + +A UI-based game in which you tap (or miss) buttons. Created with [Bevy +engine][whats-the-word-bevy] and [egui][whats-the-word-egui], it demonstrates +how _small_ you can scope your project for a [(Rusty) game +jam][whats-the-word-results]! + +[whats-the-word]: https://vrixyz.itch.io/whats-the-word +[whats-the-word-bevy]: https://bevyengine.org/ +[whats-the-word-egui]: https://github.com/mvlabat/bevy_egui +[whats-the-word-results]: https://itch.io/jam/rusty-jam/results + +## [Humankind's Encyclopedia][humankind-twi] + +![Humankind's logo](humankind-wiki.jpeg) + +[Humankind] is a Civilization-like game from [Amplitude Studios], +out of Early Access a few weeks ago. +While the game itself isn't written in Rust, +its [gorgeous encyclopedia][humankind-wiki] and persona sharing service +[are written using rocket.rs][humankind-twi]. + +Since the encyclopedia has a big constraint of being used inside an embedded +in-game browser that has a bit of performance issues with full JS frameworks +the team opted for server-side rendering with the [Tera] template framework. + +> I had people working on that without any prior rust experience, +> and they were ready to code in no time thanks to good language documentation +> & useful compiler messages. +> +> We didn't do anything particularly complex, but the safety of Rust combined +> with performance enabled us to make this run for way less $$. +> You don't have to do complex system programming to profit from Rust's benefits. + +[Humankind]: https://store.steampowered.com/app/1124300/HUMANKIND +[humankind-twi]: https://twitter.com/SobertKaos/status/1429812457820786694 +[humankind-wiki]: https://humankind-encyclopedia.games2gether.com/en-us +[Amplitude Studios]: https://www.amplitude-studios.com +[Tera]: https://github.com/Keats/tera + +## Engine Updates + +### [rg3d] + +[rg3d] ([Discord][rg3d_discord], [Twitter][rg3d_twitter]) is a game engine that +aims to be easy to use and provide a large set of out-of-the-box features. [A +video][rg3d_fh] was released with updates from version 0.22. [Another +video][rg3d_gfs] about the engine made by [@GameFromScratch][gfs_channel], with +the accompanying article that can be found [here][gfs_article]. + +[![rg3d feature highlights](rg3d-feature-highlights.png)][rg3d_fh] + +Lots has been happening with recent rg3d engine development. Physically-based +rendering (PBR) was added. High dynamic range rendering is now supported, along +with tone mapping, color grading, and gamma correction. Manual and auto-exposure +functionality was added for cameras. There is now a widget for editing curves, +and it supports custom curves. Lots of usability improvements were made, such as +begin able to change the path of resources, UI performance gains, and better +ways to manage assets. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rg3d_fh]: https://www.youtube.com/watch?v=N8kmZ9aBtZs +[rg3d_gfs]: https://www.youtube.com/watch?v=mzshg_0ZvLk +[gfs_channel]: https://www.youtube.com/channel/UCr-5TdGkKszdbboXXsFZJTQ +[gfs_article]: https://gamefromscratch.com/rg3d-open-source-rust-3d-game-engine/ + +## Learning Material Updates + +### [Rewriting my mobile game in Rust targeting WASM][panda-doodle-blog-post] + +![Panda Doodle logo](panda-doodle.png) + +[@lucamoller][@lucamoller] published [a blog post][panda-doodle-blog-post] +describing his experience trying to learn Rust by working on a hobby project to +migrate his mobile game from a native C++ implementation to a Rust-based one +targetting WASM. + +The post is written in a storytelling manner going through the author's +motivations to work on this project and the main challenges they faced while +learning Rust and implementing a game using WASM. + +The resulting game, [Panda Doodle][panda-doodle-game], runs smoothly on mobile +device browsers, and the [source code][panda-doodle-source-code] was open +sourced to help inspire other developers that wish to venture into implementing +WASM-based games in Rust. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/oxqofv/show_rrust_rewriting_my_mobile_game_in_rust/)_ + +[panda-doodle-blog-post]: https://lucamoller.medium.com/rewriting-my-mobile-game-in-rust-targeting-wasm-1f9f82751830 +[panda-doodle-game]: https://pandadoodle.lucamoller.com/ +[panda-doodle-source-code]: https://github.com/lucamoller/pandadoodle-rust-wasm +[@lucamoller]: https://github.com/lucamoller + +## Tooling Updates + +### [Graphite][graphite-repo] + +{{ image_figure( + alt="Graphite alpha teaser" + src="https://github.com/graphite_alpha.png" + caption="Graphite Alpha - Coming very soon") }} + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-development vector and +raster graphics editor built on a non-destructive node-based workflow. + +Work has progressed on features for the imminent Alpha release. A project +website has been designed and will launch this month. Crucial user-facing +features have been added: saving/opening documents; a bug report dialog for +panics; an auto-generated list of dependency license notices; and a new +undo/redo system. + +The new Path Tool shows Bézier anchor/control points (soon to be draggable). +Rendering performance is much better and scrollbars now work with the infinite +canvas. There's a new bounding box around selected shapes that are transformable +with Blender-inspired [G]/[R]/[S] keys. + +[Try it right now in your browser.][graphite-live-demo] Graphite is making rapid +progress towards becoming a non-destructive, procedural graphics editor suitable +for replacing traditional 2D DCC applications. The public alpha release is coming +very soon. [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 + +### [rx] + +![rx](rx_logo.png) + +[rx] ([website][rx-website], [code][rx-code], [community][rx-discord]) by +[@cloudhead][cloudhead] is a modern and minimalist pixel editor written in Rust. + +Rx is a pixel art editor/animator written in Rust in about 12K LOC, which +combines a vim-like modal interface with a cursor-based editor. + +Release v0.5 was just published. There are several new commands that help with +color palettes. A flood fill tool has been added. You can now move between +frames with the `h` and `l` keys. The command key `:` has been fixed to help +with non-ANSI layouts. Compatability was added for non x86_64 systems. Support +was added for pasting from the clipboard into the command line. Animation +rendering is now a lot smoother. + +[rx]: https://rx.cloudhead.io +[rx-website]: https://rx.cloudhead.io +[rx-code]: https://github.com/cloudhead/rx +[rx-discord]: https://discord.gg/xHggPjfsS9 +[cloudhead]: https://twitter.com/cloudhead + +## Library Updates + +### [GGRS] + +![GGRS](./ggrs_logo.png) + +[GGRS] by [@g_schup] is a reimagination of the [GGPO] P2P rollback network SDK +written in 100% safe Rust. + +Since the last update, GGRS has released version 0.4.4 and received performance +updates and fixes, such as a [sparse saving +feature](https://gschup.github.io/ggrs/blog/sparse-saving/). The authors also +proudly present [bevy_GGRS]! + +bevy_GGRS is a plugin to integrate GGRS easily into the popular game engine +[bevy]. It features automatic saving and loading of components and resources +defined by the user through bevy's reflection tools. The plugin is currently in +development and uses features that have not been released in bevy 0.5. With bevy +0.6 on the horizon, bevy_GGRS is planning to publish to +[crates.io](https://crates.io), as well. + +If you are interested in developing with GGRS, check the following resources: + +- [quick start guide](https://gschup.github.io/ggrs/docs/getting-started/quick-start/) +- [GGRS examples](https://github.com/gschup/ggrs/tree/main/examples) +- [bevy_GGRS examples](https://github.com/gschup/bevy_ggrs/tree/main/examples) + +[GGRS]: https://github.com/gschup/ggrs +[bevy_ggrs]: https://github.com/gschup/bevy_ggrs +[bevy]: https://bevyengine.org/ +[GGPO]: https://www.ggpo.net/ +[@g_schup]: https://twitter.com/g_schup + +### [wgpu]-0.10 + +{{ image_figure( + alt="Rend3 on wgpu-0.10" + src="https://github.com/rend3-wgpu0.10.jpg" + caption="unannounced engine on wgpu-0.10") }} + +The team has released wgpu-0.10 with a fully rewritten graphics abstraction +("wgpu-hal" instead of "gfx-hal"), as well as [naga] version 0.6. Read more in +[Release of a Pure-Rust v0.10 and a Call For Testing]. + +There were a few issues spotted, but overall it went smooth for such a big +change. User libraries were quick to update: [iced#1000], [kas#241], +[pixels#187], and others. + +On the shader side, in addition to improved validation, hundreds of fixes to the +produced outputs, the atomic operations are now supported when using [WGSL] +sources. + +The release comes at a cost of DX11 backend, which isn't there comparing to +wgpu-0.9. On the plus side, the new GL backend performs much better. It runs +most of the examples, and has been successfully tested on Raspberry Pi-3. Still, +more work ahead to make it solid, and to support WebGL2 properly. + +[wgpu]: https://github.com/gfx-rs/wgpu +[naga]: https://github.com/gfx-rs/naga +[Release of a Pure-Rust v0.10 and a Call For Testing]: https://gfx-rs.github.io/2021/08/18/release-0.10.html +[iced#1000]: https://github.com/hecrj/iced/pull/1000 +[kas#241]: https://github.com/kas-gui/kas/pull/241 +[pixels#187]: https://github.com/parasyte/pixels/pull/187 +[WGSL]: https://gpuweb.github.io/gpuweb/wgsl/ + +### [godot-egui]-0.1.8 + +{{ image_figure( + alt="An animation showing godot-egui running as a plugin inside the editor" + src="https://github.com/godot_egui.gif" + caption="You can now use egui to make Godot editor extensions!") }} + +The [egui](https://github.com/emilk/egui) backend for +[godot-rust](https://github.com/godot-rust/godot-rust) is improving fast. Some +bugs have been ironed out during this past month, and the integration has got +several features: + +- The repository now includes an example of how to setup egui to create + [Godot editor plugins](https://twitter.com/PlayTheProcess/status/1431660162587275267). + Contribution by @jacobsky. +- Custom font support by drag & dropping font files right from Godot editor. +- Updated crate to match latest egui 0.14.2 +- Configurable texture filtering. +- Several bugfixes and improvements. + +Additionally, a new [theme +editor](https://github.com/setzer22/godot-egui/issues/5) is in the works, which +hopefully will be helpful to other egui backends as well! + +[godot-egui]: https://github.com/setzer22/godot-egui + +## [Dimforge][dimforge] + +[![Dimforge logo](dimforge.png)][dimforge] + +[Dimforge][dimforge] creates open-source Rust crates for numerical simulation. +Some of the [recent updates][dimforge-update]: + +- [New user-guide for Rapier’s JS bindings][rapier-js-docs]. +- [nalgebra] v0.29 brings better soundness and non-Copy types support. +- [Rapier] 0.11 brings a full set of joint limits. +- The work on unbreakable reduced-coordinates joints for Rapier + is also in progress. + +[dimforge]: https://dimforge.com +[dimforge-update]: https://dimforge.com/blog/2021/08/15/the-last-two-months-in-dimforge +[Rapier]: https://rapier.rs +[rapier-js-docs]: https://rapier.rs/docs/user_guides/javascript/getting_started_js +[nalgebra]: https://nalgebra.org + +## Popular Workgroup Issues in GitHub + + + +- [Site fails to build #758][site-fails-to-build] +- [Better solution for hosting images #636][better-solution-for-hosting-images] +- [Netlify preview for PRs #174][netlify-preview-for-prs] + +[site-fails-to-build]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues/758 +[better-solution-for-hosting-images]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues/636 +[netlify-preview-for-prs]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues/174 + +## Requests for Contribution + + + +- [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]. + +[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 the news for last month, 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 the [/r/rust_gamedev subreddit][/r/rust_gamedev] if you want to receive fresh +news and updates about the ecosystem every day! + +**Discuss this post on**: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/pki6iw/this_month_in_rust_gamedev_25_august_2021/), +[Twitter](https://twitter.com/rust_gamedev/status/1435700216510943234), +[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/025/liminal_lab_000.png b/content/news/025/liminal_lab_000.png new file mode 100644 index 000000000..40e68cac9 Binary files /dev/null and b/content/news/025/liminal_lab_000.png differ diff --git a/content/news/025/mud_screenshots.png b/content/news/025/mud_screenshots.png new file mode 100644 index 000000000..411b84077 Binary files /dev/null and b/content/news/025/mud_screenshots.png differ diff --git a/content/news/025/notsnake.png b/content/news/025/notsnake.png new file mode 100644 index 000000000..10fb8c528 Binary files /dev/null and b/content/news/025/notsnake.png differ diff --git a/content/news/025/panda-doodle.png b/content/news/025/panda-doodle.png new file mode 100644 index 000000000..568ba8e24 Binary files /dev/null and b/content/news/025/panda-doodle.png differ diff --git a/content/news/025/pixie_wrangler.png b/content/news/025/pixie_wrangler.png new file mode 100644 index 000000000..6688152e3 Binary files /dev/null and b/content/news/025/pixie_wrangler.png differ diff --git a/content/news/025/rec-wars.png b/content/news/025/rec-wars.png new file mode 100644 index 000000000..c68c0d0bd Binary files /dev/null and b/content/news/025/rec-wars.png differ diff --git a/content/news/025/rend3-wgpu0.10.jpg b/content/news/025/rend3-wgpu0.10.jpg new file mode 100644 index 000000000..c31dfc682 Binary files /dev/null and b/content/news/025/rend3-wgpu0.10.jpg differ diff --git a/content/news/025/rg3d-feature-highlights.png b/content/news/025/rg3d-feature-highlights.png new file mode 100644 index 000000000..73307b966 Binary files /dev/null and b/content/news/025/rg3d-feature-highlights.png differ diff --git a/content/news/025/rg3d-gfs.png b/content/news/025/rg3d-gfs.png new file mode 100644 index 000000000..52aa6e971 Binary files /dev/null and b/content/news/025/rg3d-gfs.png differ diff --git a/content/news/025/rg3d_logo.png b/content/news/025/rg3d_logo.png new file mode 100644 index 000000000..53d8a734d Binary files /dev/null and b/content/news/025/rg3d_logo.png differ diff --git a/content/news/025/rusty-jam.png b/content/news/025/rusty-jam.png new file mode 100644 index 000000000..8eb6ca918 Binary files /dev/null and b/content/news/025/rusty-jam.png differ diff --git a/content/news/025/rx_logo.png b/content/news/025/rx_logo.png new file mode 100644 index 000000000..325819637 Binary files /dev/null and b/content/news/025/rx_logo.png differ diff --git a/content/news/025/shattersong.png b/content/news/025/shattersong.png new file mode 100644 index 000000000..eab0ab948 Binary files /dev/null and b/content/news/025/shattersong.png differ diff --git a/content/news/025/shroom-kingdom.png b/content/news/025/shroom-kingdom.png new file mode 100644 index 000000000..af22dbd5a Binary files /dev/null and b/content/news/025/shroom-kingdom.png differ diff --git a/content/news/025/sombervale.png b/content/news/025/sombervale.png new file mode 100644 index 000000000..17b65d592 Binary files /dev/null and b/content/news/025/sombervale.png differ diff --git a/content/news/025/the_process.gif b/content/news/025/the_process.gif new file mode 100644 index 000000000..7fbf2d0dc Binary files /dev/null and b/content/news/025/the_process.gif differ diff --git a/content/news/025/theta-wave.gif b/content/news/025/theta-wave.gif new file mode 100644 index 000000000..f682d9835 Binary files /dev/null and b/content/news/025/theta-wave.gif differ diff --git a/content/news/025/vangers-wgpu0.10.png b/content/news/025/vangers-wgpu0.10.png new file mode 100644 index 000000000..4e3369dbd Binary files /dev/null and b/content/news/025/vangers-wgpu0.10.png differ diff --git a/content/news/025/vehicle_evolver_deluxe.gif b/content/news/025/vehicle_evolver_deluxe.gif new file mode 100644 index 000000000..d90c328aa Binary files /dev/null and b/content/news/025/vehicle_evolver_deluxe.gif differ diff --git a/content/news/025/veloren.jpg b/content/news/025/veloren.jpg new file mode 100644 index 000000000..8dcadeb1a Binary files /dev/null and b/content/news/025/veloren.jpg differ diff --git a/content/news/025/whats-the-word.gif b/content/news/025/whats-the-word.gif new file mode 100644 index 000000000..623aedcce Binary files /dev/null and b/content/news/025/whats-the-word.gif differ diff --git a/content/news/026/antorum.jpg b/content/news/026/antorum.jpg new file mode 100644 index 000000000..5b91fba83 Binary files /dev/null and b/content/news/026/antorum.jpg differ diff --git a/content/news/026/arcana-tanks-multiplayer.gif b/content/news/026/arcana-tanks-multiplayer.gif new file mode 100644 index 000000000..787c334e7 Binary files /dev/null and b/content/news/026/arcana-tanks-multiplayer.gif differ diff --git a/content/news/026/bevy_verlet.gif b/content/news/026/bevy_verlet.gif new file mode 100644 index 000000000..aa14d77a4 Binary files /dev/null and b/content/news/026/bevy_verlet.gif differ diff --git a/content/news/026/bitgun.jpeg b/content/news/026/bitgun.jpeg new file mode 100644 index 000000000..8f40ff4e7 Binary files /dev/null and b/content/news/026/bitgun.jpeg differ diff --git a/content/news/026/borderlands-save.png b/content/news/026/borderlands-save.png new file mode 100644 index 000000000..78be810df Binary files /dev/null and b/content/news/026/borderlands-save.png differ diff --git a/content/news/026/capstone.png b/content/news/026/capstone.png new file mode 100644 index 000000000..1b340a6ce Binary files /dev/null and b/content/news/026/capstone.png differ diff --git a/content/news/026/circle-race.jpg b/content/news/026/circle-race.jpg new file mode 100644 index 000000000..2ee53cf9c Binary files /dev/null and b/content/news/026/circle-race.jpg differ diff --git a/content/news/026/deno-wgpu.png b/content/news/026/deno-wgpu.png new file mode 100644 index 000000000..67083e3f5 Binary files /dev/null and b/content/news/026/deno-wgpu.png differ diff --git a/content/news/026/emd_texture_hotreload.gif b/content/news/026/emd_texture_hotreload.gif new file mode 100644 index 000000000..db8aca348 Binary files /dev/null and b/content/news/026/emd_texture_hotreload.gif differ diff --git a/content/news/026/emergent-ai.gif b/content/news/026/emergent-ai.gif new file mode 100644 index 000000000..5757c5d80 Binary files /dev/null and b/content/news/026/emergent-ai.gif differ diff --git a/content/news/026/gamedev-meetup.png b/content/news/026/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/026/gamedev-meetup.png differ diff --git a/content/news/026/gdc-talk.jpg b/content/news/026/gdc-talk.jpg new file mode 100644 index 000000000..c6cab0419 Binary files /dev/null and b/content/news/026/gdc-talk.jpg differ diff --git a/content/news/026/godot-rust.png b/content/news/026/godot-rust.png new file mode 100644 index 000000000..01e8c5edb Binary files /dev/null and b/content/news/026/godot-rust.png differ diff --git a/content/news/026/graphics-meetup.png b/content/news/026/graphics-meetup.png new file mode 100644 index 000000000..419fa74a4 Binary files /dev/null and b/content/news/026/graphics-meetup.png differ diff --git a/content/news/026/hho_pax.jpg b/content/news/026/hho_pax.jpg new file mode 100644 index 000000000..c52ea7f52 Binary files /dev/null and b/content/news/026/hho_pax.jpg differ diff --git a/content/news/026/idu.jpg b/content/news/026/idu.jpg new file mode 100644 index 000000000..6d3c93062 Binary files /dev/null and b/content/news/026/idu.jpg differ diff --git a/content/news/026/index.md b/content/news/026/index.md new file mode 100644 index 000000000..6d2d73dca --- /dev/null +++ b/content/news/026/index.md @@ -0,0 +1,993 @@ ++++ +title = "This Month in Rust GameDev #26 - September 2021" +transparent = true +date = 2021-10-10 ++++ + + + +Welcome to the 26th 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) +- [Rust Graphics Meetup \#1](#rust-graphics-meetup-1) +- [Rust GameDev Podcast \#6](#rust-gamedev-podcast-6) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Tooling Updates](#tooling-updates) +- [Library Updates](#library-updates) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) +- [Requests for Contribution](#requests-for-contribution) +- [Discussions](#discussions) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The ninth Rust Gamedev Meetup happened 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://youtu.be/TH3AErcNcTY +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Rust Graphics Meetup \#1 + +![logo](graphics-meetup.png) + +The Rust Graphics Meetup is an online gathering where rustaceans share +technical details of their work related to graphics and compute, +not affiliated to any particular stack. +The pilot edition has happened on Oct 2nd! Check out the talks: + +- [gfx-rs Lessons Learned][rgm1-video] - [@kvark], [slides][rgm1-slides]. +- [rend3 Architecture: Efficient, Customizable Rendering][rgm2-video] - + [@cwfitzgerald], [slides][rgm2-slides]. +- [Blub - Interactive GPU Fluid Solver][rgm3-video] - [@wumpf], [slides][rgm3-slides]. + +Learn more at the [gfx meetup repo]. +Thanks everyone for tuning in and helping to make this happen! + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/q08byh/videos_from_rust_graphics_meetup_1), +[Twitter](https://twitter.com/rust_gamedev/status/1444326130035666953)_ + +[rgm1-video]: https://youtube.com/watch?v=m0JgF5Wb-dA +[rgm1-slides]: https://github.com/gfx-rs/meetup/blob/main/Meeting01/GfxLessonsLearned.pdf +[rgm2-video]: https://youtube.com/watch?v=F0wGz5UJTrY +[rgm2-slides]: https://github.com/gfx-rs/meetup/blob/main/Meeting01/rend3s_Architecture_-_Efficient_Customizable_Rendering.pdf +[rgm3-video]: https://youtube.com/watch?v=Yzr9va5UtiE +[rgm3-slides]: https://github.com/gfx-rs/meetup/blob/main/Meeting01/Blub_-_Quick_tour_through_a_GPU_fluid_solver.pdf +[gfx meetup repo]: https://github.com/gfx-rs/meetup +[@kvark]: https://github.com/kvark +[@cwfitzgerald]: https://github.com/cwfitzgerald +[@wumpf]: https://github.com/wumpf + +## [Rust GameDev Podcast #6][podcast-6] + +![text logo](podcast.jpeg) + +[The sixth episode][podcast-6] is an interview with Remco and Basz, creators of +[Mun][mun]. Programming language creation is discussed, along with challenges +and what future developments are incoming from the [Mun project][mun]. + +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], +[Google Podcasts][gamedev-podcast-google]. + +[podcast-6]: https://rustgamedev.com/episodes/interview-with-remco-and-basz +[mun]: https://mun-lang.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 + +## Game Updates + +### [BITGUN][bitgun-steam] + +[![Gameplay screenshot with lots of zombies and a zombie boss](bitgun.jpeg)][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 and guns, similar to games like +Hotline Miami, Nuclear Throne, and Heat Signature. The game is built using Godot +and Rust (via [godot-rust][bitgun-godot-rust]). + +They recently re-worked the in-game UI using [egui][bitgun-egui] with +[godot-egui][bitgun-godot-egui], allowing much easier custom widgets such as +[drag & drop on items between inventory slots][bitgun-inventory]. + +_Discussions: [Twitter][bitgun-inventory]_ + +[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-egui]: https://github.com/emilk/egui +[bitgun-godot-egui]: https://github.com/setzer22/godot-egui +[bitgun-inventory]: https://twitter.com/LogLogGames/status/1444072221681635333 + +### [Weegames][weegames-itch] + +![Handful of minigames including hedgehogs and raspberries](weegames.jpg) + +[Weegames][weegames-itch] is a fast-paced minigame collection. +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-itch]: https://yeahross.itch.io/weegames +[weegames-github]: https://github.com/yeahross0/weegames + +### [Veloren][veloren] + +{{ 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. + +In September, Veloren hosted its largest release party ever! At peak, 181 players +were playing on the server together. You can read about all the changes to 0.11 +in [the release blog][veloren-011-release-blog], and be sure to watch the +[release trailer][veloren-011-trailer]! During the release party, several devs +spoke about the changes, which you can watch [here][veloren-011-dev-chats]. This +release party was the first one to handle the high player load with no issues, +and give hope for much larger servers in the future. + +Shaderc was replaced with Naga early on in the month. This was the result of +over a year of work. Hitboxes are in the process of being overhauled to handle +non-cylindrical targets better. Improvements were made to how the cursor selects +objects in game. As always, lots of experimental work is being done to the +economic system. Cultist raiders were added, which means that raiding parties +will now attack nearby settlements. This is a great example of how the realtime +simulation is starting to become more visible to players. + +September's full weekly devlogs: "This Week In Veloren...": +[#136][veloren-136], +[#137][veloren-137], +[#138][veloren-138], +[#139][veloren-139]. + +[veloren]: https://veloren.net +[veloren-136]: https://veloren.net/devblog-136 +[veloren-137]: https://veloren.net/devblog-137 +[veloren-138]: https://veloren.net/devblog-138 +[veloren-139]: https://veloren.net/devblog-139 +[veloren-011-trailer]: https://www.youtube.com/watch?v=l1oOjvaWJlw +[veloren-011-dev-chats]:https://www.youtube.com/watch?v=J5Xz-vbE27Q +[veloren-011-release-blog]: https://veloren.net/release-0-11/ + +### [Harvest Hero Origins][hho] @ 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), +[Twitter](https://twitter.com/GemdropGames)) +is an arcade wave defense game by [Gemdrop Games][gemdrop], +built in Rust on top of [Emerald]. + +Gemdrop Games recently took Harvest Hero Origins to [PAX West 2021][hho_pax] +and had a very positive response from most of the players! +Being able to watch people play the game was extremely valuable, +the developers were able to see pain points in UI/UX design +and can now fix them without worry. +They were also able to see what players find fun about controlling each hero, +which helps with the next hero planning in the full release of the game. + +Harvest Hero Origins is still planned to release by the end of 2021, +please wishlist it on [Steam][hho]! + +[Emerald]: https://github.com/Bombfuse/emerald +[gemdrop]: https://twitter.com/GemdropGames +[hho]: https://store.steampowered.com/app/1651500/Harvest_Hero_Origins +[hho_pax]: https://twitter.com/GemdropGames/status/1433819047481659394 + +### Molecoole + +![Connecting to different atoms](molecoole_first.gif) + +Molecoole is a topdown action roguelite where you connect with different atoms +to create the strongest Molecoole to defeat the baddies! Molecoole was created +by two brothers: [Márton] and [Dániel]. + +In Molecoole the strongest focus is about making different combos by connecting +atoms. The original version was made in Unity for a game jam, but they decided +to make an actual game out of it using the Bevy engine. It currently includes +their own implementation for 2D animation, collision detection, and particles. +In September, one of the main development areas was making the game nicer to +play, so they introduced the [ezing] crate and also implemented slowing the +[game time]. They are using the [LDtk] editor to make the level sections for the +procedural generation. + +[Márton]: https://twitter.com/kiss_mrton +[Dániel]: https://twitter.com/FrenetiqDan +[ezing]: https://github.com/michaelfairley/ezing +[game time]: https://twitter.com/kiss_mrton/status/1434189320865341444 +[LDtk]: https://ldtk.io + +### [Circle Race] + +![circle race](circle-race.jpg) + +Circle Race was made by [@kuviman] for [TriJam 135], where you needed to create +a game in three hours. The theme was "Circles". You are a circle, connected with +two other "thruster" circles. You play inside a circle, consisting of "tire" +circles. Circle around it to find your best circle time! + +Made using [@kuviman]'s own engine [geng]. + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/phyn7z/circle_race_game_made_in_3_hours_for_trijam/)_ + +[Circle Race]: https://kuviman.itch.io/circle-race +[@kuviman]: https://github.com/kuviman +[TriJam 135]: https://itch.io/jam/trijam-135 +[geng]: https://github.com/kuviman/geng/ + +### [Monke Pizza] + +![monke pizza](monke-pizza.jpg) + +Game made by [@kuviman] for [VimJam 2]. The theme for this jam was "Boss" and +the limitation was "On The Edge". + +Monke Pizza is an online multiplayer monke pizza restaurant simulator. You are +always on the edge of being fired. That is *if* you work here. Otherwise, you are +on the edge of being hired. Because that is how BOSS is bossing. + +Made using [@kuviman]'s own engine [geng]. + +[Monke Pizza]: https://kuviman.itch.io/monke-pizza +[VimJam 2]: https://itch.io/jam/vimjam2 + +### Idu + +![idu's titlescreen](idu.jpg) + +Idu ([Discord][idu-discord]) by [@logicsoup] and [@epcc10] +is an upcoming game centered around growing realistic plants. + +In September, the project previously codenamed "garden" has been renamed to +"idu"! In Idu, every plant is continuously formed by the simulation. There are +unique responses from a plant's surroundings and your care. Simulated leaves and +shoots grow into plants with a mind of their own. Here is the changelog of Demo Version +4: + +- Fixed freezing when help menu was displayed +- Added support for all older Ubuntu versions from 16.04 +- Fixed crashing when roots extended over the world border +- Pressing ESC in menus acts as a back button +- Fixed the issue where pruning didn't work on the first day after loading the game +- Fixed the game choosing integrated GPU even when a discrete one was available + +A playable alpha demo has been released and is freely available +at [Idu's Discord server's #demo-download channel][idu-discord]! + +[@logicsoup]: https://twitter.com/logicsoup +[@epcc10]: https://twitter.com/epcc10 +[idu-discord]: https://discord.gg/PR3GgYYkym + +### [Antorum Online] + +{{ 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 +in Unity. + +A few new features and lots of fixes were released to players this month, including +item enchantments and the mining skill! Crafting has been expanded as well, and +there are a ton of new monsters to fight and gear pieces to create. + +- [#36: Item Enchantments](https://ratwizard.dev/dev-log/antorum/36) +- [#37: Audio Sources And Other Stuff](https://ratwizard.dev/dev-log/antorum/37) +- [#38: Mining](https://ratwizard.dev/dev-log/antorum/38) + +[Antorum Online]: https://ratwizard.dev/dev-log/antorum +[@dooskington]: https://twitter.com/dooskington + +### [rpg-cli] v1.0 + +![agent stats and a fight with a spider in ~/dev/facundoolano](rpg-cli.png) + +[rpg-cli] by [@facundoolano] is a minimalist computer RPG written in Rust. +Its command-line interface can be used as a cd replacement +where you randomly encounter enemies as you change directories. + +This month, the v1.0 version was released. +Some of the [updates][rpg-cli-releases]: + +- New magic rings. +- A bunch of new quests including ring-related ones. +- Stat increasing stones. +- Sorcerer enemy class. + +[rpg-cli]: https://github.com/facundoolano/rpg-cli +[rpg-cli-releases]: https://github.com/facundoolano/rpg-cli/releases +[@facundoolano]: https://github.com/facundoolano + +## Engine Updates + +### [good-web-game] + +![supported platforms](supported_platforms.svg) + +[good-web-game] has been released on crates.io, together with [ggez] 0.6.1! +ggez is a lightweight cross-platform game framework for making 2D games +with minimum friction, with an API inspired by Love2D. good-web-game is a +subset of ggez, which is based upon [miniquad] and can therefore run natively +on the web, mobile and of course desktop as well. + +good-web-game was originally created to run [Zemeroth] on the web. However, +as Zemeroth switched from using ggez to [macroquad] the project was +discontinued, until recently. In search of [a new graphics backend for ggez] +the ggez team now picked up development again and released a massive update, +updating good-web-game for compatability to ggez 0.6, expanding its +functionality. + +With only [a single change in boilerplate code] many ggez 0.6 games can now be +directly ported to good-web-game. Yet, it's no drop in replacement for ggez +as [several key differences remain]. + +[good-web-game]: https://github.com/ggez/good-web-game +[ggez]: https://github.com/ggez/ggez +[miniquad]: https://github.com/not-fl3/miniquad +[Zemeroth]: https://ozkriff.itch.io/zemeroth +[macroquad]: https://github.com/not-fl3/macroquad/ +[a new graphics backend for ggez]: https://github.com/ggez/ggez/issues/962 +[a single change in boilerplate code]: https://github.com/PSteinhaus/PSteinhaus.github.io/blob/main/ggez/web-examples/README.md#ggez-animation-example +[several key differences remain]: https://github.com/ggez/good-web-game#differences + +### [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. + +In the last month, a lot of documentation has been added to the book. The new +entries in [FAQ][gd-faq], [Recipes][gd-recipes] and [Game Architecture][gd-arch] +don't focus on specific APIs, but put them into a bigger context and highlight +typical challenges encountered in practice. + +Besides smaller bugfixes, the library itself added support for `serde` +serialization of core types ([#743][gd-743], thanks to Waridley). + +In terms of automation and tooling, September was a very productive month: + +- Translation of Godot's documentation based on `[bbcode]` to RustDoc with + intra-doc links, making Godot APIs much more readable and discoverable. + +- Refactoring of GitHub Actions CI, allowing quick and precise feedback for + contributors. + +- Automation of latest documentation, now hosted under + [godot-rust.github.io/docs][gd-docs]. + +As the godot-rust community keeps growing, the project can now be found +[on Twitter][gd-twitter] with the GodotRust handle. + +[gd-faq]: https://godot-rust.github.io/book/faq.html +[gd-recipes]: https://godot-rust.github.io/book/recipes.html +[gd-arch]: https://godot-rust.github.io/book/gdnative-overview/architecture.html +[gd-743]: https://github.com/godot-rust/godot-rust/pull/743 +[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 + +### [Emerald] + +{{ 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. + +Currently supported platforms are: +Windows, Linux (WIP gamepad support), macOS (WIP gamepad support), +Web, Android (WIP audio, gamepad Support), +[GameShell](http://imgur.com/a/8cWxOPs), +and even [WearOS](https://twitter.com/bombfuse_dev/status/1444100458260299778)! + +Recently added features include: + +- Texture hot reloading (sound hot reloading is coming soon!). +- Cross-platform file saving/loading. + This is essential for games, basically allows the user to save + their files to the platform specific save directory. + +[Emerald] has slowly been growing, both in contributor size and feature sets +recently. If any of this interests you and you'd like to contribute, +[feel free to grab a task](https://github.com/Bombfuse/emerald/issues), +fork and PR! + +[Emerald]: https://github.com/Bombfuse/emerald +[bombfuse_twi]: https://twitter.com/bombfuse_dev + +### [Starframe] + +{{ 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 [@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. +Most importantly, [spatial partitioning was added][sf-grid-tweet] to speed up +collision detection. Also notably, [a graph algorithm was +implemented][sf-island-tweet] to divide the world into disjoint islands, +enabling some parallelism and skipping of computations. + +Starframe's physics is now very close to game-ready, and it no longer makes +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/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] + +{{ 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. + +It recently got huge progress towards multiplayer support. +Traditional client-server systems were added and used in the ["Tanks" example][arcana-tanks]. + +Clients send only command queue to the server and server sends game world updates +to the clients. Engine supports multiple players per client. +For example, players may be added for each active input device. + +To allow wide variety of genres player is not attached to one specific entity +and may control many. +In RTS player may control all their units and will send commands for each one. + +Gameplay system that consumes commands doesn't even need to be aware of netcode. +Either way, it just drains command queue of an entity and utilizes them. +That system must not be run on clients at all. + +[Arcana] is very early work-in-progress and may not always work +out-of-the-box atm, but stability improvements are expected next month. + +[Arcana]: https://github.com/zakarumych/arcana +[arcana-tanks]: https://github.com/zakarumych/arcana/tree/master/examples/tanks + +### [rg3d] v0.23 + +{{ 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 +set of out-of-the-box features. +This month [v0.23 was released][rg3d_0_23_post]. Some of the updates: + +- Physically based rendering (PBR) with metallic workflow. +- High dynamic range (HDR) rendering pipeline & textures. +- Custom shaders and materials. +- Emission maps - allows you to define glowing parts using emission map. +- Gamma correction, manual/auto exposure, and color grading. +- Lots of the editor's improvements: material editor, + unified material pipeline for terrains, improved inspector, etc. + +Check out the [blog post][rg3d_0_23_post] or +the [feature highlights video][rg3d_0_23_video] for more info. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rg3d_patreon]: https://www.patreon.com/mrdimas +[rg3d_0_23_post]: https://rg3d.rs/general/2021/09/13/0.23-feature-highlights.html +[rg3d_0_23_video]: https://youtube.com/watch?v=3tOdwmRWLKw + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/pnhbe4/media_rg3d_023)_ + +### [Rust RPG Toolkit][rpg_rk] + +{{ 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. + +The project started out as a part of the [Capstone] game but was separated +as it grew in scope. +It uses JSON files for most of its game data and resources specification +so that games can be created with very little interaction with the Rust code. +This has the benefit of making the end product very easy to modify, +both for non-developers involved in the development process, and by end users. +Modification can be done either by modifying a game's data files directly, +or by creating user modules, which are supported out-of-the-box. + +Note that this is in early and very heavy development: the API is subject to +constant change, as it has newly transitioned from being a game project +to a library. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/pcrddz/rpg_toolkit)_ + +[rpg_rk]: https://github.com/olefasting/rust_rpg_toolkit +[@olefasting]: https://github.com/olefasting +[Capstone]: https://www.reddit.com/r/rust_gamedev/comments/paz35s/capstone + +## Learning Material Updates + +### GDC: Rust for Game Tooling by [Dan Olson][dan-olson-twitter] + +![Title card](gdc-talk.jpg) + +[Dan Olson][dan-olson-twitter] gave a talk at the Game Developers Conference in +July about using Rust for game tooling. The talk describes how Rust is being +integrated at Treyarch. Dan gives a "sales pitch" about several Rust benefits, +and goes over several case studies about where it is used. It makes appearances +in the Treyarch image packer, and is used in 3 major tools, and around 20 +smaller one-off tools. Around 120k lines of Rust code have been written for the +projects. + +If you have a GDC Vault account, you can watch [the video][gdc-vault-video]. +If you don't, you can still read [the slides][dan-olson-slides]. + +[dan-olson-twitter]: https://twitter.com/olson_dan/status/1438600242962698256 +[gdc-vault-video]: https://gdcvault.com/play/1027315 +[dan-olson-slides]: https://research.activision.com/publications/2021/09/the-rust-programming-language-for-game-tooling + +### [Learn Wgpu][learn-wgpu] Updated: No More Swap Chains! + +As part of the update to 0.10, the wgpu team removed the `SwapChain` from the +API. The `Surface` will now be used to retrieve textures to render to wrapped +in `SurfaceTexture`s. You configure the `Surface` in a similar way to how you +would configure the `SwapChain`, except the struct is now called +`SurfaceConfiguration` instead of `SwapChainDescriptor`. + +If you want to know more, you can check [the tutorial's news page][learn-wgpu-news]. + +[learn-wgpu]: https://sotrh.github.io/learn-wgpu +[learn-wgpu-news]: https://sotrh.github.io/learn-wgpu/news + +## Tooling Updates + +### [Borderlands 3 Save Editor][borderlands-save-github] + +![borderlands save editor](borderlands-save.png) + +The [Borderlands 3 Save Editor][borderlands-save-github] by [ZakisM] +is a tool to help you modify your Borderlands 3 Saves and Profiles +written using [Iced]. Currently, it runs on Windows, Mac OS and Linux. +It supports modifying PC saves as well as decrypted PS4 saves +(and converting between them). + +[ZakisM]: https://github.com/ZakisM +[borderlands-save-github]: https://github.com/ZakisM/bl3_save_edit +[Iced]: https://github.com/iced-rs/iced + +## Library Updates + +### [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. + +wgpu has set up the infrastructure to run WebGPU proper tests on its CI, +via [Deno]. This will ensure correctness down the road when we reach a +decent level of coverage. Read more on [gfx-rs blog]. + +Aside from that, wgpu team has been pumping out patches. In fact, wgpu-0.10 is +easily the most patched release of all! + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/ppgb2l/wgpu_alliance_with_deno), +[Twitter](https://twitter.com/deno_land/status/1438573126670028801)_ + +[wgpu]: https://github.com/gfx-rs/wgpu +[Deno]: https://github.com/denoland/deno +[gfx-rs blog]: https://gfx-rs.github.io/2021/09/16/deno-webgpu.html + +### [Matchbox] + +![matchbox demo screenshot: Waiting for 3 more players](matchbox.png) + +Matchbox by [@jkhelsing] is a new peer-to-peer networking project for +establishing unreliable, unordered connections between peers on the internet. +The goal is to enable low-latency multiplayer games written in Rust WASM. + +Matchbox consists of: + +- A tiny signaling server, [`matchbox_server`], which acts as a rendezvous + point. It helps peers discover each other and deal with NAT traversal in order + to establish more direct ways of communication. +- A crate, [`matchbox_socket`], which handles connecting to a signalling server + and establishing a WebRTC data channel between each connected peer. +- A [demo/template project][matchbox_demo] using [Bevy](https://bevyengine.org) + and [GGRS] to implement a web game with peer-to-peer rollback netcode. A live + version is hosted [here][helsing_box_game]. + +More info is available in the [repository][Matchbox] and +[introductory blog post][matchbox_intro]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/pmsynh/introducing_matchbox_painless_peertopeer_webrtc), +[twitter](https://twitter.com/jkhelsing/status/1437044006068830215)_ + +[Matchbox]: https://github.com/johanhelsing/matchbox +[matchbox_intro]: https://johanhelsing.studio/posts/introducing-matchbox +[`matchbox_socket`]: https://crates.io/crates/matchbox_socket +[`matchbox_server`]: https://crates.io/crates/matchbox_server +[matchbox_demo]: https://github.com/johanhelsing/matchbox/tree/main/matchbox_demo +[helsing_box_game]: https://helsing.studio/box_game +[@jkhelsing]: https://twitter.com/jkhelsing +[GGRS]: https://gschup.github.io/ggrs + +### [Sparsey] + +[Sparsey] by [@LechintanTudor] is a new sparse set-based Entity Component System +(ECS) with component storage grouping, granular component change detection, +fallible systems and beautiful syntax. + +The goal of [Sparsey] is to provide a sparse set-based ECS which fully takes +advantage of its core data structure. An example of this is component storage +grouping, a feature which allows getting the best performance possible when +iterating over queries that match certain patterns described by the user, at +the cost of a performance penalty when inserting or removing components from +these storages. + +To get started with [Sparsey], check out the [Sparsey Cheat Sheet] and the +[examples on GitHub]! + +[Sparsey]: https://github.com/LechintanTudor/sparsey +[@LechintanTudor]: https://github.com/LechintanTudor +[Sparsey Cheat Sheet]: https://github.com/LechintanTudor/sparsey/blob/master/guides/cheat_sheet.md +[examples on GitHub]: https://github.com/LechintanTudor/sparsey/tree/master/examples + +### [bevy_verlet] + +![bevy_verlet](bevy_verlet.gif) + +[bevy_verlet] is a lib for projects using [Bevy Engine][bv_bevy] +providing a plugin to use [verlet Integration][bv_wikipedia] +physics. Very useful for Cloth simulation and joints, and less expensive than +complex physics engine, it is a nice addition to 2D or 3D projects. Making good +use of the Entity-Component-System architecture of the bevy engine, any entity +can become a `VerletPoint` and have physics applied to it. + +The crate also provides *sticks* which constrains the points in order to create +strings or cloth. With its modularity, you may customize the physics precision +(iterations), the gravity, and the physics time step to use. + +Not yet available on crates.io, the lib will be released after a few missing +features are provided: + +- Primitive collision +- Object batching (optimization) +- Global documentation + +You may contact the author on Twitter [@ManevilleF][ManevilleF] or join the +[discussion][bv_discussion]. + +[bevy_verlet]: https://github.com/ManevilleF/bevy_verlet +[bv_discussion]: https://twitter.com/ManevilleF/status/1437350669858611202?s=20 +[ManevilleF]: https://twitter.com/ManevilleF +[bv_bevy]: https://bevyengine.org/ +[bv_wikipedia]: https://en.wikipedia.org/wiki/Verlet_integration + +### [hecs] + +[hecs] is a fast, lightweight, and unopinionated archetypal ECS library. + +Version 0.6 introduces `PreparedQuery`, allowing query set-up cost to be +amortized across multiple invocations. `EntityRef`'s API was expanded to include +a single-entity `query` method, and now exposes the referenced entity's +handle. Finally, `World::spawn_batch` and `reserve` were optimized for better +performance when called repeatedly. + +[hecs]: https://github.com/Ralith/hecs + +### [ktx2][ktx2-github] + +A revamped and refactored version of @F3kilo's ktx2-reader, +this serves as a parsing library for the texture container format +of ktx2. This format allows you to store textures in formats that +GPU apis directly accept, without decoding costs. For more information, +[read the docs][ktx2-docs]. + +ktx2 writing support will come a future release. + +[ktx2-github]: https://github.com/BVE-Reborn/ktx2 +[ktx2-docs]: https://docs.rs/ktx2 + +### [rend3][rend3-github] + +{{ 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. +It comes with PBR materials and render routine out of the box and utilizes +GPU culling to enable incredible performance with such a simple API. + +There're many fun things in the pipeline including a full custom shader +system, both cpu and gpu side optimization, and more rendering features. + +The [v0.1 version][rend3-crates] was published on crates.io +([docs][rend3-docs] and [examples][rend3-examples]) and v0.2 is going +to be coming out very soon. + +[rend3-docs]: https://docs.rs/rend3 +[rend3-examples]: https://github.com/BVE-Reborn/rend3/tree/v0.1.2/examples +[rend3-github]: https://github.com/BVE-Reborn/rend3 +[rend3-crates]: https://crates.io/crates/rend3 + +### [imgui-rs][imgui-rs] v0.8 + +[imgui-rs][imgui-rs] is the Rust bindings for the Dear ImGui framework, +allowing users to easily build up complex debug widgets and tools. + +In [v0.8.0][v0.8.0], the library's API continued its overhaul to both be more +similar to the C++ API while feeling like native Rust. Specifically, +the odious `im_str!` macro was deprecated -- using inline strings directly +(and anything `AsRef`) simply works. Most functions also make extensive +use of RAII-style drop tokens to track `begin`/`end` calls. +Lastly, it was updated to use current Dear ImGui v1.84, and bound to +the new APIs, including the new Tables API. + +[imgui-rs]: https://github.com/imgui-rs/imgui-rs +[v0.8.0]: https://github.com/imgui-rs/imgui-rs/releases/tag/v0.8.0 + +### [Emergent AI][emergent-git] + +{{ 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 +and hierarchical architecture allows users to express a wide range of AI behaviors +complexity, from small scale, to big scale, allowing user to pick proper solution +to each AI problem using smaller building blocks. + +Along with the library, there is an +["Emergent AI - Smart agents and events for games"][emergent-book] book being +written with goal to explain in-depth to readers how modern AI systems works and +showing step by step process of how one could build them on their own. + +[psichix-twitter]: https://twitter.com/psichix +[emergent-git]: https://github.com/PsichiX/emergent/ +[emergent-book]: https://psichix.github.io/emergent/ + +### [hexagonal_pathfinding_astar] + +```txt + _______ + / E \ + _______/ (4,3) \ + / \ W:3 / + _______/ (3,2) \_______/ + / \ W:1 / + / (2,2) \_______/ + \ W:3 / + \_______/ + / \ + _______/ (2,1) \ + / \ W:3 / + _______/ (1,0) \_______/ + / S \ W:4 / + / (0,0) \_______/ + \ W:6 / + \_______/ +``` + +[hexagonal_pathfinding_astar] is an implementation of the A-Star pathfinding algorithm +tailored for traversing a bespoke collection of weighted hexagons. +It's intended to calculate the most optimal path to a target hexagon where you're +traversing from the centre of one hexagon to the next along a line orthogonal +to a hexagon edge. +Check out the project's [README][hexagonal_pathfinding_astar] for more info. + +[hexagonal_pathfinding_astar]: https://github.com/BlondeBurrito/hexagonal_pathfinding_astar + +### [pixels] v0.6 + +![Pixels logo](pixels.png) + +[pixels] by [@parasyte] is a tiny hardware-accelerated pixel frame buffer +based on wgpu. It gives you a pixel buffer and you can poke colors into it +(on the CPU side). The buffer is uploaded to the GPU as a texture, +and all scaling and clipping is handled by a default shader. +For additional control, you can add your own custom shaders for pre- and post-processing. + +The v0.6 release adds support for wgpu 0.10 which is a huge improvement. +The only breaking changes are reexports and an error variant name change. +In most cases, this upgrade is a drop-in replacement. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/pganne/pixels_060_release_announcement)_ + +[pixels]: https://github.com/parasyte/pixels +[@parasyte]: https://github.com/parasyte + +### [KAS] GUI v0.10 + +{{ 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: + +- KAS now supports dynamic linking, allowing faster builds. + Additionally using a faster linker (lld or mold) allows 6x improvement + on re-build speed for the Gallery example. +- Keyboard navigation has been revised to match standard desktop GUIs. +- Themes have been improved, with (better) shadows under pop-up menus + and (on one theme) under buttons. +- Crates have been reshuffled so that now (most) users only depend on kas. +- OpenGL on Linux is supported (mostly thanks to WGPU improvements). +- KAS-text now exposes its `fontdb::Database`, allowing text in SVGs. + +Also, the author notes that this may be the last release of [KAS] +because of the lack of interest to the project. + +_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 + + + +- [rust-gamedev/rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): + - [#636 "Better solution for hosting images (or the site as a whole)?"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/636); + - [#785 "Discussions section"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/785). +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#90 "Rust on Consoles"](https://github.com/rust-gamedev/wg/issues/90); + - [#113 "Rust GameDev Community Assets Store"](https://github.com/rust-gamedev/wg/discussions/113); + - [#115 "Official WG meeting"](https://github.com/rust-gamedev/wg/discussions/115). + +## Discussions + +- [/r/rust_gamedev](https://reddit.com/r/rust_gamedev): + - ["Is WGSL a good choice?"](https://reddit.com/r/rust_gamedev/comments/pvbv50/is_wgsl_a_good_choice). + - ["Unity files patent for ECS in game engines that would probably affect + many Rust ECS crates, including Bevy's"](https://reddit.com/r/rust/comments/pjtpkj/unity_files_patent_for_ecs). + +## Requests for Contribution + + + +- [Graphite is looking for contributors][graphite-contribute] to help reach + the 0.1 Alpha release and are participating as a [Hacktoberfest] project. +- [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 +[Hacktoberfest]: https://hacktoberfest.digitalocean.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://reddit.com/r/rust_gamedev/comments/q5fjyk/this_month_in_rust_gamedev_26), +[Twitter](https://twitter.com/rust_gamedev/status/1447294414607556613), +[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/026/kas-demo.gif b/content/news/026/kas-demo.gif new file mode 100644 index 000000000..ce4d1ca73 Binary files /dev/null and b/content/news/026/kas-demo.gif differ diff --git a/content/news/026/matchbox.png b/content/news/026/matchbox.png new file mode 100644 index 000000000..7b39a0029 Binary files /dev/null and b/content/news/026/matchbox.png differ diff --git a/content/news/026/molecoole_first.gif b/content/news/026/molecoole_first.gif new file mode 100644 index 000000000..fbedc8047 Binary files /dev/null and b/content/news/026/molecoole_first.gif differ diff --git a/content/news/026/monke-pizza.jpg b/content/news/026/monke-pizza.jpg new file mode 100644 index 000000000..230dece38 Binary files /dev/null and b/content/news/026/monke-pizza.jpg differ diff --git a/content/news/026/pixels.png b/content/news/026/pixels.png new file mode 100644 index 000000000..dbd851908 Binary files /dev/null and b/content/news/026/pixels.png differ diff --git a/content/news/026/podcast.jpeg b/content/news/026/podcast.jpeg new file mode 100644 index 000000000..0e3134937 Binary files /dev/null and b/content/news/026/podcast.jpeg differ diff --git a/content/news/026/rend3-scifi.jpg b/content/news/026/rend3-scifi.jpg new file mode 100644 index 000000000..0f662319e Binary files /dev/null and b/content/news/026/rend3-scifi.jpg differ diff --git a/content/news/026/rg3d_video.jpg b/content/news/026/rg3d_video.jpg new file mode 100644 index 000000000..aab941b02 Binary files /dev/null and b/content/news/026/rg3d_video.jpg differ diff --git a/content/news/026/rpg-cli.png b/content/news/026/rpg-cli.png new file mode 100644 index 000000000..0d812fbed Binary files /dev/null and b/content/news/026/rpg-cli.png differ diff --git a/content/news/026/starframe-islands.jpeg b/content/news/026/starframe-islands.jpeg new file mode 100644 index 000000000..ec5d5deb5 Binary files /dev/null and b/content/news/026/starframe-islands.jpeg differ diff --git a/content/news/026/supported_platforms.svg b/content/news/026/supported_platforms.svg new file mode 100644 index 000000000..d4b22fb8e --- /dev/null +++ b/content/news/026/supported_platforms.svg @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/news/026/veloren.jpg b/content/news/026/veloren.jpg new file mode 100644 index 000000000..492a2342c Binary files /dev/null and b/content/news/026/veloren.jpg differ diff --git a/content/news/026/weegames.jpg b/content/news/026/weegames.jpg new file mode 100644 index 000000000..8a046aac0 Binary files /dev/null and b/content/news/026/weegames.jpg differ diff --git a/content/news/027/all-is-cubes.jpg b/content/news/027/all-is-cubes.jpg new file mode 100644 index 000000000..7475460ff Binary files /dev/null and b/content/news/027/all-is-cubes.jpg differ diff --git a/content/news/027/berrycover.png b/content/news/027/berrycover.png new file mode 100644 index 000000000..411e343f5 Binary files /dev/null and b/content/news/027/berrycover.png differ diff --git a/content/news/027/bevy-webgl2.png b/content/news/027/bevy-webgl2.png new file mode 100644 index 000000000..2d78ef7d4 Binary files /dev/null and b/content/news/027/bevy-webgl2.png differ diff --git a/content/news/027/bevy_atmosphere.png b/content/news/027/bevy_atmosphere.png new file mode 100644 index 000000000..a3e9e9ebc Binary files /dev/null and b/content/news/027/bevy_atmosphere.png differ diff --git a/content/news/027/bevy_pen_tool2.gif b/content/news/027/bevy_pen_tool2.gif new file mode 100644 index 000000000..697b11a1c Binary files /dev/null and b/content/news/027/bevy_pen_tool2.gif differ diff --git a/content/news/027/bevy_verlet.gif b/content/news/027/bevy_verlet.gif new file mode 100644 index 000000000..13577371c Binary files /dev/null and b/content/news/027/bevy_verlet.gif differ diff --git a/content/news/027/chaos-theory.gif b/content/news/027/chaos-theory.gif new file mode 100644 index 000000000..8f3304cbe Binary files /dev/null and b/content/news/027/chaos-theory.gif differ diff --git a/content/news/027/crunda.gif b/content/news/027/crunda.gif new file mode 100644 index 000000000..cfc216f31 Binary files /dev/null and b/content/news/027/crunda.gif differ diff --git a/content/news/027/gamedev-meetup.png b/content/news/027/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/027/gamedev-meetup.png differ diff --git a/content/news/027/gms-talk.png b/content/news/027/gms-talk.png new file mode 100644 index 000000000..22522318c Binary files /dev/null and b/content/news/027/gms-talk.png differ diff --git a/content/news/027/godot-rust.png b/content/news/027/godot-rust.png new file mode 100644 index 000000000..01e8c5edb Binary files /dev/null and b/content/news/027/godot-rust.png differ diff --git a/content/news/027/graph_game.gif b/content/news/027/graph_game.gif new file mode 100644 index 000000000..a254cb3d7 Binary files /dev/null and b/content/news/027/graph_game.gif differ diff --git a/content/news/027/hydrofoil1_1024.png b/content/news/027/hydrofoil1_1024.png new file mode 100644 index 000000000..9705d8cb6 Binary files /dev/null and b/content/news/027/hydrofoil1_1024.png differ diff --git a/content/news/027/index.md b/content/news/027/index.md new file mode 100644 index 000000000..cc6efb8a0 --- /dev/null +++ b/content/news/027/index.md @@ -0,0 +1,847 @@ ++++ +title = "This Month in Rust GameDev #27 - October 2021" +transparent = true +date = 2021-11-07 ++++ + + + + + +Welcome to the 27th 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) +- [Meeting Minutes](#meeting-minutes) +- [Discussions](#discussions) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The tenth Rust Gamedev Meetup happened in October. 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 [November 13th][rust-meetup-oct-time], fill +out [this form][gamedev-meetup-form]. + +[gamedev-meetup-video]: https://youtu.be/ta2HY4lD3iM +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[rust-meetup-oct-time]: https://everytimezone.com/s/1f02d66b + +## Game Updates + +### [Hydrofoil Generation Sailing] + +![hgs_screen](hydrofoil1_1024.png) + +[Hydrofoil Generation Sailing] ([Facebook](https://www.facebook.com/HydrofoilGenerationSailing), +[Discord](https://discord.gg/DtKgt2duAy)) 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 game is the brain child of industry veteran Stefano Casillo +(of Assetto Corsa fame) and features a custom made 3D engine based on DirectX11 +via winapi-rs. + +An engine conversion to WGPU is currently under evaluation in order to +guarantee an easier port to platform such as Steam Deck or even mobile in the +future. + +Early Access release on Steam is expected in mid 2022. + +[Hydrofoil Generation Sailing]: https://www.facebook.com/HydrofoilGenerationSailing/ + +### [The Process] + +{{ 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! + +For the past two months the project has seen some slow but steady progress. Work +has started towards a simple combat system that will have the engineers fighting +hordes of robots to defend their factories. + +This month the game has seen the following changes and improvements: + +- New assets like + [a robot enemy](https://twitter.com/PlayTheProcess/status/1436722776186966023) + (concept by @Kath_Art_ic, modelling by @mkdirsrc), + [a shoulder mounted gun](https://twitter.com/PlayTheProcess/status/1439970905220960259) + and + [new machine icons](https://twitter.com/PlayTheProcess/status/1455232744573788162). +- A new system to attach armor-like models to in-game characters. +- Foundations of a combat system. +- Carrockets™! 🥕🚀 [(1)](https://twitter.com/PlayTheProcess/status/1445098719326658562) + and + [(2)](https://twitter.com/PlayTheProcess/status/1454787650657951745) + +[The Process]: https://twitter.com/PlayTheProcess + +### [LibraCity] - city planning on a needle! + +![LibraCity screenshot](libracity.png) + +[LibraCity] is a puzzle city planning game by [@djeedai] where you need to build +a city while balancing it on a needle (the center of the board). It was built for +[Ludum Dare 49] using the [Bevy Engine], and is a first-time use of the engine. + +Post-jam, a webassembly version was added and published, which now allows +[playing the game online](https://djeedai.github.io/libracity/). + +The code source is freely [available on GitHub](https://github.com/djeedai/libracity). + +[LibraCity]: https://djeedai.github.io/libracity/ +[Ludum Dare 49]: https://ldjam.com/events/ludum-dare/49/libra-city +[@djeedai]: https://twitter.com/djeedai +[Bevy Engine]: https://bevyengine.org/ + +### [Chaos Theory] - gamified double pendulum simulator + +![Chaos Theory Gif](chaos-theory.gif) + +[Chaos Theory] is a tiny HTML5 game by [@necauqua] where you can draw and +simulate pendulums with a few goals and restrictions per level. +It was done for [Ludum Dare 49][Chaos Theory] with a help of a small custom +engine with Rust being compiled to WASM and drawing shapes to an HTML5 canvas. + +You can play the game [online][chaos-theory-online], and the source code +is available [here][chaos-theory-src] and +[here][chaos-theory-engine-src]. + +[Chaos Theory]: https://ldjam.com/events/ludum-dare/49/chaos-theory-1 +[@necauqua]: https://twitter.com/necauqua +[chaos-theory-online]: https://ld49.necauqua.dev +[chaos-theory-src]: https://github.com/necauqua/chaos-theory +[chaos-theory-engine-src]: https://github.com/necauqua/ld-game-engine + +### [Me And My Unicycle] + +{{ 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]. + +Following the LD49 theme "unstable", the game is about riding a unicycle +with challenging controls. Try making it through each level without falling. + +All assets are self-made. The developer had a lot of fun recording audio and +sound effects! + +[Me And My Unicycle]: https://niklme.itch.io/me-and-my-unicycle +[Bevy]: https://github.com/bevyengine/bevy +[@nikl_me]: https://twitter.com/nikl_me +[mamu-source]: https://github.com/NiklasEi/me_and_my_unicycle + +### [Crunda][crunda page] + +![image/crunda gameplay](crunda.gif) + +[Crunda][crunda page] is a game created in 48 hours for Ludum Dare 49. + +Its unique wobbly planets are controlled by a Rust library. + +Crunda was created by [Dan Slocombe], came third, and was rated the +most fun competition game! The [sources can be found here][crunda source]. + +[crunda page]: https://ldjam.com/events/ludum-dare/49/crunda +[crunda source]: https://github.com/danslocombe/crunda_ludum_dare_49 +[Dan Slocombe]: https://twitter.com/SLCMB/ + +### [Berry Run] + +![berry](berrycover.png) + +[Berry Run] is a community stream meme game by [@bombfuse_dev] built on top of +[Emerald Engine]. It's centered around the Twitch streamer [@berrybebopboy] and +was built in about 2 days. + +Help Berry run as far as they can without tripping and falling! + +> Dodge the babies (no kids, no babies), evade the grannies +> (they're heading to the grand canyon), +> and don't touch belf (belf is sacred). +> Also a bunch of dunces left their logs and rocks lying around, +> better not to touch those, it would be rude to touch someone's logs and rocks. + +[Berry Run]: https://bombfuse.itch.io/berry-run/ +[Emerald Engine]: https://github.com/Bombfuse/emerald +[@bombfuse_dev]: https://twitter.com/bombfuse_dev +[@berrybebopboy]: https://twitter.com/berrybebopboy + +### [Lonely Star] + +![Lonely Star screenshot](lonely-star.png) + +[Lonely Star] is a 2D 'endless runner' game by [@17cupsofcoffee], featuring +simple generative music. It was built with [Tetra] back in February 2020, +for Weekly Game Jam 135. + +This month, it was made [open-source][lonely-star-source], and received a +small update to improve the UI and fix a few bugs. + +[Lonely Star]: https://17cupsofcoffee.itch.io/lonely-star +[Tetra]: https://github.com/17cupsofcoffee/tetra +[@17cupsofcoffee]: https://twitter.com/17cupsofcoffee +[lonely-star-source]: https://github.com/17cupsofcoffee/lonely-star + +### [Soldank] + +![Soldank](https://raw.githubusercontent.com/smokku/soldank/master/sshot.png) + +[Soldank] ([GitHub](https://github.com/smokku/soldank), +[Discord](https://discord.gg/cTaC4UtqE6)) by [@smokku](https://twitter.com/smokkku) +is an open source clone of [Soldat] engine. It aims for full compatibility +with original game files, mods and gameplay with modernized +graphics engine and multiplayer networking code. + +Recent developments include: + +- Engine/game code split +- Command Line Interface +- [Rhai] scripting +- `hecs_rapier` integration +- Key/mouse-binding support +- Soldat's `.cfg` files support +- Custom debug shapes rendering +- Performance degradation fix +- Refactored code to build on `hecs` ECS +- ECS entities debug UI + +The developer have also written a blog post: +'_[Engine and scripting](https://abadcafe.wordpress.com/2021/11/01/engine-and-scripting/)_' + +[Soldank]: https://github.com/smokku/soldank +[Soldat]: http://soldat.pl/ +[Rhai]: http://rhai.rs/ + +### [Graph Game] + +{{ 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 +[browser](https://vrixyz.github.io/graph_nav/) - click on colored triangles, +guess the rules and survive as long as possible! + +Development has just begun, and the future of the project is not clear - +the developer welcomes you to come and discuss next steps on the game's +[Discord server][graph-game-discord]. + +[Graph Game]: https://vrixyz.github.io/graph_nav/ +[graph-game-github]: https://github.com/Vrixyz/graph_nav +[graph-game-discord]: https://discord.gg/ZeRkj8pD4n + +### [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. It is being produced by [@masonremaley][wor-mason-remaley]. + +Latest developments: + +- Way of Rhea now has a [free demo available on Steam][wor] +- Way of Rhea was shown at [PAX West][wor-pax-west] this year (as were a couple + other Rust games!), and will also be showcased at [MAGWest][wor-magwest] +- A new trailer showing off new level art [was published][wor-trailer] +- Additional animation work, [visuals][wor-wildlife], and puzzles have been +added to the game +- Improvements were made to the undo system, the tutorial level, and the +dialogue system in response to user feedback +- Some Proton compatibility problems were fixed, some visual glitches were +fixed, and support was added for adaptvie vsync + +You can stay up to date on the latest developments of Way of Rhea by +[following it on Steam][wor], or signing up for +[the mailing list.][wor-newsletter] + +[wor]: https://store.steampowered.com/app/1110620/Way_of_Rhea/?utm_campaign=tmirgd&utm_source=n27 +[wor-mason-remaley]: https://twitter.com/masonremaley +[wor-pax-west]: https://west.paxsite.com/ +[wor-magwest]: https://www.magwest.org/ +[wor-trailer]: https://www.youtube.com/watch?v=46ELQYaH0uw +[wor-wildlife]: https://twitter.com/AnthropicSt/status/1448056148138119169 +[wor-newsletter]: https://www.anthropicstudios.com/newsletter/signup + +### [PaddlePunks][paddlepunks-itch] + +{{ 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 +netcode. The game takes cues from both fighting games and arcade classics, and +besides netplay supports local play against another human or several levels of +AI. + +You can download and play the game now on [itch.io][paddlepunks-itch], or +join the [Discord][paddlepunks-discord] to chat with the developer and other +players. Updates are also posted to [Twitter][paddlepunks-twitter]. + +[paddlepunks-twitter]: https://twitter.com/sov_gott_games +[paddlepunks-itch]: https://sovgott.itch.io/paddlepunks +[paddlepunks-discord]: https://discord.gg/cpPDeVcWxc + +### [Veloren][veloren] + +{{ 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. + +In October, Veloren hit 10,000 commits, as well as 10,000 members on the Discord +server! Shrubs got added, along with improvements to rivers, and the +addition of waterfalls. There have been efforts to diagnose some network issues +that have been causing downloads to not work for some people. Crafting is going +through overhauls on the backend. [New aurora shaders][veloren-aurora-video] +were added as well. + +Initial ideas are being discussed to try and improve the +amount of asset files that have to be downloaded with each update of the game, +which will help improve the 200MB that has to be downloaded after each nightly +update. New jewelery has been added, and sneaking is being improved to make +agents in the game react better to it. Ongoing worldgen improvemnts are also +being made as we head into November. + +October's full weekly devlogs: "This Week In Veloren...": +[#140][veloren-140], +[#141][veloren-141], +[#142][veloren-142], +[#143][veloren-143]. + +[veloren]: https://veloren.net +[veloren-140]: https://veloren.net/devblog-140 +[veloren-141]: https://veloren.net/devblog-141 +[veloren-142]: https://veloren.net/devblog-142 +[veloren-143]: https://veloren.net/devblog-143 +[veloren-aurora-video]: https://www.youtube.com/watch?v=60kt915avjI + +## Engine Updates + +### [Amethyst - Starting Fresh][amethyst] + +![amethyst logo](/amethyst-logo.png) + +This month, the developers of the Amethyst game engine +[announced that they would be winding down development][amethyst]. + +The Amethyst Foundation, however, lives on! It will be shifting focus +to support the wider Rust game development ecosystem, through +engine-agnostic libraries, curated guides/lists, and more inititives yet +to be announced. + +[amethyst]: https://amethyst.rs/posts/amethyst--starting-fresh + +### [All is Cubes][All is Cubes] 0.3.0 + +[![Screenshot of All is Cubes][all-is-cubes-screen]][all-is-cubes-screen] + +All is Cubes ([GitHub][All is Cubes], [Crates.io][all-is-cubes-cr]) by [kpreid] +is a game/engine for worlds made of blocks made of voxels. It is intended to be +usable both as an engine or rendering library, or as a game with built-in +editor/programming functionality (genre(s) to be determined). While the project +is still highly incomplete and API-unstable, the 0.3.0 release marks a lot of +now-usable functionality ([changelog][all-is-cubes-changelog]): + +- UI: mouselook, multiple example scenes, inventory with stacks, and rendering + to image files. +- Simulation/mechanics: character collision against arbitrary voxel shapes, + much-improved light propagation, transactional state updates (all-or-nothing, + internally order-independent), and “behaviors” attached to game objects for + scripting/animation. +- Rendering: high-voxel-count blocks (incomplete, but usable for text as seen in + the above screenshot), “smooth lighting” (interpolated across faces), frustum + culling, and correct sRGB-versus-linear color handling. + +The next planned milestone is saving/loading. + +[All is Cubes]: https://github.com/kpreid/all-is-cubes/ +[all-is-cubes-cr]: https://crates.io/crates/all-is-cubes +[all-is-cubes-screen]: all-is-cubes.jpg +[all-is-cubes-changelog]: https://github.com/kpreid/all-is-cubes/blob/main/CHANGELOG.md#030-2021-10-09 +[kpreid]: https://github.com/kpreid + +### [Tetra] 0.6.6 + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. After +a few quiet months, version 0.6.6 has been released, featuring: + +- A big overhaul of the keyboard API, with better support for international + layouts +- Lots of new functions for manipulating the game window +- A long-requested [ECS example][tetra-ecs] +- Bugfixes and docs improvements + +For more details, see the [changelog][tetra-changelog]. + +[Tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-ecs]: https://github.com/17cupsofcoffee/tetra/blob/main/examples/ecs.rs + +## Learning Material Updates + +### [GameDev Mini Symposium][gms-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 +[Herbert Wolverson][the-bracket], writer of '[Hands-on Rust][hands-on-rust]', +who gave a talk on using Rust for game development. + +This talk is now available to [view on Herbert's YouTube channel][gms-talk]. + +[the-bracket]: https://twitter.com/herberticus +[hands-on-rust]: https://pragprog.com/titles/hwrust/hands-on-rust/ +[gms-talk]: https://www.youtube.com/watch?v=OzUsPi4kHes + +## Tooling Updates + +### [SPV] + +![SPV-0.1.0 screenshot](spv-0.1.0.png) + +[SPV] by [Albin Sjögren] +is a calculator utility for working with astronomical position and velocity data. + +What was added for the first alpha release: + +- A new UI +- Corrected vector normalizing +- JSON and TXT exporting + +The primary features that are being worked on: + +- A crate version +- Output file structure +- Batch processing + +For any feature requests, reach out to the developer on [Discord][spv-discord] +or [GitHub][spv]. + +[SPV]: https://github.com/AlbinSjoegren/SPV +[spv-discord]: https://discordapp.com/users/258254056185659392 +[Albin Sjögren]: https://github.com/AlbinSjoegren + +## Library Updates + +### [wgpu]-0.11 release + +{{ 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 +is WebGL2 support. With some caveats, users no longer need to wait for +WebGPU in the browsers in order to deploy on the Web. Support is still +a bit rough, and patches come out regularly, but most examples work. + +@kvark also visited [Rust LA Meetup] to [talk about Naga] +and the history of processing shaders with Rust. + +[wgpu]: https://github.com/gfx-rs/wgpu +[gfx-rs blog]: https://gfx-rs.github.io/2021/10/07/release-0.11.html +[Rust LA Meetup]: https://rustlang.la/ +[talk about Naga]: https://vimeo.com/632377558 + +### [rend3]-0.2 Release + +{{ 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. + +As part of their monthly release schedule, the developers are excited to +announce the release of rend3-0.2. The most prominent change is the ability +to use fully customizable materials. Any combination of data and textures can +now be used as a material for custom render routines. This unties the user +from PBR-based materials. + +Along with the customizability that comes with this change, the CPU time +required to render a complex scene is 7x less due to highly optimal data +structures. For more information see [this talk][rend3-perf-talk] at the Rust +graphics meetup. + +The [v0.2 version][rend3-crates] was published on crates.io +([docs][rend3-docs] and [examples][rend3-examples]). The 0.3 release is +just a week away and further improves customizability. + +[rend3]: https://github.com/BVE-Reborn/rend3 +[rend3-perf-talk]: https://www.youtube.com/watch?v=F0wGz5UJTrY +[rend3-docs]: https://docs.rs/rend3 +[rend3-examples]: https://github.com/BVE-Reborn/rend3/tree/v0.2/examples +[rend3-crates]: https://crates.io/crates/rend3 + +### [hecs_rapier] 0.11.0 + +[hecs_rapier] is a physics engine for hecs ECS. +It is a direct port of [bevy_rapier2d]. + +Recent development added joints and physics_hooks support. +This makes `hecs_rapier` feature complete, with `bevy_rapier2d` feature parity. + +[hecs_rapier]: https://github.com/smokku/hecs_rapier +[bevy_rapier2d]: https://github.com/dimforge/bevy_rapier + +### [bevy_atmosphere] 0.1.1 + +![dawn in bevy_atmosphere](bevy_atmosphere.png) + +[bevy_atmosphere] ([GitHub][bevy_atmosphere]) by @JonahPlusPlus +is a procedural sky plugin for Bevy. + +By adding the `AtmospherePlugin`, users get a skybox around the camera in their scene. +Users can also set the appearance of the sky adding a `AtmosphereMat` resource. + +0.1.0 and 0.1.1 have been released on [crates.io](https://crates.io/crates/bevy_atmosphere). + +0.1.1 changes the default position of the sun to be in the sky, +so only the plugin is needed to get a Unity-like sky. + +[bevy_atmosphere]: https://github.com/JonahPlusPlus/bevy_atmosphere + +### [bevy_kira_audio] + +[bevy_kira_audio] is a [Bevy] plugin that integrates the audio library [Kira] +into [Bevy] applications. + +In the latest version `0.6.0`, you can load files with custom semantic +durations and play looped audio with an intro. The plugin now also cleans up +old sound instances. Following Bevy, [bevy_kira_audio] is now licensed under +dual MIT + Apache 2.0, and the library will no longer crash on systems without +an audio device. + +[bevy_kira_audio]: https://github.com/NiklasEi/bevy_kira_audio +[Bevy]: https://github.com/bevyengine/bevy +[Kira]: https://github.com/tesselode/kira + +### [bevy_verlet] + +![bevy_verlet](bevy_verlet.gif) + +[bevy_verlet] is a lib for projects using [Bevy Engine][bv_bevy] +providing a plugin to use [verlet integration][bv_wikipedia] +physics. Very useful for cloth simulation and joints, and less expensive than +complex physics engine, it is a nice addition to 2D or 3D projects. Making good +use of the Entity-Component-System architecture of the bevy engine, any entity +can become a `VerletPoint` and have physics applied to it. + +The crate also provides *sticks* which constrains the points in order to create +strings or cloth. With its modularity, you may customize the physics precision +(iterations), the gravity, and the physics time step to use. + +New features: + +- Query parallel batching and custom batching size +- Global documentation +- Fixed issues with timesteps +- Improved examples + +You may contact the author on Twitter at [@ManevilleF][ManevilleF] or join the +[discussion][bv_discussion]. + +[bevy_verlet]: https://github.com/ManevilleF/bevy_verlet +[bv_discussion]: https://twitter.com/ManevilleF/status/1437350669858611202?s=20 +[ManevilleF]: https://twitter.com/ManevilleF +[bv_bevy]: https://bevyengine.org/ +[bv_wikipedia]: https://en.wikipedia.org/wiki/Verlet_integration + +### [Bevy Pen Tool][bevy-pen-tool] + +![bevy_pen_tool2](bevy_pen_tool2.gif) + +Bevy Pen Tool is a plugin that helps developers make 2D paths using +Bezier curves. Its user interface provides functionality for: + +- spawning Bezier curves, +- moving end points and control points of Bezier curves, +- linking individual Bezier curves to each other, +- grouping curves, +- saving and loading paths as look-up tables + (typically for animations and agent movement), +- generating arbitrary 2D meshes that fill the interior of a path + using the Lyon crate, +- generating a mesh that follows a path like a road, +- saving meshes and roads in ".obj" format, + +A stable version of Bevy Pen Tool should come out as a crate shortly +after Bevy 0.6 shows up. Here is a link to the [repo for more +information][bevy-pen-tool]. + +[bevy-pen-tool]: https://github.com/eliotbo/bevy_pen_tool + +### [Sparsey] + +[Sparsey] by [@LechintanTudor] is a sparse set-based Entity Component System +(ECS) with component storage grouping, granular component change detection, +fallible systems and beautiful syntax. + +The latest release (0.4) adds support for optional system parameters, which +allows `Option>` and `Option>` to be used in system functions. + +This release also features a refactored `ComponentStorage` which makes adding, +removing and swapping components faster, swapping being especially important +since it enables component grouping, a features that makes certain queries +specified by the user extremely fast. + +Finally, some implementation details were hidden from the public API and the +`#[must_use]` attribute was added to functions whose results should not be +discarded. + +[Sparsey]: https://github.com/LechintanTudor/sparsey +[@LechintanTudor]: https://github.com/LechintanTudor + +### [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. + +Recent developments have added [foundational support to async][gd-async] +that enables users to make use of the Rust async runtimes with the Godot Engine +(thanks to chitoyuu for the PR). + +In addition to the foundational support, lyonbeckers was kind enough to +include a [new recipe in the User Guide][gd-async-recipe] that covers +how to configure async with `tokio`. + +The team also merged several smaller bug fixes in [#791][gd-791], [#795][gd-795], +and [#800][gd-800] and is making steady progress towards version 0.10.0. + +Finally, the team has recently added a [third party project][gd-book-projects] +section in the book to help promote games, applications, and libraries/tools +that are working with godot-rust. If you have a project that you would like to +be included, please feel free to reach out to the godot-rust team. + +[gd-async]: https://github.com/godot-rust/godot-rust/pull/804 +[gd-async-recipe]: https://github.com/godot-rust/book/pull/44 + +[gd-800]: https://github.com/godot-rust/godot-rust/pull/800 +[gd-795]: https://github.com/godot-rust/godot-rust/pull/795 +[gd-791]: https://github.com/godot-rust/godot-rust/pull/791 +[gd-788]: https://github.com/godot-rust/godot-rust/pull/788 + +[gd-book-projects]: https://godot-rust.github.io/book/projects.html + +[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 + +## Other News + + + +- Other game updates: + - LD49 [Unbalanced Brawl](https://ldjam.com/events/ludum-dare/49/unbalanced-brawl) + ([GitHub](https://github.com/yopox/LD49)) + is an autochess with ever-changing rules in the shop. + - LD49 [Chevalchemy](https://ldjam.com/events/ludum-dare/49/chevalchemy-a-hoof-of-concept) + ([GitHub](https://github.com/xlambein/ldjam49)) is a game where you play + as a horse alchemist working for the great Neighcolas Flamel. + - LD49 [Proc Spider](https://ldjam.com/events/ludum-dare/49/procedural-spider) + ([GitHub](https://github.com/darthdeus/procedural-spider)) + is a small game where you play a big spider chasing small spiders. + - [mk48.io] ([GitHub](https://github.com/SoftbearStudios/mk48)) is + an online multiplayer naval combat game, in which you take command + of a ship and sail your way to victory. + - Tweets about [Bitgun] progress: + [new inventory and weapon systems](https://twitter.com/LogLogGames/status/1449485172114591749), + [new item pickup](https://twitter.com/LogLogGames/status/1449742242734772225), + [jumping zombies](https://twitter.com/LogLogGames/status/1450922044065992708), + [death animation](https://twitter.com/LogLogGames/status/1451088866052489218). + - [An update about the progress of Rust version of Nox Futura][noxfutura-devlog]. + - [A Recall Singularity][recall] shared a [YouTube video](https://youtube.com/watch?v=nsjnCZslNdg) + that shows new shooting sounds, camera movement, and asteroid dragging. +- Other learning material updates: + - [A video by TanTan](https://youtube.com/watch?v=G-IuH6R-yD8) + about rewriting a voxel game three times: in Unity, Rust (no engine) and Bevy. +- Other engine updates: + - [A recording of the first rg3d live-coding stream](https://reddit.com/r/rust/comments/qena0b/media_rg3d_game_engine_live_coding). + - The first prototype of [VNgine] - Visual Novel Engine - + [was announced on /r/rust](https://reddit.com/r/rust/comments/pyvcen/first_prototype_of_vngine). + - Also, a general purpose graphics engine [Blue Engine][blue-engine] + [was announced on /r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/q4rana/blue_engine). +- Other tooling updates: + - [Fearless-NES] is a NES emulator written using egui, macroquad, and GilRs. + - [FishSteam] is a tool for deploying SteamWorks-enabled steam builds + for Windows/macOS/Linux without SteamWorks SDK on a CI. +- Other library updates: + - [Crevice v0.8](https://github.com/LPGhatguy/crevice/blob/main/CHANGELOG.md#080---2021-10-26) + brings a direct support for many math libraries + and allows to generate GLSL source from structs. + - [SPV] 0.0.6 is the second pre-alpha release of a celestial object position + and velocity calculator. + - [Thunderdome] generational arena library released + [0.4..0.5 versions](https://github.com/LPGhatguy/thunderdome/blob/main/CHANGELOG.md). + - [egui 0.15](https://reddit.com/r/rust/comments/qeue67/announcing_egui_015) brings: + syntax highlighting, horizontal scrolling, new monospace font, + and a new opt-in glow backend for eframe. + - [New puffin-egui/puffin-viewer](https://twitter.com/ernerfeldt/status/1447961523696066564) + allows selection and manipulation of multiple frames. + - [Shalrath] is a fully-safe Rust representation and nom parser for Quake map files. + +[Bitgun]: https://store.steampowered.com/app/1673940/BITGUN +[@LogLogGames]: https://twitter.com/LogLogGames +[noxfutura-devlog]: https://reddit.com/r/roguelikedev/comments/pqbvv1/sharing_saturday_380/hdbx5xt +[mk48.io]: https://mk48.io +[recall]: https://twitter.com/RecallSingular1 +[Fearless-NES]: https://github.com/TomasKralCZ/Fearless-NES +[FishSteam]: https://github.com/not-fl3/FishFight-The-Prequel/tree/main/fishsteam +[VNgine]: https://gitlab.com/porky11/vngine-rs +[blue-engine]: https://github.com/ElhamAryanpur/BlueEngine +[Crevice]: https://github.com/LPGhatguy/crevice +[SPV]: https://github.com/AlbinSjoegren/SPV +[Thunderdome]: https://github.com/LPGhatguy/thunderdome/blob/main/CHANGELOG.md +[Shalrath]: https://github.com/QodotPlugin/shalrath + +## Meeting Minutes + +There is currently discussion ongoing around bringing back the +Rust GameDev Working Group's regular meetings. + +If you are interested in getting involved, please join the +[discussion thread](https://github.com/rust-gamedev/wg/discussions/115) +on the working group's issue tracker! + +## Discussions + +### [Async Game Server Design][async-game-server] + +On the Rust user forum, there was [a post][async-game-server] +asking how to use async/await (more specifically, `tokio` and +`tokio_tungstenite`) to develop a multiplayer game server. +The responses contain some useful ideas and advice which +may be helpful for other people's projects! + +[async-game-server]: https://users.rust-lang.org/t/tokio-tungstenite-async-game-server-design/65996 + +## 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://www.reddit.com/r/rust/comments/qoy5rv/this_month_in_rust_gamedev_27_october_2021/), +[Twitter](https://twitter.com/rust_gamedev/status/1457461009833238528), +[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/027/libracity.png b/content/news/027/libracity.png new file mode 100644 index 000000000..3519558a1 Binary files /dev/null and b/content/news/027/libracity.png differ diff --git a/content/news/027/lonely-star.png b/content/news/027/lonely-star.png new file mode 100644 index 000000000..d1e45d51f Binary files /dev/null and b/content/news/027/lonely-star.png differ diff --git a/content/news/027/me_and_my_unicycle_cover.png b/content/news/027/me_and_my_unicycle_cover.png new file mode 100644 index 000000000..b324b04f0 Binary files /dev/null and b/content/news/027/me_and_my_unicycle_cover.png differ diff --git a/content/news/027/paddlepunks-gameplay.gif b/content/news/027/paddlepunks-gameplay.gif new file mode 100644 index 000000000..5387e51bf Binary files /dev/null and b/content/news/027/paddlepunks-gameplay.gif differ diff --git a/content/news/027/rend3-scifi.jpg b/content/news/027/rend3-scifi.jpg new file mode 100644 index 000000000..6d8b5ce54 Binary files /dev/null and b/content/news/027/rend3-scifi.jpg differ diff --git a/content/news/027/spv-0.1.0.png b/content/news/027/spv-0.1.0.png new file mode 100644 index 000000000..4c5dc690d Binary files /dev/null and b/content/news/027/spv-0.1.0.png differ diff --git a/content/news/027/the_process.gif b/content/news/027/the_process.gif new file mode 100644 index 000000000..c66737079 Binary files /dev/null and b/content/news/027/the_process.gif differ diff --git a/content/news/027/veloren.jpg b/content/news/027/veloren.jpg new file mode 100644 index 000000000..0453d1f0c Binary files /dev/null and b/content/news/027/veloren.jpg differ diff --git a/content/news/027/wor-capsule.jpg b/content/news/027/wor-capsule.jpg new file mode 100644 index 000000000..ef169ea75 Binary files /dev/null and b/content/news/027/wor-capsule.jpg differ diff --git a/content/news/028/bendyworm.gif b/content/news/028/bendyworm.gif new file mode 100644 index 000000000..5b56b46c7 Binary files /dev/null and b/content/news/028/bendyworm.gif differ diff --git a/content/news/028/bitgun-zombies.jpeg b/content/news/028/bitgun-zombies.jpeg new file mode 100644 index 000000000..edaa8e453 Binary files /dev/null and b/content/news/028/bitgun-zombies.jpeg differ diff --git a/content/news/028/cac-crossing.png b/content/news/028/cac-crossing.png new file mode 100644 index 000000000..b67c5e4e3 Binary files /dev/null and b/content/news/028/cac-crossing.png differ diff --git a/content/news/028/country_slice_gif.gif b/content/news/028/country_slice_gif.gif new file mode 100644 index 000000000..fed88f2b7 Binary files /dev/null and b/content/news/028/country_slice_gif.gif differ diff --git a/content/news/028/fishfight.gif b/content/news/028/fishfight.gif new file mode 100644 index 000000000..4692d05a3 Binary files /dev/null and b/content/news/028/fishfight.gif differ diff --git a/content/news/028/flesh.gif b/content/news/028/flesh.gif new file mode 100644 index 000000000..4331fded6 Binary files /dev/null and b/content/news/028/flesh.gif differ diff --git a/content/news/028/gamedev-meetup.png b/content/news/028/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/028/gamedev-meetup.png differ diff --git a/content/news/028/godot-rust-modules.png b/content/news/028/godot-rust-modules.png new file mode 100644 index 000000000..ae370493d Binary files /dev/null and b/content/news/028/godot-rust-modules.png differ diff --git a/content/news/028/graphite_splash.png b/content/news/028/graphite_splash.png new file mode 100644 index 000000000..726e67a94 Binary files /dev/null and b/content/news/028/graphite_splash.png differ diff --git a/content/news/028/hgs5.jpg b/content/news/028/hgs5.jpg new file mode 100644 index 000000000..4720b86fe Binary files /dev/null and b/content/news/028/hgs5.jpg differ diff --git a/content/news/028/hgs5.png b/content/news/028/hgs5.png new file mode 100644 index 000000000..1522ba27c Binary files /dev/null and b/content/news/028/hgs5.png differ diff --git a/content/news/028/hor-bonus.jpg b/content/news/028/hor-bonus.jpg new file mode 100644 index 000000000..69f1a46d8 Binary files /dev/null and b/content/news/028/hor-bonus.jpg differ diff --git a/content/news/028/idu.gif b/content/news/028/idu.gif new file mode 100644 index 000000000..20f66c4f6 Binary files /dev/null and b/content/news/028/idu.gif differ diff --git a/content/news/028/index.md b/content/news/028/index.md new file mode 100644 index 000000000..f7ad574d6 --- /dev/null +++ b/content/news/028/index.md @@ -0,0 +1,920 @@ ++++ +title = "This Month in Rust GameDev #28 - November 2021" +transparent = true +date = 2021-12-09 ++++ + + + + + +Welcome to the 28th 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 eleventh Rust Gamedev Meetup happened in November. 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 [December 11th][rust-meetup-dec-time], fill out +[this form][gamedev-meetup-form]. + +[gamedev-meetup-video]: https://youtu.be/nLyiLnC5mn4 +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[rust-meetup-dec-time]: https://everytimezone.com/s/bb9cdaec + +## Game Updates + +### Flesh + +{{ 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 +include: + +- Support different types of ships that players can choose. +- Add a melee weapon. + +[Flesh]: https://store.steampowered.com/app/1660850/Flesh/ +[@im_oab]: https://twitter.com/im_oab +[Tetra]: https://github.com/17cupsofcoffee/tetra + +### [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. + +The source is available MIT licensed on [GitHub][One-Click Ninja], and you can +[play in your browser on itch.io][One-Click Ninja itch.io]. + +[One-Click Ninja]: https://github.com/fluffysquirrels/one-click-ninja +[One-Click Ninja itch.io]: https://fluffysquirrels.itch.io/one-click-ninja +[1-Button Jam 2021]: https://itch.io/jam/1-button-jam-2021 +[Bevy]: https://bevyengine.org + +### [Fish Fight: The Prequel][fishfight-steam] + +[![fishfight](fishfight.gif)][fishfight-steam] + +Fish Fight is a fast-paced 2D brawler game, played by 1-4 players online or on a +shared screen, built with [macroquad] game engine. + +This month it got a trailer, and the game is now available to wishlist on +[Steam][fishfight-steam]! + +[macroquad]: https://github.com/not-fl3/macroquad +[fishfight-github]: https://github.com/FishFight/FishFightThePrequel +[fishfight-steam]: https://store.steampowered.com/app/1771640/Fish_Fight_The_Prequel/ + +### [BITGUN][bitgun-steam] + +[![Gameplay screenshot with lots of zombies in a tunnel](bitgun-zombies.jpeg)][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 recently implemented a mission system, where you can select one of [three +types of missions][bitgun-missions] to go to from the central camp. One is to +defend supplies from a horde of zombies, the second is to search a facility for some +object or clear all the zombies and the last one is to fight your way through a +tunnel full of spiders and other enemies! They also worked on a +[tutorial][bitgun-tutorial]. + +[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-missions]: https://twitter.com/LogLogGames/status/1464009563976392713?s=20 +[bitgun-tutorial]: https://twitter.com/LogLogGames/status/1461898845810348033?s=20 + +### [Halloween Mahjong Solitaire][mahjong-github] + +{{ 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 +Refuge 4x4x4 Challenge] in October 2021. + +The challenge was to create a Halloween-themed game based on four emojis. In +this case the chosen emoji combination was: skull_and_crossbones, bat, game_die, +and shinto_shrine (☠️ 🦇 🎲 ⛩️). + +The game is part of an open source repository of several mini-games that use +Syn9's [Rust Mini Game Framework][mgfw]. + +[mahjong-github]: https://github.com/Syn-Nine/rust-mini-games/tree/main/2d-games/mahjong +[synnine-twitter]: https://twitter.com/Syn9Dev +[Game Developers Refuge 4x4x4 Challenge]: http://noop.rocks/gdr/viewtopic.php?f=2&t=70 +[mgfw]: https://github.com/Syn-Nine/mgfw + +### Country Slice + +![country-slice-gif](country_slice_gif.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 geometry +generation. + +Country Slice uses [Bevy Engine][bevy-link] for entity management, and has +recently [been ported to OpenGL][country-slice-twitter-opengl] (using +[gl-rs][gl-rs-link] and [glutin][glutin-link]). It is being developed openly on +[GitHub][country-slice-github]. + +You can follow the development of Country Slice on +[Twitter][country-slice-twitter]. + +[country-slice-github]: https://github.com/anopara/country-slice +[country-slice-twitter]: https://twitter.com/anastasiaopara/ +[country-slice-twitter-opengl]: https://twitter.com/anastasiaopara/status/1464304076074672144?s=20 +[bevy-link]: https://github.com/bevyengine/bevy +[gl-rs-link]: https://github.com/brendanzab/gl-rs/tree/master/gl +[glutin-link]: https://github.com/rust-windowing/glutin + +### [Veloren][veloren] + +{{ 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. + +In November, Veloren started a new initiative to help new developers learn more +about the codebase; the Veloren Reading Club. You can watch the +[first][veloren-reading-club-1] and [second][veloren-reading-club-2] sessions +now. Hats were merged, and a major rewrite of the server-hosting section of the +book happened. New textures were made for item drops. Some concept art was +created for what massive cities could look like. Dynamic weather was added, and +you can [watch that in action][veloren-rain-storm]. + +Experience sharing went through a large overhaul to evenly distribute EXP gained +across groups. The difficulty of dungeons was adjusted to be more balanced for +new players. Persistence was added to skills, and measures were put in place to +help with future migrations to new skill trees. Work was done on site2, the +system that is used to generate structures procedurally. This will help +make the variance more dynamic by adding more parameters that can be adjusted. +In December, Veloren will release 0.12, hopefully with some holiday spirit! + +November's full weekly devlogs: "This Week In Veloren...": +[#144][veloren-144], +[#145][veloren-145], +[#146][veloren-146], +[#147][veloren-147], +[#148][veloren-148]. + +[veloren]: https://veloren.net +[veloren-144]: https://veloren.net/devblog-144 +[veloren-145]: https://veloren.net/devblog-145 +[veloren-146]: https://veloren.net/devblog-146 +[veloren-147]: https://veloren.net/devblog-147 +[veloren-148]: https://veloren.net/devblog-148 +[veloren-reading-club-1]: https://www.youtube.com/watch?v=DpXwYEe_LWo +[veloren-reading-club-2]: https://www.youtube.com/watch?v=n8XayRvVBEs +[veloren-rain-storm]: https://www.youtube.com/watch?v=MZwfaohynvc + +### [BENDYWORM] + +{{ 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 +world bends and twists around you as your progress through the level. Why? +Because you're inside of a gigantic worm, and worms are bendy. + +The game was made for GitHub Game Off 2021, and uses `godot-rust` behind the +scenes. + +The game is available for free on [itch.io][BENDYWORM-itch.io], and the source +code is available on [GitHub][BENDYWORM-github]. (Windows only for now, Linux +build available soon) + +_Discussions: +[/r/rust/][BENDYWORM-reddit], +[Twitter][BENDYWORM-twitter]_ + +[BENDYWORM]: https://bauxite.itch.io/bendyworm +[BENDYWORM-bauxitedev]: https://twitter.com/bauxitedev +[BENDYWORM-twitter]: https://twitter.com/bauxitedev/status/1466034866122891266 +[BENDYWORM-itch.io]: https://bauxite.itch.io/bendyworm +[BENDYWORM-github]: https://github.com/Bauxitedev/bendyworm +[BENDYWORM-reddit]: https://www.reddit.com/r/rust/comments/r742z1/ + +### [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](https://github.com/bevyengine/bevy). + +This month Molecoole launched its [Steam page][molecoole-steam]! They also added +[new weapons][weapon-twitter] and new [bosses][boss-twitter]. + +In December their main focus will be on audio and polishing the game. + +[molecoole-steam]: https://store.steampowered.com/app/1792170/Molecoole/ +[weapon-twitter]: https://twitter.com/kiss_mrton/status/1459567092995403776 +[boss-twitter]: https://twitter.com/kiss_mrton/status/1457022034949689351 + +### [Hydrofoil Generation] + +![hgs_screen](hgs5.jpg) + +[Hydrofoil Generation] ([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. + +November was dedicated to the launch of the [Steam Store][hgs_steam] page and +associated [trailer][hgs_trailer] showcasing Hydrofoil Generation's custom Rust +engine in motion for the first time. Constant tweaks to the boat behavior and +addition of gameplay features are ongoing as the planned Q2 2022 Steam Early +Access release gets closer and closer. + +December 2021 will see an attempt to port the rendering backend of the game from +DirectX 11 to WGPU to widen the number of platforms reachable with a +particular interest in the Steam Deck that seems to offer the perfect controller +layout for such a demanding simulation as Hydrofoil Generation. + +You will be able to follow the progress of the port Mondays and Fridays on +[Twitch][hgs_twitch]. + +[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 +[hgs_twitch]: https://www.twitch.tv/kunosstefano + +### Idu + +![idu's new sprinkler in action](idu.gif) + +Idu ([Discord][idu-discord]) by [@logicsoup] and [@epcc10] is an upcoming game +centered around growing realistic plants. + +In November, a new major update was released that overhauled the automatic +watering system. In addition, an automatic stair builder and a grass-cutting +tool was added to reduce the tediousness of these common tasks. + +A free playable alpha demo is available at [Idu's Discord server's +demo-download channel][idu-discord]! Updates are posted to their +[Youtube][idu-youtube] as well. + +[@logicsoup]: https://twitter.com/logicsoup +[@epcc10]: https://twitter.com/epcc10 +[idu-discord]: https://discord.gg/PR3GgYYkym +[idu-youtube]: https://www.youtube.com/channel/UC1JmPXgbR5R2dCsM_QJGe1w + +### [Combine&Conquer][cnc-logs] + +![items moving through the belt](cac-crossing.png) + +Combine&Conquer by [Martin Buck][@I3ck] is a WIP strategy game about automation +similar to Satisfactory or Factorio. + +This month Martin finished [writing a detailed devlog][cnc-logs] for the project +from the first commit up until now. A few dozen short posts cover various topics +including simulation of arms and conveyor belts with moving items, blueprints, +testing, rendering, save and load, tech tree and research, and multiplayer. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/qj03ji/cnc)_ + +[cnc-logs]: https://buckmartin.de/combine-and-conquer.html +[@I3ck]: https://github.com/I3ck + +### [PaddlePunks][paddlepunks-itch] + +{{ 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 +netcode. + +Latest developments: + +- Some engine work to improve performance on laptops with integrated GPUs +- Balance updates to make the skeleton less overbearing +- Presented the game at [Rustfest][paddlepunks-rustfest] in an interactive + session. + +You can download and play the game now on [itch.io][paddlepunks-itch], or join +the [Discord][paddlepunks-discord] to chat with the developer and other players. + +[paddlepunks-twitter]: https://twitter.com/sov_gott_games +[paddlepunks-itch]: https://sovgott.itch.io/paddlepunks +[paddlepunks-discord]: https://discord.gg/cpPDeVcWxc +[paddlepunks-rustfest]: https://watch.rustfest.global/ + +### [Shroom Kingdom][shroom-kingdom] + +Shroom Kingdom ([GitHub][shrm-github], [Discord][shrm-discord], +[Twitter][shrm-twitter]) is an upcoming play-to-earn video game built with web +technologies running on the [NEAR Blockchain][near-blockchain]. It is a 2D +platformer, where players can also build their own levels and share them with +others. + +Currently, a prototype of the game is in development. The game is written with +the [Bevy game engine][bevy] and the [Rapier physics engine][rapier] and is +compiled to WebAssembly. The prototype is still very basic, but you can already +place and remove blocks and have a feeling about the physics recreation of the +original games. + +In the past months, there also has been the SHRM token launch and a [token +airdrop][shrm-airdrop] for NEAR early adopters. The [Shroom Kingdom +DAO][shrm-dao] is looking for people, who want to become involved and get paid +with their very own token. + +To onboard new users to blockchain gaming, a [linkdrop campaign][shrm-linkdrop] +is currently in development, where people can claim a small amount of NEAR token +to create their own wallet. + +[shroom-kingdom]: https://shroomkingdom.net/ +[shrm-github]: https://github.com/Shroom-Kingdom +[shrm-discord]: https://discord.gg/SPZsgSe +[shrm-twitter]: https://twitter.com/shrm_kingdom +[near-blockchain]: https://near.org +[bevy]: https://bevyengine.org/ +[rapier]: https://rapier.rs/ +[shrm-airdrop]: https://twitter.com/shrm_kingdom/status/1450362543608901634?s=20 +[shrm-dao]: https://whitepaper.shroomkingdom.net/8_DAO.html +[shrm-linkdrop]: https://linkdrop.shroomkingdom.net/ + +## Engine Updates + +### [Tetra] 0.6.7 + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, version 0.6.7 was released, featuring: + +- Updates to the gamepad backend, adding rumble support for a much wider variety + of controllers (including DualShock 4s) +- Various bugfixes and docs improvements + +For more details, see the [changelog][tetra-changelog]. + +Additionally, development has begun on version 0.7 - check out [the planned +features and changes][tetra-07], and feel free to suggest more! + +[Tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-07]: https://github.com/17cupsofcoffee/tetra/issues/297 + +### [Oxygengine] v0.24.0 + +![Oxygengine RPG game template](oxygengine-overworld.gif) + +The hottest HTML5 + WASM game engine for games written in Rust with web-sys. + +[@PsichiX], the creator of [Oxygengine], spent the last two months on making: + +- First few chapters of the book explaining how Oxygengine works in: [Oxygengine + Essentials Book][oxygengine-book]. +- New hardware-accelerated renderer based on Material Graphs (to allow making + faster and better quality game visuals - more about that in [Material Graph + based rendering][oxygengine-material-graph] chapter). +- New Overworld game module (which aims to provide all essential features needed + by RPG game developers, to let them focus on making an actual game). +- New AI feature module (WIP) that integrates [Emergent AI][emergent] crate with + the engine. +- Plugin-based asset pipeline as well as support for LDtk software projects. + +All of these changes mark the beginning of stabilizing phase of the engine. The +API more or less won't change much - now the focus is put entirely on the +features that will push progress towards the Ignite visual game editor for +artists and game designers to use. + +[Oxygengine]: https://github.com/PsichiX/Oxygengine +[@PsichiX]: https://twitter.com/PsichiX +[oxygengine-book]: https://psichix.github.io/Oxygengine/ +[oxygengine-material-graph]: https://psichix.github.io/Oxygengine/concepts/ha-renderer/introduction.html#material-graph-based-rendering +[emergent]: https://github.com/PsichiX/emergent + +## Learning Material Updates + +### [The Raytracer Challenge][raytracer-challenge-github] + +[![The Raytracer Challenge](the-raytracer-challenge.jpg)][raytracer-challenge-playlist] + +[The Raytracer Challenge][raytracer-challenge-github] is a project with the goal +to write a raytracer from scratch in Rust, while showing each step of the way +[as a weekly live coding session][raytracer-challenge-playlist]. Everything is +documented, starting with implementing [Vectors][raytracer-challenge-vector] and +[Matrices][raytracer-challenge-matrix] all the way to creating [Phong +Lighting][raytracer-challenge-phong]. + +November has been a busy month for the project with lots of visual changes in +the raytraced results: + +- A [camera][raytracer-challenge-camera] was added to allow arbitrary views on + the [World][raytracer-challenge-world]. + +- [Basic animation support][raytracer-challenge-animation] came along allowing + the easy creation of video sequences. + +- More realistic and life-like scenes due to [Shadow + Casting][raytracer-challenge-shadows]. + +- As a new basic body type [Planes][raytracer-challenge-planes] came to life. + +[raytracer-challenge-github]: https://github.com/jakobwesthoff/the_ray_tracer_challenge_in_rust +[raytracer-challenge-playlist]: https://www.youtube.com/playlist?list=PLy68GuC77sUTyOUvDhVboQoOlHoa4XrSO +[raytracer-challenge-vector]: https://youtu.be/xGEDQXBMdV4 +[raytracer-challenge-matrix]: https://youtu.be/RYALPW0pJr4 +[raytracer-challenge-phong]: https://youtu.be/HSgS_NQob2I +[raytracer-challenge-camera]: https://youtu.be/izzp4xZfcHI +[raytracer-challenge-world]: https://youtu.be/1l54RUGigtk +[raytracer-challenge-animation]: https://youtu.be/3LinpB7ns60 +[raytracer-challenge-shadows]: https://youtu.be/agqAUa1qgGo +[raytracer-challenge-planes]: https://youtu.be/4y1aRPiH9Ko + +### [Rustacean Station 48][rustacean-station-48] + +![Rustacean Station Logo](rustacean-station.jpeg) + +The [Rustacean Station][rustacean-station] is a podcast about the Rust language. + +In November, [Herbert Wolverson][herbert-wolverson] [was +interviewed][rustacean-station-48] about game development in Rust. In this +episode, lots is discussed about existing game development engines, and how Rust +is breaking into this space with engines like Bevy, Amethyst, and RG3D. There is +also a discussion on the Entity Component System paradigm in comparison to +Object Oriented Programming. + +[herbert-wolverson]: https://twitter.com/herberticus +[rustacean-station]: https://rustacean-station.org/ +[rustacean-station-48]: https://rustacean-station.org/episode/048-herbert-wolverson/ + +### [Rust on the GPU][raph-blog-post] + +In [this blog post][raph-blog-post], [Raph Levien] describes the current state +of coding on a graphics card. The post describes how going about writing custom +code still induces many issues in this day and age, and what modern technologies +can be used to help make this easier. [Rust-gpu] is mentioned as a possible way +to write compute shaders in a "real language". + +[Rust-gpu]: https://github.com/EmbarkStudios/rust-gpu +[Raph Levien]: https://levien.com/ +[raph-blog-post]: https://raphlinus.github.io/gpu/2021/11/17/prefix-sum-portable.html + +### [Rust Roguelike Tutorial][rl-tut] + +{{ 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 +plaza inhabited by dark elves and adds a new big demon enemy to guard the Abyss +portal. + +> You can battle your way down to the Dark Elf Plaza, +> and find the gateway to Abyss - but only if you can evade a hulking demon +> and a horde of elves---with very little in the way of help offered. +> Next up, we'll begin to build the Abyss. + +[@herberticus]: https://twitter.com/herberticus +[rl-tut]: http://bfnightly.bracketproductions.com/rustbook +[rl-tut-new]: http://bfnightly.bracketproductions.com/rustbook/chapter_75.html + +### [Hands-on Rust][hor] + +{{ 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 +reader through the basics of building and publishing [bracket-lib] games in +WebAssembly. + +[hor-bonus]: https://hands-on-rust.com/2021/11/06/run-your-rust-games-in-a-browser-hands-on-rust-bonus-content/ +[hor]: https://hands-on-rust.com +[bracket-lib]: https://github.com/amethyst/bracket-lib + +## Tooling Updates + +### [SPV] + +![SPV-0.3.5 screenshot](spv-0.3.5.png) + +[SPV] by [Albin Sjögren] is a calculator utility for working with astronomical +position and velocity data. + +In the last month, a relative position and velocity calculation system has been +added. This is due to the inaccuracy of astronomic data. With this new method +that relies on the orbital elements of two body systems getting data for +multibody simulation is now possible. + +Apart from this new equation set, [SPV] now also has a more standard color +scheme based on the one GitHub uses. This month also came with numerous bug +fixes and a more concrete plan for future development. + +For any feature requests, reach out to the developer on [Discord][spv-discord] +or [GitHub][spv]. + +[SPV]: https://github.com/AlbinSjoegren/SPV +[spv-discord]: https://discordapp.com/users/258254056185659392 +[Albin Sjögren]: https://github.com/AlbinSjoegren + +### [PickPicPack] 0.1.6 + +![PickPicPack 0.1.6](pickpicpack_0.1.6.gif) + +[PickPicPack] ([GitHub][PPP_github], [Gumroad][PPP_gumroad]) by +[@p4ymak][p4ymak_www] is a tiny yet powerful utility for packing images into +rectangles with arbitrary aspect ratio. + +It is useful for creating mood boards, daily art reports, presentations and +other collages. + +Features so far: + +- Interactive loading +- Scaling images to equal size +- Optional margin between images +- Custom aspect ratio; now you can set aspect ratio by text in any form +- CLI; you can use it without GUI and embed it into your project manager tool + +[PickPicPack]: http://www.p43d.com/pickpicpack +[PPP_github]: https://github.com/p4ymak/pickpicpack +[PPP_gumroad]: https://p4ymak.gumroad.com/l/pickpicpack +[p4ymak_www]: http://www.p43d.com/p4ymak + +### [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 previously announced Alpha release was delayed as core devs returned to +school - January is the new goal. Development now continues to pick up speed. +Design of the project website has continued for its launch soon, alongside the +Alpha release. + +The project upgraded to the Rust 2021 edition and made big improvements to the +frontend TypeScript and web infrastructure. The editor UI is now fully +responsive at small window sizes. Unsaved document tabs display an `*` and warn +before closing the window. Ruler measurements now move and scale with the +document. And the new snapping system helps draw/move shapes aligned with +others. + +[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 + +### [Solid Editor][solid] + +{{ 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, +enabling the creation of game-ready voxel graphics assets. Since the engine part +is pretty far from being done, the author decided to release this editor as a +standalone application. + +> Besides being natively compatible with Solid Engine, the editor sports some +> generally interesting and unique features. +> +> - True WYSIWYG editing. The editor scene is rendered using Solid Engine's path +> tracer in real-time, yielding realistic lighting while editing. +> - The possibility to edit voxels directly in 3D, by using any brightly colored +> ball as a 3D pointing device. Read more about the [Ball +> Pointer][solid-ball]. +> - A novel approach to editor tools. Instead of many different tools with +> overlapping functionality (e.g. "draw square" vs. "select square", or +> "bucket fill" vs. "magic wand") there is only one, a versatile Selection +> tool. Different effects can be applied to the selected voxels, producing the +> same results as regular editor tools. Combined with real-time effect +> preview, the user experience is very similar to that of classic graphics +> editors, with the added benefit of being able to tweak every edit before +> applying it. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/qrsu1n/solid_editor_a_voxel_editor)_ + +[solid]: https://solidengine.org/solid-editor +[solid-engine]: https://solidengine.org +[solid-video]: https://youtube.com/watch?v=GuVM3W9Pfdg +[solid-ball]: https://solidengine.org/ball-pointer + +## Library Updates + +### [Pixels] 0.8.0 👾 + +[Pixels] is a tiny hardware-accelerated pixel framebuffer. Its goals include +pixel-perfect rendering and custom shader pipelines for textures with direct +pixel access. It's perfect for making 2D animations, games, and emulators. + +Version 0.8.0 was released this month, bringing highly-anticipated support for +WASM targets, as well as support for Raspberry Pi 4. A [minimal example for web +browsers][pixels-web] is included to get you started. 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.8.0 +[pixels-web]: https://github.com/parasyte/pixels/tree/0.8.0/examples/minimal-web + +### [Quinn] + +[Quinn] is an async-enabled implementation of the state-of-the-art IETF QUIC +transport protocol, a robust foundation for real-time networking. + +[Quinn 0.8][quinn_release] introduces support for the final QUIC 1 specification +defined in [RFC 9000][RFC9000]. Other highlights include an improved CUBIC +congestion controller, a more ergonomic configuration API, and numerous +performance and robustness improvements. + +[Quinn]: https://github.com/quinn-rs/quinn +[RFC9000]: https://www.rfc-editor.org/rfc/rfc9000.html +[quinn_release]: https://github.com/quinn-rs/quinn/releases/tag/0.8.0 + +### [hecs] + +[hecs] is a fast, lightweight, and unopinionated archetypal ECS library. + +[Version 0.7][hecs-changelog] introduces several new features, including two new +query combinators, a `CommandBuffer` for recording operations to be applied to a +`World` at a future time, accessors for efficient random access within columns, +and a variant of `EntityBuilder` that clones its components and can therefore be +spawned from repeatedly. Other improvements include compatibility with 32-bit +MIPS and PPC, and introduction of a niche to `Entity` so that e.g. +`Option` will not consume additional space. + +[hecs]: https://github.com/Ralith/hecs +[hecs-changelog]: https://github.com/Ralith/hecs/blob/master/CHANGELOG.md#071 + +### [godot-rust](https://github.com/godot-rust/godot-rust) + +![module before/after](godot-rust-modules.png) + +godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter]) +is a Rust library that provides bindings for the Godot game engine. + +November has been a month of refactoring for godot-rust. The API was cleaned up +across different locations, reducing confusion and making the library more +accessible: + +- The module simplification ([#811][gd-811]) continued initial efforts on the + module structure, such as shorter paths and avoidance of redundant re-exports. + Some differences between v0.9.3 and now can be seen in the above picture. +- Several core symbols were renamed for consistency ([#815][gd-815]): + `RefInstance` -> `TInstance` and `TypedArray` -> `PoolArray`, among others. +- Another refactoring affects the `Variant` conversion methods ([#819][gd-819]). + Instead of `Variant::to_i64()` which may silently fail and return a default + value (Godot behavior), the recommended method is now `Variant::to()`. This + enables genericity and is more idiomatic in Rust, returning an `Option` to + indicate success or failure. + +As a binding to a C++ library, one topic godot-rust has to deal with is the use +of `unsafe`, which sometimes boils down to a trade-off between safety and +ease-of-use. Even though Rust provides basic guidelines, there are different +philosophies on their execution, see [The CXX Debate][gd-cxx] for an example. To +discuss how APIs interacting with Godot can be as ergonomic as possible while +preserving safety, [issue #808][gd-808] was opened. + +[gd-808]: https://github.com/godot-rust/godot-rust/pull/808 +[gd-811]: https://github.com/godot-rust/godot-rust/pull/811 +[gd-815]: https://github.com/godot-rust/godot-rust/pull/815 +[gd-819]: https://github.com/godot-rust/godot-rust/pull/819 + +[gd-cxx]: https://steveklabnik.com/writing/the-cxx-debate + +[gd-github]: https://github.com/godot-rust/godot-rust +[gd-discord]: https://discord.com/invite/FNudpBD +[gd-twitter]: https://twitter.com/GodotRust + +### [NavMesh] v0.12.1 + +NavMesh crate is a pathfinding library for 2D and 3D games. + +This month changes by [@PsichiX]: + +- Added NavGrid structure to find paths on grids. +- Added NavFreeGrid structure to find paths on cells put in free layout manner + (used for example on clusters of cells rather than the condensed grid). +- Added NavIslands structure to allow hierarchical pathfinding (used for + example with streamed navigation islands, such as other pathfinding + structures). + +[NavMesh]: https://github.com/PsichiX/navmesh + +### [Rust CUDA][rust-cuda-github] + +[Rust CUDA][rust-cuda-github] by [Riccardo D'Ambrosio] is a [newly-released +project][rust-cuda-announcement] with the goal of making Rust a Tier-1 language +for fast GPU computing. There are still many bugs, and it's in an early stage. + +With this release comes a few crates. [rustc_codegen_nvvm] for compiling Rust to +CUDA PTX code using rustc's custom codegen mechanisms and the libnvvm CUDA +library. [cust] for actually executing the PTX is a high-level wrapper for the +CUDA Driver API. [cuda_builder] for easily building GPU crates. [cuda_std] is +the GPU-side standard library which complements rustc_codegen_nvvm. [gpu_rand] +is a GPU-friendly random number generation. [nvvm] is high-level bindings to +libnvvm, and [ptx_compiler] is high-level bindings to the PTX compiler APIs, +which are currently incomplete. [find_cuda_helper] is for finding CUDA on the +system. There are many other works in progress. + +[rustc_codegen_nvvm]: https://crates.io/crates/rustc_codegen_nvvm +[cust]: https://crates.io/crates/cust +[cuda_builder]: https://crates.io/crates/cuda_builder +[cuda_std]: https://crates.io/crates/cuda_std +[gpu_rand]: https://crates.io/crates/gpu_rand +[nvvm]: https://crates.io/crates/nvvm +[ptx_compiler]: https://crates.io/crates/ptx_compiler +[find_cuda_helper]: https://crates.io/crates/find_cuda_helper +[Riccardo D'Ambrosio]: https://github.com/RDambrosio016 +[rust-cuda-github]: https://github.com/Rust-GPU/Rust-CUDA +[rust-cuda-announcement]: https://www.reddit.com/r/rust/comments/qzv428/announcing_the_rust_cuda_project_an_ecosystem_of/ + +## Other News + +- Other game updates: + - [Rust Shooter progress report][rust-shooter]: + GLTF import, more character animations and weapons, and underwater effects. + - [A video of the new record for speedrunning the Way of Rhea demo][war-speedrun] + (spoilers!) + - [Necrophaser] is a recently alpha-released Top-Down Shooter made with Bevy. + - [A new spaceship for Stellary 2][stellary]. + - [Endless Trial] is a 2D bullet-hell game made in Tetra. +- Other learning material updates: + - [GBA From Scratch] is a tutorial on how to code for the Game Boy Advance + using Rust. + - [Ping Pong Tutorial] is a walkthrough on creating a ping pong game in Rust. +- Other engine updates: + - [rg3d now has a cheat/guide book][rg3d-book]. + - [miniquad got a GL2 backend][miniquad-gl2] for even better support + of old and/or virtual systems. +- Other library updates: + - [natura] is a simple and efficient spring animation library. + +[rust-shooter]: https://reddit.com/r/rust_gamedev/comments/r06n8o/rust_shooter_another_update +[war-speedrun]: https://www.youtube.com/watch?v=Z0lKsABSwME +[Necrophaser]: https://reddit.com/r/rust_gamedev/comments/ql65sw/alpha_release_of_necrophaser +[stellary]: https://twitter.com/CoffeJunkStudio/status/1459493244648280071 +[Endless Trial]: https://reddit.com/r/rust_gamedev/comments/qw5e36/endless_trial_simple_2d_bullethell_game +[GBA From Scratch]: https://lokathor.github.io/gba-from-scratch/introduction.html +[Ping Pong Tutorial]: https://phychic-owl.medium.com/rust-project-ping-pong-game-665766cc45ed +[rg3d-book]: https://rg3d-book.github.io +[miniquad-gl2]: https://twitter.com/fedor_games/status/1462804219719831552 +[natura]: https://github.com/ziyasal/natura + +## Discussions + + + +- [/r/rust_gamedev](https://reddit.com/r/rust_gamedev): + - ["Using an ECS as a general-purpose storage container?"]( + https://reddit.com/r/rust_gamedev/comments/qkb77k/ecs_as_general_container) + - ["Where to start?"](https://reddit.com/r/rust_gamedev/comments/qmdw2a/where_to_start) + - ["status of wasm32 support in existing game frameworks/engines"]( + https://reddit.com/r/rust_gamedev/comments/qzhx8u/status_of_wasm32_support) + - ["Can Rust do what any C++ game server can at a similar speed?"]( + https://reddit.com/r/rust_gamedev/comments/qze1v0/can_rust_do_what_c_server_can) + - ["Developing a cross-platform game for browser, Ios, and Android using rust?"]( + https://reddit.com/r/rust_gamedev/comments/r0yia7/crossplatform_game_browser_ios) + +## 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://www.reddit.com/r/rust_gamedev/comments/rcmz17/this_month_in_rust_gamedev_28_november_2021/), +[Twitter](https://twitter.com/rust_gamedev/status/1469009470420398082), +[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/028/mahjong-screenshot.png b/content/news/028/mahjong-screenshot.png new file mode 100644 index 000000000..ba46f65e7 Binary files /dev/null and b/content/news/028/mahjong-screenshot.png differ diff --git a/content/news/028/molecoole.png b/content/news/028/molecoole.png new file mode 100644 index 000000000..3855bfd4f Binary files /dev/null and b/content/news/028/molecoole.png differ diff --git a/content/news/028/one-click-ninja.png b/content/news/028/one-click-ninja.png new file mode 100644 index 000000000..391069c4f Binary files /dev/null and b/content/news/028/one-click-ninja.png differ diff --git a/content/news/028/oxygengine-overworld.gif b/content/news/028/oxygengine-overworld.gif new file mode 100644 index 000000000..4bce5f59e Binary files /dev/null and b/content/news/028/oxygengine-overworld.gif differ diff --git a/content/news/028/paddlepunks-rewind.gif b/content/news/028/paddlepunks-rewind.gif new file mode 100644 index 000000000..ee627e2e3 Binary files /dev/null and b/content/news/028/paddlepunks-rewind.gif differ diff --git a/content/news/028/pickpicpack_0.1.6.gif b/content/news/028/pickpicpack_0.1.6.gif new file mode 100644 index 000000000..8f30de5ee Binary files /dev/null and b/content/news/028/pickpicpack_0.1.6.gif differ diff --git a/content/news/028/rl-tut.jpg b/content/news/028/rl-tut.jpg new file mode 100644 index 000000000..dcc35b46d Binary files /dev/null and b/content/news/028/rl-tut.jpg differ diff --git a/content/news/028/rustacean-station.jpeg b/content/news/028/rustacean-station.jpeg new file mode 100644 index 000000000..4900c38db Binary files /dev/null and b/content/news/028/rustacean-station.jpeg differ diff --git a/content/news/028/solid-editor.jpg b/content/news/028/solid-editor.jpg new file mode 100644 index 000000000..12856c84d Binary files /dev/null and b/content/news/028/solid-editor.jpg differ diff --git a/content/news/028/spv-0.3.5.png b/content/news/028/spv-0.3.5.png new file mode 100644 index 000000000..79f5f5a6d Binary files /dev/null and b/content/news/028/spv-0.3.5.png differ diff --git a/content/news/028/the-raytracer-challenge.jpg b/content/news/028/the-raytracer-challenge.jpg new file mode 100644 index 000000000..ba1da3758 Binary files /dev/null and b/content/news/028/the-raytracer-challenge.jpg differ diff --git a/content/news/028/veloren.jpg b/content/news/028/veloren.jpg new file mode 100644 index 000000000..515aefa80 Binary files /dev/null and b/content/news/028/veloren.jpg differ 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