changed routes of devlog entries to new year-group system and adjusted resource paths accordingly

This commit is contained in:
2025-07-13 17:47:33 +02:00
parent fbc32be54f
commit 168e526fd8
224 changed files with 227 additions and 231 deletions

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2023-09" subtitle="" banner="/projects/projectn5/devlog/previews/202309.webp" />
<BannerTitle title="Project N5 Progress Update: 2023-09" subtitle="" banner="../../previews/2023/09.webp" />
<p>My progress in September 2023. Updates are shown in chronological order.</p>
@@ -18,83 +18,83 @@
<h2>One Small Step</h2>
<p>A character has been added and the player can control them! It's influenced by gravity too, although it falls at an unnaturally rapid rate when thrown off the edge. This is because the downward velocity kept increasing even when grounded, and is fixed in a later version. Also, the character faces the wrong direction; moving forward results in the character facing the camera instead of forward. This is fixed once I replaced the character model with one where it's more obvious which side is forward.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-16_00.mp4" />
<Video src="2023-09-16_00.mp4" />
<h2>Gravity Functions As It Should</h2>
<p>Gravity is fixed, and the camera angle has been adjusted, though not fixed to the character yet. It's kind of funny watching this little character move around.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-16_01.mp4" />
<Video src="2023-09-16_01.mp4" />
<h2>Look Where You're Jumping!</h2>
<p>The character can jump! Jump height is set unnaturally high as a test. The player can double jump, but only from a grounded state; falling off a cliff counts as the first jump, thus only allowing the player to jump once. Also, gravity is broken again. Also, a player-controllable camera! This was implemented with a custom third person camera plugin, which proved to be a bit jumpy.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-16_02.mp4" />
<Video src="2023-09-16_02.mp4" />
<h2>A Better Camera</h2>
<p>The camera system has been replaced! This implementation simply uses <code>SpringArm3D</code> with a <code>Camera3D</code> as its child. This allows for the camera to not clip into walls (though it really likes clipping into the floor for some reason), and overall feels much more responsive. Not just that though the player's movement input is now adjusted to where the camera points! When the player presses forward, they are now moving in the direction the camera is pointing. Previously, movement was independent from the camera's rotation, which of course wouldn't make sense for a game like this.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-16_03.mp4" />
<Video src="2023-09-16_03.mp4" />
<h2>Helicopter Ratchet</h2>
<p>character go spinny</p>
<p>The pause menu also makes a brief cameo! It's designed in a very simple way, and meant to replicate the pause menu from Ratchet & Clank 2002 while being legally distinct!</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-23_00.mp4" />
<img src="/projects/projectn5/devlog/202309/2023-09-23_01.webp">
<Video src="2023-09-23_00.mp4" />
<img src="2023-09-23_01.webp">
<h2>A Gun</h2>
<p>The gun can shoot! Or can it? Well, the bullet doesn't exactly move…</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-24_00.mp4" />
<Video src="2023-09-24_00.mp4" />
<p>Bullets have been converted into <code>RigidBody3D</code> which is great for collision but unfortunately initialises the bullets to be affected by gravity. Since the bullets are also parented to the player, it means that the fallen bullets move with the player. I don't think that's how guns are supposed to work.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-24_01.mp4" />
<Video src="2023-09-24_01.mp4" />
<p>The gun now shoots properly! Not only do the bullets fly, but they fly in the correct direction as well! This is possible thanks to simple vector math, as the only thing needed to calculate a velocity vector for the bullet is to put two nodes on the gun, one at the front (where the bullet will fly from) and one further back, and calculate a vector between the two nodes!</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-24_02.mp4" />
<img src="/projects/projectn5/devlog/202309/2023-09-24_03.webp">
<Video src="2023-09-24_02.mp4" />
<img src="2023-09-24_03.webp">
<h2>Dialogue</h2>
<p>The game now supports talking with NPCs. I only implemented this because I thought of something funny and I wanted to put it in the game.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-25.mp4" />
<Video src="2023-09-25.mp4" />
<h2>Conversation Camera</h2>
<p>There's now a special camera angle for conversations with NPCs! Unfortunately, as the camera is bound to the player, and the player's position is unmodified when entering a conversation, this can result in blocking the NPC, or even facing a different direction entirely how rude!</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-28.mp4" />
<Video src="2023-09-28.mp4" />
<h2>Don't Waste Your Ammo!</h2>
<p>Guns now have ammo counters! They can only fire for as long as they have ammunition left as it should be. Unfortunately, unloading bullets unto Sans does nothing.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-29_00.mp4" />
<Video src="2023-09-29_00.mp4" />
<h2>Smooth Player Movement</h2>
<p>Using <code>lerp()</code> as well as <code>lerp_rotation()</code>, the player's movements are now smoother than before! The character rotates smoothly whenever pointing in a given direction and when strafing. Furthermore, the character now has a slight acceleration and deceleration in their movement.</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-29_01.mp4" />
<Video src="2023-09-29_01.mp4" />
<h2>Language Options</h2>
<p>The game now supports English and German as language options! Godot makes this very easy. All that's needed is to create a table with keys and the corresponding translations, export it as CSV, add them to the game (and don't forget to add the generated translation files in the project settings as well!), and then use <code>TranslationServer.setLocale(locale)</code> to set the language whenever needed game defaults to English <code>en</code>. For UI elements, supplying the key in the text field suffices, and for strings in script, use <code>tr(key)</code>. Easy as that!</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-30_00.mp4" />
<Video src="2023-09-30_00.mp4" />
<h2>Imposing dominance</h2> <!-- get it? -->
<img src="/projects/projectn5/devlog/202309/2023-09-29.webp">
<img src="2023-09-29.webp">
<h2>Learning to Model and Rig a Character</h2>
<p>today's task: modelling and rigging a character from scratch</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_01.webp">
<img src="2023-09-30_01.webp">
<p>(Ratchet for scale)</p>
<p>whaddya lookin at pinhead</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_02.webp">
<img src="2023-09-30_02.webp">
<p>is it a bird? is it a plane? no, it's arms</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_03.webp">
<img src="2023-09-30_03.webp">
<p>*Mii Maker theme intensifies*</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_04.webp">
<img src="2023-09-30_04.webp">
<p>feet are difficult</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_05.webp">
<img src="2023-09-30_05.webp">
<p>yoooo actually, not half bad</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_06.webp">
<img src="2023-09-30_06.webp">
<p>that one might hurt</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_07.webp">
<img src="2023-09-30_07.webp">
<p>we have a character!!</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_08.webp">
<img src="2023-09-30_08.webp">
<p><i>we've been rigged!</i></p>
<Video src="/projects/projectn5/devlog/202309/2023-09-30_09.mp4" />
<Video src="2023-09-30_09.mp4" />
<p><code>we come in peace</code></p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_10.webp">
<img src="2023-09-30_10.webp">
<p>brief texture troubles</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_11.webp">
<img src="2023-09-30_11.webp">
<p>my character is now a playable character</p>
<img src="/projects/projectn5/devlog/202309/2023-09-30_12.webp">
<img src="/projects/projectn5/devlog/202309/2023-09-30_13.webp">
<img src="2023-09-30_12.webp">
<img src="2023-09-30_13.webp">
</Content>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2023-10" subtitle="" banner="/projects/projectn5/devlog/previews/202310.webp" />
<BannerTitle title="Project N5 Progress Update: 2023-10" subtitle="" banner="../../previews/2023/10.webp" />
<p>My progress in October 2023. Updates are shown in chronological order.</p>
@@ -18,52 +18,52 @@
<h2>Implementing RigidBody3D Character Movement</h2>
<p>Today's task: reimplementing my player character as a <code>RigidBody3D</code>. In the example below, it is using <code>CharacterController3D</code>. I wanted to make this change to get more natural feeling movement and physics, particularly in carrying momentum.</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-03_00.mp4" />
<Video src="2023-10-03_00.mp4" />
<p>oops i've had a bit of a tumble</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-03_01.mp4" />
<Video src="2023-10-03_01.mp4" />
<p>This is the result of the <code>RigidBody3D</code> implementation in my character. I used a script from the following video, which served as a great base the only good one I could find, in fact. Most people on the internet seem to want others to use <code>CharacterController3D</code>, and for good reasons; it's simple, it works, and it's easy to adjust and tweak, unlike a <code>RigidBody3D</code>. And so I had to admit: I wasn't happy with my implementation. I changed the script in large parts, only keeping a few segments, but it never felt quite like I wanted to. It felt too loose.</p>
<p><a href="https://www.youtube.com/watch?v=ZLTYlZgZc-0&t=986s">Godot 4.0: I solved my CharacterBody3d issues by using RigidBody3d for character movement!</a></p>
<Video src="/projects/projectn5/devlog/202310/2023-10-03_02.mp4" />
<Video src="2023-10-03_02.mp4" />
<p><code>RigidBody3D</code> also greeted me with some bugs I had encountered in Unity but was initially spared from when I switched to Godot and its <code>CharacterController3D</code> implementation. A significant issue was the double jump; the character would often not be able to recognise that it had been grounded, and thus it would not allow the player to jump again. Another issue was glitching; the video shows how the character sinks into the ground briefly before jumping up. I have no idea why this happened.</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-03_03.mp4" />
<Video src="2023-10-03_03.mp4" />
<p>Using a momentum-based character also introduces the issue of sliding up slopes and ramps with the carried momentum a little more than I would like.</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-03_04.mp4" />
<Video src="2023-10-03_04.mp4" />
<p>And so, after 10 hours of implementing RigidBody3D, I decided to go back to CharacterController3D. I played a bit of Ratchet & Clank for reference, and decided that they might be using a <code>RigidBody</code> implementation (did a <code>CharacterController</code> even exist back then? Did their engine support that even?), but I could get closer to their movement more easily using a <code>CharacterController</code> and emulating a few momentum-based movements using <code>lerp</code>s.</p>
<p>The effort was not in vain, however! I implemented the ground <code>RayCast</code> that was necessary for my <code>RigidBody3D</code> implementation in my <code>CharacterController</code>, which, together with a plane calculation, allows for adjusting the character movement velocity when moving on slopes! This corrects the player's uphill speed, and it also prevents jumpy movement when running down a slope! It's currently a little glitch-prone though, crashing the game when standing on Sans, for example, but I'll fix that soon.</p>
<h2>Healthy</h2>
<p>We now have health points! As it is currently set up, the health bar supports up to 8 health points. For testing purposes, I set up the melee attack to drain health, and the gunshot to heal the player.</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-07_00.mp4" />
<Video src="2023-10-07_00.mp4" />
<p>The health bar even aligns properly for 5 and 6 max health points, reducing the max points displayed per line from 4 to 3!</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/202310/2023-10-07_01.webp">
<img src="/projects/projectn5/devlog/202310/2023-10-07_02.webp">
<img src="2023-10-07_01.webp">
<img src="2023-10-07_02.webp">
</div>
<h2>What Are the Controls??</h2>
<p>We have a controls screen! This task would have been easier if the game was specific to a console, thus necessitating only one controller layout. Instead, I used Godot's <code>Input.get_joy_name()</code> function to retrieve the first connected controller's name, and use that to display an appropriate screen. Current options are PlayStation (DualSense), Xbox (Series X/S), and Nintendo (Switch Pro Con). Keyboard/Mouse layout will follow soon(ish).</p>
<p>Specifying controller layouts for different controllers is difficult though, since I don't know the controller's names (I currently only have the following strings: “PS5 Controller”, “XInput Gamepad” (through emulation using DS4Windows), and “Nintendo Switch Pro Controller”).</p>
<p>Another difficulty is figuring out which controller layout to show if multiple controllers are connected, or when KBM is used even though a controller is connected. I currently check for the first connected controller, which means that, if multiple controllers are connected, the layout shown may be wrong. Furthermore, connecting a controller always overrides the KBM layout, since KBM is currently the default. A solution to this may be to check which controller last sent an input, and retrieving that controller's name.</p>
<img src="/projects/projectn5/devlog/202310/2023-10-10_00.webp">
<img src="/projects/projectn5/devlog/202310/2023-10-10_01.webp">
<img src="/projects/projectn5/devlog/202310/2023-10-10_02.webp">
<img src="2023-10-10_00.webp">
<img src="2023-10-10_01.webp">
<img src="2023-10-10_02.webp">
<h2>Quick Select</h2>
<p>I've done some work on the quick select menu to get it functional. The goal is to emulate its behaviour in the Ratchet & Clank games (duh). Current functionality is as follows:</p>
<p>The Quick Select menu opens when the E key (keyboard) or the North face button (controller) is pressed, and closes once the button is released. Using the Keyboard/Mouse control layout, the player is able to pick a weapon by hovering over it. The focussed weapon is equipped once the Quick Select menu is closed. Controller users point the left stick in the desired direction to focus on an item.</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-14.mp4" />
<Video src="2023-10-14.mp4" />
<h2>Heavy Weaponry</h2>
<p>In order to get started with the 3D models I'll need to create for the game, I attempted to begin the process of modelling the weapon of the protagonist! It's supposed to become a battle axe, though I have not yet finalised whether I'll keep with the idea.</p>
<div class="horizontally-centre-aligned width-restricted">
<img src="/projects/projectn5/devlog/202310/2023-10-22_02.webp">
<img src="/projects/projectn5/devlog/202310/2023-10-22_04.webp">
<img src="/projects/projectn5/devlog/202310/2023-10-22_05.webp">
<img src="2023-10-22_02.webp">
<img src="2023-10-22_04.webp">
<img src="2023-10-22_05.webp">
</div>
<h2>Hot, Fresh Quality</h2>
<p>In order to test animation and rigging of arbitrary 3D models, I created these bread-centred animations. This obsession with toast came to me after a friend of mine and I took a test that determined <a href="https://www.buzzfeed.com/mathewguiver/which-type-of-bread-are-you">which type of bread we are</a>. Despite vastly different answers, our end results were both 'vegan biscuit.'</p>
<Video src="/projects/projectn5/devlog/202310/2023-10-25_00.mp4" />
<Video src="/projects/projectn5/devlog/202310/2023-10-25_01.mp4" />
<Video src="2023-10-25_00.mp4" />
<Video src="2023-10-25_01.mp4" />
<p>I like my bread with bones, <i>thank you very much.</i></p>
<img src="/projects/projectn5/devlog/202310/2023-10-25_02.webp">
<img src="2023-10-25_02.webp">
</Content>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2023-11" subtitle="" banner="/projects/projectn5/devlog/previews/202311.webp" />
<BannerTitle title="Project N5 Progress Update: 2023-11" subtitle="" banner="../../previews/2023/11.webp" />
<p>My progress in November 2023. Updates are shown in chronological order.</p>
@@ -20,55 +20,55 @@
<p>Lots of progress on the 3D models! I modelled the first weapon for the game, the N5 Blaster, from start to finish!</p>
<p>The earliest version was based on an 8-sided cylinder. After some feedback from friends, I remade the weapon, using a 16-sided cylinder, and also adding more details to the weapon overall. More attention went into the grip, which now resembled a weapon grip more so than a stick.</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/202311/2023-11-05_00.webp">
<img src="/projects/projectn5/devlog/202311/2023-11-03_01.webp">
<img src="/projects/projectn5/devlog/202311/2023-11-05_03.webp">
<img src="2023-11-05_00.webp">
<img src="2023-11-03_01.webp">
<img src="2023-11-05_03.webp">
</div>
<p>Here's an overview of the first model.</p>
<Video src="/projects/projectn5/devlog/202311/2023-11-03_00.mp4" />
<Video src="2023-11-03_00.mp4" />
<p>The final version of the weapon layers a black wireframe on top of the icosphere, so that in the game it's a bit more clearly visible that it rotates, and it uses smooth shading. I was against using smooth shading initially, as I wanted to go for a low-poly artstyle, but I think that approach just looked a bit cheap, considering my 3D models aren't exactly high-quality by themselves. Smooth shading gives the impression of smooth, high-poly models at a significant reduction in vertices.</p>
<img src="/projects/projectn5/devlog/202311/2023-12-11.webp">
<img src="2023-12-11.webp">
<p>Here's the icon for the N5 Blaster that's to be used in the quick select menu, the item menu, and the HUD. The icon will be tinted in different colours when the weapon has been levelled up.</p>
<p>In my first attempt at creating this icon, I took a picture of the wireframed icosphere that's in the weapon, and I tried to vectorise it using Inkscape. That didn't work the way I wanted, so I hand-traced all the lines from the icosphere. I was confused as to why it's not symmetrical, but I later realised that that's just how the icosphere looks.</p>
<img src="/projects/projectn5/devlog/202311/n5blaster_icon.webp">
<img src="n5blaster_icon.webp">
<p>I also continued work on the battle axe, giving it more character. It's still not close to being finished, but it's now a bit less of a rough draft.</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/202311/2023-11-01_01.webp">
<img src="/projects/projectn5/devlog/202311/2023-11-01_06.webp">
<img src="/projects/projectn5/devlog/202311/2023-11-01_09.webp">
<img src="2023-11-01_01.webp">
<img src="2023-11-01_06.webp">
<img src="2023-11-01_09.webp">
</div>
<p>I will admit though that I'm unsure whether I'll actually stick with the battle axe as the protagonist's main melee weapon.</p>
<p>Another idea, though more as an unlockable extra, is Derek the crowbar.</p>
<img src="/projects/projectn5/devlog/202311/2023-11-06_02.webp">
<img src="2023-11-06_02.webp">
<p>I also worked on the upgrade for the N5 Blaster, the N5 Cannon. Progress on that one has been a bit slow, since I have yet to figure out what kind of weapon I want the upgraded version to be.</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/202311/2023-11-12_04.webp">
<img src="/projects/projectn5/devlog/202311/2023-11-12_02.webp">
<img src="2023-11-12_04.webp">
<img src="2023-11-12_02.webp">
</div>
<p>And, as a bonus, here's the discarded, very-early-WIP draft I created for a rifle-type weapon. I don't think this type of weapon fits the type of game I'm making.</p>
<img src="/projects/projectn5/devlog/202311/2023-11-12_00.webp">
<img src="2023-11-12_00.webp">
<p>And a draft of a rocket launcher with 9 barrels! This is heavily inspired by the <a href="https://ratchetandclank.fandom.com/wiki/R.Y.N.O._(2002_game)">R.Y.N.O. from Ratchet & Clank</a>. It's coloured blue because I was investigating issues with the mesh's normals at the time.</p>
<img src="/projects/projectn5/devlog/202311/2023-11-02_01.webp">
<img src="2023-11-02_01.webp">
<h2>A Star is Born</h2>
<p>I begun modelling my protagonist! I didn't progress far, as I currently lack a vision for where I really want my character to go in detail. I have slight ideas inspirations are, for example, <a href="https://hero.fandom.com/wiki/Merc_and_Green">Merc & Green from Ratchet: Gladiator</a>, and <a href="/projects/projectn5/devlog/202311/denholm.webp">Denholm Reynholm</a>. I quite liked the idea of having glowing tubes on the character's back; I got the inspiration from a Blender tutorial that was randomly recommended to me one morning.</p>
<p>I begun modelling my protagonist! I didn't progress far, as I currently lack a vision for where I really want my character to go in detail. I have slight ideas inspirations are, for example, <a href="https://hero.fandom.com/wiki/Merc_and_Green">Merc & Green from Ratchet: Gladiator</a>, and <a href="denholm.webp">Denholm Reynholm</a>. I quite liked the idea of having glowing tubes on the character's back; I got the inspiration from a Blender tutorial that was randomly recommended to me one morning.</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/202311/2023-11-11_05.webp">
<img src="/projects/projectn5/devlog/202311/2023-11-12_01.webp">
<img src="2023-11-11_05.webp">
<img src="2023-11-12_01.webp">
</div>
<p>i love</p>
<Video src="/projects/projectn5/devlog/202311/2023-11-11_09.mp4" />
<Video src="2023-11-11_09.mp4" />
<h2>Real-World Testing</h2>
<p>On a whim, I decided to import the N5 Blaster's model into my game. Doing that was honestly quite the motivational boost at the time, as it visualised my progress. I could actually play <i>my game</i> with <i>my weapon!</i> It's not finished at all, it has no proper mechanics implemented other than the shooting copied from the Purple Gun, and the glass is also not actually transparent.</p>
<Video src="/projects/projectn5/devlog/202311/2023-11-21.mp4" />
<Video src="2023-11-21.mp4" />
<h2>Inventory System</h2>
<p>I implemented an inventory system somewhat akin to Ratchet & Clank's. It shows the weapons the player has acquired, previewing the model in a 3D sub-viewport. Later, it will also show the weapon's name, remaining ammo, perhaps statistics such as damage, and a description. But that's a task for later.</p>
<p>The only reason that the Purple Gun as well as the N5 Blaster show up multiple times is because I wanted to test all inventory slots, and I didn't have any weapons other than those two implemented.</p>
<Video src="/projects/projectn5/devlog/202311/2023-11-24.mp4" />
<Video src="2023-11-24.mp4" />
<h2>My Best Friend JSON</h2>
<p>It might seem simple (or look complicated), but I came up with the idea of creating a JSON-based lookup table for the weapon metadata. Using this, it's quite easy to retrieve any kind of information about any kind of weapon without needing to hardcode it into the weapon itself. Here's an early screenshot of the lookup table.</p>
<img src="/projects/projectn5/devlog/202311/2023-11-25.webp">
<img src="2023-11-25.webp">
</Content>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2023-12" subtitle="" banner="/projects/projectn5/devlog/previews/202312.webp" />
<BannerTitle title="Project N5 Progress Update: 2023-12" subtitle="" banner="../../previews/2023/12.webp" />
<p>My progress in December 2023. Updates are shown in chronological order.</p>
@@ -19,54 +19,54 @@
<h2>Identity Crisis</h2>
<p>I started creating a logo for my game! I settled on the name <b>Project N5</b> as a working title, and perhaps as a final title for the game as well. Here's all the logos I created thus far:</p>
<p>Logo #0 is just an outline using <a href="https://fonts.google.com/specimen/Kanit">Kanit</a>. This is the font I also decided on for all of the in-game menus and text. The 5 is special though; it is based on a part salvaged from a hard drive. On a slow day, my coworker disassembled some defective mechanical hard drives, and I got to keep the parts. I thought it would look quite cool as a highlight for the game's logo, and perhaps function as a part of the in-game antagonist company that I'm planning to write the story around.</p>
<img class="image-block centred width-restricted light-background" src="/projects/projectn5/devlog/202312/projectn5-logo-outline.webp">
<img src="/projects/projectn5/devlog/202312/hdd.webp">
<img class="image-block centred width-restricted light-background" src="projectn5-logo-outline.webp">
<img src="hdd.webp">
<p>Logo #1 gained a fill, wider stroke, and a pattern fill that's straight outta Inkscape.</p>
<img class="image-block centred width-restricted light-background" src="/projects/projectn5/devlog/202312/projectn5-logo-fill-v1.webp">
<img class="image-block centred width-restricted light-background" src="projectn5-logo-fill-v1.webp">
<p>#2 reserves the pattern fill for the N5 part and colours the 5 in the game's main yellow colour, #D4AB49. It's also much thicker.</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v2.webp">
<img src="projectn5-logo-v2.webp">
<p>Version 3 is a complete overhaul, still using Kanit for the N, keeping the custom 5, but changing the font of the word 'Project' to <a href="https://www.collletttivo.it/typefaces/apfel-grotezk">Apfel Grotezk</a>. Unfortunately, that font doesn't really work well in all-caps. The J just stood out too poorly for my liking, and friends confirmed it.</p>
<p>The hexagonal background behind the N5 actually was a fairly random addition, but I liked it so much that it continued to stick. I think this could also serve as part of the player's HUD. Maybe as an element that shows the level of the currently equipped weapon? I love when ideas sprout from random decisions like this!</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v3.webp">
<img src="projectn5-logo-v3.webp">
<p>I also tried <a href="https://fonts.google.com/specimen/Lato">Lato</a>, but that looked too standard, and not quite as expressive as I wanted it to. Relatively speaking, considering we're talking about regular sans-serif fonts, of course.</p>
<p>A friend also suggested I cut apart the top part of the 5, leaving a gap, and I think that looked quite cool! I continued that trend for the HDD-inspired bits on the lower part of the 5, simplifying them, detaching them from the main bottom part, and even removing one element. The element that was removed actually served as the part that sticks out in the upper part of the lower part if that makes sense. It's now located near the cutting point between the upper and lower parts of the digit.</p>
<p>I also tore apart the N on my own volition. Thought it looked cool.</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v4.webp">
<img src="projectn5-logo-v4.webp">
<p>This logo uses <a href="https://fonts.google.com/specimen/Montserrat">Monserrat ExtraBold</a>. I actually quite liked this font; it looked unified, bold, and actually quite fitting for my vision!</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v5.webp">
<img src="projectn5-logo-v5.webp">
<p>Then I inset the C into the T, creating a neat little cutout effect.</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v6.webp">
<img src="projectn5-logo-v6.webp">
<p>I then decided to put a splash of colour behind the 'Project' wordmark, and highlighting the background with two hexagons.</p>
<p>Do you think the comment is right? I'm unsure. Amongst all the people I've shown this logo to, the decision has been split 50/50. I just don't want people to consider this the 'dick logo.'</p>
<p>I've also received comments from some people who are irked by the T in 'Project' overlapping with the background of the N5. I actually quite like that feature, but I'll take it into consideration, and maybe change it in the near future.</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v7.webp">
<img src="projectn5-logo-v7.webp">
<p>And lastly, a little draft logo I created, based on #7, in <a href="https://www.getpaint.net/">Paint.net</a>, which is why it doesn't look as clean as the other ones, which are all vector-based logos created in Inkscape.</p>
<p>I want my work to be transferrable and easily scale-able after all, you know?</p>
<img src="/projects/projectn5/devlog/202312/projectn5-logo-v7-sketch.webp">
<img src="projectn5-logo-v7-sketch.webp">
<h2>Glowing Weaponry</h2>
<p>I was struggling for SO LONG to get this weapon to glow. Using a <code>WorldEnvironment</code> node just wouldn't work, the weapon never glowed. Then, I figured out that, at some point, I disabled glow in the entire scene... and after changing that and trying other things for 1.5 hours before that point the weapon was glowing! Not quite the way I want it to, but that's easy to tweak. Only downside is that my character started glowing as well, for some reason, but I'll figure that out another time.</p>
<img src="/projects/projectn5/devlog/202312/2023-12-08.webp">
<img src="2023-12-08.webp">
<h2>Character II</h2>
<p>For testing animations, I created a new rigged character. This character is segmented, using separate objects for its arms, fingers, legs, etc. The final protagonist will use completely separate objects, since the character will be a robot. This will also reduce the work I will need to do in weight painting, and make mesh bends trivial which is to say, not necessary.</p>
<img src="/projects/projectn5/devlog/202312/2023-12-12_00.webp">
<img src="2023-12-12_00.webp">
<p>Rigging remains as difficult as ever. The final model which won't be based on this model but use a similar rig, hopefully the same so that animations can be carried over 1:1 will have separate segments for the fingers, so that bends like this will never occur.</p>
<p>Notice that the character only has four fingers per hand. This should reduce animation work somewhat. Also, I came to realise why even put five fingers on a robot? It's not like we as humans even utilise our five fingers very efficiently. I've found myself struggling to keep my pinky out of my way countless times.</p>
<Video src="/projects/projectn5/devlog/202312/2023-12-12_01.mp4" />
<Video src="2023-12-12_01.mp4" />
<p><code>hello world! nice to meet you</code></p>
<p>This uses 1-frame animations to achieve posing. My first attempt at using animations in Godot! Worked really well, actually. All I fear now is playing multiple animations at once. Is that even possible? I don't know yet.</p>
<Video src="/projects/projectn5/devlog/202312/2023-12-12_02.mp4" />
<Video src="2023-12-12_02.mp4" />
<p>And finally, a shot of the character holding the weapon correctly. This was actually super easy to achieve. The weapon is parented to a node that's attached to the right hand bone of the model. This makes posing and animations loads easier, since the equipped item does not have to be moved manually.</p>
<img src="/projects/projectn5/devlog/202312/2023-12-12_03.webp">
<img src="2023-12-12_03.webp">
<h2>Worldbuilding Toasters</h2>
<p>Adapted from the early animations, I present: Deniz' Quality Toasters! A fictitious toaster manufacturing company bearing my name maybe they manufacture more than just toasters? The logo is using the font <a href="https://fonts.google.com/specimen/Pacifico">Pacifico</a>.</p>
<img src="/projects/projectn5/devlog/202312/dqt.webp">
<img src="dqt.webp">
<p>I don't actually know whether I'll use this in any way, I just wanted to create this logo for the sake of it.</p>
<h2>Simultaneous Animations</h2>
<p>I managed to implement the ability to play multiple animations at a time! The character can now walk + point its gun, or keep its arms down. There's no animation for standing still yet, so it perpetually walks, but this is huge progress, and more importantly, a huge fear of mine alleviated! I was really concerned that implementing multiple animations would be a tedious task, but with Godot's <code>AnimationTree</code> node, it's actually rather trivial.</p>
<p>I followed <a href="https://www.youtube.com/watch?v=WY2cN9uG6W8">this</a> extremely useful and concise tutorial.</p>
<Video src="/projects/projectn5/devlog/202312/simultaneous-animations.mp4" />
<Video src="simultaneous-animations.mp4" />
</Content>

