added new devlog

This commit is contained in:
2025-05-23 22:51:14 +02:00
parent 6eaf456bd7
commit ebc68f3f0a
8 changed files with 82 additions and 1 deletions

View File

@@ -6,6 +6,11 @@ export interface DevlogPost {
};
export const posts: DevlogPost[] = [
{
title: "Reboot",
subtitle: "2025-05-23",
date: 20250523,
},
{
title: "The Making of a Protagonist, Part IV",
subtitle: "2025-04-27",

View File

@@ -12,7 +12,7 @@
<Content>
<BannerTitle title="Project N5; Development Log" banner="/projects/projectn5/devlog/20240323/unity_overview.webp" />
<p>This is the development log for my game <strong>Project N5</strong>! It's an action-adventure jump-and-run game heavily inspired by games such as Ratchet & Clank. Development started on <b>2023-09-16</b>.</p>
<p>This is the development log for my game <strong>Project N5</strong>! It's an action-adventure jump-and-run game heavily inspired by games such as Ratchet & Clank. Development started on <b>2023-09-16</b> and rebooted on <b>2025-05-16</b>.</p>
<p>2023 progress updates summarise an entire month's work, respectively. Progress updates thereafter denote noteworthy achievements in a more collected format.</p>

View File

@@ -0,0 +1,76 @@
<script>
import BannerTitleAlt from "$lib/banner-title-alt.svelte";
import ContentSidebar from "$lib/content-sidebar.svelte";
import TableOfContents from "$lib/table-of-contents.svelte";
import Video from "$lib/video.svelte";
</script>
<svelte:head>
<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" />
<ContentSidebar>
<TableOfContents slot="side-left" />
<div slot="main">
<p>20 months after starting <i>Project N5</i>, I decided to restart the project. In fact, a friend of mine assumed I'd do it all the way back in December 2023! Initially, I resisted, though I toyed with the idea for quite a while, before finally deciding that this is best for the project last Friday (<b>2025-05-16</b>).</p>
<h2 id="why">Why?</h2>
<p>There are two main reasons for starting the project from scratch again.</p>
<h3 id="improvement">I Improved</h3>
<p>The first reason is simple: I improved as a programmer.</p>
<p>Back when I started <i>Project N5</i>, I had never actually used Godot before. This project was my first experience developing in Godot, and to a greater extent, my first attempt at making a full-scale game! I set out a huge goal for myself, though I welcomed the challenge.</p>
<p>With stagnation in my progress especially in the summer of 2024, I felt I outgrew the project's codebase in some way. Also adding to that is the fact that I was working on <a href="/projects/#projektike">another game</a> with two friends, where I had to write clean solutions and well-structured code to keep the project modular (especially during the stage where we hadn't quite figured out where to take the project) and understandable for the others. This resulted in me learning the ropes of Godot and GDScript much more than I had before.</p>
<p>I initially tried to tackle the issue by refactoring the codebase of <i>Project N5</i>. Even though I made significant progress, I later felt that the codebase was flawed from the core. I felt this way especially while I was recently trying to implement a new weapon what a hassle that was!</p>
<p>Which leads nicely into my second reason...</p>
<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>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>Trying to bodge my old codebase "Altlasten mit sich tragen", as one would say in German felt wasteful.</p>
<h2 id="currently">The Current State of the New Project</h2>
<p>Considering I started one week ago, I'm doing decently well:</p>
<img src="/projects/projectn5/devlog/20250523/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>
<p>There are a lot of improvements: targets, for example, are now not defined by a special node setup, but rather by a <code>Target</code> prefab, which can easily be positioned anywhere (enemy or environment) and be used to guide player projectiles.</p>
<p>The code is also <i>so much more streamlined...</i> I put many elements into their own components to avoid cluttering the <code>player.gd</code> script with an overwhelming amount of responsibilities. That way, what was previously a 300+ line script handling player movement, aim direction, messages, equipping items, interacting with objects etc. is now a lean 50+ line script (although ofc not everything from the previous project is implemented here yet, such as the vendor interactions). Anything that's not directly related to the player has its own component script to keep things separated as much as possible. Currently, there is also no singleton <code>SignalBus</code> routing wildly between any and all nodes. Instead, signals are just defined in their components and connected directly to only the components needing them. This also means that components only take care of tasks that are explicitly meant for them; the guns, for example, no longer calculate the position which the projectile is flying towards. Instead, they can now simply retrieve an aim direction from the <code>AimManager</code>, requiring much less code in each weapon. Everything's so clean and I love it.</p>
<h3 id="weapons">The New Weapon Arsenal</h3>
<p>Check out the new weapons:</p>
<img src="/projects/projectn5/devlog/20250523/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>
<h2 id="continuing">Continuing</h2>
<p>Progress has been quick, which I really liked. It felt as if project development picked up again. Of course, a lot of this has to do with the fact that I'm just programming things I've already once programmed, so I have to put less time into coming up with ideas and can instead solely focus on the implementation. However, I feel that this cleaner codebase will allow me to expand much more easily and develop a less bug-ridden game than if I had simply continued with the old codebase.</p>
<p>I'm happy I took this step!</p>
<img src="/projects/projectn5/devlog/20250523/taking_aim.webp">
</div>
</ContentSidebar>

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB