Showing posts with label article. Show all posts
Showing posts with label article. Show all posts

Wednesday, 13 September 2017

Losing is fun

This is a response to Christopher Walker's post Implicit vs. Explicit Failure for Educators and Game Designers. The post makes a distinction between two types of failure: explicit ("you have lost") and implicit ("you have not succeeded yet"), and argues that explicit failures are overused in games and education. I think that the post presents a very interesting point of view, and is well worth to read and think about.

However, roguelikes and similar games are based on a completely different philosophy. Losing is an integral part of the game. The unofficial motto of Dwarf Fortress is Losing is fun. This is based on the principle is that it is the journey that matters, not the destination (a similar thing was said by Gauss about mathematics) -- many players find roguelikes fun even if they have no hope of ever winning. Games such as Dwarf Fortress or Tetris do not even have a winning condition -- you will lose eventually. Other games do have winning conditions, and winning such a game after hundreds of failures is a great feeling.

HyperRogue mixes these two designs -- the winning conditions exist (or you can set ones for yourself), but on the other hand, you are allowed to continue the game after winning, but the game gets harder and harder, and you will have to lose eventually. HyperRogue has some puzzles which test your navigational skills in hyperbolic geometry (Princess Quest, Galápagos, Camelot, Yendor Quest). These do not need the component of losing the game explicitly -- however, they would not fit the rest of the game without it, so they also get harder and harder, and one can lose the game while doing them.

Recently, a peaceful mode has been added -- in this mode, the players can solve the failureless versions of these puzzles, or ignore all the challenges and just explore the world. This was intended to make the educational component in these puzzles more accessible to players who are less used to the brutal difficulty typical to roguelikes, and prefer puzzles that you can only win -- especially important in the case of live presentations. However, our experience from such live presentations shows that the standard game is generally much more exciting, especially for younger players.

I think that the dichotomy between explicit and implicit failures presented in the post is a bit exaggerated. In most games, you can try again after you lose; therefore, in a way, all failures are implicit. I think that, rather than avoiding losing conditions, we should teach that losing is not a failure, and minimize the psychological distress caused by it. According to a Go proverb, one should lose their first 50 games as quickly as possible; losing is not a failure, it is simply finding a way that does not work, and everyone needs to lose a lot before they master a subject. It is inevitable that one will "fail" in many situations during their life, that everyone fails, and I believe games to be a great opportunity to teach one not to be discouraged by this.

The post gives an example of a game about Greek mythology where you could lose, causing the chapter to restart, and the player to hear the 30 seconds of narration again and again. From this description, it appears to me that the main problem with the game was not the failure condition, but the fact that they forced the player to watch the story again when they lost. "Well, we need to have some kind of challenge. Otherwise it's not really a game, is it?" Well, maybe it is not really a game, but this does not matter -- not everything needs to be a game to be fun, and many games would benefit if the "challenge" was removed from them. Story and challenge do not mix. If the point of the game is to tell a story -- no challenge is necessary. A challenging game benefits from the story, but only as long as it does not get in the way. Well designed roguelikes usually keep their stories to minimum, or to pieces of lore that you can read if you want. They also rely on randomization, so that every new game will be different and interesting. This randomization sometimes causes the player to lose because of pure bad luck rather than bad decisions -- well designed roguelikes try to avoid this, however, from the "life lesson" perspective outlined in the previous paragraph, it is important to learn that losing is not always your fault.

The post also mentions the problems with stressful mathematical exams, where a single mistake with the execution of the solution makes the whole thing wrong (especially ones where the answer is a single number). Roguelikes also have this property, and there are also many real life situations where it happens -- real research in mathematics, working with computer security systems, etc. While mistakes are costly in all these situations, often there are actually parts of the work that remain valid (completing half of the game, proving useful facts on the way, code often becoming correct after fixing just a single character, etc.), and this should also be reflected in the way the exams are graded. As for games -- aren't they a great way to get one used to this, and reduce the stress?

Thus -- losing is not a failure. Losing is fun. It also makes winning even more fun. Have fun!

Thursday, 25 May 2017

Programming language rant

Brian Bucklew, the developer of Caves of Qud (highest rated turn-based tactics game on Steam) and Sproggiwood (a casual roguelike very good both for beginners and for experts), has recently been involved in an external C++ project, and has tweeted a long series of rants about his hate of C++ from the point of view of a C# developer. Since Twitter is not a good medium for discussion, I am posting my thoughts on the subject here.

