Sunday, October 18, 2020

Bloom Into You

And Yuu/Tainted my entire world

There's something about the central relationship in Bloom Into You that I can't quite gel with. It's frustrating, because otherwise it's completely up my anime alley: a high school romance with a large dose of emotional turmoil and self-examination.

Spoilers follow.

Yuu, a high school freshman, has never fallen in love. She suspects she never will. When she meets Touko, an upperclassman with a similar attitude, they become friends, bonding over this shared aromatic outlook – until Touka confesses that she's fallen for Yuu.

Normally this would result in a fairly rapid reciprocation (and, depending on the decade, a bunch of angsty reflection on the part of Yuu), but here she just kinda… goes along with it?

She doesn't pretend to have feelings for Touka, and tells her as much, but she's willing to put her own discomfort completely aside to indulge the (at times frightening) emotional storm that Touka is going through.

There've been quite a lot of shows recently which have this kind of one-sided romantic interest, and there's even a tendency for the characters to explicitly state as much. Both Re:Zero and OreGairu's protagonists admit to themselves and others that their actions are driven by their feelings for the female lead, but that they are willing to disregard (or in some cases run roughshod) over her wishes in order to prove the strength of their affections.

It's pretty baffling, and more than a little alarming, that these monomaniacs are so commonly commended by these shows.

Where Bloom departs from this mould, is how we're allowed into the thoughts of the recipient of the fixation – but rather than fixing the problem, it somehow makes it worse.

It's disappointing that Yuu doesn't value herself, her time or her feelings enough to push back against the unreasonable demands Touka is putting on her. Yuu spends a not-insignificant amount of time wondering how to get Touka to value and accept her "true" self, all the while apparently denying herself the same courtesy.

Is it too much to ask for a show in this genre where both participants have some degree of self-respect..?

Saturday, October 17, 2020

Kowpelésh Ere da Vedipelésh

Mi finyish vedi ere fo translate wang mo sowngit fo langbelta: All Along the Watchtower

(I have tried to translate another song to langbelta: All Along the Watchtower)

(Asilik kowltim, sili tolowda mebi tenye wawe fo du im mogut, fodagut showxa mi!)

(As always, if you have any way to make it better, please tell me!)

Kowpelésh Ere da *Vedipelésh

Mogut fo desh wa we fongi
Da *dzhoka ta showxa fo da pirata
Desh walowda walowda govatét
Mi na kang ge pash natím

Inyalowda beve rowm mi
Imim leta kowlting mi
Namang na gonya natim du mi eka
Imim na gonya gif mi wowt imim

Na desh radzhang fo ge natét
Da pirata showxa nadura
Walowda walowda milowda xiya
Pensa da livit im kaka

Amash to unte mi finyish du im fore
Unte im na shukumi milowda
Mogut fo setóp fo showxa nasheng xitím
Da ora xiya kasi da nax

Kowpelésh ere da *vedipelésh
Inyalowda vedi fong
Detím kowl sésata ta kom unte go
Oso welwala nawit but

Fongi de ere da pelésh nawowm
Wa koyo ta showxa tet
Tu kapawu ta ando kom
Ere da kuxaku da belék

Thursday, October 15, 2020

Gleipnir

Gleipnir is a vaguely body-horror manga adaptation, about a guy who has, somehow, found himself with the ability to transform into a "monster" with the appearance of a Japanese prefectural mascot. After his secret is discovered by a classmate, she finds a zipper down the back which allows her to climb inside and pilot him.

Also, other "monsters" (with various other abilities and transformations) are trying to kill them, in an attempt to collect enough alien coins to unlock the power to destroy the world. (Not a word of this is an exaggeration.)

The season starts out strong, but I felt like it very quickly fell back on fairly predictable shonen tropes, without spending any time on the much more interesting psychological implications of the main characters' unique bond. They're very different people – a scared, reclusive nerd and a borderline-sociopathic gyaru – and the way they complement each other's issues and weaknesses, both in and out of the costume, had a lot of potential for interesting character work that was ultimately squandered.

But then, given the parade of obvious shonen villains in the OP, I was probably expecting too much from the get-go.

Wednesday, October 14, 2020

Dear Brother

Oniisama e

After some… let's call them recommendations on Twitter, I have started to watch the 1992 shoujo manga adaptation Oniisama e. It was described to me as "pure uncut black-market shoujo" and I honestly cannot find fault with that assessment.

This is melodrama in its concentrated form. Directed by Osamu Dezaki – whose better-known works include the sports anime Ashita no Joe and Ace o Nerae, as well as trashy assassin thriller Golgo 13 – this takes all his trademarks and crams them into a genre that is, frankly, not prepared for it.

Split-screens, dramatic watercolour freeze-frames, lighting cues that would make Edgar Wright sit up and take notes; all in the service of a story that has no rights being so intense. It's something of a credit to the direction here that in the first episode the tension around a teenager's first day at a new high school was ramped up to the point that I genuinely expected the third act to end with a horrific murder.

One of my favourite shows, Kyoto Animation's exquisite Hyouka, is a detective series about nothing of consequence, but does an admirable job infusing its ultimately-insignificant mysteries with dramatic tension and satisfying reveals. Oniisama e doesn't have that whodunnit structure to rely on, but manages (with the liberal application of over-the-top thunder-and-lightning) to make "my new friend seems overly concerned with her position in the social pecking order" feel like the kind of life-or-death situation that most anime shows could only dream of portraying.

In short: I don't know what the hell this thing is, but I love it.

Saturday, September 19, 2020

O Maidens in Your Savage Season

O Maidens in Your Savage Season

One of the principal characters of O Maidens in Your Savage Season, a 2019 anime based on the manga by Mari Okada and Nao Emoto, describes fictional stories as not simply escapism, but a way to experience emotions at a safe distance; by empathising with the characters in the story, we get a kind of a vaccination against emotions that we'll experience first-hand later.

The trouble I'm having, now that I've finished the series, is that it's made me re-experience a particularly potent, complicated cocktail of emotions that I've not had to for quite a while — and I'm not sure I'm handling it well.

I'm not going to get into spoilers, but in short I'm something of a mess right now. It's been less than an hour since the last episode ended, but the borderline-anxiety that built up as the complicated relationships tangled themselves more and more (a phenomenon that's not exclusive to O Maidens, but hasn't been this pronounced since White Album 2) is still swirling around and not yet entirely processable.

This is probably — hopefully — just a side-effect of the dangling plot threads that the show has left me with; I'm not usually bothered by open endings, but there were two characters in particular who I'd hoped to see get a little more resolution. They were the less conventional of the relationships, but that made them all the more compelling — I know what the other two characters' arcs would have looked like even if they'd been left open, but these two needed more definition.

It's been years since I bought any manga, but I've ordered the first two volumes with the hope that it can give me some closure…

Thursday, September 10, 2020

Mi ando xunyam fo showxa langbelta

Pashang fong, kopeng

Because I can't ever make things easy for myself, I've started running a second RPG campaign.

It's a sci-fi game this time, using The Expanse RPG rules and in that setting (albeit without any connection to the TV show or books), so it's a nice change of pace on the front—and it makes it harder to reuse any of the plot beats or influences from my 13th Age campaign, which is slso useful because it's for three of the same party members.

One of my favourite things in The Expanse is langbelta, the creole spoken by the inhabitants of The Belt and the Outer Planets. While the novels have just used a slap-dash approach of mixing words from various languages, the TV show hired a lingust to create an actual creole, with syntactical and grammatical rules governing it.

And because, as mentioned above, I can't ever make things easy for myself, I decided to learn how to speak it to give my in-game Belter characters a bit more flavour.

When I was studying French for A-Level, I found myself thinking in French during classes because that was easier for my brain than the two-step process of thinking of a thing in English and having to search for the words in French. I'm doing this again now with a constructed language designed for a science fiction TV show, and it's fun.

I'm noticing myself translating my thoughts, random sentences that other people say, TV dialogue, books… almost everything I'm encountering gets an internal langbelta pass.

Which is how I ended up translating the lyrics to The House of the Rising Sun into langbelta. I had to use English words for a couple of things that don't have official translations, as well as coin a couple of new compound words, and singing along take a little creativity, but it is more-or-less possible.

Da Imbombo da Sowng da Leva

Desh imbobo ere Seteshang Erosh
Imim du nem da Sowng da Leva
Unte im finyish du suchok fo walowda walowda beratna
Unte Got, mi fosho wang

Matna mi ta básengwala
Im ta xalte gut da *dzhing da belú da nuva mi
Papa mi ta *kasínyowala
Ere Seteshang Erosh

Deting kasínyowala du mowteng
Im bera kaxa ere kapawu
Unte detim im xush im bera
Detim im ando beve

O matna, showxa málimang tolowda
Fo na du lik mi finyish du
Na du livit wit papeka unte terístiting
Ere da Imbobo da Sowng da Leva

Mi tenye wang lek ere da seteshang
Da owta ere kapawu
Mi ando go bek fo Seteshang Erosh
Fo leta-go mi fongi fode

Desh imbobo ere Seteshang Erosh
Imim du nem da Sowng da Leva
Unte im finyish du suchok fo walowda walowda beratna
Unte Got, mi fosho wang

Or, back to English...

The Hole the Sun the Raise

There-exists (a) hole in/on Eros Station
(Non-specific third-person-plural) make name the Sun the Raise
And it (perfect aspect) makes problems for many many brothers
And God, I (certain-opinion) ∅ one

My mother (past) ∅ clothes-person
She (past) keep good the jean(s) the blue the new mine
My father (past) ∅ casino-person
In/on Eros Station

The-thing-that casino-person has need (for)
It ∅ just box in/on ship
And that-time-when he happy is only
That-time-when he ∅ (contibnuous aspect) drink

Oh mother(s), speak-to small-person(s) all-yours
To not do like I (perfect aspect) do
Not to live with sin and sad-things
In the Hole the Sun the Raise

I have one leg in/on the station
The other in/on (a) ship
I (continuing aspect) go back to Eros Station
To take-away me from-here to-there1

There-exists (a) hole in/on Eros Station
(Non-specific third-person-plural) make name the Sun the Raise
And it (perfect aspect) makes problems for many many brothers
And God, I (certain-opinion) ∅ one

Since langbelta is a "zero-copula" languaue—it lacks a "to be" verb—I've used ∅ in the translation above to represent where, in English, that would go.

1 The langbelta phrase "leta-go [X] fongi fode" is somewhat idiomatic, used mostly to mean "arrested" in the sense of the cops dragging you away, never to be seen again. "Wear that ball and chain" is similarly idiomatic for being trapped, in this case willingly, which I think I've managed to keep intact by making this reflexive.

Wednesday, November 27, 2019

One Cut of the Dead

One Cut of the Dead is a 2017 horror/comedy directed by Shinichiro Ueda. It follows the cast and crew of a zombie movie whose shoot in a WWII military facility is interrupted by a real zombie outbreak. Its biggest marketing point is a 37-minute opening shot, filmed in a single take, but its most ambitious efforts don't become apparent until well after the first cut.

One Cut of the Dead might be the smartest film I've ever seen, and it's an incredible exercise in setup and punchline.

Without that 37-minute shot, there's not much chance One Cut would have made a big enough name for itself on the festival circuit for a UK Blu release, and that headline is certainly what drew me to watching it. But I was expecting something truly special from that opening 37 minutes, and I grew quite disappointed as it wore on.

Like most things in filmmaking, everything I know about "oners" comes from Tony Zhao. Using the background and foreground to keep a long shot interesting, how the camera movements give each scene a clear structure - One Cut does none of these things.

Its camera is constantly in motion, failing to properly give focus to characters or events. The actors stumble awkwardly over lines, seemingly improvising sections of dialogue; a couple of times the director character breaks the fourth wall in a way that the other actors seem to ignore. The camera work is haphazard, with an escalating number of crash-zooms towards the finale, where we spend over two minutes zooming in and out on the lead actress screaming while we hear a fight between two other actors off-screen. There's a "crane" shot at the end that looks like the cameraman is climbing a ladder instead of using an actual crane.

It's a slapdash, amateurish affair that can't really live up to either its own ambition or the marketing hype - and that's entirely the point, because One Cut of the Dead has the most impressive re-contextualisation of previously-held knowledge of any film I've ever seen.

To say more would spoil it, and you deserve to see the whole thing yourself.

Just trust me when I say that it is absolutely worth sitting through that sometimes-questionable opening oner.

Thursday, March 14, 2019

Skills for kills, Agent

I don't remember why I bought the original Crackdown. I wasn't a big enough fan of Halo, so it can't have been the multiplayer beta that came bundled with it. I don't remember playing the demo, either - but for whatever reason, I took a punt on it and fell in love.

It's probably fair to say that Crackdown changed my life. If it hadn't been for that 2007 open-world blow-up-'em-up, I'd never have heard of Realtime Worlds, and I'd certainly never have moved to Scotland to work for them. I am where I am because of Crackdown – literally, I'd not be sitting on this sofa in this house in this city in this country.

The direct sequel never made much of an impression, though. I did play the demo for that one - and its return to the same city (more or less) and the addition of 360-straining crowds of zombies felt respectively like a disappointment, and a distraction from the aimless purity of the original game's experience.

My brother's description of Crackdown as "it's not a game, it's an excuse" has always perfectly captured the anarchic spirit of Realtime's 2007 superhero simulator. You start the game able to leap 20 feet vertically, and as you amass further weaponry, vehicles and skill points for using them, you only become more of a threat to the criminals (and bystanders) of Pacific City. By the end of the game, you're bounding over entire buildings with ease, carpet-bombing the streets with a flurry of homing rocket, and jumping a souped-up monster truck hundreds of yards off freeways.

This focus, or the lack of it, on giving you all the tools and skills you need to do anything and then letting you do it feels like both the forerunner of and a departure from the modern trend of open-world collect-'em-ups. But Crackdown didn't overcomplicate things with sidequests and collectibles (beyond the Agility and Hidden Orbs, neither of which cluttered your map). There were a handful of boss characters to take down with the barest semblance of a plot to tie them together, but no lengthy cutscenes and no lore.

The third installment, which I've been playing via a GamePass trial, is almost a total return to the classic Crackdown formula. The addition of an actual story (which seems to totally ignore the "twist" at the end of the first game) gets in the way more than it helps, but otherwise this is just more Crackdown.

For most franchises that might be a bad thing - yearly releases and stagnation across genres means few titles actually stand out much beyond their presentation, but by returning to its roots Crackdown 3 manages to make an impression. Stripping away most of the cruft, letting the player loose in a sandbox with a ludicrous array of toys and targets, allows you to set your own goals and never feel like the game would rather you were following its breadcrumbs. Want to spend hours collecting orbs? Go for it! Want to get into massive firefights and blow up everything the bad guys can throw at you? Go for it! Want to race? Go for it! Want to progress the campaign? Go for it!

There haven't been many games that give me this kind of reckless abandon - the last one might have been its own predecessor, but by that measure alone Crackdown 3 is a riotous success.

Tuesday, October 09, 2018

13th Age

I'm trying to write an adventure (or actually, several) for a new tabletop RPG campaign that's going to start in a couple of months, and I am struggling.

My issues stem, I think, from how different the new system, 13th Age, is from the game I finished running last week, Monster of the Week. Where MotW is extremely light and relies heavily on improv, 13th Age is much closer to D&D's school of thought, with much more stuff to track moment-to-moment, especially once combat starts. The notes required for an entire arc in MotW feel like they'd barely be sufficient to cover a single scene in 13th Age.

While it should be easy enough to adapt the approach that worked for Monster of the Week into any other roleplaying system, in practice I'm finding it hard not to take things in a rules-heavy direction, with pages and pages of stuff written up.

