Saturday, January 13, 2024

Update #7: Cel-shaders, stories, and Mountains~

 

Hey hey~

Kay here 👋



This week, I didn't get as much done as I would have liked to, but that's not to say that no progress at all has been made~

Things worked on this week:

  • Cel shader material
  • Cobeta's story
  • Planning out the character creator
  • Some initial setup for landscape models

 

Cel Shader

More work, less results ;-;

After finishing up last week's blog, one of the first things I got to work on was the cel shader, and while I'd like to say I made a lot of progress,  on it, sadly that's not the case, or at least it feels like I've made no progress compared to last time. 

I opted to not use a post process material for the look, which means that I needed to implement multiple lights by hand. Surprisingly this was a lot easier than I initially thought. However, there are some problems I need to work past, like how I've been having trouble getting the light to fade away with distance or how I'll be able to dynamically assign lights to the material.

As of right now, how it works is I plop a light blueprint into the scene and it automagically plugs in its distance into the material and it just works. However, if I were to put a second light in the scene, it flip flops back and forth between the two lights. I also happened to find out that Switch statements in the material editor cannot be dynamically messed with, so oh well. Right now, my current planned fix for this is to attach a giant volume around the garde which, when a light enters it, will cause the light to be added to an array, check which light index is available and assign the index to that light. If there's no indices left, then I'll probably just have it not affect the material.

However, this is for distances only. Color (of any sort) has yet to be implemented in the cel shader at all. I'm sure that's not going to haunt me in the future >.>

Lights were one of the last things I messed around with this week for the cel shader, so I talked about it first since it was fresh on my mind. The first part I worked on though for the cel shader was my attempt to break up the harsh line between different light levels, to varying degrees of success. 

And so, with that goal in mind, I opened up photoshop and made a pretty generic painting texture for use in a mask:







Initially, my attempt at breaking up the harsh lines relied on me just using this texture as a mask, using it to apply the previous band's color/light level and applying it one level up. It was a good result, but not quite what I was looking for. For one, that line was still there between the bands, and secondly, it was ugly as sin:


As you can see, the texture only covers a small part of the banding, leaving a majority of the model without this texture. More importantly, it doesn't wrap around the model on only where two bands meet, so of course, that's what I worked on next.


With some color tweaks, this result looks better, sure, but something was still off. For one, the entire reason of the texture I made was so I could get that thin slice of painted border that was on the edge to wrap around the entire band. While the texture was all there in this picture, you can still see some places where it's missing and it looks like a stretched mess (This stretching will be my downfall later)

After that attempt, I thought to myself "Okay, let's start from 0 with this texture in mind and see *why* I can't get this to work", and so I did. I made a new material assigned it to this placeholder model, and played around a lot, only using one band of color between light and dark, trying to adjust everything to get a successful result on one part.


Looks pretty good, if I say so myself. I did notice more stretching, but I can fix that a bit lat-

Fuck.

I didn't lose much progress, but the result I had up there was certainly lost. I tried my best to get it how it was before, but sadly I couldn't, though it was still serviceable. However, once I got over that small loss, I really focused on the texture itself. As of right now, I was rather reliably able to pluck out bands from the lighting vector, so all that I needed to figure out was how to align the texture to this light vector. I added tons of control to the UV of the texture in all of my attempts to get it to line up with the light, but to no avail. 

 

 


Like any true programmer, I gave up and slept on it. Several odd dreams later, I did some more looking and found out about a node called "rotatevector", which in the end became a life saver, meaning I could rotate the texture to face the light, and adjust it so the texture's edge will only show up in the narrow band I've marked out. Once I completed all of that, I wanted to add one final touch to the effect, where I would have a gradient applied to the narrow band, causing the paint texture to fade out slightly where it faces the light. This went well too, though this comes with a caveat that it only applies to one light source still at this point, so I'll have to see how well it works when I try to apply several overlapping light sources.