I will start with mentioning that I have no experience with C#. I have experience with Java. I consider C# to be an evolution to Java. Since I was not satisfied with Java, I am not interested in trying C#, since I believe it to be based on the same general rules. One reason why I did not like Java was too much focus on object oriented programming. The widely held belief is that it is good to learn as many programming paradigms as possible, as then you are able to use the good things about these paradigms in whatever programming language you end up working with. I consider OOP to be one such concept: something that generally every programmer should learn (ideally on a fully OOP language such as Smalltalk) but not something that everything has to be written in. I consider OOP to be a very useful representation of polymorphism. For example, in Hydra Slayer, there are multiple kinds of objects: hydras, consumables, and weapons. I can list all the objects in sight of the player, and then e.g. list their names. It is useful to call a name() method that will work correctly for all kinds of objects despite their different inner representations. But not everything has to be an object. This was the only use of OOP in Hydra Slayer (not including NotEye which does use OOP quite significantly), and HyperRogue did not use polymorphism at all until recently.

Oh my fucking god I have to make two fucking separate files for every fucking object. How can anyone like this language. C++, two pluses because you have twice as many files as the precise same thing architected in any other language. I really think C++ programmers are blind to how many incredibly annoying things you waste your time doing in C++. Ugh. It's so damn wordy.

This actually looks very similar to the issue I had with Java. Having to create a file for every single object; not only that, also a tree structure is forced. Furthermore, because of the lack of conditional compilation, I could not create a single version of the HyperRogue Android source that would compile as one of three packages depending on the compiler options chosen, and I had to create three copies of this source (this was done with a script, but still); maybe an experienced Java programmer would do it in some better way. I do not know to what extent C# fixes this. It does have conditional compilation, at least.

I hate having two separate files (.c and .h) too. But contrary to Java, the language does not force you to actually do this. In my biggest project (HyperRogue) the main file hyper.cpp includes init.cpp, which includes all the other cpp files in turn, from the most fundamental ones. When I want to call some function which was not yet compiled, I simply copy the declaration to hyper.h which is included first. But this comes up very rarely and it is far from a problem that Brian makes it to be.

It takes 10 seconds to recompile HyperRogue. Not ideal, but not bad either. If header files are necessary, generating them automatically does not seem to be a difficult task.

Like C++ guys think they have the ultimate concise low level language, but you basically have to write everything in two representations.

I consider the Google Code Jam statistics to be a good benchmark of conciseness. Contestants have to implement solution to algorithmic problems as fast as possible. It has to run fast, which hurts Python, but not languages such as C# or Java. Most contestants decide to use C++. From contestants who have passed to Round 2 (thus, no newbies), ones using C++ are also more likely to advance to Round 3 than ones using Java or C#.

Want to setup a map<> for something? Make sure you keep track of everything and/or iterate it when erasing so you can delete everything.

I do not understand what Brian is referring to here. Deleting every pointer in a map is simply for(auto& p: m) delete p.second;. In most cases, you do not even need that! I usually do maps of ints, pairs, strings, vectors, non-polymorphic types, etc. which do not require anything; and contrary to garbage collection, RAII will take care of cases which are more general than simply clearing the memory. If polymorphism is required, smart pointers will handle deletion.

bahahaha I forgot you can do multiple inheritance in C++ . . . . what a bad idea

Maybe nobody uses it, maybe people use it to implement something like Java interfaces (which were designed later), maybe it is used in the implementation of C++ itself. I do not care. I never use this and I have no problems with this feature existing. I consider the diamond problem to be an inherent to (class-based) OOP, especially in roguelike programming, when the hierarchical subclass distinctions are often very blurry (attack monsters with a cockatrice corpse? uh, it was first a monster, then it was food, and now it is a weapon?).

omg I forgot C++ can't compile circular references; so a child can't simply refer to it's parent without some sort of hackery like void* (I've written several million lines production of C++ in my life, for those concerned I have no clue what's going on with C++)

Simply use forward declarations, I do not get how Brian did not remember this.

Wow, c++ got a little unhinged with copy/move semantics since I last visited it, hu? I'm trying to imagine people with like less than 20 years of C++ experience writing correct C++ programs nowadays..."

Yeah, the copy/move semantics sounds crazy. But... what happens when you compile an older program with C++11? It compiles and works faster, because move semantics work behind the scenes. One only needs to understand it and care about it when writing extremely efficient programs.

...also not having introspection/reflection sucks a fucking A+ hairy nutsack.

For introspection (as in, checking what is the exact type of a polymorphic object) dynamic_cast is fine. As for reflection -- this seems to cure a problem that I do not have because I rarely use OOP. There is OOP in NotEye, and debug/save/load functions are case-by-case listings of all fields -- this is a place where reflection could be used, but I do not believe it would help that much because (a) this was trivial to write, (b) it appears easier to handle special cases, such as when new fields are added / class hierarchy is redesigned and the load function has to be adapted without breaking older saves. (Anyway, I have managed to implement a method executing a given lambda function with parameters (auto field, string name) for all fields of a polymorphic object in seven lines of C++ plus two lines per class, and creating objects by class ID in about ten extra lines; despite having to write a list of fields and subclasses for each class, I like my solution for efficiency and type safety.)

Coming back to C++ after such a long layoff it's amusingly clear just how much Stockholm Syndrome you develop with its language design.

There were several tweets like this. I know some legitimate criticisms of C++, but all Brian's criticisms appear to be caused by some kind of bias -- problems already solved appear easy, new problems appear difficult, or maybe self-confirmation, or working on some very poorly designed external project. It is hard to see what could be achieved by using templates, macros, RAII, and smart pointers when being used to OOP and reflection. Rather than accusing people of "Stockholm Syndrome", I suppose that some people think in this way, and other people think in that way, and everyone chooses the language which is better aligned with their way of thinking.

Wednesday, 21 December 2016

Why am I not that excited about Jupiter Hell

The roguelike community was recently all over about Jupiter Hell — a roguelike with modern 3D graphics, which has recently run a very successful crowdfounding campaign. I am quite sure Jupiter Hell will be a great game — after all, Darren Grey and Kornel Kisielewicz are both working on its gameplay, and both are well known to create fantastic roguelikes. This post is a response to a post by Darren Grey, who believes that Jupiter Hell is a gateway for our beloved genre to get its deserved mainstream acceptance.

I tend to play mostly indie games: roguelikes, roguelites, some other games too. Occassionally I do try big mainstream hits, but I am rarely satisfied with them. For example, Witcher II. I have been playing mostly for the story. Most of the game was fighting, exploring, and collecting items. Fights were irrelevant (lack of permadeath!) and boring, and were an obstacle in the story, rather than the fun part. The game would be better without them. And without walking around and collecting items. One could say that it was still better than games that I could not play at all, but this does not change the point: I feel that it would be better if all the game — all the boring 20 hours — were removed, thus leaving just a nice two hour long movie. Diablo II is mostly a real-time roguelike, but I have found no point to try it with permadeath, as I have found it much more boring than roguelikes. I have similar feelings with other RPGs. First person shooters are not interesting at all. I have a relatively good chance to like mainstream strategy games, but I am often annoyed by too much micromanagement, or by animations which I have to watch again and again — when working on the animations in NotEye (for ADOM), I have taken care to have them so that they don't slow a fast player down, and it is great that JH goes the same route with its adaptative animation system.

On the other hand, a big part of the roguelike culture is its wonderful community. Barriers between creators and players are lowered. Players are encouraged to report bugs, provide their own ideas, and even learn programming and create their own variants or games in events such as the 7DRL challenge. This leads lone passionate developers working in their spare time to create awesome games (ADOM, Dungeon Crawl, Spelunky, DRL). Often playable for free — the motivation for creating these games was the fun of creating great games, games they would like to play themselves, rather than financial gains. These games won't have good graphics or polish,but are much better than the mainstream in my experience. I find the roguelikedev communities much more appealing than the general gamedev ones, which IME tend to concentrate on graphics and monetization too much.

So I would like more people to see that games with low production value / free / created by lone developers can be much better than the current mainstream games. Why people don't see this?

Maybe gamers in general believe that a game without high production value, or a free game, cannot be good? By a game with high production value I mean one which has, or appears to have, lots of money poured into its creation: complex graphics, cutscenes, professional voice acting, general polish, trailers, and so on. Will Jupiter Hell be really able to compete with popular AAA games on these grounds? And if it will, I do not see how would such players join our creative community, or try the relatives of Jupiter Hell — all the other great roguelikes — which do not have this production value.

Or maybe the contrary is true: popularity is actually not about 3D graphics? Angry Birds do not have 3D graphics, indies and roguelites neither, and they are quite popular too nowadays — not sure how good measure of popularity this, but by the number of Steam reviews, FTL is roughly on the level of popular strategy and RPG games. Ragnarok and JauntTrooper: Mission Thunderbolt were both awesome roguelikes, and they appeared to have features to appeal the mainstream — quite good graphics for their time, mouse control, permadeath only as an option. Still, they have failed. On the other hand, the insane success of Minecraft, despite being started by a lone developer inspired by ADOM and NetHack, and not having high production value, is a huge surprise. What was the cause of this? Marketing? Simply luck (what becomes popular and what not, actually depends largely on random factors, and Notch seems to agree)? Whatever the problem is, will Jupiter Hell avoid it?

Maybe the roguelikes are not popular because is just hard to explain what they actually are? I think I have that problem with HyperRogue — its defining feature is that it takes part in the hyperbolic plane. Unless you are interested in mathematics, you won't know why would that be interesting — things like "a roguelike in the DOOM universe" or "a vampire roguelike" are easier to explain (assuming that you know what "roguelike" is), so people looking for new roguelikes would probably be more likely to try these. We call these games roguelikes precisely because they are so hard to explain — after all, other genres are named after their features, not after a notable game in that genre :) People are afraid of trying new things. I have updated the homepage of HyperRogue so that it explains the point of the game to new players, without scaring them off with difficult words such as "roguelike" or "hyperbolic geometry".

The Kickstarter page for Jupiter Hell explains that it is a "turn-based sci-fi roguelike/RPG". I think that categorizing roguelikes as a subgenre of RPG might contribute to the obscurity of roguelikes. The success of the Witcher series suggests that fans of RPGs do like games like this: nice story, gameplay not getting in the way. Maybe they do not get what they expect when trying roguelikes. Such people would be put off by permadeath, and the low focus on story typical to roguelikes. I have seen opinions that Diablo is not a RPG — and Diablo is quite similar to roguelikes, so I guess we would see such opinions on roguelikes too if they were more popular. On the other hand, a strategy fan would be much more likely to understand the point of procedural generation and permadeath (strategy games are often procedurally generated, and even if they don't usually feature permadeath, it is quite clear that this is the noble way to play). I am of a strong opinion that roguelikes are actually closer to strategy games than RPGs, they actually are turn-based tactics games. XCOM does have important RPG elements (story, character advancement, inventories) yet it is not seen as an RPG. Maybe we should rather market roguelikes as single-character turn-based tactical games, and emphasize the benefits of being single-character to players of XCOM and such (more action, more detailed characters, less micromanagement).

Or maybe we should try to find new players even further. Most people are not gamers, and I have a feeling that a popular opinion is that intelligent people do read books, or play games such as Chess, playing boardgames is cool, but playing computer games is a stupid thing to do. Such people would not care about graphics that much — everybody knows that a book is not to be judged by its cover, and Chess is the same game, whether you play it with beautiful pieces or not. Andrzej Sapkowski, the author of the series of books that the Witcher game is based on, said "I don't know many people who have played that game, because I tend to with intelligent people". I have watched Evelyn Lamb's talk Visualizing hyperbolic geometry. I think HyperRogue is a great tool for visualizing hyperbolic geometry, but it is only mentioned on the last slide (about minute 33): "I am too scared to do it, because I might like it, and then I won't ever do any work again". It appears that she had experiences with computer games similar to my experiences with Witcher, i.e., that they are a waste of time, and she was afraid that HyperRogue would be like this too. Whenever I see a game described as "addictive", I think it is not a good thing. Far too many games demand the player's time without giving anything in return. Skinner boxes, grinding, free games which allow you to use money to speed things up, unlocks which make the character stronger. Well designed roguelikes don't. In HyperRogue, even the Hyperstone Quest, which is considered very hard, can be done in just about two hours by a skilled player. Obviously getting that level of skill might take lots of time, but the game does not slow you down, only your own ability to learn new things. And learning is fun.

Maybe such non-gamers would be actually put off by the graphics of Jupiter Hell? I have read somewhere that all popular games fall in one of just three graphical styles. Jupiter Hell looks like a quite generic photorealistic violent game. Roguelikes are to a big extent a computer version of board games, and when watching the animations in the Jupiter Hell teasers, it has struck me that it does not look like a board game, thus confusing the potential players about the point of the game yet again. HyperRogue has recently received 3D graphics and adaptative animations too, but our design goals were different. Recently I have received a spam e-mail offering 3D models. I have looked at the (still 2D) screenshots of HyperRogue and decided that, even though the graphics in HyperRogue are nowhere as good as the art by M. C. Escher which inspired it, it is unique and thus looks much better than any generic 3D models. The new animations are consciously made to be not realistic — to emphasize that battles are to provide challenge for the player, as capturing the opponent's pieces in Chess, not meaningless violence for its own sake.

Obscurity of roguelikes is a big mystery for us roguelike fans, we could only guess the reasons. This post turned out very long, and yet it does not cover everything. Roguelikes have evolved in a completely different way than the mainstream games, and I think that we should be proud of that, instead of seeing it as an disadvantage. Please share your thoughts in the comments, or just play the most satisfying games in existence :)

Thursday, 28 June 2012

Potions

For the next version of Vapors of Insanity, I am considering changing how the potions work. I have a feeling that they do not work well in the most games I know.

Potions (and other similar items, like scrolls and wands) can be roughly divided into two types: permanent and temporary ones. Permanent ones have effects which last for the rest of the game, and temporary ones help in one battle (or another short amount of time). This division is not very exact, it is rather intuitive (if you use a temporary potion to avoid death, then it has a permanent effect, in some sense). But it is mostly temporary potions which cause problems.

Let's see how potions work in several games.
  • Diablo has its health/mana potions which you have an infinite supply of (from the shops). You can win difficult fights by drinking lots of these potions. It seems that most people who consider this think that this is mindless and badly designed.
  • Dungeon Crawl has several important permanent potions (cure mutation), and several powerful temporary items (potions of heal wounds, powerful offensive wands). These temporary items are important; I think that most Crawl players run into situations where they need to use a temporary power, but the difference between winners and losers is that for winners the use rate is simply lower than the finding rate. On the other hand, weak wands and potions are mostly useless.
  • In ADOM, there are several important permanent potions, and lots of temporary potions and wands. I use the spenseweed for healing (since there is an unlimited supply of it), but other items are simply collected and never used. The only wands I use in ADOM are wishing and cold, for their permanent effects (cold is used for freezing ice).
  • Dungeons of Dredmor seems to have some potions and mushrooms which have weak temporary effects. Since the inventory is limited, it is not even worth it to carry them. But even if the inventory was not limited, they would probably end up just like in ADOM.
  • Hydra Slayer has four permanent potions and scrolls (Power Juice, Life, Big Stick, Reforging) and several runes/potions/scrolls with temporary effect. I am quite happy with all of them, but the reason is that in some sense, everything is permanent in Hydra Slayer. That is caused by the fact that health does not regenerate (and thus it is a permanent). Even though the visible effect of, say, Potion of Ambidexterity is temporary, it also has a permanent effect of saving you several HP.
  • I have heard that ToME gets rid of temporary items in general. A good move, I think.
So, in summary: the only potions/wands which make sense are those whose effect is either permanent or very noticeable. Vapors of Insanity already got rid of the usual wands, and now it is time for potions.

The other thing that bugged me about liquids in VoI is that they are supposed to be not discrete: you can drink half of the potion and get a partial effect. This makes identification work strangely (you can identify potions by just tasting them, so why the need to identify them at all?) Also you are able to create liquids magically via Rune of Creation. But I find it very hard to explain why you can create, say, poison, but only use it immediately, and not fill a bottle with it.

The planned design is as follows. Temporary potions and herbs expire, so you can no longer carry them in your backpack for a long time. If you find a herb, you can either use it immediately (for a powerful effect) or ignore it. Alchemist huts will have cauldrons which magically generate powerful temporary potions; you can drink them, coat your weapons with them, or fill your bottles (but they will stay there for a very short time only). There will be also a portable version: wands which generate liquids with temporary effects when zapped or rubbed. As with other VoI wands, they will need a contact to a living body to work, so you can use only a limited number of them in a given time.

Sunday, 18 March 2012

hyperbolic geometry in HyperRogue

NOTE: This post was originally published on March 18, 2012. It has been updated many times: 2015 to reflect some new findings, Sep 2016 to include the numerous new hyperbolic features, Oct 2018 with even more features and links.

