@@ -62,10 +62,362 @@ If needed, a section can be split into subsections with a "------" delimiter.
62
62
63
63
## Game Updates
64
64
65
+ ### [ A/B Street] [ abstreet ]
66
+
67
+ ![ Isometric buildings and textured areas] ( abstreet.png )
68
+
69
+ [ A/B Street] [ abstreet ] is a traffic simulation game exploring how small changes
70
+ to roads affect cyclists, transit users, pedestrians, and drivers. Any city
71
+ with OpenStreetMap coverage can be used!
72
+
73
+ Some of this month's updates:
74
+
75
+ - finished support for driving on the left side of the road;
76
+ - isometric buildings and support for textures by [ Michael] [ mkirk ] ;
77
+ - a flurry of major UI updates, thanks to the return of the project's UX
78
+ designer;
79
+ - an option to disable parking simulation, to workaround missing data.
80
+ - alleyways imported from OSM;
81
+ - more realistic traffic signal timing constraints, thanks to
82
+ [ Sam] [ NoSuchThingAsRandom ] , a new contributor.
83
+
84
+ [ abstreet ] : https://abstreet.org
85
+ [ mkirk ] : https://github.com/michaelkirk
86
+ [ NoSuchThingAsRandom ] : https://github.com/NoSuchThingAsRandom/
87
+
88
+ ### [ Mimas]
89
+
90
+ ![ Mimas screenshot] ( mimas.png )
91
+
92
+ [ Mimas] is a WIP voxel engine and game, inspired by Minetest and Minecraft.
93
+ It's been in development since almost 2 years, and has recently seen a public
94
+ prototype release 0.4.0.
95
+
96
+ Several of the features that have already been implemented as of Oct 1st:
97
+
98
+ - Procedural map generation with hilly landscape, trees, flowers, water and caves
99
+ - Map manipulation (removal/addition of blocks)
100
+ - Crafting
101
+ - Chests
102
+ - Textures (taken from the Minetest project, under CC-BY-SA license)
103
+ - Tools
104
+ - QUIC based network protocol with SRP based authentication
105
+ - Multiplayer: chat, (hardcoded) avatars
106
+ - Ability to add custom content (e.g. blocks) using a toml format
107
+
108
+ Imgur screenshot [ gallery] .
109
+
110
+ [ Mimas ] : https://github.com/est31/mimas
111
+ [ gallery ] : https://imgur.com/a/vvo7len
112
+
113
+ ### pGLOWrpg
114
+
115
+ ![ pGLOWrpg banner] ( pglowrpg_banner.png )
116
+
117
+ The [ @pGLOWrpg ] (Procedurally Generated Living Open World RPG) is a long-term
118
+ project in development by [ @Roal_Yr] , which aims to be a text-based game with
119
+ maximum portability and accessibility and focus on interactions and emergent
120
+ narrative.
121
+
122
+ The pGLOWrpg meets its first official anniversary on September the 15th
123
+ and goes public at [ pGLOWrpg repo] !
124
+
125
+ For the past month the main focus of the development was on:
126
+
127
+ - Improving the UI.
128
+ - Major refactoring.
129
+ - Unification of I/O means.
130
+ - Making things ready for publication.
131
+
132
+ Main features of reported version are:
133
+
134
+ - Ability to generate one or many worlds from customizable presets.
135
+ - Ability to have output in both raw (b/w .png) and colorized images.
136
+ - Generated data is as follows: terrain, watermask, biomes, rivers, geological regions,
137
+ rainfall and temperature.
138
+
139
+ For main feature reports and dev blogs follow [ @pGLOWrpg ] on Twitter.
140
+
141
+ [ @Roal_Yr ] : https://twitter.com/Roal_Yr
142
+ [ @pGLOWrpg ] : https://twitter.com/pglowrpg
143
+ [ pGLOWrpg repo ] : https://github.com/roalyr/pglowrpg
144
+
145
+ ### Oh no, Lava!
146
+
147
+ ![ shooting water into lava] ( ohnolava_troligtvis.gif )
148
+
149
+ "Oh no, Lava!" by [ @captainfleppo ] is the working title
150
+ of a platforming game which take inspiration
151
+ from an old iOS game created back in 2014. The game is running with [ Bevy] [ bevy ]
152
+ as its core. The gameplay isn't there yet, but you as a player need to jump on
153
+ furnitures, collect coins and fight lava/fire based enemies with your water gun.
154
+
155
+ [ @captainfleppo ] : https://twitter.com/captainfleppo
156
+ [ bevy ] : https://bevyengine.org
157
+
158
+ ### [ BUGOUT]
159
+
160
+ ![ Play Go against AI and friends on the web] ( BUGOUT.jpg )
161
+ _ Playing KataGo AI in 9x9_
162
+
163
+ [ BUGOUT] is a web application which allows you to play Go/Baduk/Weiqi
164
+ against a leading AI ([ KataGo] ).
165
+ It provides a multiplayer mode so that you can play other humans,
166
+ either by joining a public queue or sharing a private URL to your friend.
167
+
168
+ The user interface is lifted from [ Sabaki] .
169
+
170
+ The initial installation's AI is powered by an energy-efficient
171
+ [ dev board] [ nv-devboard ] .
172
+
173
+ BUGOUT is marching actively toward production, at which point the
174
+ team will publish the website address and invite users.
175
+ The author anticipates being finished with the production release
176
+ prior to Jan 1, 2021.
177
+
178
+ [ BUGOUT ] : https://github.com/Terkwood/BUGOUT
179
+ [ KataGo ] : https://github.com/lightvector/KataGo
180
+ [ Sabaki ] : https://github.com/SabakiHQ/Sabaki
181
+ [ nv-devboard ] : https://developer.nvidia.com/embedded/jetson-nano-developer-kit
182
+
183
+ ### Project YAWC
184
+
185
+ ![ Screenshot of an in-progress game of Project YAWC] ( project_yawc.png )
186
+
187
+ Project YAWC is an in-progress Advance-Wars style strategy game being developed
188
+ by junkmail using [ ggez] as a framework. The game is currently in a closed alpha
189
+ state with working netplay. September saw the release of version A2, including
190
+ revamped netcode and the full core set of units.
191
+
192
+ [ ggez ] : https://ggez.rs/
193
+
65
194
## Learning Material Updates
66
195
196
+ ### [ OpenGL Preprocessor for Rust]
197
+
198
+ With the full power of Cargo build scripts and [ Tera] , you can create an advanced
199
+ GLSL preprocessor which can generate code conditionally, in loops, and even
200
+ inherit code from other templates.
201
+
202
+ ![ An OpenGL preprocessor for Rust] ( opengl_preprocessor.png )
203
+
204
+ Writing plain GLSL code is uncomfortable, code is quite often is duplicated, libraries
205
+ aren't something natural for GLSL (means you can't out of the box do #include "library.glsl").
206
+ The last point is especially problematic if some constants actually originate in
207
+ your game logic (like the number of player types). Updating these values manually
208
+ in your shader code is repetitive and prone to both error and simple forgetfulness.
209
+ It's really helpful to build some kind of preprocessor for your GLSL code,
210
+ which can include other files, so you can organize your code into manageable chunks.
211
+ With the power of [ Tera] , it's now easy to accomplish.
212
+ Because Rust is also often used for web projects, which need a lot of templated
213
+ web-pages preprocessing, we can borrow such technology for our needs,
214
+ combine it with cargo build scripts and create a compile-time preprocessing tool.
215
+
216
+ [ tera ] : https://tera.netlify.app
217
+ [ OpenGL Preprocessor for Rust ] : https://codecrash.me/an-opengl-preprocessor-for-rust
218
+
219
+ ### Rust, Gamedev, ECS, and Bevy
220
+
221
+ ![ Bevy hello world code snippet and two game screenshots, one displaying two
222
+ blue spheres in a grey canvas and another one displaying a gameboy colored tile
223
+ game] ( ecs-bevy-tutorial.png )
224
+
225
+ [ @hugopeixoto ] released a couple of blog posts on ECS and Bevy,
226
+ including a tutorial on how to get started.
227
+
228
+ - The [ first part] [ hugopeixoto-p1 ] gives us an in depth overview of what ECS.
229
+ It starts with pseudocode for an object oriented approach
230
+ and goes through several iterations until we get to the ECS paradigm.
231
+
232
+ - The [ second part] [ hugopeixoto-p2 ] is a tutorial on how to use [ bevy] ,
233
+ a data driven game engine built in Rust.
234
+ It goes over the basic features of the engine,
235
+ using the example presented in the first part.
236
+
237
+ [ @hugopeixoto ] : https://twitter.com/hugopeixoto
238
+ [ hugopeixoto-p1 ] : https://hugopeixoto.net/articles/rust-gamedev-ecs-bevy.html
239
+ [ hugopeixoto-p2 ] : https://hugopeixoto.net/articles/rust-gamedev-ecs-bevy-p2.html
240
+ [ bevy ] : https://bevyengine.org
241
+
67
242
## Library & Tooling Updates
68
243
244
+ ### [ Thunderdome]
245
+
246
+ [ Thunderdome] is a ~~ gladitorial~~ generational arena library inspired by
247
+ [ generational-arena] , [ slotmap] , and [ slab] . It provides constant time
248
+ insertion, lookup, and removal via small (8 byte) keys that stay 8 bytes when
249
+ wrapped in ` Option<T> ` .
250
+
251
+ Data structures like Thunderdome's ` Arena ` store values and return keys that can
252
+ be later used to access those values. These keys are stable across removals and
253
+ have a generation counter to solve the [ ABA Problem] .
254
+
255
+ ``` rust
256
+ let mut arena = Arena :: new ();
257
+
258
+ let foo = arena . insert (" Foo" );
259
+ let bar = arena . insert (" Bar" );
260
+
261
+ assert_eq! (arena [foo ], " Foo" );
262
+ assert_eq! (arena [bar ], " Bar" );
263
+
264
+ arena [bar ] = " Replaced" ;
265
+ assert_eq! (arena [bar ], " Replaced" );
266
+
267
+ let foo_value = arena . remove (foo );
268
+ assert_eq! (foo_value , Some (" Foo" ));
269
+
270
+ // The slot previously used by foo will be reused for baz.
271
+ let baz = arena . insert (" Baz" );
272
+ assert_eq! (arena [baz ], " Baz" );
273
+
274
+ // foo is no longer a valid key.
275
+ assert_eq! (arena . get (foo ), None );
276
+ ```
277
+
278
+ _ Discussions:
279
+ [ twitter] ( https://twitter.com/LPGhatguy/status/1303375906493276160 ) _
280
+
281
+ [ Thunderdome ] : https://github.com/LPGhatguy/thunderdome
282
+ [ generational-arena ] : https://crates.io/crates/generational-arena
283
+ [ slotmap ] : https://crates.io/crates/slotmap
284
+ [ slab ] : https://crates.io/crates/slab
285
+ [ ABA Problem ] : https://en.wikipedia.org/wiki/ABA_problem
286
+
287
+ ### [ This Month in Mun] [ mun-september ]
288
+
289
+ [ ![ Mun logo] ( mun-logo.png )] [ Mun ]
290
+
291
+ [ Mun] is a scripting language for gamedev focused on quick iteration times
292
+ that is written in Rust.
293
+
294
+ [ September updates] [ mun-september ] include:
295
+
296
+ - on-going work for multi-file projects;
297
+ - build pipeline improvements;
298
+ - bug fixes in the Mun compiler and C++ bindings;
299
+ - a lot of refactors and quality of life improvements.
300
+
301
+ [ Mun ] : https://mun-lang.org
302
+ [ mun-september ] : https://mun-lang.org/blog/2020/10/01/this-month-september/
303
+
304
+ ### [ audir]
305
+
306
+ [ audir] is a low level audio library supporting Windows (WASAPI), Linux (Pulse)
307
+ and Android (OpenSLES & AAudio).
308
+
309
+ It aims at provide a minimal and mostly unsafe but feature-rich API on top of
310
+ common audio backends with focus on gaming applications. The initial release
311
+ version 0.1.0 provides basic recording and playback support for all available
312
+ backends, including a small music player example!
313
+
314
+ Currently looking into coupling with [ dasp] for dsp audio graphs to provide
315
+ a higher level entry point.
316
+
317
+ [ audir ] : https://github.com/norse-rs/audir
318
+ [ dasp ] : https://github.com/RustAudio/dasp
319
+
320
+ ### [ Crevice]
321
+
322
+ [ Crevice] is a library that helps define GLSL-compatible (std140) structs for
323
+ use in uniform and storage buffers. It uses new ` const fn ` capabilities
324
+ stabilized in [ Rust 1.46.0] to align types with explicitly zeroed padding.
325
+
326
+ Crevice depends heavily on [ mint] to support almost any Rust math library. It
327
+ also contains helpers for safely sizing and writing buffers, making dynamic
328
+ buffer layout a breeze.
329
+
330
+ ``` rust
331
+ #[derive(AsStd140 )]
332
+ struct MainUniform {
333
+ orientation : mint :: ColumnMatrix3 <f32 >,
334
+ position : mint :: Vector3 <f32 >,
335
+ scale : f32 ,
336
+ }
337
+
338
+ let value = MainUniform {
339
+ orientation : cgmath :: Matrix3 :: identity (). into (),
340
+ position : [1.0 , 2.0 , 3.0 ]. into (),
341
+ scale : 4.0 ,
342
+ };
343
+
344
+ upload_data_to_gpu (value . as_std140 (). as_bytes ());
345
+ ```
346
+
347
+ _ Discussions:
348
+ [ twitter] ( https://twitter.com/LPGhatguy/status/1308499131212599296 ) _
349
+
350
+ [ Crevice ] : https://github.com/LPGhatguy/crevice
351
+ [ Rust 1.46.0 ] : https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html
352
+ [ mint ] : https://github.com/kvark/mint
353
+
354
+ ### [ FemtoVG]
355
+
356
+ ![ femtovg] ( femtovg.png )
357
+
358
+ [ FemtoVG] is a 2D canvas API in Rust, based on [ nanovg] .
359
+
360
+ Currently, FemtoVG uses OpenGL as a rendering backend. A Metal backend is 95%
361
+ done, and a wgpu backend is on the roadmap. The project is definitely looking
362
+ for contributors.
363
+
364
+ Unlike NanoVG, FemtoVG has full text-shaping support thanks to harfbuzz.
365
+
366
+ FemtoVG, just like the original NanoVG, is based on the _ stencil-then-cover_
367
+ approach presented in [ GPU-accelerated Path Rendering] [ gpupathrender.pdf ] .
368
+
369
+ Join the [ Discord channel] ( https://discord.gg/V69VdVu )
370
+ or follow [ FemtoVG on twitter] ( https://twitter.com/femtovg ) .
371
+
372
+ [ FemtoVG ] : https://github.com/femtovg/femtovg
373
+ [ nanovg ] : https://github.com/memononen/nanovg
374
+ [ gpupathrender.pdf ] : https://github.com/femtovg/femtovg/blob/master/assets/gpupathrender.pdf
375
+
376
+ ### [ gfx-rs] and [ gfx-portability]
377
+
378
+ ![ gfx-rs logo] ( gfx-logo.png )
379
+
380
+ [ gfx-portability] is a Vulkan portability implementation based on [ gfx-rs] .
381
+ It's basically a drop-in implementation of Vulkan on top of Metal and D3D12,
382
+ useful on platforms that don't have native Vulkan support, or buggy drivers.
383
+
384
+ It released version [ 0.8.1] ( https://github.com/gfx-rs/portability/releases/tag/0.8.1 )
385
+ with official support for the new [ KHR portability extension] [ khr-portability ] ,
386
+ as well as a few other extensions, plus a number of correctness fixes.
387
+
388
+ gfx-rs team asks Rust users of Vulkano, Ash, and other Vulkan-only wrappers to try
389
+ out the gfx-portability as a solution on macOS and relevant Windows 10 platforms.
390
+
391
+ In [ gfx-rs] itself, the DX12 backend, and the descriptor indexing feature support
392
+ got improved. There has been a push to get DX11 backend in a solid shape,
393
+ and it can now run [ vange-rs] pretty well 🎉.
394
+
395
+ [ gfx-rs ] : https://github.com/gfx-rs/gfx
396
+ [ gfx-portability ] : https://github.com/gfx-rs/portability
397
+ [ khr-portability ] : https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_portability_subset.html
398
+ [ vange-rs ] : https://github.com/kvark/vange-rs
399
+
400
+ ### [ Riddle]
401
+
402
+ [ Riddle] is a Rust media library in the vein of SDL,
403
+ building as far as possible on the most active/standard Rust libraries
404
+ (winit, wgpu, image, etc). Riddle is deliberately not an engine, or a framework.
405
+ It is a library devoted to exposing media related features in a unified way while
406
+ avoiding prescribing program structure. It provides abstractions over windowing,
407
+ input, audio, image loading/manipulation and provides a basic wgpu based 2D
408
+ renderer.
409
+ The [ docs] [ riddle-docs ] contain runnable examples for most methods and types.
410
+
411
+ The goal is to provide a stable foundation, resillient to developments in the Rust
412
+ gamedev ecosystem, on which games, custom engines, and other media applications can
413
+ be built.
414
+
415
+ _ Discussions:
416
+ [ /r/rust_gamedev] ( https://reddit.com/r/rust_gamedev/comments/j0xa3s/riddle_010 ) _
417
+
418
+ [ Riddle ] : https://github.com/vickles/riddle
419
+ [ riddle-docs ] : https://vickles.github.io/riddle/0.1.0/riddle
420
+
69
421
### Tetra
70
422
71
423
[ Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month,
0 commit comments