spncryn/log

Menu

Month: August 2019

31082019

Sitting on the floor of a hotel room in Paris drinking a Heineken and eating canned ham out of the tin. Haven’t made any updates in the last couple of days, not even out of inconvenience but mostly just because I’ve been too tired to write anything. The most significant things I’ve accomplished in the past several days were writing a proper README for the repository (which in reality was just a direct translation of the press kit DOCX), and drawing the cover image. The latter in particular I think turned out pretty well: it exceeded my expectations in terms of how I imagined it would look (although to be honest, I actually went in with no idea how it would look) and it does a decent job of effectively capturing most of the major iconography and moods of the game.

28082019

Fleshed out the canteen UI a bit, it now displays next to the character menu, and animates properly with respect to drinking. I think it’s a bit too big but scaling it is gonna be a pain in the ass. I also think that the character menu itself is a bit off in a way that I can’t really articulate.

+ Better(?) UI for the canteen, see above for details.
? Remapped controls for interact and character menu to accommodate a greater variety of common bindings.
? Character menu can now be closed with the same key used to open it (instead of just ESC).

27082019

Cleaned up UI for character menu, added a white background + black text when highlighting items in the character menu, also changed up the options a bit to reflect streamlining of gameplay. Also implemented canteen mechanics: the player can now drink from the canteen, with responsive water capacity (mL). I’m thinking about adding an animation for when the canteen is empty.

26082019

Changing the process of accessing the pack a bit: created a new animation for opening it, and changed the access behaviour so that when Avery’s standing in front of the bag, she picks it up, and when she’s standing behind it, she opens it. The animation itself could use some work and is a bit off in terms of the alignment, but that’s something I can work on later down the line. I’m also testing a dynamic zoom function for certain actions, starting with the pack; hopefully I can get the zoom actually working properly and not looking like shit…

I’m also thinking about moving the game to revolve around a single action button instead of having multiple. What this looks like in practice is having WASD (and maybe the arrow keys, although probably not) to move, and then a single key – for now, F, but I’ll probably add more / change it later on – is used for virtually all player interactions within the environment. What that means is that actions will either be analogue (via the interaction key) or through a menu, which uses the movement (WASD) keys + the interaction key. I probably articulated all of this in a very unnecessarily complicated and drawn-out manner but it makes a lot more sense in execution. We’ll see.

+ New animation for opening pack
? Pack access behaviour changed relative to player’s position
? Added sound effects for picking up and dropping the pack
? Removed all button prompts (ie, “[F]”) in interaction text for cleaner experience
? Removed B as pack key, switched picking up / dropping the pack to the character menu instead

25082019

Sitting in a hotel room in Rome. In the past several days I’ve traveled through four countries and yet I feel nothing but profound exasperation and an overwhelming sense of exhaustion. All of the progress I felt I was making in the weeks prior to this trip is being rapidly undone the longer I stay out here – and I still have another ten days left. Well, at least the next few days will see slower movement. Hopefully I’ll have time to work more.

Lacking a proper connection as well as a consistent power source, it’s been a total pain in the ass working on anything these past few days especially. I decided to get started on the press kit, which turned out alright. No images or videos so far, obviously, but it’s a good enough foundation to build off in the future. Gotta keep busy somehow.

23082019

Onboard a train en route to Stansted. It’s been rather difficult to maintain a stable signal the past several days, let alone one that’s consistent enough to attend to all of my work: I’ve spent the past several days in a state of continuous disorientation due to all the transit and I haven’t really found the time to get work done, although I think for what little time I’ve had so far I’ve made decent progress.

I’m not sure how I’m gonna handle entries for the duration of this trip – whether I’ll update them as the opportunity arises – but for now I think what I’ll do is log per diem and then once I return home I’ll do a more comprehensive cumulative write-up in a single dedicated entry, focusing on points of note. 

Anyways…

The door now has a proper caster, as well as a dedicated animation (for both the player and the door itself) for opening and closing it. There are also sound effects as well, although at this stage they’re more just for prototyping than anything else.

+ Implemented proper shadow caster for door

+ New animation for door (door and player)

+ New sounds for opening and closing doors, and attempting to open locked doors (not used so far)

+ New sounds for footsteps on grassy, hard and muddy surfaces

+ Created new script “sound_play_pitch” for repeating sounds with on-the-fly pitch changes (ie, footsteps)

+ Created new script “sound_lowpass” to shift between regular and low-pass audio.

? Renamed “sound_play” to “sound_play_3d” for more precise description

