Development Diaries

Kate B's picture

ROGUELIKES: "DIFFICULTY" VS "CHAOS"

I was trying to figure something out. why is it that I enjoy hard games, but I find so many games that are often called "hard" to not be satisfyingly hard, but instead to be tedious? why do I hate playing these games when in theory they should be fun and rewarding? why am I *good at* some of these games but don't want to actually put the effort in to beat them? Let's take a look.

1. Roguelike structure and what it means

there's two different types of roguelikes and roguelites. the first is one where you can take something permanent from the game loop (like Hades, with its upgrades) and the kind where when you die, you keep nothing whatsoever and lose it all.

I'm not against the second type. But I think it lacks one thing, and I'll try to describe it: i.e, when I lose everything, I lose everything, but my skill and mastery of the game remains in my brain. In the best kind of roguelikes, this means something. it means that on my next attempt, I'm better. I can get things faster, I can beat enemies quicker, I know where to go, etc.

...however, the problem is, most of these roguelikes DON'T work like that.

...If I die, I'm back at the start, with my pea shooter and low health, and I'm doing it again. What I want, now, is a faster route.

(Enter the Gungeon: I spent so long in this first area every single time I died that I got sick of it)

I want a shortcut so I can trade off my higher skill level for getting my upgrades back faster. I want to have a direction I can go where the enemies are stronger, which a new player would struggle with, but a seasoned player can get through with no trouble.

this fixes an issue I have with a lot of these games: I can be good at these games- I can be *really* good at these games- but no matter how good I am, I have to go back to the start, and spend 15 minutes with a pea shooter, having no fun at all, daydreaming about the build I *could* have later, if I don't die.

2. Not dying

There is a problem in a lot of these roguelikes, which is that at the start you have like, maybe 3 or 4 hit points but they're so hard to get back that if you die, you might as well restart.

This puts the entire game's risk into the very first enemy you encounter. if it hits you, you're worse off than you'd be if you restarted, as now you've been given an additonal quest to go find some more health. Get hit, and the game is over. also, you have your very first weapon and that's it. This encounter will be basically identical every time you play the game, without fail.

(spelunky: you get 4 hit points from the start in spelunky. they're so hard to get back that if that first enemy hits, you're now on a quest to find mre health, in addition to the quest you're already doing. you'd be a fool not to just restart!) (nuclear throne: health pickups are a common item drop from enemies, and so losing a bit of health on level 1 usually isn't a problem, and it's not as much of a risk to keep playing.)

3. Builds

once you get a while into the game, a "build" appears. You're stuffed up with upgrades, the numbers are going up, there's "juice", it feels different. It's harder to die. There are way more choices to make moment to moment. You're in the "real" game.

if this part of the game takes a while to get to, I think the game looks like this:

(I call this the "inverted pyramid")

the "inverted pyramid" structure: the start of the game has fewer branches, and the end of the game has more branches. you can make fewer choices at the start, and more at the end! In fact, the game usually ends right at the point that opens up the most!

I propose a different structure to play with:

(I call this the "pyramid")

what if the early game had the most choices, but the later game starts bottlenecking you into fewer, really putting that build to the test and deciding if you live or die?

I thought about it and realised the second structure is more akin to how most puzzle games work. Roguelikes aren't puzzle games, though.

A more likely structure for a fun roguelike could be this:

(the "trellis")

4. Chaos

The problem with the inverted pyramid structure is something I'll try and illustrate here:

(high chaos at the start of the game. You can live or die based on one decision. Low chaos at the end of the game. the difficulty levels out and it's easier to stay alive. the entire game happens at the start.)

I'm going to name this effect "chaos", and mark it as something different to "difficulty". chaos is when a game becomes a bit quantum and unstable.

alternate definitions of chaos: "how easy it is to lose", "how tight the tightrope is", "how quickly it can go wrong". I define it as similar to quantum instability, or schrodinger's cat. when you are in chaos, you are in a cloud where the game could be won or lost at any second.

dying and restarting a lot at the start of a game is something you could call "reshuffling the deck over and over until the game is fun"

This is chaos. it's not challenging, it's just chaos.

another way of doing a roguelike could be this:

(low chaos at the start of the game. You don't die as easily, but as the builds get juicier as the run goes on, the tradeoffs become more drastic, and the game becomes more hard, really putting you to the test.)

achieving this is difficult, mind, because, out of all the examples I went over in my head, a run that is "high chaos" at the end and "low chaos" at the start could easily once again turn into a case of the early game being unfun and the later game being a lot more fun.

IDEA: what if you started with a lot of max hp, which was easier to get back, but your max hp actually *went down* as the game progressed, instead of went up?

At the moment, a lot of roguelikes feel like this:

(high chaos at the start, fewer choices)

I think it could feel good if it felt like this:

(fewer choices at the start, but low chaos.)

or even THIS:

(lower chaos at the start, fewer choices)

these structures trade away the major problem of the start of the game being *both* a low-choice, AND a high-difficulty challenge, by swapping only one of these things around. if you swap both, it becomes un-fun again.

Conclusion

sometimes people will say "git gud" about games that are simply no fun to "git gud" at. games that waste time every time you die but require dying to get the knowledge to progress. Games that put you through chaos instead of difficulty and then turn into an easy game as soon as you figure it out. I think that a roguelike can reset entirely and lose all your progress and still be fun if it aknowledges the fact that at the start of the game, it may be addressing an experienced player, and not a newbie. I think it could make the games more fun and more juicy AND more difficult without spending my entire run in the chaos.

new account and game

hi!

if anyone happens to read this, just know that i'm active on a new account, bruneiros! i plan on keeping this account i'm currently using because all of my old games are here, but i also want to move on from it.

check Civilization Flight Simulator out right now, it's a fun lil experiment made with Unity :)

eggliking

imagem_2024-07-10_134143722.png

gaming

coelacanth000's picture

The Blog

Welcome to the Blog if you really like blogs, then you are going to love this blog, i am blogging like the true boss of the century, mainly because i am the true
Welcome to the Blog boss of the century, this is the blog of all blogs to end the other blogs, join the LEGION! or else you will be part of A VERY SAD FUNERAL
Welcome to the Blog SERVICE, thanks for reading
Welcome to the Blog -With Love, From Alie
Welcome to the Blog
Welcome to the Blog
Welcome to the Blog
Welcome to the Blog
Welcome to the Blog

Tango and Cash

tango_and_cash.jpg

You fallen for the oldest trick in the book: bad cop, worse cop

catábase

Catabase1.png

this year, I finished a short film for college. it's called Catábase (Katabasis), is almost 10 minutes long and in a way does feel like some of the stuff I was making back in the day. here it is: https://www.youtube.com/watch?v=iMXmihtIDNU (english subtitles are available)

this project has meant a lot to me, as it was a very fruitful and loose creative experience, and i just let out everything i wanted to let out for this film. it was the kind of thing that i needed to make as a reminder that i can just do whatever i want and that's really all that matters. after this one, i plan on working on another short film in my own free time and on other projects as well.

i'm not really active on social media outside of instagram (https://www.instagram.com/10000ratazana/?hl=en) and discord (also 10000ratazana). idk where y'all glorious trainwrecks people are nowadays, and i'm interested in going back to talk with the people i spoke with back in the day

lmk your thoughts on catábase if you've seen it, and please share it with people if you liked it! it's been out for a couple of weeks now, but I only remembered to post about it here today. my bad!

===========================
edit made shortly after posting !!!

one of my key influences in certain parts of catábase is something called "gamecore", which i heard for the first time when harmony korine started promoting his latest film, 'aggro dr1ft'. since i'm not in a city that holds film festivals --especially the ones that would show something like that film-- i didn't watch that, but i let my imagination go wild. many of the scenes from the 3 minute mark onward are my own spin on "gamecore". i kinda want to make this a thing in my following film projects. it's a fascinating concept to work around with, and one that i think marries perfectly with other ideas i had floating in my mind (i want to incorporate more and more "slow cinema" influences in my films, too, and i think a "gamecore" and "slow cinema" combo could be interesting)

gems


every day imgur is not dead is another little miracle.

so those in that game would be gems. but what's up with that?

firstly this is all about an upcoming (not anymore, it has already released) version of jumper 4 real.
secondly i should talk about how saves work.

for the most part everything about a save slot is stored in a file named slotN.txt where N is the slot number. it is a pretty human-readable format. here's an example:
https://pastebin.com/raw/HWbdkX6f

gems, however, are stored in a different file, slotN.j4g, in a condensed format. (j4g is a format i came up with short for "jumper 4 gems".) this is partly so collecting a bunch of gems doesn't take up a bunch of disk space, and partly so that it's much quicker for the menu to just read off how many gems each slot has. in future i may put other info the menu wants to read quickly here as well, like how many different rooms the user has triggered the "you win" screen from.
here's the j4g specifications. you'll note there's no header.

big-endian

2 BYTES UINT16 {BLUE GEM COUNT}
2 BYTES UINT16 {RED GEM COUNT}
12 BYTES {RESERVED}
2 BYTES INT16 [THE X POSITION OF THE 1ST BLUE GEM; SIGNED]
2 BYTES INT16 [THE Y POSITION OF THE 1ST BLUE GEM; SIGNED]
2 BYTES INT16 [THE X POSITION OF THE 2ND BLUE GEM; SIGNED]
2 BYTES INT16 [THE Y POSITION OF THE 2ND BLUE GEM; SIGNED]
... {AMOUNT OF BYTES TO READ IS DETERMINED BY BLUE GEM COUNT}
2 BYTES INT16 [THE X POSITION OF THE 1ST RED GEM; SIGNED]
2 BYTES INT16 [THE Y POSITION OF THE 1ST RED GEM; SIGNED]
2 BYTES INT16 [THE X POSITION OF THE 2ND RED GEM; SIGNED]
2 BYTES INT16 [THE Y POSITION OF THE 2ND RED GEM; SIGNED]
... {AMOUNT OF BYTES TO READ IS DETERMINED BY RED GEM COUNT}

up to four versions of this file exist per levelset: slot 1, slot 2, slot 3, and combined (union)

"the x position" and "the y position" refer to the x and y position of the room the gem is in.
(what you would call "levels", jumper 4 real would call "rooms", and every room is somewhere on a grid spanning from -32768 to 32767.)
(if there's multiple gems of the same type in the same room, there is a mechanic where all of them turn out to be holograms except the last one you try to collect.)

"combined (union)" is this:

named "union" because it is the "union" of all gems you have across all savefiles (as well as deleted savefiles). it's like a permanent progress indicator.
whenever you collect some new gems and go back to the menu, when the game writes what new gems you've collected in save slot N, it also tries to update the "union" file. it cross references with all the gems you have in slot N and ticks off whatever gems are already present in the union file, and the remainder gets appended.
well not actually "appended" since the structure of j4g files means new blue gems have to be inserted into the middle of the file, and also i implemented it really weirdly such that the "union" table of gems effectively gets replaced with the "slot N" table of gems and then has the gems that aren't in slot N appended to it, but that part doesn't really matter since lua's pairs function has no defined order and that's how i iterate through all the gem tables anyway (the key is a room position and the value is true).

but now you may be wondering about that number to the right of the /. you may be wondering how the menu knows what the total amount of each type of gem is, without manually scanning every single level for gems.

the answer is... it doesn't! it just checks two variables you set from the editor. (if either of them are 0 or left empty, then it doesn't show the gem total at all. also, there is nothing stopping you from lying about the total amount of gems your levelset contains.)

however, the editor does have a "recount gems" button that automatically totals up the amount of gems every room has.
how are rooms stored? well hey i have another freaking pastebin link woah.
https://pastebin.com/raw/625G65ES

OK THIS PART OF THE POST IS ABOUT HOW ROOMS WORK.

map data itself is two bytes per tile - the first byte being a "bank" (though this, like many other decisions, is entirely arbitrary and not really enforced) - with the additional restraint (for the time being) that every byte has to be printable ASCII. also there's some hacky compression for rows that are all the same tile or adjacent rows that are identical.
you'll notice there's no separator between each tile. this might lead you to believe "oh, ok, so you used some string buffer thing, and you check an initial byte to see if it's | and if so you know it's map data, and from there on you consume 2 bytes at a time" but no!!! i wrote a stupid custom string split function that specifically only splits across multiples of n (2 in this case). that was back when i didn't even know string buffers existed. where were we? oh, right.
so right away there's a problem: we can't just use string.find for the 2 bytes that comprise a blue or red gem, because what if i got really pressed for space for some reason (95 tlies/objects per bank isn't infinite!!) and started using using { or | as a bank? then if it were right next to a tile that ended in O, it falsely finds O{ or O| and thinks it's got a gem. but it don't! and it's not possible to tell what parity a tile is on except relative to the last newline (not to the start of file).
so i COULD just write another hacky mess that's like string.find but only for specific parities and also considers the last line break to be parity 0. but i had a better idea that was way faster.
up to this point i had three agreed-upon "starting characters" for this pseudo-format i saved as .txt:

  1. ===. indicates a header, kinda like puzzlescript. and yes it has to be exactly three =s because uhh it looks nice. also there has to be a === at the end too. the main bulk of the header is expected to be ONLY UPPERCASE LETTERS, but it can have a : to denote a "phase", which can be UPPERCASE LETTERS INCLUDING NUMB3RS.
  2. |. indicates data of any sort. can rarely have lowercase letters before it, usually to indicate what type the following data is (number, string, bool).
  3. >. indicates a "command", like duplicating rows of map data, or switching how data is interpreted (like a sub-header). i think a long time ago i had an internal rule that commands should all be 3 letters long but that doesn't matter anymore, and anything that can follow a | can follow a >.

is there some central parser that knows what to do with all these characters? no! no there isn't. in fact, i've probably written roughly the same parsing code about 4-5 times, with the difference mainly being where data goes and what commands do.
so to store what gems are in a level at the very start of the file more easily, i introduced a fourth character:
  1. !. indicates arbitrary-ish bytes follow. all bytes must have the top bit set so none of them will be ascii, and the byte sequence is terminated with a zero-byte. (and then a line break.)

so now every room has a header starting with !, 0x80 (np++ assigns this to €), and a zero-byte..
whenever a room is saved, the process that jots down each tile also checks if that tile corresponds to a blue gem or a red gem. if it's a blue gem, it flips the last of the 2nd byte of the header. if it's a red gem, it flips the penultimate bit of the 2nd byte of the header. i.e. blue gem only is 1, red gem only is 2, blue gem and red gem is 3.
and the "recount gems" button just nips the first 2 bytes of every room in the levelset.
it checks the first byte. if the first byte isn't !, then it notes that the room is using an old version of the level format with no header, and it will print how many such rooms it encountered once it's done counting.
then it checks the second byte. if the last bit is set, it knows the room contains a blue gem. if the penultimate bit is set, it knows the room contains a red gem. so it just sums all that up and then fills the textboxes above it with the results it got.

in retrospect, having introduced a header into my level format, i probably should have had the first byte (well, last 7 bits of the first byte) be a version number instead of gem information, so if i make any more silly changes then i can know definitively what version of the room "format" each room was saved with.
indeed i should. but so far, i haven't.
yay!

Making my first good game

devblog_01.png

I don't know if anyone still uses these forums, scrolling the recent posts tab there's some posts at the bottom that are almost older than I am, I mean by the looks of things this site was most active before the breakup of Yugoslavia into serperate states... but, if you're reading this, hiii! I'm working on a game for the open world jam, and I guess I'll drop my thoughts, comments, questions, concerns, grievances, and mediations here semi-regularly (about once every 4-6 years) while I try and beat this game into a semi playable state.

My plan for the game:
I like David Lynch films, max payne, the US state of Florida, and landscape painting, and I'm not a big fan of neo-nazis. My plan is to combine all of this into something of an open world game, have the player gunning around the sticks shooting krauts in a third person shooter kind of game. So far I've at least got the third person shooting part done and dusted. Aside from that... well it needs some work to be honest, and in terms of playability I'd rather stab myself in the balls with a fork than play the 'game' at this stage, although that's been a bit of a running theme in all of my games up to this point.

My mid term goal is to try and make a somewhat playable demo to showcase the game and get people's thoughts on it up to that point (assuming I can find peoples to play it). The demo would probably be something small, an old plantation manor where you're tasked with assasinating the fictional florida governor to put and end to his kraut collaberation. It gives me an oppurtunity to work in all of the most major systems the game needs to work, and experiment with a mini open world (that being the plantation estate and its sprawling gardens) before moving onto the real deal.

Today I've been working on cats, a cooking system, animating and fixing the cataracts I seem to have given all of my enemies' AI when I unkowingly deleted/added some code somewhere.

Cool website!

hand.gif

I really like the idea of this website. Happy to finally be able to register.
Here's a little something I've been working on lately.

hi

figured i should give everyone who cares an update since i'm Still Alive

most of my focus has been toward animation and comics these days, but i still want to make another game someday (which is something i constantly tell myself for a few years now). i have a couple ideas floating around, just need to open RPG Maker up and start throwing them together.

i also feel the need to contextualize some stuff, as a lot of the stuff i made and said over here were when i was still a middle schooler (i'm 20 right now, btw) and uhh yeah looking back at those things i can't help but feel a bit embarrassed lol. i'll try not to be super harsh on myself about this stuff but yeah Lol i apologize for any dumbassery of my part from back then, and my most sincere Thank You to all who have supported my vidya making endeavors. the games i made back then were pretty defining for the overall direction i wanted to take my art in, and joining this community definitely helped as well :)

thanks for reading, and please let me know if you're interested in checking out some of my New Stuff in comics + animation !!

(btw i don't plan on keeping the nuuup username bc it honestly doesn't represent me anymore, but i'll probably keep it for the time being)

Syndicate content
pensive-mosquitoes