Monster of the Week's missions - called "mysteries" - are largely self-contained and driven entirely by the players' investigations. The most amount of planning in a mystery is writing the six-point "countdown" of events that would happen without the players' involvement. Each location and character only needs a name and a role to indicate their involvement. I added a personality trait and "what this person knows" to my bystanders - a couple of lines, total, and almost no prepared dialogue.

Compare that to the eleven pages of stuff I've written for the first adventure in 13th Age - and that's not even all of it finished yet! I've got sketches of scenes and characters and places that would be more than enough to run with in Monster of the Week that I feel compelled to flesh out for this game. Monster of the Week's contemporary setting helps, as there's often a common real-world or pop culture reference for what a trailer park or a military base or someone's living room looks like, but a fantasy game demands (it seems) a level of ornate and detailed description that quite frankly I'm not sure my writing skills are up to.

Of course, it could just be a matter of the tools I'm using. Monster of the Week's lightweight setup lent itself perfectly to Trello boards, with columns to group cards for locations, bystanders and the monsters - but there's a separation between roleplay and combat in any initiative-driven that makes it too complex for Trello. Google Docs has been okay for making notes and blocking out the rough timeline for an adventure, but its layout encourages linearity, and I'm concerned it'll be difficult to jump between sections in the heat of a fight.

Hmm. Suddenly, I'm worried that I'm going to end up writing my own system to store everything.

Wednesday, May 16, 2018

Ejector

On Sunday morning, I woke up with a game idea stuck in my head; I spent a few hours with GameMaker over the course of the day, and by 9pm I had something I was happy enough with that I posted about it on Twitter. I'm never happy with my stuff enough to post about it on Twitter.

It's still full of other people's art assets and unlicensed fonts, and most of the code is borrowed from ShaunJS tutorials (but that's what they're for and anyway I used to work with him, so that's probably okay).

As I've worked on it over the last couple of days, and started thinking about how to make it a game rather than just a partially-implemented mechanic, I've come to realise that it's pretty much Nanaca Crash: the player has some limited control over the initial vector of their character's travel, and then it's basically just a case of seeing how far they can go.

I'd started to write about another GameMaker project I was working on earlier this year, but when it came to implementing the shooting mechanics I realised that I didn't want to make a game about shooting, so that's been canned until I figure out what the verb needs to be.

(This is still kind of violent, but it's very slapstick and only against your own character so I feel like that's okay.)

I'm close to getting all of the input mechanics finished - rather than Nanaca's single click-and-hold for both angle and power, I want to separate them into a hold for setting acceleration and some kind of Ouendan-type trigger for controlling angle (in progress). Initially these inputs were both controlled by the car object, but since I'm hoping to eventually have an upgrade system that would let you change the car, moving them into a separate launch controller took up most of today.

I'd dropped a basic sin() function in for setting the acceleration value - which worked for the proof of concept, but in practice the way it decelerated around the maximum value made it too easy to get the best distance reliably (in the absence of control over your launch angle).

acceleration_modifier = (1 + (sin(frames_held/period + 3*pi/2)))/2;

What I was after was a curve that would speed up as it got close to the maximum value, and bounced away just as quickly, making it much harder to hit the top every time. It was only when I drew out what I wanted that I realised that it's still basically just a sine wave, but with part of it inverted - which led me to

acceleration_modifier = 1 - abs(sin(frames_held/period + pi/2));

And now, onto the launch angle…

Friday, May 11, 2018

Where we were together

At first blush, there are not many obvious similarities between Say Sue Me's lazy winding surfgaze and Aimee Mann's more traditional indie pop, but listening to the Korean quartet's latest album, Where We Were Together, over the last few days, I can't help but feel like they're musical siblings, somehow.

When her most recent album, 2017's Mental Illness, was released I got quite annoyed by the reviews consistently describing Aimee Mann's output as "depressing". Although there's a deep melancholy to many of her songs (often disguised under a major key and an upbeat tempo), it's not accurate to say it's depressing; I've come to the conclusion that a more truthful description would be that it's depressed.

But at the same time, there's no sense of resignation or defeat - acceptance, maybe, but I've always found it somehow hopeful. It's the music of coping with your problems, of feeling sad or anxious or unloved but still picking yourself up and getting on with things - in a way I find helpful when my own subconscious threatens to overcrowd me.

I get that same sense from Where We Were Together: a reassurance that nothing is as insurmountable as our own demons would have us believe, that we're not as alone in our troubles as we often feel, and that there's light just around the corner.

Monday, April 02, 2018

Doki Doki Literature Club

Doki Doki Literature Club

Warning! Spoilers follow for Doki Doki Literature Club and The Beginner's Guide

There's a content warning at the start of Doki Doki Literature Club which is, on some level, a spoiler. It's not unusual for visual novels to touch on heavy subject matter, but to call attention to it before the title screen does stick out.

Up front, I feel like I need to say that this is a game worth playing, if you can get past the anime/VN presentation. I don't remember the last game that surprised me with its audacity this profoundly, let alone this often (and all in a package that I saw end-to-end in a little over four hours). Its density of ideas and the quality of its execution, within a medium that's uniquely suited to tell this story this way, is hugely impressive.

It will help if you have some familiarity with harem anime or other visual novels (both their general content and mechanics, even if you've not played any others; you've got to be willing to meet the genre halfway on its long periods of clicking through and reading dialogue). There are common tropes and archetypes it uses as shorthand - the childhood friend, the overly familiar upperclassman, the reluctant new club member - that not only make the opening 30 to 60 minutes much more efficient, but which set up expectations that can be exploited later.

I've been unpacking what the game means since I finished it earlier today, both its "message" and my interpretation of it, and the closest game I can think of, philosophically, is Davey Wreden's The Beginner's Guide - albeit coming from a radically different angle.

Last chance to turn back.

Wednesday, January 10, 2018

Isometrish: Automatic walls

Obviously, when you're building a game level (and especially if, like I hope to, you're building it procedurally), you can't spend ages making sure you've put the correct-facing wall object down at every part of the level, or fixing them every time you move a bit of floor around.