View File

@@ -9,31 +9,31 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-02-10" subtitle="" banner="/projects/projectn5/devlog/previews/20240210.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-02-10" subtitle="" banner="../../previews/2024/0210.webp" />
<p>My apologies for the lack of updates lately! Between being hard at work on the game's progress, lacking motivation, and university exams, I really didn't have the time to write a proper update. Instead, I figured it would now be a great time to do a bundled progress update, since I really did get a lot done that takes the game quite a few steps further!</p>
<p>The most apparent change may be the new character! It's a temporary character once again character number 3, to be exact but this time it's rigged properly. There are no bends in the character, which sounds PS1-esque but is actually on purpose because the final character is supposed to be a robot.</p>
<p>There are also new animations! Nothing finished, of course, but I created them to play around with Godot's <code>AnimationTree</code> and <code>Blend2D</code>, which worked very well to lay out and play even multiple animations at once. There are now animations for walking, standing still, pointing a gun, single jumping, and double jumping! What's missing is a falling animations, but that will be implemented once I figure out how to import NLA tracks instead of needing to re-import the entire character for every animation change.</p>
<Video src="/projects/projectn5/devlog/20240210/animations.mp4" />
<Video src="animations.mp4" />
<p>The game also now has a proper sky! I used this <a href="https://godotshaders.com/shader/stylized-sky-with-procedural-sun-and-moon/">Procedural Sky with Procedural Sun and Moon shader</a> by krzmig and tweaked the colours and light to get the current look. I don't expect this to be final necessarily, but I'll definitely at the very least use this as a base. I do like the look though, so it might remain final after all!</p>
<img src="/projects/projectn5/devlog/20240210/sky.webp">
<img src="sky.webp">
<p>I fixed the glowing issues in the game at one point, but then screwed up again because glow wasn't working <i>at all</i> anymore. Only after over an hour of troubleshooting did I realise that I disabled glow in the <code>WorldEnvironment</code> node...</p>
<p>In tweaking the <code>WorldEnvironment</code>, I even got shadows to work!</p>
<img src="/projects/projectn5/devlog/20240210/shadows.webp">
<img src="shadows.webp">
<p>That red thing in the top right is an enemy. It doesn't move yet, and it can't take damage either (thus making it invulnerable), but it can be targetted, and it can damage the player too!</p>
<p>It can be <i>targetted?</i> Yes! There's now an <code>AutoAimAgent</code> component available for all weapons that targets the nearest enemy that's inside a collision cone attached to the weapon. Once an enemy is inside this collision zone, a target is shown to let the player know which enemy is targetted, and the weapon fires in the precise direction of the enemy.</p>
<img src="/projects/projectn5/devlog/20240210/target.webp">
<img src="target.webp">
<p>The weapons received more updates! There's now a quick change function that allows for quickly switching between the 3 most recently used weapons by pressing the Quick Select button quickly.</p>
<img src="/projects/projectn5/devlog/20240210/quickchange.webp">
<img src="quickchange.webp">
<p>That sperm rocket you're seeing in the picture above is the new rocket launcher. I wanted to implement the rocket launcher as a weapon type already, so I quickly whipped by a temporary model for launcher and rockets, and implemented the functionality. And it works! It even has particle effects for the rockets!</p>
<p>overcompensation be like</p>
<img src="/projects/projectn5/devlog/20240210/rocketlauncher.webp">
<Video src="/projects/projectn5/devlog/20240210/rockets.mp4" />
<img src="rocketlauncher.webp">
<Video src="rockets.mp4" />
<p>I really feared GPU particles because I figured they would be insanely difficult to implement, but Godot really made this a breeze. Now, making them look <i>good</i> is a different story, but that's more so due to my lacking creativity and skill.</p>
<p>What you don't possess, you can buy. And what do you need to buy those things? Money.</p>
<img src="/projects/projectn5/devlog/20240210/money.webp">
<img src="money.webp">
<p>Aside from increasing a counter upon being collected, these totally-not-bolts don't do anything at the moment. But it's a start! In the future, the money can be used to buy things at the vendor that also already exists! But interacting with it only yields a blank menu at the moment.</p>
<img src="/projects/projectn5/devlog/20240210/vendor.webp">
<img src="vendor.webp">
<p>There's more that I can't really show visually though. I made huge progress with the character, for instance. Or rather, <i>I fixed some of the issues my own script caused.</i> I used to use a custom solution based on someone else's code to handle movement speed and sliding on slopes, but this introduced two massive issues. For one, stepping onto a steep slope while still half-standing on a surface that can be walked on caused the character to lose the ability to move until jumping, thus getting stuck. The other issue was that some abrupt slope angle changes caused the entire game to crash, probably caused by a faulty <code>RayCast</code> check.</p>
<p>Now, how did I fix these issues? Well, I found out that Godot already offers these functions in the default <code>CharacterController3D</code>. Hence, I ripped out all the custom code, I essentially checked two boolean flags, and I had the same behaviour, minus the game-breaking bugs. Despite my stupidity, I felt very happy to have discovered that. My player script is now a lot cleaner!</p>
<p>And so are other scripts! I cleaned up a few scripts, most recently the Inventory script. There used to be a lot of redundant function calls that essentially did the same thing except with one check that could be performed more centrally. I also double-checked item IDs unnecessarily. All gone now! Inventory is much more streamlined now.</p>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-03-12" subtitle="" banner="/projects/projectn5/devlog/previews/20240312.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-03-12" subtitle="" banner="../../previews/2024/0312.webp" />
<TableOfContents />
@@ -18,38 +18,38 @@
<h2 id="titlescreen">Back to Title Screen</h2>
<p>I needed a means to launch different levels quickly, so I created a basic title screen for the game! Behind this is a basic custom level manager that allows for launching and switching between different levels. Currently, there exist two of them Unity and Arena. Unity is the original level that's been in the game since day 1, using Unity's (old) logo as a floor plane, mostly as a joke because I switched from Unity to Godot.</p>
<img src="/projects/projectn5/devlog/20240312/titlescreen.webp">
<img src="titlescreen.webp">
<h2 id="arena">Level 2: Arena</h2>
<p>The arena level is a new addition, everyone welcome the arena! While I do intend to design a proper arena for the final game, this arena is intended to test enemies and the arena menu.</p>
<img src="/projects/projectn5/devlog/20240312/arena.webp">
<img src="arena.webp">
<div class="image-subtitle-container">
<span class="image-subtitle">the blue sky gives the level such a different feel. the clouds move really quickly here compared to Unity's clouds, suggesting a stormy atmosphere on this planet.</span>
</div>
<p>The computer over there is the arena terminal. By interacting with it, you can select an arena challenge. Currently, it doesn't work. The menu does work! But the buttons don't do anything so far.</p>
<img src="/projects/projectn5/devlog/20240312/arena-terminal.webp">
<img src="arena-terminal.webp">
<h2 id="thirdperson">Talking about yourself in the 3rd person</h2>
<p>I discovered this great plugin for Godot called <a href="https://phantom-camera.dev/">Phantom Camera</a>. It's a plugin that allows you to use agents to control the game camera smoothly, efficiently, and hassle-free. In order to implement it in my game, I only had to do the totally easy task of ripping out my entire camera system. It totally didn't almost make me restart the project from scratch. But it works flawlessly now!</p>
<img src="/projects/projectn5/devlog/20240312/shoulder.webp">
<img src="shoulder.webp">
<p>It wasn't quite flawless from the start though. I had issues with the camera facing my character's front instead of their back. Turns out though, that's not the camera's fault; Phantom Camera's agent was specifically designed to look at the character's back only problem was that my character model was facing the wrong way! Fixing that took a little bit of time, but I got it done, and now the camera works pretty decently. I even added two more fancy camera gizmos: the first one is a level overview camera, like in Ratchet & Clank! It shows an overview of the level when you enter it. It smootly transitions to the player once any input is made.</p>
<img src="/projects/projectn5/devlog/20240312/overview.webp">
<img src="overview.webp">
<p>The other is an over-the-shoulder camera! This one allows for (allegedly) more precise aiming. Come to think of it, I should actually turn down the camera sensitivity when the player is in this mode...</p>
<Video src="/projects/projectn5/devlog/20240312/shoulder.mp4" />
<Video src="shoulder.mp4" />
<p>Funnily, due to initial collision issues, I first accidentally turned my game into a first person shooter. Actually looks kind of cool, I have to say. Maybe I'll implement a first person view as an alternative option to the over-the-shoulder view.</p>
<Video src="/projects/projectn5/devlog/20240312/firstperson.mp4" />
<Video src="firstperson.mp4" />
<h2 id="sketches">Can I offer you a nice sketch in this trying time?</h2>
<p>When I'm not developing, I'm often doing something else related to my game. Sometimes, I sketch!</p>
<p>I am by NO MEANS a skilled sketch artist, but it really helps to note down ideas to remember them, visualise them, and expand on them.</p>
<img src="/projects/projectn5/devlog/20240312/sketches.webp">
<img src="sketches.webp">
<div class="image-subtitle-container">
<span class="image-subtitle">don't judge</span>
</div>
<h2 id="kanban">Kanban for my TODOs</h2>
<p>Perhaps as a small insight into my project management process: I'm using <a href="https://obsidian.md/">Obsidian</a>, a markdown editor, as my means of collecting and managing my projects' notes and ideas. Recently, I've also tried using the Kanban plugin to organise my TODOs (I have <i>a lot</i> of them), which is working quite well! I often create small notes on this board, saving sparks of ideas that I occasionally have, and I like adding extra information that will help me remember in the long term what those ideas were about.</p>
<img src="/projects/projectn5/devlog/20240312/kanban.webp">
<img src="kanban.webp">
<p>I can only recommend it both Kanban as a means of project management as well as Obsidian as a note vault!</p>
<h2 id="future">in hopes of more to come</h2>
@@ -57,7 +57,7 @@
<p>After every day of working on my game, I ask myself: "did I really accomplish much today?" Often, my immediate response is "no", but my second response is "of course I did!" Because while a lot of things that take me quite a bit of time are children's play for another person most likely, the fact that I worked through it and managed to successfully create or implement something is huge. I'm always quite happy once I realise this.</p>
<p>And so, while my day-to-day motivation for working on my game directly is rather low, this is only a symptom of a general lack of motivation for anything. In the long term, I think I am quite dedicated to this game. When I'm not coding something, I'm coming up with ideas. I'm managing my notes. I'm designing something. Maybe I'm talking to someone about my ideas. That last point is actually something I would love to do more, but I don't really know any person that would enjoy listening to my ramblings.</p>
<p>Let's see how far we get.</p>
<img src="/projects/projectn5/devlog/20240312/alone.webp">
<img src="alone.webp">
<div class="image-subtitle-container">
<span class="image-subtitle">staring longingly into the sunset</span>
</div>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-03-23" subtitle="" banner="/projects/projectn5/devlog/previews/20240323.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-03-23" subtitle="" banner="../../previews/2024/0323.webp" />
<TableOfContents />
@@ -18,22 +18,22 @@
<h2 id="attraction">Attraction &lt;3</h2>
<p>Collectibles are now attracted by the player once they're within a certain range (specified by a spherical <code>CollisionShape3D</code>) and are collected once they get close enough to the player which is to say, once they collide with another, smaller spherical <code>CollisionShape3D</code>. The first try didn't work out amazingly, as the collectibles didn't want my character to intrude on their personal space though...</p>
<Video src="/projects/projectn5/devlog/20240323/personalspace.mp4" />
<Video src="personalspace.mp4" />
<p>I fixed that issue, and lowered the attraction velocity to test, but that resulted in a spooky haunting effect.</p>
<Video src="/projects/projectn5/devlog/20240323/haunting.mp4" />
<Video src="haunting.mp4" />
<p>Here's another demonstration of that! I played around with PhantomCamera's dampening, which makes the haunting effect more evident. Also something I only came to notice then: my player jumps INSANELY high. Like 8x their height. This will be fixed later.</p>
<Video src="/projects/projectn5/devlog/20240323/high.mp4" />
<Video src="high.mp4" />
<p>After tweaking the speed, I got some nice attracted collectibles.</p>
<Video src="/projects/projectn5/devlog/20240323/attraction_stuck.mp4" />
<Video src="attraction_stuck.mp4" />
<p>One issue still remains though: when moving, the collectibles don't attract all the way into the player, therefore they don't get collected and fly next to the player until they stop moving.</p>
<p>I learned that <code>lerp()</code> was at fault (no offense!) <code>lerp()</code> would work perfectly fine if the player were standing still, but since the player and therefore, the target position is moving, <code>lerp()</code> calculates a speed that cannot overcome the difference between the collectible position and the player.</p>
<p>I overcame this issue by increasing the weight of <code>lerp()</code> on every frame, thus increasing the speed linearly. This resulted in a very smooth attraction transition.</p>
<Video src="/projects/projectn5/devlog/20240323/attraction_smooth.mp4" />
<Video src="attraction_smooth.mp4" />
<h2 id="rockets">rocket go boom</h2>
<p>I finally implemented enemy health they can now take damage from weapons and die. But it felt so hollow without any impact. I wanted my rockets to explode. So I started working on that.</p>
@@ -42,7 +42,7 @@
<p>I first implemented a fairly basic particle effect using cube meshes. Not exactly photorealistic, but it gets the message across.</p>
<Video src="/projects/projectn5/devlog/20240323/explosion_0.mp4" />
<Video src="explosion_0.mp4" />
<div class="image-subtitle-container">
<span class="image-subtitle">boom</span>
</div>
@@ -55,21 +55,21 @@
<p>I briefly checked out Jolt's settings page... and then I saw something.</p>
<img src="/projects/projectn5/devlog/20240323/joltsettings.webp">
<img src="joltsettings.webp">
<p>"Areas Detect Static Bodies." This setting was OFF by default. This could actually apply, I figured, because my rockets are <code>Area3D</code>s and the walls/floors are <code>StaticBody3D</code> nodes. I turned it on, and... my issue was solved. Slightly frustrated, but more so amused and relieved, I continued work, happy that my code was fine and my solution worked.</p>
<p>I introduced an exported property that allows for setting the amount of collisions a projectile may experience before it despawns, thus allowing, for example, for the rocket to explode through a wall! I might use this in the future for the v3 rocket laucher.</p>
<Video src="/projects/projectn5/devlog/20240323/explosion_wall.mp4" />
<Video src="explosion_wall.mp4" />
<h3 id="rockets-3">Stage 3: Style</h3>
<p>One day after that, I was motivated to create a more convincing explosion. I watched a YouTube tutorial, and ultimately got something that looks quite nice:</p>
<Video src="/projects/projectn5/devlog/20240323/explosion_test.mp4" />
<Video src="explosion_test.mp4" />
<Video src="/projects/projectn5/devlog/20240323/explosion_1.mp4" />
<Video src="explosion_1.mp4" />
<p>Interesting observation: in Godot, you can use the "RAW" tab when picking a colour to set values above 100%. The explosions, for example, use red values between 300% and 500%, which, with my <code>WorldEnvironment</code> light setup, produces a glowing effect that's just perfect for explosions!</p>
@@ -83,20 +83,20 @@
<p>The tutorial I followed (a 2D tutorial, btw) used a strength value of 30. I figured that'd be too much, so I set it to 20, just in case.</p>
<Video src="/projects/projectn5/devlog/20240323/shake_0.mp4" />
<Video src="shake_0.mp4" />
<p>...I later set down the strength value to about 0.35.</p>
<p>I also implemented distance fade for the camera shake strength! The strength now depends on how close the player is to the explosion origin. An explosion far away won't shake the camera, but one close up has much more impact!</p>
<Video src="/projects/projectn5/devlog/20240323/shake_impact.mp4" />
<Video src="shake_impact.mp4" />
<h2 id="new-weapon">A new weapon is in the works!</h2>
<p>I had a random burst inspiration recently while I was on the bus, and once I got home, I started modelling it. Introducing: a weapon that is unfinished and has no (finalised) name yet, but I'm still fairly proud of:</p>
<img src="/projects/projectn5/devlog/20240323/venom_front.webp">
<img src="/projects/projectn5/devlog/20240323/venom_back.webp">
<img src="venom_front.webp">
<img src="venom_back.webp">
<p>I'm thinking this could be a blaster of types, maybe similar to an N5 Blaster upgrade two-handed. Though I think it should be separate from the N5 Blaster. It could also be a flamethrower, though I want the flamethrower to look a bit different, especially at the gun barrel.</p>
@@ -108,15 +108,15 @@
<p>The camera now moves quicker and more smoothly in and out of the precision aiming mode, for example:</p>
<Video src="/projects/projectn5/devlog/20240323/camera_precision.mp4" />
<Video src="camera_precision.mp4" />
<p>The level overview camera also moves in a much cooler way, using a quint transition type instead of the previous linear transition. I think using quint improves the look significantly.</p>
<Video src="/projects/projectn5/devlog/20240323/camera_overview.mp4" />
<Video src="camera_overview.mp4" />
<p>Look at how smoothly the camera follows the player, even when the player jumps up a platform or falls down from one!</p>
<Video src="/projects/projectn5/devlog/20240323/camera_smooth.mp4" />
<Video src="camera_smooth.mp4" />
<p>The camera now sticks to the ground briefly when the player jumps, but it returns to the player once the player exceeds a certain height above the jump origin or falls lower than the starting point.</p>
@@ -129,11 +129,11 @@
<p>Of course, obligatory <i>I accidentally turned my game into a first-person shooter</i>, again. This view of the N5 Blaster actually reminds me of Metroid.</p>
<img src="/projects/projectn5/devlog/20240323/firstperson.webp">
<img src="firstperson.webp">
<h2 id="unity">Looking down upon the mess I've created</h2>
<p>I'm really happy with my progress. As a bonus, here's an overview of my current testing level Unity.</p>
<img src="/projects/projectn5/devlog/20240323/unity_overview.webp">
<img src="unity_overview.webp">
</Content>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-03-24" subtitle="The Arena Update" banner="/projects/projectn5/devlog/previews/20240324.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-03-24" subtitle="The Arena Update" banner="../../previews/2024/0324.webp" />
<TableOfContents />
@@ -24,7 +24,7 @@
<h2 id="product">The Finished Product</h2>
<Video src="/projects/projectn5/devlog/20240324/demonstration.mp4" />
<Video src="demonstration.mp4" />
<h2 id="good">The Good</h2>
@@ -39,15 +39,15 @@
<h3 id="enemy">The New Enemy, Suzanne Cylinder</h3>
<img src="/projects/projectn5/devlog/20240324/suzannecylinder.webp">
<img src="suzannecylinder.webp">
<p>Suzanne cylinder (called "test_monkey" in the game) is the first enemy that has movement code implemented, able to follow the player once close enough and attack once the player gets too close. Without gravity holding Suzanne cylinder to the ground, though, the situation gets spooky quickly.</p>
<Video src="/projects/projectn5/devlog/20240324/haunted.mp4" />
<Video src="haunted.mp4" />
<p>Initial movement tests were quite funny, because <code>look_at()</code> adjusts rotation on both the y axis (left-right rotation) as well as the x-axis (up-down rotation), which meant that the enemy kept looking up when the player was at a higher elevation than it.</p>
<img src="/projects/projectn5/devlog/20240324/lookingup.webp">
<img src="lookingup.webp">
<div class="image-subtitle-container">
<span class="image-subtitle">send help</span>
</div>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-04-01" subtitle="The Behind-the-Scenes Update" banner="/projects/projectn5/devlog/previews/20240401.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-04-01" subtitle="The Behind-the-Scenes Update" banner="../../previews/2024/0401.webp" />
<TableOfContents />
@@ -71,23 +71,23 @@
<p>Something visual to intersperse the dry code explanations:</p>
<img alt="An image of an untextured work-in-progress 3D model of a blaster" src="/projects/projectn5/devlog/20240401/venom.webp">
<img alt="An image of an untextured work-in-progress 3D model of a blaster" src="venom.webp">
<p>This is an image for a weapon I've come up recently! It's supposed to be a slow-firing but strong blaster, contrasting the rapid-firing but weaker N5 Blaster (which recently changed to an automatic firing mode). The Venom originated from sketches like this, by the way:</p>
<div class="horizontally-centre-aligned">
<img alt="A REALLY crude sketch of a blaster." src="/projects/projectn5/devlog/20240401/dual_venom_sketch.webp">
<img alt="A crude sketch of a blaster resembling the 3D model shown above." src="/projects/projectn5/devlog/20240401/venom_sketch.webp">
<img alt="A REALLY crude sketch of a blaster." src="dual_venom_sketch.webp">
<img alt="A crude sketch of a blaster resembling the 3D model shown above." src="venom_sketch.webp">
</div>
<p>The bolt visible in the first sketch actually makes me consider using <a href="/projects/projectn5/devlog/20240323/#new-weapon">the model I showed off recently</a> as the v2 for the Venom (which I would call Antidote by the way, in reference to <a href="https://youtu.be/fbafd6UV3w4">this song</a>).</p>
<p>The bolt visible in the first sketch actually makes me consider using <a href="/projects/projectn5/devlog/2024/0323/#new-weapon">the model I showed off recently</a> as the v2 for the Venom (which I would call Antidote by the way, in reference to <a href="https://youtu.be/fbafd6UV3w4">this song</a>).</p>
<h2 id="n5-glow">N5 Blaster glow!</h2>
<p>The N5 Blaster got some visual flair! The lights now glow slightly differently, a bit dimmer than before. When the N5 Blaster is fired, its lights glow brightly for a split second, indicating that a shot has been fired! And when the gun is empty, the lights go out and the icosphere (which is meant to be the power source of the gun) is only dimly lit! I really like the effect.</p>
<Video src="/projects/projectn5/devlog/20240401/n5-glow.mp4" />
<img alt="An image of the N5 Blaster. Its lights are turned off, and the icosphere in the middle is dimly glowing." src="/projects/projectn5/devlog/20240401/n5-dim.webp">
<Video src="n5-glow.mp4" />
<img alt="An image of the N5 Blaster. Its lights are turned off, and the icosphere in the middle is dimly glowing." src="n5-dim.webp">
<p>Sorry about the sparse delivery of visually pretty things, but I hope the cool effects on the N5 Blaster make up for it somewhat! I can say for sure though that I'm progressing quite well, and I'm having fun doing so, even if this progress can't really be showed off in the same way I could show off a 3D model or a new enemy. There's lots to come in the future though, especially since I still have to design most of the 12 × 2 = 24 weapon models, a tonne of enemies, the player, and all the levels. There'll be lots to gawk at (hopefully)!</p>
</Content>

