Skip to content

Commit bf3641b

Browse files
authored
Merge branch 'source' into 17cupsofcoffee-patch-1
2 parents 8aeb297 + 8496602 commit bf3641b

File tree

12 files changed

+352
-0
lines changed

12 files changed

+352
-0
lines changed
231 KB
Loading
416 KB
Loading
Loading
177 KB
Loading
24.3 KB
Loading

content/posts/newsletter-014/index.md

Lines changed: 352 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,362 @@ If needed, a section can be split into subsections with a "------" delimiter.
6262

6363
## Game Updates
6464

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+
65194
## Learning Material Updates
66195

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+
67242
## Library & Tooling Updates
68243

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+
69421
### Tetra
70422

71423
[Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month,
139 KB
Loading
3.08 KB
Loading
Loading
Loading
Loading
53.4 KB
Loading

0 commit comments

Comments
 (0)