1
Fork 0

Continue working on gaming post

This commit is contained in:
prescientmoon 2024-11-01 04:36:46 +01:00
parent 72aa525d77
commit 363ea62983
Signed by: prescientmoon
SSH key fingerprint: SHA256:WFp/cO76nbarETAoQcQXuV+0h7XJsEsOCI0UsyPIy6U
21 changed files with 280 additions and 13 deletions

View file

@ -1,3 +1,4 @@
{ role=config }
``` =toml
created-at = "2024-10-31T15:28:OO"
```

View file

@ -1 +0,0 @@
# My game tier list

Binary file not shown.

After

(image error) Size: 498 KiB

Binary file not shown.

After

(image error) Size: 32 KiB

Binary file not shown.

After

(image error) Size: 251 KiB

Binary file not shown.

After

(image error) Size: 101 KiB

Binary file not shown.

After

(image error) Size: 1.7 MiB

Binary file not shown.

After

(image error) Size: 422 KiB

Binary file not shown.

After

(image error) Size: 424 KiB

Binary file not shown.

After

(image error) Size: 86 KiB

Binary file not shown.

After

(image error) Size: 31 KiB

Binary file not shown.

After

(image error) Size: 11 KiB

Binary file not shown.

After

(image error) Size: 202 KiB

Binary file not shown.

After

(image error) Size: 117 KiB

Binary file not shown.

After

(image error) Size: 121 KiB

Binary file not shown.

After

(image error) Size: 54 KiB

View file

