Sunday 28 October 2018

Optimizing Caffeine Intake (+ Other Nootropics)

I'm sure that caffeine use is familiar to pretty much all of my viewers, being the programmers that most of you are- and of course a central tenet of programming is consuming caffeine.

However, if you're drinking caffeine daily over a long period of time, you're probably not using it as efficiently as you could be, as I found out the hard way.

So for some background, I went from drinking about 8 or 9 cups of coffee daily which is known as "fucking heart attack" quantities of caffeine intake- it'd probably work out to 600-700 milligrams of caffeine a day. I woke up every day with a tension headache and constantly had pain in my jaw from muscle tension, and developed some pretty unpleasant anxiety.

However, at some point I got really sick for a week so I couldn't drink caffeine anyway and this had the effect of showing me a level of illness (combined with caffeine withdrawals) that I'd sooner kill myself than try to experience again. But the point is that after this hard caffeine reset(well, it took a couple more weeks to get to actual normal levels) I had lost a lot of the tension and anxiety that caffeine was giving me.

So I decided fuck that I'm never getting caffeine dependence again if that's what the cold turkey withdrawals are like, and I worked out a way to drink coffee occasionally without experiencing dependence or tolerance.

You might be wondering how, and you could probably work it out with a few minutes to think about it because it's not complicated, it's literally just not drinking coffee regularly. I generally limit it to 2 times a week, distributed sporadically so as to not let my body get used to it. This has the effect of making me non caffeine dependent in day to day life, and when I do drink coffee it makes a hell of a difference to my productivity.

Quite often, the amount of work I get done doubles or even triples on days when I drink coffee because I have maximized my sensitivity to it. This also means that on days I don't drink any coffee at all, I can still do an average normal amount of work.

So that's basically my advice, get off caffeine either cold turkey(which I legitimately would not recommend if you drink as much as I used to), or taper off by recording your daily caffeine intake and slowly reducing it- for reference, there's a little under 100mg of caffeine in an average strong cup of coffee, and about 20-30mg in an average cup of black tea.

Once you're off caffeine, just use it periodically- 1 or 2 days a week seems to be a good spot for me, but it depends on how your own brain deals with caffeine. I develop dependence and tolerance remarkably quickly, but I've heard some people drink coffee 3 or even 4 days a week without developing any tolerance at all.

So what about this "other nootropics" bit I put into the title of this video? That's right, your boy's done his research into things that go a bit beyond caffeine.

Now I'm a bit shy so I'm not going to mention microdosing tiny amounts of LSD to enhance flow states and creativity.

However, as I said- I'm too shy to mention that bit, so I'll move onto my next favourite which is l-theanine. This one's a bit niche and I've never taken it in tablet form, but it's a chemical also found in black tea which reduces the jittery side effects of caffeine and increases single-track focus, so your brain's not as all over the place as it would be if you just shotgunned 5 shots of espresso. In my experience, the caffeine experience from black tea compared to coffee is very different. Black tea definitely affords much more focus and clear thought rather than the frantic feeling you can get on a lot of coffee. Plus, black tea naturally has much less caffeine than coffee so that probably plays a role. 

L-theanine is frequently taken on its own as well. A lot of people in nootropic communities consider l-theanine as an obvious frontrunner- it's really hard to build a tolerance, dependence or experience withdrawals with even high amounts of l-theanine daily. It has no real adverse effects compared to caffeine which can cause anxiety, tension, shakiness among other things.

Alright, this one isn't really a nootropic but it's a good idea. Take some damn multivitamins. Caffeine actually drains your brain's magnesium stores, meaning you're more prone to unpleasant muscle tension- which is already an unpleasant side effect of caffeine. Also, if you're not getting enough vitamin B or vitamin D, you might just feel kinda depressed or deflated and not even realize it until you start supplementing them and feeling noticeably better.

This is especially important if you're on a vegan diet, since it's quiet easy to miss out on essential B vitamins or vitamin D3- which is difficult to produce from plant sources. Everyone else feels the effects of animal products generally being supplemented with vitamin B and D before being sold to you, but unfortunately this practice is much rarer in vegan products. 

So that's about all my knowledge on this topic but I've skipped over some details. If you want to know anything else or better yet if you want to share something along these lines with me in the comments, please do! I should also note at this point that you shouldn't expect any nootropic drug to fix your productivity problems- you have to put some brain work and head thinkin into it to get anywhere with it. These should be used IN COMBINATION with other practices, like that pomodoro thing seems useful, project tracking and closing your damn social media channels while you work. Hell, even meditation can prove useful.

Thanks for watching and stay tuned for more videos wherein I, an unqualified 18 year old, gives you advice as to which mind-altering substances to use to help you achieve your goals. Goodbye!

Wednesday 24 October 2018

10 Tips For Using The Godot Engine

Fuck me I really am doing a top ten list aren't I? Jesus Christ. Anyway, let's get to it, I guess let's start with number one.

1. Singletons. These are basically scripts that don't really attach themselves to any existing node, which means that they exist outside of the current scene- which makes them perfect for things like saving data, playing music uninterrupted between scenes or preloading a bunch of resources to be used later. I've got 14 singletons in WARP-TEK as we speak, so I can tell you that I really like using them.

2. PhysicsBodies. This is close enough to a tip, right? Let me just run through the three types of 2D PhysicsBody nodes and their usual use-case.

KinematicBody2D nodes are what I use for most things that need to move around, so enemies, the player, other colliding entities, etc. RigidBody2D nodes are good for physics-based movement, so if you wanted some boxes for a puzzle game that move and fall like real boxes would, then you'd want to use RigidBody2D. Or, you COULD use KinematicBody2D but you'd have to program all the physics stuff yourself.

Lastly, StaticBody2Ds are good for anything that should never move like walls or the floor. Easy enough but it's good to know the difference.

3. The ternary operator. Now most programming languages have this one, it's the question mark one in C++ and in Python it's just thing if condition else other_thing. In GDScript, it's the same as in Python(as most things tend to be) and it's super useful. I realize it's much nicer to use this ternary operator on one line rather than dedicating 4 lines to an if/else block.

4. Here's a more functional tip, and it's based off something I actually do in WARP-TEK. Use a Singleton script to preload all of your resources to speed up in-game performance. This way if you want to instance a node, you just refer to its entry in this monolithic resource script and instance it. It has in my experience with preloading over a hundred objects made the game start up maybe half a second slower, but it drastically reduces lag-spikes that stem from repeatedly having to load or preload resources, such as when you're spawning a big blast of 30 or 40 bullets.

5. Specifying neighbours in Control nodes. So have you ever run into the issue where you want a menu to be usable with the arrow keys or a D-pad but Godot just won't direct to the correct buttons in the proper order? Well, I haven't because I haven't really considered keyboard accessibility until really recently but there is a really neat solution to this problem.

Any control node will have the "Focus" category, and you can see there are a few properties like "Neighbour Left", "Neighbour Down", etc which basically determine what happens when this button is focused and a specific key is pressed. In case this explanation wasn't super clear I'd say just play around with it because it's a really simple concept and it's implemented really well.

6. NinePatchRects. This is also related to a Control node, but trust me- this is super useful, and it's actually a new thing that only just appeared in Godot 3. Basically, for Mass O' Kyzt I had to manually size and align all the edges and corners for all the menu panels and stuff. For WARP-TEK, I've specified a 3x3 grid of what each corner, edge and middle piece should look like, loaded it into a NinePatchRect and all you have to do is resize it and it'll automatically scale or tile the corresponding parts of the graphic to fit a size of your choosing.

It's super convenient and while it sometimes takes a moment or two to actually configure it so it scales how you want it to, it's definitely worth looking into.

7. Have you ever had that issue where you're cooking pasta for a while and you stir it but you're kind of impatient and you think "well, this is probably good enough" and you strain it and put it into a bowl and you take a bite and it's really crunchy in the middle and so you put it back into water but you have to heat up the water because you used cold water but by the time the pasta's boiling again the pasta has actually dissolved into the water and you're left with a kind of starchy gloop that you have to turn into a soup but you don't even really like soup so you just pour it out and then it blocks the drain because it's still really thick in places and then your sink overflows and instead of calling a plumber or even turning off the hot water tap you just sit under the table crying and feeling malaiseful about your terribly out-of-control life while you wait for the small puddle of water on the kitchen floor to reach you and force you to either clean it up or deal with soggy clothes but when it does actually reach you you just realize you don't have the energy or motivation to even get up off the floor for another hour and your clothes get completely saturated in warm starchy water and by the time you do get around to cleaning it up you've done permanent water damage to that stack of important envelopes that you've been meaning to pick up off the floor but never got around to?

...No? Alright then, moving on.

8. Autotiling! Of course this one had to be on the list. It's a little tricky to get your head around initially what with the bitmask stuff but it's super useful once you do get the hang of it. I won't try to explain it too much here but trust me- learn it. It'll take you an afternoon at the absolute longest, and potentially even faster if you watch my tutorial video on autotiling (I think I have one, I suppose I should check before publishing this but fuck you I guess)

9. Using an external code editor! I did do this for about a day with Sublime Text before realizing that Godot's built-in code editor is fine for my needs but if I had a strong preference(for instance, if I was a Vim or Emacs fanatic) then I would be in luck, because Godot makes it super easy to use a third party editor. Just go to Editor in the top left, Editor Settings, and under "Text Editor" click "External" and configure to your heart's content.

10. The new Audio Bus system. Okay, I don't think this really counts as a tip but it's just something I really like about the engine and you gotta agree it's a step above whatever the fuck 7 was about. Basically, I generally create two new buses in addition to the master bus, and I call them "music" and "sound". Fairly self-explanatory, but the idea is that you route all the music sound through the music bus and all the sound effects through the sound bus. If you wanted to you could have buses for ambient sounds, voice, etc.

The point is that this makes things easier for you when you're adjusting system volume. You can make a nice volume slider that directly adjusts the volume of the music bus, and another that corresponds to the sound bus. This stops you from having to save another variable like music_volume and refer to it any time you want to play some music.

Anyway, that's about all I've got. If you have any more interesting things about the engine that you think I and the world should know about, for real let me know in the comments- I'm still learning new things about the engine constantly!

Thanks for watching, and stay tuned for more top ten lists... maybe... probably not though because this was a pain and really long to write sooo.. uh.. goodbye.

Thursday 18 October 2018

A HITPIECE On Florian Himsl

Some of you might know that I've been livestreaming with Florian Himsl, the co-creator of The Binding of Isaac with Edmund McMillen. His outwards persona is charming, even soothing- but let me tell you, there lies a dark side beneath the veil.

Florian Himsl. Born to the name Florida Hershey's. The true story of how The Binding of Isaac was developed is, to put it simply, harrowing.

Florian, drunk on his own lust for power, approached Edmund one stormy night.

"Edmund," he began, slurring his speech due to the aforementioned drunkness (on his own lust for power). "Listen to me, we're gonna make a fucking game, and you're gonna like it."

Edmund, taken aback, responded "Who even are you this is the first time you've ever spoken to me?"

"I'm Florian", he responded. "I'm Florian Himsl and we are gonna make a goddamn game."

What followed from these events is a tragic tale of workplace abuse. Florian would constantly chastize, berrate and even physically hit Edmund- an astonishing feat given that they live hundreds of thousands of miles away from each other.

But here's the real dirt on Florian. Florian didn't even program The Binding of Isaac! Florian Himsl is the owner of a small workforce of goblins. Proper goblins too, green skin, pointy ears and each about 3 feet tall.

Florian Himsl naturally delegated all the programming in The Binding of Isaac to the goblins. He sat back in his chair with a whip, while each goblin toiled away in the code mines. Florian had no idea how to do any programming, at least at the time. Why should he even have to learn? He's got a goblin workforce! Unfortunately, this lapse in knowledge led him to adopt some peculiar tendencies. For instance, he refused to allow the goblins to use variable names more than three characters long, among other atrocities.

Now, you might be asking "What does he feed the goblins?" and here's the truth.  The truth is that he's feeding them baby food. Being small and child-like in many ways, goblins can't really eat anything else that isn't baby food. They don't have the digestive tract for it, and after over a decade of being force-fed nothing but baby food- nobody would.

Now, here's the thing. Being a master of goblins does lead to some.. complications. Transformative complications. Have you ever wondered why Florian eats baby food sometimes on his livestreams? Have you ever wondered why he can only name variables with a max of three characters? Have you ever wondered why on the livestreams, he's the one doing the programming?

He's become a monster truly of his own making. All the things he's forced upon his goblin slaves have come back to haunt and manifest themselves in his own being. Soon Florian Himsl as we know him will be gone, and he will be replaced with a three foot tall babbling goblin creature.

Don't support this man's work. Do not subscribe to his YouTube channel called GameSquid (linked in the description), it's a front for something much more sinister. Do not get excited for his game Squid Invaders.

Heed my advice, viewers. It's only a matter of time before the goblin hoarde comes for me too. Thanks for watching, and stay tuned for more videos exposing this absolute goblin of a game developer. Goodbye!

Tuesday 9 October 2018

How To Develop Games On Linux

Anyone who's been following my YouTube channel for a little while might realize that I do all of my game development work stuff on my computer which runs Debian Linux rather than Windows.

I thought I'd just outline some of the tools that I use when working on Linux, so here we go.

The biggest component of my gamedev toolkit is probably the Godot Engine. It really nicely handles everything I want to do for 2D games, though I haven't really ventured out into 3D as of yet. If you don't wanna use this engine then you can also use an experimental build of Unity which apparently supports Linux, which is awesome. However in my experience from a couple of years ago, this build of Unity is filled with bugs and from what I've heard isn't MUCH better even today.

However, at least as a transitional step between Windows and Linux, Unity is still there. And it sorta works.

Another engine that works WAY better on Linux is Unreal, since Unreal is able to built on pretty much any machine via way of keeping its source code available(although unavailable for any edits, so I don't think it's technically open source).

I've opened Unreal and while it's a pretty heavy program compared to Godot or even Unity it seems to work perfectly! No bugs, no glitches and no unexpected crashes.

Now unfortunately if you're a big fan of something like GameMaker then this is gonna hurt. No matter how much I try I just cannot get GameMaker to work on Linux- even using WINE which is a compatibility layer specifically designed to make Windows programs work on Linux. I mean your best bet is to get GameMaker running in a virtual machine, but... you know. That's not a great setup.

So in short, I use the Godot Engine for the bulk of my gamedev stuff. There are, however, a few more tools that I use, so I'll just name them off real quick.

Aseprite is great for pixel art, and chances are if you're running Windows you'd be using this one too. I do find that it opens a little faster and runs a little smoother on Linux, but that might just be my own subjective experience, so I won't pass that off as a fact.

Anyway, if you can't or don't want to use Aseprite you can use online editors like Piskel or Pixie- both of which seem pretty good to me. I started off using Piskel, though unfortunately it became a little bit unwieldy for bigger projects- hence why I switched to Aseprite.

However, what if you don't wanna do pixel art? Well, you have some options here. You can either run Photoshop in WINE where I'm told it runs very nicely and efficiently, or you can choose from a few Linux alternatives. The leading one I'd recommend is actually Krita if you're coming from Photoshop because Krita is easy to use, pretty quick, it has a slick and intuitive UI and it's just a really nice program to use in terms of workflow and everything. I generally recommend Krita to anyone who wants a nice digital art program.

The other obvious answer that I have to mention on penalty of Richard Stallman strangling me in my sleep is GIMP- GNU Image Manipulation Tool. It's pretty good and I do use GIMP sometimes if I want to generate a graphic or edit a picture in some way because it's really useful for certain tasks. I'm not sure I'd recommend it as a general digital art tool when being compared with Krita, but it's really powerful at what it does do.

So now let's move onto an area I know a little less about- music. If you want music, I'd probably recommend you something like BeepBox because it's easy, web-based and you can basically just click randomly with your eyes shut and get something that isn't *that* bad. However, if you want a little bit more than a simple chiptune generator can give you, you can move onto something like the much less popular Bosca Ceoil.

Bosca Ceoil is very similar to BeepBox and I'm sure it was based off of it in some way but it allows a much wider variety in instruments, BPMs, etc. It's basically BeepBox+, though in its complexity it does lose out on some of the simplicity that makes BeepBox so easy to create with.