The main goal of the HyperRogue project is to see how hyperbolic geometry can be used to achieve great game design (and it succeeds in this goal -- see e.g. this review on Rock Paper Shotgun). (This is not the only goal, though -- HyperRogue is probably the most feature-rich engine for non-Euclidean geometry, that can be used for a plethora of visualization, research, and educational purposes; see RogueViz.) The purpose of this article is to explain what's the deal. It is intended for mathematicians interested in hyperbolic geometry who would like a summary of HyperRogue, and for roguelike players who would like to know what hyperbolic geometry is -- some of them think that HyperRogue takes place on a 3D sphere, or that you will return to the same location if you move in a particular direction for a long time, which is not accurate at all, so I explain it here in more detail.

HyperRogue is a roguelike computer game. Roguelikes are a genre of computer games that have evolved separately from the mainstream -- even though they are commonly viewed as a subgenre of RPGs, they are in many senses closer to board games, like Chess where you have just one piece and the "chessboard" is randomly generated by the computer, than to other computer games. (Recently the elements of roguelikes, such as procedural generation and the challenge of permadeath, are added to more and more computer games which do not really have much in common with true roguelikes, causing even more confusion.) In case of HyperRogue, the "chessboard" is an infinite hyperbolic plane. You can read more about it on Wikipedia. This is not a sphere, but rather a hyperboloid (but also not in a normal space). The 3D object you see when you activate the "eye distance" option is this hyperboloid.

Hyperbolic geometry seems to be underused in art. M.C. Escher has been using it in some of his work (like Circle Limit). I have seen Maze, Pool, and Sudoku on a hyperbolic plane, but here the map is looped, and thus IMO less interesting than the real infinite world of HyperRogue. The original concept of Hyperbolic Rogue got quite popular despite being an extremely simple game, so I think this is a great area to explore.

Normally the game presents the world in the so called Poincaré disc model (also used by the art mentioned above). The closer you are to the edge of the disc, the bigger distances are (five pixels close to the edge is a much bigger distance than five pixels in the center). On the Euclidean plane, the boundary of a circle of radius r is linear in r. On the hyperbolic plane it is exponential. This means that it is very hard to return to a place where you have already been in HyperRogue. You would have to return almost the same way.

Triangles in hyperbolic geometry have angles which sum to less than 180 degrees. For example, if you take two hexagons and one heptagons next to each other on the HyperRogue map, and construct a triangle with vertices in centers of these cells, the sum is (360/6) + (360/6) + (360/7) = 171.4 degrees, so there is a "defect" of 60/7 = 8.6 degrees. The defect is proportional to the area of the triangle. (Similar thing happens on a sphere: a triangle with a vertex on a pole and two on the equator has 90+90+90 = 180+90 degrees, which is π/2 more than 180 degrees, and the total area of the sphere is 4π, which corresponds to eight of our triangles.) The visible in-game effect of this is that if you go from A to B, from B to C and from C back to A, the screen will (probably) appear rotated, making it easier to get lost.

This is the map structure I have found most suitable for a roguelike (or other similar grid-based game). Three hexagons would sum up to 180 degrees and we would get a plane. Three heptagons in each corner would be possible, but they would be too big (each of them would take the space of one heptagon in HyperRogue plus 1/3 of each hexagon surrounding it).

Now how does this relate to the actual gameplay? As already mentioned, an important result of using the hyperbolic plane is that you almost never get into a place where you have been before. Some of the areas make other aspects of the hyperbolic geometry important, and some are just for fun.



Land of Eternal Motion
Land of Eternal Motion::When you are running away from monsters on a straight line in the Land of Eternal Motion, monsters cannot follow you on the same line, they have to use an equidistant curve instead. Since these curves are longer in hyperbolic geometry, it is quite easy to run away.


Hunting Grounds
Hunting Grounds:: In lands other than Land of Eternal Motion, when you are running away from a monster, it will have to chase you on exactly the same path as you, and if there are several monsters, they will have to make a queue. In most roguelikes, the basic strategy is that, when attacked by a group of monsters, you should run into a corridor, and fight them one by one. In HyperRogue, this effect can be achieved in an empty space.
At low treasure counts, Hunting Grounds pits you against several dogs. Use the effect above to queue them up -- that would not be possible in an Euclidean hex grid (where they would pursue you forever), or in a spherical tesselation (where three dogs would eventually get you).

At higher treasure counts you also get ambushed by dogs, apparently from "all" directions. However, in the hyperbolic plane, there are more directions than it appears, so you can still escape!


Ultraparallel lines in the Crossroads
Crossroads (and walls in general): walls separating different areas are straight lines, and they do not cross. You cannot have that many non-crossing straight lines in a Euclidean world.