Well, you could, but wouldn't it be much better to just have a single wall object that could automatically detect which sides it needed to match to the neighbouring floor tiles?

Yes! And luckily, this is really easy to do!

There is some heavy lifting involved, though: you'll still need a sprite with a separate frame for each possible combination of walls - north on its own, east on its own, north and east together, south on its own, north and south together…

(If you want a shorter notation, you need 2n-1 sprites, where n is the number of sides you need to consider. For most cases, this'll be four, so you need 24-1, or 15 images - plus one with no walls.)

But how do you know which image to draw based on the combination of faces required? Binary!

Assign each face a binary number - for a square, this'll be 1 for North, 2 for East, 4 for South and 8 for West. The neat trick with binary numbers like this is, the sum of any subset of them is unique! Which means we just need to add up the numbers corresponding to each 'active' face, and that tells us which image to load.

In GameMaker Studio 2, sprites have subimages - this is most commonly used for animation frames, but we can also use it here to keep a collection of images together in a common object. You need to make sure the various subimages are added in the correct order (the easiest way to do this in GMS2, I found, was to save the images into a common folder numbered 1.png to 15.png, then use the 'Create sprite from image(s)' option).

A hideous example of a 16-frame wall sprite

Now that our sprite is set up, we can add the following to the object's create event:

iso_sprite = sWall;
var f = 0;
if (place_meeting(x, y - grid_size/2, oFloor)) f += 1;
if (place_meeting(x + grid_size/2, y, oFloor)) f += 2;
if (place_meeting(x, y + grid_size/2, oFloor)) f += 4;
if (place_meeting(x - grid_size/2, y, oFloor)) f += 8;
iso_subimg = f;

This checks the room for a floor on each side of our wall, and adds that face's value to the total, resulting in the correct subimage index that we need to draw, which is done in the draw event:

draw_sprite(iso_sprite, iso_subimg, screen_x, screen_y);

(In this example, screen_x and screen_y are the pre-converted grid-to-screen coordinates.)

And presto - a single wall object that you can drop into your room, which will automagically show the correct wall faces for any surrounding floor tiles!

Friday, January 05, 2018

Isometrish: Perspective

The top-down grid

Do you ever suddenly realise that you understand something that's been bugging you for days, and then find it impossible to see how you didn't get it in the first place?

GameMaker is great at 2D - side-scrolling and top-down games are a breeze to get working. There are dozens of video tutorials that can get you up and running with a platformer in fifteen minutes or less. But if you want to do anything slightly more complicated than that, well… time to do some maths.

Luckily for me - and you, if you're wanting to do this yourself - YellowAfterlife has a really good piece (aside from some confusing terminology) about translating grid coordinates to on-screen coordinates which, although it still took a lot of practical trial and error for me to really understand, gave me enough confidence to actually start trying things.

While drawing objects to the screen is the more technically challenging part of the process, it actually took me longer to understand moving around - even though it's really simple.

The short version is, I needed to realise that the character's not moving on the screen, but moving on a 2D plane (as if you're doing basic a top-down game); those 2D X and Y coordinates are then warped by a couple of simple functions to correspond to the on-screen, 'isometric' plane that's on the screen.