View File

@@ -9,7 +9,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-07-13" subtitle="The WHERE HAVE I BEEN?? Update" banner="/projects/projectn5/devlog/previews/20240713.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-07-13" subtitle="The WHERE HAVE I BEEN?? Update" banner="../../previews/2024/0713.webp" />
<p>University.</p>
@@ -21,7 +21,7 @@
<p>If there's one positive thing I can report back with, it's that I've been doing pretty well in my exams. I've yet to receive a grade lower than 2.0 this semester (which likely will change once I receive my geography didactics exam grade, but still), and that's despite the fact that I've really not put in the appropriate amount of work for it. Just as my motivation for my creative projects has been dwindling, I've been procrastinating on all my university tasks hardcore.</p>
<Video src="/projects/projectn5/devlog/20240713/procrastination.mp4" />
<Video src="procrastination.mp4" />
<p>Project N5 is not cancelled, though! I'm still confident that work will commence soon! I just have to gather the motivation to actually start working on it again (which is much easier said than done).</p>
@@ -29,7 +29,7 @@
<p>For what it's worth, here's a picture of something I printed a few weeks ago. It's an N5 Blaster magnet that's hanging on my PC! I printed it myself, using my new <a href="https://eu.store.bambulab.com/products/a1-mini?variant=49003631083868">Bambu A1 mini 3D printer</a>, and the filament I used is <a href="https://eu.store.bambulab.com/products/pla-galaxy?variant=47730388107612">PLA Galaxy green</a>.</p>
<img alt="A 3D-printed half of an N5 Blaster that's hanging on the side wall of a PC" src="/projects/projectn5/devlog/20240713/3dprint.webp">
<img alt="A 3D-printed half of an N5 Blaster that's hanging on the side wall of a PC" src="3dprint.webp">
<p>I'd love to 3D print more Project N5 weapons though for that I'll have to design the weapons first!! And in order to do <i>that</i>, I'll have to come up with the ideas for the weapons, which is also proving difficult. A friend suggested to me a while back that I should consider which types of weapons <i>I</i> like in games, and which types I find fun to use.</p>