@ -0,0 +1,142 @@
[home](/)
# Games I like
{ role="tier-list" }
``` =yaml
- name: Beyond
id: beyond
elements:
- alt: Arcaea
id: arcaea
image: arcaea.png
- alt: Factorio
id: factorio
image: factorio.png
- alt: Rain world
id: rainworld
image: rainworld.png
- alt: Noita
id: noita
image: noita.png
```
``` =html
<div class="tier-list">
<div class="tier">
<a href="#beyond" class="tier-heading">
<div class="tier-heading-text">
Beyond
</div>
</a>
<div class="tier-elements">
<a href="#arcaea"><img src="icons/arcaea.png" /></a>
<a href="#noita"><img src="icons/noita.png" /></a>
<a href="#rainworld"><img src="icons/rainworld.png" /></a>
<a href="#factorio"><img src="icons/factorio.png" /></a>
</div>
</div>
<div class="tier">
<a href="#masterpiece" class="tier-heading">
<div class="tier-heading-text">
Masterpiece
</div>
</a>
<div class="tier-elements">
<a href="#tunic"><img src="icons/tunic.ico" /></a>
<a href="#ultrakill"><img src="icons/ultrakill.png" /></a>
<a href="#talos"><img src="icons/thetalosprinciple.jpg" /></a>
</div>
</div>
<div class="tier">
<a href="#amazing" class="tier-heading">
<div class="tier-heading-text">
Amazing
</div>
</a>
<div class="tier-elements">
<a href="#celeste"><img src="icons/celeste.png" /></a>
<a href="#downpour"><img src="icons/downpour.jpg" /></a>
<a href="#hollow-knight"><img src="icons/hollow-knight.png" /></a>
<a href="#slay-the-spire"><img src="icons/slaythespire.png" /></a>
<a href="#hades"><img src="icons/hades.ico" /></a>
<a href="#portal2"><img src="icons/portal2.png" /></a>
<a href="#baba"><img src="icons/babaisyou.png" /></a>
</div>
</div>
<div class="tier">
<div class="tier-heading">
<div class="tier-heading-text">
Very fun
</div>
</div>
</div>
<div class="tier">
<div class="tier-heading">
<div class="tier-heading-text">
Fun
</div>
</div>
</div>
<div class="tier">
<div class="tier-heading">
<div class="tier-heading-text">
Decent
</div>
</div>
</div>
<div class="tier">
<div class="tier-heading">
<div class="tier-heading-text">
Meh
</div>
</div>
</div>
<div class="tier">
<div class="tier-heading">
<div class="tier-heading-text">
Childhood
</div>
</div>
</div>
</div>
```
{ #beyond }
## Beyond
This tier contains games that have truly done something special. Games that are not only amazing from every angle, but which managed to repeatedly taken over my imagination, thoughts and dreams, refusing to let go.
Each game in this tier deserves it's own article, but for now, a short description of what each of them does so well will have to do.
{ #factorio }
### Factorio
If you're reading the scribbles I left in this forgotten cave, you're probably aware of what [Factorio](https://factorio.com/) is all about. Factorio is an amazing automation game about building, well, a factory. This game managed to spawn an entire flourishing genre — and for good reason. Subjective in nature as this list might be, were I to pick a best game in the objective sense, Factorio would have to be my choice. Factorio is the one game that managed to climb into this tier by what feels like quality alone.
Factorio's ability to simulate gigantic bases on pretty much any old laptop is a technical marvel. In an age where [Hollow Knight](#hollow-knight) struggles to run a pre-rendered cutscene at more than 1 frame / second on my laptop (I am not kidding, this is not a hyperbole. I had to search the cutscenes for that game on YouTube, half a decade after it's release....), the developers have done an amazing job at not only optimizing the living soul out of this game, but decided to then follow in Dante's footsteps throughout the circles of hell, only to optimize the (now dead) soul of this game even futher. Ok, I have no idea where I was going with that. The game is fast, which is super cool.
The gameplay is very polished, and infinitely replayable. There's not much I can do to explain that without... writing a giant essay about every single mechanic Factorio has to offer. Again, there's a reason Factorio managed to spawn an entire genre — be it the core belt logistics made all the more interesting by each belt being split into two independent lanes, the majestic interlocking systems trains enable, the explosive automation that would seem absurd without the existence of bots, the super fun circuit system (I have on multiple occasions started working on programming languages meant to compile to Factorio combinators, and I am not even close to the first, nor the only one) — these mechanics come together to build an amazing environment. I haven't even mentioned the military side of the game, nor any of the features added by the amazing recent expansion. There's also official modding support, with mods downloadable directly from the in-game menu (no laggy steam workshop support involved). There's at least a dozen quality overhaul mods which turn Factorio's campaign into something completely different. Just... go and play it.
Some people might be put off by the 35$ (70$ with the expansion) price for an indie game which, by principle, has never been on sale (in fact, the price of the game increases periodically to keep up with inflation). Having played the game, I've started to appreciate this stance. It might not be the best for me in terms of money spent, but it shows that the developers believe their game is actually worth the price they ask for. I love the [The Talos Principle](#talos), and while the base price for that game is technically around 30$, it sure doesn't feel the game is worth that much when every few months, you can buy it for under 3$ during one of the various Steam sales. I don't think this point is worth circling too long around. The game has a demo you can try for free, not to mention that uhhh, you can always pirate the game, you know? — that's what I originally did when I was a poor high school student.
The developers have a (at times weekly) [blog](https://www.factorio.com/blog/) where they discuss a range set of topics, from technical details about belt optimizations, to an entire year worth of hype that railed the community together on a weekly basis before the release of the Space Age expansion. This is incredibly cool, and I wish more developers would put up similar things.
{ #arcaea }
## Arcaea
I love rhythm games, and in my humble opinion, [Arcaea](https://arcaea.lowiro.com/) is one of the best ones out there. I'm working on a huge article covering this game extensively, so for now this placeholder paragraph will have to do.
{ #masterpiece }
## Masterpiece
This tier contains games that are truly special, although haven't implanted themselves in my head for as long (nor as deeply) as the games in the previous tier.
{ #ultrakill }
### Ultrakill
Ultrakill is a game all about doing cool shit. There's so many instances where you think "wait, wouldn't it be awesome if I could ...", you try it, only for it to exceed your expectations. I don't play first person shooters, yet I've had a very good time ultrakilling demons.
After each level, the game rates you on three axes: kills, time, and style. Improving until you can chain together stylish combos in order to P-rank (i.e. perfect) a hard level is super fun. Ultrakill has some of my favourite boss fights in all of gaming, all to the tune of a soundtrack that goes incredibly hard.
The game has some technical issues (it often forgets the resolution you configure in the settings after alt-tabbing around, but this seems to be an issue a lot of Unity games have, so I'll add it to the ever-growing list of justicications for me hating engines). The community seems to be a bit predisposed to spoiling people on gameplay elements, so if you want to go in blind, I recommend staying away from any kind of content related to the game.

View file

@ -17,6 +17,19 @@ ol {
padding-left: 1rem;
}
h1,
h2,
h3,
h4,
h5,
h6 {
a {
display: inline-block;
text-decoration: none;
transform: translateY(-2px);
}
}
/* {{{ Asides*/
.aside {
margin: 1.5rem 0;
@ -83,3 +96,102 @@ img.aside-icon {
}
/* }}}*/
.tier-list {
background: #444;
display: flex;
flex-direction: column;
padding: calc(3 * var(--spacing));
box-sizing: border-box;
--spacing: 0.75px;
.tier:not(:last-child) {
border-bottom: 1px solid #000;
}
.tier {
display: flex;
flex-direction: row;
justify-items: center;
.tier-elements {
display: flex;
flex-wrap: wrap;
a > img,
a {
height: 3rem;
}
}
.tier-heading,
a {
margin: var(--spacing);
}
.tier-heading {
width: 6rem;
min-width: 6rem;
min-height: 3rem;
margin: var(--spacing);
color: unset;
text-decoration: none;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
.tier-heading-text {
padding: 0 0.5rem;
font-size: 1em;
}
}
}
/* {{{ Tier colors*/
.tier:nth-child(1) > .tier-heading {
background: #b39ddb;
}
.tier:nth-child(2) > .tier-heading {
background: #d7bde2;
}
.tier:nth-child(3) > .tier-heading {
background: #e6b0b8;
}
.tier:nth-child(4) > .tier-heading {
background: #f4c2c2;
}
.tier:nth-child(5) > .tier-heading {
background: #dce8a7;
}
.tier:nth-child(6) > .tier-heading {
background: #b5ead7;
}
.tier:nth-child(7) > .tier-heading {
background: #a2d5ab;
}
.tier:nth-child(8) > .tier-heading {
background: linear-gradient(
45deg,
#ffb3ba,
#ffdfba,
#ffffba,
#baffc9,
#bae1ff,
#b3baff,
#e2baff
);
}
/* }}}*/
}

View file

@ -335,6 +335,11 @@ impl<'s> Writer<'s> {
}
match &c {
Container::Heading { id, .. } => {
out.write_str(r##"<a href="#"##)?;
write_attr(id, &mut out)?;
out.write_str(r#"">◇</a> "#)?;
}
Container::Image(..) => {
self.states.push(State::TextOnly);
}

View file

@ -59,16 +59,19 @@ fn generate_page(path: &Path) -> anyhow::Result<()> {
fn generate_dir(path: &Path) -> anyhow::Result<()> {
let content_path = PathBuf::from_str("content")?.join(path);
let out_path = PathBuf::from_str("dist")?.join(path);
fs::create_dir_all(out_path)
fs::create_dir_all(&out_path)
.with_context(|| format!("Could not generate directory {path:?}"))?;
for file in fs::read_dir(content_path)? {
for file in fs::read_dir(&content_path)? {
let file_path = file?.path();
let path = path.join(file_path.file_name().unwrap());
let filename = file_path.file_name().unwrap();
let path = path.join(filename);
if file_path.is_dir() {
generate_dir(&path)?;
} else {
} else if file_path.extension().map_or(false, |ext| ext == "dj") {
generate_page(&path)?;
} else {
fs::copy(content_path.join(filename), out_path.join(filename))?;
}
}

View file

@ -105,19 +105,24 @@ impl<'s> Writer<'s> {
assert_eq!(self.state, State::Heading);
self.state = State::Toplevel;
}
Event::Start(Container::RawBlock { format: "toml" }, _) => {
Event::Start(Container::RawBlock { format: "toml" }, attrs) => {
assert_eq!(self.state, State::Toplevel);
self.state = State::Toml
if let Some(role_attr) = attrs.get_value("role") {
if format!("{}", role_attr) == "config" {
self.state = State::Toml
}
}
}
Event::End(Container::RawBlock { format: "toml" }) => {
assert_eq!(self.state, State::Toml);
self.state = State::Toplevel;
if self.state == State::Toml {
self.state = State::Toplevel;
let config: PageConfig = toml::from_str(&self.toml_text)
.with_context(|| "Failed to parse page config in TOML format")?;
self.config.merge(config)?;
let config: PageConfig = toml::from_str(&self.toml_text)
.with_context(|| "Failed to parse page config in TOML format")?;
self.config.merge(config)?;
self.toml_text.clear();
self.toml_text.clear();
}
}
Event::Str(str) if self.state == State::Toml => {
self.toml_text.write_str(str)?;