@@ -64,6 +64,31 @@ If needed, a section can be split into subsections with a "------" delimiter.
64
64
65
65
## Game Updates
66
66
67
+ ### [ Egregoria]
68
+
69
+ ![ Egregoria in 3D] ( egregoria.jpg )
70
+
71
+ [ Egregoria] ([ GitHub] [ Egregoria ] , [ Discord] [ egregoria-discord ] )
72
+ by [ @Uriopass ]
73
+ is a simulation oriented city builder that tries
74
+ to replicate modern society as well as possible.
75
+
76
+ It recently upgraded from a 2D top-down view to a
77
+ 3D third-person camera as seen in the screenshot above.
78
+
79
+ Elevated roads and bridges are now possible, allowing to build
80
+ [ complex highway interchanges] [ highway-screenshot ] .
81
+
82
+ Some technical details around the renderer with more screenshots,
83
+ along with an architectural overview of the project can be read in the
84
+ [ 9th devlog] [ egregoria-blog-post ] .
85
+
86
+ [ Egregoria ] : https://github.com/Uriopass/Egregoria
87
+ [ @Uriopass ] : https://github.com/Uriopass
88
+ [ egregoria-blog-post ] : https://douady.paris/blog/egregoria_9.html
89
+ [ egregoria-discord ] : https://discord.gg/CAaZhUJ
90
+ [ highway-screenshot ] : http://douady.paris/blog/img/blog_9/interchange.jpg
91
+
67
92
### [ Open Combat] [ opencombat ]
68
93
69
94
![ Open Combat logo] ( open_combat.jpg )
@@ -85,6 +110,97 @@ making of [video](https://youtube.com/watch?v=3TOEZ7krhvI) on YouTube.
85
110
86
111
[ opencombat ] : https://opencombat.bux.fr
87
112
113
+ ### [ Battleship.rs] ( https://github.com/deepu105/battleship-rs )
114
+
115
+ ![ Battleship gameplay] ( battleship.gif )
116
+
117
+ [ Battleship.rs] ( https://github.com/deepu105/battleship-rs ) by
118
+ [ Deepu] ( https://twitter.com/deepu105 ) is an open source Battleship game for
119
+ the terminal built in Rust using the [ tui-rs] ( https://github.com/fdehau/tui-rs )
120
+ crate.
121
+
122
+ The game uses different ship shapes, unlike the traditional vertical/horizontal
123
+ shapes, and has multiple game rules to choose from. There are two difficulty
124
+ levels as well. The game is supported in Linux, Mac and Docker.
125
+
126
+ If you have docker installed, you can play the game instantly by running
127
+
128
+ ``` bash
129
+ docker run --rm -it deepu105/battleship:main
130
+ ```
131
+
132
+ The next iteration would be to support a WebAssembly version of the same.
133
+
134
+ ### [ Blightmud] [ blightmud ]
135
+
136
+ ![ Blightmud logo] ( blightmud.png )
137
+
138
+ [ Blightmud] [ blightmud ] ([ Discord] ( https://discord.gg/qnxgUC5 ) ) is a mud client
139
+ for the terminal inspired by [ tintin++] [ tintin ] and [ tinyfugue] [ tinyfugue ]
140
+ allowing users to connect and get immersed in the worlds offered by text based
141
+ online multi user dungeons known as muds.
142
+
143
+ The project was birthed in April of 2020 and has come a long way since. It now
144
+ offers granular scripting access using [ lua] [ lua ] , plugin handling, built in
145
+ text-to-speech (via [ Speech dispatcher] [ speechd ] ), split view scrolling, modern
146
+ telnet protocols and TLS connections to name a few.
147
+
148
+ [ blightmud ] : https://github.com/Blightmud/Blightmud
149
+ [ tintin ] : https://tintin.mudhalla.net/
150
+ [ tinyfugue ] : http://tinyfugue.sourceforge.net/
151
+ [ lua ] : https://www.lua.org/
152
+ [ speechd ] : https://freebsoft.org/speechd
153
+
154
+ ### [ The Hat Chooses the Wizard] [ hatchooseswizard ]
155
+
156
+ ![ Level 1-4 of the game "The Hat Chooses the Wizard" running on a Game Boy
157
+ Advance] ( hatchooseswizard.jpg )
158
+ _ Runs on real hardware!_
159
+
160
+ The Hat Chooses the Wizard is a 2D platformer for the Game Boy Advance.
161
+
162
+ It was made for this year's Game Maker's Toolkit (GMTK) game jam with the theme
163
+ joined together and came in the top 25% of over 5800 entries. The game plays
164
+ over 12 levels with the core mechanic being to throw your hat and then
165
+ accelerate towards it. You can play it on a web based emulator embedded on the
166
+ [ itch] [ hatchooseswizard ] page.
167
+
168
+ The game is written in pure Rust and uses [ agb] [ agblibrary ] to
169
+ interface with the hardware. The library is designed to allow you to write games
170
+ without needing a detailed understanding of the hardware while still giving full
171
+ access to all of its capabilities. It is under active development with
172
+ plenty more features on the way.
173
+
174
+ You can find the source code for the game [ here] [ hatchooseswizardsource ] and all
175
+ feedback is welcome.
176
+
177
+ [ hatchooseswizard ] : https://lostimmortal.itch.io/the-hat-chooses-the-wizard
178
+ [ hatchooseswizardsource ] : https://github.com/corwinkuiper/joinedtogether
179
+ [ agblibrary ] : https://github.com/corwinkuiper/agb
180
+
181
+ ### [ Themengi]
182
+
183
+ ![ User highlighting objects in the game world and parsing the phrase
184
+ "dang puru rupuu kythengi" into the action "open", object "door", and mods
185
+ "red" and "left".] ( themengi.gif )
186
+ _ Demonstration of natural language parser with temporary words and grammar._
187
+
188
+ [ Themengi] ([ Discord] [ themengi-discord ] , [ Twitter] [ themengi-twitter ] )
189
+ is a puzzle adventure game where you learn an alien language,
190
+ with completely unknown words and grammar, to navigate the world
191
+ and find your way home.
192
+
193
+ This month the [ first devlog] [ themengi-video ] for
194
+ Themengi was published, discussing its natural language parser using
195
+ Head-Driven Phrase Structure Grammar, the choice to use Bevy, a texture
196
+ upscaling technique for faithful pixel art rendering, and implementing an
197
+ outline shader in the Bevy render pipeline.
198
+
199
+ [ Themengi ] : https://vgel.me/themengi
200
+ [ themengi-discord ] : https://discord.gg/GpparbnXPC
201
+ [ themengi-twitter ] : https://twitter.com/voooooogel
202
+ [ themengi-video ] : https://youtube.com/watch?v=gtIphiK7tMs
203
+
88
204
### [ Dango]
89
205
90
206
[ ![ Dango bouncing and jumping around] ( dango.gif )] [ Dango ]
@@ -111,26 +227,76 @@ other players to join using WebRTC.
111
227
112
228
## Learning Material Updates
113
229
114
- ## Library & Tooling Updates
230
+ ### [ A Trig-less Line of Sight Algorithm for 2D Games ] [ lineofsight ]
115
231
116
- ### [ erupt ]
232
+ ![ 2D Sight Example ] ( lineofsight.png )
117
233
118
- ![ erupt logo] ( erupt.svg )
234
+ [ @basstabs ] published a tutorial which explains how to write a
235
+ line of sight algorithm for 2D games in Rust without using trigonometry or
236
+ square roots. It includes vector diagrams and typeset math to explain the ideas
237
+ behind each stage of the algorithm, source code for each step, tests to verify
238
+ accuracy of the methods, and suggestions for further improvements.
239
+ Additionally, the
240
+ [ repository] ( https://github.com/basstabs/2d-line-of-sight ) contains benchmarks
241
+ and a sample application written in [ ggez] ( https://crates.io/crates/ggez ) .
119
242
120
- [ erupt] by [ @Friz64 ] provides bindings to the Vulkan API.
243
+ _ Discussions: [ /r/rust_gamedev] (
244
+ https://www.reddit.com/r/rust\_gamedev/comments/nx79kq/ )_
121
245
122
- Since being last mentioned in the newsletter shortly after its release, erupt
123
- has undergone significant development. The generator, erupt's heart, has been
124
- rewritten from scratch with the aim to improve maintainability. On top of that,
125
- many bugs were fixed, the function loader was rewritten and usability was
126
- improved while always keeping up to date with the latest Vulkan Headers as best
127
- as possible.
246
+ [ lineofsight ] : https://basstabs.github.io/2d-line-of-sight/
247
+ [ @basstabs ] : https://github.com/basstabs
128
248
129
- The ecosystem has gained traction, with many people using the crate for their
130
- projects. Pure Rust Vulkan allocators with support for erupt have been released.
249
+ ## Library & Tooling Updates
131
250
132
- [ erupt ] : https://gitlab.com/Friz64/erupt
133
- [ @Friz64 ] : https://blog.friz64.de/about
251
+ ### [ backroll-rs] and [ GGRS]
252
+
253
+ [ backroll-rs] ([ Discord] ( https://discord.gg/VuZhs9V ) ,
254
+ [ crates.io] ( https://crates.io/crates/backroll ) ) by [ @james7132 ] and
255
+ [ GGRS] ( [crates.io](https://crates.io/crates/ggrs) ) by [ @g_schup] are pure
256
+ Rust implementations of the [ GGPO] rollback networking library.
257
+
258
+ ![ Evo Moment 37] ( rollback.jpg )
259
+ _ [ Evo Moment 37] ( https://www.youtube.com/watch?v=JzS96auqau0 ) :
260
+ Only offline or with rollback!_
261
+
262
+ Rollback networking is a peer-to-peer network technique designed to hide
263
+ network latency in fast-paced games with precise inputs. Traditional techniques
264
+ account for network transmission time by delaying the game execution, resulting
265
+ in a sluggish game-feel. Rollback uses input prediction and speculative
266
+ execution instead. Upon receiving inputs from remote clients, resimulation of
267
+ incorrect game states occurs. This allows for gameplay that "feels just
268
+ like offline". The open source standard for rollback netcode [ GGPO] is used
269
+ in successful games like Skullgirls, Guilty Gear XX Accent Core +R or
270
+ Fightcade. For further explanation about rollback,
271
+ [ click here] ( https://ki.infil.net/w02-netcode.html ) .
272
+
273
+ Two projects in Rust were independently created to provide a working
274
+ implementation as well as helpful resources for developers.
275
+ backroll-rs features an added abstraction for the transportation layer and
276
+ also provides a bevy plugin, [ bevy-backroll] . GGRS replaces the
277
+ C-style callback API of GGPO with a simpler, more understandable control flow.
278
+ The authors of both libraries recommend backroll-rs for developement,
279
+ as it is currently more actively collaborated on.
280
+ GGRS is recommended as a learning recource and entry point,
281
+ with a plethora of internal documentation and explanation.
282
+
283
+ The main requirement to make use of both presented libraries is determinism
284
+ in your game execution. Resimulation requires that the result of progressing
285
+ the game state depending on the given inputs yield the exact same results
286
+ every time. Additionally, you need to be able to load, save and progress
287
+ your gamestate without rendering the outcome.
288
+
289
+ If you are interested in integrating rollback networking into your game or
290
+ just want to chat with other rollback developers (not limited to Rust),
291
+ check out the [ GGPO Developers Discord] !
292
+
293
+ [ backroll-rs ] : https://github.com/HouraiTeahouse/backroll-rs
294
+ [ bevy-backroll ] : https://github.com/HouraiTeahouse/backroll-rs/tree/main/bevy_backroll
295
+ [ GGPO Developers Discord ] : https://discord.gg/8FKKhCRCCE
296
+ [ GGRS ] : https://github.com/gschup/ggrs
297
+ [ GGPO ] : https://www.ggpo.net/
298
+ [ @g_schup ] : https://twitter.com/g_schup
299
+ [ @james7132 ] : https://twitter.com/james7132
134
300
135
301
### [ CrystalOrb]
136
302
@@ -160,7 +326,56 @@ There is an [interactive demo][crystalorb-demo] of CrystalOrb that features the
160
326
[ crystalorb-demo ] : https://ernestwong.nz/crystalorb/demo
161
327
[ backroll-rs ] : https://github.com/HouraiTeahouse/backroll-rs
162
328
[ GGRS ] : https://github.com/gschup/ggrs
163
- [ Rapier ] : https://rapier.rs/
329
+ [ Rapier ] : https://rapier.rs
330
+
331
+ ### [ erupt]
332
+
333
+ ![ erupt logo] ( erupt.svg )
334
+
335
+ [ erupt] by [ @Friz64 ] provides bindings to the Vulkan API.
336
+
337
+ Since being last mentioned in the newsletter shortly after its release, erupt
338
+ has undergone significant development. The generator, erupt's heart, has been
339
+ rewritten from scratch with the aim to improve maintainability. On top of that,
340
+ many bugs were fixed, the function loader was rewritten and usability was
341
+ improved while always keeping up to date with the latest Vulkan Headers as best
342
+ as possible.
343
+
344
+ The ecosystem has gained traction, with many people using the crate for their
345
+ projects. Pure Rust Vulkan allocators with support for erupt have been released.
346
+
347
+ [ erupt ] : https://gitlab.com/Friz64/erupt
348
+ [ @Friz64 ] : https://blog.friz64.de/about
349
+
350
+ ### [ wgpu] family re-union
351
+
352
+ ![ wgpu family reunion] ( wgpu-family-reunion.svg )
353
+
354
+ [ wgpu] is a [ WebGPU] implementation in Rust. It is safe, efficient,
355
+ and portable: it can target both native and the Web.
356
+
357
+ [ Family reunion] is by far the biggest change in ` wgpu ` project since
358
+ the inception. First, the Rust API of [ wgpu-rs] was moved to the main
359
+ [ wgpu] repository. Second, the whole base was relicensed under MIT/Apache2.
360
+
361
+ [ gfx-hal] - the Vulkan Portability-like graphics API abstraction -
362
+ was detached from the project. Instead ` wgpu ` got its own in-house unsafe
363
+ abstraction called "wgpu-hal" developed within the [ wgpu] repository.
364
+
365
+ The team released [ wgpu-0.9] right before this transition, to give the new
366
+ graphics infrastructure more time to take shape. At the time of writing,
367
+ supported backends on the new HAL include Vulkan, Metal, and OpenGL ES3.
368
+
369
+ Finally, the testing infrastructure received a major upgrade. It started
370
+ rendering the examples on the available adapters and compraring the results
371
+ with reference images.
372
+ This includes automatic testing using software adapters on CI.
373
+
374
+ [ wgpu ] : https://github.com/gfx-rs/wgpu
375
+ [ wgpu-rs ] : https://github.com/gfx-rs/wgpu-rs
376
+ [ gfx-hal ] : https://github.com/gfx-rs/gfx
377
+ [ wgpu-0.9 ] : https://crates.io/crates/wgpu/0.9.0
378
+ [ Family reunion ] : https://github.com/gfx-rs/wgpu/milestone/9?closed=1
164
379
165
380
## Popular Workgroup Issues in Github
166
381
0 commit comments