? Stones, sticks and tall grass are now automatically deleted if in contact with interiors to prevent clipping

? Changed the shadow mask on the cabin to more accurately reflect visibility via a window in the front

? Being in an interior now also displays a cutout of the front wall, specifically highlighting the location of doors and windows

18082019

Gonna be spending the bulk of tomorrow in transit to London, which means I had to pack up all my stuff. I worked almost entirely on audio today and specifically on implementing a low-pass filter on rain when the player is indoors. I set up a pretty flexible crossfade system that works very effectively and I’ve also begun using it for the overall forest soundscape as well, moving between day/night ambience. Speaking of, I changed those sound effects to quieter, less wind-heavy tracks, and converted all the ambient audio files over to OGG to further reduce size on disk and memory footprint. I’m feeling pretty good about the audio right now; when I return (on 3 September…) I’ll have to make sure to get new recordings for moving through brush and maybe even footprints, although that might require better equipment to which I don’t currently have access anymore. Well, I’ll figure it out then.

Staoue came over today and we spent some time by the lake and then we went to the high school, where we passed the time lying down and watching the sky as the storm moved in. It looked like a massive, dark wave surging towards us and it made me feel uncomfortable but having a friend by me made it a worthwhile experience. We talked about high school – it seems like that’s all I ever talk about these days when I meet my friends, but we do talk about other stuff – and girls. I’ve been feeling real nostalgic lately. It’s not that I want to be back in high school: things were just much more straightforward back then. Everyone was just put there all together, and you never had to really reach out and find people: they were just there and all you had to do was find some common ground and all of a sudden you were great friends and you felt something in common with them. There was a clear and palpable understanding of the future and even if it looked totally empty, the sense of a schedule gave the days a kind of structure and intertia towards which we constantly stumbled and occasionally hurtled. 

It’s much harder now though. 

Everybody’s either gone away or they’ve all got their own goals now and I can’t relate to so many of them. Going out to see them or to meet new people costs money that I don’t have and can’t make. Even if I were able to meet them, I don’t know if we’d have much to talk about anymore: in the lack of common interests, there are no more shitty assignments to bemoan, no more teachers to mess around with, no more rumours to piss away the time. All that’s left to us to share is this creeping sense of uncertainty about ourselves, our futures, where we’re headed as individuals and as a nation and as a species. I know that sounds really dramatic, but really, it’s actually quite banal. And that’s the saddest part. We think we’re becoming mature, you know, we’re becoming adults or whatever and learning how to deal with “the real world” – but actually, we’re just growing more cynical, more indifferent towards and even accepting of the casual cruelty of the world. That makes me really sad. I don’t want to get used to being swept away. I don’t want to see my friends get used to being swept away either. But I’m afraid we already have.

17082019

Didn’t do any work today but I met up with an old friend from high school and we got some ice cream and sat in the park and then we went back to her place where we (mostly I) drank so much that I threw up in her basement bathroom twice and then we talked for a long time about those bygone years. It was nice seeing her again after all this time. I missed her more than I realised.

16082019

Finally got around to implementing the grouped prefabs I mentioned in yesterday’s post for the grass. It works very well and although the dispersion pattern could be significantly improved and the wind pattern tweaked a bit the tall grass now works as intended. Other than the aforementioned tweaks, the only things I can really think to add are mild particle effects for various leaves and such blowing off when the player passes through into the wind. I think tomorrow I’ll work on that as well as particle effects in general. 

+ Tall grass, with randomised dispersion and player/wind-based motion.

+ Added ambient soundscapes for the forest during both night and day.

? Slightly sped up the speed at which rain accumulates during transitions. 

? Significantly increased (5s to 20s) the time it takes for ambient soundscapes to fade in during transitions.

? Doors now have proper shadowcasters blocking and opening FOV when respectively closed and open. They also have slightly more legible sprites.

15082019

Hung out with Sawyer today and watched both Blair Witch films (that is to say, the original and the 2016 remake). They were both much better than I remembered, and I had pretty good memories of both of them. Watching them definitely helped me get a much better idea of how to handle certain elements of My Work Is Not Yet Done.

Speaking of which, I finally managed to implement the rest of the door, however half-assedly, which still needs a proper shadowcaster and animation (maybe a good sound effect would suffice in place of the animation) but is otherwise working as intended; and I started work on denser grasses featuring wind animation which proved to a much bigger pain in the ass than I expected. 

That being said though I think I’ve finally solved the main issue – smaller grasses were animating way too fast – although tomorrow I think I’m gonna try a new solution where I’ll separate each individual blade of grass into an object, create a bunch of what are essentially prefabs of grass clumps with those blades clustred together in various configurations, and then spawn the prefab objects rather than the sprites themselves. It’ll be pretty annoying to set up at the start but I think it’ll have a very positive impact on the appearance of the grasses overall. Hopefully though it won’t dig in to the performance too much, which is something that I’m already beginning to worry about: I noticed today that in some areas the framerate dips down to around 16 or so, which is completely unacceptable for a game that already runs at 24fps to begin with. I’ll definitely have to take a deeper look into optimisation. Maybe I’ll work on that next week on the plane…

14082019

I didn’t do much today either but at least I got the door done. It’s real primitive right now – interacting with it basically just toggles the visibility of it at the moment – but hopefully I can improve it in the coming days. The ideal goal is to be able to gradually open it on the hinge so that the player can peek out of the door slightly if necessary; however, I’m not sure if the lighting solution I’m using currently supports casting at an angle (or any kind of dynamic caster manipulation, at that) but if it doesn’t, I suppose this will have to do… it’s not all that bad to be honest, just lacking compared to what I originally envisioned it could be. But then again, if we were to start judging things by what they could be…

13082019

I woke up thinking I was gonna get stuff done today but in fact I just sat at my computer and did nothing. I don’t even know if I had any plan for today – I probably didn’t – but tomorrow, I’m gonna work on the door + shadow masking for it, and maybe start on some furniture. 

Nic’s article about Midnight Animal came out today, you can read it here. I still have yet to read it – an odd mixture of feelings – but from what I’ve heard he did a very good job with it and the overall reception has been overwhelmingly positive, so I’m glad that it turned out well for both of us. I’ll probably read it at some point tonight…

12082019

Spent all day messing around with various lighting systems across all different kinds of implementations – shaders, surfaces, straight-up line traces – before finally arriving at a solution I’d already been using for over a month now (albeit for different purposes). I’m using a slightly modified version of this lighting system now to simulate FoV in interiors, and it works really well for my purposes because it’s pretty lightweight and slots in really effortlessly without too many changes to any other things.

The one thing I did have to change though was the grass, which I was planning on changing eventually anyways because before I was using a paid extension off of the GM Marketplace. Since both the lighting and the grass rely on vertex buffers, which I know literally nothing about, they broke one another’s functionality so I decided to remove the less critical one. I’m now generating all of the grass as objects, with a single draw pass in the master draw event. It looks basically identical to before although I’ve lost the slight animation for the wind effect; I’ll mess around with some shaders or even hand-animated sprites maybe at some point, I’m not too worried about it. 

I haven’t noticed any major performance dips which is what I was originally concerned about, but also, I have noticed pretty significant dips (down from the fixed 24 to around 18 or so) although I haven’t been able to identify the exact cause. I was also recording footage though when I noticed the dips and I think the game’s been running on the integrated chip this whole time, so if that turns out to be the issue, it’s not too much of a concern. I’ll still take a look at optimising everything later on down the line, but as they said, never pre-emptively optimise if you can help it…

11082019

Spent the entire day (up until now, which is 0330, actually) working on implementing a prototype interior space – a cabin, yes, my imagination runs short – and for all intents and purposes, it basically works right now. Basically, all interior spaces can now be rendered in the world space rather than in their own simulated internal cells. What this means in practicality is that I can now have full real-time events happen seamlessly in the world without loading in between different rooms (ie, entering / exiting interiors); the player will also be able to see through windows and doors into the actual external environment, which vastly opens up my opportunities.

There are still some minor collision overlaps that I have to fix and there’s as of yet no furniture (I’m sure that’ll be a separate issue all on its own, which I’m not at all looking forward to dealing with tomorrow), but in terms of all the basic functionality it works as intended, however annoying it was to assemble and subsequently disassemble everything onto different layers and depths. Honestly, if I had known from the start just how much of a pain in the ass all of this actually would take to implement, I probably would’ve never even considered it to begin with. Now that I’m here though, there’s really no turning back…

+ Created modular layers for building (cabin)

+ Created new room (rmCabin) for testing modular interior

+ Added four additional parent classes specific to buildings: BUILDING, FURNITURE, ROOF, INTERIOR

? Created parent object for items named ITEM, containing the children STICK and STONE (no actual event behaviour, just a holder object)