View File

@@ -9,13 +9,13 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-10-12" subtitle="The Returnal Update" banner="/projects/projectn5/devlog/previews/20241012.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-10-12" subtitle="The Returnal Update" banner="../../previews/2024/1012.webp" />
<TableOfContents />
<p>I'M BACK!!!!</p>
<p>For real this time!! I've been busy with university, then I started working on other projects including 3D prints, electronics, a different game, then got busy with university again, and now I FINALLY started work on Project N5 again. And, as I promised in <a href="/projects/projectn5/devlog/20240713/">my last update</a>, it would not take me another 3 months to get back to development in fact, I undercut that deadline by a whole 24 hours!</p>
<p>For real this time!! I've been busy with university, then I started working on other projects including 3D prints, electronics, a different game, then got busy with university again, and now I FINALLY started work on Project N5 again. And, as I promised in <a href="/projects/projectn5/devlog/2024/0713/">my last update</a>, it would not take me another 3 months to get back to development in fact, I undercut that deadline by a whole 24 hours!</p>
<p>Since even though Project N5 was stalled, I gained some more knowledge about and mostly confidence with Godot through another game project I'm working on in parallel with friends, I've kicked off Project N5 development by restructuring a few things. This means there's not that much visual stuff to show so far, but there are some sorely needed mechanical and programmatical under-the-hood improvements.</p>
@@ -23,13 +23,13 @@
<p>I overhauled the auto aim mechanism (which is now called aim helper). Previously, the aim helper worked by putting a 3D collision shape in front of the gun, registering all collisions within this cone, and determining a target by calculating the shortest distance between the player and the enemies. Here's a visual of the old cone at the tip of the N5 Blaster:</p>
<img src="/projects/projectn5/devlog/20241012/cone.webp">
<img src="cone.webp">
<p>This was a good solution, because it allowed for targetting enemies without much effort add an enemy to the 'targetable' group and let the aim helper script take care of it. However, customisation proved difficult. Since the collider was a 3D shape, a new 3D shape would have to be created for every weapon and every upgrade that demanded a unique shape. While this offered flexibility, it proved cumbersome in execution. Cones could only be changed in scale uniformally, which means that, while they can be changed in size, no single dimension could be changed without causing bugs. Keeping X and Y while increasing the Z distance would mandate a whole new shape. Furthermore, the cone would have to be manually rotated and positioned in front of the gun every frame, which wasn't particularly elegant.</p>
<p>Thus, a new solution was born: a 2D approach to the aim helper!</p>
<img src="/projects/projectn5/devlog/20241012/aim_helper.webp">
<img src="aim_helper.webp">
<p>The way the new aim helper works is by putting a 2D collision shape on the screen of the player. All enemies contain a 2D shape as well, which is unprojected onto the screen by the player camera. This means that the 2D shapes are positioned on top of the 3D characters. As soon as the player's collision shape collides with one of the enemies', it's added to the list of collisions and the shortest distance is calculated. This procedure hasn't changed between the 3D and 2D approaches.</p>
@@ -42,8 +42,8 @@
<p>The N5 Blaster received an overhauled icon. The soon-to-be-implemented N5 Bomb Launcher also received its own icon!</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241012/n5-blaster-icon.webp">
<img src="/projects/projectn5/devlog/20241012/n5-bomb-launcher-icon.webp">
<img src="n5-blaster-icon.webp">
<img src="n5-bomb-launcher-icon.webp">
</div>
<p>I changed the icosphere by tracing its 3D counterpart (the ball inside the N5 Blaster's glass tube) from a different point of view. It wasn't symmetrical before it is now.</p>
@@ -78,7 +78,7 @@
<p>Here's a sneak peek at an ammo pickup I started working on recently:</p>
<img src="/projects/projectn5/devlog/20241012/ammo.webp">
<img src="ammo.webp">
<p>And of course, there's always the struggle of motivation. With my new game project, I have the fortune of working with two other people who also do work. We can motivate one another, since we're all interested in developing the game further. I don't have this with Project N5. At least as far as I know, I'm the only one who's really interested in seeing this game flourish, so there's no real option for me to gain motivation through other people. It's difficult, and I don't quite know how to deal with it. I've also considered uploading snippets onto my Instagram, but even disregarding my dislike for the platform, I don't think anyone would really care I've uploaded snippets in the past already, to little resonance. I don't blame other people, but it just illustrates that I need to have intrinsic motivation to continue work on Project N5.</p>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-11-03" subtitle="The Visual Update" banner="/projects/projectn5/devlog/20241103/101-comparison.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-11-03" subtitle="The Visual Update" banner="../../previews/2024/1103.webp" />
<TableOfContents />
@@ -24,7 +24,7 @@
<p>One challenge I faced was referencing a node that has no clear direct relationship to the one I'm calling it from. Picture this node chain:</p>
<img src="/projects/projectn5/devlog/20241103/node_chain.webp">
<img src="node_chain.webp">
<p>Say, for example, that I'm writing a script in <code>Automatic</code> that's the node that handles projectile spawning and their direction in automatic weapons, among other things and I need to reference <code>AimRayCast3D</code> to determine in which direction the projectile needs to be fired. Reasonable use case, seen as the <code>RayCast3D</code> is attached to the <code>Camera3D</code> to point exactly where the player is facing except there's no real path I can follow to get to that node. Their closest relative is <code>Level</code>, which is the root node of the level, and no less than <b>eight nodes away</b> from <code>Automatic</code>! It's possible to retrieve the node in this way, starting from <code>Automatic</code>, but it's not pretty...</p>
@@ -63,9 +63,9 @@
<h2 id="sky">Lighten the Mood</h2>
<img src="/projects/projectn5/devlog/20241103/sky.webp">
<img src="sky.webp">
<p>I changed the sky to be brighter and more friendly in the Unity test level. This doesn't serve the game in its final form in any way, it's just a measure I took to <a href="/projects/projectn5/devlog/20241012/#whats-next">give myself the impression that a lot has changed</a>, since the game has visually changed.</p>
<p>I changed the sky to be brighter and more friendly in the Unity test level. This doesn't serve the game in its final form in any way, it's just a measure I took to <a href="/projects/projectn5/devlog/2024/1012/#whats-next">give myself the impression that a lot has changed</a>, since the game has visually changed.</p>
<p>Interestingly though, this did give me ideas. This sky shader has a setting for cloud fuzziness, which, when turned down, gives the clouds a more toon-like aesthetic (pictured here). This is great, because this is actually an aesthetic direction I had recently decided to pursue with Project N5.</p>
@@ -73,13 +73,13 @@
<p>I discovered this <a href="https://deep-fold.itch.io/pixel-planet-generator">insanely cool planet generator</a> by Deep-Fold on itch.io. It's a <i>pixel</i> planet generator, strictly speaking, but since its output is just determined by generated noise (I think), the resolution can be increased much further to create sharp toon-like planets. Here's one I generated that I quite liked:</p>
<Video src="/projects/projectn5/devlog/20241103/planet.mp4" />
<Video src="planet.mp4" />
<p>This shader made me think that I really do want planets to be present in my game similar to how Ratchet & Clank does it on the starmap as well as when flying towards the planets. Maybe you could even see a planet if you look into the sky from another planet's surface?</p>
<p>I'm unsure how I feel about using someone else's generator in my own game, though, so I followed a <a href="https://docs.godotengine.org/en/stable/tutorials/shaders/using_viewport_as_texture.html">tutorial</a> I found in the Godot documentation by coincidence I wanted to look up something for an entirely different game. The result:</p>
<img src="/projects/projectn5/devlog/20241103/planet-mine.webp">
<img src="planet-mine.webp">
<p>...it's a work-in-progress. A relatively decent start though! I think there's potential.</p>
@@ -93,7 +93,7 @@
<p>Back when I modelled the N5 Blaster around a year ago, I didn't have much experience in using Blender. Thus, it wasn't modelled very well. The model consisted of 8 parts for the body, 3 or 4 parts for the grip, and the icosphere spinning in the middle of the gun. My goal today was to recreate the N5 Blaster with a more streamlined mesh, and I must say, I achieved my goal quite well: the gun now consists of one mesh for the body, one for the grip, and another for the icosphere.</p>
<img src="/projects/projectn5/devlog/20241103/101-comparison.webp">
<img src="101-comparison.webp">
<div class="image-subtitle-container">
<span class="image-subtitle">left: new, right: old</span>
</div>
@@ -104,13 +104,13 @@
<p>Oh and, with this change, I think I decided on the upgraded version of the N5 Blaster: instead of changing into a bigger weapon, I think it'd be neat if the character would use two of the blasters when upgraded. I like the look of the two blasters side-by-side in the picture above.</p>
<img src="/projects/projectn5/devlog/20241103/101-profile.webp">
<img src="101-profile.webp">
<h2 id="canister">Need Some Ammo?</h2>
<p>After I introduced a <a href="/projects/projectn5/devlog/20241012/#whats-next">new ammo crate in the last devlog</a>, I completely overhauled its look. It's now quite different, more simplistic in its mesh, and it's so round, I stopped calling it crate and started naming it canister.</p>
<p>After I introduced a <a href="/projects/projectn5/devlog/2024/1012/#whats-next">new ammo crate in the last devlog</a>, I completely overhauled its look. It's now quite different, more simplistic in its mesh, and it's so round, I stopped calling it crate and started naming it canister.</p>
<img src="/projects/projectn5/devlog/20241103/canister.webp">
<img src="canister.webp">
<p>It's simple! But I kinda like it that way. Plus, neat feature: the canister displays the icon of the weapon for which it holds ammo! So far, only the N5 Bomb Launcher's icon is implemented, but others are easy to put in once I create icons for more weapons.</p>
@@ -118,7 +118,7 @@
<p>Introducing: the N5 Bomb Launcher.</p>
<img src="/projects/projectn5/devlog/20241103/102-profile.webp">
<img src="102-profile.webp">
<p>Okay, it's not exactly a looker at this stage, but it's functionally largely implemented. This is an, as the name implies, bomb-launching device with ground targetting. This sets it apart from other weapons, and is the reason for why I was so hesitant to imlpement it: it meant I had to change my existing code to accommodate for this.</p>
@@ -126,7 +126,7 @@
<p>I've been playing around with the explosion as well:</p>
<img src="/projects/projectn5/devlog/20241103/102-explosion.webp">
<img src="102-explosion.webp">
<p>I like the idea of the explosion looking 'technical', if that makes sense. A quick explosion with a large wireframe icosphere. The colour definitely needs changing; I'm even considering changing it to blue, even if that doesn't match the N5 colours. Maybe for the V2 upgrade of the weapon.</p>
@@ -142,9 +142,9 @@
<h2 id="retro">Retrospective</h2>
<p>It's been almost 14 months of working on Project N5 sometimes actively, with occasional breaks in-between. Can you believe that this game started from <i>this?</i> (video from <a href="/projects/projectn5/devlog/202309/#header-0">2023-09-16</a>)</p>
<p>It's been almost 14 months of working on Project N5 sometimes actively, with occasional breaks in-between. Can you believe that this game started from <i>this?</i> (video from <a href="/projects/projectn5/devlog/2023/09/#header-0">2023-09-16</a>)</p>
<Video src="/projects/projectn5/devlog/202309/2023-09-16_00.mp4" />
<Video src="../../2023/09/2023-09-16_00.mp4" />
<p>Logically speaking, of course, that makes complete sense. I had to start from somewhere. But it's the fact that I managed to get so far already, working on my own, that I find crazy. I've already managed to implement many basics of this game, slowly but surely realising my vision. I think this really has potential. I should keep up the work.</p>
</Content>

View File

@@ -9,7 +9,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-11-27" subtitle="The Making of a Protagonist, Part I" banner="/projects/projectn5/devlog/20241127/hands.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-11-27" subtitle="The Making of a Protagonist, Part I" banner="../../previews/2024/1127.webp" />
<TableOfContents />
@@ -26,8 +26,8 @@
<p>This is what I've created so far:</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241127/laura-overview.webp">
<img src="/projects/projectn5/devlog/20241127/laura-topology.webp">
<img src="laura-overview.webp">
<img src="laura-topology.webp">
</div>
<p>I'll admit, I'm actually quite proud of myself for being able to create this. This is a fairly representative humanoid body, with relatively decent topology and without using a massive amount of polygons this model currently sits at 2,452 tris.</p>

View File

@@ -9,7 +9,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2024-12-22" subtitle="The Making of a Protagonist, Part II" banner="/projects/projectn5/devlog/20241222/laura-header.webp" />
<BannerTitle title="Project N5 Progress Update: 2024-12-22" subtitle="The Making of a Protagonist, Part II" banner="../../previews/2024/1222.webp" />
<p>I have lots progress to share!!</p>
@@ -18,8 +18,8 @@
<p>First things first: Laura is, unlike I promised before, not yet finished. However, I have made <i>so much</i> progress in the past few weeks that I just wanted to get out already. Here's a comparison between my last progress update and the current iteration of Laura:</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241127/laura-overview.webp">
<img src="/projects/projectn5/devlog/20241222/laura.webp">
<img src="../1127/laura-overview.webp">
<img src="laura.webp">
</div>
<p>She's become an actual proper character!! omg omg</p>
@@ -46,7 +46,7 @@
<p>Laura was originally supposed to wear an orange sweatshirt as well as shorts. The orange sweatshirt was thrown out because the character reminded me of Velma from Scooby-Doo, and I changed it to green because I like green. Also, the shorts looked dorky. Here's a picture from 2024-12-01 Laura oddly looks younger in this picture, I feel. The shorts and hair make a big difference.</p>
<img src="/projects/projectn5/devlog/20241222/laura-young.webp">
<img src="laura-young.webp">
<h3 id="hair">Hair</h3>
@@ -55,15 +55,15 @@
<p>The first try (seen above) was using the technique from <a href="#low-poly-easy">this video</a> selecting faces from the character's head, duplicating them, separating them into their own mesh, changing the scale, adding a solidify modifier, and then adding faces. This... worked, but I didn't like the results. And I tried quite a few styles.</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-1.webp">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-2.webp">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-3.webp">
<img src="laura-hair-flat-1.webp">
<img src="laura-hair-flat-2.webp">
<img src="laura-hair-flat-3.webp">
</div>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-4.webp">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-5.webp">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-6.webp">
<img src="laura-hair-flat-4.webp">
<img src="laura-hair-flat-5.webp">
<img src="laura-hair-flat-6.webp">
</div>
<p>It always looked too flat, too shapeless, too boring, wrong cuts. It just didn't work.</p>
@@ -73,8 +73,8 @@
<p>Essentially, you create a curve and a circle, use the circle's shape as a profile for the curve, then change the circle's shape as well as the position and scale of the curve's vertices to create individual hair strands. Shown well in the two videos linked above, this can look pretty amazing! Only one issue: I'm creating a <b>game</b> character, and this technique is quite expensive, as it creates a lot of polygons for all the individual hair strands and the detail that goes into them. To mitigate this, I lowered the resolution of the profiling and used only a few curves to create an entire head's worth of hair. This looked a little like this:</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241222/laura-hair-curves.webp">
<img src="/projects/projectn5/devlog/20241222/laura-hair-curves-2.webp">
<img src="laura-hair-curves.webp">
<img src="laura-hair-curves-2.webp">
</div>
<p>This hair mesh originally (left picture) consisted of three parts: two curves at the front (left/right) and one in the back. This... was okay, but scaling the curves made the hair look weird. Thinner strands, especially when there's only a few of them, made them look more like dreads, and scaling up the vertices to large scales, as seen in the front near the top of the head, makes the hair look as if it's ballooning. Getting the shape right was a mess too: using only a single curve in the back meant that I had exactly one curve to cover quite literally half the head, and making sure that this singular strand of hair covered the head stretching from one ear to another was a pain. I tried using five curves (right picture), so that I have three in the back, but it didn't improve anything.</p>
@@ -82,8 +82,8 @@
<p>I then went <i>back</i> to the first method of scaling up faces from the head, with more knowledge and several tries behind me, and you know what? It actually kind of worked out.</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-new-2.webp">
<img src="/projects/projectn5/devlog/20241222/laura-hair-flat-new-3.webp">
<img src="laura-hair-flat-new-2.webp">
<img src="laura-hair-flat-new-3.webp">
</div>
<p>The right picture is the current iteration of Laura's hair. I added a head band because I thought it looked nice, though that detail is not final.</p>
@@ -106,7 +106,7 @@
<p>Laura's supposed to have a mechanical right arm on the current model, however, I have applied a mirror modifier, which means her left and right arms are identical. The grey mesh in front of her right arm, however, is the work-in-progress mechanical arm.</p>
<img src="/projects/projectn5/devlog/20241222/arm.webp">
<img src="arm.webp">
<p>I'm not entirely happy with this yet. The general shape of the arm is relatively decent, the hinge looks ok, but I feel it's missing something. I think I want to add LEDs to the arm, which in-game can serve to display Laura's health status (alongside a more clearly legible health UI element).</p>
@@ -117,8 +117,8 @@
<p>To illustrate my point (get it?), here are some pictures. Left is in T-pose, right is in A-pose:</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20241222/deform-1.webp">
<img src="/projects/projectn5/devlog/20241222/deform-2.webp">
<img src="deform-1.webp">
<img src="deform-2.webp">
</div>
<p>However, after watching <a href="https://youtu.be/FXfc4Gyw6I0">this video on bind poses</a> by Doodley, it seems that... it doesn't really matter. Whether you use the T-pose, the A-pose, the lovingly-called hug-pose, or anything else really depends on what you plan to do with your character. Since Laura will mostly wield guns and keep her arms fairly low for most of the game, I decided to change Laura's modelling pose to an A-pose, with her arms pointed 30 degrees downward.</p>
@@ -138,5 +138,5 @@
<p>For the time being, here's a picture of the soon-to-be-retired current protagonist character. Smoothly shaded for your viewing pleasure.</p>
<img src="/projects/projectn5/devlog/20241222/retiree.webp">
<img src="retiree.webp">
</Content>

View File

@@ -9,7 +9,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2025-02-03" subtitle="The Making of a Protagonist, Part III" banner="/projects/projectn5/devlog/20250203/lauras-imposing.webp" />
<BannerTitle title="Project N5 Progress Update: 2025-02-03" subtitle="The Making of a Protagonist, Part III" banner="../../previews/2025/0203.webp" />
<TableOfContents />
@@ -20,15 +20,15 @@
<p>As promised before, I've worked on Laura's head a bit more. Her full face shield has been replaced with a face mask / respirator covering only the bottom half of her face. Also, I finally got the hair into a state I'm actually happy with. Here's a comparison:</p>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20250203/../20241222/laura-hair-flat-new-3.webp">
<img src="/projects/projectn5/devlog/20250203/laura-head-new.webp">
<img src="../../2024/1222/laura-hair-flat-new-3.webp">
<img src="laura-head-new.webp">
</div>
<p>The eyes took some work to get right, but I'm pretty happy with the current result. They're not proper eyeballs, but instead they're embedded into the head, which visually isn't significant because the flat shading would hide these details anyway. She has a brown left eye with a small sparkle, as well as a right eye replacement. This implies that Laura sustained further damage to the right side of her body, which necessitated replacement of her eye in addition to her right arm.</p>
<p>It's actually the result of UV unwrapping her model. Previously, every colour was its own material, which I wanted to change by switching to a texture atlas. Initially, of course, the UVs were a bit messed up, which resulted in this look:</p>
<img src="/projects/projectn5/devlog/20250203/laura-uv.webp">
<img src="laura-uv.webp">
<p>I still think this looks kind of cool.</p>
@@ -38,13 +38,13 @@
<p>I added earrings too:</p>
<img src="/projects/projectn5/devlog/20250203/earrings.webp">
<img src="earrings.webp">
<p>Just some small metallic rings that I thought looked cool. For positioning these correctly, I hid Laura's back hair at one point, which gave me the idea to model a ponytail / tied-up alternative hair look for Laura. I think it'd look really cool. I haven't created this yet, but I've laid some groundwork to make it work:</p>
<p>Laura's hair is now separate from her main mesh. The main mesh is rigged using a metarig generated through Rigify, whereas the hair has a manually-created armature. Also, the hair is split into the front part and the back part, separated by the hair band (which is part of the main mesh). This allows me to replace the flowing back hair with a ponytail easily in-engine without swapping out the entire character.</p>
<p>This is pretty cool, because I can now create scenes for each hairstyle, set them up with <a href="/projects/projectn5/devlog/20241222/#hair-animation">jiggle bones</a> to create flowing hair, and essentially add a toggle to switch between them in-game!</p>
<p>This is pretty cool, because I can now create scenes for each hairstyle, set them up with <a href="/projects/projectn5/devlog/2024/1222/#hair-animation">jiggle bones</a> to create flowing hair, and essentially add a toggle to switch between them in-game!</p>
<h2 id="rigify">Rigging and Using Blender's Rigify</h2>
@@ -67,21 +67,21 @@
<p>Since the shader I'm using in Blender is quite different from the one I am planning to use in Godot, here's a shot of Laura with the Godot shader:</p>
<img src="/projects/projectn5/devlog/20250203/laura-shader-inengine.webp">
<img src="laura-shader-inengine.webp">
<p>I've been thinking of adding an option (perhaps as a cheat code) to change her outfit's colour hair band, sweatshirt, and the rings on her right prosthetic fingers. I first didn't know how to implement this, but now that I've learnt a bit on how to use shaders, I think this could be achieved with a custom UV mask and a parameter that determines at which position the UV is sampled from the UV would then contain several colour options.</p>
<h2 id="pics">Some Funny Pictures</h2>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20250203/ok.webp">
<img src="/projects/projectn5/devlog/20250203/dance.webp">
<img src="/projects/projectn5/devlog/20250203/naruto.webp">
<img src="ok.webp">
<img src="dance.webp">
<img src="naruto.webp">
</div>
<div class="horizontally-centre-aligned">
<img src="/projects/projectn5/devlog/20250203/shock.webp">
<img src="/projects/projectn5/devlog/20250203/reprehension.webp">
<img src="/projects/projectn5/devlog/20250203/disgust.webp">
<img src="shock.webp">
<img src="reprehension.webp">
<img src="disgust.webp">
</div>
<h2 id="future">The Future of this Devlog</h2>

View File

@@ -10,7 +10,7 @@
</svelte:head>
<Content>
<BannerTitle title="Project N5 Progress Update: 2025-03-16" subtitle="Refactoring" banner="/projects/projectn5/devlog/20250316/fishmonger.webp" />
<BannerTitle title="Project N5 Progress Update: 2025-03-16" subtitle="Refactoring" banner="../../previews/2025/0316.webp" />
<TableOfContents />
@@ -18,7 +18,7 @@
<h2 id="laura">Introducing: Laura</h2>
<img src="/projects/projectn5/devlog/20250316/laura.webp">
<img src="laura.webp">
<p>Laura is finally, <i>FINALLY</i> a playable character in the game!! I cannot overstate how cool this is. To finally see the character I've been creating for actual MONTHS in my game is HUGE.</p>
@@ -26,15 +26,15 @@
<p>With the implementation of Laura came some other changes as well. The over-the-shoulder camera had already been adjusted to fly over the character's left shoulder, but now Laura also holds the weapon in her left hand. Plus, the camera was changed, because Laura is smaller than the chunky robot I had in her place before.</p>
<img src="/projects/projectn5/devlog/20250316/laura-spinning.gif" style="max-width: 400px; object-fit: cover;">
<img src="laura-spinning.gif" style="max-width: 400px; object-fit: cover;">
<p>I even added swooshy hair using the JiggleBones plugin, though I've already removed that plugin from the project, which I'll elaborate on later.</p>
<Video src="/projects/projectn5/devlog/20250316/hair-swoosh.mp4" />
<Video src="hair-swoosh.mp4" />
<p>I was also able to implement <code>LookAtModifier3D</code> to make Laura look at any enemy she's targetting. In the video, however, you can also notice that Laura's irises don't follow her head. That's a bug and it'll be fixed soon-ish.</p>
<Video src="/projects/projectn5/devlog/20250316/look-at.mp4" />
<Video src="look-at.mp4" />
<h3 id="not-happy">...and I'm not happy about it?</h3>
@@ -60,7 +60,7 @@
<p>The Igniter is a flamethrower with a rapid firing rate. Here is it in action:</p>
<Video src="/projects/projectn5/devlog/20250316/106.mp4" />
<Video src="106.mp4" />
<p>The particle effect is a single .webp that was originally meant to have a blur effect, but I used Alpha Scissoring as the transparency mode in the <code>StandardMaterial3D</code> and kind of liked the effect, so I kept it. The fire effect is BY NO MEANS finished though.</p>
@@ -76,7 +76,7 @@
<p>The second weapon I've added is a rifle-type weapon! Whether it'll just be a rifle or a <i>sniper</i> rifle, I haven't decided yet.</p>
<Video src="/projects/projectn5/devlog/20250316/107.mp4" />
<Video src="107.mp4" />
<p>This rifle, unlike the Igniter, fits the ideas I've had for the story much better. I can imagine Laura using this as a long-range weapon from behind covers, possibly paired with a sliding mechanic that allows her to quickly and stealthily move between hiding spots, leaning over them to take shots... could be cool.</p>
@@ -90,21 +90,17 @@
<p>I upgraded the item preview window slightly. Previously, the weapons just spun aimlessly, but now they can be tilted using the right analogue stick or the mouse to gaze upon them better! It's a small change but I'm proud of it, so here it is:</p>
<Video src="/projects/projectn5/devlog/20250316/item-preview.mp4" />
<Video src="item-preview.mp4" />
<p>I also fixed a long-running bug where the <code>DirectionalLight3D</code> of this preview would cast light on the gameplay world. This was caused by the preview being in the same physical space as the rest of the world (unavoidable) and being on the same visual layer (totally avoidable). I changed the layers, adjusted the light so that it doesn't contribute to the sky (very important with a shader that takes the scene's main light into consideration!), and it relieved a great headache that caused oddities such as two specular highlights on every model that received light.</p>
<h3 id="weapon-icons">Please Appreciate These Wonderful Temporary Weapon Icons</h3>
<div class="horizontally-centre-aligned">
<img src="
/projects/projectn5/devlog/20250316/104-icon.webp">
<img src="
/projects/projectn5/devlog/20250316/106-icon.webp">
<img src="
/projects/projectn5/devlog/20250316/107-icon.webp">
<img src="
/projects/projectn5/devlog/20250316/108-icon.webp">
<img src="104-icon.webp">
<img src="106-icon.webp">
<img src="107-icon.webp">
<img src="108-icon.webp">
</div>
<h2 id="code">Grand Code Overhaul</h2>
@@ -144,7 +140,7 @@
<p>The enemies have pathfinding now implemented! I used Godot's <code>NavigationRegion</code> to create a mesh the enemies can traverse. Since they all inherit from <code>StairsCharacter</code> a class I once downloaded to deal with stair stepping for <code>CharacterController3D</code>s they can traverse the world about as easily as the player. It works super well! I was able to piece it together quite quickly, after a friend of mine figured out how to implement navigation in another game we're working on together.</p>
<Video src="/projects/projectn5/devlog/20250316/enemy-stairs.mp4" />
<Video src="enemy-stairs.mp4" />
<h2 id="story">Story Changes</h2>