Now, just when I thought everything looked great in the little sphere up above, I came across a very glaring issue: No matter how much I tweaked the parameters, I just could not get the effect to look good on the test models I had. I could get it to look good on only one part of the model, but then it would look horrible on other parts of the model. Eventually, frustration set in and after attempting a myriad of things I came to the realization that the test models I was using was subject to horrible UV stretching, meaning no matter what I did on the material side, it would simply not work on the model. It was at this point that I simply gave up. 

Despite that, I don't consider it a failed attempt, tinkering around with it, even though it took a while, has allowed me to come up with a plan in mind for how the whole material is going to work later on when I can have a proper 3d model to use it with, which means its time for me to fully focus on Cobeta's design and model.


Cobeta's Story

Between driving myself insane with materials and lamenting my lack of success on said material, I decided to work on Cobeta's storyline. I've had about half of Cobeta's story planned out, but the part I was really struggling with thus far is the first half, and to have the story feel genuine and not forced. Unlike the Gardes that will be added to the game later, Cobeta's story isn't structured in the same way as theirs, with the plot only really kicking in at a much, much later point in time compared to the others, which made it really difficult for me to fill in that time between the player first booting up the game and that point, and to fill it up in a meaningful way. And since Cobeta's meant to only be the test character, I'm restricted in what I can and cant to. If I have to do something specific for her story, I have to make sure it's not a mechanic that's *only* for her story. I have to make do with what's going to be in the demo, and nothing more. This isn't a problem for a game that's going to be purely a visual novel, but for my game which will be a mix of gameplay and VN elements, I can't exactly ignore one in favor of the other, I have to do them both well.

With that said, I *think* I'm on the right track with her story, and I'd say it's about 65% done. Once I do get finished with it though, I'm planning on doing a second or third pass over the story to really review and refine it before tossing off a test build to my patrons. The main meat of this story will probably be sidequests, which I certainly need practice in making. Though, as a nice side effect of how I'm setting this up, items will be no problem. Items are so easy to set up and spawn, in fact, that repurposing them for any situation will be a piece of cake for when modding becomes available in the game.


Character Creator

Before I dive head first into making a character creator in-engine, I decided to boot up (modded) Koikatsu and take notes of how that game does its character creation. Illusion games in general are fantastic for character creation, so using them as reference will keep me from wandering in the dark for 85 weeks, though I don't plan on just copying from that, but seeing where where I can improve upon it, or see where modders have already improved upon it.

I haven't just been doing that though. In a separate document, I've been planning on how mine will work. For now, I've decided to use blendshapes on top of a base mesh as that seems to work well when blending. Let's just ignore the fact that's the only method I've seem to have come across. I'm going to do some more planning in this area in the upcoming week in preparation for making Cobeta's 3d model. 


Landscape Models

I mentioned it before, but sculpting heightmaps in Unreal is a pain in the ass. I don't mind it for the main landscape, but when it came to detailing the mountains outside of the playable area, the height limit for the landscape quickly became a pain in the ass to deal with, so I'm just going to place a whole bunch of 3d models around the map and call it good.

I initially made a new heightmap in TerreSculpter and imported it into blender. After fiddling around with the displacement modifier on a plane, I finally got it to work. Much to my dismay though, the plane was too low res. And so, I subdivided it until it was high poly enough.
Just kidding, I subdivided it a few times and my computer froze. No, I didn't save the blend file in time so I lost the work. Oops

This time I decided to do it a bit differently. Instead of loading up the entire heightmap at once in high poly, I'd only make one section high poly while I kept the rest low poly. The low poly portions were so I could at least see what section of the heightmap I was working on. So, I made a relatively high-poly plane (this time without applying the subdivision modifier), turned off said modifier so my computer didn't lag and made an 8 by 8 grid of individual planes, allowing me to keep a low poly version of the main heightmap. After that, I duplicated this grid and hid the planes. A fortunate thing about my computer is that even if I have too many vertices/tris that would usually crash my computer in the blend file, if I keep them hidden, I shouldn't have any problem. 

After organizing and renaming everything, I was left with this

