diff --git a/postCollection.go b/postCollection.go index 8c8c4f4..85c3323 100644 --- a/postCollection.go +++ b/postCollection.go @@ -24,7 +24,7 @@ const htmlDateLayout = "2006-01-02" const normalDateLayout = "02 Jan 2006" var modTime time.Time -var postsCollection []Post +var PostsCollection []Post func NewPostsCollection() { verifyFolderModification() @@ -33,14 +33,16 @@ func NewPostsCollection() { } func initializeCollection() { - postsCollection = nil + PostsCollection = nil filepath.Walk("./posts", newPost) + PostsCollection = reversePosts() } func acquirePosts(duration time.Duration) { for { if verifyFolderModification() == true { initializeCollection() + PostsCollection = reversePosts() } time.Sleep(duration * time.Second) } @@ -88,7 +90,7 @@ func newPost(path string, f os.FileInfo, err error) error { template.HTML(string(content[:len(content)])), } - postsCollection = insertPostAccordingToDate(p, postsCollection) + PostsCollection = insertPostAccordingToDate(p, PostsCollection) return nil } @@ -115,17 +117,26 @@ func getDate(n *html.Node) time.Time { return t } +func reversePosts() []Post { + length := len(PostsCollection) + s := make([]Post, length) + for i := 0; i < length; i++ { + s[i] = PostsCollection[length-(i+1)] + } + return s +} + func getNewestPosts(numberOfPosts int) []Post { var posts []Post - l := len(postsCollection) + l := len(PostsCollection) for i := l - 1; i >= l-numberOfPosts; i-- { - posts = append(posts, postsCollection[i]) + posts = append(posts, PostsCollection[i]) } return posts } func getPostByURLTitle(title string) Post { - for _, post := range postsCollection { + for _, post := range PostsCollection { if post.URLTitle == title { return post } @@ -143,6 +154,6 @@ func insertPostAccordingToDate(post Post, arr []Post) []Post { return s } } - postsCollection = append(postsCollection, post) - return postsCollection + PostsCollection = append(PostsCollection, post) + return PostsCollection } diff --git a/posts/Dr. Advanced Wargroove: Orcs and Humans b/posts/Dr. Advanced Wargroove: Orcs and Humans new file mode 100644 index 0000000..8b76d44 --- /dev/null +++ b/posts/Dr. Advanced Wargroove: Orcs and Humans @@ -0,0 +1,13 @@ + + +

Two days ago, this trailer was released for Wargroove, a new turn-based strategy game for Switch (and other platforms, but whatever). I, like so many others, lost my shit, since it looks incredibly good and I am fucking starved for more Advance Wars. And, let's not kid ourselves: Wargroove is Advance Wars in everything by name, according to the trailer.

+

Yet, being okay with this, made me wonder

+
+

Why the fuck am I okay with this being a complete rip-off?

+
+

It might be a bit harsh, but I think the developers can handle it. They're making a fantastic looking game that everyone will love. My question above, is really: Why is it sometimes okay to be a blatant rip-off, and sometimes the worst thing ever? Oceanhorn is obviously a rip-off of Zelda, but in that case it makes me go "yuck!".

+

There might be several factors, including randomness. Sometimes effort shines through. The original real-time strategy game was Dune 2 and being the first, invented a new game genre. Yet for some reason, two years passed before Blizzard released Warcraft: Orcs and Humans, which, by definition almost, had to be considered a rip-off. What probably made a lot of people forgive W1, was that in that age, being a rip-off took a huge amount of effort, and W1 is such a better experience to play, that there almost isn't even a comparison to make.

+

Tile-matching puzzle games too, are a genre rife with rip-offs, and yet some titles are totally forgiven. Dr. Mario shares a playing-field setting with Tetris, but the mechanics of playing it and the aesthetics make it quite different, and saying it was Tetris-like seems like more of a description short-hand than a criticism. Puyo Puyo built on the Dr. Mario mechanics, and based the success of Street Fighter 2, decided the correct way to differentiate itself, was to as visually appealing as SF2, but with the gameplay of Dr. Mario. It's been so popular over the years, that games seem to have to show how they're not just Puyo Puyo rip-offs, even though that itself isn't even that original.

+

Trying to figure out where some game draws its inspirations form can also lead to embarrassment. Raining Blobs by... Raining Blobs (Really?), initially made me think of it as yet another Puyo Puyo, but speaking to the creator, I became aware of Pnickies, the far less known Compile (creator of Puyo Puyo) game that Raining Blobs had gotten its mechanics from. Suddenly social situations became a factor in the idea of when something is a rip-off: Some games are hard or impossible to play in certain parts of the world, and Compile were never good at getting their games to the Balkans. If Raining Blobs (the creators, not the game) wanted that sort of gameplay as Puyo Puyo or Pnickies might have, making it themselves was a decent course of action. Raining Blobs (the game, not the creator) by the way, is really good. Like, amazingly tight and stuffed with content and kawaii shoujo.

+

So Wargroove? I want it to be the Fantasy Wars to Advance Wars, that Warcraft: Orcs and Humans was to Dune 2. Even if it isn't though, I guess I don't care in this case. It looks great, and Intelligent Systems sure aren't fulfilling my needs right now.

+ diff --git a/posts/March Exam Break b/posts/March Exam Break new file mode 100644 index 0000000..b1ca9af --- /dev/null +++ b/posts/March Exam Break @@ -0,0 +1,3 @@ + + +

I'm going on a short blogging break till later in March (around the 22nd) due to exams. There'll still be a recap tomorrow. For today, let's just enjoy this brilliant analysis by Mark Brown, whom you can always count on for insightful thoughts on video games.

diff --git a/posts/Zerudo no CM b/posts/Zerudo no CM new file mode 100644 index 0000000..f49358e --- /dev/null +++ b/posts/Zerudo no CM @@ -0,0 +1,9 @@ + + +

#Zeruda no CM

+

Being admittedly quite hyped for Breath of the Wild on friday, I thought I'd watch_ all of the Japanese Zelda commercials_.

+

I probably didn't quite manage that though, since there are close to a hundred billion, but I saw at least like... ten. Talking about them is probably more marketing talk than game design, but it's still fun to think about what the commercial makers have been trying to convey. The old commercials could be super campy, like the NES, GB and SNES games, with plenty of over-acting actors and curiously specific references (Compare to Link's Awakening).

+

Another running motif, is to use cute girls to play the game in relaxing manners (Like Shokotan of Pokémon fame and Gogo Yubari!). This is pretty common for Nintendo games (and games in general, I guess). This long one for Phantom Hourglass is quite endearing, and, really, a bit brave, since it's so slow moving.

+

My favorite was the one I've used as a header image, for the Wii U hd remake of Wind Waker. It seems to play on the nostalgia that Wind Waker is bound to carry by now, but it's also really refreshing to see the commercial simply say "This game has some amazingly cute characters and great designs, and really, it it brings the world to life".

+

Sometimes weird stuff happens. The Ocarina of Time commercials exist in two versions: One showcasing a girl playing the game, one with a boy. Later on though it seems, since the games sold a lot, new ones were released only showing the fucking ending and final battle. Such an odd choice.

+

The commercials in Japan for Breath of the Wild have so far been a bit uninteresting, although quite useful from a consumer point of view: They show the game. I can't help hoping for some more weird stuff. So hyped for friday.

diff --git a/websiteTemplate.go b/websiteTemplate.go index d7c6319..610062d 100644 --- a/websiteTemplate.go +++ b/websiteTemplate.go @@ -29,6 +29,7 @@ func main() { http.HandleFunc("/contact/", contactHandler) http.HandleFunc("/post/", postHandler) http.HandleFunc("/", blogHandler) + posts = PostsCollection[:] if os.Args[1] == "local" { http.ListenAndServe(":8080", nil) @@ -52,9 +53,12 @@ func blogHandler(w http.ResponseWriter, req *http.Request) { errorHandler(w, req, http.StatusNotFound) return } - posts = getNewestPosts(3) + length := len(posts) + posts = posts[:3] + //posts = getNewestPosts(3) page := Page{name, posts, "blog"} renderTemplates(w, page) + posts = posts[:length] } func postHandler(w http.ResponseWriter, r *http.Request) {