Isometries in the Land of Mirrors
Land of Mirrors: mirages would be very nice to play in a Euclidean world (see DROD's mimics for something very similar), my point here was to check how this would work in a hyperbolic plane. The result seems to be that they are mostly annoying (they are supposed to stay parallel to you, but parallel lines diverge too quickly).
In later versions, the Land of Mirrors has been replaced with Hall of Mirrors -- this adds mirrored walls that the Mimics can reflect off; this makes the land interesting in hyperbolic plane too :)


Tree-like maze in the Living Caves
Living Caves: the cave has a tree-like structure: you go into a tunnel, sometimes you find forks, and you can be almost sure that both of the new tunnels do not end, and in fact, they quickly fork again. And loops are extremely unlikely. In an Euclidean world, this would not work. It would be at least a bit different.



hyperbolic percolation in the Alchemist Lab
Alchemist's Lab: a bit like the Living Caves, the hyperbolic nature of the map means that you can usually get as far as you want in roughly any direction, no matter whether what color you are on. From the game Hex we know that, in Euclidean geometry, if there is a red connection between top and bottom the screen, there is no blue connection between left and right. While this is still true in hyperbolic geometry, it does not feel like that, because we have many more directions there. This has ties to the percolation theory.



Heat equation in the Icy Lands
Icy Lands: that's a minor difference, but heat disperses more quickly here than it would on a Euclidean plane (actually the model in the original tech demo was a bit wrong).



hyperbolic circles in the Camelot
Camelot: In Camelot, you have to find the Holy Grail, which is in the center of the Round Table. The Round Table is a circle of radius 28. The number of cells in a circle of radius r is roughly 3 to the power of r/2; in particular, there are 31659398 floor tiles inside the table, and 22860754 tiles of the table. Thus, when you start on the table and start moving in a completely random direction, you will run straight into the Holy Grail with probability only 1/31659398 -- if you choose the direction based on the shape of the table, the probability is of course higher, but still, after a small number of steps you will usually end up back at the Table. You need to invent some strategy to precisely take you to the center.


army movement in the Hive
The Hive is an attempt at depicting how a war in hyperbolic plane would look. In our world, an army has a first long row of soldiers, then the second row, and so on. This way, the army moves quickly, and many soldiers can fight in parallel. However, this does not work in the world of HyperRogue: one column of soldiers may move on the straight line between points A and B is the shortest route, but if we have another column, it will have to move on an equidistant curve, which will be much longer. Therefore, if the army wants to move quickly, it will have just a small number of columns.


horocycles in the Temple of Cthulhu
Horocycles: In the Hive and Camelot, you could see how big circles look in the hyperbolic plane. While in the Euclidean world, big circles resemble straight lines more and more, the situation in the world of HyperRogue is different -- they always look curved. If you are standing on a circle, it is easy to tell that this is not a straight line -- but locally, a fragment of a circle of radius, say, 10 tiles will look almost exactly the same as a fragment of a circle of radius, say, 100 tiles. A horocycle is what we get in the limit -- something like a circle of infinite radius. The Temple of Cthulhu is an infinite sequence of horocycles, where you have to go deeper and deeper to get more points, and Whirlpool is a horocycle which draws you toward its infinitely distant center.


unmarked horocycles in the Caribbean
Caribbean is unmarked, and shows that, just as in Camelot, it may be hard to find the direction towards the center of the horocycle -- you have to use compasses to lead you there.


equidistants in the Ocean
A Great Wall is a straight line, and the coast is an equidistant curve at some distance from this great wall (the distance changes with the tides). As you can see, it is hard to tell the difference between a large circle, horocycle, or a distant equidistant -- so if you are in the Ocean, it is not immediate to tell whether the waves you see are because of the nearby coast, or because of the nearby Whirlpool. See this article by Fulgur14 to read more about circles, horocycles, and equidistant curves.


get lost in the Haunted Woods
The Haunted Woods is a land from where there is just one exit -- it is bounded by a single curve. For further confusion, this curve may look like a circle or horocycle, but it is not -- it is an equidistant curve -- while moving randomly inside a horocycle quickly gets you to its edge, in the Haunted Woods, if you cross the straight line and go randomly on the other side, you will likely be lost forever in the Haunted Woods, as you have to return to the location where you have been before, and this is virtually impossible, due to the exponential growth. The Yendor Quest is based on the same principle -- you have to go 100 steps to find the Key, then return. There is a marker which shows your way to the Key, but you have to return on your own, which is virtually impossible based only on luck or memory.


