Skip to content

Commit 61fe4a9

Browse files
authored
Merge branch 'source' into source
2 parents 837bde6 + 1ca2730 commit 61fe4a9

14 files changed

+763
-4
lines changed

content/posts/newsletter-003/index.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,15 @@ it's pretty active.
131131
[veloren-survey]: https://veloren.net/devblog-36/#player-survey
132132
[veloren-video]: https://www.youtube.com/watch?v=iwP7SXdWcTg
133133

134-
### [PF Sandbox][pf-sandbox]
134+
### [Canon Collision][canon-collision]
135135

136136
![Exported models with textureas and skeletal animations](pf-sandbox.jpg)
137137

138-
[PF Sandbox][pf-sandbox] by [@rukai] is a platform fighter sandbox featuring:
139-
in game Fighter and Stage Editor, replays, and TAS tools.
138+
[Canon Collision][canon-collision] by [@rukai] is an Undertale + Homestuck
139+
fan-made platform fighter with powerful tools for modding.
140+
It was forked from another project of rukai's
141+
[PF Sandbox](https://github.com/rukai/PF_Sandbox) so he could focus on making
142+
a game rather then an engine.
140143

141144
This month,
142145
[exporting and hot-reloading assets from blender](https://twitter.com/thisIsRukai/status/1180477120113340417),
@@ -145,7 +148,7 @@ This month,
145148
and [animations](https://twitter.com/thisIsRukai/status/1188261107124727808)
146149
were added to the project.
147150

148-
[pf-sandbox]:https://github.com/rukai/PF_Sandbox
151+
[canon-collision]:https://canoncollision.com
149152
[@rukai]: https://twitter.com/thisIsRukai
150153

151154
### [Antorum][antorum]
77.6 KB
Loading

content/posts/newsletter-012/data_oriented_design.svg

Lines changed: 330 additions & 0 deletions
Loading
69.1 KB
Loading
69.8 KB
Loading

content/posts/newsletter-012/index.md

Lines changed: 289 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,116 @@ Wonder can be [played in the browser on itch.io][Wonder].
8585
[ludum-dare]: https://ldjam.com
8686
[48-hour-jam]: https://ianjk.com/rust-gamejam/
8787

88+
### [Canon Collision][canon-collision]
89+
90+
![Basic Projectiles](canon-collision.png)
91+
92+
[Canon Collision][canon-collision] by [@rukai] is an Undertale + Homestuck
93+
fan-made platform fighter with powerful tools for modding.
94+
95+
This month, he started work on the project again after taking a break.
96+
Notable changes:
97+
98+
- [basic projectiles](https://twitter.com/thisIsRukai/status/1287377878460456963),
99+
- [WIP grab implementation (with some humorous results)](https://www.youtube.com/watch?v=sSrBGpT-Ebs),
100+
- [New animations + attacks](https://www.youtube.com/watch?v=AaPkRSNhoSM)
101+
- and [custom shaders](https://twitter.com/thisIsRukai/status/1279324105125163008).
102+
103+
[canon-collision]:https://canoncollision.com
104+
[@rukai]: https://twitter.com/thisIsRukai
105+
106+
### pGLOWrpg
107+
108+
![Improved river pathfinding, paths respect topography](pglowrpg_12.gif)
109+
110+
The [@pGLOWrpg] (Procedurally Generated Living Open World RPG) is a long-term
111+
project in development by [@Roal_Yr], which aims to be a text-based game with
112+
maximum portability and accessibility and focus on interactions and emergent
113+
narrative.
114+
115+
For the past month(s) the main focus of the development was on the river
116+
generation system in the worldgen. Main features of the river generator are:
117+
118+
- High robustness with most edge cases covered;
119+
- Single-pass with subsequent iterations generation, with numerous options to
120+
tweak the process for either precision of the pattern or speed of generation;
121+
- Rivers are sorted upon intersections, their widths are adjusted, waterfalls
122+
are formed when necessary;
123+
- Inflow and outflow directions are recorded for each cell, which allows to
124+
follow the river upstream or downstream;
125+
- Simple yet effective erosion model implemented, which ensures no upwards flows
126+
are allowed;
127+
- Each stream has its unique ID, which will later be linked to the stream data;
128+
- Streams have 12 orders of magnitude from smallest brooks to major rivers;
129+
- All the options are available to user under "General", "Advanced" and
130+
"Very advanced" sections for any level of fine-tuning;
131+
132+
Further development will involve re-factoring of the code and making it ready
133+
to be published prior to implementing new features. For small dev reports follow
134+
[@pGLOWrpg] on Twitter.
135+
136+
[@Roal_Yr]: https://twitter.com/Roal_Yr
137+
[@pGLOWrpg]: https://twitter.com/pglowrpg
138+
139+
### [Sandbox]
140+
141+
![Sandbox screenshot](sandbox_screenshot.png)
142+
143+
[Sandbox] is a falling sand game by JMS55 that provides a variety of fun
144+
particle types to place, and then you get to watch the resulting interactions!
145+
146+
As they didn't make it in time for last month's newsletter, this month's edition
147+
covers the work they did in June and July:
148+
149+
- Released version 1.0 and 1.1, created a flatpak package and associated metadata,
150+
and published it to [Flathub].
151+
- Several new particles such as Fire, Mirror, Glitch, and some hidden ones,
152+
and tweaked or overhalled almost every other particle!
153+
- A fancy new glow post process effect for Acid/Fire/Electricity,
154+
created using wgpu-rs compute shaders.
155+
- As a precursor to this, they made a PR to the pixels crate that removes the
156+
old RenderPass approach in favor of giving the user direct access to wgpu.
157+
- Made a slick new icon and background for the game.
158+
- Added a video recording feature using gstreamer-rs and x264enc,
159+
and then later removed it (for now).
160+
- Moving from recording the raw texture generated for pixels
161+
to the post-processed texture from wgpu
162+
involved a major overhaul, and it proved too glitchy and slow.
163+
Hopefully it will be revived later, in the form of recording user inputs.
164+
- Many structural improvements, such as less glitchy particle
165+
placement with Bresenham's line algorithm,
166+
better error handling, and ensuring particles
167+
are only ever stored on the heap.
168+
- Performance improvements, including generating noise in a separate thread.
169+
- Currently WIP: UI using imgui.
170+
171+
![Sandbox icon](sandbox_icon.svg)
172+
173+
Got any ideas? Leave an [issue on github][Sandbox], or add it yourself!
174+
175+
[Sandbox]: https://github.com/JMS55/sandbox
176+
[Flathub]: https://flathub.org/apps/details/com.github.jms55.Sandbox
177+
178+
### [Pushin' Boxes][pushin-homepage]
179+
180+
[![Pushin' Boxes gameplay](pushin_boxes_gameplay.gif)][pushin-itch]
181+
182+
[Pushin' Boxes][pushin-homepage] ([itch][pushin-itch])
183+
is a [Sokoban][pushin-sokoban] clone made with [ggez][pushin-ggez] by
184+
[@septum][septum-twitter]. It features 16 levels of puzzling box-pushin' action
185+
where the player controls a little robot (named プシン).
186+
Check out a [blog post][pushin-post] about the game's release.
187+
188+
[The source code is available on GitLab][pushin-repository].
189+
190+
[pushin-homepage]: https://septum.io/games/pushin-boxes
191+
[pushin-itch]: https://septum.itch.io/pushin-boxes
192+
[pushin-sokoban]: https://en.wikipedia.org/wiki/Sokoban
193+
[pushin-post]: https://septum.io/blog/my-first-game
194+
[pushin-ggez]: https://github.com/ggez/ggez
195+
[pushin-repository]: https://gitlab.com/septum___/pushin_boxes
196+
[septum-twitter]: https://twitter.com/septum___
197+
88198
## Learning Material Updates
89199

90200
### [Rust on iOS with SDL2][rust-ios-sdl2-post]
@@ -102,8 +212,133 @@ surface. This demo is using [Rust-SDL2][rust-sdl2] for bindings.
102212
[sdl2-project]: https://www.libsdl.org/download-2.0.php
103213
[rust-sdl2]: https://crates.io/crates/sdl2
104214

215+
### [An Introduction to Data-Oriented Design in Rust][dod]
216+
217+
![vector vs linked list perf](data_oriented_design.svg)
218+
219+
Data-Oriented Design is an approach to program optimisation focused on
220+
considering the features and limitations of the target hardware, and
221+
carefully controlling the memory layout of data to take advantage of
222+
those.
223+
224+
In [this article][dod], [jamesmcm][jamesmcm] provides benchmarks and
225+
code for four example scenarios:
226+
227+
- [Array of Structs vs. Struct of Arrays][wikisoa]
228+
- Branching in a hot loop
229+
- Iteration in a vector vs. a linked list
230+
- Monomorphisation vs. [Dynamic Dispatch][traitobj]
231+
232+
The full article is available [here][dod].
233+
234+
[jamesmcm]: https://github.com/jamesmcm
235+
[wikisoa]: https://en.wikipedia.org/wiki/AoS_and_SoA
236+
[traitobj]: https://doc.rust-lang.org/book/ch17-02-trait-objects.html#trait-objects-perform-dynamic-dispatch
237+
[dod]: http://jamesmcm.github.io/blog/2020/07/25/intro-dod/#en
238+
105239
## Library & Tooling Updates
106240

241+
### [This Month in Mun][mun-july]
242+
243+
[![Mun logo](mun-logo.png)][Mun]
244+
245+
[Mun] is a scripting language for gamedev focused on quick iteration times
246+
that is written in Rust.
247+
248+
[Rustacean Station][rustacean] released [a podcast about Mun][rustacean-mun]
249+
in which the Mun Core Team sat down with host Jeremy
250+
to talk about why they chose Rust to develop Mun. If you are interested in
251+
having an inside look into Mun's origins and evolution, we recommend you check
252+
it out - or any of Rustacean Station's other podcasts for that matter!
253+
254+
Their additional [July updates][mun-july] include:
255+
256+
- initial support for the Language Server Protocol;
257+
- a community entry for the [Make It or Break It content] of Spaceship
258+
recreated with Mun & Rust;
259+
- CLI support for creating Mun projects;
260+
- performance benchmarks and improvements;
261+
- bugfixes and improved documentation.
262+
263+
[Mun]: https://mun-lang.org
264+
[mun-july]: https://mun-lang.org/blog/2020/07/30/this-month-july
265+
[rustacean]: https://rustacean-station.org
266+
[rustacean-mun]: https://rustacean-station.org/episode/020-mun
267+
[Make It or Break It content]: https://github.com/mun-lang/mun/issues/220
268+
269+
### [wgpu][wgpu-site]
270+
271+
![procgen dynamic "grass field"](tuitui-grass-field.jpeg)
272+
273+
^ _[@MacTuitui]'s everyday [nannou] experiement #1274_
274+
275+
The work is ongoing to validate all the incoming commands and guarantee API safety.
276+
Special thanks to [@GabrielMajeri] for helping to convert assertions
277+
into errors at `wgpu` level.
278+
The wgpu devs are also introspecting shader requirements
279+
and matching them against the pipelines, but this will take more effort
280+
before it will become universally available.
281+
282+
[@cwfitzgerald] has been busy adding a few handy native-only extensions,
283+
such as descriptor indexing and push constants.
284+
They have also converted the project's logging to [tracing](https://crates.io/crates/tracing),
285+
setting up the infrastructure for CPU profiling.
286+
287+
In the past 2 months, the API for descriptor structures in `wgpu-rs`
288+
have been undergoing a turbulent period.
289+
First, non-exhaustive semantics led to introduction of constructors.
290+
Then, efforts to reduce code duplication inside `wgpu` project has led to the
291+
[bovine invasion](https://github.com/gfx-rs/wgpu-rs/pull/460) on wgpu-rs API side.
292+
The devs are figuring out the plan to address that with a builder pattern now,
293+
which will address both the `Cow`s and non-exhaustives,
294+
hopefully putting the end to the turbulence.
295+
296+
In the meantime, `wgpu-rs` ecosystem is flourishing with applications and libraries.
297+
The [showcase gallery](https://wgpu.rs/#showcase) was updated with a few shiny images.
298+
299+
------
300+
301+
Finally, [@kunalmohan] has been busy
302+
[implementing WebGPU in Servo][webgpu-in-servo], based on `wgpu`.
303+
Thanks to this work, Servo is currently ahead of Gecko
304+
in terms of API being up-to-date and covered 🎉.
305+
It's already capable of rendering most of the examples,
306+
and the devs are looking forward to the day when the same Rust code
307+
(rendering with `wgpu-rs`) will be deployable to the Web,
308+
and viewable from Firefox, Servo, Chrome, and other browsers.
309+
310+
[@GabrielMajeri]: https://github.com/GabrielMajeri
311+
[@cwfitzgerald]: https://github.com/cwfitzgerald
312+
[@kunalmohan]: https://github.com/kunalmohan
313+
[webgpu-in-servo]: https://github.com/servo/servo/projects/24
314+
[@MacTuitui]: https://twitter.com/MacTuitui
315+
[nannou]: https://nannou.cc
316+
[wgpu-site]: https://wgpu.rs
317+
318+
### [Graphene][graphene] - Vulkan Render Graph
319+
320+
![execution flow example](graphene.png)
321+
322+
[Graphene][graphene] is a Vulkan render graph. Still heavily a work in progress,
323+
it is built to be a simpler abstraction over Vulkan, with long-term ambitions to
324+
serve as a graphics test-bench.
325+
326+
Currently, it implements a mesh render pass followed by a chromatic aberration
327+
post-process in less than [250 lines of Rust code][graphene_example_code].
328+
Current features include easy Vulkan initialization, automatic swapchain
329+
resizing, glTF mesh loading, and shader hot-reloading.
330+
Check out a ["Render graphs" blog post][graphene_blog]
331+
for a more in-depth introduction to the project.
332+
333+
![chromatic aberration demo](graphene-demo.jpeg)
334+
335+
You can follow progress on [GitHub][graphene] or on [Twitter][apoorvaj].
336+
337+
[graphene]: https://github.com/ApoorvaJ/graphene
338+
[graphene_blog]: https://apoorvaj.io/render-graphs-1/
339+
[graphene_example_code]: https://github.com/ApoorvaJ/graphene/blob/a1ee574d92445f4cff195ca517af2912ebfce697/src/demos/00/main.rs
340+
[apoorvaj]: https://twitter.com/ApoorvaJ
341+
107342
### Vulkan Renderer (Name TBD)
108343

109344
[![Vulkan renderer on iOS prototype](vulkan-renderer-prototype.jpeg)][vulkan-renderer-prototype-video]
@@ -136,6 +371,60 @@ tokio), all but a few worked out-of-the-box!
136371
[vulkan-renderer-prototype-video]: https://www.youtube.com/watch?v=Ks_HQbejHE4
137372
[moltenvk]: https://github.com/KhronosGroup/MoltenVK
138373

374+
### [Ludusavi]
375+
376+
![Demo of Ludusavi GUI](ludusavi.gif)
377+
378+
[Ludusavi] is a tool written in Rust by [@mtkennerly] for backing up PC game
379+
save data. It has backup info for more than 7,000 games, is cross-platform for
380+
Windows, Linux, and Mac, and has a GUI as well as a command line interface.
381+
The GUI was created using the [Iced] crate.
382+
383+
The [backup info] is sourced from [PCGamingWiki] so that everyone can help to
384+
expand the data, and it's stored in a documented format so that other backup
385+
tools can share the same data set. A [plugin] for [Playnite] was also just
386+
released.
387+
388+
[Ludusavi]: https://github.com/mtkennerly/ludusavi
389+
[@mtkennerly]: https://twitter.com/mtkennerly
390+
[Iced]: https://crates.io/crates/iced
391+
[backup info]: https://github.com/mtkennerly/ludusavi-manifest
392+
[PCGamingWiki]: https://www.pcgamingwiki.com/wiki/Home
393+
[plugin]: https://github.com/mtkennerly/ludusavi-playnite
394+
[Playnite]: https://playnite.link
395+
396+
### [Langcraft]
397+
398+
[Langcraft] is the Minecraft LLVM target you've never wanted.
399+
400+
Langcraft started as a dare to the `#lang-dev` channel of the Rust
401+
Community Discord to be able to parse Rust code in Minecraft.
402+
Naturally, it grew into a full code generator that can translate
403+
most LLVM IR to
404+
[Minecraft data packs](https://minecraft.gamepedia.com/Data_Pack),
405+
the game's deliberately-limited in-game scripting language. Langcraft
406+
is entirely language independent, so any language with an LLVM-based
407+
compiler can (with the right API bindings) run in Minecraft. Currently
408+
bindings to both C and Rust exist. While not as visually impressive as
409+
a redstone computer, Langcraft does stretch the bounds of the game quite
410+
a bit, using jukeboxes for memory, armor stands to represent pointers,
411+
and rearranging compiled code to make it run in the bounds of the data
412+
packs' fixed instruction limit.
413+
414+
This is all, naturally, entirely useless. The project is also still
415+
heavily work-in-progress and does not pretend to be stable, but it is
416+
usable. A handwritten interpreter for a Rust-like language has already
417+
been demonstrated running, and even more complex projects like [CHIP-8
418+
emulators](https://github.com/Dhole/chip8-rs.git) function (albeit at
419+
extremely slow speed).
420+
421+
You can watch a [video of Rust interpreter running Fizzbuzz][langcraft-video]:
422+
423+
[![youtube preview](longcraft-video.jpeg)][langcraft-video]
424+
425+
[Langcraft]: https://github.com/SuperTails/langcraft
426+
[langcraft-video]: https://youtube.com/watch?v=Cx0w5Wn9pPU
427+
139428
## Popular Workgroup Issues in Github
140429

141430
<!-- Up to 10 links to interesting issues -->
112 KB
Loading
1.67 MB
Loading
3.08 KB
Loading
2.96 MB
Loading

0 commit comments

Comments
 (0)