You can see in the orange outline how that part of the heightmap is more detailed than the surrounding parts. 

Now, all that work was just the setup for what I plan to do in the future, which is to sculpt individual mountains from this heightmap to have more character as well as implementing overhands. But as I said, for the future. I'll keep this file in my back pocket until next month, where I'll have access to some sculpting brushes specifically for rocks n stuff




That went on for a bit longer than I expected

This upcoming week though, I plan on being much more focused on a few things:

Finishing up the character creation document and Cobeta's Design

Hopefully by next week I'll be able to show off the first design for this game~


Thanks for reading~
I hope you enjoy the game when a download cums out~ 👋
If you like what you see be sure to support me on Patreon~

Discord Server for those that wish to join~

A playable build will be released on March 1st~

 

And a thanks to these patreon cuties. If you see them, make sure to let them know they're super cute!

Casual

Paracosm

YoLo360SwAgScOp3

 




Sunday, January 7, 2024

Update #6: Oh jeez it's been a minute

 

Hey hey~

Kay here 👋


Wow, I have been neglecting this blog far too much >.>
Oops

The last blog post was a bit over 6 months ago, and in it I was talking about some of the core functionality of the gardes and the world map. A lot has changed since the last blog post, and from now on, I hope I can be disciplined enough to write one of these a week.

 Before I get into the details of that I think I should say something a bit more important:

 

Demo target date and what will the demo have?

I want to do my best to have the demo open to the public on March 1st. People that support me will most likely get the demo a bit sooner to find and squash any bugs.

Here are some things that I 100% want and you should expect to see in the demo:
  • A beta-testing Garde, fully animated and working
  • Full story with said Garde
  • Sounds and music
  • Day/Night Cycle
  • The very base of the world map

Here are some things I want to be able to put into the demo, but I can't absolutely promise they'll be in there (perhaps due to time constraints, me working too slowly, or just me being too stupid to implement them in a satisfying way)

  • A more fleshed out world which would have trees, rocks, ect
  • At last the beginnings of one of the two towns in the game
  • Saving and loading
  • Several items, as well as the ability to buy and sell said items
  • Main menu, settings menus
  • A more fleshed out user interface that doesn't use the default ue4 graphics
  • Some desperately needed fluid simulations ( ͡° ͜Ê– ͡°) 
 

Why it takes me a while to do things

To be Frank, I'd have to change my name. 

A mix of perfectionism and me just being stupid in general is the main source of me taking a long time on this project. With many of the things I implement, I try and learn more about them; a mix of me not understanding things well enough to just do a quick google search to figure it out and implement a mechanic and a stubbornness to not just blindly copy a tutorial and call it good. 
The result is that I take the extra time to figure out why things that I'm implementing are done a certain way over other methods (or that other methods even exist in the first place), but the cost is, well, time. 


Anyways, if you want to keep up with my shenanigans and the game, feel free to hop into the discord server~

Now for the fun parts~


Changes since the last blog post


World

    The main landscape is mostly sculpted, meaning that the whole game world is basically explorable right now except for a few key areas, namely the end of the game and a few cave systems I want to make. However, This is just the base landscape, I still have to add in the grass, trees, rocks, et cetera. Essentially all of the beauty elements in the world are missing, this includes lakes and rivers.

I do have assets from elsewhere I can plug in as stand ins, however they're not being added until after the main landscape is 100% done, and even then I will probably want to use my own assets instead.

Most of the mountains I want are still missing, but that's due to unreal engine being a pain in the ass with heightmaps. My computer isn't the most powerful so I've been optimizing things as I go; Unreal engine's sculpting mode isn't so bad, but loading in everything takes me about 10-20 minutes.
I can at least guarantee this game will run on any computer though.
 
More recently, I've been discovering the limits of using only heightmaps for my landscape, so I've been taking the extra time to sculpt some pretty mountains in blender. Those will still take some time because unlike unreal, blender has a tendency to hard-crash my computer when I get a little too spicy with it.

Going for something more mechanical, I have implemented a day-night cycle and a working calendar system, however it is *very* buggy still. This mostly has to do with how precise I want the sun's rotation and the game time to be synced. It's rife with floating point errors and incorrect angles.
Sadly, it looks like it will be my third time rewriting that system soon....


Story

    All of the stories for the Gardes are still in the idea stage. I've been more focused on getting the core fundamentals of the game up and running. However, the beta Garde's story is out of the ideas stage since that Garde in particular will be in the Demo. I hope everyone will enjoy playing with her when they play :3
Within the next week or so, her story might be completed in its entirety and I can work on implementing it.
 
I've done some much-needed world building too. At this point I don't know if I want to include more of the pkmon since that will carry more risk of me being bonked. Maybe, maybe not.

Mechanics

With regards to this, I have a ton of ideas planned out, however they're mostly split into two categories:
Core features that will make it into the full game and Wishful mechanics I want to add eventually but can't justify implementing them before the core game is done
 
Core Features:
  • The Core cast of Gardes
    • This number has been slowly going up, so I'm limiting it for now before it reaches 10, but I keep slowly adding more and more. Oops
  •  Berry farming.
    • I had this as a planned feature for quite some time now, way back when this game was still a bunch of documents. The core features of this has been added, but some additional tweaks will have to be refined. 
  • Custom Gardes
    • That's right, I want the player to make their own gardes in a character creation thingy. I can't promise it will be as good of a character creation as koikatsu, but I'm going to try my best anyways. This will probably be one of the last things I work on. Or first I don't know.
  • Custom Garde scripts you can share and download
    • What's the point of making a cute Garde of your own design if she doesn't do anything and you can't share her with others? I've been slowly building up a way to write scripts/stories in game and have them associated with a Garde and share them. The custom scripts in general will be one of the first major gameplay features that will be added because, in order to make sure this works, I'll be using that system as well to write and implement the core garde's story and cutscenes.
  • Shrine offerings
    • I can't say too much about this since it's story related, but out in the world you'll find broken shrines that you can offer materials to in order to repair them. When you do, you'll be able to offer specific things to them and receive certain benefits....
  • Shopping and selling materials you find
    • Not much to say about this one. When the world is fully realized, I'm going to make a list of materials you can find in the world just by walking around. Pick them up and you can either refine or sell them. This comes in two parts though. I want to make a basic version of this, and a more involved, refined version later on.
  • Weather and atmosphere
    • One of my core goals in this game is that when you're not interacting with the world, you can just sit back and take in the world's atmosphere like a comfy blanket on a rainy day. On the more mechanical side of things, I do want dynamic weather but that will take some more work when the day/night system is fixed, since it will be dependent on said day night cycle system
  • General Gardevoir customizations
    • (Almost forgot about this one)
    • Needless to say, in the final game, you'll be able to customize your gardevoir in various clothings, hair styles, and colors/patterns (custom patterns supported :3)
 Wishlist Features:
Features I really really really want in the game but can't fully promise them.
  • Custom Gardevoir accessories
    • This one's pretty self-explanatory. I want the player to be able to make their own models, hair styles, and clothes and bring them into the game in an easy way.
  • Custom Animations
    • Like with custom accessories, I want the players to be able to do the same with animations. This one will be a bit more difficult for my skillset, so a feature like this would have to be added near the end.
  • Fishing
    • Comfy....
    • Women want me, fish fear me
  • Seasons
    • Technically already half-implemented, but like with weather, I want seasons to have their own atmosphere to them and mechanics implemented with them. Out of all the "wish" features, this one's the most likely to get added before the end of the game.
  • More expanded materials system
    • I've already talked about how I wanted the player to find and sell materials they find in the world, however its current planned form is surface level only. I can't really justify a more involved version (where the player has to actually chop trees, mine rocks, ect), but I still want to add it. Why? Because I personally find those mechanics fun, especially when they're expanded upon in the right way and not just as a material grind.
  • A more expanded world
    • As of right now, there's a train planned to go from town A and town B for the sake of fast travel (cause I may or may not have made the world a little to big on accident), and said tracks were always planned to leave through some mysterious tunnel. I think it would be fun to take a train to a more city like place. What would be done there? Who knows, I'd have to make a more detailed plan for it.
  • Custom Player worlds
    • Not much to say about this one. Since players can make and place their own gardes in the world alongside stories, then eventually they're going to run out of places to put them, right?
  • Non-Garde charcter creator
    • Basically would let players create non-human and human characters instead of just gardes

Garde Specifics

Right now, the beta garde that's in the came (Called "Cobeta") is in the works. Cobeta's story is a decent way finished, but not as complete as I would like it to be. Unfortunately I can't share the design of Cobeta, but it will be revealed next week maybe~
 
A long, long time ago I did a quick and dirty cel shaded look for the gardes
 
 
 
I never really did like how this result came out and always told myself "Well, I'll re-do it later"
Later has come and so have I. This past week or so I've been learning the hell out of HLSL and unreal engine's general shaders/materials. I knew how to use it before but never in a truly deep level.
Once I learned all of that, I made some plans on how the shader would need to look and opened up the material editor and started experimenting. I had to write this blog post you're reading right now before I could finish my experiments, but I've gotten a lot better results, though I'm still not completely satisfied with it.



There's limitations that I don't really enjoy with this shading method and with the placeholder model in general. 
The first limitation that I can't bear is the fact that this style of shading doesn't react to lights. At all.
You have to make up your own lighting model for it or create the shader as a post-process material.
I do not want to go the post process route if I can avoid it.
The other problem with this is that the placeholder model is horrendously low poly and base texture quality is low as well. 
Overall it's an improvement from before, but this is only the start. I have a few more things I need to learn though in order to complete the little checklist I have for how I want the cel-shaded look to be.

User Interface

 I hate designing user interfaces, I think I have no skill in doing it, however I am quite happy with this one. It's still in the design phase so things would be shifted around, but I hope people can see it whenever the demo comes out. So far the main menu and the generic buttons you'll see have been made, as well as the general fonts you'll see within the game. There are a few other ideas that I'll still need to make assets for, but I'll get to them when I'm not preoccupied with other parts of the game.

Music and Sounds

I have no confidence in my sound design abilities, but I'll try my best nonetheless. Most of the base sounds I have chosen out for the game have been chosen, but are still in their raw sound files, so I'll probably do a lot of work on them. The GDC game audio bundle has been an invaluable source for many of these sounds as well. For the few sounds that I can't get or I'll have to make, I'll need to get my hands deep into fl studio in an attempt to supplement them, such as the Garde bleeps, some user interface button noises, and other environmental sounds that don't really have a real world equivalent. Though that's not to say that the sounds I've already chosen out wont need to go through the FL Studio pass over before going into the game. Then there's also the glaring issue that I know next to nothing on implementing sounds in a decent way in unreal engine.

*sigh* Back to learning I guess.

As for music, I'm going to either commission custom music for this game (if I have the money). If not, then I'll just settle for trying my best in making music in FL Studio. If this does end up being the case, I apologize to everyone beforehand for my terrible music skills.

However, there will be a radio object in the game, featuring all of the songs from my good friend ItsValeriaKitty (and from Ruby Bytes too). Be sure to check out all her songs, they're so great~

The radio wont have all her songs by default, you'll have to scour the game world to find them~~




With that, hopefully I wont have forgotten anything. Next week, I plan to have Cobeta's design finished, the cel shader mostly done, and perhaps I'll finally be able to fix that stupid day/night cycle that's been plaguing me for months. If everything goes well, I'll have another blog for you next week~

 

Thanks for reading~
I hope you enjoy the game when a download cums out~ 👋
If you like what you see be sure to support me on Patreon~
Discord Server for those that wish to join~

 

And a thanks to these patreon cuties. If you see them, make sure to let them know they're super cute!

Casual

Paracosm

YoLo360SwAgScOp3 (how do you even say this name?)