Tumgik
georgewfmpyear2 · 1 year
Text
Evaluation
I think this project for the most part was pretty rocky compared to some of my previous projects, particularly with the current state of the outcome but I do think it continued to help me build upon the specialisms that I’ve carved out during my time at college. I expanded and improved upon my use of child actors and arrays which helped me to create  a system where I could add entirely new spells for the player to use and skill sets to go with that spell in just a matter of minutes along with a clear dynamic menu to go along with those spells. I also built upon previous projects in a more direct way, using the voxel plugin and my own foliage spawning code to make entirely randomized open maps which is something I originally tried all the way back in my year 1 FMP and then attempted to improve upon using a different system in my first year 2 project. Although I didn’t end up sticking with a linear level format I did end up setting up my own system for laying out and planning the levels which I only used once but was very helpful for making that one level easier to design and make and would’ve been even more helpful if I had stuck to that original level structure. I also made use of various widget based techniques that I only know about due to projects I’ve worked on at home to improve the overall quality of this project.
For a lot of this project I felt pressured by the time limit that I had which was a product of setting my expectations for myself too high at the start of the project. I think this led to trying to rush in a lot of areas since there was so much I wanted to get done in the end. Rushing a lot of things had a backwards effect, crumbling my motivation for the project and hampering my decision making my game fall behind my own expectations of myself even more so then if I had managed to stay calm and take my time with many of the aspects. This is the most prevalent with the change to use fully randomized open levels rather than the tight linear gauntlets that I had spent much of the project building towards. At this point I can say that I think it was a good decisions as the project now falls into place as a more obvious progression of my previous work and led to me having a bit more of a complete game then I would’ve had otherwise but looking back at the initial decision I think I rushed into and should’ve spent more time going other then benefits and drawbacks of that decision. Despite some of those rushed decisions and the level structure change I think for the most part I have managed to stick too and achieve what I lined out in my project proposal, creating something that mechanically feels like a progression of my previous work and also shows off my creativity although many of the aspects didn’t quite live up to what I envisioned in my head.
As mentioned before I made a decision somewhat too late into the project to completely alter the direction I was going in with the level design and overall structure of the game which I think hurt then final outcome simply because I didn’t have enough time to fully flesh out that new direction and other areas also suffered since I was spending my time working on that new direction. For the most part however my project still meets the concept I outlined in my project proposal. The game still centres around a wizard and an author talking about the wizards' life stories with the actual levels being set in those stories, the only main difference being the structure of the levels. Like many of my previous projects I failed to live up to my own expectations with my ideas going beyond what I could physically do within the time that I had but considering the sudden level structure change reasonably late into the project I think I did as well as I could’ve within that short time frame and since having a complete game isn’t required for hand in I can continue working on and finish the game after the project has ended if I still want to get to my envisioned end goal.
The most important thing I could’ve done to improve this project was simply better planning so that I could be sure of the direction I was going in and whether or not it would work and be feasible within the time that I have. Most of the problems I had during this project were due to releasing certain things too late or properly making sure that certain things were actually possible to do and wouldn’t take time away from working on other areas. Even if they would’ve taken a bit of time to set up, creating more in depth, tighter plans would’ve helped me in the long run and hopefully spot time based issues before it's too late and make better, informed decisions about the direction of the project. Another thing I could’ve done is make time to give playtests and get more feedback from people to help with making those decisions about the direction of the project and whether any of the new things I’m trying to do are worth the time that I intended to put into them. 
Overall I think that this was a project of my own conflicting opinions. On one hand I’ve got some of the best mechanical systems I’ve ever made that are the end product of the specific areas I’ve worked in since starting the course and on the other hand i’ve got a game that is belo my own expectations of myself and could’ve turned out much better if I had stayed committed or made the decision to change direction much earlier into the project. Despite this I think that many of the elements of my project I wouldn’t have even begun to know how to make and make efficiently without all of my projects since starting college both at college and at home which shows that I’ve carved out a niche area and have continuously improved on that area to get to the point I am with this project and many of the things I’ve learnt while making it will help in any games I try to make in the future making this project a valuable part of both my college portfolio that I should feel proud of and can help me getting closer to being able to accurately create my increasingly ambitious ideas.
0 notes
georgewfmpyear2 · 1 year
Text
youtube
Gameplay Video
0 notes
georgewfmpyear2 · 1 year
Text
youtube
TRAILER
0 notes
georgewfmpyear2 · 1 year
Text
Itch.io Page
Tumblr media
0 notes
georgewfmpyear2 · 1 year
Text
Used Assets
Tumblr media Tumblr media Tumblr media Tumblr media
In order to save myself some time with the visual side of the project I decided to use a few asset packs from the unreal engines marketplace. I tried my best to stick to a similar visual style,. starting from the first pack I used, the low poly modular cowboy character. From the start, I wanted my main character, despite being a wizard to have a cowboy look, and on top of that this pack allowed for the creation of characters. the customization I got with the few models available was limited but it was enough for what I needed for this project. Next I found a low poly vegetation pack which had a large amount of foliage based assets which I could use to make my randomized worlds more diverse and unique while not feeling at odds with the other pack. While working on a different project from home I stumbled across the Assetville town pack which is intended for building street-like environments but contained a large list of interior and exterior low poly props which were perfect for my project, all for free. I also stumbled across a pack that contain an assortment of potion vials and cauldrons and other wizard-related stuff which obviously fit very well with my game and ended up becoming what I used as a visual representation for the limited items I added.
0 notes
georgewfmpyear2 · 1 year
Text
Compass
Tumblr media
youtube
youtube
Implementing a compass bar to mark points of interest was a lot easier than I thought it would be as it was simply a material that captures a part of an image and then that capture is moved based on a float parameter which is tied to the player's rotation. This material is added to a widget where that parameter is set so it can be displayed don the screen.
Tumblr media Tumblr media
The actual markers on the compass work in a very similar way and are simply the same material but with the image changed to be a small marker and the position of the captured is instead based on its position related to the players location and rotation.
Tumblr media
0 notes
georgewfmpyear2 · 1 year
Text
Optimization
Tumblr media
Since adding AI that uses behavior trees and even more so since switching to generated levels with heavy foliage I've had performance problems and those problems became all the easier to deal with once I found out how to use the profiling tools using unreals command tab. Using Unit Stat I can find out which broad areas of my game are causing performance issues and then from there I can use other commands to open up those broad areas and find some more specific areas that are causing performance problems. Both the game (blueprint code, typically ticks) and GPU were causing performance drops so I decided to start with the GPU. I was surprised to find out that shadows were using an incredibly high amount of resources compared to everything else which was slowing the game down a lot so I simply just turned off shadows for everything within the large randomized levels which had an almost unnoticeable visual effect and and a very noticeable boost for the performance. Switching over to what things in the game code were affecting performance I found out that there was a massive increase in the amount of things going off on ticks when AI begun spawning which was having a big effect on the performance. I looked through the AIs blueprints and tweaked a few things and although I had almost nothing that I knew about coming off of ticks or short event timers there was still a massive increase in ticks and performance drops when the AI began spawning so I may need to take a proper deep dive into how the AI work to find out why there is so much happening off tick for them that I don't know about.
0 notes
georgewfmpyear2 · 1 year
Text
Procedural/Randomized Levels
For the purposes of this blog and for the context of my game procedural generation and randomization both have the same purpose of creating levels/content without much input from the developer but I think its still important for me to point out the difference.
Randomization is, as the name implies, based entirely on the generation of numbers and in the context of games using those random numbers to pick and mix various elements that were created by the developer. E.G. Having an array of different possible dungeon rooms and then randomly picking which ones are used to build a dungeon level would be random generation. This is essentially what I'm using for my project, with the exception of the voxel plugin which uses procedural generation, as I'm using random numbers to pick pre-made elements like trees and grass to apply to levels.
Procedural generation while it may seem random and has little developer input has only a few randomized elements. Procedural generation allows the game to build the levels or content itself using an algorithm made by the developer rather than working purely on random numbers. E.G. No Mans Sky's near infinite universe isn't compromised of randomly generated planets by the game running a seed through an algorithm made by the devs which is how you can fly the different galaxies and then come back later and find the same planets you did before without them being stored by the game.
The benefit of both of these systems is that although they may initially take longer to set up that a straightforward hard designed level they can provide the game with significantly more content since the game can just simply keep making more. This comes with the obvious downside of it makes harder for the developer to control the players journey and there will quite a few elements that the developer can't account for. The levels can also lose their human made feel but in some cases depending on the game this can be a good thing.
Within the context of my game both linear levels and randomized levels could work. My initial idea was to have linear levels but I have little experience with that and found it stressful since I had no experience and I didn't want to have a half finished game by the end. Using randomized levels falls in line with my previous projects and in particular having randomized planets makes it feel like a successor to my year 1 FMP which took place on randomized planets. Using generation like this means I can also implement some what of a randomized story which is something I've always been interested in doing but it could mean losing a lot of what was behind my original idea as I wanted to have linear level progression with this big controlled set pieces which obviously isn't possible with randomized levels.
Overall I think randomized levels will be a better approach in the end for this project as it makes it fall in like with the rest of my projects, making it feel like the end goal of my specific niches that I've worked upon with each project
0 notes
georgewfmpyear2 · 1 year
Text
3D Elements In UI
Tumblr media Tumblr media
On an episode of boundary break on resident evil 4 remake they found out then when the player goes into the attach case while it seems like they cans see the game where they left of behind it what they actually is a screen grab of the game before they opened the case which is what allows for the 3D elements to be part of the UI since its simply just elsewhere in the map. This inspired me to take a similar approach and include 3D models into my UI in a similar way.
Tumblr media
I decided to implemt the large, covered in vines, clock that hangs over all of the levels along with the main characters hat and a few other elements into the inventory and way I got it to work was to have all of that in a separate actor which also includes its own small skybox for a background. when the player loads in one of these actors is spawned way above the map and is set to be hidden. When the player opens the inventory I set the viewport to a camera within this actor as well as setting the actor to be visible, everything else remains the same. Once the player closes the inventory the viewport is set back to the players camera and the inventory actor is set to be hidden again.
Tumblr media Tumblr media Tumblr media
To improve this further I made the small background skybox a material instance with the color set as a parameter. This is so that when then player goes into the skills menu of a spell I can blend the background into that spells color since each spell is assigned a color. On top of blending the color using a timeline I also have a few different cameras placed around the clock model and the inventory actor will blend to a random one of those when entering a skill menu and will blend back when the player leaves a skill menu.
Tumblr media Tumblr media
0 notes
georgewfmpyear2 · 1 year
Text
Dialogue Improvements
Tumblr media
The first change I made to the dialogue system was a simple addition of more dialogue with the inclusion of a generated planet name which is now generated in the dialogue manager to be later used when a level is actually generated.
Tumblr media Tumblr media
Due to the fact I wanted to include planet names and other various randomized elements into the dialogue I can't use a straightforward struct system like before so what I've done is add a new café index integer in the instance which will go up each time the player completes a level and then is used in a switch on int to trigger different events. what these events do is take a string array which is used for conversation and then edit it like shown above to include any randomized elements, the above image takes one of the lines of the opening dialogue and adds in a generated planet name to relate to a randomized level.
Tumblr media
To expand the narration that takes place in the randomized levels I added a new custom event to the dialogue manager that takes in an array of strings and floats for length of time on screen rather than single variables which are then used in succession for dialogue allowing for entire conversations to take place through the narration rather then just single lines. What this means is that the author can join in with the wizard, talking over the randomized levels which means I can have larger chunks of exposition about the world or just the generated level itself.
0 notes
georgewfmpyear2 · 1 year
Text
Resident Evil 2 - Mr X
Tumblr media
When thinking of different game modes or mission types to add to my randomized worlds within the context of what I'd already made and the narrative direction that I was going in my mind immediately went to bounty hunts with the player having to chase a character round the map to catch and then defeat them in the boss fight but then I got some inspiration from a survival horror game which has absolutely no similarities to my game and its my planned direction to possibly try flipping that on its head and have the player be a bounty target being chased around a map. In some parts of resident evil 2 the player gets hunted down and chased by the slow, lumbering Mr X which adds a lot of tension to just walking around the corridors of its police station setting. Resident Evil 2 has a pretty slow pace for the majority of the game and Mr X is slow and methodical to match this but I think if he was given a larger offensive tool kit and the ability to actually keep up with the player then he could work in a faster paced more action focused scenario which is where the general idea for the player being a bounty target rather than the bounty hunter came from. I could make use of my fantasy cross sci-fi setting and give some kind of bounty hunter magic to match that which the player has access to as well as few movement options that I've already considered adding to the player. Having the bounty hunter on even ground rather than being weaker than the player or stronger than the player like Mr X is would be a much better for my game and the direction its going in, giving the wizards stories a villain of sort which also suits the narrative direction that I want to go in with my game.
0 notes
georgewfmpyear2 · 1 year
Text
Darkest Dungeon
Tumblr media
Darkest Dungeon while on a gameplay level has almost no similarities to my game and the direction I want to go in, does have a lot of structural similarities like it being a rogue-lite that makes use of a narrator and tells procedural stories based on a handful of elements that vary between each run so it makes sense to take a look at some of its narrative systems and how it integrates the gameplay into them for inspiration on how I can improve the narrative implementation of my game.
Similar to the current state of my game Darkest Dungeon is a rouge-lite that includes a narrator constantly commentating on the players runs. On top of the narrators narrative input it also includes randomized characters that the player adds to the party and uses in the combat scenarios. The characters are given random names, quirks and various other things that make them stand out, feel real and gives them character growth within the runs but if they are killed during the run they can return as enemies which gives each hit taken a stronger sense of consequence and makes the world as a whole feel more real since things do have consequences despite the elements within it that are shown to the player are generated for each run. This is something I've briefly considered on a world building level but not a gameplay level. I would take a much lighter tone for the narrative aspects of their implementation but I think adding randomized characters within the runs who react to the environment and could even appear in later runs and comment on the in-world time passing or other things the player got up too or even turning on the player would help make the wizards stories feel more real and believable as well as improving the world building in general as it gives me a tool to use for exposition about the world. This could also come into my games narrator, the wizard, himself possibly changing the way he words things based on the situations he's been through in the randomized levels.
While I may not be able to implement it in time for the end of the project I could also have some randomized characters join the player in moments of gameplay giving the player a little team of characters that grow old and change as the levels go on like in darkest dungeon which could help make the wizards stories feel more personal but to create strong sense of time passing and to strengthen the character of the wizard rather than to contribute to a darker somber tone like in darkest dungeon.
Throughout the runs in darkest dungeons the heroes will build up stress which can cause to react differently like disobeying the player on inflicting stress on other teammates and I think this yet again shows that the world thats been built has consequences and I think if I were to implement some randomized characters I could include something similar maybe to show the characters not being able to keep up with the wizards adventures or beginning to disapprove of what the wizard does.
0 notes
georgewfmpyear2 · 1 year
Text
Weekly Evaluation - 23/04/23
My main goal this week was to build upon the elements of my game that feel the most unfinished and while I made a lot of minor improvements to them I still think that they're a bit behind where they should be. Despite that, I think I did a decent amount of work this week and I need to learn to realize that the work that I have done is good and worth being proud of even if its much farther from the complete game that I want it to be. during the next two weeks, I will still have some free time to work on the game itself and If I really want to get it into a finished game state then I can do it after the project since it being a finished game isn't required to get a good grade in the project.
It's hard to get myself to realize that I do have a decent half-finished game since I always have to have something completely fished near the end of the project but when I stop to properly look at what I have made I think it's in a decent enough state and I do feel proud of many of its aspects.
0 notes
georgewfmpyear2 · 1 year
Text
Static Mesh Instancing
Tumblr media
An instanced static mesh is a component that I can have within a blueprint actor just like a regular static mesh but I can have multiple static meshes within that which are all copies of the same original mesh meaning I can have large amounts of the same mesh at a reduced rendering cost compared to several static meshes that all use the same model. This would obviously be very helpful with performance in my game since so far I've been spawning in a separate actor for each individual grass and tree model to populate the generated worlds with foliage. Just to test it out I added an instanced static mesh component to my grass and tree actors and used the same line trace code to spawn new instances of the static mesh around them. This allowed me to spawn in way more foliage than before with really no extra rendering cost. To help with performance even more I made it so that at the start of a newly generated level it only spawns one grass actor and one tree actor at the set intervals I mentioned in my original foliage post and then that actor spawns in as many instanced static meshes in the set radius as I need. what this means is that I can have significantly more foliage should I need as well as a boost in world generation times and performance since there is no longer a completely insane amount of actors being spawned at once.
Tumblr media
0 notes
georgewfmpyear2 · 1 year
Text
Spawning Foliage In
Tumblr media
Since I'm using the free version of the Voxel plugin, I don't have access to its procedural foliage spawner for populating the generated terrain with trees, grass, flowers, etc so I decided to try and make my own system for populating the worlds with foliage. The first thing I tried to do was use physics components, spawning grass above the terrain and using physics to get them to fall to the ground and land in place but this was obviously a big hit on the performance and there was a much simpler way to go about it which was using ray casts/line traces. Starting with the player's position I grabbed random points around the player and set off line traces starting way above the point and ending way below that point to guarantee they would hit the voxel terrain at some point. After that I grabbed the point the line trace hit and spawned in a grass actor at that point. I did this again with fewer line traces for the trees and this had the look and effect that I wanted it to have but there was one major problem once I started to expand the radius at which they could spawn even with higher numbers of foliage it started to look less and less natural. What I decided to do was to find the radius at which they looked the best when they spawned in and then do have a couple different blank actors spread across the terrain with the same distance as the radius between them and then spawn foliage in at around each of those points which gave the foliage the look and effect that I wanted but on a larger scale across more of the generated terrain. Once I'd done that I could randomly pick from a list of tree and grass meshes in an array and then apply that to the generated grass along with randomized colors and then I finally had randomized foliage along with the randomized terrain.
Tumblr media
There were still a few problems however as each tree and grass being a separate actor as well as the amount I had to spawn was causing obvious performance issues as well as several second freezes while they were being spawned in with it being made even worse when the performance-heavy AI was thrown into the mix so I need to find a way to spawn the foliage in a less intensive way and find a way to not have to spawn a new actor in for each tree and bit of grass to try and keep performance steady.
0 notes
georgewfmpyear2 · 1 year
Text
Potion Item System Plan
For the item system I want to try and make it feel more engraved into the world that I have for all the previous projects where I've created similar item systems, which I've already started to do by having them be shown as potion bottles. One other way I want to do this is while they're actually in use, show them as physical objects in the world like how in Risk Of Rain 2 All the items the player picks up are placed somewhere on the character model. Since I plan on having the majority of the items that have cool unique effects be separate actors this should be relatively easy to do on a mechanical level but knowing where to place them due to the first-person viewpoint may be difficult. For each of the unique items I also think it would be quite cool to give the wizard some unique narration commenting on it whenever he picks one up which will help the items feel more like their actually part of the world.
I've already implemented some simple potion items like ones that flat-out increase damage or MP and have different color bottles to show their effects visually so it makes sense for the cool items to follow this pattern and be split into archetypes like ones that affect health and ones that affect damage. To give a stronger sense of progression these items will also be given their own level which goes up whenever the player picks up a duplicate of that item or when the player picks one of the potions that specifically increases the level of one of these items.
With the addition of the item system, the enemies also need to have their own kind of progression so that the player doesn't over-level them and make the game too easy and I think currently the best way to do that is to increase the enemy's level whenever the player picks up one of the items for progression of the actual level. what this does is it gives the player freedom and time to explore the level and strengthen themselves without the pressure of a timer ticking down to increase in difficulty but also still leaves the increase in difficulty as unavoidable so the player can't dismiss it.
0 notes
georgewfmpyear2 · 1 year
Text
Daily Evaluation - 19/04/23
My main goal for today was to focus on improving and adding to my newly added item potion system and for the first half of the day I managed to stick to that making balance changes and improving their overall implementation but in the second half I got distracted with optimization which is something I'd been meaning to get too for a while anyway. By the end of the day I had improved the way foliage is added to the randomized which improved the frame rate a bit but anymore than about 2 AI active at once and the frame rate starts to drastically drop again so I need to get to that at some point. I think if I stayed focused on the item system or had already worked on optimizing some of my games heavier systems that I could've got a lot more done with that part of the game then I did in the end but I still have the rest of the week plus any free time I have in the following two weeks so overall while I feel like I could've stayed committed I don't think its too big a deal and still feel confident for the final stretch of the project.
0 notes