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/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f58bad3a2..b1330ffda 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,3 +1,3 @@ -Please, read the [contributing guidelines][contributing] before submitting a PR. + -[contributing]: https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/CONTRIBUTING.md +_Part of #TODO_ 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="image link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="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="image link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="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 51% rename from newsletter-template.md rename to .github/newsletter-template.md index 40cace3dd..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,17 +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) +- [Engine Updates](#engine-updates) - [Learning Material Updates](#learning-material-updates) -- [Library & Tooling Updates](#library-tooling-updates) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) +- [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 + +## Library Updates -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub +## Other News + + + ## Meeting Minutes @@ -79,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 @@ -92,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 1197b208a..7035bdd57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,31 +1,83 @@ name: Zola -on: [push, pull_request] +on: + push: + branches: main + pull_request: jobs: zola: 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 364fdec1a..0036b599a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +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 f53e401f5..ef174b4f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,234 +1,170 @@ # Contributing Guide -## Workflow Overview +Thank you for contributing to the newsletter! 💖 -- In the last week of the month, a [coordination issue][coordination] - with an initial outline of this month's news is created by a coordinator. +- [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) - News are mostly collected from [/r/rust_gamedev], [@rust_gamedev] on Twitter, - and the "\#showcase-only" [Rust GameDev channel on Discord][gd-discord]. - Feel free to suggest sections if something cool isn't listed. +## Writing Newsletter Sections -- During the following few days, contributors take "🆓 **free**" sections - and submit corresponding PRs. +At the end of each month, a [coordination issue] will be created by one of +the newsletter editors. This signals that it's time to start writing and +submitting sections! - Leave a comment like "Taking {section\_name\_1} and {section\_name\_2}" - in the coordination issue to claim free sections you are interested in. - Claimed sections are marked as "🚧 WIP by @nickname" in the plan. - This is done to avoid work duplication. +The coordination issue will contain the deadlines for submissions, as well +as an initial outline for the newsletter's content. Each item in the outline +will have a marker showing whether it is free for someone to pick up, and a +suggested author. - You aren't required to be a project's author to write about it. - - Some free sections have a nickname with a question mark in brackets - (like "🆓 **free** (@nickname?)") - - it's just an invitation to write the corresponding section if you want, - but anyone is free to take it. - -- Submitted PRs are reviewed, tweaked if needed, and merged. - - Feel free to help with reviews. - -- After all the contributors' PRs are processed, coordinators - take and write all sections that no one has submitted. - -- In the first week of the next month, the final draft is reviewed and merged. - -- A small PR that adds links to discussions - (see the comment at the bottom of the draft) is made. - -- A draft of the next newsletter is added to the repo. - -## PRs - -- The current draft is `/posts/newsletter-{N}/index.md`, - where `{N}` is this issue's number. - -- Place the sections accordingly to how they're ordered - in the coordination issue. - -- PRs are sent against the `source` branch. - -- Mention the coordination issue in the PR's description to link it all together. - -- Don't send PRs from your main branch, create a unique branch - (named like `n14_zemeroth`, `n12_veloren`, etc) for each PR. - This allows sending multiple simultaneous PRs - and simplifies the creation of the next PRs. - -- Make sure that the "Allow edits from maintainers" box is checked - ([avoid using org accounts][gh-org] if possible) - \- it makes updating/tweaking the PR easier for the coordinators. - -- Don't bother resolving merge conflicts in your PR - as they will likely to re-appear after yet another PR is merged. - It easier for a coordinator to update the PR right before merging it. - -- Don't worry about cleaning up the PR's commit history - \- we're squashing the PR into one commit before the merge anyway. - -[coordination]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination +> This outline is just a first draft - feel free to submit sections that +aren't listed! + +If you would like to write a section for the newsletter, leave a comment on +the coordination issue stating what you're planning to write about. This +allows the editors to keep track of what's in progress, and prevents +duplicated work. + +Next, make your changes to the newsletter's main Markdown file - this is +located in [`/content/news/{N}/index.md`][newsletter-source], where `{N}` is +the newsletter's issue number. You can either do this by forking the repo, +or by using GitHub's built-in editor. If you're picking up a section from +the coordination issue's outline, use the provided links as a starting +point. + +> **Please follow the [templates](#templates) and +[style guidelines](#style-guidelines) provided below when writing your +section, for consistency with the rest of the newsletter!** + +Once your edits are done, send a PR against the `source` branch (not +`master`). Make sure that you mention the coordination issue in the PR +description, and tick the 'Allow edits from maintainers' box to make it +easier for editors to fix any issues. + +Upon submitting your PR, a CI build will run, checking that your changes +meet the style guidelines. Please double check that this passes, and watch +your GitHub notifications for any further review comments from the editors. + +### Templates + +#### Games, Apps or Libraries + +```md +### [Game name] + +{{ image_figure( + alt="image/GIF description", + src="image link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="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 or Videos + +```md +### [Article name] + +{{ image_figure( + alt="image/GIF description", + src="image link", + caption="image caption") }} + +OR + +{{ video_figure( + type="video/mp4", + src="my-video.mp4", + caption="optional video caption") }} + +[@nickname] published an [article] about... +{overview what the resource is about}. + +_Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_ + +[Article name]: http://example.com +``` + +### Style Guidelines + +- Run [MarkdownLint] against your changes with [our config][md-config]. + - Most editors have a MarkdownLint plugin available + (e.g. [VS Code][md-vscode], [Sublime Text][md-sublime], + [Vim][md-vim]). +- Write in third-person perspective. +- Lines should be no more than 80 characters long. +- The rendered text should be under 1000 characters, and under 6 + paragraphs - this doesn't include markup/links/etc. +- Do not use rich formatting (bold, italics, etc). +- 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), 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/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. +- Donation/sponsorship links are allowed, but should not be the focus of a + section. + +[coordination issue]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination [@rust_gamedev]: https://twitter.com/rust_gamedev [/r/rust_gamedev]: https://reddit.com/r/rust_gamedev [gd-discord]: https://discord.gg/yNtPTb2 -[gh-org]: https://github.com/isaacs/github/issues/1681 - -## Style - -Please, try to maintain a consistent style with the rest of the newsletter. - -- In general, the sections are expected to have this structure: - - ```markdown - ### [Project] - - ![alt image description](image.jpeg) - _image caption_ - - [Project] by [@Author] is an awesome Rust project. - - A paragraph or two with a summary and [useful links][other-link]. - - _Discussions: - [/r/rust](https://reddit.com/r/rust/123456), - [twitter](https://twitter.com/todo/status/123456)_ - - [Project]: https://first.link - [@Author]: https://author.link - [other-link]: https://other.link - ``` - - It was decided to use an image + short TLDR-overview section scheme - because people, in general, don't follow the links in digests. - This way readers should get a general idea of what's going on - just by scrolling through the issue. - - But please don't make the sections too long/detailed, - otherwise, the newsletter as a whole will become too bloated. - It's not a strict limit, but please try to keep the sections under 200 words. - -- Games are quite visual-oriented media - so the default section structure includes one image before the text. - One image is preferred, two images are usually the max. - - Keep the file size in mind: GIFs should be <2MB in size - ([ezgif.com] is a nice online tool for quick editing/optimization), - static images should be optimized too - (prefer jpeg to png for complex screenshots, etc). - - All images should have a short but meaningful and descriptive alt text - (more info about alt text [here](https://moz.com/learn/seo/alt-text) - and [here](https://webaim.org/techniques/alttext/)). - - Image files should be placed in the same folder as the post - and be named using "\-" to split the words, not "\_". - -- Markdown doesn't natively support videos, - so the usual workaround is to include a clickable screenshot of the video: - [example 1](https://rust-gamedev.github.io/posts/newsletter-012/#ochre-4k-intro), - [example 2](https://rust-gamedev.github.io/posts/newsletter-012/#rust-n-games-talk). - -- Contributions should be written clearly and simply so that - they are accessible to readers for whom English is not their first language. - -- Keep in mind that more than half of readers consume the newsletter - using mobile devices. - So try to avoid things that don't work well with small screens: - nested lists, long titles, images with important small details, - code blocks with long lines, etc. - -- Don't use fourth-level headers. - Divide a section into subsections using a `------` line if needed. - -- Avoid using bold, italic, etc rich formatting if possible. - -- Write from a third-person perspective even if you're writing - about your project's updates. - -- Use singular "they" if you're not sure what the person's pronouns are. - -- If the project was already featured in the newsletter, - use a one-sentence description at the beginning of the section - as a reminder for readers - and describe only the updates next. - -- It's ok to add a donation/sponsorship link, - but avoid making it a central point of your section. - -- Discussion links should be added at the end of the (sub)section only if - they already contain some actual interesting discussions. - -[ezgif.com]: https://ezgif.com - -## Formatting - -As with the style, keeping the MD formatting consistent over the newsletter -is important too. -So, please, try to follow the formatting guidelines -but don't worry too much about them: -they are easier to fix for coordinators than issues with the content itself. - -- Some of the basic formatting rules are enforced on CI using [markdownlint]. - - If you're working on your PR locally, consider installing - one of the markdownlint extensions for your editor - ([vscode][vscode-lint], [sublime][sublime-lint], [vim][vim-lint]), - otherwise please check the results of the CI run. - -- Insert line breaks ([softbreak]) at 80 chars. - -- Use [reference-style links][md-reflinks] and group them into blocks - at the end of the (sub)sections. - - URLs in these references block can break the 80 chars rule: - - ```markdown - [Rapier][rapier], a new pure-rust physics engine, - released an [official Bevy plugin][bevy-rapier]. - - [rapier]: https://rapier.rs - [bevy-rapier]: https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine/#reaching-out-to-other-communities-bevy-and-javascript - ``` - -- Use only dashes (`-`) for list items, `**` for bold, and `_` for italic. - -- Don't use double linebreaks and trailing whitespaces. +[newsletter-source]: https://github.com/rust-gamedev/rust-gamedev.github.io/tree/source/content/news +[markdownlint]: https://github.com/DavidAnson/markdownlint +[md-config]: https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/.markdownlint.json +[md-vscode]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint +[md-sublime]: https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint +[md-vim]: https://github.com/fannheyward/coc-markdownlint -- Only use inline code formatting ("\`mycrate\`") for crate names - if this helps to avoid confusion. +## Becoming an Editor -- Don't use GitHub shortcodes (like `:tada:`) - they won't be rendered - by normal MD renderers. Use plain Unicode emojis instead. +The newsletter is organized by a small volunteer group of editors. If you +have some time to spare each month and want to help out, please get in +touch, either via the [issue tracker][issues] or the +[gamedev working group's Discord channel][wg-discord]. We'd be happy to have +you! -- Consequent list item lines are indented with two spaces. Example: +Editors have two main responsibilities: - ```markdown - - Aaaaaaaa aaaaaaa aaaaaaaaaa (Aaaaaaa) aaaaaaaa aaaa - aaaaaa aaaa. Aaaaaa aaaa aa'a aaaaaaaa aaaaaa aaa aaaaaaa. - aaaaa aaaaa aa aaaaaaaaa, aaaaaaa. - - Aaaaaaaaaaaaa aaaaaaaaaaa aaa aaaaaaa aaaaa. - - Aaaaaaaaaaaaaa aaaaaaa aaaaaaaa AaaAA aaaa aaa aaa'a - aaaa aaaaa aaaaa `aaa_aaaaa` aaaa, aaaa `aaaa_aaaaa_aaa`, - aaaaa. - - Aaaaaaa aaaaa aaaaaa (aaaaaaa aaaaaaa). - ``` +- Gathering news and links over the course of the month +- Reviewing, fixing and merging PRs -- Try to strip unneeded parts of URLs. - For example, remove `www.`, `old.`, and description parts of Reddit links: +Each month, one of the editors will be designated as the 'lead editor'. Their additional +responsibilities are: - - `https://old.reddit.com/r/rust/comments/i7bcwu/introducing_bevy_a_refreshingly_simple_datadriven` - - `https://reddit.com/r/rust/comments/i7bcwu/introducing_bevy` +- Creating and maintaining the coordination issue +- Preparing the final draft +- Publishing the newsletter +- Linking to the newsletter on social media +- Creating the files for next month's newsletter -- Use a consistent list item termination - (don't mix items ending with ";", ",", ".", etc). +The lead editor role rotates every month, to spread the workload fairly, but +you can opt out if you want. -[markdownlint]: https://github.com/DavidAnson/markdownlint -[vscode-lint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint -[sublime-lint]: https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint -[vim-lint]: https://github.com/fannheyward/coc-markdownlint -[softbreak]: https://spec.commonmark.org/0.29/#soft-line-breaks -[md-reflinks]: https://www.markdownguide.org/basic-syntax/#reference-style-links - -Ping the coordinators in the current coordination issue -or WG's Discord channel if there are any questions. -If something in this guide is unclear file an issue -and we'll try to improve it. +[issues]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues +[wg-discord]: https://discord.gg/DACMGKM5en 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 f849a592c..5fc7bd5cc 100644 --- a/config.toml +++ b/config.toml @@ -1,11 +1,14 @@ -title = "Rust Game Development Working Group" +title = "Rust GameDev WG" description = "Stay up to date with the progress and recent developments in the Rust Game Development Working Group." -base_url = "https://rust-gamedev.github.io/" +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/posts/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 similarity index 91% rename from content/posts/2019-08-18-introducing-the-rust-game-development-working-group.md rename to content/blog/2019-08-18-introducing-the-rust-game-development-working-group.md index bc581dfad..847e8b2c1 100644 --- a/content/posts/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 @@ -1,6 +1,10 @@ +++ title = "Introducing the Rust Game Development Working Group" -aliases = ["/2019/08/18/introducing-the-rust-game-development-working-group", "/2019/08/18/introducing-the-rust-game-development-working-group.html"] +aliases = [ + "/2019/08/18/introducing-the-rust-game-development-working-group", + "/2019/08/18/introducing-the-rust-game-development-working-group.html", + "posts/introducing-the-rust-game-development-working-group", +] +++ Rust's combination of low-level control, excellent performance @@ -43,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/_index.md b/content/blog/_index.md new file mode 100644 index 000000000..05fe8455c --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,7 @@ ++++ +title = "Blog Posts" +insert_anchor_links = "right" +template = "posts.html" +page_template = "post.html" +sort_by = "date" ++++ 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/posts/survey-01/.DS_Store b/content/blog/survey-01/.DS_Store similarity index 100% rename from content/posts/survey-01/.DS_Store rename to content/blog/survey-01/.DS_Store diff --git a/content/posts/survey-01/hobbyist-or-professional.png b/content/blog/survey-01/hobbyist-or-professional.png similarity index 100% rename from content/posts/survey-01/hobbyist-or-professional.png rename to content/blog/survey-01/hobbyist-or-professional.png diff --git a/content/posts/survey-01/index.md b/content/blog/survey-01/index.md similarity index 99% rename from content/posts/survey-01/index.md rename to content/blog/survey-01/index.md index a1c9ea019..52bb12d7a 100644 --- a/content/posts/survey-01/index.md +++ b/content/blog/survey-01/index.md @@ -2,6 +2,7 @@ title = "Rust Game Development - Ecosystem Survey" date = 2020-02-06 transparent = true +aliases = ["posts/survey-01"] +++ diff --git a/content/posts/newsletter-007/survey-thanks.png b/content/blog/survey-01/survey-thanks.png similarity index 100% rename from content/posts/newsletter-007/survey-thanks.png rename to content/blog/survey-01/survey-thanks.png diff --git a/content/posts/survey-01/using-rust.png b/content/blog/survey-01/using-rust.png similarity index 100% rename from content/posts/survey-01/using-rust.png rename to content/blog/survey-01/using-rust.png 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/posts/newsletter-001/a-snakes-tail.gif b/content/news/001/a-snakes-tail.gif similarity index 100% rename from content/posts/newsletter-001/a-snakes-tail.gif rename to content/news/001/a-snakes-tail.gif diff --git a/content/posts/newsletter-001/a-snakes-tale-logo.png b/content/news/001/a-snakes-tale-logo.png similarity index 100% rename from content/posts/newsletter-001/a-snakes-tale-logo.png rename to content/news/001/a-snakes-tale-logo.png diff --git a/content/posts/newsletter-001/amethyst-space-shooter.gif b/content/news/001/amethyst-space-shooter.gif similarity index 100% rename from content/posts/newsletter-001/amethyst-space-shooter.gif rename to content/news/001/amethyst-space-shooter.gif diff --git a/content/posts/newsletter-001/ccd_substeps.svg b/content/news/001/ccd_substeps.svg similarity index 100% rename from content/posts/newsletter-001/ccd_substeps.svg rename to content/news/001/ccd_substeps.svg diff --git a/content/posts/newsletter-001/embark-logo-bg.jpg b/content/news/001/embark-logo-bg.jpg similarity index 100% rename from content/posts/newsletter-001/embark-logo-bg.jpg rename to content/news/001/embark-logo-bg.jpg diff --git a/content/posts/newsletter-001/evoli-shot.png b/content/news/001/evoli-shot.png similarity index 100% rename from content/posts/newsletter-001/evoli-shot.png rename to content/news/001/evoli-shot.png diff --git a/content/posts/newsletter-001/gfx-mipmap.png b/content/news/001/gfx-mipmap.png similarity index 100% rename from content/posts/newsletter-001/gfx-mipmap.png rename to content/news/001/gfx-mipmap.png diff --git a/content/posts/newsletter-001/index.md b/content/news/001/index.md similarity index 97% rename from content/posts/newsletter-001/index.md rename to content/news/001/index.md index 5cc2ae62c..d4bc25734 100644 --- a/content/posts/newsletter-001/index.md +++ b/content/news/001/index.md @@ -2,7 +2,7 @@ title = "This Month in Rust GameDev #1 - August 2019" date = 2019-09-02 transparent = true -aliases = ["/2019/09/02/newsletter-001", "2019/09/02/newsletter-001.html"] +aliases = ["/2019/09/02/newsletter-001", "2019/09/02/newsletter-001.html", "posts/newsletter-001"] +++ Welcome to the inaugural issue of the Rust Game Development Workgroup’s @@ -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="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="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/posts/newsletter-001/iolivia-screenshot.png b/content/news/001/iolivia-screenshot.png similarity index 100% rename from content/posts/newsletter-001/iolivia-screenshot.png rename to content/news/001/iolivia-screenshot.png diff --git a/content/posts/newsletter-001/oxygengine-navigation-demo.gif b/content/news/001/oxygengine-navigation-demo.gif similarity index 100% rename from content/posts/newsletter-001/oxygengine-navigation-demo.gif rename to content/news/001/oxygengine-navigation-demo.gif diff --git a/content/posts/newsletter-001/physx-example.png b/content/news/001/physx-example.png similarity index 100% rename from content/posts/newsletter-001/physx-example.png rename to content/news/001/physx-example.png diff --git a/content/posts/newsletter-001/roboinstructus.jpg b/content/news/001/roboinstructus.jpg similarity index 100% rename from content/posts/newsletter-001/roboinstructus.jpg rename to content/news/001/roboinstructus.jpg diff --git a/content/posts/newsletter-001/ruzzt.png b/content/news/001/ruzzt.png similarity index 100% rename from content/posts/newsletter-001/ruzzt.png rename to content/news/001/ruzzt.png diff --git a/content/posts/newsletter-001/space-menace.png b/content/news/001/space-menace.png similarity index 100% rename from content/posts/newsletter-001/space-menace.png rename to content/news/001/space-menace.png diff --git a/content/posts/newsletter-001/veloren.png b/content/news/001/veloren.png similarity index 100% rename from content/posts/newsletter-001/veloren.png rename to content/news/001/veloren.png diff --git a/content/posts/newsletter-001/vlad-asteroinds-gameplay.gif b/content/news/001/vlad-asteroinds-gameplay.gif similarity index 100% rename from content/posts/newsletter-001/vlad-asteroinds-gameplay.gif rename to content/news/001/vlad-asteroinds-gameplay.gif diff --git a/content/posts/newsletter-001/way-of-rhea.gif b/content/news/001/way-of-rhea.gif similarity index 100% rename from content/posts/newsletter-001/way-of-rhea.gif rename to content/news/001/way-of-rhea.gif diff --git a/content/posts/newsletter-001/will-charging.png b/content/news/001/will-charging.png similarity index 100% rename from content/posts/newsletter-001/will-charging.png rename to content/news/001/will-charging.png diff --git a/content/posts/newsletter-002/amethyst-imgui.gif b/content/news/002/amethyst-imgui.gif similarity index 100% rename from content/posts/newsletter-002/amethyst-imgui.gif rename to content/news/002/amethyst-imgui.gif diff --git a/content/posts/newsletter-002/asteroids-demo.gif b/content/news/002/asteroids-demo.gif similarity index 100% rename from content/posts/newsletter-002/asteroids-demo.gif rename to content/news/002/asteroids-demo.gif diff --git a/content/posts/newsletter-002/deios.jpg b/content/news/002/deios.jpg similarity index 100% rename from content/posts/newsletter-002/deios.jpg rename to content/news/002/deios.jpg diff --git a/content/posts/newsletter-002/disconnect-console.png b/content/news/002/disconnect-console.png similarity index 100% rename from content/posts/newsletter-002/disconnect-console.png rename to content/news/002/disconnect-console.png diff --git a/content/posts/newsletter-002/doom-bsp-wasm.png b/content/news/002/doom-bsp-wasm.png similarity index 100% rename from content/posts/newsletter-002/doom-bsp-wasm.png rename to content/news/002/doom-bsp-wasm.png diff --git a/content/posts/newsletter-002/dooskington-devlog-5-screenshot.jpeg b/content/news/002/dooskington-devlog-5-screenshot.jpeg similarity index 100% rename from content/posts/newsletter-002/dooskington-devlog-5-screenshot.jpeg rename to content/news/002/dooskington-devlog-5-screenshot.jpeg diff --git a/content/posts/newsletter-002/garden.jpeg b/content/news/002/garden.jpeg similarity index 100% rename from content/posts/newsletter-002/garden.jpeg rename to content/news/002/garden.jpeg diff --git a/content/posts/newsletter-002/gfx-logo.png b/content/news/002/gfx-logo.png similarity index 100% rename from content/posts/newsletter-002/gfx-logo.png rename to content/news/002/gfx-logo.png diff --git a/content/posts/newsletter-002/github_actions_ci.gif b/content/news/002/github_actions_ci.gif similarity index 100% rename from content/posts/newsletter-002/github_actions_ci.gif rename to content/news/002/github_actions_ci.gif diff --git a/content/posts/newsletter-002/hex-fov.jpeg b/content/news/002/hex-fov.jpeg similarity index 100% rename from content/posts/newsletter-002/hex-fov.jpeg rename to content/news/002/hex-fov.jpeg diff --git a/content/posts/newsletter-002/iced.gif b/content/news/002/iced.gif similarity index 100% rename from content/posts/newsletter-002/iced.gif rename to content/news/002/iced.gif diff --git a/content/posts/newsletter-002/imgui-inspect.png b/content/news/002/imgui-inspect.png similarity index 100% rename from content/posts/newsletter-002/imgui-inspect.png rename to content/news/002/imgui-inspect.png diff --git a/content/posts/newsletter-002/index.md b/content/news/002/index.md similarity index 99% rename from content/posts/newsletter-002/index.md rename to content/news/002/index.md index 139814037..3b75a4a87 100644 --- a/content/posts/newsletter-002/index.md +++ b/content/news/002/index.md @@ -2,7 +2,7 @@ title = "This Month in Rust GameDev #2 - September 2019" date = 2019-10-05 transparent = true -aliases = ["/2019/10/05/newsletter-002", "2019/10/05/newsletter-002.html"] +aliases = ["/2019/10/05/newsletter-002", "2019/10/05/newsletter-002.html", "posts/newsletter-002"] +++ Welcome to the second issue of the Rust GameDev Workgroup’s @@ -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/posts/newsletter-002/live-cli.png b/content/news/002/live-cli.png similarity index 100% rename from content/posts/newsletter-002/live-cli.png rename to content/news/002/live-cli.png diff --git a/content/posts/newsletter-002/live2d-cubism.png b/content/news/002/live2d-cubism.png similarity index 100% rename from content/posts/newsletter-002/live2d-cubism.png rename to content/news/002/live2d-cubism.png diff --git a/content/posts/newsletter-002/minimum.png b/content/news/002/minimum.png similarity index 100% rename from content/posts/newsletter-002/minimum.png rename to content/news/002/minimum.png diff --git a/content/posts/newsletter-002/mun-logo.png b/content/news/002/mun-logo.png similarity index 100% rename from content/posts/newsletter-002/mun-logo.png rename to content/news/002/mun-logo.png diff --git a/content/posts/newsletter-002/proc-dungeons.png b/content/news/002/proc-dungeons.png similarity index 100% rename from content/posts/newsletter-002/proc-dungeons.png rename to content/news/002/proc-dungeons.png diff --git a/content/posts/newsletter-002/recall-singularity.jpeg b/content/news/002/recall-singularity.jpeg similarity index 100% rename from content/posts/newsletter-002/recall-singularity.jpeg rename to content/news/002/recall-singularity.jpeg diff --git a/content/posts/newsletter-002/rltk-rs-example-06.gif b/content/news/002/rltk-rs-example-06.gif similarity index 100% rename from content/posts/newsletter-002/rltk-rs-example-06.gif rename to content/news/002/rltk-rs-example-06.gif diff --git a/content/posts/newsletter-002/robo.jpg b/content/news/002/robo.jpg similarity index 100% rename from content/posts/newsletter-002/robo.jpg rename to content/news/002/robo.jpg diff --git a/content/posts/newsletter-002/rox_clone_attack.png b/content/news/002/rox_clone_attack.png similarity index 100% rename from content/posts/newsletter-002/rox_clone_attack.png rename to content/news/002/rox_clone_attack.png diff --git a/content/posts/newsletter-002/rx.gif b/content/news/002/rx.gif similarity index 100% rename from content/posts/newsletter-002/rx.gif rename to content/news/002/rx.gif diff --git a/content/posts/newsletter-002/sandspiel.png b/content/news/002/sandspiel.png similarity index 100% rename from content/posts/newsletter-002/sandspiel.png rename to content/news/002/sandspiel.png diff --git a/content/posts/newsletter-002/shadows.gif b/content/news/002/shadows.gif similarity index 100% rename from content/posts/newsletter-002/shadows.gif rename to content/news/002/shadows.gif diff --git a/content/posts/newsletter-002/space-shooter.gif b/content/news/002/space-shooter.gif similarity index 100% rename from content/posts/newsletter-002/space-shooter.gif rename to content/news/002/space-shooter.gif diff --git a/content/posts/newsletter-002/splines.png b/content/news/002/splines.png similarity index 100% rename from content/posts/newsletter-002/splines.png rename to content/news/002/splines.png diff --git a/content/posts/newsletter-002/stabman-overworld.png b/content/news/002/stabman-overworld.png similarity index 100% rename from content/posts/newsletter-002/stabman-overworld.png rename to content/news/002/stabman-overworld.png diff --git a/content/posts/newsletter-002/suzanne_lit.png b/content/news/002/suzanne_lit.png similarity index 100% rename from content/posts/newsletter-002/suzanne_lit.png rename to content/news/002/suzanne_lit.png diff --git a/content/posts/newsletter-002/tennis-academy.gif b/content/news/002/tennis-academy.gif similarity index 100% rename from content/posts/newsletter-002/tennis-academy.gif rename to content/news/002/tennis-academy.gif diff --git a/content/posts/newsletter-002/texture-synthesis.jpg b/content/news/002/texture-synthesis.jpg similarity index 100% rename from content/posts/newsletter-002/texture-synthesis.jpg rename to content/news/002/texture-synthesis.jpg diff --git a/content/posts/newsletter-002/vallentin-voxel-terrain.jpeg b/content/news/002/vallentin-voxel-terrain.jpeg similarity index 100% rename from content/posts/newsletter-002/vallentin-voxel-terrain.jpeg rename to content/news/002/vallentin-voxel-terrain.jpeg diff --git a/content/posts/newsletter-002/veloren-town.png b/content/news/002/veloren-town.png similarity index 100% rename from content/posts/newsletter-002/veloren-town.png rename to content/news/002/veloren-town.png diff --git a/content/posts/newsletter-002/wraith-def.jpeg b/content/news/002/wraith-def.jpeg similarity index 100% rename from content/posts/newsletter-002/wraith-def.jpeg rename to content/news/002/wraith-def.jpeg diff --git a/content/posts/newsletter-002/xprite-demo.gif b/content/news/002/xprite-demo.gif similarity index 100% rename from content/posts/newsletter-002/xprite-demo.gif rename to content/news/002/xprite-demo.gif diff --git a/content/posts/newsletter-002/zemeroth.png b/content/news/002/zemeroth.png similarity index 100% rename from content/posts/newsletter-002/zemeroth.png rename to content/news/002/zemeroth.png diff --git a/content/posts/newsletter-003/antorum.jpeg b/content/news/003/antorum.jpeg similarity index 100% rename from content/posts/newsletter-003/antorum.jpeg rename to content/news/003/antorum.jpeg diff --git a/content/posts/newsletter-003/arrakis.png b/content/news/003/arrakis.png similarity index 100% rename from content/posts/newsletter-003/arrakis.png rename to content/news/003/arrakis.png diff --git a/content/posts/newsletter-003/cyclone-physics-demo.gif b/content/news/003/cyclone-physics-demo.gif similarity index 100% rename from content/posts/newsletter-003/cyclone-physics-demo.gif rename to content/news/003/cyclone-physics-demo.gif diff --git a/content/posts/newsletter-003/dissolve.gif b/content/news/003/dissolve.gif similarity index 100% rename from content/posts/newsletter-003/dissolve.gif rename to content/news/003/dissolve.gif diff --git a/content/posts/newsletter-003/ferris-fencing.png b/content/news/003/ferris-fencing.png similarity index 100% rename from content/posts/newsletter-003/ferris-fencing.png rename to content/news/003/ferris-fencing.png diff --git a/content/posts/newsletter-003/garden.jpeg b/content/news/003/garden.jpeg similarity index 100% rename from content/posts/newsletter-003/garden.jpeg rename to content/news/003/garden.jpeg diff --git a/content/posts/newsletter-003/gravisim.png b/content/news/003/gravisim.png similarity index 100% rename from content/posts/newsletter-003/gravisim.png rename to content/news/003/gravisim.png diff --git a/content/posts/newsletter-003/grumpy-visitors.png b/content/news/003/grumpy-visitors.png similarity index 100% rename from content/posts/newsletter-003/grumpy-visitors.png rename to content/news/003/grumpy-visitors.png diff --git a/content/posts/newsletter-003/index.md b/content/news/003/index.md similarity index 98% rename from content/posts/newsletter-003/index.md rename to content/news/003/index.md index a7f0eacf8..74851e5c5 100644 --- a/content/posts/newsletter-003/index.md +++ b/content/news/003/index.md @@ -2,7 +2,7 @@ title = "This Month in Rust GameDev #3 - October 2019" date = 2019-11-07 transparent = true -aliases = ["/2019/11/027/newsletter-003", "2019/11/07/newsletter-003.html"] +aliases = ["/2019/11/027/newsletter-003", "2019/11/07/newsletter-003.html", "posts/newsletter-003"] +++ Welcome to the third issue of the Rust GameDev Workgroup’s @@ -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="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="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="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/posts/newsletter-003/ld45-mindmaze.png b/content/news/003/ld45-mindmaze.png similarity index 100% rename from content/posts/newsletter-003/ld45-mindmaze.png rename to content/news/003/ld45-mindmaze.png diff --git a/content/posts/newsletter-003/legally-dead.png b/content/news/003/legally-dead.png similarity index 100% rename from content/posts/newsletter-003/legally-dead.png rename to content/news/003/legally-dead.png diff --git a/content/posts/newsletter-003/mission_partners_nannou_mozilla.png b/content/news/003/mission_partners_nannou_mozilla.png similarity index 100% rename from content/posts/newsletter-003/mission_partners_nannou_mozilla.png rename to content/news/003/mission_partners_nannou_mozilla.png diff --git a/content/posts/newsletter-003/pf-sandbox.jpg b/content/news/003/pf-sandbox.jpg similarity index 100% rename from content/posts/newsletter-003/pf-sandbox.jpg rename to content/news/003/pf-sandbox.jpg diff --git a/content/posts/newsletter-003/piano.png b/content/news/003/piano.png similarity index 100% rename from content/posts/newsletter-003/piano.png rename to content/news/003/piano.png diff --git a/content/posts/newsletter-003/recall-singular.png b/content/news/003/recall-singular.png similarity index 100% rename from content/posts/newsletter-003/recall-singular.png rename to content/news/003/recall-singular.png diff --git a/content/posts/newsletter-003/rlsl-example.png b/content/news/003/rlsl-example.png similarity index 100% rename from content/posts/newsletter-003/rlsl-example.png rename to content/news/003/rlsl-example.png diff --git a/content/posts/newsletter-003/robo-ru.png b/content/news/003/robo-ru.png similarity index 100% rename from content/posts/newsletter-003/robo-ru.png rename to content/news/003/robo-ru.png diff --git a/content/posts/newsletter-003/rogulike-demo.gif b/content/news/003/rogulike-demo.gif similarity index 100% rename from content/posts/newsletter-003/rogulike-demo.gif rename to content/news/003/rogulike-demo.gif diff --git a/content/posts/newsletter-003/sailor.png b/content/news/003/sailor.png similarity index 100% rename from content/posts/newsletter-003/sailor.png rename to content/news/003/sailor.png diff --git a/content/posts/newsletter-003/salva.png b/content/news/003/salva.png similarity index 100% rename from content/posts/newsletter-003/salva.png rename to content/news/003/salva.png diff --git a/content/posts/newsletter-003/splines.png b/content/news/003/splines.png similarity index 100% rename from content/posts/newsletter-003/splines.png rename to content/news/003/splines.png diff --git a/content/posts/newsletter-003/sulis-abilities-tree.png b/content/news/003/sulis-abilities-tree.png similarity index 100% rename from content/posts/newsletter-003/sulis-abilities-tree.png rename to content/news/003/sulis-abilities-tree.png diff --git a/content/posts/newsletter-003/sulis-battle.png b/content/news/003/sulis-battle.png similarity index 100% rename from content/posts/newsletter-003/sulis-battle.png rename to content/news/003/sulis-battle.png diff --git a/content/posts/newsletter-003/sulis-inventory.png b/content/news/003/sulis-inventory.png similarity index 100% rename from content/posts/newsletter-003/sulis-inventory.png rename to content/news/003/sulis-inventory.png diff --git a/content/posts/newsletter-003/takeryo-eeic-hex-game.png b/content/news/003/takeryo-eeic-hex-game.png similarity index 100% rename from content/posts/newsletter-003/takeryo-eeic-hex-game.png rename to content/news/003/takeryo-eeic-hex-game.png diff --git a/content/posts/newsletter-003/tennis-academy.png b/content/news/003/tennis-academy.png similarity index 100% rename from content/posts/newsletter-003/tennis-academy.png rename to content/news/003/tennis-academy.png diff --git a/content/posts/newsletter-003/ultraviolet-benches.png b/content/news/003/ultraviolet-benches.png similarity index 100% rename from content/posts/newsletter-003/ultraviolet-benches.png rename to content/news/003/ultraviolet-benches.png diff --git a/content/posts/newsletter-003/veloren.png b/content/news/003/veloren.png similarity index 100% rename from content/posts/newsletter-003/veloren.png rename to content/news/003/veloren.png diff --git a/content/posts/newsletter-003/vulkano-logo.png b/content/news/003/vulkano-logo.png similarity index 100% rename from content/posts/newsletter-003/vulkano-logo.png rename to content/news/003/vulkano-logo.png diff --git a/content/posts/newsletter-003/webshinra-hex.jpg b/content/news/003/webshinra-hex.jpg similarity index 100% rename from content/posts/newsletter-003/webshinra-hex.jpg rename to content/news/003/webshinra-hex.jpg diff --git a/content/posts/newsletter-003/working-title.png b/content/news/003/working-title.png similarity index 100% rename from content/posts/newsletter-003/working-title.png rename to content/news/003/working-title.png diff --git a/content/posts/newsletter-004/amethyst-logo.png b/content/news/004/amethyst-logo.png similarity index 100% rename from content/posts/newsletter-004/amethyst-logo.png rename to content/news/004/amethyst-logo.png diff --git a/content/posts/newsletter-004/antorum.jpeg b/content/news/004/antorum.jpeg similarity index 100% rename from content/posts/newsletter-004/antorum.jpeg rename to content/news/004/antorum.jpeg diff --git a/content/posts/newsletter-004/asteroids-demo.gif b/content/news/004/asteroids-demo.gif similarity index 100% rename from content/posts/newsletter-004/asteroids-demo.gif rename to content/news/004/asteroids-demo.gif diff --git a/content/posts/newsletter-004/castles.jpg b/content/news/004/castles.jpg similarity index 100% rename from content/posts/newsletter-004/castles.jpg rename to content/news/004/castles.jpg diff --git a/content/posts/newsletter-004/compact-space.png b/content/news/004/compact-space.png similarity index 100% rename from content/posts/newsletter-004/compact-space.png rename to content/news/004/compact-space.png diff --git a/content/posts/newsletter-004/conquest.png b/content/news/004/conquest.png similarity index 100% rename from content/posts/newsletter-004/conquest.png rename to content/news/004/conquest.png diff --git a/content/posts/newsletter-004/dank_defence.gif b/content/news/004/dank_defence.gif similarity index 100% rename from content/posts/newsletter-004/dank_defence.gif rename to content/news/004/dank_defence.gif diff --git a/content/posts/newsletter-004/embark.png b/content/news/004/embark.png similarity index 100% rename from content/posts/newsletter-004/embark.png rename to content/news/004/embark.png diff --git a/content/posts/newsletter-004/erasterra.png b/content/news/004/erasterra.png similarity index 100% rename from content/posts/newsletter-004/erasterra.png rename to content/news/004/erasterra.png diff --git a/content/posts/newsletter-004/fedor-defense.gif b/content/news/004/fedor-defense.gif similarity index 100% rename from content/posts/newsletter-004/fedor-defense.gif rename to content/news/004/fedor-defense.gif diff --git a/content/posts/newsletter-004/food_truck_cropped.jpg b/content/news/004/food_truck_cropped.jpg similarity index 100% rename from content/posts/newsletter-004/food_truck_cropped.jpg rename to content/news/004/food_truck_cropped.jpg diff --git a/content/posts/newsletter-004/garden.jpeg b/content/news/004/garden.jpeg similarity index 100% rename from content/posts/newsletter-004/garden.jpeg rename to content/news/004/garden.jpeg diff --git a/content/posts/newsletter-004/gh-gameoff.gif b/content/news/004/gh-gameoff.gif similarity index 100% rename from content/posts/newsletter-004/gh-gameoff.gif rename to content/news/004/gh-gameoff.gif diff --git a/content/posts/newsletter-004/gh-gameoff.png b/content/news/004/gh-gameoff.png similarity index 100% rename from content/posts/newsletter-004/gh-gameoff.png rename to content/news/004/gh-gameoff.png diff --git a/content/posts/newsletter-004/iced.gif b/content/news/004/iced.gif similarity index 100% rename from content/posts/newsletter-004/iced.gif rename to content/news/004/iced.gif diff --git a/content/posts/newsletter-004/index.md b/content/news/004/index.md similarity index 98% rename from content/posts/newsletter-004/index.md rename to content/news/004/index.md index 9afc940d1..e97bf85aa 100644 --- a/content/posts/newsletter-004/index.md +++ b/content/news/004/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #4 - November 2019" date = 2019-12-08 transparent = true +aliases = ["posts/newsletter-004"] +++ Welcome to the fourth issue of the Rust GameDev Workgroup’s @@ -200,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="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 @@ -720,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 @@ -776,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="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/posts/newsletter-004/ltd.gif b/content/news/004/ltd.gif similarity index 100% rename from content/posts/newsletter-004/ltd.gif rename to content/news/004/ltd.gif diff --git a/content/posts/newsletter-004/luminance-space-game.gif b/content/news/004/luminance-space-game.gif similarity index 100% rename from content/posts/newsletter-004/luminance-space-game.gif rename to content/news/004/luminance-space-game.gif diff --git a/content/posts/newsletter-004/math-def.png b/content/news/004/math-def.png similarity index 100% rename from content/posts/newsletter-004/math-def.png rename to content/news/004/math-def.png diff --git a/content/posts/newsletter-004/mem-arena.jpg b/content/news/004/mem-arena.jpg similarity index 100% rename from content/posts/newsletter-004/mem-arena.jpg rename to content/news/004/mem-arena.jpg diff --git a/content/posts/newsletter-004/mun_logo.png b/content/news/004/mun_logo.png similarity index 100% rename from content/posts/newsletter-004/mun_logo.png rename to content/news/004/mun_logo.png diff --git a/content/posts/newsletter-004/nannou.png b/content/news/004/nannou.png similarity index 100% rename from content/posts/newsletter-004/nannou.png rename to content/news/004/nannou.png diff --git a/content/posts/newsletter-004/nes-wasm.gif b/content/news/004/nes-wasm.gif similarity index 100% rename from content/posts/newsletter-004/nes-wasm.gif rename to content/news/004/nes-wasm.gif diff --git a/content/posts/newsletter-004/paddlers-arch.png b/content/news/004/paddlers-arch.png similarity index 100% rename from content/posts/newsletter-004/paddlers-arch.png rename to content/news/004/paddlers-arch.png diff --git a/content/posts/newsletter-004/penguin.png b/content/news/004/penguin.png similarity index 100% rename from content/posts/newsletter-004/penguin.png rename to content/news/004/penguin.png diff --git a/content/posts/newsletter-004/pixels.png b/content/news/004/pixels.png similarity index 100% rename from content/posts/newsletter-004/pixels.png rename to content/news/004/pixels.png diff --git a/content/posts/newsletter-004/rayn-render.png b/content/news/004/rayn-render.png similarity index 100% rename from content/posts/newsletter-004/rayn-render.png rename to content/news/004/rayn-render.png diff --git a/content/posts/newsletter-004/recall-sing.gif b/content/news/004/recall-sing.gif similarity index 100% rename from content/posts/newsletter-004/recall-sing.gif rename to content/news/004/recall-sing.gif diff --git a/content/posts/newsletter-004/robo.jpeg b/content/news/004/robo.jpeg similarity index 100% rename from content/posts/newsletter-004/robo.jpeg rename to content/news/004/robo.jpeg diff --git a/content/posts/newsletter-004/rogue-sim.gif b/content/news/004/rogue-sim.gif similarity index 100% rename from content/posts/newsletter-004/rogue-sim.gif rename to content/news/004/rogue-sim.gif diff --git a/content/posts/newsletter-004/rogulike-demo.gif b/content/news/004/rogulike-demo.gif similarity index 100% rename from content/posts/newsletter-004/rogulike-demo.gif rename to content/news/004/rogulike-demo.gif diff --git a/content/posts/newsletter-004/skuplin.jpeg b/content/news/004/skuplin.jpeg similarity index 100% rename from content/posts/newsletter-004/skuplin.jpeg rename to content/news/004/skuplin.jpeg diff --git a/content/posts/newsletter-004/spir-q.png b/content/news/004/spir-q.png similarity index 100% rename from content/posts/newsletter-004/spir-q.png rename to content/news/004/spir-q.png diff --git a/content/posts/newsletter-004/sulis_logo.png b/content/news/004/sulis_logo.png similarity index 100% rename from content/posts/newsletter-004/sulis_logo.png rename to content/news/004/sulis_logo.png diff --git a/content/posts/newsletter-004/tennis-academy.gif b/content/news/004/tennis-academy.gif similarity index 100% rename from content/posts/newsletter-004/tennis-academy.gif rename to content/news/004/tennis-academy.gif diff --git a/content/posts/newsletter-004/veloren-video.png b/content/news/004/veloren-video.png similarity index 100% rename from content/posts/newsletter-004/veloren-video.png rename to content/news/004/veloren-video.png diff --git a/content/posts/newsletter-004/veloren.png b/content/news/004/veloren.png similarity index 100% rename from content/posts/newsletter-004/veloren.png rename to content/news/004/veloren.png diff --git a/content/posts/newsletter-004/webgpu.png b/content/news/004/webgpu.png similarity index 100% rename from content/posts/newsletter-004/webgpu.png rename to content/news/004/webgpu.png diff --git a/content/posts/newsletter-004/will_winner_status.png b/content/news/004/will_winner_status.png similarity index 100% rename from content/posts/newsletter-004/will_winner_status.png rename to content/news/004/will_winner_status.png diff --git a/content/posts/newsletter-005/abstreet.gif b/content/news/005/abstreet.gif similarity index 100% rename from content/posts/newsletter-005/abstreet.gif rename to content/news/005/abstreet.gif diff --git a/content/posts/newsletter-005/akigi.png b/content/news/005/akigi.png similarity index 100% rename from content/posts/newsletter-005/akigi.png rename to content/news/005/akigi.png diff --git a/content/posts/newsletter-005/amethyst-rotating-map.gif b/content/news/005/amethyst-rotating-map.gif similarity index 100% rename from content/posts/newsletter-005/amethyst-rotating-map.gif rename to content/news/005/amethyst-rotating-map.gif diff --git a/content/posts/newsletter-005/compact-space.gif b/content/news/005/compact-space.gif similarity index 100% rename from content/posts/newsletter-005/compact-space.gif rename to content/news/005/compact-space.gif diff --git a/content/posts/newsletter-005/dank-defense.gif b/content/news/005/dank-defense.gif similarity index 100% rename from content/posts/newsletter-005/dank-defense.gif rename to content/news/005/dank-defense.gif diff --git a/content/posts/newsletter-005/doryen-small.png b/content/news/005/doryen-small.png similarity index 100% rename from content/posts/newsletter-005/doryen-small.png rename to content/news/005/doryen-small.png diff --git a/content/posts/newsletter-005/embark.png b/content/news/005/embark.png similarity index 100% rename from content/posts/newsletter-005/embark.png rename to content/news/005/embark.png diff --git a/content/posts/newsletter-005/garden.gif b/content/news/005/garden.gif similarity index 100% rename from content/posts/newsletter-005/garden.gif rename to content/news/005/garden.gif diff --git a/content/posts/newsletter-005/ggez-logo-maroon-full.svg b/content/news/005/ggez-logo-maroon-full.svg similarity index 100% rename from content/posts/newsletter-005/ggez-logo-maroon-full.svg rename to content/news/005/ggez-logo-maroon-full.svg diff --git a/content/posts/newsletter-005/index.md b/content/news/005/index.md similarity index 98% rename from content/posts/newsletter-005/index.md rename to content/news/005/index.md index 9f5b66ab0..25e14d6d6 100644 --- a/content/posts/newsletter-005/index.md +++ b/content/news/005/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #5 - December 2019" date = 2020-01-10 transparent = true +aliases = ["posts/newsletter-005"] +++ Welcome to the fifth issue of the Rust GameDev Workgroup’s @@ -257,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="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. @@ -801,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 @@ -854,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="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/posts/newsletter-005/lyon-sweep-v-h.png b/content/news/005/lyon-sweep-v-h.png similarity index 100% rename from content/posts/newsletter-005/lyon-sweep-v-h.png rename to content/news/005/lyon-sweep-v-h.png diff --git a/content/posts/newsletter-005/makepad.jpg b/content/news/005/makepad.jpg similarity index 100% rename from content/posts/newsletter-005/makepad.jpg rename to content/news/005/makepad.jpg diff --git a/content/posts/newsletter-005/mines.gif b/content/news/005/mines.gif similarity index 100% rename from content/posts/newsletter-005/mines.gif rename to content/news/005/mines.gif diff --git a/content/posts/newsletter-005/miniquad.gif b/content/news/005/miniquad.gif similarity index 100% rename from content/posts/newsletter-005/miniquad.gif rename to content/news/005/miniquad.gif diff --git a/content/posts/newsletter-005/modulator_youtube.gif b/content/news/005/modulator_youtube.gif similarity index 100% rename from content/posts/newsletter-005/modulator_youtube.gif rename to content/news/005/modulator_youtube.gif diff --git a/content/posts/newsletter-005/mun_logo.png b/content/news/005/mun_logo.png similarity index 100% rename from content/posts/newsletter-005/mun_logo.png rename to content/news/005/mun_logo.png diff --git a/content/posts/newsletter-005/nes-multiplay.png b/content/news/005/nes-multiplay.png similarity index 100% rename from content/posts/newsletter-005/nes-multiplay.png rename to content/news/005/nes-multiplay.png diff --git a/content/posts/newsletter-005/oxygengine-dark-logo.svg b/content/news/005/oxygengine-dark-logo.svg similarity index 100% rename from content/posts/newsletter-005/oxygengine-dark-logo.svg rename to content/news/005/oxygengine-dark-logo.svg diff --git a/content/posts/newsletter-005/raylib-rs.png b/content/news/005/raylib-rs.png similarity index 100% rename from content/posts/newsletter-005/raylib-rs.png rename to content/news/005/raylib-rs.png diff --git a/content/posts/newsletter-005/rayn.png b/content/news/005/rayn.png similarity index 100% rename from content/posts/newsletter-005/rayn.png rename to content/news/005/rayn.png diff --git a/content/posts/newsletter-005/rendology_hdr_0_4.png b/content/news/005/rendology_hdr_0_4.png similarity index 100% rename from content/posts/newsletter-005/rendology_hdr_0_4.png rename to content/news/005/rendology_hdr_0_4.png diff --git a/content/posts/newsletter-005/rl-c63-s4.gif b/content/news/005/rl-c63-s4.gif similarity index 100% rename from content/posts/newsletter-005/rl-c63-s4.gif rename to content/news/005/rl-c63-s4.gif diff --git a/content/posts/newsletter-005/roboinstructus.jpg b/content/news/005/roboinstructus.jpg similarity index 100% rename from content/posts/newsletter-005/roboinstructus.jpg rename to content/news/005/roboinstructus.jpg diff --git a/content/posts/newsletter-005/siebencorgie-voxels.jpeg b/content/news/005/siebencorgie-voxels.jpeg similarity index 100% rename from content/posts/newsletter-005/siebencorgie-voxels.jpeg rename to content/news/005/siebencorgie-voxels.jpeg diff --git a/content/posts/newsletter-005/slavic-castles.jpg b/content/news/005/slavic-castles.jpg similarity index 100% rename from content/posts/newsletter-005/slavic-castles.jpg rename to content/news/005/slavic-castles.jpg diff --git a/content/posts/newsletter-005/space-shooter.gif b/content/news/005/space-shooter.gif similarity index 100% rename from content/posts/newsletter-005/space-shooter.gif rename to content/news/005/space-shooter.gif diff --git a/content/posts/newsletter-005/tennis-academy.gif b/content/news/005/tennis-academy.gif similarity index 100% rename from content/posts/newsletter-005/tennis-academy.gif rename to content/news/005/tennis-academy.gif diff --git a/content/posts/newsletter-005/texel.png b/content/news/005/texel.png similarity index 100% rename from content/posts/newsletter-005/texel.png rename to content/news/005/texel.png diff --git a/content/posts/newsletter-005/vangers.png b/content/news/005/vangers.png similarity index 100% rename from content/posts/newsletter-005/vangers.png rename to content/news/005/vangers.png diff --git a/content/posts/newsletter-005/veloren1.png b/content/news/005/veloren1.png similarity index 100% rename from content/posts/newsletter-005/veloren1.png rename to content/news/005/veloren1.png diff --git a/content/posts/newsletter-005/veloren2.png b/content/news/005/veloren2.png similarity index 100% rename from content/posts/newsletter-005/veloren2.png rename to content/news/005/veloren2.png diff --git a/content/posts/newsletter-005/voxel-rs.png b/content/news/005/voxel-rs.png similarity index 100% rename from content/posts/newsletter-005/voxel-rs.png rename to content/news/005/voxel-rs.png diff --git a/content/posts/newsletter-005/will.png b/content/news/005/will.png similarity index 100% rename from content/posts/newsletter-005/will.png rename to content/news/005/will.png diff --git a/content/posts/newsletter-006/12seconds.jpeg b/content/news/006/12seconds.jpeg similarity index 100% rename from content/posts/newsletter-006/12seconds.jpeg rename to content/news/006/12seconds.jpeg diff --git a/content/posts/newsletter-006/4k-mini-gl.png b/content/news/006/4k-mini-gl.png similarity index 100% rename from content/posts/newsletter-006/4k-mini-gl.png rename to content/news/006/4k-mini-gl.png diff --git a/content/posts/newsletter-006/akigi.png b/content/news/006/akigi.png similarity index 100% rename from content/posts/newsletter-006/akigi.png rename to content/news/006/akigi.png diff --git a/content/posts/newsletter-006/amethyst-logo.png b/content/news/006/amethyst-logo.png similarity index 100% rename from content/posts/newsletter-006/amethyst-logo.png rename to content/news/006/amethyst-logo.png diff --git a/content/posts/newsletter-006/antorum.jpg b/content/news/006/antorum.jpg similarity index 100% rename from content/posts/newsletter-006/antorum.jpg rename to content/news/006/antorum.jpg diff --git a/content/posts/newsletter-006/bonus-bw.png b/content/news/006/bonus-bw.png similarity index 100% rename from content/posts/newsletter-006/bonus-bw.png rename to content/news/006/bonus-bw.png diff --git a/content/posts/newsletter-006/cmd-tea-game.jpeg b/content/news/006/cmd-tea-game.jpeg similarity index 100% rename from content/posts/newsletter-006/cmd-tea-game.jpeg rename to content/news/006/cmd-tea-game.jpeg diff --git a/content/posts/newsletter-006/colony-genesis.png b/content/news/006/colony-genesis.png similarity index 100% rename from content/posts/newsletter-006/colony-genesis.png rename to content/news/006/colony-genesis.png diff --git a/content/posts/newsletter-006/cows.png b/content/news/006/cows.png similarity index 100% rename from content/posts/newsletter-006/cows.png rename to content/news/006/cows.png diff --git a/content/posts/newsletter-006/dash.gif b/content/news/006/dash.gif similarity index 100% rename from content/posts/newsletter-006/dash.gif rename to content/news/006/dash.gif diff --git a/content/posts/newsletter-006/dwarfs.gif b/content/news/006/dwarfs.gif similarity index 100% rename from content/posts/newsletter-006/dwarfs.gif rename to content/news/006/dwarfs.gif diff --git a/content/posts/newsletter-006/grumpy-visitors.png b/content/news/006/grumpy-visitors.png similarity index 100% rename from content/posts/newsletter-006/grumpy-visitors.png rename to content/news/006/grumpy-visitors.png diff --git a/content/posts/newsletter-006/index.md b/content/news/006/index.md similarity index 99% rename from content/posts/newsletter-006/index.md rename to content/news/006/index.md index 3f887eb4c..1c06e7994 100644 --- a/content/posts/newsletter-006/index.md +++ b/content/news/006/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #6 - January 2020" date = 2020-02-16 transparent = true +aliases = ["posts/newsletter-006"] +++ Welcome to the sixth issue of the Rust GameDev Workgroup’s @@ -108,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 @@ -837,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="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: @@ -961,7 +964,7 @@ _Discussions: [nestur]: https://github.com/spieglt/nestur -## Popular Workgroup Issues in Github +## Popular Workgroup Issues in GitHub diff --git a/content/posts/newsletter-006/mao-brush.png b/content/news/006/mao-brush.png similarity index 100% rename from content/posts/newsletter-006/mao-brush.png rename to content/news/006/mao-brush.png diff --git a/content/posts/newsletter-006/micro-entertainment-pack.png b/content/news/006/micro-entertainment-pack.png similarity index 100% rename from content/posts/newsletter-006/micro-entertainment-pack.png rename to content/news/006/micro-entertainment-pack.png diff --git a/content/posts/newsletter-006/mun-logo.png b/content/news/006/mun-logo.png similarity index 100% rename from content/posts/newsletter-006/mun-logo.png rename to content/news/006/mun-logo.png diff --git a/content/posts/newsletter-006/muoxi-cog.png b/content/news/006/muoxi-cog.png similarity index 100% rename from content/posts/newsletter-006/muoxi-cog.png rename to content/news/006/muoxi-cog.png diff --git a/content/posts/newsletter-006/nestur.png b/content/news/006/nestur.png similarity index 100% rename from content/posts/newsletter-006/nestur.png rename to content/news/006/nestur.png diff --git a/content/posts/newsletter-006/noodle-cat.png b/content/news/006/noodle-cat.png similarity index 100% rename from content/posts/newsletter-006/noodle-cat.png rename to content/news/006/noodle-cat.png diff --git a/content/posts/newsletter-006/oxygengine-dark-logo.svg b/content/news/006/oxygengine-dark-logo.svg similarity index 100% rename from content/posts/newsletter-006/oxygengine-dark-logo.svg rename to content/news/006/oxygengine-dark-logo.svg diff --git a/content/posts/newsletter-006/q3.jpeg b/content/news/006/q3.jpeg similarity index 100% rename from content/posts/newsletter-006/q3.jpeg rename to content/news/006/q3.jpeg diff --git a/content/posts/newsletter-006/rad.png b/content/news/006/rad.png similarity index 100% rename from content/posts/newsletter-006/rad.png rename to content/news/006/rad.png diff --git a/content/posts/newsletter-006/realm-one.png b/content/news/006/realm-one.png similarity index 100% rename from content/posts/newsletter-006/realm-one.png rename to content/news/006/realm-one.png diff --git a/content/posts/newsletter-006/rl-c70-pewpew.gif b/content/news/006/rl-c70-pewpew.gif similarity index 100% rename from content/posts/newsletter-006/rl-c70-pewpew.gif rename to content/news/006/rl-c70-pewpew.gif diff --git a/content/posts/newsletter-006/rust-1-41.png b/content/news/006/rust-1-41.png similarity index 100% rename from content/posts/newsletter-006/rust-1-41.png rename to content/news/006/rust-1-41.png diff --git a/content/posts/newsletter-006/rust-3d-wasm.png b/content/news/006/rust-3d-wasm.png similarity index 100% rename from content/posts/newsletter-006/rust-3d-wasm.png rename to content/news/006/rust-3d-wasm.png diff --git a/content/posts/newsletter-006/rustacean-station.jpg b/content/news/006/rustacean-station.jpg similarity index 100% rename from content/posts/newsletter-006/rustacean-station.jpg rename to content/news/006/rustacean-station.jpg diff --git a/content/posts/newsletter-006/scales.png b/content/news/006/scales.png similarity index 100% rename from content/posts/newsletter-006/scales.png rename to content/news/006/scales.png diff --git a/content/posts/newsletter-006/snake-course.gif b/content/news/006/snake-course.gif similarity index 100% rename from content/posts/newsletter-006/snake-course.gif rename to content/news/006/snake-course.gif diff --git a/content/posts/newsletter-006/space-game.png b/content/news/006/space-game.png similarity index 100% rename from content/posts/newsletter-006/space-game.png rename to content/news/006/space-game.png diff --git a/content/posts/newsletter-006/spir-q.png b/content/news/006/spir-q.png similarity index 100% rename from content/posts/newsletter-006/spir-q.png rename to content/news/006/spir-q.png diff --git a/content/posts/newsletter-006/split.png b/content/news/006/split.png similarity index 100% rename from content/posts/newsletter-006/split.png rename to content/news/006/split.png diff --git a/content/posts/newsletter-006/veloren1.png b/content/news/006/veloren1.png similarity index 100% rename from content/posts/newsletter-006/veloren1.png rename to content/news/006/veloren1.png diff --git a/content/posts/newsletter-006/veloren2.png b/content/news/006/veloren2.png similarity index 100% rename from content/posts/newsletter-006/veloren2.png rename to content/news/006/veloren2.png diff --git a/content/posts/newsletter-006/wall-jump.gif b/content/news/006/wall-jump.gif similarity index 100% rename from content/posts/newsletter-006/wall-jump.gif rename to content/news/006/wall-jump.gif diff --git a/content/posts/newsletter-006/will-character-selection.png b/content/news/006/will-character-selection.png similarity index 100% rename from content/posts/newsletter-006/will-character-selection.png rename to content/news/006/will-character-selection.png diff --git a/content/posts/newsletter-007/akigi.png b/content/news/007/akigi.png similarity index 100% rename from content/posts/newsletter-007/akigi.png rename to content/news/007/akigi.png diff --git a/content/posts/newsletter-007/antorum.jpg b/content/news/007/antorum.jpg similarity index 100% rename from content/posts/newsletter-007/antorum.jpg rename to content/news/007/antorum.jpg diff --git a/content/posts/newsletter-007/awgy.png b/content/news/007/awgy.png similarity index 100% rename from content/posts/newsletter-007/awgy.png rename to content/news/007/awgy.png diff --git a/content/posts/newsletter-007/china.png b/content/news/007/china.png similarity index 100% rename from content/posts/newsletter-007/china.png rename to content/news/007/china.png diff --git a/content/posts/newsletter-007/colony-genesis.png b/content/news/007/colony-genesis.png similarity index 100% rename from content/posts/newsletter-007/colony-genesis.png rename to content/news/007/colony-genesis.png diff --git a/content/posts/newsletter-007/crow-akari.png b/content/news/007/crow-akari.png similarity index 100% rename from content/posts/newsletter-007/crow-akari.png rename to content/news/007/crow-akari.png diff --git a/content/posts/newsletter-007/dash.gif b/content/news/007/dash.gif similarity index 100% rename from content/posts/newsletter-007/dash.gif rename to content/news/007/dash.gif diff --git a/content/posts/newsletter-007/discord-invite.png b/content/news/007/discord-invite.png similarity index 100% rename from content/posts/newsletter-007/discord-invite.png rename to content/news/007/discord-invite.png diff --git a/content/posts/newsletter-007/dwarf-world.png b/content/news/007/dwarf-world.png similarity index 100% rename from content/posts/newsletter-007/dwarf-world.png rename to content/news/007/dwarf-world.png diff --git a/content/posts/newsletter-007/everpuzzle-020-preview.gif b/content/news/007/everpuzzle-020-preview.gif similarity index 100% rename from content/posts/newsletter-007/everpuzzle-020-preview.gif rename to content/news/007/everpuzzle-020-preview.gif diff --git a/content/posts/newsletter-007/for-quest.gif b/content/news/007/for-quest.gif similarity index 100% rename from content/posts/newsletter-007/for-quest.gif rename to content/news/007/for-quest.gif diff --git a/content/posts/newsletter-007/fyt-ggez.gif b/content/news/007/fyt-ggez.gif similarity index 100% rename from content/posts/newsletter-007/fyt-ggez.gif rename to content/news/007/fyt-ggez.gif diff --git a/content/posts/newsletter-007/garden-pyramids.jpg b/content/news/007/garden-pyramids.jpg similarity index 100% rename from content/posts/newsletter-007/garden-pyramids.jpg rename to content/news/007/garden-pyramids.jpg diff --git a/content/posts/newsletter-007/grumpy_missiles.jpg b/content/news/007/grumpy_missiles.jpg similarity index 100% rename from content/posts/newsletter-007/grumpy_missiles.jpg rename to content/news/007/grumpy_missiles.jpg diff --git a/content/posts/newsletter-007/index.md b/content/news/007/index.md similarity index 96% rename from content/posts/newsletter-007/index.md rename to content/news/007/index.md index c40e3ce50..3d168d99a 100644 --- a/content/posts/newsletter-007/index.md +++ b/content/news/007/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #7 - February 2020" date = 2020-03-05 transparent = true +aliases = ["posts/newsletter-007"] +++ Welcome to the seventh issue of the Rust GameDev Workgroup’s @@ -176,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="veloren1.png" + caption="Rolling mountain landscape") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -195,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 @@ -213,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="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: @@ -242,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="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. @@ -269,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="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="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 @@ -484,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="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. @@ -589,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="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]. @@ -632,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="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. @@ -904,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="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. @@ -1159,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/posts/newsletter-007/kas.png b/content/news/007/kas.png similarity index 100% rename from content/posts/newsletter-007/kas.png rename to content/news/007/kas.png diff --git a/content/posts/newsletter-007/logo_salva_full.svg b/content/news/007/logo_salva_full.svg similarity index 100% rename from content/posts/newsletter-007/logo_salva_full.svg rename to content/news/007/logo_salva_full.svg diff --git a/content/posts/newsletter-007/lonely-star.png b/content/news/007/lonely-star.png similarity index 100% rename from content/posts/newsletter-007/lonely-star.png rename to content/news/007/lonely-star.png diff --git a/content/posts/newsletter-007/miniquad-sample.png b/content/news/007/miniquad-sample.png similarity index 100% rename from content/posts/newsletter-007/miniquad-sample.png rename to content/news/007/miniquad-sample.png diff --git a/content/posts/newsletter-007/n-body-sim.gif b/content/news/007/n-body-sim.gif similarity index 100% rename from content/posts/newsletter-007/n-body-sim.gif rename to content/news/007/n-body-sim.gif diff --git a/content/posts/newsletter-007/nannou.gif b/content/news/007/nannou.gif similarity index 100% rename from content/posts/newsletter-007/nannou.gif rename to content/news/007/nannou.gif diff --git a/content/posts/newsletter-007/neovide-cursor.gif b/content/news/007/neovide-cursor.gif similarity index 100% rename from content/posts/newsletter-007/neovide-cursor.gif rename to content/news/007/neovide-cursor.gif diff --git a/content/posts/newsletter-007/noodle-cat.gif b/content/news/007/noodle-cat.gif similarity index 100% rename from content/posts/newsletter-007/noodle-cat.gif rename to content/news/007/noodle-cat.gif diff --git a/content/posts/newsletter-007/not-cool.png b/content/news/007/not-cool.png similarity index 100% rename from content/posts/newsletter-007/not-cool.png rename to content/news/007/not-cool.png diff --git a/content/posts/newsletter-007/oxidator-map-editor.gif b/content/news/007/oxidator-map-editor.gif similarity index 100% rename from content/posts/newsletter-007/oxidator-map-editor.gif rename to content/news/007/oxidator-map-editor.gif diff --git a/content/posts/newsletter-007/oxidator-play.gif b/content/news/007/oxidator-play.gif similarity index 100% rename from content/posts/newsletter-007/oxidator-play.gif rename to content/news/007/oxidator-play.gif diff --git a/content/posts/newsletter-007/oxidator-unit-editor.gif b/content/news/007/oxidator-unit-editor.gif similarity index 100% rename from content/posts/newsletter-007/oxidator-unit-editor.gif rename to content/news/007/oxidator-unit-editor.gif diff --git a/content/posts/newsletter-007/oxygengine-dark-logo.svg b/content/news/007/oxygengine-dark-logo.svg similarity index 100% rename from content/posts/newsletter-007/oxygengine-dark-logo.svg rename to content/news/007/oxygengine-dark-logo.svg diff --git a/content/posts/newsletter-007/oxygengine-visual-novel-teaser.gif b/content/news/007/oxygengine-visual-novel-teaser.gif similarity index 100% rename from content/posts/newsletter-007/oxygengine-visual-novel-teaser.gif rename to content/news/007/oxygengine-visual-novel-teaser.gif diff --git a/content/posts/newsletter-007/pglowrpg.gif b/content/news/007/pglowrpg.gif similarity index 100% rename from content/posts/newsletter-007/pglowrpg.gif rename to content/news/007/pglowrpg.gif diff --git a/content/posts/newsletter-007/pushrod-layout.png b/content/news/007/pushrod-layout.png similarity index 100% rename from content/posts/newsletter-007/pushrod-layout.png rename to content/news/007/pushrod-layout.png diff --git a/content/posts/newsletter-007/recall-singularity.png b/content/news/007/recall-singularity.png similarity index 100% rename from content/posts/newsletter-007/recall-singularity.png rename to content/news/007/recall-singularity.png diff --git a/content/posts/newsletter-007/rg-300.jpeg b/content/news/007/rg-300.jpeg similarity index 100% rename from content/posts/newsletter-007/rg-300.jpeg rename to content/news/007/rg-300.jpeg diff --git a/content/posts/newsletter-007/riot-api.jpg b/content/news/007/riot-api.jpg similarity index 100% rename from content/posts/newsletter-007/riot-api.jpg rename to content/news/007/riot-api.jpg diff --git a/content/posts/newsletter-007/roboinstructus.jpg b/content/news/007/roboinstructus.jpg similarity index 100% rename from content/posts/newsletter-007/roboinstructus.jpg rename to content/news/007/roboinstructus.jpg diff --git a/content/posts/newsletter-007/roguelike-tutorial.jpg b/content/news/007/roguelike-tutorial.jpg similarity index 100% rename from content/posts/newsletter-007/roguelike-tutorial.jpg rename to content/news/007/roguelike-tutorial.jpg diff --git a/content/posts/newsletter-007/rusty-shooter-in-game.jpg b/content/news/007/rusty-shooter-in-game.jpg similarity index 100% rename from content/posts/newsletter-007/rusty-shooter-in-game.jpg rename to content/news/007/rusty-shooter-in-game.jpg diff --git a/content/posts/newsletter-007/rusty-shooter-youtube.PNG b/content/news/007/rusty-shooter-youtube.PNG similarity index 100% rename from content/posts/newsletter-007/rusty-shooter-youtube.PNG rename to content/news/007/rusty-shooter-youtube.PNG diff --git a/content/posts/newsletter-007/scale.png b/content/news/007/scale.png similarity index 100% rename from content/posts/newsletter-007/scale.png rename to content/news/007/scale.png diff --git a/content/posts/newsletter-007/superluminal-app.png b/content/news/007/superluminal-app.png similarity index 100% rename from content/posts/newsletter-007/superluminal-app.png rename to content/news/007/superluminal-app.png diff --git a/content/posts/newsletter-007/superlumunal.png b/content/news/007/superlumunal.png similarity index 100% rename from content/posts/newsletter-007/superlumunal.png rename to content/news/007/superlumunal.png diff --git a/content/posts/survey-01/survey-thanks.png b/content/news/007/survey-thanks.png similarity index 100% rename from content/posts/survey-01/survey-thanks.png rename to content/news/007/survey-thanks.png diff --git a/content/posts/newsletter-007/tallinn.jpeg b/content/news/007/tallinn.jpeg similarity index 100% rename from content/posts/newsletter-007/tallinn.jpeg rename to content/news/007/tallinn.jpeg diff --git a/content/posts/newsletter-007/tikan-youtube.png b/content/news/007/tikan-youtube.png similarity index 100% rename from content/posts/newsletter-007/tikan-youtube.png rename to content/news/007/tikan-youtube.png diff --git a/content/posts/newsletter-007/ultimate_scale.png b/content/news/007/ultimate_scale.png similarity index 100% rename from content/posts/newsletter-007/ultimate_scale.png rename to content/news/007/ultimate_scale.png diff --git a/content/posts/newsletter-007/univer-city-demo.gif b/content/news/007/univer-city-demo.gif similarity index 100% rename from content/posts/newsletter-007/univer-city-demo.gif rename to content/news/007/univer-city-demo.gif diff --git a/content/posts/newsletter-007/univer-logo.jpg b/content/news/007/univer-logo.jpg similarity index 100% rename from content/posts/newsletter-007/univer-logo.jpg rename to content/news/007/univer-logo.jpg diff --git a/content/posts/newsletter-007/veloren1.png b/content/news/007/veloren1.png similarity index 100% rename from content/posts/newsletter-007/veloren1.png rename to content/news/007/veloren1.png diff --git a/content/posts/newsletter-007/veloren2.png b/content/news/007/veloren2.png similarity index 100% rename from content/posts/newsletter-007/veloren2.png rename to content/news/007/veloren2.png diff --git a/content/posts/newsletter-007/veloren3.gif b/content/news/007/veloren3.gif similarity index 100% rename from content/posts/newsletter-007/veloren3.gif rename to content/news/007/veloren3.gif diff --git a/content/posts/newsletter-007/way-of-rhea.jpg b/content/news/007/way-of-rhea.jpg similarity index 100% rename from content/posts/newsletter-007/way-of-rhea.jpg rename to content/news/007/way-of-rhea.jpg diff --git a/content/posts/newsletter-007/wgpu-logo.png b/content/news/007/wgpu-logo.png similarity index 100% rename from content/posts/newsletter-007/wgpu-logo.png rename to content/news/007/wgpu-logo.png diff --git a/content/posts/newsletter-007/wgpu-talk.png b/content/news/007/wgpu-talk.png similarity index 100% rename from content/posts/newsletter-007/wgpu-talk.png rename to content/news/007/wgpu-talk.png diff --git a/content/posts/newsletter-007/will_network_play.png b/content/news/007/will_network_play.png similarity index 100% rename from content/posts/newsletter-007/will_network_play.png rename to content/news/007/will_network_play.png diff --git a/content/posts/newsletter-008/akigi.png b/content/news/008/akigi.png similarity index 100% rename from content/posts/newsletter-008/akigi.png rename to content/news/008/akigi.png diff --git a/content/posts/newsletter-008/amethyst-logo.png b/content/news/008/amethyst-logo.png similarity index 100% rename from content/posts/newsletter-008/amethyst-logo.png rename to content/news/008/amethyst-logo.png diff --git a/content/posts/newsletter-008/ascension.gif b/content/news/008/ascension.gif similarity index 100% rename from content/posts/newsletter-008/ascension.gif rename to content/news/008/ascension.gif diff --git a/content/posts/newsletter-008/colony.png b/content/news/008/colony.png similarity index 100% rename from content/posts/newsletter-008/colony.png rename to content/news/008/colony.png diff --git a/content/posts/newsletter-008/const-tweaker.gif b/content/news/008/const-tweaker.gif similarity index 100% rename from content/posts/newsletter-008/const-tweaker.gif rename to content/news/008/const-tweaker.gif diff --git a/content/posts/newsletter-008/cp437-demo.gif b/content/news/008/cp437-demo.gif similarity index 100% rename from content/posts/newsletter-008/cp437-demo.gif rename to content/news/008/cp437-demo.gif diff --git a/content/posts/newsletter-008/deeper.png b/content/news/008/deeper.png similarity index 100% rename from content/posts/newsletter-008/deeper.png rename to content/news/008/deeper.png diff --git a/content/posts/newsletter-008/dynamaze.png b/content/news/008/dynamaze.png similarity index 100% rename from content/posts/newsletter-008/dynamaze.png rename to content/news/008/dynamaze.png diff --git a/content/posts/newsletter-008/forthequest.jpg b/content/news/008/forthequest.jpg similarity index 100% rename from content/posts/newsletter-008/forthequest.jpg rename to content/news/008/forthequest.jpg diff --git a/content/posts/newsletter-008/garden.gif b/content/news/008/garden.gif similarity index 100% rename from content/posts/newsletter-008/garden.gif rename to content/news/008/garden.gif diff --git a/content/posts/newsletter-008/helix-repair.png b/content/news/008/helix-repair.png similarity index 100% rename from content/posts/newsletter-008/helix-repair.png rename to content/news/008/helix-repair.png diff --git a/content/posts/newsletter-008/index.md b/content/news/008/index.md similarity index 98% rename from content/posts/newsletter-008/index.md rename to content/news/008/index.md index e5f576928..0af92e25e 100644 --- a/content/posts/newsletter-008/index.md +++ b/content/news/008/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #8 - March 2020" date = 2020-04-08 transparent = true +aliases = ["posts/newsletter-008"] +++ Welcome to the eighth issue of the Rust GameDev Workgroup’s @@ -333,8 +334,10 @@ Some of this month's updates: ### [Veloren][veloren] -![LoD](veloren1.png) -_Work on Level of Detail_ +{{ image_figure( + alt="LoD" + src="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. @@ -347,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 @@ -432,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="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: @@ -516,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="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. @@ -759,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/posts/newsletter-008/miniquad.gif b/content/news/008/miniquad.gif similarity index 100% rename from content/posts/newsletter-008/miniquad.gif rename to content/news/008/miniquad.gif diff --git a/content/posts/newsletter-008/mun-logo.png b/content/news/008/mun-logo.png similarity index 100% rename from content/posts/newsletter-008/mun-logo.png rename to content/news/008/mun-logo.png diff --git a/content/posts/newsletter-008/nannou.png b/content/news/008/nannou.png similarity index 100% rename from content/posts/newsletter-008/nannou.png rename to content/news/008/nannou.png diff --git a/content/posts/newsletter-008/oxygengine-asset-browser.gif b/content/news/008/oxygengine-asset-browser.gif similarity index 100% rename from content/posts/newsletter-008/oxygengine-asset-browser.gif rename to content/news/008/oxygengine-asset-browser.gif diff --git a/content/posts/newsletter-008/oxygengine-dark-logo.svg b/content/news/008/oxygengine-dark-logo.svg similarity index 100% rename from content/posts/newsletter-008/oxygengine-dark-logo.svg rename to content/news/008/oxygengine-dark-logo.svg diff --git a/content/posts/newsletter-008/pglowrpg.png b/content/news/008/pglowrpg.png similarity index 100% rename from content/posts/newsletter-008/pglowrpg.png rename to content/news/008/pglowrpg.png diff --git a/content/posts/newsletter-008/quest.jpg b/content/news/008/quest.jpg similarity index 100% rename from content/posts/newsletter-008/quest.jpg rename to content/news/008/quest.jpg diff --git a/content/posts/newsletter-008/realm-one-video.png b/content/news/008/realm-one-video.png similarity index 100% rename from content/posts/newsletter-008/realm-one-video.png rename to content/news/008/realm-one-video.png diff --git a/content/posts/newsletter-008/robo-logo.jpeg b/content/news/008/robo-logo.jpeg similarity index 100% rename from content/posts/newsletter-008/robo-logo.jpeg rename to content/news/008/robo-logo.jpeg diff --git a/content/posts/newsletter-008/robo-screenshot.jpg b/content/news/008/robo-screenshot.jpg similarity index 100% rename from content/posts/newsletter-008/robo-screenshot.jpg rename to content/news/008/robo-screenshot.jpg diff --git a/content/posts/newsletter-008/rustsim-simba.svg b/content/news/008/rustsim-simba.svg similarity index 100% rename from content/posts/newsletter-008/rustsim-simba.svg rename to content/news/008/rustsim-simba.svg diff --git a/content/posts/newsletter-008/slime99.png b/content/news/008/slime99.png similarity index 100% rename from content/posts/newsletter-008/slime99.png rename to content/news/008/slime99.png diff --git a/content/posts/newsletter-008/specs-vs-legion.png b/content/news/008/specs-vs-legion.png similarity index 100% rename from content/posts/newsletter-008/specs-vs-legion.png rename to content/news/008/specs-vs-legion.png diff --git a/content/posts/newsletter-008/sphere.png b/content/news/008/sphere.png similarity index 100% rename from content/posts/newsletter-008/sphere.png rename to content/news/008/sphere.png diff --git a/content/posts/newsletter-008/tennis.gif b/content/news/008/tennis.gif similarity index 100% rename from content/posts/newsletter-008/tennis.gif rename to content/news/008/tennis.gif diff --git a/content/posts/newsletter-008/three-d-lighting.png b/content/news/008/three-d-lighting.png similarity index 100% rename from content/posts/newsletter-008/three-d-lighting.png rename to content/news/008/three-d-lighting.png diff --git a/content/posts/newsletter-008/three-d-spider.jpeg b/content/news/008/three-d-spider.jpeg similarity index 100% rename from content/posts/newsletter-008/three-d-spider.jpeg rename to content/news/008/three-d-spider.jpeg diff --git a/content/posts/newsletter-008/urban-gift-video.png b/content/news/008/urban-gift-video.png similarity index 100% rename from content/posts/newsletter-008/urban-gift-video.png rename to content/news/008/urban-gift-video.png diff --git a/content/posts/newsletter-008/veloren1.png b/content/news/008/veloren1.png similarity index 100% rename from content/posts/newsletter-008/veloren1.png rename to content/news/008/veloren1.png diff --git a/content/posts/newsletter-008/veloren2.png b/content/news/008/veloren2.png similarity index 100% rename from content/posts/newsletter-008/veloren2.png rename to content/news/008/veloren2.png diff --git a/content/posts/newsletter-008/will_main.png b/content/news/008/will_main.png similarity index 100% rename from content/posts/newsletter-008/will_main.png rename to content/news/008/will_main.png diff --git a/content/posts/newsletter-008/zemeroth.jpeg b/content/news/008/zemeroth.jpeg similarity index 100% rename from content/posts/newsletter-008/zemeroth.jpeg rename to content/news/008/zemeroth.jpeg diff --git a/content/posts/newsletter-009/abstreetgui.png b/content/news/009/abstreetgui.png similarity index 100% rename from content/posts/newsletter-009/abstreetgui.png rename to content/news/009/abstreetgui.png diff --git a/content/posts/newsletter-009/akigi-shadows.jpeg b/content/news/009/akigi-shadows.jpeg similarity index 100% rename from content/posts/newsletter-009/akigi-shadows.jpeg rename to content/news/009/akigi-shadows.jpeg diff --git a/content/posts/newsletter-009/amethyst-logo.png b/content/news/009/amethyst-logo.png similarity index 100% rename from content/posts/newsletter-009/amethyst-logo.png rename to content/news/009/amethyst-logo.png diff --git a/content/posts/newsletter-009/blobs-n-bullets.gif b/content/news/009/blobs-n-bullets.gif similarity index 100% rename from content/posts/newsletter-009/blobs-n-bullets.gif rename to content/news/009/blobs-n-bullets.gif diff --git a/content/posts/newsletter-009/boulder_dash.png b/content/news/009/boulder_dash.png similarity index 100% rename from content/posts/newsletter-009/boulder_dash.png rename to content/news/009/boulder_dash.png diff --git a/content/posts/newsletter-009/citybound.jpeg b/content/news/009/citybound.jpeg similarity index 100% rename from content/posts/newsletter-009/citybound.jpeg rename to content/news/009/citybound.jpeg diff --git a/content/posts/newsletter-009/colony.png b/content/news/009/colony.png similarity index 100% rename from content/posts/newsletter-009/colony.png rename to content/news/009/colony.png diff --git a/content/posts/newsletter-009/conquest.gif b/content/news/009/conquest.gif similarity index 100% rename from content/posts/newsletter-009/conquest.gif rename to content/news/009/conquest.gif diff --git a/content/posts/newsletter-009/cratebeforeattack.png b/content/news/009/cratebeforeattack.png similarity index 100% rename from content/posts/newsletter-009/cratebeforeattack.png rename to content/news/009/cratebeforeattack.png diff --git a/content/posts/newsletter-009/dgnfog.jpeg b/content/news/009/dgnfog.jpeg similarity index 100% rename from content/posts/newsletter-009/dgnfog.jpeg rename to content/news/009/dgnfog.jpeg diff --git a/content/posts/newsletter-009/erupt.png b/content/news/009/erupt.png similarity index 100% rename from content/posts/newsletter-009/erupt.png rename to content/news/009/erupt.png diff --git a/content/posts/newsletter-009/fermi-paradox.jpg b/content/news/009/fermi-paradox.jpg similarity index 100% rename from content/posts/newsletter-009/fermi-paradox.jpg rename to content/news/009/fermi-paradox.jpg diff --git a/content/posts/newsletter-009/forthequest.jpg b/content/news/009/forthequest.jpg similarity index 100% rename from content/posts/newsletter-009/forthequest.jpg rename to content/news/009/forthequest.jpg diff --git a/content/posts/newsletter-009/frog-rations.jpg b/content/news/009/frog-rations.jpg similarity index 100% rename from content/posts/newsletter-009/frog-rations.jpg rename to content/news/009/frog-rations.jpg diff --git a/content/posts/newsletter-009/grumpy_visitors-video.gif b/content/news/009/grumpy_visitors-video.gif similarity index 100% rename from content/posts/newsletter-009/grumpy_visitors-video.gif rename to content/news/009/grumpy_visitors-video.gif diff --git a/content/posts/newsletter-009/hectic.png b/content/news/009/hectic.png similarity index 100% rename from content/posts/newsletter-009/hectic.png rename to content/news/009/hectic.png diff --git a/content/posts/newsletter-009/ignite-code-media.gif b/content/news/009/ignite-code-media.gif similarity index 100% rename from content/posts/newsletter-009/ignite-code-media.gif rename to content/news/009/ignite-code-media.gif diff --git a/content/posts/newsletter-009/ignite-play-mode.jpeg b/content/news/009/ignite-play-mode.jpeg similarity index 100% rename from content/posts/newsletter-009/ignite-play-mode.jpeg rename to content/news/009/ignite-play-mode.jpeg diff --git a/content/posts/newsletter-009/ignite-proc-macro.png b/content/news/009/ignite-proc-macro.png similarity index 100% rename from content/posts/newsletter-009/ignite-proc-macro.png rename to content/news/009/ignite-proc-macro.png diff --git a/content/posts/newsletter-009/index.md b/content/news/009/index.md similarity index 97% rename from content/posts/newsletter-009/index.md rename to content/news/009/index.md index c535ba2c8..a3bb90147 100644 --- a/content/posts/newsletter-009/index.md +++ b/content/news/009/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #9 - April 2020" date = 2020-05-06 transparent = true +aliases = ["posts/newsletter-009"] +++ Welcome to the ninth issue of the Rust GameDev Workgroup’s @@ -246,8 +247,10 @@ Follow [@seratonik] on Twitter for updates. ### [Akigi][akigi] -![shadows demo](akigi-shadows.jpeg) -_new shadows_ +{{ image_figure( + alt="shadows demo" + src="akigi-shadows.jpeg" + caption="new shadows") }} > [Akigi][akigi] is a multiplayer online world where humans > aren't the only intelligent animals. @@ -478,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="veloren1.png" + caption="Early procedural building generation") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -494,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 @@ -516,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="veloren2.png" + caption="Early procedural building generation") }} You can read more about some specific topics from April: @@ -631,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="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 @@ -737,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="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]), @@ -882,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="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. @@ -1074,7 +1087,7 @@ _Discussions: [Godot]: https://godotengine.org @@ -1123,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="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/posts/newsletter-009/ldn-video.jpeg b/content/news/009/ldn-video.jpeg similarity index 100% rename from content/posts/newsletter-009/ldn-video.jpeg rename to content/news/009/ldn-video.jpeg diff --git a/content/posts/newsletter-009/lighthouse-keeper.jpg b/content/news/009/lighthouse-keeper.jpg similarity index 100% rename from content/posts/newsletter-009/lighthouse-keeper.jpg rename to content/news/009/lighthouse-keeper.jpg diff --git a/content/posts/newsletter-009/melody-madness.png b/content/news/009/melody-madness.png similarity index 100% rename from content/posts/newsletter-009/melody-madness.png rename to content/news/009/melody-madness.png diff --git a/content/posts/newsletter-009/miniquad_logo.png b/content/news/009/miniquad_logo.png similarity index 100% rename from content/posts/newsletter-009/miniquad_logo.png rename to content/news/009/miniquad_logo.png diff --git a/content/posts/newsletter-009/mun-logo.png b/content/news/009/mun-logo.png similarity index 100% rename from content/posts/newsletter-009/mun-logo.png rename to content/news/009/mun-logo.png diff --git a/content/posts/newsletter-009/officerl.png b/content/news/009/officerl.png similarity index 100% rename from content/posts/newsletter-009/officerl.png rename to content/news/009/officerl.png diff --git a/content/posts/newsletter-009/oxygengine-dark-logo.svg b/content/news/009/oxygengine-dark-logo.svg similarity index 100% rename from content/posts/newsletter-009/oxygengine-dark-logo.svg rename to content/news/009/oxygengine-dark-logo.svg diff --git a/content/posts/newsletter-009/quadtree.jpeg b/content/news/009/quadtree.jpeg similarity index 100% rename from content/posts/newsletter-009/quadtree.jpeg rename to content/news/009/quadtree.jpeg diff --git a/content/posts/newsletter-009/realm-one.jpeg b/content/news/009/realm-one.jpeg similarity index 100% rename from content/posts/newsletter-009/realm-one.jpeg rename to content/news/009/realm-one.jpeg diff --git a/content/posts/newsletter-009/rhea-player-orb.jpeg b/content/news/009/rhea-player-orb.jpeg similarity index 100% rename from content/posts/newsletter-009/rhea-player-orb.jpeg rename to content/news/009/rhea-player-orb.jpeg diff --git a/content/posts/newsletter-009/robo.gif b/content/news/009/robo.gif similarity index 100% rename from content/posts/newsletter-009/robo.gif rename to content/news/009/robo.gif diff --git a/content/posts/newsletter-009/sarekt.png b/content/news/009/sarekt.png similarity index 100% rename from content/posts/newsletter-009/sarekt.png rename to content/news/009/sarekt.png diff --git a/content/posts/newsletter-009/scale.png b/content/news/009/scale.png similarity index 100% rename from content/posts/newsletter-009/scale.png rename to content/news/009/scale.png diff --git a/content/posts/newsletter-009/sokoban_level.gif b/content/news/009/sokoban_level.gif similarity index 100% rename from content/posts/newsletter-009/sokoban_level.gif rename to content/news/009/sokoban_level.gif diff --git a/content/posts/newsletter-009/ssshmup.gif b/content/news/009/ssshmup.gif similarity index 100% rename from content/posts/newsletter-009/ssshmup.gif rename to content/news/009/ssshmup.gif diff --git a/content/posts/newsletter-009/the-hum.jpg b/content/news/009/the-hum.jpg similarity index 100% rename from content/posts/newsletter-009/the-hum.jpg rename to content/news/009/the-hum.jpg diff --git a/content/posts/newsletter-009/the-last-ship.jpg b/content/news/009/the-last-ship.jpg similarity index 100% rename from content/posts/newsletter-009/the-last-ship.jpg rename to content/news/009/the-last-ship.jpg diff --git a/content/posts/newsletter-009/valora-example.jpeg b/content/news/009/valora-example.jpeg similarity index 100% rename from content/posts/newsletter-009/valora-example.jpeg rename to content/news/009/valora-example.jpeg diff --git a/content/posts/newsletter-009/veloren1.png b/content/news/009/veloren1.png similarity index 100% rename from content/posts/newsletter-009/veloren1.png rename to content/news/009/veloren1.png diff --git a/content/posts/newsletter-009/veloren2.png b/content/news/009/veloren2.png similarity index 100% rename from content/posts/newsletter-009/veloren2.png rename to content/news/009/veloren2.png diff --git a/content/posts/newsletter-009/visarcana.jpeg b/content/news/009/visarcana.jpeg similarity index 100% rename from content/posts/newsletter-009/visarcana.jpeg rename to content/news/009/visarcana.jpeg diff --git a/content/posts/newsletter-009/will_wasm_network.png b/content/news/009/will_wasm_network.png similarity index 100% rename from content/posts/newsletter-009/will_wasm_network.png rename to content/news/009/will_wasm_network.png diff --git a/content/posts/newsletter-009/wonder.jpg b/content/news/009/wonder.jpg similarity index 100% rename from content/posts/newsletter-009/wonder.jpg rename to content/news/009/wonder.jpg diff --git a/content/posts/newsletter-009/woods.jpg b/content/news/009/woods.jpg similarity index 100% rename from content/posts/newsletter-009/woods.jpg rename to content/news/009/woods.jpg diff --git a/content/posts/newsletter-010/akigi1.png b/content/news/010/akigi1.png similarity index 100% rename from content/posts/newsletter-010/akigi1.png rename to content/news/010/akigi1.png diff --git a/content/posts/newsletter-010/amethyst-logo.png b/content/news/010/amethyst-logo.png similarity index 100% rename from content/posts/newsletter-010/amethyst-logo.png rename to content/news/010/amethyst-logo.png diff --git a/content/posts/newsletter-010/cb-talk-video.jpeg b/content/news/010/cb-talk-video.jpeg similarity index 100% rename from content/posts/newsletter-010/cb-talk-video.jpeg rename to content/news/010/cb-talk-video.jpeg diff --git a/content/posts/newsletter-010/crate_before_attack.png b/content/news/010/crate_before_attack.png similarity index 100% rename from content/posts/newsletter-010/crate_before_attack.png rename to content/news/010/crate_before_attack.png diff --git a/content/posts/newsletter-010/digescape.png b/content/news/010/digescape.png similarity index 100% rename from content/posts/newsletter-010/digescape.png rename to content/news/010/digescape.png diff --git a/content/posts/newsletter-010/elektron.png b/content/news/010/elektron.png similarity index 100% rename from content/posts/newsletter-010/elektron.png rename to content/news/010/elektron.png diff --git a/content/posts/newsletter-010/forthequest.jpg b/content/news/010/forthequest.jpg similarity index 100% rename from content/posts/newsletter-010/forthequest.jpg rename to content/news/010/forthequest.jpg diff --git a/content/posts/newsletter-010/garden.jpg b/content/news/010/garden.jpg similarity index 100% rename from content/posts/newsletter-010/garden.jpg rename to content/news/010/garden.jpg diff --git a/content/posts/newsletter-010/gfx-hal-tutorial.jpeg b/content/news/010/gfx-hal-tutorial.jpeg similarity index 100% rename from content/posts/newsletter-010/gfx-hal-tutorial.jpeg rename to content/news/010/gfx-hal-tutorial.jpeg diff --git a/content/posts/newsletter-010/iced-life.gif b/content/news/010/iced-life.gif similarity index 100% rename from content/posts/newsletter-010/iced-life.gif rename to content/news/010/iced-life.gif diff --git a/content/posts/newsletter-010/index.md b/content/news/010/index.md similarity index 96% rename from content/posts/newsletter-010/index.md rename to content/news/010/index.md index fd8a4d94d..241bfb18f 100644 --- a/content/posts/newsletter-010/index.md +++ b/content/news/010/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #10 - May 2020" date = 2020-06-08 transparent = true +aliases = ["posts/newsletter-010"] +++ Welcome to the tenth issue of the Rust GameDev Workgroup’s @@ -29,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) @@ -63,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="veloren1.png" + caption="The new repo banner") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -78,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="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: @@ -112,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="veloren2.png" + caption="Welcome to Veloren! From the 0.6 release party") }} You can read more about some specific topics from May: @@ -212,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="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! @@ -319,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="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 @@ -376,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 @@ -385,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="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 @@ -419,8 +435,10 @@ Full devlogs: ### Nox Futura: Rust Edition -![worldgen menu](nox-f.png) -_Worldgen menu_ +{{ image_figure( + alt="worldgen menu" + src="nox-f.png" + caption="Worldgen menu") }} [Herbert Wolverson][thebracket] (the author of [bracket-lib] and [the Rust Roguelike Tutorial][rl-book]) @@ -638,8 +656,11 @@ _Discussions: ### NodeFX -[![NodeFX](nodefx.png)][NodeFXTweet] -_Click the image to see the animated version_ +{{ image_figure( + alt="NodeFX" + src="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, @@ -736,7 +757,7 @@ Also, check out a new "Game of Life" demo [here][iced-life]. ### [beehive] -```text +```txt yz +Y __ yx / \ xz +X @@ -963,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/posts/newsletter-010/kas.png b/content/news/010/kas.png similarity index 100% rename from content/posts/newsletter-010/kas.png rename to content/news/010/kas.png diff --git a/content/posts/newsletter-010/life.png b/content/news/010/life.png similarity index 100% rename from content/posts/newsletter-010/life.png rename to content/news/010/life.png diff --git a/content/posts/newsletter-010/minds_eye.gif b/content/news/010/minds_eye.gif similarity index 100% rename from content/posts/newsletter-010/minds_eye.gif rename to content/news/010/minds_eye.gif diff --git a/content/posts/newsletter-010/mun-logo.png b/content/news/010/mun-logo.png similarity index 100% rename from content/posts/newsletter-010/mun-logo.png rename to content/news/010/mun-logo.png diff --git a/content/posts/newsletter-010/networking_wasm_recv.png b/content/news/010/networking_wasm_recv.png similarity index 100% rename from content/posts/newsletter-010/networking_wasm_recv.png rename to content/news/010/networking_wasm_recv.png diff --git a/content/posts/newsletter-010/nodefx.png b/content/news/010/nodefx.png similarity index 100% rename from content/posts/newsletter-010/nodefx.png rename to content/news/010/nodefx.png diff --git a/content/posts/newsletter-010/nox-f.png b/content/news/010/nox-f.png similarity index 100% rename from content/posts/newsletter-010/nox-f.png rename to content/news/010/nox-f.png diff --git a/content/posts/newsletter-010/on-fps.jpeg b/content/news/010/on-fps.jpeg similarity index 100% rename from content/posts/newsletter-010/on-fps.jpeg rename to content/news/010/on-fps.jpeg diff --git a/content/posts/newsletter-010/orb_farm.jpeg b/content/news/010/orb_farm.jpeg similarity index 100% rename from content/posts/newsletter-010/orb_farm.jpeg rename to content/news/010/orb_farm.jpeg diff --git a/content/posts/newsletter-010/oxygengine-custom-fonts.png b/content/news/010/oxygengine-custom-fonts.png similarity index 100% rename from content/posts/newsletter-010/oxygengine-custom-fonts.png rename to content/news/010/oxygengine-custom-fonts.png diff --git a/content/posts/newsletter-010/oxygengine-dark-logo.svg b/content/news/010/oxygengine-dark-logo.svg similarity index 100% rename from content/posts/newsletter-010/oxygengine-dark-logo.svg rename to content/news/010/oxygengine-dark-logo.svg diff --git a/content/posts/newsletter-010/oxygengine-pokemon-gold.gif b/content/news/010/oxygengine-pokemon-gold.gif similarity index 100% rename from content/posts/newsletter-010/oxygengine-pokemon-gold.gif rename to content/news/010/oxygengine-pokemon-gold.gif diff --git a/content/posts/newsletter-010/paddlers.jpg b/content/news/010/paddlers.jpg similarity index 100% rename from content/posts/newsletter-010/paddlers.jpg rename to content/news/010/paddlers.jpg diff --git a/content/posts/newsletter-010/rg3d_3rd_person_example.jpg b/content/news/010/rg3d_3rd_person_example.jpg similarity index 100% rename from content/posts/newsletter-010/rg3d_3rd_person_example.jpg rename to content/news/010/rg3d_3rd_person_example.jpg diff --git a/content/posts/newsletter-010/rust_asm.png b/content/news/010/rust_asm.png similarity index 100% rename from content/posts/newsletter-010/rust_asm.png rename to content/news/010/rust_asm.png diff --git a/content/posts/newsletter-010/rustsim.png b/content/news/010/rustsim.png similarity index 100% rename from content/posts/newsletter-010/rustsim.png rename to content/news/010/rustsim.png diff --git a/content/posts/newsletter-010/rusty_editor.jpg b/content/news/010/rusty_editor.jpg similarity index 100% rename from content/posts/newsletter-010/rusty_editor.jpg rename to content/news/010/rusty_editor.jpg diff --git a/content/posts/newsletter-010/sailing-sim.jpg b/content/news/010/sailing-sim.jpg similarity index 100% rename from content/posts/newsletter-010/sailing-sim.jpg rename to content/news/010/sailing-sim.jpg diff --git a/content/posts/newsletter-010/sandbox.jpeg b/content/news/010/sandbox.jpeg similarity index 100% rename from content/posts/newsletter-010/sandbox.jpeg rename to content/news/010/sandbox.jpeg diff --git a/content/posts/newsletter-010/sokoban_2.jpeg b/content/news/010/sokoban_2.jpeg similarity index 100% rename from content/posts/newsletter-010/sokoban_2.jpeg rename to content/news/010/sokoban_2.jpeg diff --git a/content/posts/newsletter-010/stellary.jpeg b/content/news/010/stellary.jpeg similarity index 100% rename from content/posts/newsletter-010/stellary.jpeg rename to content/news/010/stellary.jpeg diff --git a/content/posts/newsletter-010/svg_face.jpeg b/content/news/010/svg_face.jpeg similarity index 100% rename from content/posts/newsletter-010/svg_face.jpeg rename to content/news/010/svg_face.jpeg diff --git a/content/posts/newsletter-010/ttf.gif b/content/news/010/ttf.gif similarity index 100% rename from content/posts/newsletter-010/ttf.gif rename to content/news/010/ttf.gif diff --git a/content/posts/newsletter-010/veloren1.png b/content/news/010/veloren1.png similarity index 100% rename from content/posts/newsletter-010/veloren1.png rename to content/news/010/veloren1.png diff --git a/content/posts/newsletter-010/veloren2.png b/content/news/010/veloren2.png similarity index 100% rename from content/posts/newsletter-010/veloren2.png rename to content/news/010/veloren2.png diff --git a/content/posts/newsletter-010/veloren_trailer.gif b/content/news/010/veloren_trailer.gif similarity index 100% rename from content/posts/newsletter-010/veloren_trailer.gif rename to content/news/010/veloren_trailer.gif diff --git a/content/posts/newsletter-010/vkeyes.gif b/content/news/010/vkeyes.gif similarity index 100% rename from content/posts/newsletter-010/vkeyes.gif rename to content/news/010/vkeyes.gif diff --git a/content/posts/newsletter-010/wgpu-logo.png b/content/news/010/wgpu-logo.png similarity index 100% rename from content/posts/newsletter-010/wgpu-logo.png rename to content/news/010/wgpu-logo.png diff --git a/content/posts/newsletter-011/abstreet-evaluating-impacts.gif b/content/news/011/abstreet-evaluating-impacts.gif similarity index 100% rename from content/posts/newsletter-011/abstreet-evaluating-impacts.gif rename to content/news/011/abstreet-evaluating-impacts.gif diff --git a/content/posts/newsletter-011/animal-chess.jpeg b/content/news/011/animal-chess.jpeg similarity index 100% rename from content/posts/newsletter-011/animal-chess.jpeg rename to content/news/011/animal-chess.jpeg diff --git a/content/posts/newsletter-011/blub-fluid.gif b/content/news/011/blub-fluid.gif similarity index 100% rename from content/posts/newsletter-011/blub-fluid.gif rename to content/news/011/blub-fluid.gif diff --git a/content/posts/newsletter-011/boundless.jpeg b/content/news/011/boundless.jpeg similarity index 100% rename from content/posts/newsletter-011/boundless.jpeg rename to content/news/011/boundless.jpeg diff --git a/content/posts/newsletter-011/crate_before_attack.gif b/content/news/011/crate_before_attack.gif similarity index 100% rename from content/posts/newsletter-011/crate_before_attack.gif rename to content/news/011/crate_before_attack.gif diff --git a/content/posts/newsletter-011/doom-fire.gif b/content/news/011/doom-fire.gif similarity index 100% rename from content/posts/newsletter-011/doom-fire.gif rename to content/news/011/doom-fire.gif diff --git a/content/posts/newsletter-011/ecs-talk.png b/content/news/011/ecs-talk.png similarity index 100% rename from content/posts/newsletter-011/ecs-talk.png rename to content/news/011/ecs-talk.png diff --git a/content/posts/newsletter-011/garden.jpeg b/content/news/011/garden.jpeg similarity index 100% rename from content/posts/newsletter-011/garden.jpeg rename to content/news/011/garden.jpeg diff --git a/content/posts/newsletter-011/glisp-logo.png b/content/news/011/glisp-logo.png similarity index 100% rename from content/posts/newsletter-011/glisp-logo.png rename to content/news/011/glisp-logo.png diff --git a/content/posts/newsletter-011/goeld.jpg b/content/news/011/goeld.jpg similarity index 100% rename from content/posts/newsletter-011/goeld.jpg rename to content/news/011/goeld.jpg diff --git a/content/posts/newsletter-011/guacamole.gif b/content/news/011/guacamole.gif similarity index 100% rename from content/posts/newsletter-011/guacamole.gif rename to content/news/011/guacamole.gif diff --git a/content/posts/newsletter-011/index.md b/content/news/011/index.md similarity index 95% rename from content/posts/newsletter-011/index.md rename to content/news/011/index.md index 49c70ba9d..7bb64bd71 100644 --- a/content/posts/newsletter-011/index.md +++ b/content/news/011/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #11 - June 2020" date = 2020-07-07 transparent = true +aliases = ["posts/newsletter-011"] +++ Welcome to the eleventh issue of the Rust GameDev Workgroup’s @@ -30,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) @@ -92,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="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 @@ -128,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="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. @@ -159,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="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 @@ -210,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="veloren-wolf.gif" + caption="Animation improvements") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -280,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="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. @@ -328,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/), @@ -378,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="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. @@ -462,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="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. @@ -501,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="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) @@ -623,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="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. @@ -657,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/ @@ -747,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) @@ -901,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/posts/newsletter-011/ldn-4d-talk.jpeg b/content/news/011/ldn-4d-talk.jpeg similarity index 100% rename from content/posts/newsletter-011/ldn-4d-talk.jpeg rename to content/news/011/ldn-4d-talk.jpeg diff --git a/content/posts/newsletter-011/macroquad_asteroids.gif b/content/news/011/macroquad_asteroids.gif similarity index 100% rename from content/posts/newsletter-011/macroquad_asteroids.gif rename to content/news/011/macroquad_asteroids.gif diff --git a/content/posts/newsletter-011/macroquad_snake.gif b/content/news/011/macroquad_snake.gif similarity index 100% rename from content/posts/newsletter-011/macroquad_snake.gif rename to content/news/011/macroquad_snake.gif diff --git a/content/posts/newsletter-011/macroquad_ui.gif b/content/news/011/macroquad_ui.gif similarity index 100% rename from content/posts/newsletter-011/macroquad_ui.gif rename to content/news/011/macroquad_ui.gif diff --git a/content/posts/newsletter-011/mun-languageserver.gif b/content/news/011/mun-languageserver.gif similarity index 100% rename from content/posts/newsletter-011/mun-languageserver.gif rename to content/news/011/mun-languageserver.gif diff --git a/content/posts/newsletter-011/nes-emu.png b/content/news/011/nes-emu.png similarity index 100% rename from content/posts/newsletter-011/nes-emu.png rename to content/news/011/nes-emu.png diff --git a/content/posts/newsletter-011/nodefx.png b/content/news/011/nodefx.png similarity index 100% rename from content/posts/newsletter-011/nodefx.png rename to content/news/011/nodefx.png diff --git a/content/posts/newsletter-011/pont_screenshot.png b/content/news/011/pont_screenshot.png similarity index 100% rename from content/posts/newsletter-011/pont_screenshot.png rename to content/news/011/pont_screenshot.png diff --git a/content/posts/newsletter-011/psp.gif b/content/news/011/psp.gif similarity index 100% rename from content/posts/newsletter-011/psp.gif rename to content/news/011/psp.gif diff --git a/content/posts/newsletter-011/rboids-video.jpeg b/content/news/011/rboids-video.jpeg similarity index 100% rename from content/posts/newsletter-011/rboids-video.jpeg rename to content/news/011/rboids-video.jpeg diff --git a/content/posts/newsletter-011/roman-empire.jpeg b/content/news/011/roman-empire.jpeg similarity index 100% rename from content/posts/newsletter-011/roman-empire.jpeg rename to content/news/011/roman-empire.jpeg diff --git a/content/posts/newsletter-011/rs-type.png b/content/news/011/rs-type.png similarity index 100% rename from content/posts/newsletter-011/rs-type.png rename to content/news/011/rs-type.png diff --git a/content/posts/newsletter-011/runner_gameplay_sample.png b/content/news/011/runner_gameplay_sample.png similarity index 100% rename from content/posts/newsletter-011/runner_gameplay_sample.png rename to content/news/011/runner_gameplay_sample.png diff --git a/content/posts/newsletter-011/scale.png b/content/news/011/scale.png similarity index 100% rename from content/posts/newsletter-011/scale.png rename to content/news/011/scale.png diff --git a/content/posts/newsletter-011/veloren-talk.jpeg b/content/news/011/veloren-talk.jpeg similarity index 100% rename from content/posts/newsletter-011/veloren-talk.jpeg rename to content/news/011/veloren-talk.jpeg diff --git a/content/posts/newsletter-011/veloren-wolf.gif b/content/news/011/veloren-wolf.gif similarity index 100% rename from content/posts/newsletter-011/veloren-wolf.gif rename to content/news/011/veloren-wolf.gif diff --git a/content/posts/newsletter-011/veloren2.jpeg b/content/news/011/veloren2.jpeg similarity index 100% rename from content/posts/newsletter-011/veloren2.jpeg rename to content/news/011/veloren2.jpeg diff --git a/content/posts/newsletter-011/vimnail.gif b/content/news/011/vimnail.gif similarity index 100% rename from content/posts/newsletter-011/vimnail.gif rename to content/news/011/vimnail.gif diff --git a/content/posts/newsletter-011/way-of-rhea.jpeg b/content/news/011/way-of-rhea.jpeg similarity index 100% rename from content/posts/newsletter-011/way-of-rhea.jpeg rename to content/news/011/way-of-rhea.jpeg diff --git a/content/posts/newsletter-011/weegames.jpg b/content/news/011/weegames.jpg similarity index 100% rename from content/posts/newsletter-011/weegames.jpg rename to content/news/011/weegames.jpg diff --git a/content/posts/newsletter-011/wooting_snake.gif b/content/news/011/wooting_snake.gif similarity index 100% rename from content/posts/newsletter-011/wooting_snake.gif rename to content/news/011/wooting_snake.gif diff --git a/content/posts/newsletter-011/zerotogame-destruction.gif b/content/news/011/zerotogame-destruction.gif similarity index 100% rename from content/posts/newsletter-011/zerotogame-destruction.gif rename to content/news/011/zerotogame-destruction.gif diff --git a/content/posts/newsletter-012/4k-into-youtube.jpeg b/content/news/012/4k-into-youtube.jpeg similarity index 100% rename from content/posts/newsletter-012/4k-into-youtube.jpeg rename to content/news/012/4k-into-youtube.jpeg diff --git a/content/posts/newsletter-012/abstreet.jpeg b/content/news/012/abstreet.jpeg similarity index 100% rename from content/posts/newsletter-012/abstreet.jpeg rename to content/news/012/abstreet.jpeg diff --git a/content/posts/newsletter-012/canon-collision.png b/content/news/012/canon-collision.png similarity index 100% rename from content/posts/newsletter-012/canon-collision.png rename to content/news/012/canon-collision.png diff --git a/content/posts/newsletter-012/crate-before-attack.gif b/content/news/012/crate-before-attack.gif similarity index 100% rename from content/posts/newsletter-012/crate-before-attack.gif rename to content/news/012/crate-before-attack.gif diff --git a/content/posts/newsletter-012/data_oriented_design.svg b/content/news/012/data_oriented_design.svg similarity index 100% rename from content/posts/newsletter-012/data_oriented_design.svg rename to content/news/012/data_oriented_design.svg diff --git a/content/posts/newsletter-012/dont-stop.gif b/content/news/012/dont-stop.gif similarity index 100% rename from content/posts/newsletter-012/dont-stop.gif rename to content/news/012/dont-stop.gif diff --git a/content/posts/newsletter-012/embark-logo-bg.jpg b/content/news/012/embark-logo-bg.jpg similarity index 100% rename from content/posts/newsletter-012/embark-logo-bg.jpg rename to content/news/012/embark-logo-bg.jpg diff --git a/content/posts/newsletter-012/fps-game-2.jpeg b/content/news/012/fps-game-2.jpeg similarity index 100% rename from content/posts/newsletter-012/fps-game-2.jpeg rename to content/news/012/fps-game-2.jpeg diff --git a/content/posts/newsletter-012/graphene-demo.jpeg b/content/news/012/graphene-demo.jpeg similarity index 100% rename from content/posts/newsletter-012/graphene-demo.jpeg rename to content/news/012/graphene-demo.jpeg diff --git a/content/posts/newsletter-012/graphene.png b/content/news/012/graphene.png similarity index 100% rename from content/posts/newsletter-012/graphene.png rename to content/news/012/graphene.png diff --git a/content/posts/newsletter-012/hex_strat_gameplay.gif b/content/news/012/hex_strat_gameplay.gif similarity index 100% rename from content/posts/newsletter-012/hex_strat_gameplay.gif rename to content/news/012/hex_strat_gameplay.gif diff --git a/content/posts/newsletter-012/index.md b/content/news/012/index.md similarity index 95% rename from content/posts/newsletter-012/index.md rename to content/news/012/index.md index 35997d485..bd2b863b6 100644 --- a/content/posts/newsletter-012/index.md +++ b/content/news/012/index.md @@ -3,6 +3,7 @@ title = "This Month in Rust GameDev #12 - July 2020" date = 2020-08-06 transparent = true draft = false +aliases = ["posts/newsletter-012"] +++ Welcome to the twelfth issue of the Rust GameDev Workgroup’s @@ -63,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="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 @@ -115,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="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 @@ -470,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="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 @@ -508,8 +518,10 @@ Some of the recent updates: ### [Veloren][veloren] -![Sunrise](veloren-sunrise.gif) -_Sunrise_ +{{ image_figure( + alt="Sunrise" + src="veloren-sunrise.gif" + caption="Sunrise") }} [Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World. @@ -523,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="veloren-fire.gif" + caption="Progress on the particle system") }} You can read more about some specific topics from July: @@ -548,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="veloren-quadrupeds.png" + caption="Quadruped overhaul") }} [veloren]: https://veloren.net @@ -598,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="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 @@ -637,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="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] @@ -809,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="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 @@ -930,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="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. @@ -1013,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 @@ -1088,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="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/posts/newsletter-012/longcraft-video.jpeg b/content/news/012/longcraft-video.jpeg similarity index 100% rename from content/posts/newsletter-012/longcraft-video.jpeg rename to content/news/012/longcraft-video.jpeg diff --git a/content/posts/newsletter-012/ludusavi.gif b/content/news/012/ludusavi.gif similarity index 100% rename from content/posts/newsletter-012/ludusavi.gif rename to content/news/012/ludusavi.gif diff --git a/content/posts/newsletter-012/luminance-logo.svg b/content/news/012/luminance-logo.svg similarity index 100% rename from content/posts/newsletter-012/luminance-logo.svg rename to content/news/012/luminance-logo.svg diff --git a/content/posts/newsletter-012/miniquad_ios.jpg b/content/news/012/miniquad_ios.jpg similarity index 100% rename from content/posts/newsletter-012/miniquad_ios.jpg rename to content/news/012/miniquad_ios.jpg diff --git a/content/posts/newsletter-012/mun-logo.png b/content/news/012/mun-logo.png similarity index 100% rename from content/posts/newsletter-012/mun-logo.png rename to content/news/012/mun-logo.png diff --git a/content/posts/newsletter-012/nox-futura.jpeg b/content/news/012/nox-futura.jpeg similarity index 100% rename from content/posts/newsletter-012/nox-futura.jpeg rename to content/news/012/nox-futura.jpeg diff --git a/content/posts/newsletter-012/pglowrpg_12.gif b/content/news/012/pglowrpg_12.gif similarity index 100% rename from content/posts/newsletter-012/pglowrpg_12.gif rename to content/news/012/pglowrpg_12.gif diff --git a/content/posts/newsletter-012/protochess.gif b/content/news/012/protochess.gif similarity index 100% rename from content/posts/newsletter-012/protochess.gif rename to content/news/012/protochess.gif diff --git a/content/posts/newsletter-012/pushin_boxes_gameplay.gif b/content/news/012/pushin_boxes_gameplay.gif similarity index 100% rename from content/posts/newsletter-012/pushin_boxes_gameplay.gif rename to content/news/012/pushin_boxes_gameplay.gif diff --git a/content/posts/newsletter-012/robo-os.jpg b/content/news/012/robo-os.jpg similarity index 100% rename from content/posts/newsletter-012/robo-os.jpg rename to content/news/012/robo-os.jpg diff --git a/content/posts/newsletter-012/rust-ios-sdl2-screenshot.png b/content/news/012/rust-ios-sdl2-screenshot.png similarity index 100% rename from content/posts/newsletter-012/rust-ios-sdl2-screenshot.png rename to content/news/012/rust-ios-sdl2-screenshot.png diff --git a/content/posts/newsletter-012/rust-n-games-youtube.jpeg b/content/news/012/rust-n-games-youtube.jpeg similarity index 100% rename from content/posts/newsletter-012/rust-n-games-youtube.jpeg rename to content/news/012/rust-n-games-youtube.jpeg diff --git a/content/posts/newsletter-012/rust_sokoban.png b/content/news/012/rust_sokoban.png similarity index 100% rename from content/posts/newsletter-012/rust_sokoban.png rename to content/news/012/rust_sokoban.png diff --git a/content/posts/newsletter-012/sandbox_icon.svg b/content/news/012/sandbox_icon.svg similarity index 100% rename from content/posts/newsletter-012/sandbox_icon.svg rename to content/news/012/sandbox_icon.svg diff --git a/content/posts/newsletter-012/sandbox_screenshot.png b/content/news/012/sandbox_screenshot.png similarity index 100% rename from content/posts/newsletter-012/sandbox_screenshot.png rename to content/news/012/sandbox_screenshot.png diff --git a/content/posts/newsletter-012/servo-unity.png b/content/news/012/servo-unity.png similarity index 100% rename from content/posts/newsletter-012/servo-unity.png rename to content/news/012/servo-unity.png diff --git a/content/posts/newsletter-012/shar-talk.jpeg b/content/news/012/shar-talk.jpeg similarity index 100% rename from content/posts/newsletter-012/shar-talk.jpeg rename to content/news/012/shar-talk.jpeg diff --git a/content/posts/newsletter-012/shar-youtube.jpeg b/content/news/012/shar-youtube.jpeg similarity index 100% rename from content/posts/newsletter-012/shar-youtube.jpeg rename to content/news/012/shar-youtube.jpeg diff --git a/content/posts/newsletter-012/tennis_academy.gif b/content/news/012/tennis_academy.gif similarity index 100% rename from content/posts/newsletter-012/tennis_academy.gif rename to content/news/012/tennis_academy.gif diff --git a/content/posts/newsletter-012/textcamp.png b/content/news/012/textcamp.png similarity index 100% rename from content/posts/newsletter-012/textcamp.png rename to content/news/012/textcamp.png diff --git a/content/posts/newsletter-012/tuitui-grass-field.jpeg b/content/news/012/tuitui-grass-field.jpeg similarity index 100% rename from content/posts/newsletter-012/tuitui-grass-field.jpeg rename to content/news/012/tuitui-grass-field.jpeg diff --git a/content/posts/newsletter-012/veloren-fire.gif b/content/news/012/veloren-fire.gif similarity index 100% rename from content/posts/newsletter-012/veloren-fire.gif rename to content/news/012/veloren-fire.gif diff --git a/content/posts/newsletter-012/veloren-quadrupeds.png b/content/news/012/veloren-quadrupeds.png similarity index 100% rename from content/posts/newsletter-012/veloren-quadrupeds.png rename to content/news/012/veloren-quadrupeds.png diff --git a/content/posts/newsletter-012/veloren-sunrise.gif b/content/news/012/veloren-sunrise.gif similarity index 100% rename from content/posts/newsletter-012/veloren-sunrise.gif rename to content/news/012/veloren-sunrise.gif diff --git a/content/posts/newsletter-012/video-pong-tutorial.jpeg b/content/news/012/video-pong-tutorial.jpeg similarity index 100% rename from content/posts/newsletter-012/video-pong-tutorial.jpeg rename to content/news/012/video-pong-tutorial.jpeg diff --git a/content/posts/newsletter-012/voronator.png b/content/news/012/voronator.png similarity index 100% rename from content/posts/newsletter-012/voronator.png rename to content/news/012/voronator.png diff --git a/content/posts/newsletter-012/vulkan-renderer-prototype.jpeg b/content/news/012/vulkan-renderer-prototype.jpeg similarity index 100% rename from content/posts/newsletter-012/vulkan-renderer-prototype.jpeg rename to content/news/012/vulkan-renderer-prototype.jpeg diff --git a/content/posts/newsletter-012/wonder-screenshot.png b/content/news/012/wonder-screenshot.png similarity index 100% rename from content/posts/newsletter-012/wonder-screenshot.png rename to content/news/012/wonder-screenshot.png diff --git a/content/posts/newsletter-012/zemeroth.jpeg b/content/news/012/zemeroth.jpeg similarity index 100% rename from content/posts/newsletter-012/zemeroth.jpeg rename to content/news/012/zemeroth.jpeg diff --git a/content/posts/newsletter-013/abstreet.png b/content/news/013/abstreet.png similarity index 100% rename from content/posts/newsletter-013/abstreet.png rename to content/news/013/abstreet.png diff --git a/content/posts/newsletter-013/amethyst-logo.png b/content/news/013/amethyst-logo.png similarity index 100% rename from content/posts/newsletter-013/amethyst-logo.png rename to content/news/013/amethyst-logo.png diff --git a/content/posts/newsletter-013/bevy_logo.png b/content/news/013/bevy_logo.png similarity index 100% rename from content/posts/newsletter-013/bevy_logo.png rename to content/news/013/bevy_logo.png diff --git a/content/posts/newsletter-013/bevy_showcase.png b/content/news/013/bevy_showcase.png similarity index 100% rename from content/posts/newsletter-013/bevy_showcase.png rename to content/news/013/bevy_showcase.png diff --git a/content/posts/newsletter-013/cary_screenshot.png b/content/news/013/cary_screenshot.png similarity index 100% rename from content/posts/newsletter-013/cary_screenshot.png rename to content/news/013/cary_screenshot.png diff --git a/content/posts/newsletter-013/chargrid-roguelike-tutorial-2020.png b/content/news/013/chargrid-roguelike-tutorial-2020.png similarity index 100% rename from content/posts/newsletter-013/chargrid-roguelike-tutorial-2020.png rename to content/news/013/chargrid-roguelike-tutorial-2020.png diff --git a/content/posts/newsletter-013/chillscapes_main_menu.png b/content/news/013/chillscapes_main_menu.png similarity index 100% rename from content/posts/newsletter-013/chillscapes_main_menu.png rename to content/news/013/chillscapes_main_menu.png diff --git a/content/posts/newsletter-013/crate-before-attack.jpeg b/content/news/013/crate-before-attack.jpeg similarity index 100% rename from content/posts/newsletter-013/crate-before-attack.jpeg rename to content/news/013/crate-before-attack.jpeg diff --git a/content/posts/newsletter-013/cute-c2-collision.gif b/content/news/013/cute-c2-collision.gif similarity index 100% rename from content/posts/newsletter-013/cute-c2-collision.gif rename to content/news/013/cute-c2-collision.gif diff --git a/content/posts/newsletter-013/dwarf_seeks_fortune.png b/content/news/013/dwarf_seeks_fortune.png similarity index 100% rename from content/posts/newsletter-013/dwarf_seeks_fortune.png rename to content/news/013/dwarf_seeks_fortune.png diff --git a/content/posts/newsletter-013/ecs-bench.png b/content/news/013/ecs-bench.png similarity index 100% rename from content/posts/newsletter-013/ecs-bench.png rename to content/news/013/ecs-bench.png diff --git a/content/posts/newsletter-013/egregoria.png b/content/news/013/egregoria.png similarity index 100% rename from content/posts/newsletter-013/egregoria.png rename to content/news/013/egregoria.png diff --git a/content/posts/newsletter-013/egui.png b/content/news/013/egui.png similarity index 100% rename from content/posts/newsletter-013/egui.png rename to content/news/013/egui.png diff --git a/content/posts/newsletter-013/event-chain-assets-graph.png b/content/news/013/event-chain-assets-graph.png similarity index 100% rename from content/posts/newsletter-013/event-chain-assets-graph.png rename to content/news/013/event-chain-assets-graph.png diff --git a/content/posts/newsletter-013/football-manager.jpeg b/content/news/013/football-manager.jpeg similarity index 100% rename from content/posts/newsletter-013/football-manager.jpeg rename to content/news/013/football-manager.jpeg diff --git a/content/posts/newsletter-013/garden.jpeg b/content/news/013/garden.jpeg similarity index 100% rename from content/posts/newsletter-013/garden.jpeg rename to content/news/013/garden.jpeg diff --git a/content/posts/newsletter-013/hexasphere.gif b/content/news/013/hexasphere.gif similarity index 100% rename from content/posts/newsletter-013/hexasphere.gif rename to content/news/013/hexasphere.gif diff --git a/content/posts/newsletter-013/index.md b/content/news/013/index.md similarity index 95% rename from content/posts/newsletter-013/index.md rename to content/news/013/index.md index d135156ec..822545c21 100644 --- a/content/posts/newsletter-013/index.md +++ b/content/news/013/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #13 - August 2020" date = 2020-09-07 transparent = true +aliases = ["posts/newsletter-013"] +++ Welcome to the 13th issue of the Rust GameDev Workgroup’s @@ -30,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) @@ -112,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="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 @@ -143,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="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. @@ -162,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="veloren-sceptre.gif" + caption="Healing sceptre with the new particle system") }} You can read more about some specific topics from August: @@ -261,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="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. @@ -350,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="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 @@ -395,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="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 @@ -442,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="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 @@ -514,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="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 @@ -758,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="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! 🎉 @@ -899,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. @@ -1015,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, @@ -1103,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]. @@ -1112,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] @@ -1170,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="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 @@ -1252,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/posts/newsletter-013/inline-spirv-demo.png b/content/news/013/inline-spirv-demo.png similarity index 100% rename from content/posts/newsletter-013/inline-spirv-demo.png rename to content/news/013/inline-spirv-demo.png diff --git a/content/posts/newsletter-013/inline-tweak.gif b/content/news/013/inline-tweak.gif similarity index 100% rename from content/posts/newsletter-013/inline-tweak.gif rename to content/news/013/inline-tweak.gif diff --git a/content/posts/newsletter-013/jude3d.jpeg b/content/news/013/jude3d.jpeg similarity index 100% rename from content/posts/newsletter-013/jude3d.jpeg rename to content/news/013/jude3d.jpeg diff --git a/content/posts/newsletter-013/kas-text-layout.png b/content/news/013/kas-text-layout.png similarity index 100% rename from content/posts/newsletter-013/kas-text-layout.png rename to content/news/013/kas-text-layout.png diff --git a/content/posts/newsletter-013/mochi.jpg b/content/news/013/mochi.jpg similarity index 100% rename from content/posts/newsletter-013/mochi.jpg rename to content/news/013/mochi.jpg diff --git a/content/posts/newsletter-013/mun-logo.png b/content/news/013/mun-logo.png similarity index 100% rename from content/posts/newsletter-013/mun-logo.png rename to content/news/013/mun-logo.png diff --git a/content/posts/newsletter-013/nes_emulator_rust.png b/content/news/013/nes_emulator_rust.png similarity index 100% rename from content/posts/newsletter-013/nes_emulator_rust.png rename to content/news/013/nes_emulator_rust.png diff --git a/content/posts/newsletter-013/optick-video.jpg b/content/news/013/optick-video.jpg similarity index 100% rename from content/posts/newsletter-013/optick-video.jpg rename to content/news/013/optick-video.jpg diff --git a/content/posts/newsletter-013/piston-logo.png b/content/news/013/piston-logo.png similarity index 100% rename from content/posts/newsletter-013/piston-logo.png rename to content/news/013/piston-logo.png diff --git a/content/posts/newsletter-013/podcast.jpeg b/content/news/013/podcast.jpeg similarity index 100% rename from content/posts/newsletter-013/podcast.jpeg rename to content/news/013/podcast.jpeg diff --git a/content/posts/newsletter-013/puffin.png b/content/news/013/puffin.png similarity index 100% rename from content/posts/newsletter-013/puffin.png rename to content/news/013/puffin.png diff --git a/content/posts/newsletter-013/rapier-logo.svg b/content/news/013/rapier-logo.svg similarity index 100% rename from content/posts/newsletter-013/rapier-logo.svg rename to content/news/013/rapier-logo.svg diff --git a/content/posts/newsletter-013/rustconf-amethyst-talk.png b/content/news/013/rustconf-amethyst-talk.png similarity index 100% rename from content/posts/newsletter-013/rustconf-amethyst-talk.png rename to content/news/013/rustconf-amethyst-talk.png diff --git a/content/posts/newsletter-013/simple-physics-wave.gif b/content/news/013/simple-physics-wave.gif similarity index 100% rename from content/posts/newsletter-013/simple-physics-wave.gif rename to content/news/013/simple-physics-wave.gif diff --git a/content/posts/newsletter-013/starframe-demo.gif b/content/news/013/starframe-demo.gif similarity index 100% rename from content/posts/newsletter-013/starframe-demo.gif rename to content/news/013/starframe-demo.gif diff --git a/content/posts/newsletter-013/traverse-research-banner.png b/content/news/013/traverse-research-banner.png similarity index 100% rename from content/posts/newsletter-013/traverse-research-banner.png rename to content/news/013/traverse-research-banner.png diff --git a/content/posts/newsletter-013/vangers-shadows.jpeg b/content/news/013/vangers-shadows.jpeg similarity index 100% rename from content/posts/newsletter-013/vangers-shadows.jpeg rename to content/news/013/vangers-shadows.jpeg diff --git a/content/posts/newsletter-013/veloren-landscape1.jpeg b/content/news/013/veloren-landscape1.jpeg similarity index 100% rename from content/posts/newsletter-013/veloren-landscape1.jpeg rename to content/news/013/veloren-landscape1.jpeg diff --git a/content/posts/newsletter-013/veloren-sceptre.gif b/content/news/013/veloren-sceptre.gif similarity index 100% rename from content/posts/newsletter-013/veloren-sceptre.gif rename to content/news/013/veloren-sceptre.gif diff --git a/content/posts/newsletter-013/voxel-mapper.jpeg b/content/news/013/voxel-mapper.jpeg similarity index 100% rename from content/posts/newsletter-013/voxel-mapper.jpeg rename to content/news/013/voxel-mapper.jpeg diff --git a/content/posts/newsletter-013/way-of-rhea-play-nyc.png b/content/news/013/way-of-rhea-play-nyc.png similarity index 100% rename from content/posts/newsletter-013/way-of-rhea-play-nyc.png rename to content/news/013/way-of-rhea-play-nyc.png diff --git a/content/posts/newsletter-013/wgpu-water.gif b/content/news/013/wgpu-water.gif similarity index 100% rename from content/posts/newsletter-013/wgpu-water.gif rename to content/news/013/wgpu-water.gif diff --git a/content/posts/newsletter-013/wowAddonManager-example.png b/content/news/013/wowAddonManager-example.png similarity index 100% rename from content/posts/newsletter-013/wowAddonManager-example.png rename to content/news/013/wowAddonManager-example.png diff --git a/content/posts/newsletter-014/BUGOUT.jpg b/content/news/014/BUGOUT.jpg similarity index 100% rename from content/posts/newsletter-014/BUGOUT.jpg rename to content/news/014/BUGOUT.jpg diff --git a/content/posts/newsletter-014/abstreet.png b/content/news/014/abstreet.png similarity index 100% rename from content/posts/newsletter-014/abstreet.png rename to content/news/014/abstreet.png diff --git a/content/posts/newsletter-014/bevy_logo.png b/content/news/014/bevy_logo.png similarity index 100% rename from content/posts/newsletter-014/bevy_logo.png rename to content/news/014/bevy_logo.png diff --git a/content/posts/newsletter-014/citybound.png b/content/news/014/citybound.png similarity index 100% rename from content/posts/newsletter-014/citybound.png rename to content/news/014/citybound.png diff --git a/content/posts/newsletter-014/cool-bear.png b/content/news/014/cool-bear.png similarity index 100% rename from content/posts/newsletter-014/cool-bear.png rename to content/news/014/cool-bear.png diff --git a/content/posts/newsletter-014/diff-gi.gif b/content/news/014/diff-gi.gif similarity index 100% rename from content/posts/newsletter-014/diff-gi.gif rename to content/news/014/diff-gi.gif diff --git a/content/posts/newsletter-014/ecs-bevy-tutorial.png b/content/news/014/ecs-bevy-tutorial.png similarity index 100% rename from content/posts/newsletter-014/ecs-bevy-tutorial.png rename to content/news/014/ecs-bevy-tutorial.png diff --git a/content/posts/newsletter-014/femtovg.png b/content/news/014/femtovg.png similarity index 100% rename from content/posts/newsletter-014/femtovg.png rename to content/news/014/femtovg.png diff --git a/content/posts/newsletter-014/galangua.png b/content/news/014/galangua.png similarity index 100% rename from content/posts/newsletter-014/galangua.png rename to content/news/014/galangua.png diff --git a/content/posts/newsletter-014/garden.jpeg b/content/news/014/garden.jpeg similarity index 100% rename from content/posts/newsletter-014/garden.jpeg rename to content/news/014/garden.jpeg diff --git a/content/posts/newsletter-014/gfx-logo.png b/content/news/014/gfx-logo.png similarity index 100% rename from content/posts/newsletter-014/gfx-logo.png rename to content/news/014/gfx-logo.png diff --git a/content/posts/newsletter-014/godot.png b/content/news/014/godot.png similarity index 100% rename from content/posts/newsletter-014/godot.png rename to content/news/014/godot.png diff --git a/content/posts/newsletter-014/index.md b/content/news/014/index.md similarity index 96% rename from content/posts/newsletter-014/index.md rename to content/news/014/index.md index e941aef42..b34c86bba 100644 --- a/content/posts/newsletter-014/index.md +++ b/content/news/014/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #14 - September 2020" date = 2020-10-07 transparent = true +aliases = ["posts/newsletter-014"] +++ Welcome to the 14th issue of the Rust GameDev Workgroup's @@ -29,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/posts/newsletter-015/ld47-bloody-baron.png b/content/news/015/ld47-bloody-baron.png similarity index 100% rename from content/posts/newsletter-015/ld47-bloody-baron.png rename to content/news/015/ld47-bloody-baron.png diff --git a/content/posts/newsletter-015/ld47-island.gif b/content/news/015/ld47-island.gif similarity index 100% rename from content/posts/newsletter-015/ld47-island.gif rename to content/news/015/ld47-island.gif diff --git a/content/posts/newsletter-015/ld47-keep-inside.gif b/content/news/015/ld47-keep-inside.gif similarity index 100% rename from content/posts/newsletter-015/ld47-keep-inside.gif rename to content/news/015/ld47-keep-inside.gif diff --git a/content/posts/newsletter-015/ld47-nobody-burns.png b/content/news/015/ld47-nobody-burns.png similarity index 100% rename from content/posts/newsletter-015/ld47-nobody-burns.png rename to content/news/015/ld47-nobody-burns.png diff --git a/content/posts/newsletter-015/ld47-quantum-loops.gif b/content/news/015/ld47-quantum-loops.gif similarity index 100% rename from content/posts/newsletter-015/ld47-quantum-loops.gif rename to content/news/015/ld47-quantum-loops.gif diff --git a/content/posts/newsletter-015/ld47-soy.png b/content/news/015/ld47-soy.png similarity index 100% rename from content/posts/newsletter-015/ld47-soy.png rename to content/news/015/ld47-soy.png diff --git a/content/posts/newsletter-015/ld47-time-ghosts.png b/content/news/015/ld47-time-ghosts.png similarity index 100% rename from content/posts/newsletter-015/ld47-time-ghosts.png rename to content/news/015/ld47-time-ghosts.png diff --git a/content/posts/newsletter-015/macroquad.gif b/content/news/015/macroquad.gif similarity index 100% rename from content/posts/newsletter-015/macroquad.gif rename to content/news/015/macroquad.gif diff --git a/content/posts/newsletter-015/miniquad_wayland.gif b/content/news/015/miniquad_wayland.gif similarity index 100% rename from content/posts/newsletter-015/miniquad_wayland.gif rename to content/news/015/miniquad_wayland.gif diff --git a/content/posts/newsletter-015/mun-logo.png b/content/news/015/mun-logo.png similarity index 100% rename from content/posts/newsletter-015/mun-logo.png rename to content/news/015/mun-logo.png diff --git a/content/posts/newsletter-015/pglowrpg.gif b/content/news/015/pglowrpg.gif similarity index 100% rename from content/posts/newsletter-015/pglowrpg.gif rename to content/news/015/pglowrpg.gif diff --git a/content/posts/newsletter-015/power-kick-shot.png b/content/news/015/power-kick-shot.png similarity index 100% rename from content/posts/newsletter-015/power-kick-shot.png rename to content/news/015/power-kick-shot.png diff --git a/content/posts/newsletter-015/rapier-demo.gif b/content/news/015/rapier-demo.gif similarity index 100% rename from content/posts/newsletter-015/rapier-demo.gif rename to content/news/015/rapier-demo.gif diff --git a/content/posts/newsletter-015/rapier-logo.svg b/content/news/015/rapier-logo.svg similarity index 100% rename from content/posts/newsletter-015/rapier-logo.svg rename to content/news/015/rapier-logo.svg diff --git a/content/posts/newsletter-015/rg3d.jpg b/content/news/015/rg3d.jpg similarity index 100% rename from content/posts/newsletter-015/rg3d.jpg rename to content/news/015/rg3d.jpg diff --git a/content/posts/newsletter-015/rust-psp-tetris-small.jpg b/content/news/015/rust-psp-tetris-small.jpg similarity index 100% rename from content/posts/newsletter-015/rust-psp-tetris-small.jpg rename to content/news/015/rust-psp-tetris-small.jpg diff --git a/content/posts/newsletter-015/rustgpu.jpg b/content/news/015/rustgpu.jpg similarity index 100% rename from content/posts/newsletter-015/rustgpu.jpg rename to content/news/015/rustgpu.jpg diff --git a/content/posts/newsletter-015/rymd_2020_11_05.gif b/content/news/015/rymd_2020_11_05.gif similarity index 100% rename from content/posts/newsletter-015/rymd_2020_11_05.gif rename to content/news/015/rymd_2020_11_05.gif diff --git a/content/posts/newsletter-015/shared-arena.png b/content/news/015/shared-arena.png similarity index 100% rename from content/posts/newsletter-015/shared-arena.png rename to content/news/015/shared-arena.png diff --git a/content/posts/newsletter-015/smash_x_rust.png b/content/news/015/smash_x_rust.png similarity index 100% rename from content/posts/newsletter-015/smash_x_rust.png rename to content/news/015/smash_x_rust.png diff --git a/content/posts/newsletter-015/space_shooter_11-03-2020.gif b/content/news/015/space_shooter_11-03-2020.gif similarity index 100% rename from content/posts/newsletter-015/space_shooter_11-03-2020.gif rename to content/news/015/space_shooter_11-03-2020.gif diff --git a/content/posts/newsletter-015/sun_prison.gif b/content/news/015/sun_prison.gif similarity index 100% rename from content/posts/newsletter-015/sun_prison.gif rename to content/news/015/sun_prison.gif diff --git a/content/posts/newsletter-015/veloren_clouds.jpeg b/content/news/015/veloren_clouds.jpeg similarity index 100% rename from content/posts/newsletter-015/veloren_clouds.jpeg rename to content/news/015/veloren_clouds.jpeg diff --git a/content/posts/newsletter-015/veloren_wolves.jpeg b/content/news/015/veloren_wolves.jpeg similarity index 100% rename from content/posts/newsletter-015/veloren_wolves.jpeg rename to content/news/015/veloren_wolves.jpeg diff --git a/content/posts/newsletter-015/video-ffi-msfs.jpg b/content/news/015/video-ffi-msfs.jpg similarity index 100% rename from content/posts/newsletter-015/video-ffi-msfs.jpg rename to content/news/015/video-ffi-msfs.jpg diff --git a/content/posts/newsletter-015/voxel-mapper.gif b/content/news/015/voxel-mapper.gif similarity index 100% rename from content/posts/newsletter-015/voxel-mapper.gif rename to content/news/015/voxel-mapper.gif diff --git a/content/posts/newsletter-015/weegames.png b/content/news/015/weegames.png similarity index 100% rename from content/posts/newsletter-015/weegames.png rename to content/news/015/weegames.png diff --git a/content/posts/newsletter-015/wilds.1.png b/content/news/015/wilds.1.png similarity index 100% rename from content/posts/newsletter-015/wilds.1.png rename to content/news/015/wilds.1.png diff --git a/content/posts/newsletter-015/worship-sun.jpg b/content/news/015/worship-sun.jpg similarity index 100% rename from content/posts/newsletter-015/worship-sun.jpg rename to content/news/015/worship-sun.jpg diff --git a/content/posts/newsletter-015/yawc.png b/content/news/015/yawc.png similarity index 100% rename from content/posts/newsletter-015/yawc.png rename to content/news/015/yawc.png diff --git a/content/posts/newsletter-016/abstreet.png b/content/news/016/abstreet.png similarity index 100% rename from content/posts/newsletter-016/abstreet.png rename to content/news/016/abstreet.png diff --git a/content/posts/newsletter-016/akigi_butcher.jpg b/content/news/016/akigi_butcher.jpg similarity index 100% rename from content/posts/newsletter-016/akigi_butcher.jpg rename to content/news/016/akigi_butcher.jpg diff --git a/content/posts/newsletter-016/antorum-online-11-25-2020.gif b/content/news/016/antorum-online-11-25-2020.gif similarity index 100% rename from content/posts/newsletter-016/antorum-online-11-25-2020.gif rename to content/news/016/antorum-online-11-25-2020.gif diff --git a/content/posts/newsletter-016/aws.png b/content/news/016/aws.png similarity index 100% rename from content/posts/newsletter-016/aws.png rename to content/news/016/aws.png diff --git a/content/posts/newsletter-016/bevmnist.gif b/content/news/016/bevmnist.gif similarity index 100% rename from content/posts/newsletter-016/bevmnist.gif rename to content/news/016/bevmnist.gif diff --git a/content/posts/newsletter-016/bevy_chess.gif b/content/news/016/bevy_chess.gif similarity index 100% rename from content/posts/newsletter-016/bevy_chess.gif rename to content/news/016/bevy_chess.gif diff --git a/content/posts/newsletter-016/cargo-mobile.jpg b/content/news/016/cargo-mobile.jpg similarity index 100% rename from content/posts/newsletter-016/cargo-mobile.jpg rename to content/news/016/cargo-mobile.jpg diff --git a/content/posts/newsletter-016/dotrix-rendering.png b/content/news/016/dotrix-rendering.png similarity index 100% rename from content/posts/newsletter-016/dotrix-rendering.png rename to content/news/016/dotrix-rendering.png diff --git a/content/posts/newsletter-016/egui.png b/content/news/016/egui.png similarity index 100% rename from content/posts/newsletter-016/egui.png rename to content/news/016/egui.png diff --git a/content/posts/newsletter-016/everfight.jpg b/content/news/016/everfight.jpg similarity index 100% rename from content/posts/newsletter-016/everfight.jpg rename to content/news/016/everfight.jpg diff --git a/content/posts/newsletter-016/f1-tui.gif b/content/news/016/f1-tui.gif similarity index 100% rename from content/posts/newsletter-016/f1-tui.gif rename to content/news/016/f1-tui.gif diff --git a/content/posts/newsletter-016/fbsim.png b/content/news/016/fbsim.png similarity index 100% rename from content/posts/newsletter-016/fbsim.png rename to content/news/016/fbsim.png diff --git a/content/posts/newsletter-016/ggez-bun.png b/content/news/016/ggez-bun.png similarity index 100% rename from content/posts/newsletter-016/ggez-bun.png rename to content/news/016/ggez-bun.png diff --git a/content/posts/newsletter-016/gh-gameoff.png b/content/news/016/gh-gameoff.png similarity index 100% rename from content/posts/newsletter-016/gh-gameoff.png rename to content/news/016/gh-gameoff.png diff --git a/content/posts/newsletter-016/go-wotm.png b/content/news/016/go-wotm.png similarity index 100% rename from content/posts/newsletter-016/go-wotm.png rename to content/news/016/go-wotm.png diff --git a/content/posts/newsletter-016/hands-on-rust.jpg b/content/news/016/hands-on-rust.jpg similarity index 100% rename from content/posts/newsletter-016/hands-on-rust.jpg rename to content/news/016/hands-on-rust.jpg diff --git a/content/posts/newsletter-016/iced-game-of-life.gif b/content/news/016/iced-game-of-life.gif similarity index 100% rename from content/posts/newsletter-016/iced-game-of-life.gif rename to content/news/016/iced-game-of-life.gif diff --git a/content/posts/newsletter-016/index.md b/content/news/016/index.md similarity index 93% rename from content/posts/newsletter-016/index.md rename to content/news/016/index.md index 9827ba681..0b7c57d10 100644 --- a/content/posts/newsletter-016/index.md +++ b/content/news/016/index.md @@ -2,6 +2,7 @@ title = "This Month in Rust GameDev #16 - November 2020" date = 2020-12-08 transparent = true +aliases = ["posts/newsletter-016"] +++ Welcome to the 16th issue of the Rust GameDev Workgroup's @@ -29,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/posts/newsletter-016/kas-markdown.png b/content/news/016/kas-markdown.png similarity index 100% rename from content/posts/newsletter-016/kas-markdown.png rename to content/news/016/kas-markdown.png diff --git a/content/posts/newsletter-016/macroquad_particles.gif b/content/news/016/macroquad_particles.gif similarity index 100% rename from content/posts/newsletter-016/macroquad_particles.gif rename to content/news/016/macroquad_particles.gif diff --git a/content/posts/newsletter-016/miniquad_kms.gif b/content/news/016/miniquad_kms.gif similarity index 100% rename from content/posts/newsletter-016/miniquad_kms.gif rename to content/news/016/miniquad_kms.gif diff --git a/content/posts/newsletter-016/old-gods-logo.png b/content/news/016/old-gods-logo.png similarity index 100% rename from content/posts/newsletter-016/old-gods-logo.png rename to content/news/016/old-gods-logo.png diff --git a/content/posts/newsletter-016/optick-small.png b/content/news/016/optick-small.png similarity index 100% rename from content/posts/newsletter-016/optick-small.png rename to content/news/016/optick-small.png diff --git a/content/posts/newsletter-016/optick.jpeg b/content/news/016/optick.jpeg similarity index 100% rename from content/posts/newsletter-016/optick.jpeg rename to content/news/016/optick.jpeg diff --git a/content/posts/newsletter-016/podcast.jpeg b/content/news/016/podcast.jpeg similarity index 100% rename from content/posts/newsletter-016/podcast.jpeg rename to content/news/016/podcast.jpeg diff --git a/content/posts/newsletter-016/rapier-demo.gif b/content/news/016/rapier-demo.gif similarity index 100% rename from content/posts/newsletter-016/rapier-demo.gif rename to content/news/016/rapier-demo.gif diff --git a/content/posts/newsletter-016/rapier-logo.svg b/content/news/016/rapier-logo.svg similarity index 100% rename from content/posts/newsletter-016/rapier-logo.svg rename to content/news/016/rapier-logo.svg diff --git a/content/posts/newsletter-016/rg3d_instancing.jpg b/content/news/016/rg3d_instancing.jpg similarity index 100% rename from content/posts/newsletter-016/rg3d_instancing.jpg rename to content/news/016/rg3d_instancing.jpg diff --git a/content/posts/newsletter-016/rib.gif b/content/news/016/rib.gif similarity index 100% rename from content/posts/newsletter-016/rib.gif rename to content/news/016/rib.gif diff --git a/content/posts/newsletter-016/rymd_2020_12_02.gif b/content/news/016/rymd_2020_12_02.gif similarity index 100% rename from content/posts/newsletter-016/rymd_2020_12_02.gif rename to content/news/016/rymd_2020_12_02.gif diff --git a/content/posts/newsletter-016/salva-logo.svg b/content/news/016/salva-logo.svg similarity index 100% rename from content/posts/newsletter-016/salva-logo.svg rename to content/news/016/salva-logo.svg diff --git a/content/posts/newsletter-016/shotcaller-2guis.png b/content/news/016/shotcaller-2guis.png similarity index 100% rename from content/posts/newsletter-016/shotcaller-2guis.png rename to content/news/016/shotcaller-2guis.png diff --git a/content/posts/newsletter-016/space_shooter_12-03-2020.gif b/content/news/016/space_shooter_12-03-2020.gif similarity index 100% rename from content/posts/newsletter-016/space_shooter_12-03-2020.gif rename to content/news/016/space_shooter_12-03-2020.gif diff --git a/content/posts/newsletter-016/starlight-1961.png b/content/news/016/starlight-1961.png similarity index 100% rename from content/posts/newsletter-016/starlight-1961.png rename to content/news/016/starlight-1961.png diff --git a/content/posts/newsletter-016/talk-multiplayer-game.jpg b/content/news/016/talk-multiplayer-game.jpg similarity index 100% rename from content/posts/newsletter-016/talk-multiplayer-game.jpg rename to content/news/016/talk-multiplayer-game.jpg diff --git a/content/posts/newsletter-016/terramach.gif b/content/news/016/terramach.gif similarity index 100% rename from content/posts/newsletter-016/terramach.gif rename to content/news/016/terramach.gif diff --git a/content/posts/newsletter-016/veloren-gameplay-video.gif b/content/news/016/veloren-gameplay-video.gif similarity index 100% rename from content/posts/newsletter-016/veloren-gameplay-video.gif rename to content/news/016/veloren-gameplay-video.gif diff --git a/content/posts/newsletter-016/veloren_adventure.jpg b/content/news/016/veloren_adventure.jpg similarity index 100% rename from content/posts/newsletter-016/veloren_adventure.jpg rename to content/news/016/veloren_adventure.jpg diff --git a/content/posts/newsletter-016/veloren_fly.jpg b/content/news/016/veloren_fly.jpg similarity index 100% rename from content/posts/newsletter-016/veloren_fly.jpg rename to content/news/016/veloren_fly.jpg diff --git a/content/posts/newsletter-016/wgpu-big-picture.svg b/content/news/016/wgpu-big-picture.svg similarity index 100% rename from content/posts/newsletter-016/wgpu-big-picture.svg rename to content/news/016/wgpu-big-picture.svg diff --git a/content/news/017/a-zombie-shooter-game-demo.gif b/content/news/017/a-zombie-shooter-game-demo.gif new file mode 100644 index 000000000..d31b421f3 Binary files /dev/null and b/content/news/017/a-zombie-shooter-game-demo.gif differ diff --git a/content/news/017/akigi.gif b/content/news/017/akigi.gif new file mode 100644 index 000000000..eac1a3e81 Binary files /dev/null and b/content/news/017/akigi.gif differ diff --git a/content/news/017/antorum-12-30-2020.jpg b/content/news/017/antorum-12-30-2020.jpg new file mode 100644 index 000000000..a6ea19a9f Binary files /dev/null and b/content/news/017/antorum-12-30-2020.jpg differ diff --git a/content/news/017/bevy_logo.png b/content/news/017/bevy_logo.png new file mode 100644 index 000000000..22508c73c Binary files /dev/null and b/content/news/017/bevy_logo.png differ diff --git a/content/news/017/beziers.gif b/content/news/017/beziers.gif new file mode 100644 index 000000000..e301a52c0 Binary files /dev/null and b/content/news/017/beziers.gif differ diff --git a/content/news/017/cheese-screenshot.png b/content/news/017/cheese-screenshot.png new file mode 100644 index 000000000..0992e1e6c Binary files /dev/null and b/content/news/017/cheese-screenshot.png differ diff --git a/content/news/017/dotrix-in-december.gif b/content/news/017/dotrix-in-december.gif new file mode 100644 index 000000000..d768c45ed Binary files /dev/null and b/content/news/017/dotrix-in-december.gif differ diff --git a/content/news/017/doukutsu-rs.png b/content/news/017/doukutsu-rs.png new file mode 100644 index 000000000..8247fc127 Binary files /dev/null and b/content/news/017/doukutsu-rs.png differ diff --git a/content/news/017/egregoria.jpg b/content/news/017/egregoria.jpg new file mode 100644 index 000000000..43f487eae Binary files /dev/null and b/content/news/017/egregoria.jpg differ diff --git a/content/news/017/egui.gif b/content/news/017/egui.gif new file mode 100644 index 000000000..684a1f750 Binary files /dev/null and b/content/news/017/egui.gif differ diff --git a/content/news/017/freenukum-somersaults.gif b/content/news/017/freenukum-somersaults.gif new file mode 100644 index 000000000..f0e0b75f5 Binary files /dev/null and b/content/news/017/freenukum-somersaults.gif differ diff --git a/content/news/017/freenukum.png b/content/news/017/freenukum.png new file mode 100644 index 000000000..1663e553c Binary files /dev/null and b/content/news/017/freenukum.png differ diff --git a/content/news/017/harvest_hero_snippet.gif b/content/news/017/harvest_hero_snippet.gif new file mode 100644 index 000000000..70338c64f Binary files /dev/null and b/content/news/017/harvest_hero_snippet.gif differ diff --git a/content/news/017/how-to-revive-a-dead-rust-project.jpg b/content/news/017/how-to-revive-a-dead-rust-project.jpg new file mode 100644 index 000000000..2c6abb3e2 Binary files /dev/null and b/content/news/017/how-to-revive-a-dead-rust-project.jpg differ diff --git a/content/news/017/index.md b/content/news/017/index.md new file mode 100644 index 000000000..7d9240fe3 --- /dev/null +++ b/content/news/017/index.md @@ -0,0 +1,1322 @@ ++++ +title = "This Month in Rust GameDev #17 - December 2020" +date = 2021-01-14 +transparent = true +aliases = ["posts/newsletter-017"] ++++ + +Welcome to the 17th 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 + +Table of contents: + +- [Rust GameDev Podcast #4](#rust-gamedev-podcast-4) +- [Rust Gamedev Meetup](#rust-gamedev-meetup) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Popular Workgroup Issues in GitHub](#popular-workgroup-issues-in-github) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust Gamedev Meetup + +![invitation card](meetup.png) + +The Rust Gamedev meetup will happen on the second Saturday of every month +at 16:00 GMT+0. The meetup will be an opportunity to chat with others +from the Rust game development community and see what people are working on. + +The meetup will take place on the [Rust Gamedev Discord server][meetup]. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/ksflbm/the_first_rust_gamedev_meetup), +[Twitter](https://twitter.com/rust_gamedev/status/1347286339079860225)_ + +[meetup]: https://discord.gg/yNtPTb2 + +## [Rust GameDev Podcast #4][podcast-4] + +![text logo](podcast.jpeg) + +[The 4th podcast episode][podcast-4] is an interview with [Fedor Logachev][@fedor_games], +creator of the [macroquad] and [miniquad] games libraries. + +> We discuss the libraries' features, development, and plans for the future +> as well as the accompanying book and games project that will act +> as both an introduction to Rust games development and the Macroquad library. + +Listen and subscribe from the following platforms: +[Rust GameDev Podcast (simplecast)](https://rustgamedev.com/), +[Apple Podcasts](https://podcasts.apple.com/gb/podcast/rust-game-dev/id1526304768), +[Spotify](https://open.spotify.com/show/7HRfGnTcXkLkQd9fxJbDGj), +[RSS Feed](https://feeds.simplecast.com/C6NQglnL), +[Google Podcasts](https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9DNk5RZ2xuTA). + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/kit4pa/rustgamedev_podcast_4_fedor_logachev)_ + +[podcast-4]: https://rustgamedev.com/episodes/interview-with-fedor-logachev +[@fedor_games]: https://twitter.com/fedor_games +[macroquad]: https://github.com/not-fl3/macroquad +[miniquad]: https://github.com/not-fl3/miniquad + +## Game Updates + +### [Way of Rhea has a Discord!][wor-discord] + +{{ image_figure( + alt="New Way of Rhea assets" + src="way-of-rhea.gif" + caption="Updated visuals for interactive items.") }} + +[Way of Rhea][wor-website] is a puzzle platformer that takes place in a world +where you can only interact with objects that match your current color. The game +is being developed in a custom built Rust game engine and hot swappable +scripting language. + +This month's updates: + +- More progress has been made on the hub world! The game is no longer fully + linear. +- All interactive elements are getting a visual update, pictured above. +- The devs have created [a Discord server][wor-discord] where you can hang out, + stay up to date on the latest developments, and if you're interested, chat + about the implementation (see the `#tech` channel.) + +[wor-discord]: https://discord.gg/JGeVt5XwPP +[wor-website]: https://anthropicstudios.com/way-of-rhea + +### [Veloren][veloren] + +{{ image_figure( + alt="Landscape" + src="veloren1.jpg" + caption="A village over the river") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In December, Veloren [released its 100th devblog][veloren-blog-100]! +This edition included sections about all aspects of the project +from 20 contributors, making it by far the longest Veloren devblog yet: + +- [A journey to implement a controller support with gilrs][veloren-gilrs]. +- Two sections about modelling: [by @Gemu][veloren-modelling-1] + and [by @Snowram][veloren-modelling-2]. +- [Veloren's database persistence and inventory improvements][veloren-persistence]. +- [Combat improvements: new weapon skills, better AI, and a poise system][veloren-combat]. +- [Network analysis and an overview of new Network Backend][veloren-net]. +- Overviews of [the state of graphics and UI][veloren-graphics], + [the graphical future of the game][veloren-graphic-future], + and [UI progress][veloren-ui]. +- [Procedural generation of unique, good looking, and fun to climb trees][veloren-trees]. +- [New website design prototypes][veloren-site]. +- And lots of other interesting sections with updates + and personal contributors' stories. + +Other December updates include: + +- Lots of work on the economic simulation: + [part 1][veloren-econ-1], [part 2][veloren-econ-2]. +- [Reflective water was added to the level of detail system][veloren-98-contributors], + making far-off lakes look much better. +- A plugin system is in the prototyping phase. + This will eventually allow mods to be added to the game. +- An aura system was added for radial buffs around entities, for example, + being near a fireplace now allows you to heal. + +December's full weekly devlogs: "This Week In Veloren...": +[#97](https://veloren.net/devblog-97), +[#98](https://veloren.net/devblog-98), +[#99](https://veloren.net/devblog-99), +[#100](https://veloren.net/devblog-100). + +{{ image_figure( + alt="Youtube preview img" + src="veloren-glider.gif" + caption="[New glider physics](https://veloren.net/devblog-100#glider-physics-by-slipped) video", + link="https://youtube.com/watch?v=8WWVe1cIu7I") }} + +In January, work will continue on 0.9. Work will be done on economic simulation, +world simulation, and combat systems. New developers are joining the project +every month, and development is moving forward quickly. + +[veloren]: https://veloren.net +[veloren-blog-100]: https://veloren.net/devblog-100 +[veloren-98-contributors]: https://veloren.net/devblog-98/#contributor-work +[veloren-econ-1]: https://veloren.net/devblog-98#economic-simulation-update-by-christof +[veloren-econ-2]: https://veloren.net/devblog-99#economic-simulation-by-christof +[veloren-ui]: https://veloren.net/devblog-100#ui-progress-by-pfau +[veloren-glider]: https://veloren.net/devblog-100#glider-physics-by-slipped +[veloren-gilrs]: https://veloren.net/devblog-100#mckol-s-veloren-journey +[veloren-modelling-1]: https://veloren.net/devblog-100#modeling-with-gemu +[veloren-modelling-2]: https://veloren.net/devblog-100#modeling-with-snowram +[veloren-persistence]: https://veloren.net/devblog-100#work-by-xvar +[veloren-combat]: https://veloren.net/devblog-100#combat-improvements-by-james +[veloren-net]: https://veloren.net/devblog-100#network-analysis-by-xmac94x +[veloren-graphics]: https://veloren.net/devblog-100#the-state-of-graphics-and-ui-by-imbris +[veloren-trees]: https://veloren.net/devblog-100#procedural-trees-by-ccgauche +[veloren-site]: https://veloren.net/devblog-100#new-website-design-by-songtronix +[veloren-graphic-future]: https://veloren.net/devblog-100#looking-to-the-graphical-future-by-sharp +[veloren-0.8-changelog]: https://gitlab.com/veloren/veloren/-/blob/master/CHANGELOG.md#080-2020-11-28 +[veloren-minidebconf-talk]: https://youtube.com/watch?v=76FPpOnshNw +[veloren-0.8-gameplay]: https://youtube.com/watch?v=8WWVe1cIu7I + +### [15-minute Santa][15m-santa] + +![15-minute Santa](santa.png) + +In [15-minute Santa][15m-santa], you deliver presents around a city, +occasionally stopping at a restaurant to refuel -- biking uphill in the snow +isn't easy! The game uses real data from OpenStreetMap and local GIS sources to +know where shops, single-family homes, and apartments are located. In places +where zoning rules keep people separated from food, Santa will have a hard +time. + +15-minute Santa was created by the [A/B Street][abstreet] team as an experiment +to see how quickly we could build a simple arcade game that gets people +thinking about how their city is designed. [The code][santa-code] doesn't make +use of an entity-component system or an existing engine, and animation and +particle effects don't use a custom shader. The game runs natively on Linux, +Mac, and Windows, and on web browsers. There are instructions for modding the +game and adding your own city! + +A/B Street updates will return next month. In the meantime, please comment on +the [2021 roadmap][abstreet-roadmap]. + +[15m-santa]: http://santa.abstreet.org +[abstreet]: https://abstreet.org +[santa-code]: https://github.com/dabreegster/abstreet/tree/master/santa/src/ +[abstreet-roadmap]: https://docs.google.com/document/d/1oV4mdtb0ve-wf0HqbEvR9IwXLIkTeDu8a3UnJxnr2F0 + +### [Egregoria] + +![Egregoria farm and flour factory at night](egregoria.jpg) + +[Egregoria]'s objective is to become a granular society simulation, +filled with fully autonomous agents interacting with their world in real time. +The city should evolve by itself and form interesting patterns. + +The [7th devlog][egregoria-blog-post] was published. Celebrating the first +anniversary of the project! Updates include: + +- A summary of Egregoria's progress and ambition. +- Music and sounds. +- Basic economy design. +- A specialized gridlock detection algorithm. + +Join [Egregoria's Discord server][egregoria-discord]. + +[Egregoria]: https://github.com/Uriopass/Egregoria +[egregoria-blog-post]: http://douady.paris/blog/egregoria_7.html +[egregoria-discord]: https://discord.gg/CAaZhUJ + +### [doukutsu-rs][drs-repo] + +![d-rs grasstown screenshot](doukutsu-rs.png) + +[doukutsu-rs][drs-repo] is a remake of [Cave Story][cave-story] engine, +meant to be a drop-in replacement for the original game executable +(both freeware and commercial version), focused on being a portable modding +tool (most Cave Story mods patch the executable directly, including machine +code editing/assembly hacks) and adding various visual and gameplay-related +enhancements. + +Built mainly using modified [ggez] crate, runs on desktop and Android. + +Changes done during the last month: + +- [An Android port with full touchscreen controls][drs-android]. +- Work has been started on Lua API, meant for building custom stuff + on top of the engine. +- Work started on pushing the project's changes upstream and moving back + to mainline versions of crates. +- Improvements to the Organya player (a simple synthesizer that plays the + in-game music using a set of 100 waves and 6 drum samples). +- A bunch of missing NPCs, bosses, and other stuff were added. +- The way how game loop works was redesigned, in preparation + for adding networked multiplayer support. +- Countless bug fixes. + +[drs-discord]: https://discord.gg/fbRsNNB +[drs-repo]: https://github.com/doukutsu-rs/doukutsu-rs +[cave-story]: https://en.wikipedia.org/wiki/Cave_Story +[ggez]: https://ggez.rs +[drs-android]: https://reddit.com/r/rust/comments/kh79r1/made_my_rust_remake_of_cave_story + +### [Antorum] + +![A view of a beach area on Antorum Isle](antorum-12-30-2020.jpg) + +[Antorum] 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. + +December was an important month for the game. Along with tons of little fixes +and changes, major features such as NPC Dialog were finally implemented! Check +out the dev logs for more info. + +- [#26: Various Improvements](https://ratwizard.dev/dev-log/antorum/26); +- [#27: The Big 2020 End-Of-Year Update](https://ratwizard.dev/dev-log/antorum/27); + +[Antorum]: https://ratwizard.dev/dev-log/antorum +[@dooskington]: https://twitter.com/dooskington + +### [A Zombie Shooter Game][zombie-shooter] + +{{ image_figure( + alt="Demo" + src="a-zombie-shooter-game-demo.gif" + caption="Watch a [video demo on YouTube](https://youtu.be/9o6KjlwKyGo)", + link="https://youtu.be/9o6KjlwKyGo") }} + +[A Zombie Shooter Game][zombie-shooter] is a work-in-progress multiplayer +top-down shooter. Actually, it's a Rust port of an old Java game with +a very simple goal - to shoot zombies chasing after you. +The game has several +advantages, like high-quality bullet ballistics and geocentric camera rotation +relative to the player. + +This month's updates: + +- Dummy AI. +- Projectiles (shooting) synchronization over network. +- Collision detection. + +You can discuss the project at [its GitHub forum][zombie-shooter-forum]. + +[zombie-shooter]: https://github.com/aunmag/shooter-rust +[zombie-shooter-youtube]: https://youtu.be/9o6KjlwKyGo +[zombie-shooter-forum]: https://github.com/aunmag/shooter-rust/discussions + +### [Akigi][akigi] + +[Akigi][akigi] is a work-in-progress multiplayer online game world. Akigi +is being developed by [@chinedufn] for the web and desktop using a custom +Rust game engine. + +{{ image_figure( + alt="Moving while attacking" + src="akigi.gif" + caption="Moving while attacking. Don't look at the shoulders.") }} + +December updates include: + +- [Support for additive animation blending][aiming] was added + in order to be able to aim bows. +- A somewhat operational [skill progress meter][skill-progress] was added. +- A [discussion on Reddit][learning-art] about learning art as a programmer. + +Full December's devlogs: +[#96](https://devjournal.akigi.com/december-2020/096-2020-12-06.html), +[#97](https://devjournal.akigi.com/december-2020/097-2020-12-13.html), +[#98](https://devjournal.akigi.com/december-2020/098-2020-12-20.html), +[#99](https://devjournal.akigi.com/december-2020/099-2020-12-27.html). + +[akigi]: https://akigi.com +[skill-progress]: https://devjournal.akigi.com/december-2020/097-2020-12-13.html +[aiming]: https://devjournal.akigi.com/december-2020/099-2020-12-27.html#aiming +[learning-art]: https://reddit.com/r/gamedev/comments/k8i773/how_i_a_mere_programmer_am_learning +[@chinedufn]: https://chinedufn.com + +### [Swoop][swoop-itch] + +{{ image_figure( + alt="Doing donuts while being overtaken" + src="swoop.gif" + caption="Getting lapped by purple? - don't worry, it happens to everyone") }} + +[Swoop][swoop-itch] by [@sdfgeoff] is a procedural racing web game +written in Rust from scratch. + +> I've tried to make games in a variety of engines, but invariably got frustrated. +> So I decided to throw out the engine and find out what makes game-making so complex. +> It turns out that the stuff below the game engine is only slightly less friendly +> than the stuff above it. +> +> All up this game was a large experiment: +> I'm not all that familiar with Rust, it was my first go at targetting WASM, +> I've never used WebGL before, and my linear algebra is worse than I thought. + +[The source code is available here][swoop-source] and +you can also read about the process of making the game +here: ["WASM Games From Scratch"][swoop-book]. + +You can also play the game's [prototype version done in shadertoy][swoop-shadertoy] +and check out a [prototype of the next @sdfgeoff's project][swoop-next] +that is based on raymarching giant caves. + +[swoop-itch]: https://sdfgeoff.itch.io/swoop +[swoop-source]: https://github.com/sdfgeoff/wasm_minigames +[swoop-shadertoy]: https://shadertoy.com/view/WlScWd +[swoop-book]: https://sdfgeoff.github.io/wasm_minigames/a_first_game_swoop.html +[swoop-next]: https://shadertoy.com/view/tltyRB +[@sdfgeoff]: https://github.com/sdfgeoff + +### Harvest Hero + +{{ image_figure( + alt="Harvest Hero Gameplay" + src="harvest_hero_snippet.gif" + caption="Harvest crops and whack those pesky Groobles!") }} + +Harvest Hero by [@bombfuse_dev] is an arcade/roguelike game. +This month in development: + +- A new level type called "Harvest Defense" was added. +- Some quality of life features like background music and sfx volume control + were added. +- The devs began working with some artists to provide a music + and pixelart makeover. + +[@bombfuse_dev]: https://twitter.com/bombfuse_dev + +### [FreeNukum][fn] + +![The first original Duke Nukem 1 level in FreeNukum](freenukum.png) + +[FreeNukum][fn] is a free software clone of the 1991 DOS game *Duke Nukem +1* jump'n run by [@silwol]. Development of the game started in 2007, back +then it was written in C using SDL1. In 2020, the codebase was gradually +migrated to Rust, after that it got updated to SDL2. The first version +fully implemented in Rust was [released to crates.io][fn-crates-io] and +[announced on Reddit][fn-reddit-announce] in December 2020. + +Some of [this month's changes][fn-changelog]: + +- Controller support was added. +- Some of the actors found in the original game were added. +- The hero can do somersaults when jumping with boots. +- The project's wiki now has a ["FreeNukum Screenshots" page][fn-screenshots]. +- A [Matrix chat room][fn-matrix-chat] is now available. + +{{ image_figure( + alt="FreeNukum showing the hero making somersaults" + src="freenukum-somersaults.gif" + caption="Somersaults!") }} + +[fn]: https://gitlab.com/silwol/freenukum +[fn-reddit-announce]: https://reddit.com/r/rust_gamedev/comments/k9dw50/freenukum +[fn-crates-io]: https://crates.io/crates/freenukum +[fn-screenshots]: https://gitlab.com/silwol/freenukum/-/wikis/FreeNukum-Screenshots +[fn-matrix-chat]: https://matrix.to/#/#freenukum:matrix.org +[fn-changelog]: https://gitlab.com/silwol/freenukum/-/blob/main/CHANGELOG.md +[@silwol]: https://chaos.social/@silwol + +### [openEtG] + +![openEtG login screen](openEtG.jpg) + +[openEtG] is an open source engine that is an HTML5 successor to the original +[Elements the Game][Elements], featuring additional cards and balance. +In December, 10k lines of JavaScript source were rewritten in Rust: + +> Overall I've been brainstorming this change for a couple years. So I'd already +> shifted from a classical OOP mess with Shield/Weapon/Pillar inheriting from +> Permanent to one where everything is a Thing. This also made sense because in +> openEtG there's spells like Flying Weapon which convert the player's weapon +> into a creature. So before I'd create a new Creature filled in with stats from +> original weapon, whereas now it's mostly just moving the instance into a +> creature slot & updating its type tag. + +You can read the full openEtG December writeup [here][openEtG-writeup]. + +[openEtG]: https://etg.dek.im +[Elements]: http://elementsthegame.com +[openEtG-writeup]: https://reddit.com/r/rust/comments/k3jy5g/i_rewrote_10k_lines_of_js_into_rust + +### [Weegames][weegames-itch] + +![Four Weegames minigames](weegames.jpg) + +[Weegames][weegames-itch] is a fast-paced minigame collection. + +The game now has a [web demo][weegames-itch] ([source][weegames-demo-source]) +made with macroquad. +Sound was recently added to the demo using the quad-snd library. + +[weegames-itch]: https://yeahross.itch.io/weegames +[weegames-demo-source]: https://github.com/yeahross0/Weegames-Demo + +### [Shotcaller] + +{{ image_figure( + alt="Shotcaller dual frontend" + src="shotcaller-2guis.png" + caption="ASCII and sprites versions of Shotcaller interface.") }} + +[Shotcaller] is a moddable RTS/MOBA game made with bracket-lib. + +No new release is out yet, but several major updates happened: + +- [Basic AI profiles](https://github.com/amethyst/shotcaller/pull/19) for leaders. +- [TreePerson](https://github.com/amethyst/shotcaller/pull/24) leader added. +- [Generic Leader 2](https://github.com/amethyst/shotcaller/pull/25) pending. +- More documentation. +- The game moved from specs to their own, heavily specs-based plank_ecs. + +Contributions welcome: [try add a new Leader][shotcaller-issue-leader]. + +[Shotcaller]: https://github.com/amethyst/shotcaller +[shotcaller-web]: https://shotcaller.jojolepro.com/ +[shotcaller-issue-leader]: https://github.com/amethyst/shotcaller/issues/6 + +### [Cheese] + +{{ image_figure( + alt="A screenshot of some mice shooting other mice" + src="cheese-screenshot.png" + caption="Pew pew!") }} + +[Cheese] is a small Real Time Strategy game created for the +[GitHub Game Off 2020]. It was written using a 'low-level gamedev stack' +consisting of: + +- [wgpu-rs] for rendering, +- [gltf] models, +- [wgpu_glyph] for text rendering +- [legion] for ECS +- and [lyon_tessellation] for rendering 2D UI elements. + +The game is in a finished state, but it would be relatively easy to add new +features such as unit types and buildings. + +Check out the source code at [github.com/expenses/cheese]. + +[Cheese]: https://expenses.itch.io/cheese +[GitHub Game Off 2020]: https://itch.io/jam/game-off-2020 +[wgpu-rs]: https://github.com/gfx-rs/wgpu-rs +[gltf]: https://crates.io/crates/gltf +[wgpu_glyph]: https://crates.io/crates/wgpu_glyph +[legion]: https://crates.io/crates/legion +[lyon_tessellation]: https://crates.io/crates/lyon_tessellation +[github.com/expenses/cheese]: https://github.com/expenses/cheese + +### [Vollmond][vollmond] + +![Vollmond preview](vollmond-preview.png) + +[Vollmond][vollmond] is a small non-violent adventure in the style of Zelda 2. +You as a player are cursed and must find 4 ingredients for the famous +`Moonshot` disenchantment potion. + +It was initially created for the GitHub Game Off 2020 Jam to gain experience +with WASM and [macroquad]. This month a post jam version was released. +It contains: + +- implementation of user feedback, +- adding music and sound effects. + +The [source code][vollmond-source] is available and includes the following +technical implementations: + +- drawing and modifying multilayer tilemap, +- tile-based animation and collision logic, +- tweening und timer, +- 4-way top-down and sideways player movement, +- independent game scenes. + +[vollmond]: https://puppetmaster.itch.io/vollmond +[vollmond-source]: https://github.com/puppetmaster-/vollmond +[macroquad]: https://github.com/not-fl3/macroquad + +## Learning Material Updates + +### [How to Revive a Dead Rust Project][rustfest-talk] + +{{ image_figure( + alt="RustFest Sketchnote" + src="how-to-revive-a-dead-rust-project.jpg" + caption="Drawing by [Carlo Gilmar](https://twitter.com/visual_partner). Click to [watch the talk.](https://www.youtube.com/watch?v=qoCryIy4bFE)", + link="https://www.youtube.com/watch?v=qoCryIy4bFE") }} + +At [RustFest Global 2020], [@micah_tigley] and [@carlosupina] talked about their +experiences collaborating together to revive the [space_shooter_rs] project through +effective planning, refactoring, and documentation. The video was recently +[released on YouTube][talk-tweet] in December! + +Since then, both developers have been working away on improving the +game. Some updates include: + +- [Adding debug lines for hitboxes][debug-lines] +- [Creating configurations files to store player variables][player-config] + +[@micah_tigley]: https://twitter.com/micah_tigley +[@carlosupina]: https://twitter.com/carlosupina +[RustFest Global 2020]: https://rustfest.global/ +[rustfest-talk]: https://www.youtube.com/watch?v=qoCryIy4bFE +[visual_partner]: https://twitter.com/visual_partner +[talk-tweet]: https://twitter.com/carlosupina/status/1341763006716407808 +[space_shooter_rs]: https://github.com/amethyst/space_shooter_rs +[debug-lines]: https://twitter.com/carlosupina/status/1335289462738259974 +[player-config]: https://github.com/amethyst/space_shooter_rs/pull/101 + +### [Building Pikachu Volleyball][pikachu-video] + +{{ image_figure( + alt="YouTube Preview: Video thumbnail with a crab and text" + src="pikachu0.png" + caption="Click to [watch the video on YouTube](https://youtube.com/watch?v=Z1sxCC0CDts)", + link="https://youtube.com/watch?v=Z1sxCC0CDts") }} + +[Building Pikachu Volleyball][pikachu-video] by [@danlogs] is the latest episode +of a video series inspired by Shing Lyu's book [Practical Rust Projects][amazon-book]. +Here, [@danlogs] re-creates the Pikachu spin-off game from 1997 +by Satoshi Takenouchi - Pikachu Volleyball. + +Apart from being a good way for aspiring game developers to start +understanding the gist of game dev with Rust, this video also displays some of +the language's hardest topics (i.e. ownership, lifetimes, modules, etc.) +in a real-world application. + +[The source code is available here.][pikachu-src] + +Join the [danlogs's Discord channel][danlogs-discord] +or follow [@danologue on Twitter][@danologue]. + +[pikachu-src]: https://github.com/danbugs/danlogs/tree/master/rust/projects/pikachu_volleyball +[pikachu-video]: https://youtube.com/watch?v=Z1sxCC0CDts +[@danlogs]: http://youtube.com/c/danlogs +[amazon-book]: https://amazon.com/Practical-Rust-Projects-Computing-Applications/dp/1484255984 +[danlogs-discord]: https://discord.com/invite/fSWE49H +[@danologue]: https://twitter.com/danologue + +### [Creative Coding in Rust: Re-creating Retro Screensaver][timclicks-session] + +{{ image_figure( + alt="A screenshot from the coding sesion" + src="retro_screensaver.jpg" + caption="You can [watch the recording here](https://youtube.com/watch?v=d9lsT4kJo44).", + link="https://youtube.com/watch?v=d9lsT4kJo44") }} + +[@timClicks] live streamed a coding session featuring +[Nannou][timclicks-nannou], an open-source creative-coding framework, +which is used to recreate the Mystify screensaver that appeared in Windows 3.1. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/jxhozr/creative_coding_in_rust), +[Twitter](https://twitter.com/timClicks/status/1327789155930128387)_ + +[@timClicks]: https://twitter.com/timClicks +[timclicks-session]: https://youtube.com/watch?v=d9lsT4kJo44 +[timclicks-nannou]: https://nannou.cc + +### [Drawing Bezier curves with SDFs][bezier_article] + +{{ image_figure( + alt="Demo" + src="beziers.gif" + caption="The demo is available [here](https://pum-purum-pum-pum.github.io/bezier)") }} + +A short note by [@VladZhukov0] about drawing Bezier curves (strokes) +with signed distance fields. +Continuation of a [previous note][hqlines] about drawing lines with SDF. + +[bezier_article]: https://vladjuckov.github.io/beziers-sdf +[bezier_demo]: https://pum-purum-pum-pum.github.io/bezier +[@VladZhukov0]: https://twitter.com/VladZhukov0 +[hqlines]: https://vladjuckov.github.io/hqlines + +### [Nannou: Creative Coding with Rust][mactuitui-talk] + +{{ image_figure( + alt="A screenshot from the talk" + src="nannou_creative_coding.jpg" + caption="You can [watch the recording here](https://www.youtube.com/watch?v=Ml6tpyTyXhM).", + link="https://www.youtube.com/watch?v=Ml6tpyTyXhM") }} + +[Alexis André][@mactuitui] gave a [talk][mactuitui-talk] at +[GitHub Universe][mactuitui-github-universe] about working with Rust +and [Nannou][mactuitui-nannou-website], an open-source creative-coding +framework. + +> Alexis André is an artist, researcher, and designer aiming at redefining +> entertainment. In this golden age of computation and data overflow, +> why is our entertainment still designed to be consumed in a passive +> way? A few media are offering interactive experiences, but none of +> them are designed specifically for you. In this live demo, Alexis +> will create a sketch from scratch for participants to experience +> what it's like working with Nannou and Rust. + +The code is available at [GitHub][mactuitui-repository]. + +_Discussions: +[Twitter][mactuitui-discussion]_ + +[@mactuitui]: https://twitter.com/mactuitui +[mactuitui-talk]: https://www.youtube.com/watch?v=Ml6tpyTyXhM +[mactuitui-repository]: https://github.com/MacTuitui/nannou-universe +[mactuitui-discussion]: https://twitter.com/MacTuitui/status/1339863034991276035 +[mactuitui-nannou-website]: https://nannou.cc +[mactuitui-github-universe]: https://githubuniverse.com/Nannou-creative-coding-with-Rust/ + +### [Undergrad Thesis on Game Scripting for Legion][legion-script] + +In December 2020, [@pablodiegoss] and [@rodrigocam] presented their undergrad +thesis where they created a proof-of-concept scripting system for the Legion ECS, +called [Legion Script][legion-script]. +Legion is being currently integrated into the [Amethyst game engine][amethyst], +and this contribution might be included in future releases. + +With [Legion Script][legion-script], it is possible to declare, write and read +components into Legion using Python scripts. +However, this project exports an API that can be evolved +for other languages and interpreters. + +Since then, both developers have been sharing their work and receiving feedback +for the project while planning the next steps for the code, which is available +at [GitHub][legion-script]. + +The PDF version of the thesis could be found +in [this Amethyst forum thread][thesis-thread]. + +[legion-script]: https://github.com/redcodestudios/legion_script +[@pablodiegoss]: https://github.com/pablodiegoss +[@rodrigocam]: https://github.com/rodrigocam +[amethyst]: https://github.com/amethyst/amethyst +[thesis-thread]: https://community.amethyst.rs/t/undergrad-thesis-on-game-scripting-for-legion/1753 + +### [Triangle from Scratch][tri-scratch] + +[Triangle from Scratch][tri-scratch] ([source code][tri-scratch-src]) +is a new tutorial series by [@Lokathor] +about drawing a triangle without using any outside crates. +So far there's just one article for opening a window using the Win32 API, +but more subjects and on more platforms will be added over time. +From the author: + +> The point isn't that we specifically care about drawing the triangle. +> That's just a goal that's easy to grasp. +> The point is that we're doing it with no dependencies as a way +> to get ourselves to learn about low level OS interaction details as we go. +> That said, the "no crates" rule is for educational purposes only; +> please feel free to use crates in normal situations. + +[tri-scratch]: https://rust-tutorials.github.io/triangle-from-scratch +[tri-scratch-src]: https://github.com/rust-tutorials/triangle-from-scratch +[@Lokathor]: https://twitter.com/Lokathor + +### [WASM Games From Scratch][wasm-scratch-book] + +![sprite transformation explanations](wasm_sprite_transform.svg) + +[@sdfgeoff] published a book that describes the process +of building the abovementioned web game [Swoop][swoop-itch] from scratch: +["WASM Games From Scratch"][wasm-scratch-book]. + +> Game engines are huge behemoths, and contain algorithms +> for handling everything and the kitchen sink. +> While that's normally good, if you want to do something small, +> or possibly do something outside the bounds of a normal game engine, +> you suddenly have to learn how to do everything yourself. +> +> Or perhaps you just like the "type it and run" style of development +> for shadertoy shaders and want something similar +> that you can host on your system as (pretty much) a single file. +> +> Either way, this book chronicles my adventures +> into creating WASM games from scratch in Rust. + +Some of the topics covered by the book: + +- Building for WASM, event handling, WebGL, and shader basics. +- Map generation using a Fourier series. +- Camera positioning and drawing a map, ships, and engine trails. +- Ship physics and simple AI. + +[wasm-scratch-book]: https://sdfgeoff.github.io/wasm_minigames + +## Library & Tooling Updates + +### [Thermite SIMD]: Melt Your CPU + +Thermite is a WIP SIMD library focused on providing portable SIMD (Single +Instruction, Multiple Data) acceleration of SoA (Structure of Arrays) +algorithms, using consistent-length SIMD vectors for lockstep iteration and +computation. Extensive research and work have gone into minimizing wasted CPU +cycles and making the most out of what your CPU can do. + +The goal of Thermite is to provide highly optimized feature-rich backends for +SSE2, SSE4.2, AVX and AVX2, with planned support for AVX512, ARM/Aarch64 NEON, +and WASM SIMD extensions. In addition to that, Thermite will include a highly +optimized vectorized math library with many special math functions and +algorithms, specialized for both single and double precision. + +Thermite has been worked on for a little over a month now. The AVX2 backend and +vectorized math library are almost fully implemented. Pre-AVX2/WASM/ARM backends +are a work in progress. The latest documentation is available +[here][thermite-documentation]. + +[thermite-documentation]: https://raygon-renderer.github.io/thermite/ +[Thermite SIMD]: https://github.com/raygon-renderer/thermite + +### [This Month in Mun][mun-december] + +[![Mun logo](mun-logo.png)][Mun] + +[Mun] is a scripting language for gamedev focused on quick iteration times +that is written in Rust. + +November went by without the usual monthly update from the Mun team, as they +were unable to make much headway. Instead they posted a slightly different +[blog][mun-november], expressing their desire to add a third developer to the +Mun Core Team, whom they are willing to fund themselves - albeit a token +amount. + +The team was able to start ramping back up during the holiday; those +[December updates][mun-december] include: + +- language support for `use` statements; +- Rust version updates and bugfixes. + +[Mun]: https://mun-lang.org +[mun-november]: https://mun-lang.org/blog/2020/12/07/this-month-november +[mun-december]: https://mun-lang.org/blog/2021/01/05/this-month-december + +### [Kira] + +[Kira] by [@tesselode] is an audio library designed to help create expressive +audio for games. It aims to fill the holes in many game engines' built-in audio +APIs with features for creating seamless music loops and scripting audio events. + +Kira v0.2.0 and v0.3.0 were released recently with quite a few improvements: + +- Arrangements for stitching together multiple sounds and better seamless looping +- Per-sequence custom event types +- Groups for controlling multiple instances at a time +- Audio streams for sending arbitrary audio data to the mixer +- Lots of smaller features and workflow improvements + +Kira v0.4.0 is in the works with an API refactor, serde support for config +structs, and WASM support. + +[Kira]: https://github.com/tesselode/kira +[@tesselode]: https://twitter.com/tesselode + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/kkf1jz/kira_game_audio_library_v030_persequence_custom/), +[Twitter](https://twitter.com/tesselode/status/1342878087990685700)_ + +### [polyhedron-ops] + +{{ image_figure( + alt="polyhedron render" + src="polyhedron.jpg" + caption="Some brutalist polyhedron; rendered with 3Delight and post processed in Darktable.") }} + +[polyhedron-ops] implements the [Conway Polyhedron Operators][polyhedron-wiki] +and their extensions by George W. Hart and others. + +It is based on Kit Wallace’s OpenSCAD code. +As OpenSCAD Language is functional it lends itself well +to translation into functional Rust: + +```rust +// Conway notation: gapcD +let polyhedron = Polyhedron::dodecahedron() + .chamfer(None, true) + .propellor(None, true) + .ambo(None, true) + .gyro(None, None, true) + .finalize(); +// Export as ./polyhedron-gapcD.obj +polyhedron.write_to_obj(&Path::new("."), false); +``` + +The internal representation uses mesh buffers that need furter preprocessing +before they can be sent to a GPU +but are almost fine to send to an offline renderer, as-is. + +Optionally enabled features include: + +- Converting a polyhedron [into a bevy Mesh][polyhedron-bevy]. +- Sending a polyhedron to an offline renderer via the [nsi] crate. +- Writing data out as Wavefront OBJ. + +[polyhedron-ops]: https://github.com/virtualritz/polyhedron-ops +[polyhedron-wiki]: http://en.wikipedia.org/wiki/Conway_polyhedron_notation +[polyhedron-bevy]: https://github.com/virtualritz/polyhedron-ops/blob/76a0c4b83/examples/bevy/bevy.rs +[nsi]: https://crates.io/crates/nsi + +### [raw-gl-context] + +[raw-gl-context] is a cross-platform library for OpenGL context creation which +had its initial release in December. raw-gl-context works in any situation +where a [RawWindowHandle] is available, so it can be used with [winit] and +other windowing libraries that provide one, as well as in more diverse +situations such as audio plugins. Currently supported platforms are Windows, +macOS, and X11. + +[raw-gl-context]: https://github.com/glowcoil/raw-gl-context +[RawWindowHandle]: https://github.com/rust-windowing/raw-window-handle +[winit]: https://github.com/rust-windowing/winit + +### [SPIR-Q] v0.4.10 + +[SPIR-Q] is a light-weight SPIR-V query library which supports one-pass shader +parsing and reflection. The latest release, version 0.4.10, introduced customized +shader auditing by allowing the users to hook and to inspect the instructions +SPIR-Q has worked on, while with all access to its reflection intermediates. + +For more information, please refer to [the original post][spirq-reddit]. + +[SPIR-Q]: https://github.com/penguinliong/spirq-rs +[spirq-reddit]: https://reddit.com/r/rust_gamedev/comments/kgv4gh/spirq_0410 + +### [rust-gpu] + +{{ image_figure( + alt="A collage of various shadertoy.com shaders built with rust-gpu." + src="rust-gpu-shaders.jpeg" + caption="Various shaders from shadertoy.com ported to Rust and built with rust-gpu.") }} + +[rust-gpu] is a new codegen backend by Embark Studios for Rust, aimed at making +Rust a first class language for writing GPU shaders! This past month was the +release of rust-gpu 0.2, including a tonne of new features and capabilities. + +Some of the highlights include: + +- [You can build and test your shaders on the web.][rust-gpu-web] Thanks to SHADERed. +- [Support for accessing and sampling textures][rust-gpu-textures]. +- [Initial support for compute shaders][rust-gpu-compute]. +- [Rust's new `asm!` macro now supports writing SPIR-V][rust-gpu-asm]. + +[rust-gpu]: https://github.com/EmbarkStudios/rust-gpu +[rust-gpu-web]: https://shadered.org/blog?id=4 +[rust-gpu-textures]: https://github.com/EmbarkStudios/rust-gpu/pull/276 +[rust-gpu-compute]: https://github.com/EmbarkStudios/rust-gpu/pull/195 +[rust-gpu-asm]: https://github.com/EmbarkStudios/rust-gpu/pull/254 + +### [Egui] + +{{ image_figure( + alt="Egui emojis" + src="egui.gif" + caption="Some of the supported emojis in the [online demo](https://emilk.github.io/egui).") }} + +[Egui] is an easy-to-use GUI in pure Rust. +Egui can be integrated into a game engine, or used standalone with the help of [eframe]. +This month versions 0.5, 0.6 and 0.7 were released with many improvements, +including custom fonts, emojis and improved layout engine ([full changelog][changelog]). + +[Egui]: https://github.com/emilk/egui +[demo]: https://emilk.github.io/egui +[eframe]: https://lib.rs/eframe +[egui_template]: https://github.com/emilk/egui_template +[changelog]: https://github.com/emilk/egui/blob/master/CHANGELOG.md + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month, +versions 0.5.5 and 0.5.6 were released, with various improvements: + +- Customizable `Mesh` colors and winding orders +- Enabling/disabling the user's screen saver +- Improved CPU usage on some devices + +For full details and a list of breaking changes, see the +[changelog][tetra-changelog]. + +[tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md + +### [ggez] + +[ggez] is a lightweight game framework for making 2D games with minimum +friction. Work has continued towards the next stable release, +incorporating last-minute API changes and fixes. The intended plan is +to freeze the API this month and make a release candidate for people to +play with it and try it out, then fix bugs and incorporate feedback into +a 0.6.0 release. + +[ggez]: https://github.com/ggez/ggez + +### [macroquad] + +{{ image_figure( + alt="macroquad_profiling" + src="macroquad-profiling.gif" + caption="Macroquad-profiler footage.") }} + +[macroquad] is a cross-platform (Windows/Linux/macOS/Android/iOS/WASM) +game framework built on top of [miniquad]. +This month's updates: + +- The source code of the previously announced [particles editor][particles-web] + got [released][particles-source]. + +- A new `telemetry` module was introduced exposing + the frame timing data to any third-party visualisation tool. + For in-game profiling data visualisation the `macroquad-profiler` crate + is available. + + [A new book chapter "Profiling" was released][profiling-blog] + with more information on the subject. + +- `physics-platformer` is a new optional crate based on Maddy Thorson's + ["Celeste and TowerFall Physics" blogpost][celeste-physics] on platformers physics: + [web demo][platformer-web], [source code][platformer-source]. + +- Also, macroquad was featured in the episode + of the [Rust GameDev Podcast][macroquad-interview]. + +[macroquad-interview]: https://rustgamedev.com/episodes/interview-with-fedor-logachev +[platformer-source]: https://github.com/not-fl3/macroquad/blob/master/examples/platformer.rs +[platformer-web]: https://not-fl3.github.io/miniquad-samples/platformer.html +[celeste-physics]: https://maddythorson.medium.com/celeste-and-towerfall-physics-d24bd2ae0fc5 +[miniquad]: https://github.com/not-fl3/miniquad +[macroquad]: https://github.com/not-fl3/macroquad +[particles-web]: https://fedorgames.itch.io/macroquad-particles +[particles-source]: https://github.com/not-fl3/particles-editor +[profiling-blog]: https://not-fl3.github.io/platformer-book/profiling.html + +### [rg3d] + +{{ image_figure( + alt="rusty-editor screenshot" + src="rusty-editor.jpg" + caption="A level made in [rusty-editor](https://github.com/mrDIMAS/rusty-editor) which is a native scene editor +for the rg3d game engine.", + link="https://twitter.com/DmitryNStepanov/status/1336802725007396865") }} + +[rg3d] is a game engine that aims to be easy to use and provide large set +of out-of-box features. Some of the recent updates: + +- Improved [dark UI theme][rg3d_dark_theme]. +- Added verbosity levels for logger. +- Improved lightmap quality. +- Added proper syncing between physics and scene graph. +- Improved examples. +- Added cylinder emitter for particle systems. +- Improved lots of UI widgets and added VectorImage widget. +- rg3d-sound is now able to manage multiple contexts. +- [hrtf][hrtf] crate now has 2 times better performance. +- Added support for 64-bit FBX format (version 7500+). +- rusty-editor now has [navigation meshes][rusty_editor_navmesh] and + particle systems editor. +- Lots of other small fixes and improvements. + +Join the [rg3d's Discord channel][rg3d_discord] +or follow [Dmitry Stepanov on Twitter][rg3d_twitter]. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_twit]: https://twitter.com/DmitryNStepanov/status/1336802725007396865 +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rusty_editor_navmesh]: https://twitter.com/DmitryNStepanov/status/1343288956704743425 +[rg3d_dark_theme]: https://twitter.com/DmitryNStepanov/status/1340755066068889603 +[rusty_editor]: https://github.com/mrDIMAS/rusty-editor +[hrtf]: https://github.com/mrDIMAS/hrtf + +### [starframe] + +![Current state of starframe graphics and physics](starframe.gif) + +[starframe] by [@molentum] is a work-in-progress game engine +for physics-y sidescrolling 2D games. This month, a new, more versatile +constraint solver was used to add friction and basic joints. Collision +detection accuracy and overall stability were also improved. + +_Discussions: +[twitter](https://twitter.com/molentum_/status/1338066680724008960)_ + +[starframe]: https://github.com/m0lentum/starframe +[@molentum]: https://twitter.com/molentum_ + +### [Dotrix] + +[![Dotrix in December](dotrix-in-december.gif)][dotrix-video] + +Last month [Dotrix] got a major feature boost that made the engine ready for +3D games development. To demonstrate the features, the [demo example][dotrix-demo] +was turned into an all-in-one proof-of-concept application. +You can see the full version on [YouTube][dotrix-video]. + +In less than 300 lines of Rust code (including comments) you can get a game +prototype with an animated character, that you can control using your keyboard +and mouse, run it across some flat terrain, surrounded by a skybox with a +light source. + +Join the [Löwenware's Discord channel][lowenware-discord] +or follow [@lowenware on Twitter][@lowenware]. + +[dotrix]: https://github.com/lowenware/dotrix +[lowenware-discord]: https://discord.com/invite/DrzwBysNRd +[@lowenware]: https://twitter.com/lowenware +[dotrix-demo]: https://github.com/lowenware/dotrix/blob/main/examples/demo/demo.rs +[dotrix-video]: https://youtu.be/KXOr_KxMNWM + +### [Bevy Engine v0.4][bevy-0-4] + +[![bevy logo](bevy_logo.png)][bevy] + +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. +It is [free and open source][bevy-repo] forever! + +This month, thanks to 66 contributors, 178 pull requests, and their +[generous sponsors][bevy-sponsors], Bevy 0.4 was released. You can view the +[full Bevy 0.4 announcement here][bevy-0-4]. Here are some highlights: + +- A WebGL2 render backend. +- Cross platform main function: `#[bevy_main]`. +- Live shader reloading. +- Schedule v2 with custom stages, run criteria, fixed timestep, + and typed stage builders. +- States that allow you to enable/disable systems + according to the state your app is in. +- Scenes can now be spawned as children. +- Dynamic linking that significantly cuts compile times. +- A new general-purpose Rust reflection API. +- 3D texture assets. +- HIDPI fixes. +- GLTF, timer, text layout, task system, logging & profiling improvements. +- ECS improvements: flexible system parameters, improved query filter API, + and system inputs/outputs/chaining. +- Apple Silicon support! + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/kge7zy/bevy_04/), +[hacker news](https://news.ycombinator.com/item?id=25480321), +[Twitter](https://twitter.com/cart_cart/status/1340376850560905218)_ + +[bevy]: https://bevyengine.org +[bevy-repo]: https://github.com/bevyengine/bevy +[bevy-0-4]: https://bevyengine.org/news/bevy-0-4 +[bevy-sponsors]: https://github.com/sponsors/cart + +------ + +Community plugin updates: + +- [bevy_webgl2](https://github.com/mrk-its/bevy_webgl2): + WebGL2 renderer plugin for WASM target. +- [bevy_rapier](https://github.com/dimforge/bevy_rapier): + Rapier Physics' official Bevy plugin was updated to support Bevy 0.4. +- [bevy_megaui](https://github.com/mvlabat/bevy_megaui): A plugin for + [megaui](https://crates.io/crates/megaui) integration into Bevy. +- [bevy_prototype_inline_assets](https://crates.io/crates/bevy_prototype_inline_assets): + A simple plugin for bundling assets into your binary. +- [bevy_doryen](https://github.com/smokku/bevy_doryen): A plugin integrating Bevy + ECS with [doryen-rs](https://github.com/jice-nospam/doryen-rs) Ascii + roguelike library. +- [bevy_discovery](https://crates.io/crates/bevy_discovery): Automatically detects + and registers systems for you. +- [bevy_prototype_parallax](https://github.com/btrepp/bevy-prototype-parallax): + A parallax scrolling background plugin. +- [Kurinji](https://crates.io/crates/kurinji): Input Map for bevy. Converts user + input from different input hardware into game specific actions, eg. keyboard + "Space" or joystick "A" can be mapped to "Jump" Action. This allows decoupling + of the game code from device specific input api. +- [bevy-earcutr](https://github.com/frewsxcv/bevy-earcutr): Draw polygons. +- [bevy_stl](https://github.com/nilclass/bevy_stl): STL mesh asset loader plugin. + +Community tutorial updates: + +- [Making Chess Clone in 3D](https://caballerocoll.com/blog/bevy-chess-tutorial): + Walkthrough on how to make a Chess Clone with 3D pieces. +- [0.3 to 0.4 Migration Guide](https://sburris.xyz/posts/bevy-update-0-4/). +- [Bevy Chinese Website(Bevy中文网)](https://bevyengine-cn.github.io/): Translate + official website and The Bevy Book in Chinese. + +Community game updates: + +- [Robbo](https://github.com/mrk-its/bevy-robbo): + Bevy port of great 8-bit Atari game, working native and in the browser. +- [SiO2](https://github.com/dmitriy-shmilo/sio2): A simple powder toy clone. +- [snake_bevy](https://github.com/mtKeller/snake_bevy): It's Snake! +- [DJMcNab/life-rs](https://github.com/DJMcNab/life-rs): Bevy reproduction of the + rules of [Conway's Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) + on a randomised board. Alternative implementation: [Byteron/life-rs](https://github.com/Byteron/life-rs). + +Join Bevy's [Discord][bevy-discord], [/r/bevy subreddit][bevy-reddit], +and follow [@BevyEngine on Twitter][bevy-twitter]. + +[bevy-discord]: https://discord.com/invite/gMUk5Ph +[bevy-reddit]: https://reddit.com/r/bevy +[bevy-twitter]: https://twitter.com/BevyEngine + +### [rpt]: Rust Path Tracer + +{{ image_figure( + alt="demo renders" + src="rpt-collage.jpg" + caption="Sample images rendered by path tracing.") }} + +[rpt] by [@ekzhang] and [@scanhex] is a physically based, CPU-only rendering +engine written in Rust. It uses path tracing to generate realistic images of 3D +scenes. + +There's a lot of features, including kd-tree mesh acceleration, physical +material properties (microfacet BSDF with multiple importance sampling), HDRI +environment maps, OBJ/MTL/STL files, depth of field, and particle physics +simulation. + +It's also parallelized with [rayon] and available as a library on [crates.io]. +The entire source code, including code for the above examples and more, is very +short (~3K SLOC). Future directions include extending the renderer with +bidirectional path tracing and other features. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/k81wwi/rpt_v01)_ + +[rpt]: https://github.com/ekzhang/rpt +[@ekzhang]: https://www.ekzhang.com/ +[@scanhex]: https://github.com/scanhex +[rayon]: https://github.com/rayon-rs/rayon +[crates.io]: https://crates.io/ + +### [Textyle] + +![Screenshot with a simple settlement map](textyle.png) + +[Textyle] by [Stefan Devai][@stefandevai] is a simple web-based tilemap editor +for 2D games built using React JS and Rust (WASM). + +You can try it out now [in the browser][textyle-browser]. + +Textyle aims to simplify and speed up the process of making tilemaps for your +games. Running on the web means that you don't have to download any additional +tools for creating your maps, and exporting it to an easy format means that you +don't have to add additional libraries or plugins to your game. + +React JS was used for the UI, WebGL for the rendering and Rust compiled to WASM +for the tilemap logic and algorithms. Right now most of the code is JavaScript, +however, most of the features in the roadmap will take advantage of Rust and +WASM. The project is in its initial stages of development, expect great +improvements to come! + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/khl8jq/textyle)_ + +[Textyle]: https://github.com/stefandevai/textyle +[textyle-browser]: https://textyle.app/edit +[@stefandevai]: https://github.com/stefandevai + +### [Rust Graphics Playground][rust-graphics-playground] + +[![Rust Graphics Playground Demo](rust-graphics-playground.gif)][rust-graphics-playground] + +The [Rust Graphics Playground][rust-graphics-playground] is a small tool that +allows you to create and share miniature graphics demos in Rust that will run +in the browser. Here are a few examples of what you can make: + +- [3D Spinning Triangle][spinning-triangle] +- [3D Spinning Cube][spinning-cube] +- [Serpinski Triangle][serpinski-triangle] +- [Serpinski Carpet][serpinski-carpet] + +The [source code][graphics-playground-source] is available online. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/kk6i38/write_mini_graphics_demos_in_rust_in_the_browser)_ + +[rust-graphics-playground]: http://playground.meteorlinker.com +[spinning-triangle]: http://playground.meteorlinker.com/?share=1 +[spinning-cube]: http://playground.meteorlinker.com/?share=864 +[serpinski-triangle]: http://playground.meteorlinker.com/?share=682 +[serpinski-carpet]: http://playground.meteorlinker.com/?share=1054 +[graphics-playground-source]: https://gitlab.com/DixieDev/rust-graphics-playground + +## Popular Workgroup Issues in GitHub + + + +- [rust-gamedev/rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): + - [#406 "Separate category for engines vs libraries/tools"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/406); +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#18 "Set up a gamedev usergroup on users.rust-lang.org"](https://github.com/rust-gamedev/wg/issues/18); + - [#23 "A pure rust SPIRV generator"](https://github.com/rust-gamedev/wg/issues/23); + - [#94 "raw-window-handle maintenance"](https://github.com/rust-gamedev/wg/issues/94); + - [#97 "WG brand update proposal"](https://github.com/rust-gamedev/wg/issues/97); + - [#98 "Monthly Rust Gamedev Meetup"](https://github.com/rust-gamedev/wg/issues/98); + - [#99 "Official Rust Gamedev Discord"](https://github.com/rust-gamedev/wg/issues/99); + +## Requests for Contribution + + + +- [winit is seeking new maintainers][winit-call]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [gfx-rs's "contributor-friendly" issues][gfx-issues]. +- [wgpu's "help wanted" issues][wgpu-help-wanted]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [Amethyst's "good first issue" issues][amethyst-issues]. +- [A/B Street's "good first issue" issues][abstreet-issues]. +- [Mun's "good first issue" issues][mun-issues]. +- [SIMple Mechanic's good first issues][simm-issues]. +- [Bevy's "good first issue" issues][bevy-issues]. + +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly +[wgpu-help-wanted]: https://github.com/gfx-rs/wgpu-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/dabreegster/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue +[winit-call]: https://github.com/rust-windowing/winit/issues/1777 + +------ + +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! + +**Discussions of this post**: +[/r/rust](https://reddit.com/r/rust/comments/kxd8kt/this_month_in_rust_gamedev_17), +[Twitter](https://twitter.com/rust_gamedev/status/1349805081378611205). + +[/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/017/macroquad-profiling.gif b/content/news/017/macroquad-profiling.gif new file mode 100644 index 000000000..23bfae677 Binary files /dev/null and b/content/news/017/macroquad-profiling.gif differ diff --git a/content/news/017/meetup.png b/content/news/017/meetup.png new file mode 100644 index 000000000..5ff325df6 Binary files /dev/null and b/content/news/017/meetup.png differ diff --git a/content/news/017/mun-logo.png b/content/news/017/mun-logo.png new file mode 100644 index 000000000..02295dc77 Binary files /dev/null and b/content/news/017/mun-logo.png differ diff --git a/content/news/017/nannou_creative_coding.jpg b/content/news/017/nannou_creative_coding.jpg new file mode 100644 index 000000000..346247ef4 Binary files /dev/null and b/content/news/017/nannou_creative_coding.jpg differ diff --git a/content/news/017/openEtG.jpg b/content/news/017/openEtG.jpg new file mode 100644 index 000000000..b87da9277 Binary files /dev/null and b/content/news/017/openEtG.jpg differ diff --git a/content/news/017/pikachu0.png b/content/news/017/pikachu0.png new file mode 100644 index 000000000..8e9bc064c Binary files /dev/null and b/content/news/017/pikachu0.png differ diff --git a/content/news/017/podcast.jpeg b/content/news/017/podcast.jpeg new file mode 100644 index 000000000..0e3134937 Binary files /dev/null and b/content/news/017/podcast.jpeg differ diff --git a/content/news/017/polyhedron.jpg b/content/news/017/polyhedron.jpg new file mode 100644 index 000000000..fdfab4e48 Binary files /dev/null and b/content/news/017/polyhedron.jpg differ diff --git a/content/news/017/retro_screensaver.jpg b/content/news/017/retro_screensaver.jpg new file mode 100644 index 000000000..8165feec9 Binary files /dev/null and b/content/news/017/retro_screensaver.jpg differ diff --git a/content/news/017/rpt-collage.jpg b/content/news/017/rpt-collage.jpg new file mode 100644 index 000000000..0bc64c3a5 Binary files /dev/null and b/content/news/017/rpt-collage.jpg differ diff --git a/content/news/017/rust-gpu-shaders.jpeg b/content/news/017/rust-gpu-shaders.jpeg new file mode 100644 index 000000000..d91be378b Binary files /dev/null and b/content/news/017/rust-gpu-shaders.jpeg differ diff --git a/content/news/017/rust-graphics-playground.gif b/content/news/017/rust-graphics-playground.gif new file mode 100644 index 000000000..7f690262b Binary files /dev/null and b/content/news/017/rust-graphics-playground.gif differ diff --git a/content/news/017/rusty-editor.jpg b/content/news/017/rusty-editor.jpg new file mode 100644 index 000000000..7256ff55a Binary files /dev/null and b/content/news/017/rusty-editor.jpg differ diff --git a/content/news/017/santa.png b/content/news/017/santa.png new file mode 100644 index 000000000..162f9f6f5 Binary files /dev/null and b/content/news/017/santa.png differ diff --git a/content/news/017/shotcaller-2guis.png b/content/news/017/shotcaller-2guis.png new file mode 100644 index 000000000..a970ca190 Binary files /dev/null and b/content/news/017/shotcaller-2guis.png differ diff --git a/content/news/017/starframe.gif b/content/news/017/starframe.gif new file mode 100755 index 000000000..817111c3a Binary files /dev/null and b/content/news/017/starframe.gif differ diff --git a/content/news/017/swoop.gif b/content/news/017/swoop.gif new file mode 100644 index 000000000..9b2767a3d Binary files /dev/null and b/content/news/017/swoop.gif differ diff --git a/content/news/017/textyle.png b/content/news/017/textyle.png new file mode 100644 index 000000000..2850f205f Binary files /dev/null and b/content/news/017/textyle.png differ diff --git a/content/news/017/veloren-glider.gif b/content/news/017/veloren-glider.gif new file mode 100644 index 000000000..c927693d9 Binary files /dev/null and b/content/news/017/veloren-glider.gif differ diff --git a/content/news/017/veloren1.jpg b/content/news/017/veloren1.jpg new file mode 100644 index 000000000..1ba65567d Binary files /dev/null and b/content/news/017/veloren1.jpg differ diff --git a/content/news/017/vollmond-preview.png b/content/news/017/vollmond-preview.png new file mode 100644 index 000000000..1a36dc982 Binary files /dev/null and b/content/news/017/vollmond-preview.png differ diff --git a/content/news/017/wasm_sprite_transform.svg b/content/news/017/wasm_sprite_transform.svg new file mode 100644 index 000000000..71be0bb62 --- /dev/null +++ b/content/news/017/wasm_sprite_transform.svg @@ -0,0 +1,225 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/posts/newsletter-017/way-of-rhea.gif b/content/news/017/way-of-rhea.gif similarity index 100% rename from content/posts/newsletter-017/way-of-rhea.gif rename to content/news/017/way-of-rhea.gif diff --git a/content/news/017/weegames.jpg b/content/news/017/weegames.jpg new file mode 100644 index 000000000..204cd441f Binary files /dev/null and b/content/news/017/weegames.jpg differ diff --git a/content/news/018/3.png b/content/news/018/3.png new file mode 100644 index 000000000..94ee6de45 Binary files /dev/null and b/content/news/018/3.png differ diff --git a/content/news/018/abstreet.gif b/content/news/018/abstreet.gif new file mode 100644 index 000000000..9eea4c172 Binary files /dev/null and b/content/news/018/abstreet.gif differ diff --git a/content/news/018/antorum-2-1-2021.jpg b/content/news/018/antorum-2-1-2021.jpg new file mode 100644 index 000000000..38ecdabe2 Binary files /dev/null and b/content/news/018/antorum-2-1-2021.jpg differ diff --git a/content/news/018/bevy_egui.png b/content/news/018/bevy_egui.png new file mode 100644 index 000000000..d02bcc918 Binary files /dev/null and b/content/news/018/bevy_egui.png differ diff --git a/content/news/018/bevy_ldtk.jpg b/content/news/018/bevy_ldtk.jpg new file mode 100644 index 000000000..15675dcbc Binary files /dev/null and b/content/news/018/bevy_ldtk.jpg differ diff --git a/content/news/018/bounty-bros.jpg b/content/news/018/bounty-bros.jpg new file mode 100644 index 000000000..7304ab46f Binary files /dev/null and b/content/news/018/bounty-bros.jpg differ diff --git a/content/news/018/chess.png b/content/news/018/chess.png new file mode 100644 index 000000000..a18573578 Binary files /dev/null and b/content/news/018/chess.png differ diff --git a/content/news/018/dcliah.png b/content/news/018/dcliah.png new file mode 100644 index 000000000..c0868efab Binary files /dev/null and b/content/news/018/dcliah.png differ diff --git a/content/news/018/dimforge.png b/content/news/018/dimforge.png new file mode 100644 index 000000000..ec0305045 Binary files /dev/null and b/content/news/018/dimforge.png differ diff --git a/content/news/018/dotrix-in-january.png b/content/news/018/dotrix-in-january.png new file mode 100644 index 000000000..020b3a466 Binary files /dev/null and b/content/news/018/dotrix-in-january.png differ diff --git a/content/news/018/dwarfworld_lights.gif b/content/news/018/dwarfworld_lights.gif new file mode 100644 index 000000000..f0ef7c3d5 Binary files /dev/null and b/content/news/018/dwarfworld_lights.gif differ diff --git a/content/news/018/egui_0.8.0.gif b/content/news/018/egui_0.8.0.gif new file mode 100644 index 000000000..8ee7d0b83 Binary files /dev/null and b/content/news/018/egui_0.8.0.gif differ diff --git a/content/news/018/fishgame.gif b/content/news/018/fishgame.gif new file mode 100644 index 000000000..4f15a69ea Binary files /dev/null and b/content/news/018/fishgame.gif differ diff --git a/content/news/018/flesh.gif b/content/news/018/flesh.gif new file mode 100644 index 000000000..5df9fa9c5 Binary files /dev/null and b/content/news/018/flesh.gif differ diff --git a/content/news/018/gamedev-meetup.png b/content/news/018/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/018/gamedev-meetup.png differ diff --git a/content/news/018/glisp-logo.png b/content/news/018/glisp-logo.png new file mode 100644 index 000000000..776c8d9c5 Binary files /dev/null and b/content/news/018/glisp-logo.png differ diff --git a/content/news/018/hands-on-rust.jpg b/content/news/018/hands-on-rust.jpg new file mode 100644 index 000000000..8e7e43ae5 Binary files /dev/null and b/content/news/018/hands-on-rust.jpg differ diff --git a/content/news/018/harvest_hero.png b/content/news/018/harvest_hero.png new file mode 100644 index 000000000..fea02ad7f Binary files /dev/null and b/content/news/018/harvest_hero.png differ diff --git a/content/news/018/imgui-rs.gif b/content/news/018/imgui-rs.gif new file mode 100644 index 000000000..d9f6d80e9 Binary files /dev/null and b/content/news/018/imgui-rs.gif differ diff --git a/content/news/018/index.md b/content/news/018/index.md new file mode 100644 index 000000000..bb8243516 --- /dev/null +++ b/content/news/018/index.md @@ -0,0 +1,1026 @@ ++++ +title = "This Month in Rust GameDev #18 - January 2021" +date = 2021-02-06 +transparent = true +aliases = ["posts/newsletter-018"] ++++ + +Welcome to the 18th 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 + +Table of contents: + +- [Rust GameDev Podcast](#rust-gamedev-podcast-5) +- [Rust GameDev Meetup](#rust-gamedev-meetup) +- [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) +- [Requests for Contribution](#requests-for-contribution) + + + +## [Rust GameDev Podcast \#5][podcast-5] + +![text logo](podcast.jpeg) + +[The 5th podcast episode][podcast-5] is an interview with +[Alex Ene][@_AlexEne_] creator of an upcoming dwarven simulation +game, [Dwarf World][dwarf-world]. + +> In this week's episode, Richard and Forest chat to Alex Ene, +> creator of the dwarven simulation game, Dwarf World. +> We cover writing custom engines, unit testing, build +> systems, and picking the right frameworks for your game. + +Listen and subscribe from the following platforms: +[Rust GameDev Podcast (simplecast)](https://rustgamedev.com/), +[Apple Podcasts](https://podcasts.apple.com/gb/podcast/rust-game-dev/id1526304768), +[Spotify](https://open.spotify.com/show/7HRfGnTcXkLkQd9fxJbDGj), +[RSS Feed](https://feeds.simplecast.com/C6NQglnL), +[Google Podcasts](https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9DNk5RZ2xuTA). + +[podcast-5]: https://rustgamedev.com/episodes/interview-with-alex-ene +[@_AlexEne_]: https://twitter.com/_AlexEne_ +[dwarf-world]: https://dwarf.world + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The first iteration of the Rust Gamedev Meetup happened in January. It was an +opportunity for developers to show of what Rust projects they've been working on +in the game ecosystem. Developers showed off physics engines, custom build +tools, renderers, and more. You can watch the recording of the meetup [here on +Youtube][gamedev-meetup-video]. + +The next meetup will take place 13th of February +at 16:00 GMT on the [Rust Gamedev Discord server][rust-gamedev-discord], and can +also be [streamed on Twitch][rust-gamedev-twitch]. + +[gamedev-meetup-video]: https://www.youtube.com/watch?v=2L3w3UiEzAk +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://www.twitch.tv/rustgamedev + +## Game Updates + +### [Teki (敵)][teki] + +![teki preview](teki.gif) + +[Teki][teki] is a free and open-source fangame of the [Tōhō] series +using [SDL2] and [Legion] for ECS. Thanks to WebAssembly - via [wasm-pack] +\-, teki can be played [online][teki-online]. + +It is aimed to be a shoot ’em up game with "lots of bullets" +a.k.a danmaku 弾幕 - literally "barrage" or "bullet curtain" in japanese. + +The project is still at a “very” early stage of development (Dec. 2020). + +[teki]: https://github.com/o2sh/teki +[teki-online]: https://o2sh.github.io/teki +[Tōhō]: https://en.wikipedia.org/wiki/Touhou_Project +[SDL2]: https://github.com/Rust-SDL2/rust-sdl2 +[Legion]: https://crates.io/crates/legion +[wasm-pack]: https://rustwasm.github.io/wasm-pack + +### [Fishgame][fishgame] + +{{ image_figure( + alt="Fishgame gameplay" + src="fishgame.gif" + caption="Fish game gameplay footage.") }} + +[Fishgame][fishgame] is an online multiplayer game, created in a +collaboration between [Nakama][nakama], an open-source scalable game +server, and the [Macroquad](https://github.com/not-fl3/macroquad/) game engine. + +The game is going to showcase nakama multiplayer capabilities for the rust +language world. + +This month the game got a public, multiplayer HTML5 build. [Play it online!][fishgame-itch] + +[fishgame]: https://github.com/heroiclabs/fishgame-macroquad +[fishgame-itch]: https://fedorgames.itch.io/fish-game?secret=UAVcggHn332a +[nakama]: https://heroiclabs.com/ +[macroquad]: https://github.com/not-fl3/macroquad + +### [Station Iapetus] + +{{ image_figure( + alt="Station Iapetus Youtube" + src="station-iapetus-youtube.JPG" + caption="Check [gameplay video](https://www.youtube.com/watch?v=JCH2U5JOMlU) on YouTube", + link="https://www.youtube.com/watch?v=JCH2U5JOMlU") }} + +[Station Iapetus][Station Iapetus] by [@mrDIMAS] +is a 3rd person shooter on the space prison Iapetus near the Saturn. + +The game is based on the [rg3d] game engine and is meant to be the proof that +rg3d is ready for commercial production. The game is a commercial project +which will be released in Steam. + +[@mrDIMAS]: https://github.com/mrDIMAS +[rg3d]: https://github.com/mrDIMAS/rg3d +[Station Iapetus]: https://github.com/mrDIMAS/StationIapetus +[si-youtube]: https://www.youtube.com/watch?v=JCH2U5JOMlU + +### [SeniorSKY] + +{{ image_figure( + alt="SeniorSKY" + src="3.png" + caption="Over the mountains in Slovakia") }} + +[SeniorSKY] +is a flight simulator which uses Vulkan API, developed by [@pmathia0]. +As an aerospace engineering student, Peter has always been interested how +a flight simulator works under the hood. +The development of SeniorSKY started as a hobby project during university +studies. + +SeniorSKY uses real-world elevation data with 1 arc +second precision and can render the whole globe in real dimensions. +During the flight, the terrain tiles are loaded dynamically based +on real GPS coordinates of airplane, with a decreasing level of detail +further from the camera. This is achieved using a combination +of a terrain-quad-tree and GPU tessellation. + +SeniorSKY also implements basic rendering of sky, atmosphere and fog. + +To be able to simulate a flight, the application temporarily integrates 3rd party +flight dynamics engine called JSBSim. Meanwhile, development of own, custom +flight dynamics is already in progress. + +[SeniorSKY]: https://youtube.com/playlist?list=PLMmaJuk-D7iaObZyhyvc83tNwpx3ghzkY +[@pmathia0]: https://twitter.com/pmathia0 + +### [Oicana][oicana] + +{{ image_figure( + alt="oicana game play" + src="oicana.png" + caption="Solving puzzles to build towers") }} + +[Oicana][oicana] is a tower defense game with puzzle aspects submitted to Mini +jam 71 [on itch][oicana-itch] by [M1nd0fRafa3l][rafael-itch] and +[@nikl_me][nikl-twitter]. The game was written using the Rust game engine +[Bevy][bevy]. + +Colorless puzzle pieces try to reach your base. Your towers have to shoot at +the pieces to uncover their color. After defeating a piece, it will try to run +away and you should catch it to upgrade your towers or build new ones. + +Following the game jam the tower upgrades where improved and game audio was +changed to use [Kira][kira-sound] via an +[experimental bevy plugin][kira-plugin]. + +[oicana]: https://github.com/NiklasEi/oicana +[oicana-itch]: https://niklme.itch.io/oicana +[bevy]: https://bevyengine.org/ +[kira-sound]: https://github.com/tesselode/kira +[kira-plugin]: https://github.com/NiklasEi/bevy_kira_audio +[rafael-itch]: https://itch.io/profile/m1nd0frafa3l +[nikl-twitter]: https://twitter.com/nikl_me + +### [Bounty Bros.][bounty-bros] + +{{ image_figure( + alt="Bounty Bros. Video" + src="bounty-bros.jpg" + caption="First pass character controller video", + link="https://katharostech.com/post/bounty-bros-prototype-game#video") }} +[Bounty Bros.][bounty-bros] is a prototype dungeon crawler game +in the spirit of "Legend of Zelda: Link to the Past". +The game is being developed by [Katharos Technology] as a playground +for a future commercial game, along with a custom 2D engine +built on top of [Bevy]. + +The engine, which is unnamed so far, will be Open Sourced soon and will be +designed to make it very easy to make games with a similar gameplay and style, +primarily by simply writing YAML configuration files and integrating with +[LDtk]. + +[katharos technology]: https://katharostech.com +[bounty-bros]: https://katharostech.com/post/bounty-bros-prototype-game +[bounty_bros_video]: https://katharostech.com/post/bounty-bros-prototype-game#video +[Bevy]: https://bevyengine.org +[LDtk]: https://ldtk.io + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="flesh.gif" + caption="Inside flesh") }} + +Flesh by [@im_oab] is a 2D-horizontal shmup game with hand-drawn animation +and implement using tetra. It still in the development stage but have +a release date set in October 2021. + +This game takes place inside the flesh of mysterious organisms that players will +fight through multiple levels to get out. + +[@im_oab]: https://twitter.com/im_oab + +### [A/B Street] + +![A/B Street in Cambridge](abstreet.gif) + +[A/B Street] by [@dabreegster] is a traffic simulation game exploring how small +changes to roads affect cyclists, transit users, pedestrians, and drivers, with +suppot for any city with OpenStreetMap coverage. + +In January, [Bruce] implemented variable traffic signal timing, dedicated +cycle-paths and pedestrian plazas were imported, [Michael] and [Yuwen] +overhauled the UI buttons, and we finished day/night toggling. Loading on the +[web][abst-web] and starting scenarios is also much faster! + +[A/B Street]: https://github.com/a-b-street/abstreet +[@dabreegster]: https://twitter.com/CarlinoDustin +[Bruce]: https://github.com/BruceBrown +[Michael]: https://github.com/michaelkirk +[Yuwen]: https://www.yuwen-li.com/ +[abst-web]: http://abstreet.s3-website.us-east-2.amazonaws.com/dev/game/?--dev&cambridge/maps/great_kneighton.bin + +### Paddlers + +![A happy duck and sign showing: Paddlers version 0.2.0](paddlers_v0.2.jpeg) + +[Paddlers] ([GitHub][paddlers-gh], [Online Demo][paddlers-demo]) by [@jakmeier] +is an MMORTS for the browser, developed as an experimental hobby project. + +This month, version 0.2.0 has been released, which removes all dependencies to +[Stdweb] and [Quicksilver] while keeping the game itself virtually unchanged. +In the process, a part of the code of Paddlers moved to [Paddle], a new +framework for 2D browser games running on desktop and mobile phones. +More details on that are available [here][paddlers-article]. + +Many new features for Paddle and Paddlers are already in the pipeline, so stay +tuned for more exciting updates in the next monthly newsletter! + +[Paddlers]: https://paddlers.ch +[paddlers-gh]: https://github.com/jakmeier/paddlers-browser-game +[paddlers-demo]: https://demo.paddlers.ch +[@jakmeier]: https://github.com/jakmeier +[stdweb]: https://github.com/koute/stdweb +[Quicksilver]: https://github.com/ryanisaacg/quicksilver +[paddle]: https://github.com/jakmeier/paddle +[paddlers-article]: https://www.jakobmeier.ch/blogging/Paddlers_5.html + +### [Antorum] + +{{ image_figure( + alt="Some players hanging out next to the bank Vault in Belmart" + src="antorum-2-1-2021.jpg" + caption="Hanging out by the vault") }} + +[Antorum] 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. + +Banking was implemented this month! Players can now store their items and wealth +in a safe place. Additionally, the concept of "item combinations" was implemented, +bringing more interesting crafting scenarios into the game. + +- [#28: Banking](https://ratwizard.dev/dev-log/antorum/28); +- [#29: Item Combinations](https://ratwizard.dev/dev-log/antorum/29); + +[Antorum]: https://ratwizard.dev/dev-log/antorum +[@dooskington]: https://twitter.com/dooskington + +### Harvest Hero + +![Harvest Hero Screenshot](harvest_hero.png) + +Harvest Hero ([Discord][harvest-hero-discord]) by [@bombfuse_dev] +is an arcade/roguelike game built on top of [Emerald]. +This month's updates include: + +- Art update thanks to [@ddooby]. +- Map templates for better designed maps. +- A shop system for buying abilities/enchantments. +- SFX were added to bring some more life to the game. + +[harvest-hero-discord]: https://discord.gg/3NU5tYwRxJ +[@bombfuse_dev]: https://twitter.com/bombfuse_dev +[Emerald]: https://github.com/Bombfuse/emerald +[@ddooby]: https://twitter.com/ddoobysnax + +### [Dwarf World][dwarf-world] + +![Dwarf World](dwarfworld_lights.gif) + +[Dwarf World][dwarf-world] ([Discord][dwarf-world-discord]) +by [Alex Ene][@_AlexEne_] has added a couple of updates and improvements: + +- Dynamic lights and light propagation so deeper caves are darker. +- An in-game feedback button that people can use to report bugs or +just give general feedback. +- All random numbers are from seeded generators so it makes bugs easier +to reproduce. +- A big chunk of a replay system is finished. +This should help a lot with reproducing issues. Plus, it's really fun to watch. +- Bug fixes and performance improvements, mostly related to +rendering and culling systems. + +If you're interested in keeping a closer eye on the project and monitor +it's progress, +you can join the game's [discord channel][dwarf-world-discord]. +That's where the pre-alpha builds will drop there once they are +ready to be seen by a wider audience. + +[dwarf-world-discord]: https://discord.gg/vsRCxnY + +### Stellary 2 + +![Stellary 2 Banner](stellary_2_banner.jpg) + +Stellary 2 by [@CoffeJunkStudio][coffe-junk-studio] is a 3D +real-time artillery game in which the player has to destroy all enemy planets in +order to defend his own from extinction. + +Based on the [SimJam 2020][simjam-2020] game +"[Stellary][stellary]", the studio is now +working on this sequel with their self-developed "Sphere Engine". It will +feature an underlying physically based gravity simulation, powering the space +battles in different solar systems. You can find regular updates on +[Twitter][coffe-junk-studio]. + +By the way: "Stellary 2" is just a working title, feel free to drop them a PM on +Twitter if you have a flash of inspiration! + +[coffe-junk-studio]: https://twitter.com/CoffeJunkStudio +[simjam-2020]: https://itch.io/jam/dogpit-sim-jam +[stellary]: https://coffejunkstudio.itch.io/stellary + +### [Theta Wave] + +{{ image_figure( + alt="Homing Missiles" + src="theta_wave_homing_missiles.gif" + caption="Homing missiles pursue the closest player entity", + link="https://github.com/amethyst/theta-wave") }} + + A real name was finally chosen for space_shooter_rs! [Theta Wave] is a 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 have + been focused on improving the motion system for the game. The improvements + allowed them to begin adding more interesting behavior for moving entities. + Missiles were changed to home to the player. + +[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/ + +### [Way of Rhea][wor-site] + +![Way of Rhea screenshot](wor.jpg) + +Way of Rhea is a picturesque puzzle game that lets you correct your mistakes. +Change your color, teleport past the colored gates, master the color powered +circuits, and befriend the color changing crabs-but don't let them out! + +This month's major updates include: + +- Autosave support. +- Steam cloud support. +- A free demo was released as part of Boston FIG (no longer available). +- In game audio options. +- A new level featuring a new puzzle mechanic. +- An [updated trailer][wor-trailer]. + +[wor-site]: https://www.anthropicstudios.com/way-of-rhea +[wor-trailer]: https://www.youtube.com/watch?v=PRifdHcaswc + +### [Veloren][veloren] + +{{ image_figure( + alt="Veloren Snow" + src="veloren-snow.gif" + caption="Let it snow!") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In January, lots of work was done on new models that make the world feel more +alive. Work was done on economic simulation, and many of the blog posts +highlight this progress. This includes trading between sites, and professions. +Skill trees were completed, and are now in the game. + +Large changes are being implemented to the CI system to reduce build times. Work +has been ongoing on improving the Veloren wiki, with many contributors adding to +it. In February, a meeting will be held to discuss the 0.9 release, with does +not yet have a release date. + +January's full weekly devlogs: "This Week In Veloren...": +[#101](https://veloren.net/devblog-101), +[#102](https://veloren.net/devblog-102), +[#103](https://veloren.net/devblog-103), +[#104](https://veloren.net/devblog-104). + +[veloren]: https://veloren.net + +### [Shotcaller] + +{{ image_figure( + alt="Custom art assets for Shotcaller" + src="shotcaller-full.png" + caption="An art mockup of some Shotcaller action.") }} + +[Shotcaller] ([Discord][shotcaller-Discord]) is a minimalistic MOBA +that focuses strictly on macro-play with few actions-per-minute, +leaving only room for grand strategy decisions. +The game is made with [bracket-lib], a [custom game engine][jojolepro/minigene] +and [Plank ECS][planks_ecs]. + +Recent updates include: + +- [Version v0.4.0 was released][shotcaller-v0.4.0]. +- First batch of custom art assets completed; will be implemented + in the month to come. +- New leaders: + [Alchemist](https://github.com/amethyst/shotcaller/pull/29), + [Axe](https://github.com/amethyst/shotcaller/pull/30), + [Rubick](https://github.com/amethyst/shotcaller/pull/34), + [Centaur](https://github.com/amethyst/shotcaller/pull/36), + [Bristleback](https://github.com/amethyst/shotcaller/pull/40), + [Shadow Fiend](https://github.com/amethyst/shotcaller/pull/35). +- [Gold system](https://github.com/amethyst/shotcaller/pull/31). +- [Headless option](https://github.com/amethyst/shotcaller/pull/44) + (in preparation for AI/ML experimenting). +- [Fog of War](https://github.com/amethyst/shotcaller/pull/41). +- [Mouse support](https://github.com/amethyst/shotcaller/pull/46). + +[Shotcaller]: https://github.com/amethyst/shotcaller +[shotcaller-Discord]: https://discord.gg/qvJyTYM +[bracket-lib]: https://github.com/thebracket/bracket-lib +[jojolepro/minigene]: https://github.com/jojolepro/minigene +[planks_ecs]: https://www.jojolepro.com/blog/2021-01-13_planks_ecs +[shotcaller-v0.4.0]: https://reddit.com/r/rust_gamedev/comments/kveih9/shotcaller_mobagame_v040 + +### [Zemeroth][zemeroth] + +{{ image_figure( + alt="Some generic gameplay demo" + src="zemeroth.gif" + caption="Click to [watch a footage with sound](https://twitter.com/ozkriff/status/1341052260885942272) 🔊", + link="https://twitter.com/ozkriff/status/1341052260885942272") }} + +[Zemeroth][zemeroth] by [@ozkriff] is a minimalistic 2D turn-based tactical game. +Some of the recent updates: + +- The game [was migrated from good-web-game to macroquad][zemeroth-macroquad] + and converted to explicit async assets loading. +- Proper [sound effects & music were added][zemeroth-audio] + using the [quad-snd] library ([more details][zemeroth-audio-details]). + +The final preparations for v0.7 are wrapping up! + +[zemeroth]: https://github.com/ozkriff/zemeroth +[@ozkriff]: https://twitter.com/ozkriff +[zemeroth-macroquad]: https://twitter.com/ozkriff/status/1332031459985682436 +[zemeroth-audio]: https://twitter.com/ozkriff/status/1341052260885942272 +[zemeroth-audio-details]: https://twitter.com/ozkriff/status/1346422661187035136 +[quad-snd]: https://github.com/not-fl3/quad-snd + +## Learning Material Updates + +### [Hands-on Rust][hands-on-rust] + +[![book cover](hands-on-rust.jpg)][hands-on-rust] + +["Hands-on Rust: Effective Learning through 2D Game Development and Play"][hands-on-rust] +is a book by [Herbert Wolverson][thebracket] +(the author of [bracket-lib] and [the Rust Roguelike Tutorial][rl-book]): +make fun games as you learn Rust through a series of hands-on gamedev tutorials +and real-world use of core language skills. + +Recent [beta releases][beta-books] added the following chapters: + +- \#10: Fields of View; +- \#11: More Interesting Dungeons; +- \#12: Map Themes; +- \#13: Inventory and Power Ups; +- \#14: Deeper Dungeons; +- \#15: Combat Systems and Loot; +- \#16: Final Steps and Finishing Touches. + +[hands-on-rust]: https://pragprog.com/titles/hwrust/hands-on-rust +[thebracket]: https://bracketproductions.com +[beta-books]: https://pragprog.com/support/#beta-books +[bracket-lib]: https://github.com/thebracket/bracket-lib +[rl-book]: https://bfnightly.bracketproductions.com/rustbook + +### [Triangle from Scratch][tri-scratch] + +[Triangle from Scratch][tri-scratch] ([source code][tri-scratch-src]) +is a WIP tutorial series by [@Lokathor] about drawing a triangle +without using any outside crates. +Two extensive chapters were added this month: + +- ["Loading OpenGL with Win32 API"][tri-scratch-gl-win]; +- ["WebGL with bare WASM"][tri-scratch-gl-wasm]. + +[tri-scratch]: https://rust-tutorials.github.io/triangle-from-scratch +[tri-scratch-src]: https://github.com/rust-tutorials/triangle-from-scratch +[@Lokathor]: https://twitter.com/Lokathor +[tri-scratch-gl-win]: https://rust-tutorials.github.io/triangle-from-scratch/loading_opengl/win32.html +[tri-scratch-gl-wasm]: https://rust-tutorials.github.io/triangle-from-scratch/web_stuff/web_gl_with_bare_wasm.html + +### [Setting a Rust Executable's Icon in Windows][win-icon] + +{{ image_figure( + alt="Windows taskbar with Way of Rhea icon on the right" + src="win-icons-task-bar.png" + caption="[Way of Rhea](https://www.anthropicstudios.com/way-of-rhea)'s icon in the taskbar") }} + +[Anthropic Studios][anthropic] has [shared an article][win-icon] about +manually using `rc.exe` and embedding the resulting `.res` into your app +to set your game's system icon on Windows. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/kraink/setting_a_rust_executables_icon_in_win)_ + +[win-icon]: https://anthropicstudios.com/2021/01/05/setting-a-rust-windows-exe-icon +[anthropic]: https://anthropicstudios.com + +### [Exploring WebSocket with Rust and Tide] + +![tic-tac-tide img](tic-tac-tide.png) + +An exploration post on how to use WebSockets with [Tide] framework by creating +a simple tic-tac-toc game. It's focused on how to implement `ws` to enable all +time of real time apps (and games) with Rust and Tide. +You can also play [tic-tac-tide] online. + +[Exploring WebSocket with Rust and Tide]: https://javierviola.com/post/exploring-websocket-with-rust-and-tide/ +[Tide]: https://github.com/http-rs/tide +[tic-tac-tide]: https://tic-tac-tide.labs.javierviola.com/ + +## Engine Updates + +### [ggez] + +![ggez logo](../newsletter-005/ggez-logo-maroon-full.svg) + +[ggez] is a lightweight cross-platform game framework for making 2D +games with minimum friction. + +The zero'th release candidate for version 0.6.0 has been released and +there has been no particularly horrific outcry of people's games +exploding. A first release candidate with a pile of medium-sized bug +fixes should be coming in early February, hopefully soon followed by a +full release. [Feedback is welcome][ggez-github]! + +Special thanks to the contributors who helped hunt bugs +and organize PR's to get this version out the door: +@PSteinhaus, @Manghi, @AaronM04, @Systemcluster, and @Andy-Python-Programmer! + +[ggez]: https://crates.io/crates/ggez +[ggez-github]: https://github.com/ggez/ggez/milestone/6 + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month, +versions 0.5.7 and 0.5.8 were released, with various changes: + +- Basic multisampled anti-aliasing support (with further improvements to come). +- Functions for generating primitive shape meshes. +- A more flexible `Rectangle` type. +- Lots of bug fixes and docs improvements. + +For full details, see the [changelog][tetra-changelog]. + +Additionally, work on [version 0.6][tetra-06-changelog] has begun, with a release +planned for some time in February! + +[tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-06-changelog]: https://github.com/17cupsofcoffee/tetra/blob/0.6/CHANGELOG.md + +### [Dotrix] + +![Fox model and egui controls for camera, light, etc](dotrix-in-january.png) + +[Dotrix] ([Discord][lowenware-discord], [Twitter][@lowenware]) got an official +[egui] support and a new example demonstrating various +engine features and controls. The next big milestone for [Dotrix] developers is +a terrain engine and editor, also made with [egui]. Some progress you can +already find on [YouTube][lowenware-youtube]. + +[Dotrix]: https://dotrix.rs +[lowenware-discord]: https://discord.com/invite/DrzwBysNRd +[lowenware-youtube]: https://youtube.com/channel/UCdriNXRizbBFQhqZefaw44A +[@lowenware]: https://twitter.com/lowenware + +### [rg3d] + +{{ image_figure( + alt="rusty-editor screenshot" + src="rusty-editor.jpg" + caption="A level made in [rusty-editor](https://github.com/mrDIMAS/rusty-editor) which is a native scene editor +for the rg3d game engine.") }} + +[rg3d] ([Discord][rg3d_discord], [Twitter][rg3d_twitter]) +is a game engine that aims to be easy to use and provide large set +of out-of-box features. Some of the recent updates: + +- Animation blending state machines were improved. +- It's now possible to copy nodes in-place. +- The number of draw calls for UI was reduced by 70%. +- Fixed clipping issues and text measurement in the UI. +- Opacity for UI widgets was added. +- Layout of Scroll- and Wrap- panels was fixed. +- Light scatter issues for spot lights were fixed. +- Support for transparent meshes. +- Migration to rapier 0.5. +- Animation signal handling is fixed when animation playing in reverse. +- Animation tracks now are able to filter position/scale/rotation. +- Sprite rendering fixes. +- Improved copy/paste in rusty-editor. +- Lots of other small fixes and improvements. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rusty_editor]: https://github.com/mrDIMAS/rusty-editor + +## Library & Tooling Updates + +### [rkyv] + +[rkyv] is a zero-copy deserialization framework for Rust. It's similar to +FlatBuffers and Cap'n Proto and can be used for data storage and messaging. + +Version 0.3 was released this month and brought some highly-requested features: + +- A new hashmap implementation using perfect hashing to decrease memory usage + and fix portability issues. +- The `Unarchive` trait to enable more traditional data deserialization for + archived types. +- Improved validation performance. +- Better error messages and API ergonomics. +- A [book][rkyv-book] with more narrative documentation on architecture and + internals. +- More tests and realistic benchmarks against other popular serialization + frameworks. + +The next update will be [v0.4][rkyv-v0.4] and is on the way soon with a release +date around mid-February. + +[rkyv]: https://github.com/djkoloski/rkyv +[rkyv-book]: https://djkoloski.github.io/rkyv +[rkyv-v0.4]: https://github.com/djkoloski/rkyv/milestone/5 + +### [This Month in Mun][mun-january] + +[![Mun logo](mun-logo.png)][Mun] + +[Mun] is a scripting language for gamedev focused on quick iteration times +that is written in Rust. + +Revitalized from the holiday break, the Mun core team got cracking; those +[January updates][mun-january] include: + +- a ton of new language server features; +- the ability to emit IR; +- better documentation; +- bug fixes and other improvements. + +[Mun]: https://mun-lang.org +[mun-january]: https://mun-lang.org/blog/2021/02/05/this-month-january + +### [GameLisp][gamelisp] v0.2 + +![logo](glisp-logo.png) + +[GameLisp][gamelisp] ([source code][gamelisp-src], +[playground][gamelisp-playground]) by [@fleabitdev] +is a scripting language designed specifically for Rust game development. + +This month, version 0.2.0 has been released. Some of the updates: + +- Any `'static` Rust type, including types defined by external crates, + can now be moved onto the garbage-collected heap and manipulated + by GameLisp scripts. +- Rust data on the garbage-collected heap can now contain pointers to other + garbage-collected data, by implementing a `trace()` method. +- Version 0.1 could only bind non-capturing Rust closures, but closures + which capture `'static` data are now fully supported. +- Rust function pointers can now be passed directly to GameLisp, + rather than using the `rfn!` macro. + The clunky `lib!` and `rdata!` macros have also been removed. +- Updated documentation starting from the ["Rust Bindings"][gamelisp-doc-bindings] + chapter. + +For full details, see the [changelog][gamelisp-changelog]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/kp77vw/version_02_of_gamelisp)_ + +[gamelisp]: https://gamelisp.rs +[gamelisp-src]: https://github.com/fleabitdev/glsp +[gamelisp-playground]: https://gamelisp.rs/playground +[gamelisp-changelog]: https://github.com/fleabitdev/glsp/blob/master/CHANGELOG.md +[@fleabitdev]: https://twitter.com/fleabitdev +[gamelisp-doc-bindings]: + +### [LDtk-rs] + +[LDtk-rs] is a Rust crate for reading the [LDtk] map file format. The bindings +to the LDtk format are 100% automatically generated from the LDtk JSON Schema, +with the option to download the latest JSON Schema at build time for automatic +updates. + +[LDtk-rs]: https://github.com/katharostech/ldtk-rs +[LDtk]: https://ldtk.io + +### [bevy_ldtk] + +{{ image_figure( + alt="LDtk Map Running in Bevy" + src="bevy_ldtk.jpg" + caption='Tileset from ["Cavernas"](https://adamatomic.itch.io/cavernas) by Adam Saltsman') }} + +[bevy_ldtk] is a Bevy plugin for loading [LDtk] tilemaps. + +It features: + +- An efficient renderer that only uses 4 vertices per map layer. +- Hot reloading through the Bevy asset server integration. +- Heavily commented code to help others who want to see how to make their own + tilemap renderers. + +[bevy_ldtk]: https://github.com/katharostech/bevy_ldtk +[ldtk]: https://ldtk.io +["cavernas"]: https://adamatomic.itch.io/cavernas + +### [kira] + +[kira] by [@tesselode] is a game audio library tailored to composers and other +people who need expressive audio. + +v0.4.0 was released with a new wasm32 support, a new handle-based API, improved +error handling, and serde support for sequences, arrangements, and most config structs. + +_Discussions: [/r/rust](https://www.reddit.com/r/rust/comments/l3ma3d/kira_game_audio_library_v040_wasm_support_serde/), +[Twitter](https://twitter.com/tesselode/status/1353111739433410560)_ + +[Kira]: https://github.com/tesselode/kira +[@tesselode]: https://twitter.com/tesselode + +### [Dimforge][dimforge] + +[![Dimforge](dimforge.png)][dimforge] + +[Dimforge][dimforge] creates open-source Rust crates for numerical simulation. +Some of the January updates: + +- [Parry] was announced, the successor of ncollide for 2D and + 3D collision-detection in Rust. +- The new version of [Rapier] brings many new features, + including the ability to use custom shapes, + as well as convex polygons/polyhedrons for 2D and 3D respectively. + +You can read about all of the changes in the January edition of +["This Month In Dimforge"][dimforge-update]. + +[dimforge]: https://dimforge.com/ +[dimforge-update]: https://dimforge.com/blog/2021/01/29/this-month-in-dimforge +[Parry]: https://parry.rs +[Rapier]: https://rapier.rs + +### [gfx-rs] and [wgpu-rs] + +![Spaceship](wgpu-spaceship.jpg) + +The community managed to squeeze the v0.7 releases out +at the end of the month. See the detailed notes on [gfx blog post]. + +The highlight of the show is about shaders. Most of wgpu-rs shaders are +now written in [WGSL], +and gfx-rs community is inviting Rust game/graphics developers to evaluate if +[naga] could fulfill their shader translation needs in the future. + +[gfx-rs]: https://github.com/gfx-rs/gfx +[wgpu-rs]: https://github.com/gfx-rs/wgpu-rs +[gfx blog post]: https://gfx-rs.github.io/2021/02/02/release-0.7.html +[WGSL]: https://gpuweb.github.io/gpuweb/wgsl.html +[naga]: https://github.com/gfx-rs/naga + +### [imgui-rs] + +{{ image_figure( + alt="imgui drag drop example" + src="imgui-rs.gif" + caption="Drag and Drop and the new Drawing Api at Work in 0.7.0") }} + +[imgui-rs] is the Rust bindings for the ubiquitous immediate mode GUI library, +Dear ImGui. +Under new maintenance, [version 0.7] has been released, which features a new +API for raw draw calls, support for ergonomic Drag and Drop, and tons of improvements. +Notably, many functions were made `inline` and/or `const`, including the `im_str!` +macro. + +[imgui-rs]: https://github.com/imgui-rs/imgui-rs +[version 0.7]: https://github.com/imgui-rs/imgui-rs/releases/tag/v0.7.0 + +### [egui] + +{{ image_figure( + alt="egui widget gallery" + src="egui_0.8.0.gif" + caption="Some of the supported widgets in the new grid layout.") }} + +[egui] is a simple, fast, and highly portable immediate mode GUI library. + +This month [version 0.8] of egui was released with a new grid layout, +new look, and many smaller fixes and improvements. +You can try out egui in the [online demo]. + +[egui]: https://github.com/emilk/egui +[online demo]: https://emilk.github.io/egui +[version 0.8]: https://github.com/emilk/egui/blob/master/CHANGELOG.md#080---2021-01-17---grid-layout--new-visual-style + +### [bevy_egui] + +![bevy_egui screenshot](bevy_egui.png) + +[bevy_egui] provides a [Egui](https://github.com/emilk/egui) integration +for the [Bevy](https://github.com/bevyengine/bevy) game engine. +It supports [bevy_webgl2] and implements the full set of Egui features +(such as clipboard and opening URLs). + +Try out the [online demo](https://mvlabat.github.io/bevy_egui_web_showcase/index.html). + +[bevy_egui]: https://github.com/mvlabat/bevy_egui +[bevy_webgl2]: https://github.com/mrk-its/bevy_webgl2 + +### [chess-engine] + +{{ image_figure( + alt="cli + web version" + src="chess.png" + caption="Console and web clients for the chess-engine") }} + +[chess-engine] by [@adam-mcdaniel] is a pure Rust, no-std, dependency-free +chess engine built to run anywhere. + +> I love chess a lot. It's definitely one of my favorite games ever. +> However, I've always been disappointed when trying to write programs +> that play chess digitally (particularly in a compiled language). +> Although several amazing engines exist, it's near impossible to find +> a neat library for chess-related-programming that runs on everything. +> +> [chess-engine] is a solution to my problem. +> If you want a chess engine that runs on embedded devices, the terminal, +> [the desktop (with a gui)][chess-gui], and [the web][chess-web], +> this is probably your best bet. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/l65e86/a_nostd_chess_engine)_ + +[@adam-mcdaniel]: https://github.com/adam-mcdaniel +[chess-engine]: https://github.com/adam-mcdaniel/chess-engine +[chess-gui]: https://github.com/adam-mcdaniel/chess-engine/tree/main/examples/chess-gui +[chess-web]: https://adam-mcdaniel.github.io/chess-engine/docs/book/index.html#average-ai + +### [dcli] + +{{ image_figure( + alt="plaintext tables" + src="dcliah.png" + caption="Example of dcliah output") }} + +[dcli] by [Mike Chambers][@mikechambers] is a library and a collection +of utilities&apps that provide a command line interface (CLI) for viewing +player stats and data from Destiny 2, using the [Destiny 2 API][destiny-api]: + +- dclis - retrieves primary platform and membership ids for Destiny 2 players. +- dclim - manages and syncs the remote Destiny 2 API manifest database. +- dclias - downloads and syncs Destiny 2 Crucible activity history + into a local sqlite3 database file. +- dclic - retrieves character ids for the specified member. +- dclims - searches the Destiny 2 manifest by hash ids (from API calls). +- dclitime - generates date / time stamps for Destiny 2 weekly event moments. +- dclia - displays information on player's current activity within Destiny 2. +- dcliah - displays Destiny 2 activity history and stats. +- dcliad - displays Destiny 2 Crucible activity / match details. + +[dcli]: https://github.com/mikechambers/dcli +[@mikechambers]: www.mikechambers.com +[destiny-api]: https://github.com/Bungie-net/api + +### Rust Support in [Shader Playground][shader-playground] + +![source code in rust, compiler options, and spircv-coross output](shaderplay.jpeg) + +[Shader Playground][shader-playground] ([source code][shader-playground-src]) +by [@tgjones] now allows you to try out writing shaders in Rust +(using [rust-gpu]) without downloading or building anything. + +[@tgjones]: https://github.com/tgjones +[shader-playground]: http://shader-playground.timjones.io +[shader-playground-src]: https://github.com/tgjones/shader-playground +[rust-gpu]: https://github.com/EmbarkStudios/rust-gpu + +## Popular Workgroup Issues in GitHub + + + +- [rust-gamedev/rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): + - [#406 "Separate category for engines vs libraries/tools"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/406); + - [#454 "Newsletter: new format and more delegation"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/454); +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#98 "Monthly Rust Gamedev Meetup"](https://github.com/rust-gamedev/wg/issues/98); + - [#100 "Physiology simulation"](https://github.com/rust-gamedev/wg/issues/100); + - [#101 "[Proposal] Abstract plane geometry library for GUI projects"](https://github.com/rust-gamedev/wg/issues/101); + +## Requests for Contribution + + + +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [gfx-rs's "contributor-friendly" issues][gfx-issues]. +- [wgpu's "help wanted" issues][wgpu-help-wanted]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [Amethyst's "good first issue" issues][amethyst-issues]. +- [A/B Street's "good first issue" issues][abstreet-issues]. +- [Mun's "good first issue" issues][mun-issues]. +- [SIMple Mechanic's good first issues][simm-issues]. +- [Bevy's "good first issue" issues][bevy-issues]. + +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly +[wgpu-help-wanted]: https://github.com/gfx-rs/wgpu-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue + +------ + +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! + +**Discussions of this post**: +[/r/rust](https://reddit.com/r/rust/comments/le72fi/this_month_in_rust_gamedev_18_january_2021), +[Twitter]([TODO](https://twitter.com/rust_gamedev/status/1358162349375561729)). + +[/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/018/mun-logo.png b/content/news/018/mun-logo.png new file mode 100644 index 000000000..02295dc77 Binary files /dev/null and b/content/news/018/mun-logo.png differ diff --git a/content/news/018/oicana.png b/content/news/018/oicana.png new file mode 100644 index 000000000..23a5e582f Binary files /dev/null and b/content/news/018/oicana.png differ diff --git a/content/news/018/paddlers_v0.2.jpeg b/content/news/018/paddlers_v0.2.jpeg new file mode 100644 index 000000000..171007ce4 Binary files /dev/null and b/content/news/018/paddlers_v0.2.jpeg differ diff --git a/content/news/018/podcast.jpeg b/content/news/018/podcast.jpeg new file mode 100644 index 000000000..0e3134937 Binary files /dev/null and b/content/news/018/podcast.jpeg differ diff --git a/content/news/018/rusty-editor.jpg b/content/news/018/rusty-editor.jpg new file mode 100644 index 000000000..c55dce300 Binary files /dev/null and b/content/news/018/rusty-editor.jpg differ diff --git a/content/news/018/shaderplay.jpeg b/content/news/018/shaderplay.jpeg new file mode 100644 index 000000000..272d3939a Binary files /dev/null and b/content/news/018/shaderplay.jpeg differ diff --git a/content/news/018/shotcaller-full.png b/content/news/018/shotcaller-full.png new file mode 100644 index 000000000..b30629eed Binary files /dev/null and b/content/news/018/shotcaller-full.png differ diff --git a/content/news/018/station-iapetus-youtube.JPG b/content/news/018/station-iapetus-youtube.JPG new file mode 100644 index 000000000..3347ccb65 Binary files /dev/null and b/content/news/018/station-iapetus-youtube.JPG differ diff --git a/content/news/018/stellary_2_banner.jpg b/content/news/018/stellary_2_banner.jpg new file mode 100644 index 000000000..14d3b792e Binary files /dev/null and b/content/news/018/stellary_2_banner.jpg differ diff --git a/content/news/018/teki.gif b/content/news/018/teki.gif new file mode 100644 index 000000000..d883bc3e9 Binary files /dev/null and b/content/news/018/teki.gif differ diff --git a/content/news/018/theta_wave_homing_missiles.gif b/content/news/018/theta_wave_homing_missiles.gif new file mode 100644 index 000000000..ab09914c4 Binary files /dev/null and b/content/news/018/theta_wave_homing_missiles.gif differ diff --git a/content/news/018/tic-tac-tide.png b/content/news/018/tic-tac-tide.png new file mode 100644 index 000000000..29f0d6e02 Binary files /dev/null and b/content/news/018/tic-tac-tide.png differ diff --git a/content/news/018/veloren-snow.gif b/content/news/018/veloren-snow.gif new file mode 100644 index 000000000..788149379 Binary files /dev/null and b/content/news/018/veloren-snow.gif differ diff --git a/content/news/018/wgpu-spaceship.jpg b/content/news/018/wgpu-spaceship.jpg new file mode 100644 index 000000000..d44d5272c Binary files /dev/null and b/content/news/018/wgpu-spaceship.jpg differ diff --git a/content/news/018/win-icons-task-bar.png b/content/news/018/win-icons-task-bar.png new file mode 100644 index 000000000..760232b98 Binary files /dev/null and b/content/news/018/win-icons-task-bar.png differ diff --git a/content/news/018/wor.jpg b/content/news/018/wor.jpg new file mode 100644 index 000000000..cefed2e99 Binary files /dev/null and b/content/news/018/wor.jpg differ diff --git a/content/news/018/zemeroth.gif b/content/news/018/zemeroth.gif new file mode 100644 index 000000000..9a562b099 Binary files /dev/null and b/content/news/018/zemeroth.gif differ diff --git a/content/news/019/abstreet.png b/content/news/019/abstreet.png new file mode 100644 index 000000000..2cf046e66 Binary files /dev/null and b/content/news/019/abstreet.png differ diff --git a/content/news/019/antorum-2-21-2021.jpg b/content/news/019/antorum-2-21-2021.jpg new file mode 100644 index 000000000..34dbb33bb Binary files /dev/null and b/content/news/019/antorum-2-21-2021.jpg differ diff --git a/content/news/019/bevy-rhythm-game.gif b/content/news/019/bevy-rhythm-game.gif new file mode 100644 index 000000000..2c9acab3e Binary files /dev/null and b/content/news/019/bevy-rhythm-game.gif differ diff --git a/content/news/019/dotrix-light-demo.png b/content/news/019/dotrix-light-demo.png new file mode 100644 index 000000000..05b52ff6f Binary files /dev/null and b/content/news/019/dotrix-light-demo.png differ diff --git a/content/news/019/egui-plot.gif b/content/news/019/egui-plot.gif new file mode 100644 index 000000000..967cf1bb2 Binary files /dev/null and b/content/news/019/egui-plot.gif differ diff --git a/content/news/019/fishgame.gif b/content/news/019/fishgame.gif new file mode 100644 index 000000000..a37901077 Binary files /dev/null and b/content/news/019/fishgame.gif differ diff --git a/content/news/019/flesh.gif b/content/news/019/flesh.gif new file mode 100644 index 000000000..03a91a34b Binary files /dev/null and b/content/news/019/flesh.gif differ diff --git a/content/news/019/gamedev-meetup.png b/content/news/019/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/019/gamedev-meetup.png differ diff --git a/content/news/019/godot-vs-rapier.gif b/content/news/019/godot-vs-rapier.gif new file mode 100644 index 000000000..f28bfbc11 Binary files /dev/null and b/content/news/019/godot-vs-rapier.gif differ diff --git a/content/news/019/graphite.png b/content/news/019/graphite.png new file mode 100644 index 000000000..e51f7a12a Binary files /dev/null and b/content/news/019/graphite.png differ diff --git a/content/news/019/harvest_hero.gif b/content/news/019/harvest_hero.gif new file mode 100644 index 000000000..1997baed9 Binary files /dev/null and b/content/news/019/harvest_hero.gif differ diff --git a/content/news/019/index.md b/content/news/019/index.md new file mode 100644 index 000000000..687358873 --- /dev/null +++ b/content/news/019/index.md @@ -0,0 +1,881 @@ ++++ +title = "This Month in Rust GameDev #19 - February 2021" +date = 2021-03-08 +transparent = true +aliases = ["posts/newsletter-019"] ++++ + +Welcome to the 19th 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 + +Table of contents: + +- [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) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The second Rust Gamedev Meetup happened in February. It was an opportunity for +developers to show off what Rust projects they've been working on in the game +ecosystem. Developers showed off game engine demos, in-game playthroughs, +tooling, and more. You can watch the recording of the meetup [here on +Youtube][gamedev-meetup-video]. + +The next meetup will take place on the 13th of March at 16:00 GMT on the [Rust +Gamedev Discord server][rust-gamedev-discord], and can also be [streamed on +Twitch][rust-gamedev-twitch]. If you would like to show off what you've been +working on, fill out [this form][gamedev-meetup-form]. + +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[gamedev-meetup-video]: https://www.youtube.com/watch?v=Ea4Wt_FgEEw +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://www.twitch.tv/rustgamedev + +## Game Updates + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="flesh.gif" + caption="Title screen + gameplay") }} + +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's updates +include: + +- Added title screen +- Support gamepad +- Add new enemy types for first level include mid-boss + +[@im_oab]: https://twitter.com/im_oab +[tetra]: https://github.com/17cupsofcoffee/tetra + +### [Fishgame][fishgame] + +{{ image_figure( + alt="Fishgame gui" + src="fishgame.gif" + caption="Fish game UI.") }} + +[Fishgame][fishgame] [(web build)][fishgame-itch] is an online multiplayer game, +created in a collaboration between [Nakama][nakama], an open-source scalable +game server, and the [Macroquad](https://github.com/not-fl3/macroquad/) game +engine. + +This month fishgame utilized macroquad's new UI system to add a title screen +and improve the login screen. + +[fishgame]: https://github.com/heroiclabs/fishgame-macroquad +[fishgame-itch]: https://fedorgames.itch.io/fish-game?secret=UAVcggHn332a +[nakama]: https://heroiclabs.com/ +[macroquad]: https://github.com/not-fl3/macroquad + +### [Teki (敵)][teki] + +![teki preview](teki.gif) + +[Teki][teki] is a free and open-source fangame of the [Tōhō] series using [SDL2] +and [Legion] for ECS. It is aimed to be a shoot ’em up game with "lots of +bullets" a.k.a danmaku 弾幕 - literally "barrage" or "bullet curtain" in +Japanese. + +The project is still at a “very” early stage of development (Dec. 2020). + +This month's updates include: + +- New enemy type: big fairy +- New special card: Stellar Vortex +- Add yin yang orbs + +[teki]: https://github.com/o2sh/teki +[Tōhō]: https://en.wikipedia.org/wiki/Touhou_Project +[SDL2]: https://github.com/Rust-SDL2/rust-sdl2 +[Legion]: https://crates.io/crates/legion + +### [Harvest Hero][discord] + +![harvest hero preview](harvest_hero.gif) + +[Harvest Hero][discord] is undergoing a shop system rework. However, new +abilities are still being implemented. You can now use Zhebnog's Hourglass to +stop time and get weird. + +Built on top of [Emerald][emerald] by [Bombfuse][twitter]. + +This month's updates include: + +- Added "Flame Guard" enchantment +- Added "Zhebnog's Hourglass" ability +- Began work on a new main menu +- Implemented a functional shop system + +[discord]: https://discord.gg/CJRbxQn3d9 +[twitter]: https://twitter.com/bombfuse_dev +[emerald]: https://github.com/Bombfuse/emerald + +### [A/B Street] + +![Separate cyclepaths in A/B Street](./abstreet.png) + +[A/B Street] by [@dabreegster] is a traffic simulation game exploring how small +changes to roads affect cyclists, transit users, pedestrians, and drivers, with +support for any city with OpenStreetMap coverage. + +In February, [Bruce] implemented lagging green traffic signals, [Michael] and +[Yuwen] released the new day UI theme. More cycle paths and service roads were +imported for all maps, and we added loads of maps, a new per-country picker UI, +and dynamic font loading. Try out [Taipei] in the web browser to see all of this +in action! + +[A/B Street]: https://github.com/a-b-street/abstreet +[@dabreegster]: https://twitter.com/CarlinoDustin +[Bruce]: https://github.com/BruceBrown +[Michael]: https://github.com/michaelkirk +[Yuwen]: https://www.yuwen-li.com/ +[Taipei]: http://abstreet.s3-website.us-east-2.amazonaws.com/dev/game/?--dev&tw/taipei/maps/center.bin + +### [Paddlers] + +![A brightly colored scene with a grass field, a river, and some happy ducks.](paddlers_0.2.1.jpg) + +[Paddlers] ([GitHub][paddlers-gh], [Online Demo][paddlers-demo]) by [@jakmeier] +is an experimental MMORTS with the backend and the web client all written in +Rust. + +February gave birth to Paddlers release 0.2.1 and a ton of new game mechanics. +It features a skill map, quests, and a refreshed take on the tower defense +aspect of the game. On top of that, the rendering engine (part of the +[Paddle][paddle] framework) has been reworked and now allows for custom shaders. +Read all about this month's changes in this [article][paddlers-article] released +on the developer's private website. + +[Paddlers]: https://paddlers.ch +[paddlers-gh]: https://github.com/jakmeier/paddlers-browser-game +[paddlers-demo]: https://demo.paddlers.ch +[@jakmeier]: https://github.com/jakmeier +[paddle]: https://github.com/jakmeier/paddle +[paddlers-article]: https://www.jakobmeier.ch/blogging/Paddlers_6.html + +### Stellary 2 + +{{ image_figure( + alt="Stellary 2 Anti-Missile Laser" + src="stellary2-anti-missile-laser.gif" + caption="▶️ Click to [watch the full video](https://twitter.com/CoffeJunkStudio/status/1360637714660548618)", + link="https://twitter.com/CoffeJunkStudio/status/1360637714660548618") }} + +Stellary 2 by [@CoffeJunkStudio][coffe-junk-studio] is a 3D real-time space +shooter in which the player has to prevail against enemy space ships. + +The latest updates include: + +- Players’ space ships +- Prediction of the rocket trajectory +- [Energy budget][stellary2-aml-tweet] +- Weapon enhancements ([trident laser][stellary2-trident-laser-tweet] & [missile + splitting][stellary2-missile-splitting-tweet]) + +[coffe-junk-studio]: https://twitter.com/CoffeJunkStudio +[stellary2-aml-tweet]: https://twitter.com/CoffeJunkStudio/status/1360637714660548618 +[stellary2-trident-laser-tweet]: https://twitter.com/CoffeJunkStudio/status/1358437135230119936 +[stellary2-missile-splitting-tweet]: https://twitter.com/CoffeJunkStudio/status/1365666841838952450 + +### [Theta Wave] + +{{ image_figure( + alt="Homing Missiles" + src="theta_wave.gif" + caption="Homing missiles periodically spawn from missile launcher enemies", + link="https://github.com/amethyst/theta-wave") }} + +[Theta Wave] is a 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 have been focusing on refactoring the motion system to make +the code more approachable to other contributors. + +Notable changes: + +- Missiles now spawn from missile launcher enemies +- Cursed background slowly fades in over the course of the level + +[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/ + +### [SeniorSKY] + +{{ image_figure( + alt="SeniorSKY" + src="senior_sky.png" + caption="Rising sun") }} + +[SeniorSKY] is a flight simulator that uses the Vulkan API, developed by +[@pmathia0]. As an aerospace engineering student, Peter has always been +interested in how a flight simulator works under the hood. The development of +SeniorSKY started as a hobby project during university studies. + +SeniorSKY uses real-world elevation data with 1 arc second precision and can +render the whole globe in real dimensions. During the flight, the terrain tiles +are loaded dynamically based on real GPS coordinates of airplane, with a +decreasing level of detail further from the camera. This is achieved using a +combination of a terrain-quad-tree and GPU tessellation. + +Notable changes since last month: + +- Atmospheric scattering +- Improved fog +- FXAA + HDR tone mapping +- Terrain data preprocessing using compute shaders +- Performance optimizations + +Short-term plans: + +- replace imgui-rs by egui +- implement sun position based on datetime +- add terrain bump-maps to visualize gravel + +[SeniorSKY]: https://youtube.com/playlist?list=PLMmaJuk-D7iaObZyhyvc83tNwpx3ghzkY +[@pmathia0]: https://twitter.com/pmathia0 + +### [Way of Rhea][wor-site] + +![Way of Rhea screenshot](wor-capsule.png) + +Way of Rhea is a picturesque puzzle game that lets you correct your mistakes. +Change your color, teleport past the colored gates, master the color-powered +circuits, and befriend the crabs-but don't let them out! + +This month's major updates include: + +- New puzzles +- Support for standard video settings (see [here][wor-fs-exclusive-blog]) +- The new promotional art shown above + +[wor-site]: https://store.steampowered.com/app/1110620/Way_of_Rhea/ +[wor-fs-exclusive-blog]: https://www.anthropicstudios.com/2021/02/20/fullscreen-exclusive-is-a-lie/ + +### [Station Iapetus] + +{{ image_figure( + alt="Station Iapetus Youtube" + src="station-iapetus-youtube.JPG" + caption="Check [gameplay video](https://www.youtube.com/watch?v=cagT0GbiLxY) on YouTube", + link="https://www.youtube.com/watch?v=cagT0GbiLxY") }} + +[Station Iapetus][Station Iapetus] by [@mrDIMAS] is a 3rd person shooter on the +space prison Iapetus near the Saturn. + +- New inventory (check the video) +- Ability to throw grenades +- Splash damage +- More textures and materials +- Hitboxes for bots and player +- Better bots navigation +- Laser sight improvements +- Weapon display now shows bullet and grenades count +- Lots of other small fixes and improvements + +[@mrDIMAS]: https://github.com/mrDIMAS +[rg3d]: https://github.com/mrDIMAS/rg3d +[Station Iapetus]: https://github.com/mrDIMAS/StationIapetus +[si-youtube]: https://www.youtube.com/watch?v=cagT0GbiLxY + +### [Veloren][veloren] + +{{ image_figure( + alt="Lush forest" + src="veloren.jpg" + caption="A lush forest to explore") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In February, lots of work has been done on worldsim, with travelling merchants +being worked on. Some experiments have been happening on procedurally generating +giant trees. Lots is being done on the combat end, with dual wielding and +modular weapons being a big focus. Player trading was also implemented, which +allows items to be shared on the server. A large internal shift is being made +from diesel to rusqlite. + +A rework of attacks was done to allow their effects to be more dynamic. Lots of +work has been done on the art team, with new weapon models, new mobs like fish. +Some quality of life improvements were added, like humanoids automatically +deploying gliders while falling to avoid fall damage. CI changes were made to +finally have the GitHub mirror update periodically without error from LFS +storage. In March, Veloren will release 0.9. + +February's full weekly devlogs: "This Week In Veloren...": +[#105](https://veloren.net/devblog-105), +[#106](https://veloren.net/devblog-106), +[#107](https://veloren.net/devblog-107), +[#108](https://veloren.net/devblog-108). + +[veloren]: https://veloren.net + +### [Project YAWC][yawc-twitter] + +![A screenshot from a game of Project YAWC.](yawc_n19.png) + +[Project YAWC][yawc-twitter] is a turn-based strategy game in development by +junkmail. February saw the release of Alpha 4, bringing special units and +auctions to determine ownership of special units, as well as changes to netcode, +balance, and UI. + +Those interested in participating in the alpha test should fill out this +[form][yawc-form]. To learn more, you can follow the new +[@projectyawc][yawc-twitter] Twitter or send an e-mail to projectyawc@gmail.com. + +[yawc-form]: https://forms.gle/tzP6oRaJmApgMyrj7 +[yawc-twitter]: https://twitter.com/projectyawc + +### [Antorum Online] + +{{ image_figure( + alt="A player standing in front of a giant crab" + src="antorum-2-21-2021.jpg" + caption="Challenging Kroob") }} + +[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. + +The Armorcrafting, Weaponcrafting, and Salvaging skills were implemented this +month! Players can now craft gear in town using materials gathered out in the +world. They can also break down old or unwanted gear to recycle it. + +- [#30: Crafting And Salvaging](https://ratwizard.dev/dev-log/antorum/30); + +[Antorum Online]: https://ratwizard.dev/dev-log/antorum +[@dooskington]: https://twitter.com/dooskington + +## Learning Material Updates + +### [Fullscreen Exclusive Is A Lie (...sort of)][fs-exclusive] + +{{ image_figure( + alt="Way of Rhea's video settings" + src="wor-video-settings.jpg" + caption="[Way of Rhea](https://store.steampowered.com/app/1110620/Way_of_Rhea/)'s video settings") }} + +[Anthropic Studios][anthropic] has [shared an article][fs-exclusive] walking +through what they learned from implementing fullscreen exclusivity in their Rust +game engine and testing the fullscreen exclusive implementation of existing +games on a variety of hardware. + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/lokeml/fullscreen_exclusive_is_a_lie_sort_of)_ + +[fs-exclusive]: https://www.anthropicstudios.com/2021/02/20/fullscreen-exclusive-is-a-lie/ +[anthropic]: https://anthropicstudios.com +[wor-site]: https://store.steampowered.com/app/1110620/Way_of_Rhea/ + +### [Rhythm game in Rust using Bevy] + +{{ image_figure( + alt="Rhythm game demo" + src="bevy-rhythm-game.gif" + caption="Rhythm game demo") }} + +[Rhythm game in Rust using Bevy] is an introductory tutorial for Bevy made by +[@guimcaballero]. It guides through how to use Bevy to develop a Rhythm game, +including how to play audio, use GLSL shaders, and make a simple menu screen. + +[Rhythm game in Rust using Bevy]: https://caballerocoll.com/blog/bevy-rhythm-game/ +[@guimcaballero]: https://twitter.com/GuimCaballero + +### [godot-vs-rapier] + +![demo that first show godot's physics and than switches to +rapier](godot-vs-rapier.gif) + +[godot-vs-rapier] by [@extrawurst][@extrawurst] is a project that compares +[Godot]'s built-in physics against [Rapier][rapier]. + +_Discussions: +[r/godot](https://reddit.com/r/godot/comments/lauj7e/godot_physics_vs_gdnative)_ + +[@extrawurst]: https://twitter.com/extrawurst +[godot-vs-rapier]: https://github.com/extrawurst/godot-vs-rapier +[rapier]: https://rapier.rs +[Godot]: https://godot-rust.github.io + +## Engine Updates + +### [macroquad] + +{{ image_figure( + alt="macroquad_gui" + src="macroquad_skins.gif" + caption="Macroquad-UI runtime GUI skins configuration.") }} + +[macroquad] is a cross-platform (Windows/Linux/macOS/Android/iOS/WASM) game +framework built on top of [miniquad]. + +This month biggest update: Macroquad got its own fully skinnable and +customizable immediate mode UI system 🎉. +The new system took its origins from a heavily refactored [megaui] and supports +custom font sizes, fonts and skins for each UI element. +While work is still in progress, all important decisions were made and +implementation [PR][macroquad-ui-pr] got merged. + +Minor updates: + +- [Textures support][macroquad-textures-pr] for macroquad materials +- Experimental 2D pan/zoom camera [implementation][macroquad-camera-pr] + +[megaui]: https://github.com/not-fl3/megaui +[miniquad]: https://github.com/not-fl3/miniquad +[macroquad]: https://github.com/not-fl3/macroquad +[macroquad-ui-pr]: https://github.com/not-fl3/macroquad/pull/156 +[macroquad-textures-pr]: https://github.com/not-fl3/macroquad/pull/152 +[macroquad-camera-pr]: https://github.com/not-fl3/macroquad/pull/146 + +### [Tetra] + +{{ image_figure( + alt="Tetra's demo game" + src="tetra.png") }} + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, version 0.6 was released, with some big changes and features: + +- A simpler drawing API +- Less global state for mesh drawing +- Multisampled canvases +- Better font rendering + +For more details, see the [changelog][tetra-changelog], or [17cupsofcoffee's +twitter thread][tetra-twitter] about the release. + +[tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-twitter]: https://twitter.com/17cupsofcoffee/status/1357750836370284544 + +### [rg3d] + +{{ image_figure( + alt="rg3d Youtube" + src="rg3d-youtube.JPG" + caption="Check [navmesh agent navigation](https://www.youtube.com/watch?v=tqFdQ5OPB1I) on YouTube", + link="https://www.youtube.com/watch?v=tqFdQ5OPB1I") }} + +[rg3d] ([Discord][rg3d_discord], [Twitter][rg3d_twitter]) is a game engine that +aims to be easy to use and provide a large set of out-of-box features. Some of +the recent updates: + +- Ability to render UI instances in a texture +- FBX name validator +- Fast Approximate Anti-Aliasing (FXAA) +- Integrity checks for resource inheritance +- Nodes now can be tagged +- Animation blending machine now has BlendAnimationsByIndex node +- Multi-directional binding between physics and graph +- SceneDrawingContext improvements: draw_capsule, draw_capsule segment +- Performance statistics for scenes +- ColorGradient improvements +- [Path smoothing for navmesh agent][navmesh] +- Lots of other small fixes and improvements. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[navmesh]: https://www.youtube.com/watch?v=tqFdQ5OPB1I +[rg3d-youtube]: https://www.youtube.com/watch?v=tqFdQ5OPB1I + +### [Dotrix] + +{{ image_figure( + alt="Dotrix Light Demo" + src="dotrix-light-demo.png" + caption="Demo application demonstrating light rendering") }} + +[Dotrix] ([YouTube][lowenware_youtube], [Discord][lowenware_discord]) by +[@lowenware] is an ECS based 3D game engine with renderer built around the +[wgpu-rs]. + +This month [Dotrix] 0.3 was released on +[crates.io](https://crates.io/crates/dotrix) with the complete [API +documentation](https://docs.rs/dotrix/0.3.0/dotrix/), major light components +update, wireframes, and mouse ray modules. + +[Dotrix]: https://github.com/lowenware/dotrix +[lowenware_discord]: https://discord.com/invite/DrzwBysNRd +[lowenware_youtube]: https://youtube.com/channel/UCdriNXRizbBFQhqZefaw44A +[@lowenware]: https://twitter.com/lowenware + +## Library & Tooling Updates + +### [Rafx][rafx-github] + +![Screenshot from Rafx Rendering Framework](rafx-screenshot.png) + +Rafx is a multi-backend renderer that optionally integrates with the +[distill][rafx-distill] asset pipeline. Rafx is divided into three tiers of +functionality: + +`rafx-api` provides a custom GPU API abstraction layer that currently supports +Vulkan and metal. ([API in rust psuedocode][rafx-api-design]) + +`rafx-framework` builds on the API layer using ideas found in modern shipping +AAA titles. Rendering is pipelined in a separate thread in three phases, using +jobs to extract data from the main thread, process the data on the render +thread, and write the draw calls to command buffers. [[Tatarchuk +2015][rafx-gdc-2015]] A render graph ensures correct synchronization. +[[O'Donnell 2017][rafx-gdc-2017]] The framework also provides a material +abstraction and shader pipeline. + +`rafx-assets` adds integration with the [distill][rafx-distill] asset pipeline. +This ensures that when an asset like a mesh is loaded, other related assets like +textures/material/vertex data are loaded. By integrating with Distill, rafx +provides advanced features like streaming live asset updates to remote devices. + +More information about rafx: + +- [GitHub][rafx-github] +- [Documentation][rafx-documentation] +- [Why Rafx?][why-rafx] (includes similarities/differences with other rust and + non-rust alternatives) + +[rafx-github]: https://github.com/aclysma/rafx +[rafx-documentation]: https://github.com/aclysma/rafx/blob/master/docs/index.md +[why-rafx]: https://github.com/aclysma/rafx/blob/master/docs/why_rafx.md +[rafx-api-design]: https://github.com/aclysma/rafx/blob/master/docs/api/api_design_in_rust_psuedocode.rs +[rafx-api-triangle-example]: https://github.com/aclysma/rafx/blob/master/rafx/examples/api_triangle/api_triangle.rs +[rafx-gdc-2015]: http://advances.realtimerendering.com/destiny/gdc_2015/Tatarchuk_GDC_2015__Destiny_Renderer_web.pdf +[rafx-gdc-2017]: https://www.gdcvault.com/play/1024612/FrameGraph-Extensible-Rendering-Architecture-in +[rafx-distill]: https://github.com/amethyst/distill + +### [egui] + +![The plot thickens](egui-plot.gif) + +[egui] by [@emilk] is an easy-to-use immediate mode GUI library in pure Rust. + +This month [versions 0.9 and 0.10] of egui were released with many improvements +big and small, including a 2D plot, more text styles, disabling widgets and +improved documentation. + +You can try out egui in the [online demo]. + +[egui]: https://github.com/emilk/egui +[online demo]: https://emilk.github.io/egui +[versions 0.9 and 0.10]: https://github.com/emilk/egui/blob/master/CHANGELOG.md +[@emilk]: https://twitter.com/ernerfeldt + +### [This Month in Mun][mun-february] + +[![Mun logo](mun-logo.png)][Mun] + +[Mun] is a scripting language for gamedev focused on quick iteration times that +is written in Rust. + +It's been a long time coming, but the Mun Core Team is closing in on the finish +line for Mun v0.3. They are only a couple of pull requests away from locking the +build for bug fixes and documentation. The [February updates][mun-february] +include: + +- `use` statements language support; +- Incremental file updates for the language server; +- LLVM 11 support; +- Bug fixes and other improvements. + +[Mun]: https://mun-lang.org +[mun-february]: https://mun-lang.org/blog/2021/03/04/this-month-february + +### [Graphite][graphite-repo] + +{{ image_figure( + alt="Graphite GUI" + src="graphite.png" + caption="Progress on the GUI") }} + +[Graphite][graphite-repo] ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-progress vector and +raster graphics editor built on a nondestructive node-based workflow. + +Since February's Rust Gamedev Meetup [which announced][graphite-video] the +Graphite vision has attracted tremendous interest, community advice has shifted +the development strategy to focus on a 0.1 MVP release ASAP: + +- The past year's in-development custom GUI has been shelved in lieu of an + interim web GUI. Graphite intends to natively support Windows, Mac, Linux, and + Web. This change unblocks core application development but means Graphite is + Web-only until the Rust GUI ecosystem matures. Good progress this month has + been made building the web GUI with [Vue](https://vuejs.org/). +- Graphite 0.1 will now support only vector editing. This defers the large + complexity of the graph render engine required for node-based raster editing. + It should be less difficult to first focus on building a vector editor that + improves upon the UX of Illustrator and Inkscape. + +[graphite-repo]: https://github.com/GraphiteEditor/Graphite +[graphite-discord]: https://github.com/GraphiteEditor/Graphite/blob/master/README.md#discord +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-video]: https://www.youtube.com/watch?v=Ea4Wt_FgEEw&t=563s + +### [wgpu-rs] + +wgpu-rs is a WebGPU implementation and API in Rust. + +- "wgpu-core"-0.7.1 was published with fixes +- API updated for blending states, cull faces, vertex formats +- Zero-initialization of buffers upon use +- Validation of texture bindings, index formats for strip topologies +- Binding tracker was rewritten with test-ability in mind, bugs fixed +- The player learned to resize the window properly. API traces can now be + replayed on Linux even when swapchain recreation events are present +- SPIRV-Cross was made optional, which was useful for Deno in order to work + around the linking conflict with "rusty_v8" + +[wgpu-rs]: https://github.com/gfx-rs/wgpu-rs + +### [gfx-rs] + +gfx-rs is a portable low-level graphics abstraction layer. + +- API got `PhysicalDeviceProperties` containing limits and properties of + physical devices that are not opt-in. +- SPIRV-Cross dependency was made optional, while Naga is required. +- Vulkan backend learned to target Vulkan 1.1 and 1.2 internally. +- DX12 understood more limits. +- GL backend fixed WebGL initialization and EGL library discovery. + +[gfx-rs]: https://github.com/gfx-rs/gfx + +### [naga] + +naga is the shader translation library/tool. + +- Versions 0.3.1 and 0.3.2 were published with fixes +- API: function calls turned into statements, image queries , and stores, + understanding of push constants. +- Validation: type validation was re-written and improved, new control flow + analysis was added to check for uniformity requirements. In addition, this + step now collects the image-sampler pairs used by the module. +- Backends: lots of fixes and filling of the gaps +- Infrastructure: `convert` example was removed in favor of the default binary + target. The native shaders (produced by the snapshot tests) got validated on + CI using platform tools. + +[naga]: https://github.com/gfx-rs/naga + +### [Distill][distill-github] + +Distill is an asset pipeline for games, reading artist-friendly formats from +disk, processing them into your engine-ready formats, and delivering them to +your game runtime. Distill handles dependencies between assets, import & build +caching, cross-device hot reloading during development, packing assets for a +shippable game build, and more. + +Distill's design is inspired by Unity's asset system and [Frostbite's Scaling +the Pipeline][distill-scaling-the-pipeline]. Distill leverages purity in the +functional-programming sense to deliver a robust and scalable experience for the +asset processing pipeline. With [LMDB][distill-lmdb] backing storage of +metadata, Distill is able to avoid blocking asset loading while assets are being +imported which eliminates the most common frustration with existing commercial +offerings. Additionally, Distill is able to provide fully consistent snapshots +of asset metadata to readers over [capnp-rpc][distill-capnp-rpc]. + +[distill-capnp-rpc]: https://github.com/capnproto/capnproto-rust +[distill-lmdb]: https://symas.com/lmdb/ +[distill-scaling-the-pipeline]: https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/scaling-the-pipeline.pptx +[distill-github]: https://github.com/amethyst/distill + +### [basis-universal-rs] + +`basis-universal` provides bindings for [Binomial LLC][binomial-llc]'s [Basis +Universal texture codec][basis-universal-upstream]. + +Basis Universal is a state-of-the-art +[supercompressed][basis-universal-supercompression] texture codec that was +recently [open-sourced][basis-universal-open-sourced] by Binomial in partnership +with Google. It was [contributed][basis-universal-contributed-kronos] to the +Khronos glTF 3D Transmission Open Standard. + +The library has two primary uses: + +- Compresses and encode textures "offline" to a custom format +- Transcoding: Unpack the custom format directly to GPU-friendly compressed + formats. The final format can be chosen at game runtime to be compatible with + available GPU hardware. + +Basis universal format can also store mipmapped textures and cubemaps, neither +of which is possible with "normal" file formats. Mipmaps can be generated by the +library during compression. + +Compression is very slow (around 7-10s for a 2k texture) but transcoding is +relatively fast (around 5-40ms for a 2k texture depending on quality). Memory +savings at runtime are generally >= 75% (depending on the transcode format and +quality) + +[binomial-llc]: http://www.binomial.info +[basis-universal-rs]: https://github.com/aclysma/basis-universal-rs +[basis-universal-upstream]: https://github.com/BinomialLLC/basis_universal +[basis-universal-supercompression]: http://gamma.cs.unc.edu/GST/gst.pdf +[basis-universal-open-sourced]: https://opensource.googleblog.com/2019/05/google-and-binomial-partner-to-open.html +[basis-universal-contributed-kronos]: https://www.khronos.org/blog/google-and-binomial-contribute-basis-universal-texture-format-to-khronos-gltf-3d-transmission-open-standard + +### [bevy_egui] + +[bevy_egui] provides a [Egui](https://github.com/emilk/egui) integration +for the [Bevy](https://github.com/bevyengine/bevy) game engine. +It supports [bevy_webgl2] and implements the full set of Egui features +(such as clipboard and opening URLs). + +This month versions 0.2 and 0.3 were released, providing an integration with +Egui 0.9 and 0.10 respectively. + +Try out the [online demo](https://mvlabat.github.io/bevy_egui_web_showcase/index.html). + +[bevy_egui]: https://github.com/mvlabat/bevy_egui +[bevy_webgl2]: https://github.com/mrk-its/bevy_webgl2 +[versions 0.2 and 0.3]: https://github.com/mvlabat/bevy_egui/blob/main/CHANGELOG.md + +### [rkyv] + +[rkyv] is a zero-copy deserialization framework for Rust. It's similar to +FlatBuffers and Cap'n Proto and can be used for data storage and messaging. + +[Version 0.4][rkyv-v0.4] was released this month and brought some big changes +and improvements: + +- Major traits have been refactored and renamed to clarify their roles +- Shared pointers (`Rc`, `Arc`, `Weak`) can now be serialized, deserialized, and + validated with correct ownership semantics +- Serialization, deserialization, and validation all now support custom contexts +- Greatly improved support for 32- and 64-bit archives by implementing Archive + for `usize` and `isize` +- More comprehensive documentation in the [book][rkyv-book] + +This release completes the project's initial feature set, and a [request for +feedback][rkyv-request-for-feedback] has been opened to help with future project +planning. + +[rkyv]: https://github.com/djkoloski/rkyv +[rkyv-v0.4]: https://github.com/djkoloski/rkyv/releases/tag/v0.4.0 +[rkyv-book]: https://djkoloski.github.io/rkyv +[rkyv-request-for-feedback]: https://github.com/djkoloski/rkyv/issues/67 + +### [wasm_plugin] + +[wasm_plugin] is a new low-ish level tool for easily hosting WASM based plugins +for modding or scripting. + +It consists of two crates: + +- [wasm_plugin_host] which wraps a wasmer instance with methods for calling + functions on the guest plugin. +- [wasm_plugin_guest] which provides an attribute macro to easily export + functions to the host. + +[wasm_plugin]: https://github.com/alec-deason/wasm_plugin +[wasm_plugin_host]: https://lib.rs/crates/wasm_plugin_host +[wasm_plugin_guest]: https://lib.rs/crates/wasm_plugin_guest + +## Popular Workgroup Issues in GitHub + + + +- [rust-gamedev/rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): + - [#406 "Separate category for engines vs libraries/tools"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/406); + - [#454 "Newsletter: new format and more delegation"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/454); +- [rust-gamedev/wg](https://github.com/rust-gamedev/wg): + - [#98 "Monthly Rust Gamedev Meetup"](https://github.com/rust-gamedev/wg/issues/98); + - [#100 "Physiology simulation"](https://github.com/rust-gamedev/wg/issues/100); + - [#101 "[Proposal] Abstract plane geometry library for GUI projects"](https://github.com/rust-gamedev/wg/issues/101); + +## Requests for Contribution + + + +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [gfx-rs's "contributor-friendly" issues][gfx-issues]. +- [wgpu's "help wanted" issues][wgpu-help-wanted]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [Amethyst's "good first issue" issues][amethyst-issues]. +- [A/B Street's "good first issue" issues][abstreet-issues]. +- [Mun's "good first issue" issues][mun-issues]. +- [SIMple Mechanic's good first issues][simm-issues]. +- [Bevy's "good first issue" issues][bevy-issues]. + +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly +[wgpu-help-wanted]: https://github.com/gfx-rs/wgpu-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue + +------ + +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](https://www.reddit.com/r/rust_gamedev/comments/m0n8rn/this_month_in_rust_gamedev_19_february_2021/), +[Twitter](https://twitter.com/rust_gamedev/status/1369004435280715789), +[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/019/macroquad_skins.gif b/content/news/019/macroquad_skins.gif new file mode 100644 index 000000000..734050fee Binary files /dev/null and b/content/news/019/macroquad_skins.gif differ diff --git a/content/news/019/mun-logo.png b/content/news/019/mun-logo.png new file mode 100644 index 000000000..02295dc77 Binary files /dev/null and b/content/news/019/mun-logo.png differ diff --git a/content/news/019/paddlers_0.2.1.jpg b/content/news/019/paddlers_0.2.1.jpg new file mode 100644 index 000000000..0beafbc2e Binary files /dev/null and b/content/news/019/paddlers_0.2.1.jpg differ diff --git a/content/news/019/rafx-screenshot.png b/content/news/019/rafx-screenshot.png new file mode 100644 index 000000000..57db3ffb5 Binary files /dev/null and b/content/news/019/rafx-screenshot.png differ diff --git a/content/news/019/rg3d-youtube.JPG b/content/news/019/rg3d-youtube.JPG new file mode 100644 index 000000000..5da75fcc7 Binary files /dev/null and b/content/news/019/rg3d-youtube.JPG differ diff --git a/content/news/019/senior_sky.png b/content/news/019/senior_sky.png new file mode 100644 index 000000000..00ddfb6e9 Binary files /dev/null and b/content/news/019/senior_sky.png differ diff --git a/content/news/019/station-iapetus-youtube.JPG b/content/news/019/station-iapetus-youtube.JPG new file mode 100644 index 000000000..f2e1a8b06 Binary files /dev/null and b/content/news/019/station-iapetus-youtube.JPG differ diff --git a/content/news/019/stellary2-anti-missile-laser.gif b/content/news/019/stellary2-anti-missile-laser.gif new file mode 100644 index 000000000..93c039b13 Binary files /dev/null and b/content/news/019/stellary2-anti-missile-laser.gif differ diff --git a/content/news/019/teki.gif b/content/news/019/teki.gif new file mode 100644 index 000000000..9983dbc03 Binary files /dev/null and b/content/news/019/teki.gif differ diff --git a/content/news/019/tetra.png b/content/news/019/tetra.png new file mode 100644 index 000000000..173c67e5d Binary files /dev/null and b/content/news/019/tetra.png differ diff --git a/content/news/019/theta_wave.gif b/content/news/019/theta_wave.gif new file mode 100644 index 000000000..1b697378c Binary files /dev/null and b/content/news/019/theta_wave.gif differ diff --git a/content/news/019/veloren.jpg b/content/news/019/veloren.jpg new file mode 100644 index 000000000..2d9714fac Binary files /dev/null and b/content/news/019/veloren.jpg differ diff --git a/content/news/019/wor-capsule.png b/content/news/019/wor-capsule.png new file mode 100644 index 000000000..aca016309 Binary files /dev/null and b/content/news/019/wor-capsule.png differ diff --git a/content/news/019/wor-video-settings.jpg b/content/news/019/wor-video-settings.jpg new file mode 100644 index 000000000..25ee43761 Binary files /dev/null and b/content/news/019/wor-video-settings.jpg differ diff --git a/content/news/019/yawc_n19.png b/content/news/019/yawc_n19.png new file mode 100644 index 000000000..b8d9a615b Binary files /dev/null and b/content/news/019/yawc_n19.png differ diff --git a/content/news/020/abstreet.jpg b/content/news/020/abstreet.jpg new file mode 100644 index 000000000..0b879a32d Binary files /dev/null and b/content/news/020/abstreet.jpg differ diff --git a/content/news/020/aladin_lite_mars_RdBu_cm.gif b/content/news/020/aladin_lite_mars_RdBu_cm.gif new file mode 100644 index 000000000..fe9a89e2b Binary files /dev/null and b/content/news/020/aladin_lite_mars_RdBu_cm.gif differ diff --git a/content/news/020/bevy_pbr.png b/content/news/020/bevy_pbr.png new file mode 100644 index 000000000..e1f175ede Binary files /dev/null and b/content/news/020/bevy_pbr.png differ diff --git a/content/news/020/bevy_retro.gif b/content/news/020/bevy_retro.gif new file mode 100644 index 000000000..ef9cedcc1 Binary files /dev/null and b/content/news/020/bevy_retro.gif differ diff --git a/content/news/020/bitmapflow.gif b/content/news/020/bitmapflow.gif new file mode 100644 index 000000000..0523b5fa4 Binary files /dev/null and b/content/news/020/bitmapflow.gif differ diff --git a/content/news/020/bounty_bros.png b/content/news/020/bounty_bros.png new file mode 100644 index 000000000..41fcb79d4 Binary files /dev/null and b/content/news/020/bounty_bros.png differ diff --git a/content/news/020/building-blocks-lod-terrain.jpg b/content/news/020/building-blocks-lod-terrain.jpg new file mode 100644 index 000000000..cb762cd08 Binary files /dev/null and b/content/news/020/building-blocks-lod-terrain.jpg differ diff --git a/content/news/020/disguiser.png b/content/news/020/disguiser.png new file mode 100644 index 000000000..42d8bae4e Binary files /dev/null and b/content/news/020/disguiser.png differ diff --git a/content/news/020/egregoria.jpg b/content/news/020/egregoria.jpg new file mode 100644 index 000000000..827605572 Binary files /dev/null and b/content/news/020/egregoria.jpg differ diff --git a/content/news/020/egui-macroquad.png b/content/news/020/egui-macroquad.png new file mode 100644 index 000000000..18430f55a Binary files /dev/null and b/content/news/020/egui-macroquad.png differ diff --git a/content/news/020/em_desktop_icon.png b/content/news/020/em_desktop_icon.png new file mode 100644 index 000000000..8444d8184 Binary files /dev/null and b/content/news/020/em_desktop_icon.png differ diff --git a/content/news/020/femtovg.png b/content/news/020/femtovg.png new file mode 100644 index 000000000..d19abc407 Binary files /dev/null and b/content/news/020/femtovg.png differ diff --git a/content/news/020/fishgame.gif b/content/news/020/fishgame.gif new file mode 100644 index 000000000..a4ca18d8d Binary files /dev/null and b/content/news/020/fishgame.gif differ diff --git a/content/news/020/gamedev-meetup.png b/content/news/020/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/020/gamedev-meetup.png differ diff --git a/content/news/020/gargoyles_quest.png b/content/news/020/gargoyles_quest.png new file mode 100644 index 000000000..abf380520 Binary files /dev/null and b/content/news/020/gargoyles_quest.png differ diff --git a/content/news/020/graphite-tool-system-progress.png b/content/news/020/graphite-tool-system-progress.png new file mode 100644 index 000000000..e885b498e Binary files /dev/null and b/content/news/020/graphite-tool-system-progress.png differ diff --git a/content/news/020/grr-gltf.jpg b/content/news/020/grr-gltf.jpg new file mode 100644 index 000000000..a7104d494 Binary files /dev/null and b/content/news/020/grr-gltf.jpg differ diff --git a/content/news/020/harvest_hero_level_making.gif b/content/news/020/harvest_hero_level_making.gif new file mode 100644 index 000000000..885e4612f Binary files /dev/null and b/content/news/020/harvest_hero_level_making.gif differ diff --git a/content/news/020/index.md b/content/news/020/index.md new file mode 100644 index 000000000..4fcc925cf --- /dev/null +++ b/content/news/020/index.md @@ -0,0 +1,1546 @@ ++++ +title = "This Month in Rust GameDev #20 - March 2021" +date = 2021-04-10 +transparent = true +aliases = ["posts/newsletter-020"] ++++ + +Welcome to the 20th 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) +- [Library & Tooling Updates](#library-tooling-updates) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The third Rust Gamedev Meetup happened in March. It was an opportunity for +developers to show off what Rust projects they've been working on in the game +ecosystem. Developers showed off game engine demos, in-game playthroughs, +tooling, and more. You can watch the recording of the meetup [here on +Youtube][gamedev-meetup-video]. + +The next meetup will take place on the 10th of April at 16:00 GMT on the [Rust +Gamedev Discord server][rust-gamedev-discord], and can also be [streamed on +Twitch][rust-gamedev-twitch]. If you would like to show off what you've been +working on, fill out [this form][gamedev-meetup-form]. + +[gamedev-meetup-form]: https://forms.gle/BS1zCyZaiUFSUHxe6 +[gamedev-meetup-video]: https://youtube.com/watch?v=gqCxt8XL92o +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### [MineWars][minewars] + +![MineWars Game Screenshot](minewars.jpg) + +[MineWars][minewars] ([Twitter][minewars-twitter], [Reddit][minewars-reddit]) +by @jamadazi is Minesweeper reimagined as a Multiplayer Real Time Strategy! + +Capture mines. Move them around. Cause explosion chains. Take out enemy mines. +Defend your Cities. Fight for territory. Eliminate other players. Play on a +procedurally-generated map. + +The game has been privately in development for many months and was just +announced publicly. The project is currently working towards an alpha release +for public playtesting. Read the announcement on the [website][minewars] for +more information. + +Made in the [Bevy Game Engine][bevy]. + +[minewars]: https://minewars.cc +[minewars-twitter]: https://twitter.com/MineWarsGame +[minewars-reddit]: https://reddit.com/r/minewars +[bevy]: https://bevyengine.org + +### [sm64js][sm64js] + +![Super Mario 64 JavaScript](sm64js.jpg) + +[sm64js][sm64js] ([GitHub][sm64js-github], [Discord][sm64js-discord]) is a rewrite +of the decompilation project of Super Mario 64 in JavaScript with a strong focus +on massive multiplayer online. +The [backend][sm64js-server] recently has been rewritten in Rust by [@marior] +and is now live. + +You can find more information about it in [this recent blog post][net64-blog], +where the developers of a similar mod called Net64 are talking +about several decompilation projects. + +Some of the most recent additions are: + +- Karts and gliders. +- Health meters. +- More visuals with butterflies and fish. + +A stress test is scheduled for 2021-04-17 17:30 UTC and everyone is invited to join. + +[@marior]: https://twitter.com/marior_dev +[sm64js]: https://sm64js.com +[sm64js-github]: https://github.com/sm64js/sm64js +[sm64js-discord]: https://discord.gg/7UaDnJt +[sm64js-server]: https://github.com/sm64js/sm64js-mmo-server +[net64-blog]: https://net64-mod.github.io/blog/sm64js/ + +### [Outer Wonders][outer-wonders-intro] + +![Bibi rolling around](outer-wonders.gif) + +[Outer Wonders][outer-wonders-intro] by the [Utopixel Studio][utopixel] +is a pixelart puzzle-based adventure game built using SDL2. + +> Explore a world of fantasy in Outer Wonders. +> Play as Bibi, the cute round monkey, unveil the natural wonders surrounding +> your native village, and unravel their mysteries in this +> ecological puzzle-based adventure game. + +March was mostly about various preparations for the upcoming playable demo release. +Some of the recent updates: + +- More lively in-game environments. +- Scripted cutscenes. +- Translations. +- [Linux support progress][outer-wonders-blog1]. +- [Lot's of level and technical testing][outer-wonders-blog2]. +- The playable demo [will be released on April 16][outer-wonders-blog3]. + +[You can read the full March devlogs here][outer-wonders-blog]. + +[outer-wonders-blog]: https://utopixel.games/en/blog +[outer-wonders-intro]: https://utopixel.games/en/blog/introducing-outer-wonders +[utopixel]: https://twitter.com/utopixel +[outer-wonders-blog1]: https://utopixel.games/en/blog/building-outer-wonders-for-multiple-platforms +[outer-wonders-blog2]: https://utopixel.games/en/blog/testing-outer-wonders-demo-before-release +[outer-wonders-blog3]: https://utopixel.games/en/blog/outer-wonders-demo-release-on-april-16 + +### [Aladin Lite] + +{{ image_figure( + alt="Mars with a RdBu colormap" + src="aladin_lite_mars_RdBu_cm.gif" + caption="Mars heightmap with a RdBu colormap rendered with Aladin Lite v3") }} + +[Aladin Lite] is a spatial image survey visualizer developed by the [Astronomical +Observatory of Strasbourg] in France. Since its first release in 2013, +[Aladin Lite] has been used by astronomers as well as amateurs that +are curious about exploring the sky. + +Originally developed using 2D Javascript canvas, its core has been fully +rewritten in Rust and WebGL2 using [wasm-bindgen]. +New features include: + +- The support of multiple allsky projections (mercator, aitoff, ...). +- The blending of multiple surveys. +- The support of FITS file images. + +For more information, see a [talk][adass-talk] done at the ADASS 2020 +conference. A web page is also available [here][al-test-url] for you to test. +You are also very welcolme to contribute to the project by e.g. posting issues +on the project's github. + +[Astronomical Observatory of Strasbourg]: https://cds.u-strasbg.fr/index-fr.gml +[Aladin Lite]: https://github.com/cds-astro/aladin-lite/tree/develop +[wasm-bindgen]: https://github.com/rustwasm/wasm-bindgen +[adass-talk]: https://youtube.com/watch?v=TILtJOiiRoc +[al-test-url]: https://bmatthieu3.github.io/hips_webgl_renderer/index.html + +### [Portal Explorer][portal-explorer] + +{{ image_figure( + alt='"Portal in portal" scene' + src="portal-explorer.png" + caption='"Portal in portal" scene') }} + +[Portal Explorer][portal-explorer] by [@optozorax][optozorax-twitter] is a web +visualizator of mind-blowing portals. + +In Portal Explorer you can view how interesting portals are constructed, and +visually explore their properties by moving and rotating them. This program +doesn't work well on mobile, better opened from PC. The most interesting +scene is [portal in portal][portal-in-portal]. + +Created using ray-tracing in shaders, engine is [macroquad][macroquad-git], +interface is [egui][egui-git]. + +[portal-explorer]: https://github.com/optozorax/portal +[optozorax-twitter]: https://twitter.com/optozorax +[portal-in-portal]: https://optozorax.github.io/portal/?scene=portal_in_portal +[macroquad-git]: https://github.com/not-fl3/macroquad +[egui-git]: https://github.com/emilk/egui + +### [Name Needed][name-needed] + +{{ image_figure( + alt="Wandering agents hauling items around and digging" + src="name-needed.gif" + caption="Agents wandering around, hauling items and digging blocks") }} + +[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. + +The engine is custom, built with SDL2 and OpenGL. It's still early days, but +steady progress has been made over the last 18 months. The developer aims to +release occasional technical devlogs about interesting parts of the engine, +which so far include: + +- [Long term vision and goals][name-needed-devlog0] +- [High level engine architecture][name-needed-devlog1] +- [Intelligent entity behaviors][name-needed-devlog2] + +[name-needed]: https://github.com/DomWilliams0/name-needed +[domwilliams-github]: https://github.com/DomWilliams0 +[name-needed-devlog0]: https://domwillia.ms/devlog0/ +[name-needed-devlog1]: https://domwillia.ms/devlog2/ +[name-needed-devlog2]: https://domwillia.ms/devlog4/ + +### [Orbital Decay][orbital-decay] + +{{ image_figure( + alt="Orbital Decay" + src="orbital-decay.gif" + caption="Orbital Decay gameplay") }} + +[Orbital Decay][orbital-decay] by [@stevebob] is an +[open-source][orbital-decay-source] turn-based tactical roguelike with a focus +on ranged combat. Deal enough damage to enemies to get through their armour +without breaching the hull of the station, or risk being pulled into the void. +It was made for the [7 Day Roguelike 2021][7drl-2021] game jam. + +Traverse a procedurally-generated space station to reach the fuel bay on the +5th floor. Choose your weapons and upgrades wisely to make it past the +station's former crew - now a horde of ravenous undead. + +Read more about Orbital Decay on its [development blog][orbital-decay-blog]. + +[orbital-decay]: https://gridbugs.itch.io/orbital-decay +[orbital-decay-source]: https://github.com/stevebob/orbital-decay +[@stevebob]: https://github.com/stevebob +[7drl-2021]: https://itch.io/jam/7drl-challenge-2021 +[orbital-decay-blog]: https://www.gridbugs.org/7drl2021-day7/ + +### [Disguiser][disguiser] + +![Title card with game name and a big mansion](disguiser.png) + +[Disguiser][disguiser] ([itch.io][disguiser-itch], [source code][disguiser-src]) +by [@mcneja] +is a coffee-break turn-based stealth game inspired by Thief that +was made for the [7 Day Roguelike 2021][7drl-2021] game jam. +The randomly-generated mansions are loosely based on Chinese courtyard houses, +with symmetry, enclosed gardens, and a public-to-private gradient +from the entrance northward. + +The development process is documented in +a [bunch of devlog posts][disguiser-blog-tag]. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/m5tjbs/7drl_in_rust)_ + +[disguiser]: https://mcneja.github.io/disguiser +[disguiser-blog-tag]: http://playtechs.blogspot.com/search/label/2021-7drl +[disguiser-itch]: https://mcneja.itch.io/disguiser-2021-7drl +[disguiser-src]: https://github.com/mcneja/disguiser +[@mcneja]: http://playtechs.blogspot.com + +### [secbot][secbot-itch] + +![a screenshot with in-game message](secbot.jpg) + +[secbot][secbot-itch] ([web version][secbot-web], [souce code][secbot-src]) +by [Herbert Wolverson][thebracket] is another 7DRL submission: + +> The idea behind SecBot is that an outpost has ceased communications, +> so the morally dubious Bracket Corporation dispatch a security bot +> to find out what happened. +> Upon arrival, it becomes clear that things aren't going well for the colony +> \- so the player rushes around collecting colonists +> and shepherding them back to the spaceship. +> I tried to bake some narrative/flavor into the game, +> and create a fun game you can enjoy over a coffee-break. + +Btw, Herbert is going to give a "Learning Rust With Game Development" talk +at [Rust Meetup Linz on April 22][rust-linz]. + +[secbot-itch]: https://thebracket.itch.io/secbot +[secbot-web]: http://bfnightly.bracketproductions.com/secbot2021 +[secbot-src]: https://github.com/thebracket/secbot-2021-7drl +[rust-linz]: https://rust-linz.at +[thebracket]: https://bracketproductions.com + +### [Bounty Bros.][bounty_bros] + +{{ image_figure( + alt="bounty-bros-character-on-map" + src="bounty_bros.png" + caption="Click the image to play the game in your browser!", + link="https://skipngo.katharostech.com/?asset_url=https://bounty-bros.skipngo.katharostech.com/") }} + +[Bounty Bros.][bounty_bros] is a prototype game similar to the old Legend of +Zelda® games developed by [Katharos Technology][katharostech] as a testing +ground for a future commercial game. + +In the last 2 months Bounty Bros. has gotten a lot of updates. Now you can [play +the game][bounty_bros_webgame] right inside of your browser on desktop or mobile +devices! + +- You can no longer walk through walls or objects. +- You can now walk into buildings. +- The camera follows the player without passing beyond the map borders. +- Rendering is now scaled pixel-perfect. +- Mobile touch controls were added. +- There is a new [retro mode][bounty_bros_retro_mode] that tries to make it + look like the game is running on an old CRT television. + +All of the source code, excluding assets and artwork, was also made available +and split into two independent projects. + +These projects were 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 these projects: + +- [Bevy Retro][bevy_retro] ([forum][skipngo_discussions]) + \- a Bevy plugin for pixel-perfect games. +- [Skip'n Go][skipngo] ([forum][bounty_bros_blog_post]) + \- a simple game engine for making top-down pixel games. + +You can read the full update in the [Blog Post][bounty_bros_blog_post]. + +[bevy_retro]: https://github.com/katharostech/bevy_retro +[bevy_retro_discussions]: https://github.com/katharostech/bevy_retro/discussions +[katharostech]: https://katharostech.com +[skipngo]: https://github.com/katharostech/skipngo +[skipngo_discussions]: https://github.com/katharostech/skipngo/discussions +[bounty_bros]: https://katharostech.com/post/bounty-bros-on-web +[bounty_bros_webgame]: https://skipngo.katharostech.com/?asset_url=https://bounty-bros.skipngo.katharostech.com/ +[bounty_bros_blog_post]: https://katharostech.com/post/bounty-bros-on-web +[bounty_bros_retro_mode]: https://skipngo.katharostech.com/?asset_url=https://bounty-bros.skipngo.katharostech.com/&enable_crt=true&pixel_aspect_ratio=1.3 +[katharos_license]: https://github.com/katharostech/katharos-license + +### [pGLOWrpg][pglowrpg-github] + +![Improved text rendering](pglowrpg_progress.jpg) + +[pGLOWrpg][pglowrpg-github] ([Twitter][pglowrpg-twitter]) by [@Roal_Yr] +is a Procedurally Generated Living Open World RPG, +a long-term project in development, which aims to be a narrative text-based game +with maximum portability and accessibility. + +Recent updates include: + +- Reformatting a print interface, making it very easy to link text UI and code. +- Switching to .ron file format for storing configs and strings. +- Implementing individual strings coloring for better visual perception. + +[@Roal_Yr]: https://twitter.com/Roal_Yr +[pglowrpg-twitter]: https://twitter.com/pglowrpg +[pglowrpg-github]: https://github.com/roalyr/pglowrpg + +### [rusty-bomber] + +![gameplay screenshot wthh an explosion](rusty-bomber.png) + +[rusty-bomber] ([source code][rusty-bomber-src]) by [@rgripper] and [@Cupnfish] +is a BomberMan clone written using Bevy & Rapier that works on desktop and web. + +Check out the [devlog][rusty-bomber-devlog] for more details about +the project's internals. + +[@Cupnfish]: https://github.com/Cupnfish +[@rgripper]: https://github.com/rgripper +[rusty-bomber]: https://rgripper.github.io/rusty-bomber +[rusty-bomber-src]: https://github.com/rgripper/rusty-bomber +[rusty-bomber-devlog]: https://github.com/rgripper/rusty-bomber/blob/548d50470/blog/blog.md + +### Stellary 2 + +{{ image_figure( + alt="Stellary 2 Anti-Missile Laser" + src="stellary2-centered-view.gif" + caption="▶️ Click to [watch the full video](https://twitter.com/CoffeJunkStudio/status/1378719827347509249)", + link="https://twitter.com/CoffeJunkStudio/status/1378719827347509249") }} + +Stellary 2 by [@CoffeJunkStudio][coffe-junk-studio] is a 3D real-time space +shooter in which the player has to control his spaceship to colonize each planet +in the solar system. + +In the last month, the game concept has been overhauled. Most importantly: + +- Planets become inhabitable over time, starting with the outermost one in order + to bring head-to-head matches to an end eventually. +- Full focus on multiplayer, including AIs. +- Players can’t die mid-game anymore. When defeated, they re-spawn and lose a + colony for it (if they have one) instead of dying. This prevents long waiting + times when playing against friends. + +You can follow the development of Stellary 2 on [Twitter][coffe-junk-studio]. + +[coffe-junk-studio]: https://twitter.com/CoffeJunkStudio +[stellary2-ppcv-tweet]: https://twitter.com/CoffeJunkStudio/status/1378719827347509249 + +### [A/B Street] + +![Elevation data in A/B Street](abstreet.jpg) + +[A/B Street] by [@dabreegster] is a traffic simulation game exploring how small +changes to roads affect cyclists, transit users, pedestrians, and drivers, with +support for any city with OpenStreetMap coverage. + +In March, elevation data courtesy of [Eldan] was imported, letting cycling +speeds uphill be adjusted. Importing any area from OpenStreetMap can now be +done from the UI with no command-line experience, and custom travel demand +models based on UK-wide census data can now be generated. Some important +simulation fixes for roundabouts improve gridlock, and [Michael] and [Yuwen] +helped adjust the UI panel layout for smaller screens. + +[A/B Street]: https://github.com/a-b-street/abstreet +[@dabreegster]: https://twitter.com/CarlinoDustin +[Eldan]: https://github.com/eldang/ +[Michael]: https://github.com/michaelkirk +[Yuwen]: https://www.yuwen-li.com/ + +### [Egregoria] + +![Egregoria city at dawn](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. + +The [8th devlog][egregoria-blog-post] was published. +Updates include: + +- Multiplayer based on deterministic lockstep +- Economy revamp inspired by Anno 1800 +- Infinite world using procedural generation +- Many more QoL features + +See also the [YouTube summary video][egregoria-youtube] +of the past 6 months of development. + +[Egregoria]: https://github.com/Uriopass/Egregoria +[@Uriopass]: https://github.com/Uriopass +[egregoria-blog-post]: https://douady.paris/blog/egregoria_8.html +[egregoria-discord]: https://discord.gg/CAaZhUJ +[egregoria-youtube]: https://youtu.be/qH2SKWbRV5I + +### [Gargoyle's Quest] + +![Gargoyle's Quest](gargoyles_quest.png) + +[Gargoyle's Quest] by [@ShamylZakariya] is an implementation of level one +of the 1990 [Gameboy platformer][gargoyle-wiki] built using [wgpu]. + +[Gargoyle's Quest]: https://github.com/ShamylZakariya/Platformer +[@ShamylZakariya]: https://github.com/ShamylZakariya +[gargoyle-wiki]: https://en.wikipedia.org/wiki/Gargoyle%27s_Quest +[wgpu]: https://github.com/gfx-rs/wgpu-rs + +### [Fishgame][fishgame] + +{{ image_figure( + alt="Fishgame" + src="fishgame.gif" + caption="Game footage with the new weapon.") }} + +[Fishgame][fishgame] [(web build)][fishgame-itch] is an online multiplayer game, +created in a collaboration between [Nakama][nakama], an open-source scalable +game server, and the [Macroquad][macroquad] game engine. + +This month: + +- fishgame migrated to [nakama-rs] (featured in this newsletter as well). +- Also a second weapon, the sword, was added to the game. + +[fishgame]: https://github.com/heroiclabs/fishgame-macroquad +[fishgame-itch]: https://fedorgames.itch.io/fish-game?secret=UAVcggHn332a +[nakama]: https://heroiclabs.com/ +[macroquad]: https://github.com/not-fl3/macroquad +[nakama-rs]: https://github.com/not-fl3/nakama-rs + +### [Veloren][veloren] + +{{ image_figure( + alt="Airship" + src="veloren.jpg" + caption="Waiting for the airship to land") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In March, Veloren released 0.9. Lots of work throughout the month was put +towards preparing for this. NPC merchants and trading was merged. Many changes +were made to combat, including buffs and combat. Player-to-player trading was +also implemented. Lots of work was done in optimizing Veloren. This included +significantly improving how long physics was talking, and network improvements. +Metrics tracking was also overhauled to better track the different systems in +Veloren. Pathfinding is also working through an overhaul. A large feature +implemented in March was Airships being merged into the game. This prompted a +redo of how physics in the game is handled. + +A survey was sent out in preparation for the release. A lot of information was +gathered about how players experience Veloren, and the items they like or don't +like. These can all be ready in [devblog #112](https://veloren.net/devblog-112). +This was followed up by the 0.9 release, which turned out to be the largest yet. +At peak, 133 players joined the main server. There were problems throughout the +release party relating to networking, as well as our tick performance. + +March's full weekly devlogs: "This Week In Veloren...": +[#109](https://veloren.net/devblog-109), +[#110](https://veloren.net/devblog-110), +[#111](https://veloren.net/devblog-111), +[#112](https://veloren.net/devblog-112). +[#113](https://veloren.net/devblog-113). + +[veloren]: https://veloren.net + +### [Theta Wave] + +{{ image_figure( + alt="Enemy Formations" + src="theta-wave.gif" + caption="Enemies can now be easily spawned in formations", + link="https://github.com/amethyst/theta-wave") }} + +[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, the ["Foundations"] update was released which included numerous +refactors that improved the accessibility of contributing to the game. + +They are now working on the ["Formations"] update which will organize how +waves of enemies are spawned into the game. + +Notable changes: + +- Formations can be defined in a data file +- New `InvasionFormation` phase where formations of enemies are spawned from + a pool of formations + +[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/ +["Foundations"]: https://github.com/amethyst/theta-wave/releases/tag/v0.1.4 +["Formations"]: https://github.com/amethyst/theta-wave/projects/2 + +### [Harvest Hero][hh_disc] + +![harvest_hero_level](harvest_hero_level_making.gif) + +[Harvest Hero][hh_disc] ([Discord][hh_disc], [Twitter][bmb_twitter]) +by [@bombfuse][bmb_twitter] is an arcade/roguelite where you whack Groobles. +Built on top of [Emerald](#emerald). + +Harvest Hero has undergone a large change, migrating +from semi-randomly generated levels to handcrafted levels +that are randomly selected throughout your playthrough. + +This means using [Ogmo][ogmo] to design levels, +and using [nano-ogmo][nano-ogmo] to import them. + +Updates: + +- General UI update +- Importing ogmo levels via nano-ogmo +- [April Fools demo][gag_demo] + +[hh_disc]: https://discord.gg/CJRbxQn3d9 +[bmb_twitter]: https://twitter.com/bombfuse_dev +[ogmo]: https://ogmo-editor-3.github.io/ +[nano-ogmo]: https://github.com/Bombfuse/nano-ogmo +[gag_demo]: https://bombfuse.itch.io/him-character-demo-harvest-hero + +### [Station Iapetus] + +{{ image_figure( + alt="Station Iapetus Youtube" + src="station-iapetus-youtube.png" + caption="Click on the iamge to see the gameplay video on YouTube", + link="https://youtube.com/watch?v=O_ETjSkVBME") }} + +[Station Iapetus][Station Iapetus] by [@mrDIMAS] is a 3rd person shooter on the +prison Iapetus near the Saturn. +This month's updates include: + +- Inventory fixes and improvements +- Splash damage for grenades +- Weapon recoil +- More items +- Bots now hear player +- More assets +- First level improvements +- Procedural animation of impact for bots +- More sounds +- Separate scene for menu with music +- Pause game when in menu +- More switches in options menu +- Turrets + +[@mrDIMAS]: https://github.com/mrDIMAS +[rg3d]: https://github.com/mrDIMAS/rg3d +[Station Iapetus]: https://github.com/mrDIMAS/StationIapetus +[si-youtube]: https://youtube.com/watch?v=O_ETjSkVBME + +### [Way of Rhea][wor] + +[![Way of Rhea on Steam](wor-capsule.png)][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: + +- A free demo was distributed as part of [Indie Maker Syndicate][wor-ims]'s +online event +- The demo included a number of minor visual improvements [aimed at better +communicating the game's mechanics][wor-visual-mechanics] +- Progress is being made adding [new artwork][wor-art] to the game +- Tools for laying out artwork in game were [improved][wor-art-tools] +- A crash reporter was implemented to give players the option to report issues +directly to [Way of Rhea's Discord][wor-discord]. A writeup will be posted +explaining how it works soon! +- Work has begun on a dialog system for chatting w/ NPCs! + +[wor]: https://store.steampowered.com/app/1110620?utm_campaign=tmirgd&utm_source=n20 +[mason-remaley]: https://twitter.com/masonremaley +[wor-visual-mechanics]: https://twitter.com/masonremaley/status/1375534918646763528 +[wor-ims]: https://indiemakersyndicate.com/ +[wor-art]: https://twitter.com/masonremaley/status/1377693351198216193 +[wor-art-tools]: https://twitter.com/masonremaley/status/1377736615997636611 +[wor-discord]: https://discord.gg/JGeVt5XwPP + +[wor-art]: https://twitter.com/masonremaley/status/1377693351198216193 + +## Engine Updates + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, versions 0.6.1 and 0.6.2 were released, featuring: + +- Support for blend modes and premultiplied alpha +- Scissor rectangles (useful for UI rendering) +- Word wrapping for text +- More events and methods for tracking/controlling the window's state +- Bugfixes and docs improvements + +For more details, see the [changelog][tetra-changelog]. + +Additionally, a [template repository][tetra-template] has been created, +demonstrating some useful patterns for structuring a Tetra project. + +[Tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md +[tetra-template]: https://twitter.com/17cupsofcoffee/status/1357750836370284544 + +### [Starframe] + +![Current state of starframe graphics and physics](starframe.gif) + +[Starframe] by [@molentum] is a work-in-progress game engine for physics-y +sidescrolling 2D games. + +This month, [its physics engine was revamped once more][sf-update-tweet] +(for the last time, hopefully), +implementing a modern solver method called Extended Position-Based Dynamics. +Also, [a blog post][sf-blog-post] was published, covering the +development of the physics engine so far in a great deal of mathematical +detail. + +[starframe]: https://github.com/m0lentum/starframe +[@molentum]: https://twitter.com/molentum_ +[sf-blog-post]: https://molentum.me/blog/starframe-constraints/ +[sf-update-tweet]: https://twitter.com/molentum_/status/1360723470414450688 + +### Emerald + +![emerald_logo](em_desktop_icon.png) + +[Emerald][emerald_github] by [@bombfuse][bombfuse_twitter] +is a 2D game engine focused on being as portable as possible. + +The ultimate goal of Emerald is to be a fully featured engine +that you can slap onto any device with relative ease. +It's currently able to run on WASM, Raspberry Pi, Mac, Windows, and Linux +thanks to [miniquad][miniquad_git]. + +Features include physics via [rapier2d][rapier_2d], +ECS via [hecs][hecs_git], and font rendering via [fontdue][fontdue_git]. + +Recent updates: + +- Rendering to textures was added ([example][em_render_texture_example]). +- [WASM game sample][em_wasm_example]. + +[bombfuse_twitter]: https://twitter.com/bombfuse_dev +[emerald_github]: https://github.com/Bombfuse/emerald +[rapier_2d]: https://github.com/dimforge/rapier +[miniquad_git]: https://github.com/not-fl3/miniquad +[em_wasm_example]: https://bombfuse.itch.io/him-character-demo-harvest-hero +[em_render_texture_example]: https://github.com/Bombfuse/emerald/blob/eb38d868a/examples/render_to_texture.rs +[hecs_git]: https://github.com/Ralith/hecs +[fontdue_git]: https://github.com/mooman219/fontdue + +### [rg3d] + +![rg3d Youtube](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: + +- Context menus and tooltips (huge thanks to [MinusGix]). +- Performance improvements for UI. +- Parallax Mapping. +- Ability to enable/disable scenes. +- Expansion strategies for TreeView. +- LOD system fixes. +- Graphical fixes. +- First version of engine's architecture overview. +- Various bug fixes and small improvements. + +[Editor][rusty-editor] updates: + +- Ability to edit collision groups and mask for colliders. +- Ability to clear command stack. +- Ability to change render path for meshes. +- LOD editor. +- "Collapse All", "Expand All", "Locate Selection" buttons for world outliner. +- "Fit Collider" feature fixes. +- Picking fixes. +- Change selection when paste from clipboard. +- "Slow" and "Fast" camera movement modifiers. +- Navmesh selection fixes. +- Simple TBN visualizer. +- Parallax mapping switch in settings. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rusty-editor]: https://github.com/mrDIMAS/rusty-editor +[MinusGix]: https://github.com/MinusGix + +### [Oxygengine v0.16.0][oxygengine-git] + +{{ image_figure( + alt="Oxygengine + RAUI integration", + src="oxygengine-raui-integration.gif", + caption="Integration of RAUI (UI/UX) crate with Oxygengine game engine") }} + +[Oxygengine][oxygengine-git] by [@PsichiX][psichix-twitter] is the hottest +HTML5 + WASM game engine for games written in Rust with web-sys. +The goal of this project is to combine professional game development tools under +one highly modular toolset. + +- Version 0.16.0 was focused on integration of [RAUI][raui-git] crate into the + engine to allow building rich UI/UX experience for your games using declarative + mode UI composition (which now makes currently used simple UI Elements feature + deprecated and it's gonna be removed at some point in the near future). +- In addition to that [basic web game demo][oxygengine-basic-demo] + and [pokemon-like RPG demo][oxygengine-rpg-demo] were enhanced with new UI showing + how to build UI/UX with RAUI. +- Next months will be focused on making RPG showing + full potential of what you can do with RAUI in Oxygengine, as well as remaking + Visual Novel module to be entirely based on RAUI in a way similar to how RenPy + is made! + +[psichix-twitter]: https://twitter.com/psichix +[oxygengine-git]: https://github.com/PsichiX/Oxygengine +[oxygengine-basic-demo]: https://github.com/PsichiX/Oxygengine/tree/master/demos/basic-web-game +[oxygengine-rpg-demo]: https://github.com/PsichiX/Oxygengine/tree/master/demos/pokemon + +### [Bevy v0.5][bevy-blog] + +{{ image_figure( + alt="PBR material example" + src="bevy_pbr.png" + caption="Material grid with varying PBR properties") }} + +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. It is +[free and open source][bevy-git] forever! + +Bevy 0.5 was a massive community effort. You can check out the +[full release blog post here][bevy-blog], but here are some highlights: + +- Physically Based Rendering (PBR). +- GLTF Improvements, such as support for PBR textures and a new top-level GLTF + asset type. +- Bevy ECS V2: a complete rewrite of the Bevy ECS core with a hybrid component + storage model, Archetype Graphs, stateful queries, and across-the-board performance + improvements. +- A brand new Parallel System Executor packed with features: explicit system + dependencies, system labels, system sets, improved run criteria, + and increased parallelism. +- Reliable change detection: efficiently query changes to any component or + resource at any point in time (even across frames). +- State System Rewrite: a new stack-based state system that makes running systems + for different states (ex: menus vs in-game) much easier. +- Rich text: style text "spans" with different colors / fonts while still + respecting layout. +- HIDPI text: render crisp text at any resolution. +- 2D world space text, world to screen space conversions, 2d/3d orthographic + camera improvements, render layers, sprite flipping, improved color space handling, + wireframes, timer improvements, and more! + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/mljg39/bevy_05), +[Hacker News](https://news.ycombinator.com/item?id=26716166), +[Twitter](https://twitter.com/cart_cart/status/1379514923819012097)_ + +[bevy]: https://bevyengine.org +[bevy-git]: https://github.com/bevyengine/bevy +[bevy-blog]: https://bevyengine.org/news/bevy-0-5 + +## Learning Material Updates + +### [Robo Instructus Is a Coding Game Built Entirely in Rust][robo-article] + +![A screenshot from the middle of the game](robo.jpg) + +This month Tammy Xu published an article about [Alex Butler]'s two-year journey +of creating [Robo Instructus][robo]. +The article touches lots of topics like: +why a custom game engine in Rust was choosen, design of the custom +scripting language, and game design of programming puzzles. + +[robo-article]: https://builtin.com/software-engineering-perspectives/rust-puzzle-game +[Alex Butler]: https://twitter.com/bigabgames +[robo]: https://store.steampowered.com/app/1032170/Robo_Instructus + +### [Bevy Cheatbook: Major Overhaul for Bevy 0.5][bevy_cheatbook] + +The Unofficial Bevy Cheatbook by @jamadazi is a practical reference book for +the [Bevy Game Engine][bevy]. It teaches programming patterns, features, and +solutions to common problems. Written to be concise and easy to learn from. + +The book recently got a major overhaul for the big new Bevy 0.5 release. Many +pages were expanded or rewritten, new content added, and community feedback +addressed. + +If you are interested in Bevy, this book is now one of the most detailed +learning resources. Have fun making cool things with Bevy! + +[bevy_cheatbook]: https://bevy-cheatbook.github.io +[bevy]: https://bevyengine.org + +### [Bevy Game Template][bevy-game-template] + +[Bevy game template][bevy-game-template] by [@nikl_me][nikl_twitter] +is a template repository for a Bevy game. + +The goal is to present a possible structure for Bevy games and at the +same time reduce the amount of copy paste when starting a new project. +The repository includes a GitHub workflow for Linux, MacOS, and Windows builds +(WASM will be supported soon) and comes with a small, opinionated example game. + +[bevy-game-template]:https://github.com/NiklasEi/bevy_game_template +[nikl_twitter]: https://twitter.com/nikl_me + +### [Reverse-Engineering NES Tetris to Add Hard Drop][tetris-hard-drop] + +{{ image_figure( + alt="NES Tetris with Hard Drop and Ghost Piece" + src="tetris-hard-drop.gif" + caption="NES Tetris with Hard Drop and Ghost Piece") }} + +A [blog post][tetris-hard-drop] describing the process of reverse-engineering +the rendering and input-handling logic in the NES version of Tetris, and using +a [rust embedded domain-specific language][tetris-hard-drop-dsl-example] to +make a [patching tool][tetris-hard-drop-patch-tool] that generates code (6502 +machine code) to add hard drop (instantly dropping the current piece) and to +render a ghost piece (the dotted outline showing where the current piece will +land). + +The patching tool uses the crate +[mos6502_assembler][tetris-hard-drop-assembler] to specify 6502 assembly in +rust and generate machine code. Many of the reverse-engineering experiments +were done using [this rust NES emulator][tetris-hard-drop-nes-emulator]. The +result is available as an [IPS Patch][tetris-hard-drop-ips-patch]. + +_Discussions: +[Hacker News](https://news.ycombinator.com/item?id=26530604), +[/r/rust](https://reddit.com/r/rust/comments/ma6jqz/using_a_rust_dsl_to_add_hard_drop_to_nes_tetris)_ + +[tetris-hard-drop]: https://www.gridbugs.org/reverse-engineering-nes-tetris-to-add-hard-drop +[tetris-hard-drop-nes-emulator]: https://github.com/stevebob/mos6502/tree/master/nes-emulator +[tetris-hard-drop-assembler]: https://github.com/stevebob/mos6502/tree/master/assembler +[tetris-hard-drop-ips-patch]: https://github.com/stevebob/mos6502/raw/master/tetris-hard-drop-patcher/tetris-hard-drop.ips +[tetris-hard-drop-patch-tool]: https://github.com/stevebob/mos6502/tree/master/tetris-hard-drop-patcher +[tetris-hard-drop-dsl-example]: https://github.com/stevebob/mos6502/blob/master/tetris-hard-drop-patcher/src/main.rs#L23 + +### [Tutorial: Writing a tiny Entity Component System in Rust][ecs-in-rust] + +[@kettlecorn][kettlecorn_twitter] wrote +a beginner-friendly [tutorial][ecs-in-rust] that dives into the +inner workings of the Entity-Component-System pattern. +The tutorial walks through a minimalist ECS +implementation to illustrate how the pattern works, and +why it's useful. + +_Discussion: +[/r/rust](https://reddit.com/r/rust/comments/m88ywa/tutorial_writing_a_tiny_entity_component_system)_ + +[kettlecorn_twitter]: https://twitter.com/kettlecorn +[ecs-in-rust]:https://ianjk.com/ecs-in-rust/ + +### Writing a 3D Shooter Using rg3d + +[![Demo of the third part: shooting at a moving zombie](rg3d-tut.jpg)][rg3d-tut3] + +[@mrDIMAS] started a tutorial series about making a 3D shooter +using the [rg3d] game engine. +So far three parts were released: + +- ["Character Controller"][rg3d-tut1] - engine & editor basics, + simple character controller. +- ["Weapons"][rg3d-tut2] - player weapon with recoil and simple impact effect. +- ["Bots, AI"][rg3d-tut3] - bots, actor animations, and a simple AI. + +[rg3d-tut1]: https://rg3d.rs/tutorials/2021/03/05/tutorial1.html +[rg3d-tut2]: https://rg3d.rs/tutorials/2021/03/09/tutorial2.html +[rg3d-tut3]: https://rg3d.rs/tutorials/2021/03/11/tutorial3.html + +### [Using Tests to Speed Up Your Feedback Loop][tdd-feedback] + +![Tile map with basic agents and resources](robotcards.png) + +[@philipk] shared a [blog post][tdd-feedback] about using tests not only +for verifying correctness, but also for faster feedback loops in some +circumstances. [RobotCards] - a WIP game that uses the Legion ECS - +is used as a practical example. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/man8u1/using_tests_to_speed_up_your_feedback_loop)_ + +[@philipk]: https://github.com/philipk +[tdd-feedback]: https://philipk.github.io/devblog/blog/tdd-gamedev-feedback-loop +[RobotCards]: https://philipk.github.io/devblog/robotcards + +## Library & Tooling Updates + +### [genesis] + +[genesis] by [@StygianLightning] is a library for generating statically-typed +ECS worlds by using a procedural macro. + +Unlike other ECS libraries and frameworks, which do dynamic borrow-checking +at runtime, you define all your components upfront and generate +a completely statically typed ECS, with borrow checking done at compile time. +Gone are the days of passing a World between functions, +only to encounter a dynamic borrow checking problem! + +genesis is a lightweight ECS library that doesn't provide any scheduling capabilities. +Instead, you can query the storage for each component type directly. + +[genesis]: https://github.com/StygianLightning/genesis +[@StygianLightning]: https://github.com/StygianLightning + +### [Shipyard v0.5][shipyard-0-5] + +[Shipyard] by [@leudz] is an ECS library built on top of sparse sets +and focused on usability and speed. + +Main changes of the [latest version][shipyard-0-5]: + +- The `system!` macro, packs, and `Shiperator` trait were removed. +- Bulk add entity - faster way than adding entities one by one. +- Accurate modification tracking by default. +- No more `try_*` - now all functions that can fail because of storage access + return a Result while almost all others panic. +- More flexible workload building and debugging. +- Customizable views and storages. +- Significant performance improvements. + +[Shipyard]: https://crates.io/crates/shipyard +[shipyard-0-5]: https://users.rust-lang.org/t/shipyard-0-5-release/57203 +[@leudz]: https://github.com/leudz + +### [Planck ECS] + +![planck logo](planck_ecs.png) + +[Planck ECS] ([GitHub][Planck ECS], [Blog][planck_blog], +[Patreon][planck_patreon]) by [@jojolepro] +is a brand new minimalist and safe ECS library. + +The 1.0 release happened in the past month, featuring: various fixes, +quality of life improvements, removal of unsafe code and completion of tests and +documentation. + +The library is currently considered completed, which means that all planned +features are implemented, tested and benchmarked. Future updates will focus on +performance improvements and usability improvements. + +[Planck ECS] is also used in [Shotcaller][planck_shotcaller] which is featured in +this newsletter too. + +You can read more about the library on the [Blog][planck_blog] and on +[GitHub][Planck ECS]. + +_Discussions: [/r/rust][planck_reddit]_ + +[@jojolepro]: https://github.com/jojolepro +[Planck ECS]: https://github.com/jojolepro/planck_ecs +[planck_shotcaller]: https://github.com/amethyst/shotcaller +[planck_blog]: https://jojolepro.com/blog/2021-01-13_planck_ecs/ +[planck_patreon]: https://patreon.com/jojolepro +[planck_reddit]: https://reddit.com/r/rust/comments/m73ema/yet_another_ecs_library_except_much_safer + +### [hecs] v0.5 + +[hecs] is a fast, lightweight, and unopinionated archetypal ECS library. + +Version 0.5 introduces a column-major serialization mode. This imitates the +in-memory data layout, enabling higher performance than the already-fast +row-major serialization mode. Because columnar layout places similar data +nearby, it also improves the effectiveness of compression. + +Other changes include major optimizations to spawning entities and +adding/removing components, inspired by the archetype graph model recently +adopted by bevy. + +[hecs]: https://github.com/Ralith/hecs + +### [rkyv] v0.5 + +[rkyv] is a zero-copy deserialization framework for Rust. It's similar to FlatBuffers +and Cap'n Proto and can be used for data storage and messaging. + +A [benchmark][rust-serialization-benchmark] was put together to compare rkyv +against other leading serialization solutions and gather feedback and use +cases for development. A [summary and analysis][rkyv-is-faster-than] of the +results is also available. + +Version 0.5 is hot off the presses and rolls up features from the 0.4 +development cycle: + +- Derive macros can now implement `PartialEq` and `PartialOrd` between + archived and unarchived types. +- Custom type bounds for serialization and deserialization can be added + with derive attributes. +- Helper types like [AlignedVec][rkyv-AlignedVec] and + [Infallible][rkyv-Infallible] were introduced to improve ergonomics. +- `const_generics` are now enabled by default. +- Helper functions have been added to make getting root objects easier. +- Several bugfixes and performance improvements. + +A [feedback issue][rkyv-feedback] is still open for providing feedback on +further development. + +[rkyv]: https://github.com/djkoloski/rkyv +[rust-serialization-benchmark]: https://github.com/djkoloski/rust_serialization_benchmark +[rkyv-is-faster-than]: https://davidkoloski.me/blog/rkyv-is-faster-than +[rkyv-AlignedVec]: https://docs.rs/rkyv/0.5.0/rkyv/struct.AlignedVec.html +[rkyv-Infallible]: https://docs.rs/rkyv/0.5.0/rkyv/struct.Infallible.html +[rkyv-feedback]: https://github.com/djkoloski/rkyv/issues/67 + +### [gba] v0.4 + +[gba] is a crate for making GBA games with Rust. +This month it was updated to 0.4! +It's using the new `thumbv4-none-eabi` target, and has +an overall simpler build process than before. + +The project is still a work in progress, but if you've wanted to try +an embedded experience this is an easy way to test the waters. +No hardware required! +Compiled binaries can be run in a GBA emulator just fine. + +[gba]: https://github.com/rust-console/gba + +### [kira] + +[kira] by [@tesselode] is a game audio library tailored to composers and other +people who need expressive audio. + +v0.5.0 was released with mixer send tracks, new effects, and playback position tracking +for instances, as well as a variety of smaller improvements. + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/m0llxm/kira_game_audio_library_v050), +[Twitter](https://twitter.com/tesselode/status/1368984205947006976)_ + +[Kira]: https://github.com/tesselode/kira +[@tesselode]: https://twitter.com/tesselode + +### [Quinn] v0.7 + +[Quinn] is an async-friendly implementation of the state-of-the-art QUIC +transport protocol soon to be standardized by the IETF. + +QUIC is a uniquely versatile foundation for building application protocols. Its +support for low-latency communication, multiplexing, fine-grained reliability, +and security make an excellent basis for real-time game networking, providing an +array of powerful primitives unavailable on UDP or TCP. + +[Quinn 0.7][quinn_release] introduces support for Tokio 1.0 and many +optimizations and bug fixes, and updates to [draft 32][quic_32] of the proposed +standard. With last call underway in the IETF, the devs expect to release an +implementation of the final standard soon with no major changes. + +[Quinn]: https://github.com/quinn-rs/quinn +[quinn_release]: https://github.com/quinn-rs/quinn/releases/tag/0.7.0 +[quic_32]: https://tools.ietf.org/html/draft-ietf-quic-transport-32 + +### [nakama-rs] + +[nakama-rs] is a pure Rust implementation of the [Nakama] protocol. + +[Nakama] is an open-source server designed to power modern games and apps. +Features include user accounts, chat, social, matchmaker, realtime multiplayer, +and much [more][heroiclabs]. + +Being pure Rust, [nakama-rs] brings the full API and socket options to any +platform Rust works on. + +[nakama]: https://github.com/heroiclabs/nakama +[heroiclabs]: https://heroiclabs.com +[nakama-rs]: https://github.com/not-fl3/nakama-rs + +### [smaa-rs] + +The [smaa-rs] library provides fast and high quality post-process +anti-aliaising using the [SMAA algorithm]. It is designed to be +easy to integrate into other [wgpu] applications with only a few +added lines of code. + +The 0.2 series released this month includes a steamlined API +which makes it easier to enable/disable anti-aliasing via a +configuration setting. Currently SMAA 1x is supported with +SMAA S2x likely to be added depending on interest. + +[smaa-rs]: https://github.com/fintelia/smaa-rs +[SMAA algorithm]: http://www.iryoku.com/smaa/ + +### [wgpu] + +{{ image_figure( + alt="voxel bunny on wgpu" + src="wgpu-conservative-bunny.png" + caption="Voxel Bunny rendering with conservative rasterization") }} + +[wgpu] is a [WebGPU] implementation in Rust. It is safe, efficient, +and portable: can target both native (Vulkan/D3D/Metal) and the Web. + +Most progress in March was focused around [WGSL] shaders and validation. +[naga] has seen a lot of improvements in the SPIR-V and WGSL parsing, as well +as backend code generation. Most importantly, it now fully validates both +statements and expressions. No more accidental foot shots from adding vec2 +and vec3 in the shaders! + +The last and the biggest (in terms of shader complexity) example - "water" +has been successfully ported to WGSL 🎉. + +A small addition to our native-only features - conservative rasterization +feature - was added by [@wumpf] and demonstrated on a voxel bunny 🐇 + +Finally, there is a blog post on Mozilla [graphics team blog] about the +progress using [wgpu] in Gecko. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/mgvd8d/last_big_wgpurs_example_shaders_are_fully_ported)_ + +[naga]: https://github.com/gfx-rs/naga +[wgpu]: https://github.com/gfx-rs/wgpu +[WebGPU]: https://gpuweb.github.io/gpuweb/ +[WGSL]: https://gpuweb.github.io/gpuweb/wgsl/ +[@wumpf]: https://github.com/Wumpf +[graphics team blog]: https://mozillagfx.wordpress.com/2021/03/10/webgpu-progress/ + +### [rust-gpu v0.3][rust-gpu-v0-3] + +{{ image_figure( + alt="A Sci-Fi helmet model" + src="grr-gltf.jpg" + caption="The Khronos Sci-Fi helmet model in a [glTF model viewer](https://github.com/msiglreith/grr-gltf) +created by [@msiglreith](https://github.com/msiglreith) using rust-gpu") }} + +[rust-gpu] is a new codegen backend by Embark Studios for Rust, aimed at making +Rust a first class language for writing GPU shaders! +This past month was the [release of rust-gpu v0.3][rust-gpu-v0-3]. +Some of the highlights: + +- A lot of technical debt that was visible to users + (such as `#[allow(unused_attributes)]`) was removed. +- rust-gpu now also supports basic ADT enums and has a whole inference pass + for storage class variables. +- All Embark's shaders for their internal engine + [are now written in Rust](https://twitter.com/repi/status/1365256477569667075) + \- no more GLSL/HLSL, just Rust for all CPU & GPU code! + +Full release notes are available [here][rust-gpu-v0-3]. + +For more information on how to get started with using rust-gpu in your projects, +check out [the Rust-GPU Dev Guide](https://embarkstudios.github.io/rust-gpu/book/). + +_Discussions: +[/r/rust](https://reddit.com/r/rust/comments/lxpcc2/announcing_rustgpu_v03)_ + +[rust-gpu]: https://shader.rs +[rust-gpu-v0-3]: https://github.com/EmbarkStudios/rust-gpu/releases/tag/v0.3.0 +[grr-gltf]: https://github.com/msiglreith/grr-gltf +[@msiglreith]: https://github.com/msiglreith + +### [rafx] + +{{ image_figure( + alt="rafx tilemap rendering" + src="rafx-tilemap-rendering.png" + caption="Rafx rendering an example tilemap from [LDTK level editor](https://ldtk.io)") }} + +Rafx is a multi-backend renderer that optionally integrates with the +[distill][rafx-distill] asset pipeline. This month, a fourth layer +was introduced to the library, `rafx-renderer`. It provides a plugin system, +simplifying framework setup in a project. + +The demo now includes a tilemap renderer that integrates with the [LDTK level +editor][rafx-ldtk]. The `distill` integration processes the level files offline +for very efficient loading/rendering at runtime. + +Sprite rendering in general is also much faster now. Scenes with 40k-100k +sprites can render at 60fps (measured on M1 mini) depending on +transparency/distinct Z values in the scene. New examples demonstrate tilemap +and sprite rendering. + +Early work was also done to reuse descriptor sets across frames and reduce +dynamic memory allocation when working with descriptor sets. Rafx also +includes more options for HDR tonemapping. + +[rafx]: https://github.com/aclysma/rafx +[rafx-distill]: https://github.com/amethyst/distill +[rafx-ldtk]: https://ldtk.io + +### [FemtoVG] + +![femtovg](femtovg.png) + +FemtoVG is a 2D canvas like vector graphics library based on nanovg that has +been previously featured in this newsletter. + +This month, the FemtoVG team has implemented a new rendering backend based on +the `wgpu` library. This work is being done in this [fork][femtovg-fork] of +FemtoVG and will be merged into the main repo soon. The team is currently +looking for users to try out the new backend and provide feedback. + +Join the [FemtoVG Discord channel](https://discord.gg/V69VdVu). + +[FemtoVG]: https://github.com/femtovg/femtovg +[femtovg-fork]: https://github.com/adamnemecek/femtovg + +### Kajiya + +![A race car in its natural habitat inspired by the Cornell Box](kajiya.gif) + +Kajiya by [@h3r2tic] is a real-time global illumination renderer. + +It utilizes Vulkan Ray Tracing via [ash][ash] and [hassle-rs][hassle-rs] to +implement multi-bounce light transport in fully dynamic scenes. By shooting +only two rays per pixel on average, it keeps performance high; thanks to a +voxel-based light cache and extensive spatio-temporal filtering, it keeps +noise low. It supports physically-based rendering of [GLTF][gltf-rs] scenes, +and achieves a close match to reference path-tracing. + +Kajiya is still in its infancy, and not yet available to the public, but you +can get glimpses of its development by following the author on [Twitter][h3r2tic-twitter]. + +[ash]: https://github.com/MaikKlein/ash +[hassle-rs]: https://github.com/Traverse-Research/hassle-rs +[gltf-rs]: https://github.com/gltf-rs/gltf +[@h3r2tic]: https://github.com/h3r2tic +[h3r2tic-twitter]: https://twitter.com/h3r2tic + +### [Bevy Retro][bevy_retro] + +{{ image_figure( + alt="pixel-perfect-collision-demo" + src="bevy_retro.gif" + caption="Pixel-perfect collision [example](https://github.com/katharostech/bevy_retro/tree/master/examples#collisions)") }} + +[Bevy Retro][bevy_retro] is a new [Bevy] plugin designed for making pixel-perfect +games. + +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. + +Bevy Retro features: + +- Web and desktop support out of the box - it even runs in Safari on iOS! +- Integer pixel coordinates - no need to round floats to keep pixels aligned! +- Support for sprites, sprite sheets and animations. +- A super simple hierarchy system. +- A custom, scaled, pixel-perfect renderer with three camera modes: fixed width, + fixed height, and letter-boxed. +- An [LDtk](https://ldtk.io) map loading plugin. +- Pixel-perfect collision detection. +- Support for post-processing effects using custom shaders or the built-in CRT filter. +- Support for custom pixel aspect ratios. + +Feel free to discuss the project and provide feedback +[on GitHub](https://github.com/katharostech/bevy_retro/discussions). + +[bevy_retro]: https://github.com/katharostech/bevy_retro +[Bevy]: https://bevyengine.org +[katharos_license]: https://github.com/katharostech/katharos-license +[bevy_retro_collision_example]: https://github.com/katharostech/bevy_retro/tree/master/examples#collisions + +### [RAUI v0.28.1][raui-git] + +{{ image_figure( + alt="RAUI + Tetra TODO app" + src="raui-tetra-todo-app-material-ui.gif" + caption="RAUI + Tetra TODO app demo") }} + +[RAUI][raui-git] by [@PsichiX][psichix-twitter] is a Renderer Agnostic User +Interface crate that is based on declarative mode UI composition similar to +React.js and UE4 Slate system. + +This month's updates: + +- Advanced navigation system mainly for the use in [Oxygengine][oxygengine-git] + game engine. +- [Tesselation renderer][raui-tesselation] module to allow buildings + Vertex + Index + Batch buffers for backends that allows to render meshes. +- [Tetra integration][raui-tetra] crate that allows use of RAUI with [Tetra][Tetra] + game framework. +- Porting [demos][raui-demos] to Tetra which became one of two mainly supported + backends for RAUI. + +[raui-git]: https://github.com/PsichiX/raui +[raui-tesselation]: https://github.com/PsichiX/raui/tree/master/raui-tesselate-renderer +[raui-tetra]: https://github.com/PsichiX/raui/tree/master/raui-tetra-renderer +[raui-demos]: https://github.com/PsichiX/raui/tree/master/demos + +### [egui-macroquad] + +{{ image_figure( + alt="Code example of usage of this library." + src="egui-macroquad.png" + caption="Code example of usage of this library.") }} + +[egui-macroquad] is a small library to use [egui][egui-git] inside of +[macroquad][macroquad-git]. It consists only of two functions. + +Used in [Portal Explorer][portal-explorer], see the section above. + +[egui-macroquad]: https://github.com/optozorax/egui-macroquad +[macroquad-git]: https://github.com/not-fl3/macroquad +[egui-git]: https://github.com/emilk/egui + +### [building-blocks] v0.6.0 + +![LOD Terrain](building-blocks-lod-terrain.jpg) + +In v0.6.0, the [building-blocks] voxel library brings a couple important features +for scaling up to large maps: + +- pyramids for level of detail +- multichannel arrays + +There is still much work to be done to optimize the voxel mesh LOD at large +scales and improve the cosmetics of LOD transitions, but the preliminary work +has allowed us to demonstrate the feasibility of this approach with a new demo +that you can view [here](https://youtube.com/watch?v=fCP8xZYJiSI). + +Full release notes are available on [here][blocks-notes]. + +_Discussions: +[/r/rust](https://reddit.com/r/rust_gamedev/comments/ma76je/buildingblocks_v060)_ + +[blocks-notes]: https://github.com/bonsairobo/building-blocks/releases/tag/v0.6.0 +[building-blocks]: https://github.com/bonsairobo/building-blocks + +### [WhatTheFrame] + +![whattheframe gui](whattheframe.png) + +[WhatTheFrame] by [@JMS55] +is a frame-based cpu profiler crate along with a [GTK] ([gtk4-rs]) based GUI. + +This project aims to answer the question: Which frames of my game are slow, and why? + +It aims to be simple to use, consisting of only 3 functions: Call `let _r = Profiler::new_frame()` +at the start of each frame, `let _r = Profiler::new_task("task_name")` whenever you +want to profile a task, and finally `Profiler::end_profiling()` once at the end. + +You can then open the resulting `.wtf` profile in the GUI and analyze the results. + +This month was spent designing and implementing both the GUI and profiler crate. +The core functionality of both programs are complete, and all that remains is +cleanup, tweaks, optimization, and finally packaging the GUI up. + +[WhatTheFrame]: https://github.com/JMS55/whattheframe +[@JMS55]: https://github.com/JMS55 +[GTK]: https://gtk.org/ +[gtk4-rs]: https://github.com/gtk-rs/gtk4-rs#gtk4-rs- + +### [Bitmapflow] + +{{ image_figure( + alt="Bitmapflow interpolating a walking mech animation" + src="bitmapflow.gif" + caption="Bitmapflow interpolating a walking mech animation") }} + +Bitmapflow ([GitHub][Bitmapflow-GitHub]) by [@bauxitedev] is a tool to help you +generate [inbetweens] for animated sprites. In other words, it makes your +animations smoother. It uses [optical flow] to try to guess how the pixels move +between frames, and blends them accordingly. The results are far from perfect, +and probably require some editing by hand afterwards, but it can produce decent +results. + +It supports loading and saving animated gifs, spritesheets and individual +frames. + +The tool is written using godot-rust and executables are available for Windows, +although Linux support will be coming soon. (If you compile the program from +source, it already works on Linux.) + +A full demonstration and walkthrough of the program is available on +[YouTube][Bitmapflow-Youtube]. + +You can try it out yourself on [itch.io][Bitmapflow-Itch]. + +_Discussions: [/r/rust_gamedev][Bitmapflow-Reddit]_ + +[Bitmapflow]: https://github.com/Bauxitedev/bitmapflow +[Bitmapflow-GitHub]: https://github.com/Bauxitedev/bitmapflow +[Bitmapflow-Youtube]: https://youtube.com/watch?v=rC359dDAMiI +[Bitmapflow-Reddit]: https://reddit.com/r/rust_gamedev/comments/mjw90q/introducing_bitmapflow_a_tool +[Bitmapflow-Itch]: https://bauxite.itch.io/bitmapflow +[@bauxitedev]: https://twitter.com/bauxitedev +[inbetweens]: https://en.wikipedia.org/wiki/Inbetweening +[optical flow]: https://en.wikipedia.org/wiki/Optical_flow + +### [Graphite][graphite-repo] + +{{ image_figure( + alt='"Graphite" drawn using the circles and rectangles of the new tool drawing system' + src="graphite-tool-system-progress.png" + caption='"Graphite" drawn using the circles and rectangles of the new tool drawing system') }} + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-progress vector and +raster graphics editor built on a nondestructive node-based workflow. + +The team has grown from 1 to 5 in the past month and major progress was made +building core architectural Rust code. A large accomplishment was designing the +[software architecture diagram][graphite-architecture]. + +The current editor now has functional Select, Rectangle, and Ellipse tools +thanks to the newly-added tool state machine and SVG viewport drawing. The UI +now also implements tool-related icons and buttons, bringing it closer to +parity with the design mockup. The team also set up a Web/Rust-WASM build +system, GitHub CI to confirm PRs compile, and put together +[starter documentation][graphite-docs] for the codebase, UX design, and manual. + +Graphite is making rapid progress towards becoming a nondestructive, 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://github.com/GraphiteEditor/Graphite/blob/master/README.md#discord +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-architecture]: https://files.keavon.com/-/CostlyViolentPurplemarten/Architecture_Diagram.png +[graphite-docs]: https://github.com/GraphiteEditor/Graphite/blob/master/docs/index.md + +## Requests for Contribution + + + +- [femtovg is looking for help with the wgpu backend][femtovg-help]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [gfx-rs's "contributor-friendly" issues][gfx-issues]. +- [wgpu's "help wanted" issues][wgpu-help-wanted]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [Amethyst's "good first issue" issues][amethyst-issues]. +- [A/B Street's "good first issue" issues][abstreet-issues]. +- [Mun's "good first issue" issues][mun-issues]. +- [SIMple Mechanic's good first issues][simm-issues]. +- [Bevy's "good first issue" issues][bevy-issues]. + +[femtovg-help]: https://reddit.com/r/rust/comments/mfuo4m/femtovg_2d_vector_graphics_crate_is_looking_for +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly +[wgpu-help-wanted]: https://github.com/gfx-rs/wgpu-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue + +------ + +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](https://reddit.com/r/rust/comments/mo72tu/this_month_in_rust_gamedev_20_march_2021), +[Twitter](https://twitter.com/rust_gamedev/status/1380907528201076741), +[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/020/kajiya.gif b/content/news/020/kajiya.gif new file mode 100644 index 000000000..f937de2bd Binary files /dev/null and b/content/news/020/kajiya.gif differ diff --git a/content/news/020/minewars.jpg b/content/news/020/minewars.jpg new file mode 100644 index 000000000..0c1c8b0d3 Binary files /dev/null and b/content/news/020/minewars.jpg differ diff --git a/content/news/020/name-needed.gif b/content/news/020/name-needed.gif new file mode 100644 index 000000000..21d0cb760 Binary files /dev/null and b/content/news/020/name-needed.gif differ diff --git a/content/news/020/orbital-decay.gif b/content/news/020/orbital-decay.gif new file mode 100644 index 000000000..7428b1d07 Binary files /dev/null and b/content/news/020/orbital-decay.gif differ diff --git a/content/news/020/outer-wonders.gif b/content/news/020/outer-wonders.gif new file mode 100644 index 000000000..76b792bd6 Binary files /dev/null and b/content/news/020/outer-wonders.gif differ diff --git a/content/news/020/oxygengine-raui-integration.gif b/content/news/020/oxygengine-raui-integration.gif new file mode 100644 index 000000000..98e363ffd Binary files /dev/null and b/content/news/020/oxygengine-raui-integration.gif differ diff --git a/content/news/020/pglowrpg_progress.jpg b/content/news/020/pglowrpg_progress.jpg new file mode 100644 index 000000000..ad9bc9d1f Binary files /dev/null and b/content/news/020/pglowrpg_progress.jpg differ diff --git a/content/news/020/planck_ecs.png b/content/news/020/planck_ecs.png new file mode 100644 index 000000000..432792eaa Binary files /dev/null and b/content/news/020/planck_ecs.png differ diff --git a/content/news/020/portal-explorer.png b/content/news/020/portal-explorer.png new file mode 100644 index 000000000..416905397 Binary files /dev/null and b/content/news/020/portal-explorer.png differ diff --git a/content/news/020/rafx-tilemap-rendering.png b/content/news/020/rafx-tilemap-rendering.png new file mode 100644 index 000000000..036bf35af Binary files /dev/null and b/content/news/020/rafx-tilemap-rendering.png differ diff --git a/content/news/020/raui-tetra-todo-app-material-ui.gif b/content/news/020/raui-tetra-todo-app-material-ui.gif new file mode 100644 index 000000000..5774413df Binary files /dev/null and b/content/news/020/raui-tetra-todo-app-material-ui.gif differ diff --git a/content/news/020/rg3d-tut.jpg b/content/news/020/rg3d-tut.jpg new file mode 100644 index 000000000..edd8198aa Binary files /dev/null and b/content/news/020/rg3d-tut.jpg differ diff --git a/content/news/020/rg3d_logo.png b/content/news/020/rg3d_logo.png new file mode 100644 index 000000000..53d8a734d Binary files /dev/null and b/content/news/020/rg3d_logo.png differ diff --git a/content/news/020/robo.jpg b/content/news/020/robo.jpg new file mode 100644 index 000000000..62fa107fc Binary files /dev/null and b/content/news/020/robo.jpg differ diff --git a/content/news/020/robotcards.png b/content/news/020/robotcards.png new file mode 100644 index 000000000..77aafc14e Binary files /dev/null and b/content/news/020/robotcards.png differ diff --git a/content/news/020/rusty-bomber.png b/content/news/020/rusty-bomber.png new file mode 100644 index 000000000..55a735b4f Binary files /dev/null and b/content/news/020/rusty-bomber.png differ diff --git a/content/news/020/secbot.jpg b/content/news/020/secbot.jpg new file mode 100644 index 000000000..0fbfa158d Binary files /dev/null and b/content/news/020/secbot.jpg differ diff --git a/content/news/020/sm64js.jpg b/content/news/020/sm64js.jpg new file mode 100644 index 000000000..362b25a32 Binary files /dev/null and b/content/news/020/sm64js.jpg differ diff --git a/content/news/020/starframe.gif b/content/news/020/starframe.gif new file mode 100755 index 000000000..1e7d623c0 Binary files /dev/null and b/content/news/020/starframe.gif differ diff --git a/content/news/020/station-iapetus-youtube.png b/content/news/020/station-iapetus-youtube.png new file mode 100644 index 000000000..fb6448e89 Binary files /dev/null and b/content/news/020/station-iapetus-youtube.png differ diff --git a/content/news/020/stellary2-centered-view.gif b/content/news/020/stellary2-centered-view.gif new file mode 100644 index 000000000..c5dabf686 Binary files /dev/null and b/content/news/020/stellary2-centered-view.gif differ diff --git a/content/news/020/tetris-hard-drop.gif b/content/news/020/tetris-hard-drop.gif new file mode 100644 index 000000000..dc494e63b Binary files /dev/null and b/content/news/020/tetris-hard-drop.gif differ diff --git a/content/news/020/theta-wave.gif b/content/news/020/theta-wave.gif new file mode 100644 index 000000000..a4c2153e2 Binary files /dev/null and b/content/news/020/theta-wave.gif differ diff --git a/content/news/020/veloren.jpg b/content/news/020/veloren.jpg new file mode 100644 index 000000000..53ca3345b Binary files /dev/null and b/content/news/020/veloren.jpg differ diff --git a/content/news/020/wgpu-conservative-bunny.png b/content/news/020/wgpu-conservative-bunny.png new file mode 100644 index 000000000..a151704ee Binary files /dev/null and b/content/news/020/wgpu-conservative-bunny.png differ diff --git a/content/news/020/whattheframe.png b/content/news/020/whattheframe.png new file mode 100644 index 000000000..6cbf3e229 Binary files /dev/null and b/content/news/020/whattheframe.png differ diff --git a/content/news/020/wor-capsule.png b/content/news/020/wor-capsule.png new file mode 100644 index 000000000..aca016309 Binary files /dev/null and b/content/news/020/wor-capsule.png differ diff --git a/content/news/021/abstreet.png b/content/news/021/abstreet.png new file mode 100644 index 000000000..e9d069698 Binary files /dev/null and b/content/news/021/abstreet.png differ diff --git a/content/news/021/bevy-shoot-video.jpg b/content/news/021/bevy-shoot-video.jpg new file mode 100644 index 000000000..8c437cff9 Binary files /dev/null and b/content/news/021/bevy-shoot-video.jpg differ diff --git a/content/news/021/chip-8-rs.jpg b/content/news/021/chip-8-rs.jpg new file mode 100644 index 000000000..1c7a31590 Binary files /dev/null and b/content/news/021/chip-8-rs.jpg differ diff --git a/content/news/021/dfs.jpg b/content/news/021/dfs.jpg new file mode 100644 index 000000000..b00892a07 Binary files /dev/null and b/content/news/021/dfs.jpg differ diff --git a/content/news/021/egui.gif b/content/news/021/egui.gif new file mode 100644 index 000000000..e2208c6a5 Binary files /dev/null and b/content/news/021/egui.gif differ diff --git a/content/news/021/fishgame.gif b/content/news/021/fishgame.gif new file mode 100644 index 000000000..101cabfc8 Binary files /dev/null and b/content/news/021/fishgame.gif differ diff --git a/content/news/021/gamedev-meetup.png b/content/news/021/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/021/gamedev-meetup.png differ diff --git a/content/news/021/graphite-ferris.png b/content/news/021/graphite-ferris.png new file mode 100644 index 000000000..67ba95192 Binary files /dev/null and b/content/news/021/graphite-ferris.png differ diff --git a/content/news/021/index.md b/content/news/021/index.md new file mode 100644 index 000000000..84236eeb4 --- /dev/null +++ b/content/news/021/index.md @@ -0,0 +1,1061 @@ ++++ +title = "This Month in Rust GameDev #21 - April 2021" +date = 2021-05-09 +transparent = true ++++ + +Welcome to the 21st 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) +- [gamedev.rs](#gamedev-rs) +- [Game Updates](#game-updates) +- [Learning Material Updates](#learning-material-updates) +- [Engine Updates](#engine-updates) +- [Library & Tooling Updates](#library-tooling-updates) +- [Requests for Contribution](#requests-for-contribution) + + + +## Rust GameDev Meetup + +![Gamedev meetup poster](gamedev-meetup.png) + +The fourth Rust Gamedev Meetup happened in April. It was an opportunity for +developers to show off what Rust projects they've been working on in the game +ecosystem. This month, we heard a talk about threading in WASM, profiling, +getting a game ready for release, and much more. 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 can also be [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=XE0lH0tlbBs +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## gamedev.rs + +As you may have noticed, [rust-gamedev.github.io](https://rust-gamedev.github.io) +(this site) got an awesome custom domain: [gamedev.rs](https://gamedev.rs)! +We've been looking for a good & available domain a [long time][gamedev-rs-233]. +Huge thanks to Juratech Systems for donating their domain +to the Rust GameDev WG! ❤️ + +We've also [switched to a more compact URL scheme][gamedev-rs-586] +with separate categories for [the newsletter](https://gamedev.rs/news) +and [other posts](https://gamedev.rs/blog). + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/mq6mmj/rustgamedevgithubio_is_now_gamedevrs), +[Twitter](https://twitter.com/ozkriff/status/1382016040662614017)_ + +[gamedev-rs-233]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues/233 +[gamedev-rs-586]: https://github.com/rust-gamedev/rust-gamedev.github.io/pull/586 + +## Game Updates + +### [LD48: Micronaut][micronaut-itch] + +{{ image_figure( + alt="GIF showing Micronaut's primary level recursion mechanic" + src="micronaut.gif" + caption="Micronaut features a deep recursive level layout", + link="https://healthire.itch.io/micronaut") }} + +Micronaut is a small puzzle platformer by [@Healthire] made in 48 hours for the +Ludum Dare 48 Compo. Run and jump your way through a recursive level layout to +reach the end. Cross platform for native and web, with source available on +[GitHub][micronaut-github]. + +_Discussions: [Twitter][micronaut-twitter], [ldjam.com][micronaut-ldjam]_ + +[@Healthire]: https://twitter.com/healthire +[micronaut-github]: https://github.com/Healthire/ld48 +[micronaut-itch]: https://healthire.itch.io/micronaut +[micronaut-twitter]: https://twitter.com/healthire/status/1386468257125830662 +[micronaut-ldjam]: https://ldjam.com/events/ludum-dare/48/micronaut + +### [LD48: The Submariner][submariner-itch] + +[![GIF of a submarine firing torpedoes at vicious attacking fish.](submariner.gif)][submariner-itch] + +[The Submariner][submariner-itch] is a minimalist action +game made by [@kettlecorn] for the Ludum Dare 48 Compo. Dive +deep into the murky depths, defend yourself with torpedoes, +and try to find a way home! + +The Submariner was made with the [Macroquad][macroquad] game engine +and [hecs] was used as the Entity-Component-System (ECS) data structure. + +[Click here to play the Submariner in your browser.][submariner-itch] + +_Discussions: [ldjam.com][submariner-ldjam]_ + +[@kettlecorn]: https://twitter.com/kettlecorn +[submariner-github]: https://github.com/kettle11/LD48 +[submariner-itch]: https://kettlecorn.itch.io/submariner +[submariner-ldjam]:https://ldjam.com/events/ludum-dare/48/the-submariner +[hecs]:https://github.com/Ralith/hecs + +### [LD48: Depth-First Search][dfs-ldjam] + +![Depth-First Search's title card](dfs.jpg) + +[Depth-First Search][dfs-ldjam] by [@LPGhatguy] and [@evaeraevaera] is a space +dogfighting game made in 72 hours for the Ludum Dare 48 Jam. Travel alone to the +center of the galaxy, battling space pirates, alien eyeballs, and more. + +The game was made possible by [wgpu], [egui], [rapier], [hecs], and many more +Rust community libraries! + +_Discussions: [ldjam.com][dfs-ldjam], [Twitter][dfs-twitter]_ + +[@LPGhatguy]: https://twitter.com/LPGhatguy +[@evaeraevaera]: https://twitter.com/evaeraeveara +[dfs-ldjam]: https://ldjam.com/events/ludum-dare/48/depth-first-search +[dfs-twitter]: https://twitter.com/evaeraevaera/status/1386863330355257346 +[rapier]: https://github.com/dimforge/rapier +[hecs]: https://github.com/Ralith/hecs + +### [MineWars][minewars] + +![MineWars Game Screenshot](minewars.jpg) + +[MineWars][minewars] ([Twitter][minewars-twitter], [Reddit][minewars-reddit]) +by @jamadazi is Minesweeper reimagined as a Multiplayer Real Time Strategy! + +First announced publicly last month, the project is working towards an alpha +release for public playtesting. This month's progress has been mostly internal +refactoring to be able to support networked multiplayer fully. The next steps +are to implement the remaining core game mechanics. The client implementation +may be changed to use the new `bevy_ecs_tilemap` crate. + +Made in the [Bevy Game Engine][bevy]. + +[minewars]: https://minewars.cc +[minewars-twitter]: https://twitter.com/MineWarsGame +[minewars-reddit]: https://reddit.com/r/minewars +[bevy]: https://bevyengine.org + +### [Fish game] + +![Fish game](fishgame.gif) + +[Fish game] is an online multiplayer game, +created in a collaboration between [Nakama][nakama], an open-source scalable +game server, and the [Macroquad][macroquad] game engine. + +This month: + +- [Fish game tutorial] got published. + The tutorial breaks down the game codebase into steps, from setting + up an empty macroquad project into building a platformer game, and + then turning it into a multiplayer game with Nakama. + +- [Web build][fishgame-itch] went live on itch.io + +[Fish game]: https://github.com/heroiclabs/fishgame-macroquad +[fishgame-itch]: https://fedorgames.itch.io/fish-game +[nakama]: https://heroiclabs.com/ +[macroquad]: https://github.com/not-fl3/macroquad +[Fish game tutorial]: https://macroquad.rs/tutorials/fish-tutorial/ + +### Project YAWC + +![A demonstration of the Project YAWC map editor](project_yawc_map_editor.png) + +Project YAWC ([Twitter](https://twitter.com/ProjectYawc)) is a turn-based +strategy game built in GGEZ, being developed by junkmail. + +April saw the release of Alpha 5, including the integrated map editor, alongside +balance changes and unit additions. + +An [alpha access request form](https://forms.gle/w22ohPGNk58fo9bv6) is available, +if you want to try it out. + +### [The Process] + +{{ image_figure( + alt="Animated image showcasing the test map in The Process" + src="the_process.gif" + caption="The new test map 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! + +Some of the main highlights of the game: + +- Automate complex processes by combining machines and programmable workers. +- Obtain materials from a wide variety of natural resources: Even chicken! +- An upbeat, wholesome aesthetic: Factories don't need to be depressing. + +This last month was focused on implementing the following features: + +- A [test map](https://twitter.com/PlayTheProcess/status/1381648397569036291) to + ensure all corners of the codebase are working +- Improved player mobility by introducing a + [grappling hook](https://www.reddit.com/r/rust_gamedev/comments/mztqhy/added_a_grappling_hook_to_my_game_built_with_rust/) + +The game has been in active development for over a year and is now approaching +its first initial playable alpha version. Stayed tuned to the official twitter +for updates! + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/mopoxk/showcasing_my_game_the_process_built_with_rust/), +[Twitter](https://twitter.com/PlayTheProcess)_ + +[The Process]: https://twitter.com/PlayTheProcess/ + +### [pGLOWrpg][pglowrpg-github] + +![Improved text rendering](pglowrpg_progress.jpg) + +pGLOWrpg ([GitHub][pglowrpg-github], [Twitter][pglowrpg-twitter]) by [@Roal_Yr] +is a Procedurally Generated Living Open World RPG, +a long-term project in development, which aims to be a narrative text-based game +with maximum portability and accessibility. + +Recent updates include: + +- Finished implementing new printing interface. +- Different types of text: normal, announcement, banner, etc. +- Text color scheme in separate .ron preset file. +- Text wrap implemented. +- Fallback modes for text printing implemented. + +[@Roal_Yr]: https://twitter.com/Roal_Yr +[pglowrpg-twitter]: https://twitter.com/pglowrpg +[pglowrpg-github]: https://github.com/roalyr/pglowrpg + +### [Taipo][taipo-itch] + +{{ image_figure( + alt="Screenshot of Taipo showing a variety of towers and enemies" + src="taipo.png" + caption="Click the image to play the game in your desktop browser!", + link="https://euclidean-whale.itch.io/taipo") }} + +Taipo ([itch.io][taipo-itch], [GitHub][taipo-github]) by [@rparrett] +is a Tower Defense game that's controlled solely by typing words and phrases. + +Taipo is intended to be a thin veneer of a game over a tool for practicing +Japanese, but there's an English mode as well. Gameplay sessions are short and +the game is playable in a desktop web browser. + +Taipo was built with [Bevy 0.5][taipo-bevy] with web builds made possible by +[bevy_webgl2] and [bevy_kira_audio]. Taipo is also supported by these great +projects: [bevy_tiled], [bevy_asset_ron]. + +[taipo-itch]: https://euclidean-whale.itch.io/taipo +[taipo-github]: https://github.com/rparrett/taipo +[taipo-bevy]: https://bevyengine.org +[bevy_webgl2]: https://github.com/mrk-its/bevy_webgl2 +[bevy_asset_ron]: https://github.com/jamadazi/bevy_asset_ron +[bevy_tiled]: https://github.com/stararawn/bevy_tiled +[bevy_kira_audio]: https://github.com/NiklasEi/bevy_kira_audio +[@rparrett]: https://github.com/rparrett + +### [A/B Street] + +![Consolidated intersections in A/B Street](abstreet.png) + +[A/B Street] by [@dabreegster] is a traffic simulation game exploring how small +changes to roads affect cyclists, transit users, pedestrians, and drivers, with +support for any city with OpenStreetMap coverage. + +In April, a new road editor was prototyped, letting the number and width of +lanes be changed. Initial installation and downloading new maps is now simpler. +Slowly, complex intersections are being handled better. The team also completed +four usability study sessions and adjusted the UI accordingly. + +[A/B Street]: https://github.com/a-b-street/abstreet +[@dabreegster]: https://twitter.com/CarlinoDustin + +### [Way of Rhea][wor] + +[![Way of Rhea on Steam](wor-ice.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: + +- A [hierarchy tree view][wor-hierarchy] was added to the editor to make getting + art into the game easier. +- Work is wrapping up getting [art into the first snow crab level!][wor-art] +- [@masonremaley][mason-remaley] wrote up [an article walking through how the + Way of Rhea crash reporter works][wor-crash-reporter]. +- [@masonremaley][mason-remaley] is mixing signed distance fields, bézier + curves, and art by [Carolyn Whitmeyer][carolyn-whitmeyer] to create + [procedural vines][wor-vines]. +- [Carolyn Whitmeyer][carolyn-whitmeyer], the game's artist, released [a demo + real including some content from Way of Rhea][wor-cw-demo-reel]. + +[wor]: https://store.steampowered.com/app/1110620?utm_campaign=tmirgd&utm_source=n21 +[wor-art]: https://twitter.com/AnthropicSt/status/1388907046574215172 +[wor-hierarchy]: https://twitter.com/AnthropicSt/status/1387947007508160517 +[mason-remaley]: https://twitter.com/masonremaley +[wor-crash-reporter]: https://www.anthropicstudios.com/2021/03/05/crash-reporter/ +[carolyn-whitmeyer]: https://www.instagram.com/cw_visuals_insta/ +[wor-cw-demo-reel]: https://twitter.com/masonremaley/status/1387102693626421254 +[wor-vines]: https://twitter.com/masonremaley/status/1389070879536173056 + +### [Veloren][veloren] + +{{ image_figure( + alt="Airship" + src="veloren.jpg" + caption="A mist rolling over the land") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +In April, work started on 0.10. Work is being done on combat, with new models +being created for enemies, animations being refined, and new player gear being +added. The trading and economic systems have continued progress at a good pace. +The music system was expanded to support combat music. + +Veloren's financial state was overhauled to examine previous expenses, and +prepare for provisioning the dedicated server. Functionality was added to switch +between server-authoritative and client-authoritative physics. Skeletons for +big-winged creatures were added. Data being sent over the network is being +optimized to reduce the amount of bandwidth players have to use. + +April's full weekly devlogs: "This Week In Veloren...": +[#114](https://veloren.net/devblog-114), +[#115](https://veloren.net/devblog-115), +[#116](https://veloren.net/devblog-116). +[#117](https://veloren.net/devblog-117). + +[veloren]: https://veloren.net + +### [Outer Wonders] + +![Animation showing Bibi, the main protagonist of Outer Wonders, +jumping from a treetop through a hole, rolling from obstacle to obstacle +at the bottom of the tree, and then leaning on a coiled snake to jump back +up to the other side of the treetop and continue its way](outer-wonders.gif) + +[Outer Wonders] is a colorful, pixel art, puzzle-based adventure game +developed by [Utopixel] where you play as Bibi, a cute round monkey who +enjoys rolling in straight lines. Explore a whimsical nature where +altering the environment is key to progress, and solve puzzles to protect +its wonders. + +In April, [Utopixel] released the first playable demo of [Outer Wonders] +for Windows and Linux on [itch.io]! In order to achieve this, the [Utopixel] +team: + +- Added a cutscene and a tutorial level at the beginning of the demo campaign. +- Integrated sound effects for interaction with the environment and the UI. +- Finished implementing full support for Linux on [itch.io] through a portable + build of the game. +- Polished the menus by adding a "_Press any key to continue_" prompt on game + startup, as well as a confirmation prompt for all quit buttons. +- Tested the demo thoroughly on both Windows and Linux to fix all bugs + and level design issues. + +_Discussions: +[/r/rust](https://www.reddit.com/mx3enm), +[Twitter](https://twitter.com/utopixel/status/1385632054021345289)_ + +[Outer Wonders]: https://utopixel.itch.io/outer-wonders +[Utopixel]: https://utopixel.games +[itch.io]: https://utopixel.itch.io/outer-wonders + +### [Theta Wave] + +{{ image_figure( + alt="Enemy Formations" + src="theta-wave.gif" + caption="Mobs may now be spawned in predefined formations", + link="https://github.com/amethyst/theta-wave") }} + +[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, the ["Formations"] update was released which organized how mobs +are spawned in different phases of the level. + +They are now working on the ["Loot"] update which will enhance how loot drops +are rolled, spawned, and how their effects are applied to the game. + +[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/ +["Formations"]: https://github.com/amethyst/theta-wave/releases/tag/v0.1.5 +["Loot"]: https://github.com/amethyst/theta-wave/projects/4 + +### [Station Iapetus] + +[![Station Iapetus Youtube](station-iapetus.jpg)][si-youtube] + +[Station Iapetus][Station Iapetus] by [@mrDIMAS] is a 3rd person shooter on the +prison Iapetus near Saturn. +This month's updates include: + +- New level (lab) +- More assets +- Performance improvements +- Bots now able to use weapons +- Melee attacks are much harder to avoid now +- Bots drop items +- Journal + +[@mrDIMAS]: https://github.com/mrDIMAS +[rg3d]: https://github.com/mrDIMAS/rg3d +[Station Iapetus]: https://github.com/mrDIMAS/StationIapetus +[si-youtube]: https://youtube.com/watch?v=O_ETjSkVBME + +## Engine Updates + +### [macroquad] + +[![macroquad](macroquad.png)][macroquad.rs] + +[macroquad] is a cross-platform (Windows/Linux/macOS/Android/iOS/WASM) game +framework built on top of [miniquad]. + +This month macroquad finally got out of alpha and `0.3` got released! +All the examples with both sources and interactive wasm versions may +be found on [the new macroquad website][macroquad_examples]. + +[miniquad]: https://github.com/not-fl3/miniquad +[macroquad]: https://github.com/not-fl3/macroquad +[macroquad.rs]: https://macroquad.rs/ +[macroquad_examples]: https://macroquad.rs/examples + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, version 0.6.3 was released, featuring: + +- BMFont support +- An `ImageData` type for loading and manipulating images on the CPU +- More color utilities, including shortcuts for premultiplied alpha +- Bugfixes and docs improvements + +For more details, see the [changelog][tetra-changelog]. + +Additionally, [Tetra's website][tetra-website] has been updated to make it easier +to read and contribute to. The site features tutorials, guides and FAQs on how to +use Tetra effectively, as well as a showcase of cool projects made using the +framework - additions are welcomed! + +[Tetra]: https://github.com/17cupsofcoffee/tetra +[tetra-changelog]: https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md#063---2021-04-09 +[tetra-website]: https://tetra.seventeencups.net/ + +### [Oxygengine v0.19.1][oxygengine-git] + +{{ image_figure( + alt="Oxygengine UI splash screen" + src="oxygengine-ui-splash-screen.gif" + caption="Making splash screens in Oxygengine with RAUI") }} + +[Oxygengine][oxygengine-git] by [@PsichiX][psichix-twitter] is the hottest +HTML5 + WASM game engine for games written in Rust with web-sys. +The goal of this project is to combine professional game development tools under +one highly modular toolset. + +This month's changes include: + +- Fixed bugs with rendering images on Firefox browser. +- Added support for filters. +- Updated [RAUI][raui-git] dependency to improve UI. +- Added support for image smoothing render command. +- Added [puzzle game demo WIP][oxygengine-puzzle-demo] that shows how to use RAUI + to make for example fancy splash screens with RAUI. + +[psichix-twitter]: https://twitter.com/psichix +[oxygengine-git]: https://github.com/PsichiX/Oxygengine +[oxygengine-puzzle-demo]: https://github.com/PsichiX/Oxygengine/tree/master/demos/soulhunter + +### [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: + +- WebAssembly support ([check online demo][rg3d_wasm_demo]) +- Proc-macro for Visit trait +- On-demand texture compression +- Performance improvements +- Various bug fixes and small improvements. + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rg3d_wasm_demo]: https://rg3d.rs/assets/webexample/index.html + +### [Arcana] + +{{ image_figure( + alt="arcana" + src="tanks.gif" + caption="A demo Arcana game") }} + +[Arcana] is a new game engine built with focus on ease of use +without compromising on level of control. +The engine is aimed to support a wide variety of games, +from pixel-art to fully ray-traced, +from single-player puzzles to online strategies. + +It is at a very early stage, not all necessary subsystems are done +and code is in flux. + +The demo shown above was coded in a single evening, +together with sprite sheet loading and sprite animations +which will be integrated into the engine later. + +The default 2D renderer renders sprites with auto-batching, +so all sprites are rendered in single instanced draw call, +allowing rendering millions of sprites in one frame. Rendering +is done with [`sierra`] - a Vulkan-like graphics API with +batteries included. The engine also uses [`hecs`] as its ECS, +and rolls its own simplistic `System` trait to define and run +systems, once per frame or with fixed steps. [`rapier`] physics +is integrated for 2D cases, but this system is kept opt-in. + +[Arcana]: https://github.com/zakarumych/arcana +[`sierra`]: https://github.com/zakarumych/sierra +[`hecs`]: https://crates.io/crates/hecs +[`rapier`]: https://rapier.rs/docs/ + +## Learning Material Updates + +### [Bevy Cheatbook][bevy_cheatbook] + +The Unofficial Bevy Cheatbook by @jamadazi is a practical book for learning the +[Bevy Game Engine][bevy]. + +The book recently got an assortment of improvements and new content, including +a detailed page about [input handling][bevy_cheatbook_input] and a chapter about +[browser games using WASM][bevy_cheatbook_wasm] (written with help from @Zaszi). + +The author now has a [GitHub Sponsors][jamadazi_ghsponsors], support them! + +[bevy_cheatbook]: https://bevy-cheatbook.github.io +[bevy_cheatbook_input]: https://bevy-cheatbook.github.io/features/input-handling.html +[bevy_cheatbook_wasm]: https://bevy-cheatbook.github.io/platforms/wasm.html +[jamadazi_ghsponsors]: https://github.com/sponsors/jamadazi +[bevy]: https://bevyengine.org + +### [Shooting Gallery Game in Rust and Bevy in 5 Hours][bevy-5h-video] + +[![preview](bevy-shoot-video.jpg)][bevy-5h-video] + +[@camsjams] released [a video][bevy-5h-video] about +developing a shooting gallery using Bevy +to demonstrate 2D games with multiple layers of depth. +Some of the features covered in the video: + +- Basic UI with score and countdown clock. +- 2D shooting with moving set pieces - clouds, grass, water. +- Tracking of target hits, each target having their own unique + movement speed and points. +- Game over state when clock runs out. + +[The full source is available here][bevy-5h-src]. + +[bevy-5h-video]: https://youtube.com/watch?v=T1ZT0EkzvgI +[@camsjams]: https://twitter.com/camsjams +[bevy-5h-src]: https://github.com/camsjams/rust-2d-shooting-gallery + +### [Learning OpenGL in 7 days using Rust][tantan-video] + +[![video preview](tantan-preview.jpg)][tantan-video] + +[TanTan] released a [video][tantan-video] about making a water shader, +loading 3D models, creating a beautiful transition shader +using glium and macroquad. +The water & transition shader is open source and can be found +[here][mq-tantan-toolbox]. + +[TanTan]: https://twitter.com/TantanDev +[tantan-video]: https://youtube.com/watch?v=KEQIWqSq42k +[mq-tantan-toolbox]: https://github.com/TanTanDev/macroquad_tantan_toolbox + +### [Rust Linz: Learning Rust with Game Development][rust-linz] + +{{ image_figure( + alt="Rust Linz talk screenshot" + src="rust-linz.png" + caption="Click on the image to watch the talk", + link="https://www.youtube.com/watch?v=79GyLlXAk-0") }} + +As part of April's Rust Linz meetup, [Herbert Wolverson][rust-linz-hw] +gave a talk about using game development as a means of learning +Rust, stepping through the creation of Flappy Dragon - a simple game +used in his book 'Hands-On Rust' to teach the language basics. + +'Hands-On Rust' is currently available for 50% off, via a coupon +posted on the [author's twitter][rust-linz-coupon]. + +[rust-linz]: https://www.youtube.com/watch?v=79GyLlXAk-0 +[rust-linz-hw]: https://twitter.com/herberticus +[rust-linz-coupon]: https://twitter.com/herberticus/status/1387090355250675716 + +### [Rust LA Meetup: Happiness in Rust][rust-la] + +{{ image_figure( + alt="Rust LA talk screenshot" + src="rust-la.png" + caption="Click on the image to watch the talk", + link="https://www.youtube.com/watch?v=TJ3w-pZ7FMI") }} + +As part of April's Rust LA meetup, [Andrea Pessino][rad-andrea] from +[Ready at Dawn][rad] gave a talk examining how to increase Rust adoption +among game developers and performance-centric developers, giving +practical, actionable advice to those who hit early bumps in their +Rust discovery. + +[rust-la]: https://www.youtube.com/watch?v=TJ3w-pZ7FMI +[rad-andrea]: https://twitter.com/AndreaPessino +[rad]: http://www.readyatdawn.com/ + +### [How To Write a Crash Reporter][crash-reporter] + +![How To Write a Crash Reporter](wor-crash-reporter.jpg) + +[@masonremaley][mason-remaley] wrote [an article][crash-reporter] walking +through [Way of Rhea's][wor] crash reporter implementation. + +The article covers how to detect a crash, how to report a crash via chat +services like Discord or Slack, and how to implement a robust native UI on +Windows to handle requesting user consent to file the report, as well as some +design considerations. + +[crash-reporter]: https://www.anthropicstudios.com/2021/03/05/crash-reporter/ +[mason-remaley]: https://twitter.com/masonremaley +[wor]: https://store.steampowered.com/app/1110620?utm_campaign=tmirgd&utm_source=n21 + +### [awesome-quads] + +![logo](quads.png) + +[awesome-quads] is a curated list of links to [miniquad]/[macroquad]-related +code & resources: libraries & plugins, games, examples, apps, docs, etc. +The list has more than 40 links atm: +feel free to write a PR if something isn't mentioned yet. + +[awesome-quads]: https://github.com/ozkriff/awesome-quads + +## Library & Tooling Updates + +### [wgpu]-0.8 + +![Screenshot of tree rendering](wgpu-tree.png) + +[wgpu] is a [WebGPU] implementation in Rust. It is safe, efficient, +and portable: can target both native (Vulkan/D3D/Metal) and the Web. + +The team has rolled out gfx-hal-0.8 and wgpu-0.8 updates on crates! +Read [gfx-release-blog] for more details. + +In April, the team implemented more validation on both the host and the shader +sides. [Naga]'s coverage of SPIR-V and MSL features is also greatly improved. + +On the infrastructure side, [wgpu] integrated [profiling] and got the first +[naga performance][naga perf numbers] numbers, which looked promising. + +[wgpu]: https://github.com/gfx-rs/wgpu +[webgpu]: https://gpuweb.github.io/gpuweb/ +[naga]: https://github.com/gfx-rs/naga +[profiling]: https://github.com/aclysma/profiling +[gfx-release-blog]: https://gfx-rs.github.io/2021/04/30/release-0.8.html +[naga perf numbers]: https://github.com/gfx-rs/wgpu-rs/discussions/879 + +### [nalgebra] + +![nalgebra](https://www.nalgebra.org/img/logo_nalgebra.svg) + +[nalgebra] ([GitHub], [Discord]) by [Dimforge] is a general-purpose +linear-algebra library. + +With its version 0.26, [nalgebra] replaced the use of [generic-arrays] by +regular Rust arrays using const-generics. See the [blog-post] to get all +the details! In particular, this results in significant benefits: + +- Simpler generic programming with statically-sized vectors/matrices. +- Much simpler debugging: inspect the content of vectors/matrices more easily. +- Vectors and matrices with dimensions known at compile-time can be + constructed in a const-fn context. + +_Discussions: [/r/rust], [Twitter]_ + +[nalgebra]: http://nalgebra.org +[GitHub]: http://github.com/dimforge/nalgebra +[Discord]: http://discord.gg/vt9DJSW +[Dimforge]: http://dimforge.com +[generic-arrays]: https://docs.rs/generic-array/0.14.4/generic_array/ +[blog-post]: https://www.dimforge.com/blog/2021/04/12/integrating-const-generics-to-nalgebra/ +[/r/rust]: https://www.reddit.com/r/rust/comments/mph8jr/integrating_constgenerics_to_nalgebra_026/ +[Twitter]: https://twitter.com/dimforge/status/1381643543626842114 + +### [opensubdiv-petite] + +{{ image_figure( + alt="Low poly car model" + src="opensubdiv-petite.jpg" + caption="Low poly car with three levels of Catmull-Clark subdivision applied.") }} + +[Opensubdiv-petite] is a high level, selective, oxidized wrapper around Pixar’s +[OpenSubdiv] [sudivison surface] meshing and evaluation library. OpenSubdiv allows +for real time updates of the subdivided mesh if the topology of the control mesh +is stable (e.g. a deforming character in a game). + +The crate comes with a trait for converting into a `bevy::Mesh` and a [`bevy` example]. + +This is an early release. None of the GPU acceleration backends are yet +exposed on the Rust side. Contact [@virtualritz] is you want to help out with +that. + +His [`tobj` fork] also has a bunch new features that help loading OBJ files for +use with opensubdiv-petite. E.g. merging disconnected vertices during import. + +The car model above was borrowed from [@quaternius] low poly +[car collection on itch.io]. + +[OpenSubdiv]: https://graphics.pixar.com/opensubdiv/docs/intro.html +[opensubdiv-petite]: https://crates.io/crates/opensubdiv-petite +[sudivison surface]: https://en.wikipedia.org/wiki/Subdivision_surface +[`bevy` example]: https://github.com/virtualritz/opensubdiv-petite/blob/master/opensubdiv-petite/examples/bevy.rs +[`tobj` fork]: https://github.com/virtualritz/tobj +[@virtualritz]: https://github.com/virtualritz +[@quaternius]: https://www.patreon.com/quaternius +[car collection on itch.io]: https://quaternius.itch.io/lowpoly-cars + +### [profiling] + +[![Screenshot of Optick Profiler](profiling.png)](profiling.png) + +This month, version 1.0 of [profiling] was released on crates.io. 🎉 🎉 + +This crate provides a very thin abstraction over instrumented profiling crates +like `puffin`, `optick`, `tracing`, `tracy`, and `superluminal-perf`. + +Profiling is used by multiple projects including `gfx-hal`, `rafx`, and +`wgpu`. + +[profiling]: https://crates.io/crates/profiling + +### [simple-async-local-executor] + +```rust +let executor = Executor::default(); +let events = [executor.create_event_handle(), executor.create_event_handle()]; + +async fn wait_event(events: [EventHandle; 2], executor: Executor) { + executor.event(&events[0]).await; + executor.event(&events[1]).await; +} + +executor.spawn(wait_event(events.clone(), executor.clone())); +assert_eq!(executor.step(), true); +assert_eq!(executor.step(), true); +executor.notify_event(&events[0]); +assert_eq!(executor.step(), true); +executor.notify_event(&events[1]); +assert_eq!(executor.step(), false); +``` + +[simple-async-local-executor] by [Enlightware] +is a single-threaded polling-based executor suitable for use in games, embedded +systems or WASM. + +This executor can be useful when the number of tasks is small or +if a small percentage is blocked. Being polling-based, in the general +case it trades off efficiency for simplicity and does not require any +concurrency primitives such as `Arc`, etc. + +[simple-async-local-executor]: https://github.com/enlightware/simple-async-local-executor +[Enlightware]: https://enlightware.ch + +### [wasm_plugin] + +[wasm_plugin][wasm_plugin] by @alec-deason is a +low-ish level tool for easily hosting WASM based plugins for modding or scripting. + +The latest version now supports calling host functions from the plugin and more +flexible serialization which allows plugins to be written in languages other +than Rust. + +It consists of two crates: + +- [wasm_plugin_host] which wraps a wasmer instance with methods for calling + functions on the guest plugin. +- [wasm_plugin_guest] which provides an attribute macro to easily import and +- export functions to the host. + +[wasm_plugin]: https://github.com/alec-deason/wasm_plugin +[wasm_plugin_host]: https://lib.rs/crates/wasm_plugin_host +[wasm_plugin_guest]: https://lib.rs/crates/wasm_plugin_guest + +### [egui] + +[egui] by [@emilk] is an easy-to-use immediate mode GUI library in pure Rust. + +This month [version 0.11] of egui was released, with many improvements, +including optimized to run almost twice as fast! + +You can try out egui in the [online demo]. + +[egui]: https://github.com/emilk/egui +[online demo]: https://emilk.github.io/egui +[version 0.11]: https://github.com/emilk/egui/blob/master/CHANGELOG.md +[@emilk]: https://twitter.com/ernerfeldt + +### [bevy_egui] + +[![bevy_egui multiple windows support GIF](egui.gif)][bevy_egui] + +[bevy_egui] provides an [Egui](https://github.com/emilk/egui) integration +for the [Bevy](https://github.com/bevyengine/bevy) game engine. +It supports [bevy_webgl2] and implements the full set of Egui features +(such as clipboard and opening URLs). + +In April, [version 0.4] was released, providing an integration with +Egui 0.11 and implementing multiple windows support. + +Try out the [online demo](https://mvlabat.github.io/bevy_egui_web_showcase/index.html). + +[bevy_egui]: https://github.com/mvlabat/bevy_egui +[bevy_webgl2]: https://github.com/mrk-its/bevy_webgl2 +[version 0.4]: https://github.com/mvlabat/bevy_egui/blob/main/CHANGELOG.md + +### [puffin_egui] + +![puffin_egui](puffin_egui.gif) + +[puffin_egui] by [@emilk] is an easy-to-use integration +of the [puffin] profiler for the [egui] GUI library. + +It has never been easier to add an in-game flamegraph profiler to your game! + +[puffin_egui]: https://github.com/emilk/puffin_egui +[puffin]: https://github.com/EmbarkStudios/puffin +[egui]: https://github.com/emilk/egui +[@emilk]: https://twitter.com/ernerfeldt + +### [rafx] + +{{ image_figure( + alt="Rafx WebGL 1.0 Demo" + src="rafx-webgl1-demo.png" + caption="Rafx WebGL 1.0 support, [click for live demo](https://aclysma.github.io/rafx/demo-web/index.html)!", + link="[rafx-webgl-demo](https://aclysma.github.io/rafx/demo-web/index.html)") }} +Rafx is a multi-backend renderer that optionally integrates with the +[distill][rafx-distill] asset pipeline. This month, frustum culling +and a new OpenGL ES 2.0/WebGL 1.0 backend were added. + +[@dvd] revived the `rafx-visibility` crate and implemented frustum culling. +Frustum culling greatly reduces draw call counts, improving frame rate +in certain scenes. The changes also improve consistency between various +rendering feature implementations (i.e. meshes, text etc.) and avoids running +the extract-prepare-submit pipeline on entities that are not visible. + +[@aclysma] implemented an OpenGL ES 2.0 backend. While ES2 cannot support all +functionality in `rafx-api`, it provides very broad compatibility. This means +the core functionality of rafx-api can be used with almost any mobile device +or browser ([~98% web coverage][rafx-webgl-caniuse].) + +[rafx]: https://github.com/aclysma/rafx +[rafx-webgl-demo]: https://aclysma.github.io/rafx/demo-web/index.html +[rafx-distill]: https://github.com/amethyst/distill +[rafx-webgl-caniuse]: https://caniuse.com/?search=webgl +[@aclysma]: https://github.com/aclysma +[@dvd]: https://github.com/DavidVonDerau + +### [RAUI v0.34.0][raui-git] + +{{ image_figure( + alt="RAUI Scroll Box" + src="raui-scroll-box.gif" + caption="RAUI Scroll Box") }} + +[RAUI][raui-git] by [@PsichiX][psichix-twitter] is a Renderer Agnostic User +Interface crate that is based on declarative mode UI composition similar to +React.js and UE4 Slate system. + +This month's changes include: + +- Moved from `widget_hooks!` and `widget_component!` to `#[pre_hooks]`and + `#[post_hooks]` macros. +- Added `PropsData` and `MessageData` derive macros. +- Improved support for Scroll Box widgets to allow frictionless usage. +- Added use of Scroll Box in [TODO demo app][raui-todo-app] to demonstrate how + to use it. + +[raui-git]: https://github.com/PsichiX/raui +[raui-todo-app]: https://github.com/PsichiX/raui/tree/master/demos/todo-app + +### [Graphite][graphite-repo] + +{{ image_figure( + alt="Ferris drawn in Graphite using the new drawing tools - Art credit: Uriopass" + src="graphite-ferris.png" + caption="Ferris drawn in Graphite using the new drawing tools - Art credit: Uriopass") }} + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-progress vector and +raster graphics editor built on a nondestructive node-based workflow. + +The team size has doubled in the past month — thank you to the new contributors! +Since then, systems related to editor tools and data flow were added. +The editor now has proper input behavior on the existing Rectangle and Ellipse Tools +plus the new Shape and Line Tools while holding modifier keys. +Pen Tool implementation has begun, supporting polylines. +Shapes are now drawn with live previews. + +Additional work has gone into improving render performance, building the color +system in the Rust backend, and adding initial support for displaying shapes +in the Layer Tree panel. [Try it right now in your browser.][graphite-live-demo] + +Graphite is making rapid progress towards becoming a nondestructive, 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://github.com/GraphiteEditor/Graphite/blob/master/README.md#discord +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-live-demo]: https://editor.graphite.design/ + +### [KindNES] + +![Super Mario Bros. running in KindNES](kindnes.png) + +[KindNES] by [@henryksloan] +is a new NES emulator that supports sound, controllers, and +much of the NES library. + +KindNES is designed to strike a balance between performance, hardware accuracy, +and code clarity. It directly emulates the CPU, graphics, and sound of the NES +with minimal approximation. The code is intended to pair well with the NESdev +wiki as a resource for learning about the NES. + +KindNES is in a playable state, and is approaching a release version. +Features planned before release include saving and an improved cross-platform +GUI. + +[KindNES]: https://github.com/henryksloan/kind-nes/releases/tag/v0.9.1-beta +[@henryksloan]: https://github.com/henryksloan + +### [chip-8-rs] + +{{ image_figure( + alt="Screenshot of Pong with debugger" + src="chip-8-rs.jpg" + caption="Debugging Pong") }} + +[Chip-8-rs][chip-8-rs] by @jonathanmurray is +a CHIP-8 emulator with some basic debugging functionality. + +When running a game through the emulator, CHIP-8 instructions are listed +next to the main display, with the currently executed one highlighted. By +running at a very low clock-frequency (and pausing/resuming) you can step +through a program one instruction at a time, to better understand how it +works (or doesn't work!). + +See it in action on [YouTube][chip-8-rs-video]. + +[chip-8-rs]: https://github.com/JonathanMurray/chip-8-rs +[chip-8-rs-video]: https://youtu.be/nVDJ5PZpPfI?t=72 + +## Requests for Contribution + +- [femtovg is looking for help with the wgpu backend][femtovg-help]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [gfx-rs's "contributor-friendly" issues][gfx-issues]. +- [wgpu's "help wanted" issues][wgpu-help-wanted]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [Amethyst's "good first issue" issues][amethyst-issues]. +- [A/B Street's "good first issue" issues][abstreet-issues]. +- [Mun's "good first issue" issues][mun-issues]. +- [SIMple Mechanic's good first issues][simm-issues]. +- [Bevy's "good first issue" issues][bevy-issues]. + +[femtovg-help]: https://reddit.com/r/rust/comments/mfuo4m/femtovg_2d_vector_graphics_crate_is_looking_for +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[gfx-issues]: https://github.com/gfx-rs/gfx/issues?q=is%3Aissue+is%3Aopen+label%3Acontributor-friendly +[wgpu-help-wanted]: https://github.com/gfx-rs/wgpu-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[amethyst-issues]: https://github.com/amethyst/amethyst/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/good%20first%20issue + +------ + +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/n8g79b/this_month_in_rust_gamedev_21_april_2021), +[Twitter](https://twitter.com/rust_gamedev/status/1391415309421187076), +[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/021/kindnes.png b/content/news/021/kindnes.png new file mode 100644 index 000000000..41ad09337 Binary files /dev/null and b/content/news/021/kindnes.png differ diff --git a/content/news/021/macroquad.png b/content/news/021/macroquad.png new file mode 100644 index 000000000..a805a54ea Binary files /dev/null and b/content/news/021/macroquad.png differ diff --git a/content/news/021/micronaut.gif b/content/news/021/micronaut.gif new file mode 100644 index 000000000..15969d64a Binary files /dev/null and b/content/news/021/micronaut.gif differ diff --git a/content/news/021/minewars.jpg b/content/news/021/minewars.jpg new file mode 100644 index 000000000..85a0bb8e9 Binary files /dev/null and b/content/news/021/minewars.jpg differ diff --git a/content/news/021/opensubdiv-petite.jpg b/content/news/021/opensubdiv-petite.jpg new file mode 100644 index 000000000..6bc842c24 Binary files /dev/null and b/content/news/021/opensubdiv-petite.jpg differ diff --git a/content/news/021/outer-wonders.gif b/content/news/021/outer-wonders.gif new file mode 100644 index 000000000..3769d9d3f Binary files /dev/null and b/content/news/021/outer-wonders.gif differ diff --git a/content/news/021/oxygengine-ui-splash-screen.gif b/content/news/021/oxygengine-ui-splash-screen.gif new file mode 100644 index 000000000..b38780445 Binary files /dev/null and b/content/news/021/oxygengine-ui-splash-screen.gif differ diff --git a/content/news/021/pglowrpg_progress.jpg b/content/news/021/pglowrpg_progress.jpg new file mode 100644 index 000000000..72bde64f1 Binary files /dev/null and b/content/news/021/pglowrpg_progress.jpg differ diff --git a/content/news/021/profiling.png b/content/news/021/profiling.png new file mode 100644 index 000000000..274ff5668 Binary files /dev/null and b/content/news/021/profiling.png differ diff --git a/content/news/021/project_yawc_map_editor.png b/content/news/021/project_yawc_map_editor.png new file mode 100644 index 000000000..409c78f91 Binary files /dev/null and b/content/news/021/project_yawc_map_editor.png differ diff --git a/content/news/021/puffin_egui.gif b/content/news/021/puffin_egui.gif new file mode 100644 index 000000000..68832d30d Binary files /dev/null and b/content/news/021/puffin_egui.gif differ diff --git a/content/news/021/quads.png b/content/news/021/quads.png new file mode 100644 index 000000000..ce0255579 Binary files /dev/null and b/content/news/021/quads.png differ diff --git a/content/news/021/rafx-webgl1-demo.png b/content/news/021/rafx-webgl1-demo.png new file mode 100644 index 000000000..399d630ea Binary files /dev/null and b/content/news/021/rafx-webgl1-demo.png differ diff --git a/content/news/021/raui-scroll-box.gif b/content/news/021/raui-scroll-box.gif new file mode 100644 index 000000000..1a470966e Binary files /dev/null and b/content/news/021/raui-scroll-box.gif differ diff --git a/content/news/021/rg3d_logo.png b/content/news/021/rg3d_logo.png new file mode 100644 index 000000000..53d8a734d Binary files /dev/null and b/content/news/021/rg3d_logo.png differ diff --git a/content/news/021/rust-la.png b/content/news/021/rust-la.png new file mode 100644 index 000000000..531abf5cb Binary files /dev/null and b/content/news/021/rust-la.png differ diff --git a/content/news/021/rust-linz.png b/content/news/021/rust-linz.png new file mode 100644 index 000000000..3f5cba142 Binary files /dev/null and b/content/news/021/rust-linz.png differ diff --git a/content/news/021/station-iapetus.jpg b/content/news/021/station-iapetus.jpg new file mode 100644 index 000000000..85f255460 Binary files /dev/null and b/content/news/021/station-iapetus.jpg differ diff --git a/content/news/021/submariner.gif b/content/news/021/submariner.gif new file mode 100644 index 000000000..5e0e5f4d6 Binary files /dev/null and b/content/news/021/submariner.gif differ diff --git a/content/news/021/taipo.png b/content/news/021/taipo.png new file mode 100644 index 000000000..ee866d8ba Binary files /dev/null and b/content/news/021/taipo.png differ diff --git a/content/news/021/tanks.gif b/content/news/021/tanks.gif new file mode 100644 index 000000000..aaebe4138 Binary files /dev/null and b/content/news/021/tanks.gif differ diff --git a/content/news/021/tantan-preview.jpg b/content/news/021/tantan-preview.jpg new file mode 100644 index 000000000..13239a2df Binary files /dev/null and b/content/news/021/tantan-preview.jpg differ diff --git a/content/news/021/the_process.gif b/content/news/021/the_process.gif new file mode 100644 index 000000000..dd666e85b Binary files /dev/null and b/content/news/021/the_process.gif differ diff --git a/content/news/021/theta-wave.gif b/content/news/021/theta-wave.gif new file mode 100644 index 000000000..70a71ccba Binary files /dev/null and b/content/news/021/theta-wave.gif differ diff --git a/content/news/021/veloren.jpg b/content/news/021/veloren.jpg new file mode 100644 index 000000000..3565b1abd Binary files /dev/null and b/content/news/021/veloren.jpg differ diff --git a/content/news/021/wgpu-tree.png b/content/news/021/wgpu-tree.png new file mode 100644 index 000000000..721b320c5 Binary files /dev/null and b/content/news/021/wgpu-tree.png differ diff --git a/content/news/021/wor-crash-reporter.jpg b/content/news/021/wor-crash-reporter.jpg new file mode 100644 index 000000000..faf8a6289 Binary files /dev/null and b/content/news/021/wor-crash-reporter.jpg differ diff --git a/content/news/021/wor-ice.jpg b/content/news/021/wor-ice.jpg new file mode 100644 index 000000000..9e4559cd3 Binary files /dev/null and b/content/news/021/wor-ice.jpg differ diff --git a/content/news/022/1_year_of_rust_gamedev.png b/content/news/022/1_year_of_rust_gamedev.png new file mode 100644 index 000000000..483b2ec8d Binary files /dev/null and b/content/news/022/1_year_of_rust_gamedev.png differ diff --git a/content/news/022/2048-bevy-reset-game-events.png b/content/news/022/2048-bevy-reset-game-events.png new file mode 100755 index 000000000..0fa55e043 Binary files /dev/null and b/content/news/022/2048-bevy-reset-game-events.png differ diff --git a/content/news/022/abstreet.png b/content/news/022/abstreet.png new file mode 100644 index 000000000..28541549e Binary files /dev/null and b/content/news/022/abstreet.png differ diff --git a/content/news/022/bevy-retro.gif b/content/news/022/bevy-retro.gif new file mode 100644 index 000000000..11ad32a30 Binary files /dev/null and b/content/news/022/bevy-retro.gif differ diff --git a/content/news/022/bevy_asset_loader.png b/content/news/022/bevy_asset_loader.png new file mode 100644 index 000000000..79bf7fb82 Binary files /dev/null and b/content/news/022/bevy_asset_loader.png differ diff --git a/content/news/022/bounty-bros.png b/content/news/022/bounty-bros.png new file mode 100644 index 000000000..74e2765a4 Binary files /dev/null and b/content/news/022/bounty-bros.png differ diff --git a/content/news/022/dimforge.png b/content/news/022/dimforge.png new file mode 100644 index 000000000..ec0305045 Binary files /dev/null and b/content/news/022/dimforge.png differ diff --git a/content/news/022/egui.gif b/content/news/022/egui.gif new file mode 100644 index 000000000..87ab9b54e Binary files /dev/null and b/content/news/022/egui.gif differ diff --git a/content/news/022/flesh.gif b/content/news/022/flesh.gif new file mode 100644 index 000000000..fb6a262fb Binary files /dev/null and b/content/news/022/flesh.gif differ diff --git a/content/news/022/gamedev-meetup.png b/content/news/022/gamedev-meetup.png new file mode 100644 index 000000000..af9706bea Binary files /dev/null and b/content/news/022/gamedev-meetup.png differ diff --git a/content/news/022/gfx-dota2-naga.jpg b/content/news/022/gfx-dota2-naga.jpg new file mode 100644 index 000000000..3ff4cdb3b Binary files /dev/null and b/content/news/022/gfx-dota2-naga.jpg differ diff --git a/content/news/022/graphite-piet.png b/content/news/022/graphite-piet.png new file mode 100644 index 000000000..f4feb8310 Binary files /dev/null and b/content/news/022/graphite-piet.png differ diff --git a/content/news/022/hho.gif b/content/news/022/hho.gif new file mode 100644 index 000000000..88fcac1a2 Binary files /dev/null and b/content/news/022/hho.gif differ diff --git a/content/news/022/index.md b/content/news/022/index.md new file mode 100644 index 000000000..43dcab00e --- /dev/null +++ b/content/news/022/index.md @@ -0,0 +1,862 @@ ++++ +title = "This Month in Rust GameDev #22 - May 2021" +date = 2021-06-09 +transparent = true ++++ + +Welcome to the 22nd 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 fifth Rust Gamedev Meetup happened in May. 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 can also be [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=6drrul3p_hU +[rust-gamedev-discord]: https://discord.gg/yNtPTb2 +[rust-gamedev-twitch]: https://twitch.tv/rustgamedev + +## Game Updates + +### Flesh + +{{ image_figure( + alt="flesh preview" + src="flesh.gif" + caption="a new enemy") }} + +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's updates +include: + +- Add (internal use) level editor. +- Add new enemy types. +- Prepare to release a short demo next month for collecting feedback. + +[@im_oab]: https://twitter.com/im_oab +[Tetra]: https://github.com/17cupsofcoffee/tetra + +### [Veloren][veloren] + +{{ image_figure( + alt="Airship" + src="veloren.jpg" + caption="The beginning of an exciting journey") }} + +[Veloren][veloren] is an open world, open-source voxel RPG inspired by Dwarf +Fortress and Cube World. + +Veloren's 3rd birthday was at the end of May, on the 25th! During the month, +lots of systems were overhauled. Music changes were made to only play certain +tracks in certain areas. Econsim was optimized, and many bugs were fixed. The +minimap was overhauled, with many quality-of-life and visual improvements. +Terrain compression speed was worked on, with many trials of different +compression techniques. + +The large physics overhaul was merged, and lots of patches are being added to +issues that popped up from it. You can see a small flight in action +[here][veloren-glider]. Dungeons have been balanced, and many weapons have also +seen changes. In June, 0.10 will be released. + +May's full weekly devlogs: "This Week In Veloren...": +[#118](https://veloren.net/devblog-118), +[#119](https://veloren.net/devblog-119), +[#120](https://veloren.net/devblog-120), +[#121](https://veloren.net/devblog-121), +[#122](https://veloren.net/devblog-122). + +[veloren]: https://veloren.net +[veloren-glider]: https://www.reddit.com/r/Veloren/comments/nc4tvo/i_cant_believe_how_beautiful_this_game_is/ + +### [A/B Street] + +![Most of West Seattle has poor access to public libraries](abstreet.png) + +[A/B Street] by [@dabreegster] is a traffic simulation game exploring how small +changes to roads affect cyclists, transit users, pedestrians, and drivers, with +support for any city with OpenStreetMap coverage. The project aims to engage +more citizens with transportation planning, letting people advocate for real +changes they want to see. + +In May, travel time stopped being the only "score" for how well road changes +work. Risk exposure of cyclists crossing dangerous intersections or travelling +in front of high-speed traffic is now measured, with lots of data visualization +work by Michael. Trevor also revived the 15-minute isochrone tool, finding +areas of a city without easy access to education, hospitals, or other +facilities. We also moved the map import process, with over 100 supported maps, +to the cloud from a single poor laptop. OpenStreetMap importing now handles +multiple turn lanes, U-turns, and stop signs much better. + +[A/B Street]: https://github.com/a-b-street/abstreet +[@dabreegster]: https://twitter.com/CarlinoDustin + +### [The Process] + +{{ image_figure( + alt="Animated image showing a small factory in the middle of the game island" + src="the_process.gif" + caption="This factory has never looked livelier!") }} + +[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 been focused on improving the game's UI and extending the machine +logistics system, but there was also room for a few cosmetic improvements: + +- Improved visualization of connections in the [logistic + network](https://twitter.com/PlayTheProcess/status/1391484080798281728). +- Implemented configurable filters for machines to build a [sorting + machine](https://twitter.com/PlayTheProcess/status/1392894719311613953)! +- New materials and [terrain + shader](https://twitter.com/PlayTheProcess/status/1396175924652019718). +- [Trees and dynamically updating + grass](https://twitter.com/PlayTheProcess/status/1399774534417498121) using + instanced rendering. + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/nbmfvz/better_logistics_in_the_process_made_with_godot/), +[Twitter](https://twitter.com/PlayTheProcess/status/1391484080798281728)_ + +[The Process]: https://twitter.com/PlayTheProcess/ + +### [pGLOWrpg][pglowrpg-github] + +![Game features](pglowrpg_progress.gif) + +[pGLOWrpg][pglowrpg-github] by [@Roal_Yr] +is a Procedurally Generated Living Open World RPG, +a long-term project in development, which aims to be a narrative text-based game +with maximum portability and accessibility. + +Recent updates include: + +- Implemented dev features test arena. +- Implemented entity system draft. +- Sanitized coordinate systems everywhere (ooof!) +- Much refactoring. +- Resumed river generation development. + +_Discussions: [Twitter][pglowrpg-twitter]_ + +[@Roal_Yr]: https://twitter.com/Roal_Yr +[pglowrpg-twitter]: https://twitter.com/pglowrpg +[pglowrpg-github]: https://github.com/roalyr/pglowrpg + +### Project YAWC + +![A map in Project YAWC being built.](unbroken_lynx.png) + +Project YAWC ([Twitter](https://twitter.com/ProjectYawc)) is a turn-based +strategy game built in GGEZ, being developed by junkmail. + +May saw the release of Alpha 5.4, including interface improvements, +balance changes, new units, new maps, and netcode improvements. + +An [alpha access request form](https://forms.gle/w22ohPGNk58fo9bv6) is available, +if you want to try it out. + +### [Bounty Bros.][bounty_bros] + +{{ image_figure( + alt="bounty-bros-title-screen" + src="bounty-bros.png" + caption="Click the image to play the game in your browser!", + link="https://katharostech.github.io/skipngo_pre-releases/refs/tags/pre-release-1/?asset_url=https://katharostech.github.io/bounty-bros_pre-releases/1") }} + +[Bounty Bros.][bounty_bros] is a prototype game, similar to the old Legend of +Zelda® games, developed by [Katharos Technology][katharostech] as a testing +ground for a future commercial game. + +The last two months of development was primarily focused on sound and user +interface: + +- Music will play in different areas of the map and fade in when walking into + an area with different music. +- In-game UI is now functional including a new start menu and a simple settings + menu to toggle the CRT filter and pixel aspect ratio. +- The web player now has a simple loading icon instead of a solid black screen. + +The web version was re-built and published under a new link so you can [try it +in your browser][bounty_bros_webgame]. + +You can read the full update in the [Blog Post][bounty_bros]. + +[bounty_bros]: https://katharostech.com/post/bounty-bros-update-3-sound-and-ui +[bounty_bros_webgame]: https://katharostech.github.io/skipngo_pre-releases/refs/tags/pre-release-1/?asset_url=https://katharostech.github.io/bounty-bros_pre-releases/1 +[katharostech]: https://katharostech.com + +### Harvest Hero & Harvest Hero Origins + +![Harvest Hero Origins supports local multiplayer](./hho.gif) + +Harvest Hero is currently on hold for now. After +[Gemdrop Games] was formed, it was decided +that [Emerald] needed to be tested to ensure it can withstand cross +publishing. +This means creating a smaller game in the +engine in order to figure out the publishing process for +Steam, Itch, Nintendo Switch, and guarantee its viability. + +This resulted in the birth of [Harvest Hero Origins], a small wave +defense arcade game with local co-op! Join the [Gemdrop Games Discord] +to stay up to date with these games. + +Features: + +- Story Mode +- Survival Mode (with local co-op) + - Unlockable skins + - 2 unlockable playable characters + +[Emerald]: https://github.com/Bombfuse/emerald +[Harvest Hero Origins]: https://gemdrop-games.itch.io/harvest-hero-origins +[Gemdrop Games]: https://twitter.com/GemdropGames +[Gemdrop Games Discord]: https://discord.gg/CJRbxQn3d9 + +### [Outer Wonders] + +![Animation showing Bibi, the main protagonist of Outer Wonders, +starting from the top entrance of a puzzle, rolling from obstacle +to obstacle, leaning on bushes, flowers, and trees to reach +the bottom exit of the puzzle](outer-wonders.gif) + +[Outer Wonders] is a colorful, pixel art, puzzle-based adventure game +developed by [Utopixel] where you play as Bibi, a cute round monkey who +enjoys rolling in straight lines. Explore a whimsical nature where +altering the environment is key to progress, and solve puzzles to protect +its wonders. + +Outer Wonders can be downloaded for Linux and Windows from [itch.io][ow-itchio]. + +May was mostly dedicated to code cleaning, small improvements, as well as +blogging and community building. Updates of the month include: + +- Refactored UI code to streamline menu stacking and ease the implementation + of an upcoming options menu. +- Added support for menu navigation using the D-Pad alongside the existing + analog stick support. +- Published a blog post about building Outer Wonders for Linux/itch.io + ([english][ow-bp-english], [french][ow-bp-french]). +- Posted weekly puzzles [#16][ow-p16], [#17][ow-p17], [#18][ow-p18] and + [#19][ow-p19] on social media for players wishing to give puzzles a + try prior to downloading the game. + +_Discussions: +[/r/rust_gamedev](https://www.reddit.com/nfgxjl), +[Hacker News](https://news.ycombinator.com/item?id=27244017)_ + +[Outer Wonders]: https://utopixel.itch.io/outer-wonders +[Utopixel]: https://utopixel.games +[ow-itchio]: https://utopixel.itch.io/outer-wonders +[ow-bp-english]: https://utopixel.games/en/blog/building-outer-wonders-for-linux/ +[ow-bp-french]: https://utopixel.games/fr/blog/adaptation-outer-wonders-linux/ +[ow-p16]: https://twitter.com/utopixel/status/1389984537170620422 +[ow-p17]: https://twitter.com/utopixel/status/1392526232596541449 +[ow-p18]: https://twitter.com/utopixel/status/1395079712020602884 +[ow-p19]: https://twitter.com/utopixel/status/1397614237187551237 + +### [rpg-cli] + +![agent stats and a fight with a spider in ~/dev/facundoolano](rpg-cli.png) + +[rpg-cli] by [@facundoolano] is a bare-bones JRPG-inspired terminal game. +It can work as an alternative to cd where you randomly encounter enemies +as you change directories. +The game features: + +- Character stats and leveling system. +- Automatic turn-based combat. +- Item and equipment support. +- 15+ enemy classes. +- Permadeath with item recovering. +- Run and bribe to escape battles. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/nktk1y/rpgcli_your_filesystem_as_a_dungeon)_ + +[rpg-cli]: https://github.com/facundoolano/rpg-cli +[@facundoolano]: https://github.com/facundoolano + +### [Theta Wave] + +{{ image_figure( + alt="Blast Repeller" + src="theta-wave.gif" + caption="The Blast Repeller item pushes blasts away from the player", + link="https://github.com/amethyst/theta-wave") }} + +[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, the ["Loot"] update was released which enhanced how loot drops +are rolled, spawned, and how their effects are applied to the game. The Loot Update +also added an attraction system that allows for entities to repel or attract +other entities. + +Now an ["Organization"] update is in progress for Theta Wave. This update will +divide Theta Wave into two workspaces; a library and a binary. This update will also +add documentation comments for all of the library's features. + +[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/ +["Loot"]: https://github.com/amethyst/theta-wave/releases/tag/v0.1.6 +["Organization"]: https://github.com/amethyst/theta-wave/projects/5 + +## Engine Updates + +### [Tetra] + +[Tetra] is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This +month, versions 0.6.4 and 0.6.5 were released, featuring: + +- Stencil buffers +- Basic instanced mesh rendering +- Methods for reading textures back to the CPU (e.g. for screenshots) +- Support for passing slices/arrays as shader uniforms +- More utility methods for working with high-DPI displays +- Various bug fixes 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 + +### [Rustcraft][rustcraft] + +![rustcraft-img](rustcraft.png) + +[Rustcraft][rustcraft] by @dskart +is a simple Minecraft engine written in Rust using wgpu. + +It handles infinite world generation using gradient noise as well as placing +and breaking blocks. + +[rustcraft]: https://github.com/dskart/rustcraft + +### [rg3d] + +![rg3d](rg3d_terrain.jpg) + +[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 2D support (with lighting and physics) +- Multi-layer terrains ([check this video][rg3d_terrain_reddit]) +- Load balancer for texture uploader +- Customizable vertex format +- Instanced rendering fixes +- Menu items now can work without backing Menu widget +- Shadows fix for spotlights +- Selection improvements for Tree widget +- Continuous integration +- Basic Framework that hides engine initialization and game loop +- Performance improvements +- "Save" mode for FileSelector and FileBrowser widgets +- Various bug fixes and small improvements. + +rusty-editor updates: + +- Context menu for world outliner items +- Terrain editor +- Grid snapping for Move interaction mode +- Fixes for Move interaction mode in case of complex hierarchies +- Continuous integration +- Settings window refactoring + improvements +- Box selection mode bug fixes + +[rg3d]: https://github.com/mrDIMAS/rg3d +[rg3d_discord]: https://discord.gg/xENF5Uh +[rg3d_twitter]: https://twitter.com/DmitryNStepanov +[rg3d_terrain_reddit]: https://www.reddit.com/r/rust/comments/nlnfdb/timelapse_of_terrain_editing_in_rustyeditor_which/ + +### [Nestadia][nestadia] + +![Zelda running on Nestadia](nestadia.png) + +[Nestadia][nestadia] by @zer0x64, @junior-n30 and @CBenoit is a +server-based NES emulator. + +Nestadia was written as a reverse engineering and memory exploitation challenge +for NorthSec CTF 2021, a cybersecurity competition. Contestants were required to +reverse-engineer the emulator and ultimately write a Tool Assisted Speedrun to +run arbitrary code inside a provided ROM. + +After the competition, the code was open-sourced and cleaned up to remove +references to the competition. The developers intend on fixing more bugs and +adding more features in the near future. + +Some interesting features of this emulator are its server-based nature, and the +no_std core which means that the emulator can be built and ran pretty much +anywhere without much work. + +Incoming improvements include online multiplayer, sound, a WASM port, porting to +a libretro core, and using wgpu instead of sdl for the native GUI and debugger. + +[nestadia]: https://github.com/zer0x64/nestadia + +## Learning Material Updates + +### [Learn WGPU Updated to wgpu 0.8 and WGSL][learn-wgpu-news] + +After some GLSL issues trying to update the ["Learn WGPU"][learn-wgpu] tutorial +to version WGPU 0.8, [@sotrh] decided to migrate to WGSL. +This update was a lot of work, but relatively painless. +As a result, `shaderc` is no longer a dependency. + +Checkout more at [here][learn-wgpu-news]. + +[@sotrh]: https://patreon.com/sotrh +[learn-wgpu]: https://sotrh.github.io/learn-wgpu +[learn-wgpu-news]: https://sotrh.github.io/learn-wgpu/news/#_0-8-and-wgsl + +### [Voxel Engine with Rust and wgpu-rs][voxel_engine_video] + +[![Youtube preview](voxel_engine_wgpu.jpg)][voxel_engine_video] + +[@TanTanDev] published a [video][voxel_engine_video] about +how he made a voxel engine written in Rust using wgpu. + +Currently voxel rendering, chunk management, flying camera, +and simple lightning is implemented. +The source code is released on [github][voxel_engine_github]. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/nn0j5l/i_made_a_voxel_engine_with_rust_and_wgpurs)_ + +[@TanTanDev]: https://twitter.com/TanTanDev +[voxel_engine_video]: https://youtube.com/watch?v=96ht7rd3Y5I +[voxel_engine_github]: https://github.com/TanTanDev/first_voxel_engine + +### [1 Year of Rust Game Development][video-1-year-of-rust-gamedev] + +[![YouTube thumbnail](1_year_of_rust_gamedev.png)][video-1-year-of-rust-gamedev] + +[Another video][video-1-year-of-rust-gamedev] by [@TanTanDev] is about +the projects he made during his first year of learning Rust. +He also talks about why he likes the Rust programming language and community. + +_Discussions: [/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/n4o197)_ + +[video-1-year-of-rust-gamedev]: https://youtu.be/ZltAssmicsM +[@TanTanDev]: https://twitter.com/TanTanDev + +### [LD48: Rusty MMO in 48 Hours][ld48-mmo] + +![A screenshot of Dig World gameplay](https://img.itch.zone/aW1nLzYwMDQyNzkucG5n/original/VNIJnu.png) + +@kuviman wrote a devlog about his experience writing a video game in Rust. + +He needed to make a game in just 48 hours for the Ludum Dare 48 (LD48) +game jam, so he chose a simple theme: digging. + +20 hours later, he had a full-fledged MMO - complete with hackers! + +_Discussion: [r/rust_gamedev](https://www.reddit.com/r/rust_gamedev/comments/nhdwky/i_used_rust_to_make_an_mmo_in_48_hours_for)_ + +[ld48-mmo]: +https://kuviman.itch.io/dig-world/devlog/255566/so-i-made-an-mmo-in-48-hours + +### [State of Rust in Unreal Engine][rust_in_unreal] + +[This Reddit post][rust_in_unreal] discusses the current state of using Rust in +the Unreal Engine. It concludes that although there are several ways that Rust +could interact with the engine, all are still forced to use C++ to bootstrap +these operations. + +[rust_in_unreal]: https://www.reddit.com/r/rust_gamedev/comments/n9v8m9/rust_in_unreal_engine_may_2021_summary/ + +### [2048: Using an event system to reset the game][2048-bevy-youtube] + +[![YouTube Card](2048-bevy-reset-game-events.png)][2048-bevy-youtube] + +[@chrisbiscardi] published [a video][2048-bevy-youtube] about using Bevy's event +readers and writers to implement a reset game button for a 2048 clone. + +The video walks through implementing a "reset game" UI button in Bevy 0.5 by taking +advantage of Bevy's event system for reading and writing a ResetGameEvent. It also +covers recursively despawning entities and sprites. + +_Discussion: [Twitter][2048-bevy-twitter]_ + +[2048-bevy-youtube]: https://youtube.com/watch?v=4TJsEXupFso +[2048-bevy-twitter]: https://twitter.com/chrisbiscardi/status/1397291221702254595 +[@chrisbiscardi]: https://twitter.com/chrisbiscardi + +## Tooling Updates + +### [Graphite][graphite-repo] + +{{ image_figure( + alt="Piet Mondrian's artwork replicated in Graphite using the new color picker" + src="graphite-piet.png" + caption="Piet Mondrian's artwork replicated in Graphite using the new color picker") }} + +Graphite ([GitHub][graphite-repo], [Discord][graphite-discord], +[Twitter](https://twitter.com/GraphiteEditor)) is an in-development vector and +raster graphics editor built on a nondestructive node-based workflow. + +In the past month, new frontend features have mostly closed the gap for a +visually complete UI while a major Rust backend refactor took place. + +A new frontend system for floating menus was added to draw menus over the UI, +like dropdown menu input widgets and popovers to display the new color picker. +Also, the application menu bar was built with working buttons for the new Undo +and Export SVG actions. + +A large refactor in the Rust backend created a simpler communication strategy +between all components in the software stack and a standard method of handling +user inputs. + +[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. 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://github.com/GraphiteEditor/Graphite/blob/master/README.md#discord +[graphite-twitter]: https://twitter.com/GraphiteEditor +[graphite-live-demo]: https://editor.graphite.design/ + +## Library Updates + +### [Dimforge][dimforge] + +[![Dimforge logo](dimforge.png)][dimforge] + +[Dimforge][dimforge] creates open-source Rust crates for numerical simulation. +Some of the [recent updates][dimforge-update]: + +- [Rapier] v0.9 brings user-defined storages, colliders not attached + to any rigid-body, velocity-based kinematic bodies, + and a lot of [other improvements][rapier-v0-9]. +- bevy_rapier v0.10 was completely rewritten using + the new user-defined storages to become + significantly more ergonomic and "bevy-native" feel. +- New exhaustive user-guides for [Rapier][guide-rapier] + and [bevy_rapier][guide-bevy_rapier] were written. + They cover all the available features of Rapier, excepted details about + implementing your own custom storage for colliders and rigid-bodies. +- The [JS bindings for Rapier][rapier-js] have been updated to use Rapier 0.9. +- nalgebra v0.26 and v0.27 got [const-generics support][na-const] + and macros for constructing matrices/vectors/points in a convenient way. + +[dimforge]: https://dimforge.com +[dimforge-update]: https://dimforge.com/blog/2021/06/06/this-month-in-dimforge +[Rapier]: https://rapier.rs +[rapier-v0-9]: https://github.com/dimforge/rapier/blob/master/CHANGELOG.md#v090 +[rapier-js]: https://github.com/dimforge/rapier.js +[guide-rapier]: https://www.rapier.rs/docs/user_guides/rust/getting_started +[guide-bevy_rapier]: https://www.rapier.rs/docs/user_guides/rust_bevy_plugin/getting_started_bevy +[na-const]: https://www.dimforge.com/blog/2021/04/12/integrating-const-generics-to-nalgebra + +### [egui] + +![egui](egui.gif) + +[egui] by [@emilk] is an easy-to-use immediate mode GUI library in pure Rust. + +This month [version 0.12] of egui was released, with improved plots, +multitouch, user memory stores, window pivots, and more. + +You can try out egui in the [online demo]. + +_Discussions: [/r/rust](https://www.reddit.com/r/rust/comments/n9f6vt/announcing_egui_012_the_simple_gui_library/)_ + +[egui]: https://github.com/emilk/egui +[online demo]: https://emilk.github.io/egui +[version 0.12]: https://github.com/emilk/egui/blob/master/CHANGELOG.md +[@emilk]: https://twitter.com/ernerfeldt + +### [naga] + +![Dota2 running on Naga](gfx-dota2-naga.jpg) + +Naga is a shader translation library in pure Rust, aiming to replace +glsl-to-spirv and SPIRV-Cross. + +In April the gfx-rs team shared a glimpse of the performance difference with +SPIRV-Cross on a single pipeline creation. In May, they did a full-fledged +Dota2 run on [gfx-portability] without SPIRV-Cross. All shader translation was +done by [naga], roughly 4x as fast as the C++ alternative +(with no pipeline caching involved). Read more on [gfx-naga-blog]. + +[naga]: https://github.com/gfx-rs/naga +[gfx-portability]: https://github.com/gfx-rs/portability +[gfx-naga-blog]: https://gfx-rs.github.io/2021/05/09/dota2-msl-compilation.html + +### [rafx] + +{{ image_figure( + alt="Rafx Wireframe Demo" + src="rafx-wireframe-demo.jpg" + caption="Demo with wireframes enabled") }} + +Rafx is a multi-backend renderer that optionally integrates with the +[distill][rafx-distill] asset pipeline. + +This month, [@dvd] completed work on the new job system. It implements three +steps: extract, prepare, and write. These jobs are now more structured, making +them easier to implement while supporting concurrent execution and reducing +dynamic allocation. They also integrate with a visibility system to ensure that +off-screen objects are not processed. + +[@aclysma] continued work on OpenGL ES 2.0/3.0 backends and documented +[implementation details][rafx-implementation-details] of currently available +rendering backends. + +Additionally, some rendering features were improved and added: mesh rendering +now uses an instance-rate vertex buffer instead of per-object uniforms, +improving performance. Rendering features now support wireframe and untextured +rendering modes. An egui render feature was added, and the demo now uses egui +instead of imgui. + +[rafx]: https://github.com/aclysma/rafx +[rafx-distill]: https://github.com/amethyst/distill +[rafx-implementation-details]: https://github.com/aclysma/rafx/tree/master/docs/api/backends +[@aclysma]: https://github.com/aclysma +[@dvd]: https://github.com/DavidVonDerau + +### [Bevy Retro][bevy_retro] + +{{ image_figure( + alt="ui-example" + src="bevy-retro.gif" + caption="Bevy Retro UI example") }} + +[Bevy Retro][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 Retro has gained a few new features, the biggest of +which is an integration with the [RAUI] UI library ( also featured in this +newsletter ), allowing you to design a fully-fledged user interface for Bevy Retro +games. Additional features added were: + +- A simple sound playing API +- Text rendering for the BDF font format +- Custom render hook support allowing you to use raw [Luminance] API calls to render + anything you want into the low-resolution framebuffer + +You can ask questions or give feedback for Bevy Retro +[on GitHub](https://github.com/katharostech/bevy_retro/discussions). + +[bevy_retro]: https://github.com/katharostech/bevy_retro +[Bevy]: https://bevyengine.org +[katharos_license]: https://github.com/katharostech/katharos-license +[Luminance]: https://github.com/phaazon/luminance-rs +[RAUI]: https://raui-labs.github.io/raui/ + +### [Texture Generator] + +{{ image_figure( + alt="A tilemap with procedural textures" + src="texture-generator.png" + caption="A preview to version 0.5 with furniture") }} + +[Texture Generator] by [Orchaldir] is a library to generate textures, +and a library to use those textures to render tilemaps. +Both libraries can generate color & depth images and +support post-processing effects like lighting & ambient occlusion. +For randomness, the instance id (e.g. the 145th brick) and/or the tile id are hashed. + +The [current release] focuses on furniture. + +[Texture Generator]: https://github.com/Orchaldir/texture_generator +[Orchaldir]: https://github.com/Orchaldir +[current release]: https://github.com/Orchaldir/texture_generator/projects/8 + +### [bevy_asset_loader] + +![Configuring two asset collections](bevy_asset_loader.png) + +`bevy_asset_loader` by [@nikl_me] is a plugin for [Bevy][bevy] apps aiming to +improve a common pattern for asset-loading. The boilerplate required to load +assets during a "loading state" is reduced to a minimum. At the same time, the +plugin brings together the internal names of assets and their filepath, making +it easier to add new assets and to keep an overview over already existing ones. + +The library introduces the `AssetCollection` trait that can be derived. Any +number of asset collections can be loaded by a single `AssetLoader` during a +configured app state. When all assets are loaded, the collections will be +inserted into Bevy's ECS as resources. Afterwards, the `AssetLoader` will +switch into a second configurable app state. At this point, your app can use +the asset collections that now contain loaded asset handles. + +Currently, a single file always corresponds to one asset, and more complex +assets like e.g. `TextureAtlas` are not yet supported. There are plans to +extend the `asset` attribute to allow loading more complex assets. Stay tuned! + +[bevy_asset_loader]: https://github.com/NiklasEi/bevy_asset_loader +[bevy]: https://github.com/bevyengine/bevy +[@nikl_me]: https://twitter.com/nikl_me + +### [tobj][tobj] + +`tobj` by [@Twinklebear] and [@virtualritz] is a simple and lightweight +option for loading OBJ files. `tobj` was originally written inspired by +[@syoyo]'s tinyobjloader, to provide a similar lightweight and easy to integrate +API for loading OBJ files in Rust. + +While initially targeted at realtime rendering applications, `tobj` has gained +more advanced importer functionality required for offline rendering, +simulation, and modeling applications, through recent work by [@virtualritz]. +These features provide support for merging vertices to avoid discontinuities +in simulation packages and reordering vertices to allow omitting the +index buffer. These features have been added while preserving the original +lightweight API design goal of `tobj`, making it a useful crate for a range of +applications loading with OBJ files. + +[tobj]: https://github.com/Twinklebear/tobj +[@Twinklebear]: https://github.com/Twinklebear/ +[@virtualritz]: https://github.com/virtualritz +[@syoyo]: https://github.com/syoyo + +### [Libfive][libfive] + +![CSG difference operation with a sphere and three cylinders](libfive.png) + +`libfive` by [@virtualritz] is a safe, oxidized wrapper around +[Matt Keeter][@mkeeter]'s [`libfive`][libfive-orig] – a "library and set of +tools for solid modeling especially suited for parametric and procedural +design". + +`libfive` is based on [functional representation][f-rep] (f-rep). F-reps can be +evaluated as 3D meshes with aribitrary precision. + +One could e.g. use this for a compact definition of a game's levels and mesh +them adaptively, on the fly, during loading. With a density suitable for the +machine/GPU running the game. + +F-reps can also be sliced into polylines/vectors or bitmaps – e.g. for deriving +[level sets][level-set] or for SLA/DLP 3D printing. + +[libfive]: https://github.com/virtualritz/libfive-rs/tree/master/libfive/ +[libfive-orig]: https://libfive.com/ +[@virtualritz]: https://github.com/virtualritz/ +[@mkeeter]: https://github.com/mkeeter/ +[f-rep]: https://en.wikipedia.org/wiki/Function_representation +[level-set]: https://en.wikipedia.org/wiki/Level_set + +### [nvtx-rs] + +{{ image_figure( + alt="A screenshot of NVIDIA NSight Systems with only one sections measured" + src="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. + +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. + +[nvtx-rs]: https://github.com/simbleau/nvtx-rs +[@simbleau]: https://github.com/simbleau + +## Requests for Contribution + + + +- [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 + +------ + +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/nwlcsp/this_month_in_rust_gamedev_22_may_2021/), +[Twitter](https://twitter.com/rust_gamedev/status/1402736426563870720), +[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/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/nestadia.png b/content/news/022/nestadia.png new file mode 100644 index 000000000..5503f843f Binary files /dev/null and b/content/news/022/nestadia.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/outer-wonders.gif b/content/news/022/outer-wonders.gif new file mode 100644 index 000000000..82eb681fb Binary files /dev/null and b/content/news/022/outer-wonders.gif differ diff --git a/content/news/022/pglowrpg_progress.gif b/content/news/022/pglowrpg_progress.gif new file mode 100644 index 000000000..5487c3378 Binary files /dev/null and b/content/news/022/pglowrpg_progress.gif differ diff --git a/content/news/022/rafx-wireframe-demo.jpg b/content/news/022/rafx-wireframe-demo.jpg new file mode 100644 index 000000000..5c45cac87 Binary files /dev/null and b/content/news/022/rafx-wireframe-demo.jpg differ diff --git a/content/news/022/rg3d_terrain.jpg b/content/news/022/rg3d_terrain.jpg new file mode 100644 index 000000000..7bd28c093 Binary files /dev/null and b/content/news/022/rg3d_terrain.jpg 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/022/rustcraft.png b/content/news/022/rustcraft.png new file mode 100644 index 000000000..822163ed9 Binary files /dev/null and b/content/news/022/rustcraft.png differ diff --git a/content/news/022/texture-generator.png b/content/news/022/texture-generator.png new file mode 100644 index 000000000..a43554da0 Binary files /dev/null and b/content/news/022/texture-generator.png differ diff --git a/content/news/022/the_process.gif b/content/news/022/the_process.gif new file mode 100644 index 000000000..a17918941 Binary files /dev/null and b/content/news/022/the_process.gif differ diff --git a/content/news/022/theta-wave.gif b/content/news/022/theta-wave.gif new file mode 100644 index 000000000..d0538685f Binary files /dev/null and b/content/news/022/theta-wave.gif differ diff --git a/content/news/022/unbroken_lynx.png b/content/news/022/unbroken_lynx.png new file mode 100644 index 000000000..40f886582 Binary files /dev/null and b/content/news/022/unbroken_lynx.png differ diff --git a/content/news/022/veloren.jpg b/content/news/022/veloren.jpg new file mode 100644 index 000000000..ae793bf32 Binary files /dev/null and b/content/news/022/veloren.jpg differ diff --git a/content/news/022/voxel_engine_wgpu.jpg b/content/news/022/voxel_engine_wgpu.jpg new file mode 100644 index 000000000..4c1c3db2e Binary files /dev/null and b/content/news/022/voxel_engine_wgpu.jpg 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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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