Hello Sweat

Posted 2020-03-21


The dark deed is done! I made a complete track after fiddling around for who knows how long.


Tagged: fl-studio music sweat-tooth

In-House

Posted 2020-03-02


I recently paid the entry fee for a copy of FL Studio in order to learn to make my own dance music. I'm trying to replicate the kind of French house and disco house I've been listening to since I found out I loved dance music to the detriment of all other genres around 2015. I particularly want to make tracks with heavy kicks, Spanish and Latin percussion, and loud sidechained basslines. I also have something of a philosophy for what I don't want to make, although I find myself reaching for half-words when I try to describe it: I don't want to make anything "bedroomy", or "poppy", or "overproduced". Don't ask me to explain! I'll fail you or maybe expose my pretensions.

Like all complex tools, FL Studio comes with two initial frustrations that must be overcome. The first, more obvious frustration is the inability to achieve what you want with the tool. The second frustration is the inability to articulate what you want to do in the first place. Being stuck without the proper language to describe your goals is the biggest obstacle I've faced in a lot of my pursuits. On top of all that, whenever I've run into a problem in FL Studio I've had to assess if the problem is even worth solving: I might be trying to accomplish something that is done more easily another way, or something that can cause more problems later on. It's a lot to chew on.

The huge glut of tutorials online for FL Studio have been a big help. You can (with a little shame) type in "FL Studio [your preferred genre here]" to quickly catch up on the basic techniques needed to accomplish what you want. I find this is a pleasant way to learn because it is satisfying to have a finished product when you're done following along. Deep knowledge of all of FL Studio's plugins can come later: what I really care about is feeling satisfied with my creative output in my honeymoon phase with music production.

I'll leave you with this little thing I made after a few hours of goofing off on Sunday: I figured out the drums and the bass synth, then just slapped the pianopella of Do You Feel Me by NY's Finest on top of it. Ideally I would have made the sample louder, but here we are. I should try to make something more original, anyway, since the track is likely infringing some copyright.


Tagged: fl-studio music

First Person Looter

Posted 2020-02-10


My entire weekend was eaten up by Escape From Tarkov, a game recommended to me by a friend which recently saw a big surge in popularity thanks to a healthy dose of viral marketing on Twitch by assorted big-name streamers. I want to add a bit of context for the layman without sounding too much like a wikipedia article, but to cut it short, Tarkov is about looting in a large map set in an abandoned Russian city populated by hostile NPCs and other players looking to scavenge your corpse for their own benefit. The objective is to leve the map once you are done your looting in a se ttime limit by reaching a checkpoint assigned to you at spawn that is usually across the length of the map. When you die, you lose what gear you came equipped with, as well as whatever gear you found over the course of a match.

The game is an emotional rollercoaster for me. Nothing gets me as stressed out as Tarkov, but nothing has made me feel as euphoric, either, and my blood is pumping a bit fast just writing about it now. Since each run costs in-game roubles to gear up, dying during the course of a match has a cost you can feel in your stomach, while surviving a match with a lot of new loot feels like winning the lottery. I feel fortunate to have avoided games like EVE Online or World of Warcraft growing up, worried that I might get hooked to them and become a shut-in, but now I'm conerned that Tarkov will do just that. I think I have a gambling problem waiting to jump me if I ever go to a casino.

I feel that the game has a focus on some mechanics that borders on the annoying. Buying and selling goods is most efficient when done through the "flea market", a player-to-player trading post which is hard for new players to navigate. Finding the appropriate parts to modify weaponry is still quite nebulous if you don't know what exactly you're looking for. You need to consult a spreadsheet to determine the most efficient ammo type or armor you should buy to improve your survival rate, but even at entry the "approved kit" can run you upwards of 100k roubles, a third of the amount of money you start with as a new player. All these in-game complaints pale to the server uptime, which was landed a heavy blow by its surprising explosion in player numbers. Few things are as frustrating as a successful run spoiled by a server disconnection. All that being said, I think the game is excellent and faithfully hearkens back to the STALKER game franchise.

On to meta news. I don't know if the "daily" tag makes much sense given that I haven't managed to make myself write every day. On top of that, I don't think my opinion on the things I'm consuming makes for interesting reading. I'd rather limit my blog to cataloguing interesting events and archiving any creative or productive work I happen to undertake.


Tagged: tarkov stalker games

The Buzz

Posted 2020-02-06


I saw Attack The Block, quickly followed by Uncut Gems (again) last night. Attack The Block was a pleasant surprise! I forgot that I enjoyed those Cornetto Trilogy-esque productions from Big Talk. The comedic writing was propped up and made more out-of-place and inappropriate (read: more funny) by the fact that all of the cuts were done very seriously, like any other slasher horror or action film, something that also elevated Hot Fuzz to excellence for me in my teenage years. There's a lot to be said for the praise movies like these get from mass-media consuming types I consider tasteless. Is that why I'm quick to respect Attack The Block for its relatively more cult status? I think everyone agrees the aliens are pretty goofy, though. I figure it was a budget thing.

So! On to the Safdie Brothers' Gems, a movie that feels like a window into the next decade. It's all me and a handful of friends seem to talk about, and I imagine not just us, either. It's so good that it wasn't even put up for an Oscar, which usually equates to rejection by older, out-of-touch generations and acceptance by youths. A friend mentioned that basically only Jews, millennials and people who live in hectic cities like New York really enjoy the film: they're already used to being surrounded by tons of voices at once, whether in open office plans, subway cars, shitty bars, twitter feeds, big family dinner conversations-cum-arguments, whatever, and they're always on edge already, too. That the film currently holds 52% on Rotten Tomatoes initially surprised me until I absorbed my friend's statement. For a lot of us, this film reads like a challenge to the next generation of movies, from the music (Oneohtrix Point Never truly works in the present moment) to the superb claustrophobic cuts (albeit toned-down from the Safdies' excellent Good Time) which are leaving the academy in the dust. Who could have written a review like this other than a boomer?


Tagged: daily film uncut-gems attack-the-block safdie a24

Lost Time

Posted 2020-02-03


The weekend's gone by in a blur. I took a belaying course to get back in the swing of things after not bouldering for a couple of months and getting out of shape, a proud custom of the holiday season.

I had some heavy second thoughts about the ECS implementation in Phaser by the time I got systems working and hooked them up to the game code. Sure, the main loop looks "pretty" now, but Phaser already comes with so much useful boilerplate stuff in its own API that I've just been ignoring. I tried making something simpler for fun, but felt discouraged at losing the week and wound up just killing time instead. I'm too easily dejected by stuff like this.


Tagged: ecs daily

Daisies

Posted 2020-01-30


I saw Daisies just now, as well as Valerie and her Week of Wonders, both Czech new wave films. I really admired the work put into Daisies, a wonderful, succinct moral tale. The shots were especially well done, and I'm struggling to remember any other film from the sixties with composition that could match it at the moment. I joked to a friend that the leading ladies of the film reminded me to ignore all contact with women this year.

Valerie was very dreamy and mystifying, but symbolically far too busy. Bees are proceeded by flowers and doves and shifting family members and relationships and peepholes... Watching the film felt like reliving pubescence, when whatever it was I cared about suddenly seemed like a cruel joke arranged and rearranged, unknowingly or not, by my peers and elders alike. By the film's end, I felt like it became more interested in just shocking and provoking the audience: I guess four years was a long time between Daisies and Valerie for the country, since the former was banned and the latter wasn't.

Work on ECS continues. I've gotten plenty of code down for systems, but looking over everything I can spot a lot of mistakes and wasted effort. I'll try to clean everything up tomorrow, since rightn ow the codebase is a mess of functions linked all over the place in ugly ways that could be made simpler. Efficiency remains a priority for lookups, but I don't think I'm going to attain it until after I sort out how each object passes messages.


Tagged: daisies valerie-and-her-week-of-wonders ecs daily

Entities and Components

Posted 2020-01-29


The ECS implementation in JS is chugging along, although I'm improvising it from what little I bother reading about it. I needed to think of a way to quickly access Entities and their Components in a way that would let me deal with them as groups: from what I read, it's best to access components at the same time if they're all the same type. For instance, a gravity system might affect the velocity component of a bunch of different entities at once.

It may be naive, but from where I'm standing it seems serviceable. Here's entities:

class EntityManager {
    constructor() {
        this.entities = {};
        this.entitiesByType = {};
        this.index = 0;
    }

    addEntityByTypeMap(entityType) {
        this.entitiesByType[entityType] = [];
    }

    removeEntityByTypeMap(entityType) {
        delete this.entitiesByType[entityType];
    }

    addEntity(entity) {
        entity.id = this.index;
        this.entities[this.index] = entity;
        cm.addComponentByEntityMap(this.index);
        if (!(entity.type in this.entitiesByType)) {
            this.addEntityByTypeMap(entity.type);
        }
        this.entitiesByType[].push(this.index);
        this.index++;
    }

    removeEntity(entityId) {
        var type = this.entities[entityId].type; 
        var byTypeIndex = this.entitiesByType[type].indexOf(entityId);
        this.entitiesByType[type].splice(byTypeIndex, 1);

        cm.removeComponentByEntityMap(entityId);
        delete this.entities[entityId];
    }
}

class Entity {
    constructor() {
        this.id = 0;
        this.type = "";
    }
}

and here's components:

class ComponentManager {
    constructor() {
        this.components = {}
        this.componentsByEntity = {};
        this.componentsByType = {};
    }

    addComponentByEntityMap(entityId) {
        this.componentsByEntity[entityId] = [];
    }

    removeComponentByEntityMap(entityId) {
        delete this.componentsByEntity[entityId];
    }

    addComponentByTypeMap(componentType) {
        this.componentsByType[componentType] = [];
    }

    removeComponentByTypeMap(componentType) {
        delete this.componentsByType[componentType];
    }

    addComponent(entityId, component) {
        component.id = this.index;
        component.entityId = entityId; // probably set when instantiated tho
        this.components[this.index] = component;

        if (!(component.type in this.componentsByType)) {
            this.addComponentByTypeMap(component.type, this.index);
        }
        this.componentsByType[component.type].push(this.index);

        if (!(entityId in this.componentsByEntity)) {
            this.addComponentByEntityMap(entityId);
        }
        this.componentsByEntity[entityId].push(this.index);

        this.index++;
    }

    removeComponent(componentId) {
        var entityId = this.components[componentId].entityId;
        var byEntityIndex = this.componentsByEntity[entityId].indexOf(componentId);
        this.componentsByEntity[entityId].splice(byEntityIndex, 1);

        var type = this.components[componentId].type;
        var byTypeIndex = this.componentsByType[type].indexOf(componentId);
        this.componentsByType[type].splice(byTypeIndex, 1);

        delete this.components[componentId];
    }
}

class Component {
    constructor() {
        this.id = 0;
        this.entityId = 0;
        // Type is set by children of this class.
        // Used instead of obj.instance.name because that breaks when minified.
        // TODO: what about inheritance classes of those children?
        this.type = "";
    }
}

I'll try to work out how these things play along with systems tomorrow, but it'll be a busy night, so it may take longer. On top of that, I'm not sure how systems will work within Phaser, which has a lot of existing boilerplate for creating game objects and drawing their sprites. I hope I'm not getting in over my head!


Tagged: ecs daily

Own Your Roll

Posted 2020-01-27


Playing Nuclear Throne throughout the day has reminded me of my neglected attempts at making games. A friend is currently picking up the Rust programming language by way of a roguelike tutorial featuring its own Entity-Component-System (ECS) implementation. I had some trouble with Rust on WSL, so I figured I'd roll my own ECS in Phaser, a decent JS library for game development, to pass the time. I spent some time with Phaser trying to make an ill-fated roguelike, actually: I had come as far as figuring out an algorithm for vision and lighting, but I was quickly frustrated with its minute details and dropped the project altogether. It would do me well to continue on trudging through my mediocrity rather than to stay where I am, eyeing it cynically.

Implementing ECS in Phaser has taken longer than usual since Nuclear Throne is extremely distracting. It first seems like a really simple and rough thing, just a slab of careless bullet-hell arcade violence, but it's tightly designed and its systems are well thought-out. I've always liked the work of Vlambeer, the development team that made the game: about 10 years ago I was playing round after round of another indie hit of theirs, Super Crate Box, in high school.

Another friend of mine mentioned that games seem like a very high-effort, low-return form of entertainment when it comes to their creation. I'm inclined to agree, although the feeling of having finished something more hefty than a blog (and a dead, emoji-based joke social network) must be nice. I'll try to have a solid implementation done by this Wednesday so I can move on to the more interesting task of actually making a game with the setup.


Tagged: nuclear-throne games phaser ecs daily

Unending Commentary

Posted 2020-01-26


I've updated my site with a few extra flourishes in the backend. I can now tag posts, and their date of publication is also separate from their name, so the blog archives can be more robust. I've been operating under the assumption that if I have these features I'll feel like writing here more often, so now I get to see if that will hold true. I'm going to start blogging daily as a means to improve my writing, my thinking, and who knows, maybe my life, too. I consume media at the disgusting pace all you other animals do, so expect a lot of writing on that until I get myself together. I don't expect whatever gets written here will hurt my chances of future employment since nobody goes to this webhole anyway.

I saw W.R. - Mysteries of the Organism this week and highly recommend it to anyone who can get a copy (the one up on youtube at the time of writing has illegible hardcoded subtitles). The film is a collage of documentary footage as well as performance art in America interspersed with a fictional story set in the former Soviet Union. The film discusses sex and socialism, sometimes just sex and sometimes both, and its satirical editing had me laughing through it all. My key takeaway from viewing the film is that there's something to be said about the impact that large societies, whether socialist or capitalist or what-have-you, have on our individual sex lives.

Writing is hard for me at the moment. I have to admit I got pissed trying to elucidate anything about Organism that isn't just bland praise. Maybe I'll come back to it, but I've been seeing a lot of movies lately, so it might just get lost in the fog. Since I'm trying to write every day, I'll tag those articles as "daily" and any attempt at an essay could be set to "essay" or something, but that's getting ahead of myself.

Looking over what I've written so far, I've noticed a few things that I think I can attribute to using discord and twitter too much. I make transient points, I change topics quickly instead of developing them further, and I'm filling space by being self-deprecating. I want to target that by writing, although I think the process is going to be very slow.

Let's round this off. I've been playing a lot of Spelunky, same as always, while gradually losing my interest in Far Cry 5, which plays like a first-person Just Cause 2, both meaningless and borderline-apolitical settings with substandard gunplay. Maybe I'm missing something key to enjoying its mechanics, but I could really do better to kill a few hours in the day. I also picked up Nuclear Throne, which is more immediate and satisfying. An increasing number of games I have in my "library" were made in Game Maker Studio, a piece of software I happen to own and continue to do nothing with.

That'll do for today.


Tagged: daily film