View File

@@ -9,7 +9,7 @@
<title>The Making of a Protagonist IV | denizk0461</title>
</svelte:head>
<BannerTitleAlt title="The Making of a Protagonist, Part IV" subtitle="Project N5 Devlog" date="2025-04-27" banner="/projects/projectn5/devlog/previews/20250427.webp" />
<BannerTitleAlt title="The Making of a Protagonist, Part IV" subtitle="Project N5 Devlog" date="2025-04-27" banner="../../previews/2025/0427.webp" />
<ContentSidebar>
@@ -23,7 +23,7 @@
<p>As promised, I've been working on Laura v2 which has now become v4. On the right is the current/soon-to-be previous model of Laura, on the left is my current progress on her new model!</p>
<img src="/projects/projectn5/devlog/20250427/laura-comparison.webp">
<img src="laura-comparison.webp">
<p>(By the way, the left picture is the most recent version of the model. Other pictures on this page will be older and may have some slightly different details!)</p>
@@ -39,7 +39,7 @@
<li>Her eyes have been socketed in a different way. Previously, they were flat faces directly behind her irises, but now they're much more recessed, which likely/hopefully won't be visible using flat shading. I also edited the normals to look less like the sclera is recessed. I'm hoping this'll make animating easier, since the irises can now move more freely without clipping into the sclera.</li>
</ul>
<img src="/projects/projectn5/devlog/20250427/laura-comparison-eyes.webp">
<img src="laura-comparison-eyes.webp">
<h3>Things to Work On</h3>
@@ -61,9 +61,9 @@
<h3>The Eternal Hair Struggle</h3>
<p>I've <a href="/projects/projectn5/devlog/20241222/#hair">struggled with hair before</a>, and it's not gotten <i>much</i> better. Check out Laura's current ponytail:</p>
<p>I've <a href="/projects/projectn5/devlog/2024/1222/#hair">struggled with hair before</a>, and it's not gotten <i>much</i> better. Check out Laura's current ponytail:</p>
<img src="/projects/projectn5/devlog/20250427/ponytail.webp">
<img src="ponytail.webp">
<p>Looks like a banana!</p>
@@ -73,13 +73,13 @@
<p>The current version of Laura is based on the following sketches:</p>
<img src="/projects/projectn5/devlog/20250427/body-sketches.webp">
<img src="body-sketches.webp">
<img class="inline-img-left" src="/projects/projectn5/devlog/20250427/laura-v2.webp">
<img class="inline-img-left" src="laura-v2.webp">
<p>I worked with these sketches to create the first remodel of Laura. Originally, I was decently happy with the result, though her sleeves seemed boring just ballooning and lacking an interesting shape.</p>
<img class="inline-img-right" src="/projects/projectn5/devlog/20250427/laura-v3.webp">
<img class="inline-img-right" src="laura-v3.webp">
<p>I had quite a few ideas to improve the current and rather boring Laura model. At the centre of the remodelling was keeping Laura's character but giving it more edge through a more unique silhouette. I wanted to accomplish this by adding textures and detail, layering clothes, and giving more shape to her.</p>