? Created script draw_self_visible as a replacement for draw_self; because pretty much everything is being drawn in DEPTH_SORTER’s master draw event, the “visible” property is ignored; draw_self_visible is basically just a draw_self that takes “visible” into account

Here are some things I still need to add, as well as things I’d like to implement:

– Functional door

– Interactive furniture

– Dynamic field of vision to black out the exterior space and make windows and doors functional (ie, the player can see outside of doors and windows but not walls)

– Global shadow mask for entire house 

– Hide rain overlay in interiors

10082019

Started working on animations for firestarting this morning but then for whatever reason I felt that I no longer wanted to do that today so instead I just started worked on implementing interiors. I mostly just worked on visuals today – nothing to push to the server – because I’m still undecided as to whether I want each interior to be contained within the world space in a continuous manner, or to exist as its own discrete room separate from the world within its own space. 

The latter definitely presents me with a lot more flexibility when it comes to certain things – namely, I wouldn’t have to use a surface to occlude the exterior when the player is in the interior space – but it also means that I would have to move the player to an entirely new room while saving the exact state of the previous one, which is kinda annoying since I haven’t built a save system yet to save and track the state of each room (something else I have to do…), so I’d have to do the latter before the former. 

I think I’ll start tomorrow by trying out the former option – continuous interior spaces – with layered floor, furniture and ceiling indices that are de/activated upon contact with the player. Hopefully it goes smoothly and without any major difficulties; but you know how it is with these things…

09082019

Didn’t work on anything today; but to be honest, I didn’t even really try. I hung out with Haolun last night until 0400 or so and then I fell asleep, woke up for a few hours and hung out on Jacob’s stream, then I fell back asleep again and experienced a really strange and disturbing dream until I woke up once again at 1600. After that I realised that I’d basically get no work done even if I tried so instead I spent some time reviewing the week’s activities and figuring out what to do next week. Basically, I need to finalise my decisions on how the firestarting minigames will work, and then I need to actually build them (or at least merge them into the main build). 

Once I finish that, I should work on redesigning the backpack and inventory UI; I’m not that satisfied with the ALICE diagram anymore and I’m thinking about moving towards something like an SSO/SPOSN Attack 2 or even a Veshmeshok instead. I like the look and idea of the external frame and all the pouches but… something about it just doesn’t feel quite right at the moment. I’d also like to add a diegetic animation for opening and closing the bag.

08082019

Spent the day sitting outside recording audio of wind and leaves. It was a very nice day outside today and although I think it’s gonna rain very soon I’ve gotten a wide range of audio samples that should cover most of my ambient environmental needs. I’m gonna spend some time mixing them a bit more tomorrow but I was able to build in the backend for the audio system today. It works exactly as intended and was pretty straightforward to set up.

+ Added audio files for heavy rain, light rain and the fire.
+ Implemented flexible backend for positional 3D audio, as well as seamless blending for sounds.
? Fixed an issue with the light rain state where no rain was actually falling during the entire state.

07082019

Today was pretty productive, despite having finally gotten out of bed at 1600(!) following a long and vaguely uneasy rest. I was able to add both the sticks and the stones as I planned (well, two days ago…) via a pretty flexible and efficient spawner, and all the code for interacting with them and picking them up is modular enough to be easily adapted to any other object down the line. The firestarting is almost done – the last of the work is UI stuff, which is admittedly pretty involved but I’ll cross that bridge once I get there (which I guess is now) – so hopefully I’ll be able to have some new stuff to share come Saturday.

+ Added sticks and stones as interactive objects in the environment
+ Modular spawner (spawn_item) that spawns a certain number of an object without overlap in a room
? Implemented shorthand version of player_pack_add script that takes only the object name as a string for the argument
– Removed fire hole (a bit redundant, and the sprite looked like shit anyways)

Just since starting this project alone, I feel like I’ve become a much more competent programmer these past few months. In fact, I would even admit that I developed more as a programmer in the last four months than I have in the last four years: although of course, hindsight, as they say, is 20/20 and learning tends to function on a curve, so maybe I’m just going too hard on myself (the circumstances were much different back then as well).

In other news, I came across this thread on Twitter which perfectly encapsulates the exact kind of mentality I wish I could embody. I think sometimes I’m genuinely able to feel this to some degree, like I’m right on the cusp of realisation; but always, something or someone comes up that causes me to slip. I suppose that’s the entire point: that a person must never lose sight of the good in both others and himself, especially when under pressure. Anyone can feel good when the times are good, after all. But these are especially testing times. For all my platitudes and supposed convictions, I don’t think I have the strength to be a better person, let alone a good one. But I have to try. That’s the least I can do for both others and myself.