If you're a real music boy then you can go ahead and run a DAW of your choice. Chances are if it isn't natively Linux compatible(which many of them aren't), you'll be able to run it perfectly fine on WINE. I've never had any problems with any of my terrible attempts at using FL Studio.

So anyway, if you want some sound effects synthesis then you can use Audacity which again- if you're on Windows you probably would be using this all the time anyway. Download some samples from freesound.org or your website of choice, edit them to your needs and you're good to go! However, if you're making a chiptune game and you want something a little bit more specialized to help, I can recommend you the tried-and-true sfxr. If you want something a little bit more easy to use or refined lookin, you can go for ChipTone.

Usually for things like Ludum Dare or any game wherein I need a chiptune thing, I'd use ChipTone since I really prefer the intuitive visuals and UI. However, I can understand why somebody would use sfxr for more fine control over the sound. They're different tools, but for a beginner I'd recommend ChipTone.

Lastly, let's get onto some code editors because I realize that even if you're using a proper engine like Godot or Unity or Unreal, you might still want a third party tool to edit code with. My first suggestion is always Sublime Text 3 and again- many Windows people will have heard of this too. VSCode works on Linux, as does Atom but I'd always recommend Sublime Text 3. It runs so damn smoothly, it's so damn nice and I've been just looking for excuses to use it I get so much pleasure out of it.

But I guess failing Sublime, Atom would do just fine too.

So yeah, I think that's pretty much everything. I'll rattle off a few more useful programs- kdenlive is really useful and it's what I used for editing this video, OBS is always the king of video recording software, and LMMS is a Linux native DAW that is surely useful in the hands of someone who knows how to use it.

So thanks for watching, and stay tuned for more videos about Linux and me usin Linux to do Linuxy things in the Year of the Linux Desktop. Goodbye!

Wednesday 3 October 2018

(Temporarily) Burned Out :(

Well, I've been working on WARP-TEK almost every day for over 3 months and now I think I'm getting a bit worn down.

My first reaction to even typing such a sentence is to say that "Hey you, people work for WAY longer than that and don't get burned out! Get back to work!"

So rather than just ignore it and run the risk of one of you evil little gremlins commenting something similar, I've got a few responses to that.

The most obvious one is that gamedev is creative work, and yeah I'm sure I could work a lot longer if I was chopping logs or delivering mail. Not that there's anything wrong with those jobs of course but they're more predictable in the way that the energy you need in order to deliver mail is physical and routine rather than the creative and unpredictable energy that you need for gamedev.

Creative energy is more tricky to recharge because you can't just "go through the motions" until you get it back. It's not possible to come up with ideas if you really hate doing it, that feeling will just block the creative flow.

Once the ideas stop flowing, it's really quite tricky to make them start again. I'm sure it's possible with practice and expertise but hell, I'm not the most creative person at the best of times, compared to other people I know who secrete new ideas at every waking moment.cough cough I know you're watching thi-

But the point is, there's a distinction between the traditional 9 to 5 office job which is definitely challenging and stressful in its own ways, but it's also potentially less prone to burnout.

The next thing to note is that my brain is not the same as the most workaholic brains out there- some people do work 11 or 12 hour days on creative works and it absolutely kills them but they're still able to do it, and in some way shouldn't I try to force myself through that to get this game out there? Well, the answer's no, I shouldn't because that's real unhealthy but more importantly does NOT make a good game.

Putting in more hours does not necessarily correlate to putting more work or especially not a higher quality of work. The highest quality work comes when you are well rested and thinking positively about the project, not when you're exhausted and hate working on it.

And again, contrary to what you might think, massive quantities of low quality work - as is the case in the 12 hour work day - does NOT make up for really any amount of high quality work.

So how am I gonna fix all this? Well, the usual plan is to take a little break and focus on something else. I'll still be doing YouTube videos and I suspect this break won't even last particularly long because I do want to work on it, I just can't make myself focus or enjoy it- at the best of my abilities, I'm still putting in low quality work.

Hopefully, I'll be back in under a week or so. I've known that I've been slowly careening towards burning out for a few weeks now, and I've delayed that for as long as possible with caffeine, vitamin supplements and some more experimental things. However, these aren't permanent solutions, they're just that- delays.

Maybe I need to make this video above all to just convince myself that I'm not just being lazy when I take a break from game development, because sometimes it does feel that way- but the brain isn't necessarily a rational machine and sometimes these lessons need to be hammered in a little bit.

But if there's one lesson I can impart to you kind viewer, it would be that burnout - at least temporary burnout - is for many people inevitable, and you don't need to feel the least bit guilty about realizing it and taking steps to fix it once it's happened.

So thanks for watching, and do genuinely stay tuned for more videos because I'm still doing YouTube even if the game development side of things is stalling for a little bit. Goodbye!