rescue the Princess!
In the Princess Challenge, a mouse asks you to reach the Princess, locked somewhere in the Palace. She is 100 steps away, so you would not find here without help -- luckily, the mouse will lead you. The screenshot above shots the cell where the Princess is locked -- you have to press the green button in bottom left to open the doors; when you first see the princess, you are typically on the other side, and have to go around all these closed doors. This exhibits interesting properties of hyperbolic mazes -- there are obstacles on the way, and sometimes you will have to do significant detours to go around them, but if you know what you are doing, you will eventually reach the Princess with probability of (almost) 1. This is related to branching processes.


equidistants in the Ocean
The Crossroads III, as well as the Elemental Planes later in the game, show straight lines which cross at straight angles.



equidistants in the Ivory Tower
The Ivory Tower shows you how gravity could work in the hyperbolic world. Gravity is directed towards a straight line, thus making the horizontal levels into equidistant curves. Interestingly, while in the most of the game it is very hard to return to the location you have been to, in these lands, you simply go with the gravity to exit, and you turn up at almost exactly the same location you started. This is because, as usual, levels grow exponentially: moving 243 cells on the level 20 corresponds to moving just 243/3(20-10)/2 = 1 cell on level 10.



equidistants in the Yendorian Forest
The Yendorian Forest is another land in gravity. We already had straight lines that cross, and that are ultraparallel (diverging). Branches of the same tree in the Yendorian Forest are straight lines that diverge when you go upwards, but get closer and closer when you go towards the base level.



regular pattern in the Vineyard
There are regular patterns in Euclidean plane, which generally look like grids. We also have regular patterns in the hyperbolic plane, but they look more like infinite trees. Such regular patterns appear in the Vineyard, Land of Power, Zebra, Windy Plains, Emerald Mine, and Palace. The picture above shows the Vineyard; see the Gallery of Lands for the screenshots of the remaining regular lands.



curvature in the Burial Grounds
In the Burial Grounds, you have to fight enemies and excavate treasures, using a magical energy sword. This sword stays at the same relative angle to you when you move. However, after you go in a closed loop, the sword will usually be rotated, because of how angles work in the hyperbolic plane! This land obviously makes no sense in the Euclidean mode.



all the species of turtles in Galápagos
In Galápagos, each tortoise has 21 binary properties, thus leading to 221 = 2097152 subspecies. Tortoises at the given spot are usually exactly the same, but as you travel, the environmental properties change smoothly, and so do the properties of Tortoises. You have found a (random) baby tortoise, and you have to find a tortoise which exactly matches the baby. This would not be feasible in the Euclidean plane -- even if you exactly knew where the correct tortoise are, you would still have to go 1000 steps to reach it, but since you don't know, you would have to wander blindly. In the hyperbolic plane, the correct tortoise is always actually quite close, because of the exponential growth; furthermore, the simple method of always going towards the direction where more properties agree works. The coloring of tiles in the Galapagos (based on the number of factors which agree), as well as the height function used to generate the Dragon Chasms, is related to a generalization of the Wiener process to the hyperbolic plane domain -- there are similar generalizations to Euclidean plane domains, but for hyperbolic plane this is mathematically much more elegant.



Land of Eternal Motion in GP(2,0)
You can also change the geometry in HyperRogue. The first alternate geometry was, of course, the Euclidean mode -- see this old post about it. In 2018 the big part of work on HyperRogue was adding more and more geometries to experiment with. Disable bitruncation for stronger hyperbolic effects; apply the Goldberg-Coxeter construction to weaken them (which may make you lose to dogs in LoEM or Hunting Grounds -- even though the world is globally hyperbolic, there are parts which are flat); play on the sphere; use irregular, or mostly arbitrary Archimedean tilings; and so on. See this article for all the possibilities.


Hypersian rug model
The Poincaré disc model is just one of many possible models ("maps") that can be used to display the hyperbolic plane. HyperRogue also lets the players to play with other models. In the band model, you can see that your route through the game is almost a straight line; in the half-plane model, horocycles are horizontal and branches of Yendorian Forest are (almost) vertical; in the Klein model, straight lines look straight; the Hypersian rug model lets you play on something similar to the hyperbolic crochet, and the paper model creator even lets you to print it. See this article for more details.