commit bfc6b4593a51a3730c3b02ecdc9b43220ac64673
Author: Simon Watson <spw01@protonmail.com>
Date: Mon Feb 14 10:42:18 2022 -0500
Just adding a bunch of previously untracked stuff
diff --git a/2021-02-6-in-defense-of-perl.org b/2021-02-6-in-defense-of-perl.org
new file mode 100644
index 0000000..5e7d8bc
--- /dev/null
+++ b/2021-02-6-in-defense-of-perl.org
@@ -0,0 +1,338 @@
+https://
+gopher://
+#+AUTHOR: Simon Watson
+#+TITLE: In Defense of Perl
+
+* Preamble
+
+ I've wanted to blog about Perl for a while now. I've had this conversation
+ with quite a few friends, peers, and co-workers over the years and I can never
+ seem to fully get to the bottom of it.
+
+ Perl has obviously lost a lot of ground in recent decades, and is not really
+ what I would consider a popular language anymore. I think there are a few
+ reasons for this, and they're not unfair reasons.
+
+ With that said, in my experience Perl seems to have a very bad reputation. Not
+ only is it not popular, people are often offended by it. It seems to provoke
+ strong reactions.
+
+ Languages like Ruby and PHP are often called "dead" and "not modern", and seem
+ to have many people calling out their usage. With that said both of these langs
+ seem to be thriving with strong communities, and for every person that nay-says
+ their use, there is another in the discussion celebrating them.
+
+ This doesn't seem to be the case with Perl in my experience.
+
+ Below I'd like to "defend" Perl a bit, and show why it still has a place in the
+ modern computing landscape. In doing so I will try to be clear about my own biases
+ and forthcoming about Perl's many issues.
+
+** My History and biases
+
+Skip this section if you're more interested in the arguments I present on Perl's
+behalf. This section is to give a litte background and to try and enumerate my
+biases in favor of Perl.
+______________________________________________________________________________
+
+*** Bias #1
+
+ Perl was the first language I felt I had learned to a pretty complete level. I'm
+ always hesisitant to say I'm an expert in anything, but if I was ever an expert (or
+ close to it) in one area, it's probably Perl programming and syntax.
+
+ I think this immediately creates a bias in my head that Perl is a good language. I
+ think this kind of bias is pretty common when trying to talk about programming languages
+ objectively.
+
+ - I'm very familiar with it so it /feels/ easy
+ - I know all the standard patterns so I reach for it a lot, and
+ it's /very/ quick for me to write relative to other languages;
+ I often use it for prototyping even if I end up rewriting in
+ another lang later
+
+*** Bias #2
+
+ I'm a sysadmin by trade, not a software engineer. Despite that, I've had to write
+ and maintain software (especially things like tooling) many times in my career.
+
+ I mention this because I think Perl favors this profession more so than strict
+ software engineering jobs. I'll touch more on this later, but wanted to mention
+ this here.
+
+*** Bias #3
+
+ I very rarely need to deploy or write software for anything other than a Unix
+ environment, and even then 95% of the time, it's for a Linux environment. Again,
+ I'll cover this more later, but my experience and arguments are heavily biased
+ towards the /Unix/ Perl programming experience. Not only is this a bias, it's
+ a disclaimer of sorts, as I won't really be covering the non-Unix system Perl
+ programming experience.
+
+** Why Perl is "bad"
+
+Before I get into my arguments for using Perl today, it's important to cover some
+of it's downsides and talk a bit about why I believe it's been relatively abandoned
+by the modern software development community.
+
+I think one of the biggest reasons right off the bat that Perl has fallen by the wayside is
+the Perl5/Perl6 debacle. Others have covered this pretty extensively, so I won't
+belabor the point, but in essence I think the effort to "modernize" Perl, and
+try and make it into a language that non-Perl users could love, while still keeping
+Perl5 users happy, was too tall of an order. The spiral that came out of it fragmented
+the community and userbase, and gave the inititive to Python.
+
+The Perl wikipedia page has some decent coverage of the various Perl5/6/7 lineages:
+https://en.wikipedia.org/wiki/Perl#Raku_(Perl_6)
+
+( For some more interesting reading/background, see:
+https://en.wikipedia.org/wiki/Outline_of_Perl )
+
+Secondly, the syntax. I will make some arguments for Perl's syntax later, but I'll take a
+brief moment here to acknowledge that it can look esoteric on a good day, and down right
+illegiable on a bad one. The heavy use of sigils is something I will aim to cast as a
+positive later on, but I will admit that needing to memorize and have an awareness of
+different context sensative sigils can make code look "messy" or hard to deciper. More
+on this later.
+
+Lastly, and by and large the argument I'm most likely to hear against using Perl:
+
+"No one uses it."
+
+In this blog post I hope to address these arguments and others, with
+concrete and constructive counter points.
+
+My aim in writing this is not to convince people to program in Perl. It's to convince
+people that Perl is not only a perfectly fine language to use for many different problem
+areas -- it's to show that it may in fact be the /better/ choice for some problem areas.
+
+I hope the distinction is clear and that I can convince you!
+
+* Addressing Arguments
+
+Preamble out of the way, I'll get right down to brass tacks.
+
+** Perl Syntax
+
+People often talk about how Perl is completely unreadable and "write only". This can
+be true, but I think it can be true for /any/ language, and as such doesn't really feel
+like a valid criticism.
+
+With that said, lets explore it a bit.
+
+Let's start with something basic like making a hash using two arrays:
+
+#+BEGIN_SRC perl
+ #!/usr/bin/perl
+
+ my @keys = ("a", "b", "c");
+ my @vals = (1, 2, 3);
+ my %hash;
+ @hash{@keys} = @vals;
+
+ # Output:
+ # perl ar2h.pl
+ # a : 1
+ # b : 2
+ # c : 3
+#+END_SRC perl
+
+#+BEGIN_SRC python
+ keys = ['a', 'b', 'c']
+ values = [1, 2, 3]
+ hash = {key: value for key, value in zip(keys, values)}
+ print(hash)
+
+ # Output:
+ # python3 ar2h.py
+ # {'a': 1, 'b': 2, 'c': 3}
+#+END_SRC python
+
+For those unfamiliar with Perl's syntax, I'll break down briefly what's happening here:
+
+We have two arrays with data in them, and an empty hash. Hashes in Perl are denoted by the '%'
+symbol, arrays the '@' symbol.
+
+By addressing the hash '%hash' with the '@' symbol, we are essentially addressing one dimention of
+the hash. This 'syntax sugar' gives us an extremely ergonomic way to reason about how data assignment
+is working in the assignment line.
+
+We're taking the hash 'hash' and assigning the array 'keys' to it's first dimenstion, and the array
+'vals' and assigning it to it's second dimenstion. Because arrays are ordered, this mapping is
+intuituve and predictable.
+
+There's nothing terrible about the example Python code to me, but the idea that it's intrinsically
+more readable doesn't ring true for me, it's just different, and presupposes that you understand
+it's assignment syntax in the way Perl presupposes you understand it's sigils and tokens. To reiterate,
+Python's syntax is no better or worse than Perl's in this case -- it's just different. The programmer
+may have preferences for one or the other, but I don't think an argument can be made that one or the
+other is objectively better.
+
+OK, so you're probably thinking, this is such a ridiculous and contrived example, and that's true to
+an extent. Let's take a look at something a little bit more involved.
+
+Writing a program to emulate 'tail'.
+
+I saw what I think is an extremely elegant way to do this in Python, see:
+http://www.dabeaz.com/coroutines/follow.py
+http://www.dabeaz.com/coroutines/
+
+For the sake of ease the code above has been copied below. I've changed it slightly
+to work for my version of Python.
+
+#+BEGIN_SRC python
+import time
+def follow(thefile):
+thefile.seek(0,2) # Go to the end of the file
+while True:
+ line = thefile.readline()
+ if not line:
+ time.sleep(0.1) # Sleep briefly
+ continue
+ yield line
+
+ # Example use
+ if __name__ == '__main__':
+ logfile = open("log_file")
+ for line in follow(logfile):
+ print(line)
+#+END_SRC python
+
+The above Python code snippet features some cool async features, but I'm not aiming to talk about that here. I provided
+above simply because I think it show cases some of Python's more elegant syntax and expressive qualities.
+
+Below is a code snippet in Perl that performs roughly the same thing (from a user point of view):
+
+#+BEGIN_SRC perl
+ #!/usr/bin/perl
+
+ use strict;
+ use warnings;
+
+ open(my $fh, '<', "log_file");
+
+ while () {
+ seek($fh, 0, 1);
+ print(readline($fh));
+ sleep 1;
+ }
+
+ close($fh);
+#+END_SRC perl
+
+Again, echoing the sentiments from above. I think both of these implementations are perfectly readable and expressive, and
+don't ask /too/ much of the user unfamiliar with the language:
+ - open a file handle
+ - seek to end of it
+ - read the line
+ - print the line
+
+With some contrived examples out of the way, I'm going to provide a code example from some code I wrote in
+the past week:
+
+#+BEGIN_SRC perl
+ if ( $log_file_path =~ m/(\d{4}-\d{2}-\d{2}).log/ ) {
+ my $log_date = $1;
+ $log_date =~ tr/-//d;
+ if ( $log_date < $LATEST_DATE ) {
+ next;
+ } else {
+ my ($serial, $parsed_log_ref) = parse_log($log_file_path, \&json_line_parser);
+ my $output_file_path = $PROCESSED_LOG_DIR_PATH . "/" . $serial;
+ write_parsed_log_array($output_file_path, $parsed_log_ref);
+
+ }
+ } else {
+ die "Couldn't match log date in &process_seat_dir, exiting...\n";
+ }
+#+END_SRC perl
+
+This is a code path taken frequently in a log parser I wrote from something at my job.
+
+Let's walk through the code and break it down in plain English. Feel free to skip if it's self evident:
+
+Enter the =if= block if the variable =$log_file_path= matches a regex that looks something like =$YEAR-$MONTH-$DAY.log=.
+
+Upon entering the block, capture the first regex capture group (enclosed in =()= in the regex) into a variable,
+=$log_date=.
+
+Use the Perl built in =tr()= to remove any =-= chars from the string.
+
+Compare the resulting string (something that looks like =$YEAR$MONTH$DAY=) to a variable we set elsewhere in
+the function scope, skipping the next code block if it's lower than =$LATEST_DATE=
+
+Assign the return of =parse_log=
+
+=parse_log()= expects to be passed two arguments: a string, and a function reference,
+it returns two variables: a string, and a reference to an array, which represents an ordered list of
+the lines in a file.
+
+We assign these two returns into variables called =$serial= and =$parsed_log_ref=.
+
+Construct a path name via the Perl built in string concat ( =.= ) and assign it to =$output_file_path=.
+
+Finally, call a function that will flatten and write out the array of log lines to a file.
+
+End syntax explanation.
+____________________________________________________________
+
+I think there are two potentially tricky Perl syntax-isms in the above snippet.
+
+Firstly, the data type of =$parsed_log_ref= is completely opaque. If you don't have insight into what =parse_log=
+is returning, you have no idea that =$parsed_log_ref= is an array reference. Strongly typed languages obviously
+solve this kind of problem for you, but I think in the domain of dynamic languages, this is a common problem
+that comes with the territory. To my knowledge Python or Ruby doesn't have great answers for this (please feel
+free to correct me on this).
+
+Secondly, unless you're familiar with perls tokens, it's unclear what =\&json_line_parser= is. I think this kind of
+notation can actually be a /plus/ for Perl.
+
+If I am passing some data to a function by reference, it's pretty clear what that data is (assuming it's not
+encapsulated in a scalar like the aforementioned =$parsed_log_ref= example):
+
+\@array
+\%hash
+\&function
+\$scalar
+
+For me personally, being able to denote type at a glance can be useful, as opposed to bare words in languages like python,
+where lots of the time it's up to me as the reader to understand all the surrounding context in order to know what type
+a variable is.
+
+As mentioned above, Perl has this issue as well to an extent, but I think to a lesser extent than dynamically typed
+languages that don't denote type with any kind of special syntax.
+
+I acknowledge however it's difficult to make an _objective_ argument in this regard, so...moving on.
+
+
+
+* Perl is /fast/
+
+
+
+* There is no better glue
+
+- Here talk about Perl's "best" use case, as a glue language
+ for processing text streams and/or unstructured text data
+
+* Lesser known Perl features
+
+- Perl magic goes here
+
+* Feedback/Topics/Notes To cover
+
+- People prefer python as more people know it
+- Perception python stdlib is more complete
+- People like Perl for it's portability
+- People like Perl for text generation/report generation
+- People like perl for it's use of one liners
+- Cover "higher order perl"
+- Perl's history as a "sysadmin lang" re: Larry Wall/Randal Schwartz
+- Perl is more like Lisp and it is like C, and this is an important
+ distinction
+- Talk about higher order functions
+- Talk about string function references
+- Talk about how Perl is /faster/ than Python in most text stream
+ processing cases (prove this!)
+- Not welcoming to new comers
+-
diff --git a/2022-01-26-rogue-like-design.html b/2022-01-26-rogue-like-design.html
new file mode 100644
index 0000000..d62b03a
--- /dev/null
+++ b/2022-01-26-rogue-like-design.html
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<!-- 2022-01-26 Wed 15:19 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title></title>
+<meta name="generator" content="Org mode" />
+<style type="text/css">body{margin:40px
+auto;max-width:900px;line-height:1.6;font-size:18px;color:#444;padding:0
+10px}h1,h2,h3{line-height:1.2}</style>
+<script type="text/javascript">
+// @license magnet:?xt=urn:btih:e95b018ef3580986a04669f1b5879592219e2a7a&dn=public-domain.txt Public Domain
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(null != target) {
+ elem.classList.add("code-highlighted");
+ target.classList.add("code-highlighted");
+ }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(null != target) {
+ elem.classList.remove("code-highlighted");
+ target.classList.remove("code-highlighted");
+ }
+ }
+ /*]]>*///-->
+// @license-end
+</script>
+</head>
+<body>
+<div id="content">
+<div id="table-of-contents">
+<h2>Table of Contents</h2>
+<div id="text-table-of-contents">
+<ul>
+<li><a href="#orgbdbcc61">1. Repetition and Death - The Fun of Roguelike Game Design</a>
+<ul>
+<li><a href="#org5a55300">1.1. Preamble and Rogue Primer</a></li>
+<li><a href="#orgbf270c5">1.2. What Makes Roguelikes/Roguelites So Fun</a></li>
+<li><a href="#org88b7813">1.3. Closing Thoughts</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="outline-container-orgbdbcc61" class="outline-2">
+<h2 id="orgbdbcc61"><span class="section-number-2">1</span> Repetition and Death - The Fun of Roguelike Game Design</h2>
+<div class="outline-text-2" id="text-1">
+<p>
+I love Roguelikes. It's my absolute favorite genre of video
+games. I'd like to talk a bit about them in this blog post;
+specifically what I believe makes them so compelling, and what keeps
+me spending my scarce video game time in this genre.
+</p>
+</div>
+
+<div id="outline-container-org5a55300" class="outline-3">
+<h3 id="org5a55300"><span class="section-number-3">1.1</span> Preamble and Rogue Primer</h3>
+<div class="outline-text-3" id="text-1-1">
+<p>
+There seem to be several competing definitions of what
+a 'roguelike' is. It's a topic that is frequently
+debated by lovers of the genre and it's associtated
+offshoots.
+</p>
+
+<p>
+Skip this section if you're familiar/uninterested in the
+Roguelike definition argument and are more interested in
+my thoughts on what makes these games fun/interesting.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+I tend to like the following break downs:
+</p>
+
+<p>
+Rogue/like/: A genre characterized by its similarity to the
+game Rogue (1980). Rogue was originally released for Unix
+mainframe systems.
+</p>
+
+<p>
+Additionally: See the following HTTP website for
+the "Berlin Interpretation" of what a roguelike is:
+-> <a href="http://www.roguebasin.com/index.php/Berlin_Interpretation">http://www.roguebasin.com/index.php/Berlin_Interpretation</a>
+</p>
+
+<p>
+The above is widely used as a yard stick to determine if
+something is a roguelike or not, though not everyone
+agrees on this definition.
+</p>
+
+<p>
+What <i>I</i> typically think of as a Roguelike
+is a game with the following characteristics:
+</p>
+
+<p>
+-> ASCII and/or tile based graphics
+-> Turn based game play
+-> Permadeath
+-> Procedural generation of game objects (levels, items, etc)
+</p>
+
+<p>
+Examples of classic Roguelikes (excluding Rogue):
+</p>
+
+<ul class="org-ul">
+<li>Moria</li>
+<li>Angbad</li>
+<li>Hack/NetHack</li>
+<li>Dwarf Fortress (Adventure Mode)</li>
+</ul>
+
+<p>
+Some modern games that I think encapsulate the spirit
+of these classic games, while modernizing their interfaces
+and ergonomics are games such as:
+</p>
+
+<ul class="org-ul">
+<li>Caves of Qud</li>
+<li>Cogmind</li>
+<li>Riftwizard</li>
+<li>Many others, see "Traditional Roguelike" tag on Steam
+for more examples</li>
+</ul>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+So now that we've covered the definition of a Roguelike,
+lets look at a slightly different definition that's
+emergered in the last two decades or so. What many people
+call a 'Roguelite'.
+</p>
+
+<p>
+Rogue/lite/: A genre that borrows many gameplay and
+game design elements from classic Roguelikes, but
+abandons others in service to a different game design or
+direction. This is a very diverse genre, that mashes Roguelike
+mechanics with a diverse set of other genres like first person
+shooters, action RPGs, strategy games, and more.
+</p>
+
+<p>
+Modern examples of what I'd call roguelites:
+</p>
+
+<ul class="org-ul">
+<li>Dead Cells</li>
+<li>Hades</li>
+<li>Ziggurat</li>
+<li>FTL</li>
+<li>Risk of Rain / Risk of Rain 2</li>
+<li>Slay The Spire</li>
+<li>Enter The Gungeon</li>
+<li>Many many more, see the "Roguelike" tag on Steam</li>
+</ul>
+
+<p>
+Many roguelites typically include what I call a
+"inverse difficulty curve" mechanic, which I'll touch more on
+in the next section.
+</p>
+</div>
+</div>
+
+
+<div id="outline-container-orgbf270c5" class="outline-3">
+<h3 id="orgbf270c5"><span class="section-number-3">1.2</span> What Makes Roguelikes/Roguelites So Fun</h3>
+<div class="outline-text-3" id="text-1-2">
+<p>
+Note: Henceforth when I say <b>RLs</b> I mean the broader
+genre of roguelike and roguelites, unless otherwise specified.
+</p>
+
+<p>
+At a high level, I think the answer to this question (for me)
+is pretty simple. The best RLs keep one design choice at their
+center IMHO:
+</p>
+
+<p>
+–> Sufficient mastery of the games systems allows you to trivialize
+the games difficulty.
+</p>
+
+<p>
+Put another way, once you know the game well enough and have
+traversed it's skill curve, inventive and exicting synergies
+should start to emerge that you can capitalize on to absolutely
+"break" the game. The euphoria of completely dominating a game,
+by having mastered a set of "hard skills" and "abstract skills"
+is (for me) unparalleled in comparison to other video game genres.
+</p>
+
+<p>
+–> "Hard skills" can be defined as skill that's related to direct
+player input and control mastery. This is for stuff like
+dodging attacks, managing inventory, memorizing enemy moves,
+etc. Typically these are less prevalent in "classic" roguelikes
+</p>
+
+<p>
+–> "Soft skills" can be defined as mastery over the games
+systems. Things like core mechanic functionality, understanding
+how gameplay elements/effects synergize and reinforce emergent
+properties.
+ —> Eg. Your character has spell that sets themselves
+ on fire, but you have a fire resistance amulet and the floor
+ is covered in flammable oil
+</p>
+
+<p>
+We'll come back to this idea, but lets take a step back for a moment.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+Most RLs typically contain the following ingrediants at the core of
+their design:
+</p>
+
+<p>
+–> A repetative core gameplay loop, structured upon a base set of
+ design choices
+</p>
+
+<p>
+–> Some kind of core hook(s), designed to keep you engaged with
+ the repetative game loop
+</p>
+
+<p>
+This classification might on it's face seem to exclude a favorite
+RL of yours, but allow me to explain with some examples.
+</p>
+
+<p>
+The (roguelite) game Hades has a tight core gameplay loop. You
+have movement, a dash, and 3 different attacks. Enemies spawn,
+and you fight them. Layered on top, you have a number of different
+systems that start to ramp up the depth of the games systems.
+</p>
+
+<p>
+As you progress through the game, these systems start to get
+more complex and offer more choices. These systems (in Hades'
+case, the excellent story as well), define the "hooks" that
+take what is at it's core a relatively simple game, and turn
+it into something remarkable.
+</p>
+
+<p>
+To look at a more "classic" roguelike like Caves of Qud,
+the core hook is the vast set of emergent gameplay possibilties
+offered by the games core systems. Because the ingame world
+is vast and uses meticulously curated procedural generation,
+the oppertunities for making exciting game play choices are
+extremely vast, which creates a desire to continue playing
+and experimenting.
+</p>
+
+<p>
+As you spend more time in the game, you start to
+understand how your interactions with these gameplay systems
+inform other system interactions you'll have later on. After a
+sufficient amount of time engaging with these systems, you start
+to see clear (or sometimes unclear) patterns of how to maximize
+your effectiveness.
+</p>
+
+<p>
+At it's best, your time spend mastering the "hard skills" and
+"abstract skills" is rewarded by gameplay events where
+you make a fool of the games difficulty.
+</p>
+
+<p>
+Because you've developed such a deep understanding of the
+systems, you can now absolutely crush the game as a satisfying
+reward for your skill and ingenuity.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+In RLs I see two kind of distinct patterns for leading
+the player to this game breaking power fantasy.
+</p>
+
+<p>
+In modern roguelites, I typically see this being
+introduced as what I called earlier an "inverse
+difficulty curve".
+</p>
+
+<p>
+Games that implement this system will typically
+have some kind of character state that is tracked
+across runs of the core gameplay loop. Advancing
+this state makes every subsequent run easier,
+or at least presents more choices.
+</p>
+
+<p>
+An example of this is something like Enter The
+Gungeon. When you start the game, you have very
+few items unlocked, and you also don't have a
+good grasp on the "hard skills", as you just
+started playing. As you play (and fail), you
+might unlock a new gun or item every other run.
+</p>
+
+<p>
+Over time, this effect snowballs. As you get
+better at the "hard skills", so does your
+understanding of the "abstract skills",
+and you have more choices (items/spells/powerups)
+at your disposal.
+</p>
+
+<p>
+This actually has the effect of making the game
+<i>easier</i> over time, but very cleverly, and
+without changing the feel of the game that
+much. Good roguelites pace the challenge
+of the game to match this easier-over-time
+feeling.
+</p>
+
+<p>
+The culmination of this is typically "clearing"
+the dungeon/story/etc of the game for the first
+time, usually on what I'd call a "broken" run.
+</p>
+
+<p>
+A run of the core game where you've finally
+internalized the hard skills and systems
+well enough to complete a run of the game, and
+managed to do so with a spectacular set of
+gameplay decisions.
+</p>
+
+<p>
+Capitalizing on this understanding can lead you to keep
+running the game, ever searching for an even more broken run,
+where you've capitalized even further on your knowledge of
+the games systems.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+In more classic Roguelike's, that don't offer this so called
+"inverse difficulty curve", typically the carrot on the stick
+is the implicit desire to clear the game. For example in NetHack,
+to reach the lowest floor of the dungeon. But more than that,
+it's the fun of dynamically adapting to the choices the games
+systems present you.
+</p>
+
+<p>
+RLs typically use procedural generation to create what can sometimes
+feel like a slot machine. There's this intoxicating brew when starting
+a run of what kind of luck you'll have, what kind of items you'll discover,
+what kind of build will emerge based on the choices the game presents you.
+</p>
+
+<p>
+In games like Caves of Qud, I've had runs end minutes into them, due to poor
+luck, poor gameplay decisions made on my part, etc. I've also had runs where
+all of my choices happened to make sense and perfect synergies revealed themselves
+and I absolutely mopped up.
+</p>
+
+<p>
+But these are typically outliers, and not where the real joy lies IMHO.
+</p>
+
+<p>
+The best runs are those that keep you constantly guessing, on the edge
+of your seat. Forcing you to constantly reevaluate your build, the
+choices you've made so far. They force you to make difficult compromises
+between what's fun, interesting, and viable.
+</p>
+
+<p>
+They push your understanding and intuition about the games systems to
+the absolute limit, and when you overcome these challeneges, it is
+the absolute pinnacle of what video games can offer as a form of
+entertainment.
+</p>
+
+<p>
+In my opinion at least.
+</p>
+</div>
+</div>
+
+<div id="outline-container-org88b7813" class="outline-3">
+<h3 id="org88b7813"><span class="section-number-3">1.3</span> Closing Thoughts</h3>
+<div class="outline-text-3" id="text-1-3">
+<p>
+If you made it all the way here, thanks for reading, I
+know this was a longer one. I surprisingly have quite a
+bit more to say on this topic, but figured I'd maybe leave
+it for another time, as I've already coverted a lot here.
+</p>
+
+<p>
+If you already love and play lots of RLs, right on.
+</p>
+
+<p>
+If you're someone who hasn't checked them out yet, I'd
+encourage you to give them a try, there's nothing quite
+like them :)
+</p>
+
+<p>
+Thanks for reading
+</p>
+</div>
+</div>
+</div>
+</div>
+<div id="postamble" class="status">
+<p class="date">Created: 2022-01-26 Wed 15:19</p>
+</div>
+</body>
+</html>
diff --git a/2022-01-26-rogue-like-design.org b/2022-01-26-rogue-like-design.org
new file mode 100644
index 0000000..cc7ff66
--- /dev/null
+++ b/2022-01-26-rogue-like-design.org
@@ -0,0 +1,276 @@
+* Repetition and Death - The Fun of Roguelike Game Design
+
+ I love Roguelikes. It's my absolute favorite genre of video
+ games. I'd like to talk a bit about them in this blog post;
+ specifically what I believe makes them so compelling, and what keeps
+ me spending my scarce video game time in this genre.
+
+** Preamble and Rogue Primer
+
+ There seem to be several competing definitions of what
+ a 'roguelike' is. It's a topic that is frequently
+ debated by lovers of the genre and it's associtated
+ offshoots.
+
+ Skip this section if you're familiar/uninterested in the
+ Roguelike definition argument and are more interested in
+ my thoughts on what makes these games fun/interesting.
+
+ _________________________________________________________
+
+ I tend to like the following break downs:
+
+ Rogue/like/: A genre characterized by its similarity to the
+ game Rogue (1980). Rogue was originally released for Unix
+ mainframe systems.
+
+ Additionally: See the following HTTP website for
+ the "Berlin Interpretation" of what a roguelike is:
+ -> http://www.roguebasin.com/index.php/Berlin_Interpretation
+
+ The above is widely used as a yard stick to determine if
+ something is a roguelike or not, though not everyone
+ agrees on this definition.
+
+ What /I/ typically think of as a Roguelike
+ is a game with the following characteristics:
+
+ -> ASCII and/or tile based graphics
+ -> Turn based game play
+ -> Permadeath
+ -> Procedural generation of game objects (levels, items, etc)
+
+ Examples of classic Roguelikes (excluding Rogue):
+
+ - Moria
+ - Angbad
+ - Hack/NetHack
+ - Dwarf Fortress (Adventure Mode)
+
+ Some modern games that I think encapsulate the spirit
+ of these classic games, while modernizing their interfaces
+ and ergonomics are games such as:
+
+ - Caves of Qud
+ - Cogmind
+ - Riftwizard
+ - Many others, see "Traditional Roguelike" tag on Steam
+ for more examples
+
+ _________________________________________________________
+
+ So now that we've covered the definition of a Roguelike,
+ lets look at a slightly different definition that's
+ emergered in the last two decades or so. What many people
+ call a 'Roguelite'.
+
+ Rogue/lite/: A genre that borrows many gameplay and
+ game design elements from classic Roguelikes, but
+ abandons others in service to a different game design or
+ direction. This is a very diverse genre, that mashes Roguelike
+ mechanics with a diverse set of other genres like first person
+ shooters, action RPGs, strategy games, and more.
+
+ Modern examples of what I'd call roguelites:
+
+ - Dead Cells
+ - Hades
+ - Ziggurat
+ - FTL
+ - Risk of Rain / Risk of Rain 2
+ - Slay The Spire
+ - Enter The Gungeon
+ - Many many more, see the "Roguelike" tag on Steam
+
+ Many roguelites typically include what I call a
+ "inverse difficulty curve" mechanic, which I'll touch more on
+ in the next section.
+
+
+** What Makes Roguelikes/Roguelites So Fun
+
+ Note: Henceforth when I say *RLs* I mean the broader
+ genre of roguelike and roguelites, unless otherwise specified.
+
+ At a high level, I think the answer to this question (for me)
+ is pretty simple. The best RLs keep one design choice at their
+ center IMHO:
+
+ --> Sufficient mastery of the games systems allows you to trivialize
+ the games difficulty.
+
+ Put another way, once you know the game well enough and have
+ traversed it's skill curve, inventive and exicting synergies
+ should start to emerge that you can capitalize on to absolutely
+ "break" the game. The euphoria of completely dominating a game,
+ by having mastered a set of "hard skills" and "abstract skills"
+ is (for me) unparalleled in comparison to other video game genres.
+
+ --> "Hard skills" can be defined as skill that's related to direct
+ player input and control mastery. This is for stuff like
+ dodging attacks, managing inventory, memorizing enemy moves,
+ etc. Typically these are less prevalent in "classic" roguelikes
+
+ --> "Soft skills" can be defined as mastery over the games
+ systems. Things like core mechanic functionality, understanding
+ how gameplay elements/effects synergize and reinforce emergent
+ properties.
+ ---> Eg. Your character has spell that sets themselves
+ on fire, but you have a fire resistance amulet and the floor
+ is covered in flammable oil
+
+ We'll come back to this idea, but lets take a step back for a moment.
+
+ _________________________________________________________
+
+ Most RLs typically contain the following ingrediants at the core of
+ their design:
+
+ --> A repetative core gameplay loop, structured upon a base set of
+ design choices
+
+ --> Some kind of core hook(s), designed to keep you engaged with
+ the repetative game loop
+
+ This classification might on it's face seem to exclude a favorite
+ RL of yours, but allow me to explain with some examples.
+
+ The (roguelite) game Hades has a tight core gameplay loop. You
+ have movement, a dash, and 3 different attacks. Enemies spawn,
+ and you fight them. Layered on top, you have a number of different
+ systems that start to ramp up the depth of the games systems.
+
+ As you progress through the game, these systems start to get
+ more complex and offer more choices. These systems (in Hades'
+ case, the excellent story as well), define the "hooks" that
+ take what is at it's core a relatively simple game, and turn
+ it into something remarkable.
+
+ To look at a more "classic" roguelike like Caves of Qud,
+ the core hook is the vast set of emergent gameplay possibilties
+ offered by the games core systems. Because the ingame world
+ is vast and uses meticulously curated procedural generation,
+ the oppertunities for making exciting game play choices are
+ extremely vast, which creates a desire to continue playing
+ and experimenting.
+
+ As you spend more time in the game, you start to
+ understand how your interactions with these gameplay systems
+ inform other system interactions you'll have later on. After a
+ sufficient amount of time engaging with these systems, you start
+ to see clear (or sometimes unclear) patterns of how to maximize
+ your effectiveness.
+
+ At it's best, your time spend mastering the "hard skills" and
+ "abstract skills" is rewarded by gameplay events where
+ you make a fool of the games difficulty.
+
+ Because you've developed such a deep understanding of the
+ systems, you can now absolutely crush the game as a satisfying
+ reward for your skill and ingenuity.
+
+ _________________________________________________________
+
+ In RLs I see two kind of distinct patterns for leading
+ the player to this game breaking power fantasy.
+
+ In modern roguelites, I typically see this being
+ introduced as what I called earlier an "inverse
+ difficulty curve".
+
+ Games that implement this system will typically
+ have some kind of character state that is tracked
+ across runs of the core gameplay loop. Advancing
+ this state makes every subsequent run easier,
+ or at least presents more choices.
+
+ An example of this is something like Enter The
+ Gungeon. When you start the game, you have very
+ few items unlocked, and you also don't have a
+ good grasp on the "hard skills", as you just
+ started playing. As you play (and fail), you
+ might unlock a new gun or item every other run.
+
+ Over time, this effect snowballs. As you get
+ better at the "hard skills", so does your
+ understanding of the "abstract skills",
+ and you have more choices (items/spells/powerups)
+ at your disposal.
+
+ This actually has the effect of making the game
+ /easier/ over time, but very cleverly, and
+ without changing the feel of the game that
+ much. Good roguelites pace the challenge
+ of the game to match this easier-over-time
+ feeling.
+
+ The culmination of this is typically "clearing"
+ the dungeon/story/etc of the game for the first
+ time, usually on what I'd call a "broken" run.
+
+ A run of the core game where you've finally
+ internalized the hard skills and systems
+ well enough to complete a run of the game, and
+ managed to do so with a spectacular set of
+ gameplay decisions.
+
+ Capitalizing on this understanding can lead you to keep
+ running the game, ever searching for an even more broken run,
+ where you've capitalized even further on your knowledge of
+ the games systems.
+
+ _________________________________________________________
+
+ In more classic Roguelike's, that don't offer this so called
+ "inverse difficulty curve", typically the carrot on the stick
+ is the implicit desire to clear the game. For example in NetHack,
+ to reach the lowest floor of the dungeon. But more than that,
+ it's the fun of dynamically adapting to the choices the games
+ systems present you.
+
+ RLs typically use procedural generation to create what can sometimes
+ feel like a slot machine. There's this intoxicating brew when starting
+ a run of what kind of luck you'll have, what kind of items you'll discover,
+ what kind of build will emerge based on the choices the game presents you.
+
+ In games like Caves of Qud, I've had runs end minutes into them, due to poor
+ luck, poor gameplay decisions made on my part, etc. I've also had runs where
+ all of my choices happened to make sense and perfect synergies revealed themselves
+ and I absolutely mopped up.
+
+ But these are typically outliers, and not where the real joy lies IMHO.
+
+ The best runs are those that keep you constantly guessing, on the edge
+ of your seat. Forcing you to constantly reevaluate your build, the
+ choices you've made so far. They force you to make difficult compromises
+ between what's fun, interesting, and viable.
+
+ They push your understanding and intuition about the games systems to
+ the absolute limit, and when you overcome these challeneges, it is
+ the absolute pinnacle of what video games can offer as a form of
+ entertainment.
+
+ In my opinion at least.
+
+** Closing Thoughts
+
+ If you made it all the way here, thanks for reading, I
+ know this was a longer one. I surprisingly have quite a
+ bit more to say on this topic, but figured I'd maybe leave
+ it for another time, as I've already coverted a lot here.
+
+ If you already love and play lots of RLs, right on.
+
+ If you're someone who hasn't checked them out yet, I'd
+ encourage you to give them a try, there's nothing quite
+ like them :)
+
+ Thanks for reading
+
+
+
+
+
+
+
+
diff --git a/2022-01-26-rogue-like-design.pretty.html b/2022-01-26-rogue-like-design.pretty.html
new file mode 100644
index 0000000..8562cfc
--- /dev/null
+++ b/2022-01-26-rogue-like-design.pretty.html
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<!-- 2022-01-26 Wed 15:19 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title></title>
+<meta name="generator" content="Org mode" />
+<style type="text/css">body{margin:40px
+auto;max-width:900px;line-height:1.6;font-size:18px;color:#444;padding:0
+10px}h1,h2,h3{line-height:1.2}</style>
+<script type="text/javascript">
+// @license magnet:?xt=urn:btih:e95b018ef3580986a04669f1b5879592219e2a7a&dn=public-domain.txt Public Domain
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(null != target) {
+ elem.classList.add("code-highlighted");
+ target.classList.add("code-highlighted");
+ }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(null != target) {
+ elem.classList.remove("code-highlighted");
+ target.classList.remove("code-highlighted");
+ }
+ }
+ /*]]>*///-->
+// @license-end
+</script>
+</head>
+<body>
+<div id="content">
+<div id="table-of-contents">
+<h2>Table of Contents</h2>
+<div id="text-table-of-contents">
+<ul>
+<li><a href="#orgbdbcc61">1. Repetition and Death - The Fun of Roguelike Game Design</a>
+<ul>
+<li><a href="#org5a55300">1.1. Preamble and Rogue Primer</a></li>
+<li><a href="#orgbf270c5">1.2. What Makes Roguelikes/Roguelites So Fun</a></li>
+<li><a href="#org88b7813">1.3. Closing Thoughts</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="outline-container-orgbdbcc61" class="outline-2">
+<h2 id="orgbdbcc61"><span class="section-number-2">1</span> Repetition and Death - The Fun of Roguelike Game Design</h2>
+<div class="outline-text-2" id="text-1">
+<p>
+I love Roguelikes. It's my absolute favorite genre of video
+games. I'd like to talk a bit about them in this blog post;
+specifically what I believe makes them so compelling, and what keeps
+me spending my scarce video game time in this genre.
+</p>
+</div>
+
+<div id="outline-container-org5a55300" class="outline-3">
+<h3 id="org5a55300"><span class="section-number-3">1.1</span> Preamble and Rogue Primer</h3>
+<div class="outline-text-3" id="text-1-1">
+<p>
+There seem to be several competing definitions of what
+a 'roguelike' is. It's a topic that is frequently
+debated by lovers of the genre and it's associtated
+offshoots.
+</p>
+
+<p>
+Skip this section if you're familiar/uninterested in the
+Roguelike definition argument and are more interested in
+my thoughts on what makes these games fun/interesting.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+I tend to like the following break downs:
+</p>
+
+<p>
+Rogue/like/: A genre characterized by its similarity to the
+game Rogue (1980). Rogue was originally released for Unix
+mainframe systems.
+</p>
+
+<p>
+Additionally: See the following HTTP website for
+the "Berlin Interpretation" of what a roguelike is:
+-> <a href="http://www.roguebasin.com/index.php/Berlin_Interpretation">http://www.roguebasin.com/index.php/Berlin_Interpretation</a>
+</p>
+
+<p>
+The above is widely used as a yard stick to determine if
+something is a roguelike or not, though not everyone
+agrees on this definition.
+</p>
+
+<p>
+What <i>I</i> typically think of as a Roguelike
+is a game with the following characteristics:
+</p>
+
+<p>
+-> ASCII and/or tile based graphics</br>
+-> Turn based game play</br>
+-> Permadeath</br>
+-> Procedural generation of game objects (levels, items, etc)</br>
+</p>
+
+<p>
+Examples of classic Roguelikes (excluding Rogue):
+</p>
+
+<ul class="org-ul">
+<li>Moria</li>
+<li>Angbad</li>
+<li>Hack/NetHack</li>
+<li>Dwarf Fortress (Adventure Mode)</li>
+</ul>
+
+<p>
+Some modern games that I think encapsulate the spirit
+of these classic games, while modernizing their interfaces
+and ergonomics are games such as:
+</p>
+
+<ul class="org-ul">
+<li>Caves of Qud</li>
+<li>Cogmind</li>
+<li>Riftwizard</li>
+<li>Many others, see "Traditional Roguelike" tag on Steam
+for more examples</li>
+</ul>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+So now that we've covered the definition of a Roguelike,
+lets look at a slightly different definition that's
+emergered in the last two decades or so. What many people
+call a 'Roguelite'.
+</p>
+
+<p>
+Rogue/lite/: A genre that borrows many gameplay and
+game design elements from classic Roguelikes, but
+abandons others in service to a different game design or
+direction. This is a very diverse genre, that mashes Roguelike
+mechanics with a diverse set of other genres like first person
+shooters, action RPGs, strategy games, and more.
+</p>
+
+<p>
+Modern examples of what I'd call roguelites:
+</p>
+
+<ul class="org-ul">
+<li>Dead Cells</li>
+<li>Hades</li>
+<li>Ziggurat</li>
+<li>FTL</li>
+<li>Risk of Rain / Risk of Rain 2</li>
+<li>Slay The Spire</li>
+<li>Enter The Gungeon</li>
+<li>Many many more, see the "Roguelike" tag on Steam</li>
+</ul>
+
+<p>
+Many roguelites typically include what I call a
+"inverse difficulty curve" mechanic, which I'll touch more on
+in the next section.
+</p>
+</div>
+</div>
+
+
+<div id="outline-container-orgbf270c5" class="outline-3">
+<h3 id="orgbf270c5"><span class="section-number-3">1.2</span> What Makes Roguelikes/Roguelites So Fun</h3>
+<div class="outline-text-3" id="text-1-2">
+<p>
+Note: Henceforth when I say <b>RLs</b> I mean the broader
+genre of roguelike and roguelites, unless otherwise specified.
+</p>
+
+<p>
+At a high level, I think the answer to this question (for me)
+is pretty simple. The best RLs keep one design choice at their
+center IMHO:
+</p>
+
+<p>
+–> Sufficient mastery of the games systems allows you to trivialize
+the games difficulty.
+</p>
+
+<p>
+Put another way, once you know the game well enough and have
+traversed it's skill curve, inventive and exicting synergies
+should start to emerge that you can capitalize on to absolutely
+"break" the game. The euphoria of completely dominating a game,
+by having mastered a set of "hard skills" and "abstract skills"
+is (for me) unparalleled in comparison to other video game genres.
+</p>
+
+<p>
+–> "Hard skills" can be defined as skill that's related to direct
+player input and control mastery. This is for stuff like
+dodging attacks, managing inventory, memorizing enemy moves,
+etc. Typically these are less prevalent in "classic" roguelikes
+</p>
+
+<p>
+–> "Soft skills" can be defined as mastery over the games
+systems. Things like core mechanic functionality, understanding
+how gameplay elements/effects synergize and reinforce emergent
+properties.</br>
+ —> Eg. Your character has spell that sets themselves
+ on fire, but you have a fire resistance amulet and the floor
+ is covered in flammable oil
+</p>
+
+<p>
+We'll come back to this idea, but lets take a step back for a moment.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+Most RLs typically contain the following ingrediants at the core of
+their design:
+</p>
+
+<p>
+–> A repetative core gameplay loop, structured upon a base set of
+ design choices
+</p>
+
+<p>
+–> Some kind of core hook(s), designed to keep you engaged with
+ the repetative game loop
+</p>
+
+<p>
+This classification might on it's face seem to exclude a favorite
+RL of yours, but allow me to explain with some examples.
+</p>
+
+<p>
+The (roguelite) game Hades has a tight core gameplay loop. You
+have movement, a dash, and 3 different attacks. Enemies spawn,
+and you fight them. Layered on top, you have a number of different
+systems that start to ramp up the depth of the games systems.
+</p>
+
+<p>
+As you progress through the game, these systems start to get
+more complex and offer more choices. These systems (in Hades'
+case, the excellent story as well), define the "hooks" that
+take what is at it's core a relatively simple game, and turn
+it into something remarkable.
+</p>
+
+<p>
+To look at a more "classic" roguelike like Caves of Qud,
+the core hook is the vast set of emergent gameplay possibilties
+offered by the games core systems. Because the ingame world
+is vast and uses meticulously curated procedural generation,
+the oppertunities for making exciting game play choices are
+extremely vast, which creates a desire to continue playing
+and experimenting.
+</p>
+
+<p>
+As you spend more time in the game, you start to
+understand how your interactions with these gameplay systems
+inform other system interactions you'll have later on. After a
+sufficient amount of time engaging with these systems, you start
+to see clear (or sometimes unclear) patterns of how to maximize
+your effectiveness.
+</p>
+
+<p>
+At it's best, your time spend mastering the "hard skills" and
+"abstract skills" is rewarded by gameplay events where
+you make a fool of the games difficulty.
+</p>
+
+<p>
+Because you've developed such a deep understanding of the
+systems, you can now absolutely crush the game as a satisfying
+reward for your skill and ingenuity.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+In RLs I see two kind of distinct patterns for leading
+the player to this game breaking power fantasy.
+</p>
+
+<p>
+In modern roguelites, I typically see this being
+introduced as what I called earlier an "inverse
+difficulty curve".
+</p>
+
+<p>
+Games that implement this system will typically
+have some kind of character state that is tracked
+across runs of the core gameplay loop. Advancing
+this state makes every subsequent run easier,
+or at least presents more choices.
+</p>
+
+<p>
+An example of this is something like Enter The
+Gungeon. When you start the game, you have very
+few items unlocked, and you also don't have a
+good grasp on the "hard skills", as you just
+started playing. As you play (and fail), you
+might unlock a new gun or item every other run.
+</p>
+
+<p>
+Over time, this effect snowballs. As you get
+better at the "hard skills", so does your
+understanding of the "abstract skills",
+and you have more choices (items/spells/powerups)
+at your disposal.
+</p>
+
+<p>
+This actually has the effect of making the game
+<i>easier</i> over time, but very cleverly, and
+without changing the feel of the game that
+much. Good roguelites pace the challenge
+of the game to match this easier-over-time
+feeling.
+</p>
+
+<p>
+The culmination of this is typically "clearing"
+the dungeon/story/etc of the game for the first
+time, usually on what I'd call a "broken" run.
+</p>
+
+<p>
+A run of the core game where you've finally
+internalized the hard skills and systems
+well enough to complete a run of the game, and
+managed to do so with a spectacular set of
+gameplay decisions.
+</p>
+
+<p>
+Capitalizing on this understanding can lead you to keep
+running the game, ever searching for an even more broken run,
+where you've capitalized even further on your knowledge of
+the games systems.
+</p>
+
+<p>
+<span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline"><span class="underline">_</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
+</p>
+
+<p>
+In more classic Roguelike's, that don't offer this so called
+"inverse difficulty curve", typically the carrot on the stick
+is the implicit desire to clear the game. For example in NetHack,
+to reach the lowest floor of the dungeon. But more than that,
+it's the fun of dynamically adapting to the choices the games
+systems present you.
+</p>
+
+<p>
+RLs typically use procedural generation to create what can sometimes
+feel like a slot machine. There's this intoxicating brew when starting
+a run of what kind of luck you'll have, what kind of items you'll discover,
+what kind of build will emerge based on the choices the game presents you.
+</p>
+
+<p>
+In games like Caves of Qud, I've had runs end minutes into them, due to poor
+luck, poor gameplay decisions made on my part, etc. I've also had runs where
+all of my choices happened to make sense and perfect synergies revealed themselves
+and I absolutely mopped up.
+</p>
+
+<p>
+But these are typically outliers, and not where the real joy lies IMHO.
+</p>
+
+<p>
+The best runs are those that keep you constantly guessing, on the edge
+of your seat. Forcing you to constantly reevaluate your build, the
+choices you've made so far. They force you to make difficult compromises
+between what's fun, interesting, and viable.
+</p>
+
+<p>
+They push your understanding and intuition about the games systems to
+the absolute limit, and when you overcome these challeneges, it is
+the absolute pinnacle of what video games can offer as a form of
+entertainment.
+</p>
+
+<p>
+In my opinion at least.
+</p>
+</div>
+</div>
+
+<div id="outline-container-org88b7813" class="outline-3">
+<h3 id="org88b7813"><span class="section-number-3">1.3</span> Closing Thoughts</h3>
+<div class="outline-text-3" id="text-1-3">
+<p>
+If you made it all the way here, thanks for reading, I
+know this was a longer one. I surprisingly have quite a
+bit more to say on this topic, but figured I'd maybe leave
+it for another time, as I've already coverted a lot here.
+</p>
+
+<p>
+If you already love and play lots of RLs, right on.
+</p>
+
+<p>
+If you're someone who hasn't checked them out yet, I'd
+encourage you to give them a try, there's nothing quite
+like them :)
+</p>
+
+<p>
+Thanks for reading
+</p>
+</div>
+</div>
+</div>
+</div>
+<div id="postamble" class="status">
+<p class="date">Created: 2022-01-26 Wed 15:19</p>
+</div>
+</body>
+</html>