@@ -85,6 +85,116 @@ Wonder can be [played in the browser on itch.io][Wonder].
85
85
[ ludum-dare ] : https://ldjam.com
86
86
[ 48-hour-jam ] : https://ianjk.com/rust-gamejam/
87
87
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
+
88
198
## Learning Material Updates
89
199
90
200
### [ Rust on iOS with SDL2] [ rust-ios-sdl2-post ]
@@ -102,8 +212,133 @@ surface. This demo is using [Rust-SDL2][rust-sdl2] for bindings.
102
212
[ sdl2-project ] : https://www.libsdl.org/download-2.0.php
103
213
[ rust-sdl2 ] : https://crates.io/crates/sdl2
104
214
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
+
105
239
## Library & Tooling Updates
106
240
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
+
107
342
### Vulkan Renderer (Name TBD)
108
343
109
344
[ ![ 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!
136
371
[ vulkan-renderer-prototype-video ] : https://www.youtube.com/watch?v=Ks_HQbejHE4
137
372
[ moltenvk ] : https://github.com/KhronosGroup/MoltenVK
138
373
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
+
139
428
## Popular Workgroup Issues in Github
140
429
141
430
<!-- Up to 10 links to interesting issues -->
0 commit comments