[HN Gopher] How to make roguelike games in Rust
       ___________________________________________________________________
        
       How to make roguelike games in Rust
        
       Author : agluszak
       Score  : 178 points
       Date   : 2020-01-11 15:13 UTC (7 hours ago)
        
 (HTM) web link (bfnightly.bracketproductions.com)
 (TXT) w3m dump (bfnightly.bracketproductions.com)
        
       | darksaints wrote:
       | 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?
        
         | steveklabnik wrote:
         | Embark is a new AAA studio made up of ex-EA DICE folks who are
         | heavily using Rust.
        
       | Pamar wrote:
       | 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.
        
         | thoughtpalette wrote:
         | Steam has a remote play feature now that allows another player
         | to join a game, even if they don't own it. It's been semi-
         | spotty.
         | 
         | I highly recommend Children of Morta for a co-op roguelike.
        
         | prutschman wrote:
         | Mangband (multiplayer-angband) has a Mac OS port of both client
         | and server: https://mangband.org/
        
         | aaron-santos wrote:
         | There is a wonderful multiplayer roguelike for the Commodore
         | 64. https://m.youtube.com/watch?v=ASGn5J9PHbs
        
       | otachack wrote:
       | 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 wrote:
         | 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!
        
         | AlchemistCamp wrote:
         | Was it to learn Rust or were you already familiar with the
         | language?
        
       | kris-s wrote:
       | 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.
        
         | planetsmashr wrote:
         | DCSS isn't commercially successful, but I think it has the
         | potential to be if it went that direction. The tiles version is
         | probably most popular though:
         | 
         | https://crawl.develz.org/download.htm
        
         | nyolfen wrote:
         | cogmind has done pretty well even if a bit niche. not pure
         | ascii but pretty close, like df. really excellent game, as
         | well.
        
           | kris-s wrote:
           | Looks really cool!
        
           | mrmonkeyman wrote:
           | Not ascii technically but close: caves of qud.
        
         | empath75 wrote:
         | Replacing ascii with sprites is easy to do later.
        
         | EamonnMR wrote:
         | Rogue?
        
         | jere wrote:
         | Both Cogmind and Caves of Qud have optional tiles that look
         | like little more than ASCII.
         | 
         | Door in the Woods is ASCII only and has sold ~5,000 copies in
         | about a month. In fact this game has inspired me to try to work
         | on a pure ASCII roguelike for my next commercial project.
        
         | billfruit wrote:
         | Caves of Qud comes to mind.
        
         | [deleted]
        
         | babuskov wrote:
         | 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/
         | 
         | And it sold over 25000 copies so far.
        
           | bmsleight_ wrote:
           | The trailer did not really show me any game play. So I can
           | not judge it and see if I want to buy.
        
             | babuskov wrote:
             | Showing gameplay would be pointless because 99% of the
             | gameplay is in player's head, analyzing the code, maybe
             | even writing some down on paper. If you just look at the
             | screen, it doesn't make much sense.
             | 
             | Here, try looking at this gameplay video:
             | 
             | https://www.youtube.com/watch?v=u4RskXHDLzo&t=183s
             | 
             | It's hard to pick any point in that 75 minute video that
             | would be a good trailer material. There's nothing visually
             | spectacular except some static ASCII art and there's no
             | surprise mechanics that would draw attention. The game
             | itself isn't about ASCII art anyway, so having that in the
             | trailer wouldn't make you learn much.
             | 
             | But then again, it isn't a game for everyone. It's for
             | people who are into hacking, computer internals,
             | binary/hexadecimal numbers or assembly/machine language.
        
               | Pyxl101 wrote:
               | Every game that Zachtronics releases has a gameplay
               | trailer, for comparison. Perhaps it would be useful to
               | look at some of those for inspiration:
               | 
               | http://www.zachtronics.com/tis-100/
               | 
               | https://store.steampowered.com/app/504210/SHENZHEN_IO/?cu
               | rat...
               | 
               | https://store.steampowered.com/app/716490/EXAPUNKS/?curat
               | or_...
               | 
               | I think a gameplay trailer could be made from content
               | from that video, by stringing together a series of short
               | clips. Show the player moving around, manipulating
               | things. Each clip a few seconds in length. Similar to the
               | trailer for Exapunks, you could display text like "Solve
               | puzzles" "Manipulate bits" "Hack your way to safety" (or
               | whatever makes sense). Maybe end with a sequence where
               | something drastic happens (the player does something and
               | the whole screen changes), fade to black.
               | 
               | I think it'd be useful to show the player what the
               | gameplay is actually like. Sure, it's not for everyone,
               | but you can still show what it is.
        
           | thegeekpirate wrote:
           | 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/).
        
             | umvi wrote:
             | 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 wrote:
               | 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.
        
               | giancarlostoro wrote:
               | Depends if its easier for you to do 3D. I remember when I
               | found thr ThreeJS ascii shader I had a bit of fun with
               | it...
        
         | aganame wrote:
         | DF is not commercial yet. Partial list of successful roguelikes
         | with ascii:
         | 
         | - rogue - (net)hack - moria, angband, etc
        
           | feanaro wrote:
           | Don't forget ADOM, though it now has graphical tiles too.
        
         | boomlinde wrote:
         | Several commercial versions of Rogue were sold in the 80s.
        
       | andolanra wrote:
       | 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 wrote:
         | > > "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.
        
       | AlchemistCamp wrote:
       | 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
        
       ___________________________________________________________________
       (page generated 2020-01-11 23:00 UTC)