Basically, you don't need to care about the screen coordinates- the maths will take care of it for you! Just do your stuff as normal, and the maths around the drawing step takes care of the rest.

Mind: Blown

Which can use the exact same movement code I used in the top-down version, and results in this on the screen:

The screen

I had some other issues drawing things in the right place - like I said at the start, that's actually the technically complicated bit.

I'd assumed, incorrectly, that when you're drawing a sprite in code the X and Y coordinates you give it would be where it started drawing, with the top-left corner of the sprite. Turns out the origin you set in the Sprite window matters! For walls and floors to line up correctly, this means you need to set the origin in the same place on the 'floor', which took me some time to figure out (particularly since the sprites in the room editor aren't the same as the ones you'll see when playing).

I also hit some trouble with aspect ratios because my grid (and the isometric sprites) were larger than those used in YAL's example - and since I'm still not 100% on the maths involved it took a little bit of trial and error to iron that out. (Turns out you just need to calculate the ratio of the isometric tiles' dimensions to your grid squares'.)

The way GameMaker Studio 2 handles 'depth' for draw orders has changed slightly too, favouring its built-in layers which are, in practice, pretty incompatible with isometric drawing (but are still really handy for organising objects in the room editor). The documentation suggests you should still be able to arbitrarily assign depth to your objects, but in practice I found that doing so prevented them from rendering at all, until I added the following in an init script:

layer_force_draw_depth(true, 0);

So now I've got a map, and the ability to move around it! And, as it turns out, right through the walls…

Thursday, January 04, 2018

Isometrish

First rendering walls

Right, fuck it. I'm going to write about something that terrifies me: my own code projects.

About the only thing I've programmed 'publicly' is a 140-character random level generation script (in Ruby). I'd written it in JavaScript originally, but decided for no particular reason to try and shorten it until it fit in a tweet. (This was before tweet length got doubled.)

def l w,h;g=(1..h).map{[]};y=rand h;x=g[y][0]=0;(g[y][x]||=1;n=y+rand(-1..1);n>=0&&n<h&&g[n][x].nil?? y=n : x+=1)while x<w;g[y][x-1]=2;g;end

But I've started something a bit more ambitious: I'm trying to make a game. Or at least, most of a game's systems.

I worked at YoYo Games for over six years, and it's only since I left in November that I've really started to use the product, GameMaker. I've thrown together little proofs of concept - platformers, a tank driving thing, some experiments with shooters - but never really had a specific goal in mind.

Having something to aim for means having something to miss; it's easy to just try out hitscan shooting in a tiny demo level, but make a game?

I'm now a couple dozen man-hours into a clone of Crusader: No Remorse. I don't know how often, if ever, I'm going to write updates on my progress, but I want to try and get less defensive about my code, and exposing some of it to the air might help.

(It helps that I don't expect anyone to read this, though.)

I've been meaning to find something to make me blog more this year, and maybe this is it.