View File

@@ -9,7 +9,7 @@
<title>Reboot | denizk0461</title>
</svelte:head>
<BannerTitleAlt title="Rebooting the Project" subtitle="Project N5 Devlog" date="2025-05-23" banner="/projects/projectn5/devlog/previews/20250523.webp" />
<BannerTitleAlt title="Rebooting the Project" subtitle="Project N5 Devlog" date="2025-05-23" banner="../../previews/2025/0523.webp" />
<ContentSidebar>
@@ -37,11 +37,11 @@
<h3 id="changes">The Project Changed</h3>
<p>For quite a while after I started <i>Project N5</i>, I didn't know where to take the project. In fact, I was stuck at the idea of a robot protagonist for <i>such a long time!</i> Laura only came to mind <a href="/projects/projectn5/devlog/20241127/">much later</a>. With her, however, my ideas for the project started to change slightly.</p>
<p>For quite a while after I started <i>Project N5</i>, I didn't know where to take the project. In fact, I was stuck at the idea of a robot protagonist for <i>such a long time!</i> Laura only came to mind <a href="/projects/projectn5/devlog/2024/1127/">much later</a>. With her, however, my ideas for the project started to change slightly.</p>
<p>Don't get me wrong the essence of the game is probably still pretty much intact. However, I want to make the game a little less combat-focussed, which meant that especially the weapon structure I had built up made no sense anymore. I built the system specifically so I could implement as many different weapons as I liked. Recently, though, I decided that 4 is enough, which made the grand system redundant.</p>
<p>Add to this the fact that, with a lesser focus on combat, an <a href="/projects/projectn5/devlog/20240324/">arena</a> made <i>no sense at all!</i></p>
<p>Add to this the fact that, with a lesser focus on combat, an <a href="/projects/projectn5/devlog/2024/0324/">arena</a> made <i>no sense at all!</i></p>
<p>Trying to bodge my old codebase "Altlasten mit sich tragen", as one would say in German felt wasteful.</p>
@@ -49,7 +49,7 @@
<p>Considering I started one week ago, I'm doing decently well:</p>
<img src="/projects/projectn5/devlog/20250523/over_the_shoulder.webp">
<img src="over_the_shoulder.webp">
<p>What you can see here is my new Laura model (not yet finished!), with a partially-applied toon shader and an outline shader on top. The UI elements include a health counter (on top), a money counter (bottom right), a placeholder for the popup menu(s), a crosshair in the middle of the screen (the dot), and an aim helper texture also in the middle of the screen (the cross). The two boxes represent enemies, not in function, but in their physics layers and in targetability.</p>
@@ -61,7 +61,7 @@
<p>Check out the new weapons:</p>
<img src="/projects/projectn5/devlog/20250523/new_weapons.webp">
<img src="new_weapons.webp">
<p>With these, and with the UI in the previous screenshot, you may have noticed a theme: I'm putting less time into temporary assets. While nice to play around with, it's unnecessary to spend an hour designing a UI element when I already know I'll 100% replace it down the line. Thus, most elements are either entirely simplistic (text, primitive MeshInstance3D, etc.), or just very simple textures.</p>
@@ -71,6 +71,6 @@
<p>I'm happy I took this step!</p>
<img src="/projects/projectn5/devlog/20250523/taking_aim.webp">
<img src="taking_aim.webp">
</div>
</ContentSidebar>

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 185 KiB

View File

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 168 KiB

View File

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 167 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

Before

Width:  |  Height:  |  Size: 533 KiB

After

Width:  |  Height:  |  Size: 533 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

View File

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Some files were not shown because too many files have changed in this diff Show More