image

06082019

Sawyer and I went to see Hobbs & Shaw today and I think it was exactly what I needed in my life right now: a fun, hopelessly positive and feel-good film about the value of friendship and forgiveness and family. Afterwards we got some ice cream and sat at the station and it was a remarkably pleasant evening, and looking up at the clouds I felt an immeasurable sense of optimism and good faith swelling within me, and it made me feel deeply at peace for some time. That all probably sounds horribly cliched and I’ll straight-up admit that it definitely is; but it doesn’t matter, because it felt profound in the moment and besides, nothing’s a cliche when it’s happening to you.

I didn’t get much work done today, and I don’t know if I necessarily feel more motivated, but that’s okay. I feel much better equipped to handle my work tomorrow. 

05082019

Didn’t actually end up adding the sticks and stones today, but I did implement a sort function for the inventory, which allows the player to sort between the name, type and quantity of the items. Nothing significant, just a nice QoL feature.

04082019

Got some work done today, although nothing substantial enough to push as a full change. Still working on the campfire: I adjusted the collision detection for interaction on both the campfire and the backpack as to be a little bit smaller and more natural (ie, for the campfire, the player has to be standing above it, and the for the backpack, the player has to be standing below it). Tomorrow I’ll work on adding in gathering for the sticks and stones. It should be pretty straightforward and basic and I don’t imagine I’ll run into any complications but… you never know.

03082019

The fire pit now must be assembled manually, in three parts:

1. Foundation: laying stones around the base of the fire to contain it.
2. Firebed: laying tinder and fuel within the pit.
3. Ignition: igniting the fire using a starter.

Not implemented, but planned: the first stage requires the player to gather and place a dozen stones by hand from the environment. The second stage requires the player to gather and place about four pieces of tinder (+accelerant) from the pack. The third stage requires the player to ignite the fire using a starter from the pack. There will be a chance that the fire will fail to catch, in which case the player is given another try with one unit of the starter consumed.

+ New state and animations for picking up / placing objects
+ sprFirePit has many new indices
+ The fire pit is now a placeable object rather than fixed.

02082019

I didn’t actually work on any of the games today but instead I stayed up until about 0600 last night (alternately, this morning) redesigning and finetuning this site. I feel like it’s now a lot more professional and presentable without compromising my overall tone. I think I’m gonna start listing this as my primary site with a redirect to the GitHub page as a portfolio. 

Of course, that means I actually have to expand the design of the GitHub page accordingly… It shouldn’t be too much of an issue but I don’t have much content on it currently. I’m thinking I’ll store some of my more long-term pieces there though for posterity’s and portfolio’s sake, and focus on developing more as a comprehensive showcase for my work than as a portal, which is what it basically is right now. 

(I have to admit though, at this point I can’t help but wonder if deep down inside that I’m building all these new sites for myself just so I can experiment with new builds and designs…)

01082019

I can’t believe it’s already August. I stepped outside just now to look at the sunset only to realise (too late) that the mosquitoes have come out in full force. Thankfully though at least both the heat and the humidity have subsided significantly. 

Speaking of which, I missed yesterday’s post because it was just too hot and humid and top of that I didn’t even get any work done because I was too preoccupied with adjusting the positioning of my fan. I mostly just worked on some item descriptions – the firestarter kit, ironically – although I didn’t make too much progress overall.

Today was a much more productive day though and I got a respectable amount of actual content done, as well as planning for the next several days.  I completely redesigned the layout and structure of the areas, which started with significantly reducing the size of the rooms, from 2048×2048 (grass: 50k) to 480×480 (grass: 5k). Before, the idea was to have a bunch of larger rooms chained together, but now I think it’s a far better idea (both design-wise and technically, since the pixel jittering on horizontal camera movement is too much of a pain in the ass to work through) for the game to feature a bunch of smaller rooms, some containing locations of interest, chained together instead. Each room has a designated “level” (right now, there are five of such levels) that dictates the chance of them appearing upon a room transition. 

I’m not gonna talk too much about the specifics of how this functions right now because a) I’d like it to be somewhat of a surprise and b) I haven’t figured out the exact details of its structure yet but I do believe that it’ll significantly improve the gameplay overall. In a broad sense, I believe that it allows for much more variety at a more respectable pace (instead of forcing the player to wander around a massive area) and creates a greater sense of disorientation for the player, which is in this case a good thing.