
How to make roguelike games in Rust - agluszak
http://bfnightly.bracketproductions.com/rustbook/
======
andolanra
I said this in a previous comment on a different story, so I'm going to copy-
paste the content of that comment with some minor edits:

The bfnightly tutorial is a very good tutorial, but I do want to warn that
it's not always terribly idiomatic Rust: Herbert was using the writing of the
tutorial as a way of practicing Rust, so there are places where the
explanations aren't quite correct and other places where the code isn't what
an experienced Rust programmer would write. An example that jumped out at me
(this from Chapter 1.7) was the use of

    
    
        &s.to_string()
    

which is an expression that could be shortened to just s. (Specifically, s has
type &str, calling to_string() on it converts it to a String, and borrowing it
allows it to be coerced back to a &str but now with unnecessary copying.)
Elsewhere (this from Chapter 1.2) it has explanations like

> Copy and Clone allow this [type] to be used as a "value" type (that is, it
> just passes around the value instead of pointers)

which is also not a correct explanation, or at least is a misleading one:
things can still be passed by value even without Copy and Clone and without
any pointers at all. (Arguably, he meant, "You can share the value without
using borrows," but that's not what the explanation said.)

That said, all this is nitpicky (and I suspect that Herbert would be receptive
to feedback along these lines—I just haven't had a chance yet to provide it!)
because the tutorial's explanation of roguelike-writing is still very good,
and in fact I've been following it as a rough guide for writing a tutorial on
top of a different Rust library myself! But I do want to warn about using it
as a model for learning Rust specifically.

~~~
a1369209993
> > "value" type

They mean a nonlinear (or nonaffine) type, as opposed to a affine type - that
can only be passed by reference if you don't want to get rid of it yet - which
they would presumably call a "reference" (or "by-reference") type. It's a
correct explanation, but ambiguous (not misleading, but perhaps confusing)
terminology.

~~~
leshow
Clone doesn't have anything to do with that though. Copy types are passed 'by
value' without a move (so are not affine). But a Clone type doesn't change
anything except to add the clone() method.

~~~
thebracket
Thanks for the explanation. I'll get that clarified/cleaned up in the tutorial
soon. Tracking it on the associated Github as issue #73, so I don't forget.

------
kris-s
Are there commercially successful roguelikes that use ascii art only? Dwarf
Fortress is the only one I know of and it's getting an official makeover for
the Steam release.

~~~
babuskov
I don't know about roguelikes success (Cogmind comes to mind), but I can tell
you that ASCII games can be successful if you have a good idea. For example, I
spent about 2 months making Rogue Bit just over a year ago:

[https://roguebit.bigosaur.com/](https://roguebit.bigosaur.com/)

And it sold over 25000 copies so far.

~~~
thegeekpirate
Just to add on to the "not a roguelike" list (it's an adventure game), Stone
Story RPG
([https://store.steampowered.com/app/603390/Stone_Story_RPG/](https://store.steampowered.com/app/603390/Stone_Story_RPG/)).

~~~
umvi
That's not really ASCII art. I mean it is, but iirc it's custom shader code in
Unity made to _look_ like retro style ASCII art. So it's actually way more
difficult to make than a grid of ASCII characters.

~~~
flafla2
Although I get where you’re coming from, I disagree with the assertion that
this makes it “not really ASCII art”. At the end of the day modern terminal
emulators use a graphics API at one point to render characters on the screen.
You wouldn’t say that iTerm2 isn’t a “real tty” because it has a metal backend
(in this case, iTerm2 is also using a custom shader to render ASCII/unicode —
more complex than this game of course). Where do we even draw the line? Is
ASCII art only legit if it can render natively in a traditional terminal? How
about only one without hardware acceleration? POSIX compliant? Further down
the rabbit hole we could draw a line in the sand at tty’s with no window
manager.

It would still be trivial for the developer to add an “textshot” feature to
export a frame to .txt, so I’d still qualify it as fitting the ASCII art
aesthetic.

~~~
owl57
_isn’t a “real tty” because it has a metal backend_

I was at first confused. Of course "real ttys" have some metal in their back
end! (I'm too young and my default mental image of a "real tty" contains a
CRT, but there's probably even more metal in a teletype.)

------
AlchemistCamp
I recently made one in Rust [1] with Tomas Sedovic's tutorial with libtcod and
he suggested this one as a good next step!

I'm also excited to see that this one looks wasm compatible.

1) [https://youtu.be/UKpDNnfiId0](https://youtu.be/UKpDNnfiId0)

------
otachack
This is great, thanks for sharing it. I started a Rust project awhile ago to
do something similar but based on a boardgame. It was fun but I didn't keep up
with it. I'll try to get back at it using this as inspiration!

~~~
somesortofsystm
Yeah, I agree - this is a terrific read, and seems like a nice way to jump
into Rust, a language I am eager to explore .. lots of strange new idioms, and
from the perspective of a rogue-like, nicely done .. will give me a bit of
Rust chops anyway! Thanks!

------
Pamar
Ask HN: are there any roguelike games that can be played (collaboratively) by
two players on remote connection?

Mac OS would be a plus because both me and my friend use mostly Apple stuff at
home.

~~~
astrobe_
Not exactly roguelikes, but MUDs [1] are multiplayer games with a roguelike
feel, but they are more like the ancestors of MMORPGs, TBH.

A telnet program should basically be enough to start playing. There are some
"MUD client" programs that enhance the interface (dunno about MAC OS), and
some sites offer enhanced web interfaces as well.

One of the most popular, Aardwolf [2] is very newbie-friendly.

[1] [https://en.wikipedia.org/wiki/MUD](https://en.wikipedia.org/wiki/MUD)

[2] [https://www.aardwolf.com/](https://www.aardwolf.com/)

~~~
aldanor
Aardwolf has always been more like an infinite farming noobland (where you
could also spend some real cash). Although, yea, very noob-friendly.

For serious pvp+rp, Carrion Fields.

For non-ROM based RP MUDs, Achaea or the like (although these days you'd
likely have to spend real cash there as well).

------
darksaints
Are there any AAA studios using rust yet? I personally think it's not going to
happen any time soon, but I'd be glad to be proven wrong.

My theory that it won't happen without some form of inheritance-like
structure. Games, like many forms of simulation, are inherently stateful and
tends to fall hard on the OO-side of the Expression Problem spectrum. Traits
tend to give you the best of both worlds, but in very important aspect it
falls short: the traits themselves do not have data members. I saw a proposal
where you could link object data members explicitly to data members that the
trait required, which would probably fill that gap...but I don't think it has
gone anywhere. Anybody know what I'm talking about so I can look up the
progress?

~~~
PudgePacket
[https://www.reddit.com/r/rust/comments/78bowa/hey_this_is_ky...](https://www.reddit.com/r/rust/comments/78bowa/hey_this_is_kyren_from_chucklefish_we_make_and/)

~~~
steveklabnik
Chucklefish is no longer using Rust.

------
skitout
About roguelike game (not in Rust), Komodo developped a decentralized
blockchain based one, and give developers lots of tool to develop their own
decentralized game - roguelike or not [https://docs.komodoplatform.com/basic-
docs/antara/antara-tut...](https://docs.komodoplatform.com/basic-
docs/antara/antara-tutorials/rogue-module-tutorial.html)

------
Shorel
I want to praise the design of this webpage, not only its content.

It's clean, fast, readable, it supports themes.

I now want a LaTeX to HTML converter to this HTML.

~~~
thebracket
It's the standard "mdbook" that ships with Rust, also used for the Rust
documentation. I pretty much suck at HTML, so I went with the easy markdown
option and am enjoying the benefits!

