Unfortunately, my work has been pretty hectic, and I've missed the last few blogs, however, I haven't missed working on my game! This liminal, 90s-inspired horror game is still moving along, and I'm excited to share some of the progress!
Here's a short video to show some of the progress I've made:
Since my last blog, here are the updates I've made:
Nearly finished the inventory system.
The players can now pick up and drop items, move them around their inventory, and move them to their main hand. The last thing I need to implement here is being able to use the number keys to "switch pockets".
Improved manniquine enemy.
I improved and adjusted the functionality of this enemy and added some more sounds and things to improve the "spook factor". I've gotten scared many times while testing from these guys.
New Enemy - The Shade:
I've also added a new enemy, on which I'm still adding the finishing touches on. This creepy alien-like creature crawls on all fours and is afraid of light. The only way to protect yourself is to make sure you have a flashlight! There are still some tweaks I need to do to this enemy, but I'm excited about the progress on him!
Level 1 Complete Block Out
I've blocked out the entire first level of the game. Now, it feels a lot more like an abandoned mall.
Multiplayer Sessions System
You can now create a multiplayer session and/or join other existing sessions.
Character Meshes
While I still need to implement the ability for the player to choose which character to be, I have both character models in place and fully functional in-game.
Replication has definitely been the most challenging part of this project, but it's been really fun to learn the networking and authority system in Unreal Engine. I'm looking forward to playing this online with my niece and nephew.
It's been fun to create liminal-feeling spaces and atmosphere so far. I've tried to focus on space lighting and shadowy areas, lots of mall-like architecture like large pillars, marketing display areas, 'back-of-house' spaces for the player to go, and interesting sounds as well.
While the sound effects I've created or added weren't picked up in my video, I still have some work to do with the SFX anyways, so I'll be excited to show you that in a later blog. For now, I do have three songs I've worked on that will play in the game, as if coming from the mall's built-in sound system.
I say scary, because more than a few times I've been scared by my own weeping-angel-like mannequins while working on this project, and it's starting to feel like it's really coming along!
Wow is multiplayer a challenge though! It gets quite confusing sometimes when having to keep track of clients and servers and who has authority, etc, but it's quite a rewarding feeling when it all get's figured out!
I missed out on blogs for a bit due to the holidays but I'm happy to show the progress I've made since my last one!
Here is a quick overview of what I've accomplished since last time:
Furthered the interaction system and created a player inventory system complete with UI.
I improved the player inventory UI interaction to allow for swapping things around between your main hand, pockets, and backpack inventory slots.
Created item spawners and a spawn manager.
The item spawners spawn four of the same item and a spawn manager selects random spawners to spawn each item type and a certain amount of each type as desired.
Created a multi-player-ready puzzle for the main goal of this level.
The puzzle is a fuse box with some fuses missing. The fuses can be found scattered around the level and once all the fuses are returned the door to the next level can be opened.
Weeping-Angel-inspired enemy.
This mannequin enemy blends in with the non-NPC mannequins around the level. Once you look away, however, you might be surprised what's behind you when you turn back around!
Here's a short video of the progress I've made:
The main challenge has been getting everything not only working but then also replicated to work in multi-player. It's starting to make more sense, especially as we work on different systems and understand how the architecture works for servers and clients.
I'm most proud of creating the puzzle, as that was the most challenging thing so far to get working for multi-player. I don't want to share all of my secrets, but here's some of the functionality. We had to do a lot of back-and-forth and iterating before we finally got this all working properly with multi-player interactions.
Fuse Box Event Graph
This is an overview of the events needed to replicate the fuse box.
- On interaction, we check who is interacting and what they are holding. If they are holding a fuse, we then continue to set the fuse added (if it's needed).
- When the player adds fuses, we run the "Add Fuses" function which iterates over the fuses in the "parent fuses" which are objects pre-set in the Fuse Box blueprint. These have an associated color tag which we check in the "check fuse color tags" macro to find which fuse "slot" or parent belongs to the color the player has. When we find the parent color matches a player's fuse, we set that fuse "parent" as the matching fuse and break the loop, then, we move on to check if the color is still missing. If so, we set the fuse of that color unhidden in the fuse box, else we let the player know they already have that color.
- Based on if the fuse was needed or not, we either clear the hand of the player or open a widget to tell them the fuse of that color has already been found.
The other blueprint I chose to include is my item spawner. This was cool to make and enabled me to spawn a few of the same items in one spot, such as flashlights or fuses. I also have a manager who will randomly select the spawners in the map to use to spawn items, so they will always spawn in different locations!
Overall I'm proud of the progress and excited to continue! Here are my goals for the next two weeks:
Work out bugs in existing mechanics and systems, such as the inventory UI and enemies.
Add more abilities to the player along with mechanics like fear level.
Clean up the UI and continue to improve the player experience.
Thanks for reading, and as always thanks to Game Gen and Vives for all the support and mentorship!
This week I have been continuing to improve my knowledge of systems in Unreal Engine by starting on a blueprint-based multiplayer game. I took a "paws" on Star Paws because I encountered so many bugs that I decided to continue in C++ a bit later. For now, I want to focus on blueprinting and expanding my knowledge there as it translates well for me into C++ when I learn new functionality in code.
Current Project: Multiplayer Horror
I want to put all of the skills I have acquired thus far into the challenging but achievable goal of creating a multiplayer game that I can release on Steam. This puts a lot of my skills to the test and pushes me toward a goal that really motivates me and is more achievable at my current skill level. Here are some of the things I've done so far for this project:
Video Overview:
Multiplayer Replicated Blueprints
Player Interaction with Blueprint Interface
This blueprint is the functionality that was implemented to allow the player to pick up objects in front of them. It uses a line trace to find the object in front of the player and then handles whether the player has authority or not as either the Host of the game or a joining Client.
If the player is a client and thus does not have authority, we have to provide authority by passing the actions through custom events which set the replication for the events. Once we have the proper authority, we call the Interact blueprint interface function which is implemented on any interactable item.
Multiplayer Flashlight Functionality
For the flashlight, we need to ensure that the players can all equip the flashlight, that it is visibly equipped to other players, and that they can turn the light on and off. For this, we mainly focused on providing authority for calling of the blueprint functions within the Flashlight itself, like turning it on or off. To allow other players to see the flashlight in their friend's hands, we enabled replication on the components that we wanted to show, such as the flashlight's mesh and light.
Replicated Sprinting
Sprinting was the first replication we started with and is a great way to understand what is going on. Simply put, when hosting a multiplayer game, only the host of the game who started the server automatically has the authority to do anything that is not directly on the player's own computer. For example, without replicating sprinting, first, the client players who joined the host's game couldn't sprint at all, then other players wouldn't see them sprinting, so we must pass authority down the chain to allow everyone to sprint and see each other sprint as well.
Interactable Pickup Parent BP
The parent of the interactable pickups is pretty simple. It holds the majority of replication for one, including ensuring the Static Mesh and other components are replicated in the children of this actor. It also sets up the main visible indications that it is an interactable object. Temporarily, this involves turning on a light and a Text component.
Interaction Implementation in Child BP
Because we are using a Blueprint Interface, it makes it much easier to then just implementing interface functions inside the blueprints to prevent calling different functions from the player for every interactable item. Now, they all use this "Interact" event with custom functionality related to the specific object the player is interacting with.
Blender Modeling
I've also made a couple of Blender Models for this game so far, which I'm excited to dive back into Blender a bit and make some of the models for different props and environment objects. So far, I've made a Flashlight, a Trashcan, and a Orbitz bottle (Anyone remember those drinks?) which in my game will be called "Zorbitz".
Overall I've been enjoying making the different mechanics, models, and hopefully some custom materials and other cool enhancements I can create for the game's immersive experience.\
Level Design for David:
I have also continued to work with David on the level design for his game. While this has been a unique challenge, it has been a great learning experience so far! I worked more on sketches this time so we could iterate on the ideas before I started working on them in the Engine.
The most valuable learning experiences working on this level of design have been working with people with differences in communication style from mine and working on crossing the bridge of communication to understand the requirements and ideas of the designer while still allowing for creative freedom and continual improvement on the design.
Sketch of one area (Floor 2 in the below drawing) to better show the concept.
Level Map Sketch to iterate on ideas for the way the player unlocks each skill in the tutorial level.
Next two-week goals:
Implement the Inventory for Players.
Create a material to highlight interactable objects rather than a light.
Halloween is easily my favorite time of year, and while as I get older I don't get to do as many fun Halloween activities, I always try to at least go to a Halloween-themed Theme Park. This year, I added a new tradition to my Halloween festivities, creating a Halloween-themed game! While I couldn't submit it into the Halloween game jam, I still had a lot of fun attempting to create something in the timeline, completely myself with some support from my mentor Vives of course, with free assets or assets I create in Blender.
This was quite the challenge, but extremely fun! While I still have a bug that makes the demo currently unplayable after a Shipping build, I will figure that out and get it uploaded to Itch.io for download. I got some clips from playing in the editor where the game functions properly for the most part.
At first, I saw the wrong Game Jam poster, so I based my idea off of a combination of Gun Fight and a platformer. Once I realized this was actually the Kids and Teens event with Vives letting me know, I was already too far committed to change it so here is an Unreal Engine amalgamation of a Vampire themed Gunfight on platforms!
Halloween Game Accomplishments:
Mostly completed a full Unreal Engine 5.4 Game demo in about 4 weeks. (Only a few hours a day on weekdays.
Created a boss character with 4 different attack options.
Created moving and falling platforms.
3D modeled and UV'd a Coffin platform.
Found and utilized free assets for level creation and hand-placed all world assets.
Created a custom blood river material for the river's "water".
Created custom AI Nav Links for jumping between platforms.
Created a custom method for the boss to decide it's attack based on player's distance.
Re-mapped animations and customized meshes of player and enemy meshes.
Created all UI design and functionality.
Developed and created all technical functionality of the world, character, and AI enemies.
Here are some snippets of blueprints that I created for this game:
Boss Attack Decision:
Shooting a Blood Bullet
Enemy Teleportation
In other News: Wave Function Collapse!
I've been also having a lot of fun on a new hyperfocus lately, Wave Function Collapse! After playing around with two different plugins and being less-than-enthused with their functionality, difficulty to understand, and lack of diverse use cases, I began trying to develop my own functionality to use Wave Function Collapse to generate 3D landscapes and levels in Unreal Engine.
So far, I'm having a bit of an issue with calculating the properties of the dimensions for the Grid Volume vs the Tile sizes but I was successfully able to generate a single tile in the Grid Volume I created, so that's something!
My goal is to create a simple "template" of different tile types: corners, walls, interior fill, exterior fill, doorways, and eventually even stairways. Theoretically, every "feature" including a lake or river or room, etc is made up of these pieces, the only thing that really changes is the way they look. So, I'm attempting to improve upon the already created plugins to create a more user-friendly and versatile way of creating levels quickly with custom tiles.
Here's how the architecture of the system works:
I use Enums and a Struct to define the "Tile Data" that the developer will enter either through JSON, CSV, or manually. The things we need to know about a tile are what type they are, what edges can face a border, and what static mesh to use for it, as well as what other types of tiles can connect to it on each side.
I use sockets to determine which side is which to prevent confusion from different axes used in different applications like Blender vs Unreal Engine.
Once we have that data, then we just need to know which volume we want to generate in. We select the Grid Volume Actor we've placed and sized in the level and can generate in this area.
I have some bugs to work out, but I think I'm really close to getting this working in the way I think is a more improved version of what I've seen out on the market for Unreal Plugins.
I don't want to share too much of my code on this tool, as I may want to try to sell it on the UE Plugins store or something, but I'll try to get a gif of it when I get it working. It was working sort of but after some attempted bug fixing it is currently not working properly.
In my last blog, I touched up some code in my StarPaws game, but this week, I've got a lot more going on!
Overview Clip:
Please enjoy this video of some clips of each of the projects I've been working on.
Star Paws
Star Paws is a 2D resource management game I've been working on. Recently, I've made some further progress on the full resource requirement and selling loop. I still have much more to do in this game, but it is coming along! I have put together all of the clips of my games in the video I've included, but here's some points on the progress I've made with Star Paws:
Resources only show on the map if you have an adequate Base level.
Resources spawn and can be collected once you've built a farm.
The player's inventory, including their gold amount, is saved to the save game.
Players can level up their base to see more resources become available.
Once resources are collected, players can add goods to their trade inventory and sell items to NPCs for gold.
Overall the main loop is mostly working, though I have a few bugs to clean up, and the experience of learning C++ has been very valuable.
Level Design
I took on another opportunity recently to work with an alumni that many will know, David Delgado. I was asked if I'd be interested in doing some level mock-ups for him, and I have really enjoyed starting out mocking out a "Lab" level. I still have a few more rooms in the Lab to complete before I can move on to the next level idea, but it's been super fun to help him out with his game. His player and AI mechanics are amazing and if the levels are pulled off well, the game could really be a smash hit!
Here are some screenshots of the level designs I've been working on:
Halloween Game Jam
I really enjoy Halloween and when I saw that Game Gen was doing another game jam, I wanted to jump on the opportunity! Rather than using Construct as I did last time with Blood Cell Bash, however, I am using Unreal Engine to create a mash-up of a platformer-type experience and Gun Fight. So far I've made some fun mechanics, materials, and level design, but I've only just begun on this short game so stay tuned for what's to come! In this game, in the last few days I've made:
Moving platforms
A custom kill volume
Enemy AI boss with 4 different attack types including:
Melee attacks
Blood Bullet shooting
Minion spawning
Teleportation
Minion enemies with melee attacks.
First-person shooting mechanics in a third-person game template when the player aims.
Player HUD with Health bar, ammo amount, reload animation, and crosshairs.
The player's shooting revolver attack.
Grenade and player grenade throwing attack.
Several blended animations and animation states for custom character movement when shooting, throwing, etc.
Here are some screenshots from the Halloween Game:
Goals:
My goals for the next two weeks are these:
Bug fixing in Star Paws main game loop
Create functionality to level up farms in Star Paws.
Finish Lab Level in David's game.
Finish Halloween full concept with win and lose scenarios.
I was thankful to get to take a couple of trips this September for my birthday and for the Affirmation Deck project! The events went well but I've been pretty wiped out from all the traveling and excitement. That being said, I still made some progress in my Space Paws game which I'm excited to share!
Last Star Paws Progress:
Last we left off, I had just finished getting the "explore" functionality working for players to discover new resources on which they will be able to build farms. This includes a timer function that uses the resource's distance from the player's base to calculate how long the discovery will be.
Latest Development Checkpoints:
Getting Organized:
To get myself better organized as I tackle this complex game, I started creating a "Jira" project to map out my tasks better. This really helps me stay focused on one step at a time without getting too ahead of myself and where I'm currently at in development.
I can brainstorm ideas and features I'd eventually like to have in the backlog, or bugs I need to fix, and choose certain tasks that are manageable to work on each day/week.
Continuing on Farming Functionality
The resource farming then selling loop is complete in its most basic format! You can now discover a resource, build a farm, farm resources, and add them for sale which NPCs will then buy and give you gold for!
The resources also appear only if you meet the required Base Level to discover them, otherwise, they will be hidden from the player.
Code Clean Up
I also worked a lot on cleaning up my code and was able to even remove an entire actor that was unnecessary and move its functionality into an actor I already had. This improved the amount of communication I needed to maintain between different C++ actors and made the code more manageable.
Next Steps:
- Bug fixing in the main gameplay loop, like crashes when interacting with the UI at the same time an NPC buys something.
- Updates to the farming loop, requiring certain gold and resources to build or upgrade a farm.
- Continue brainstorming on further functionality to make the game more enjoyable.
Star Paws is a resource management game I've been developing using C++ and Unreal Engine. After a brief break to work on other projects, I'm back to creating the core systems that will make up this exciting space-themed game.
Before diving back into Star Paws, I completed a few other projects, most notably the game jam project "Blood Cell Bash." I'm thrilled to announce that this project secured 2nd place in the game jam! This success definitely boosted my confidence as I returned to Star Paws development.
Last Star Paws Progress:
When we last left off, I had just implemented the trading system, which is now about 80% complete; to continue on, we need to develop other systems that will integrate with trading. For the past week, we've focused on creating the resource map, allowing players to discover resources and transform them into farms or mines.
Last Two Weeks: Development Check-Points
Here's a brief overview of the achievements I've made in the last two weeks to progress the resource gathering system:
Resource Map and Camera Creation
Developed a large plane with a temporary example map
Added a "player" with flying capabilities for a bird's eye view
Implemented bounding boxes to constrain movement within the map
A Short Gif of the Resource Map
What the actual Map Level looks like.
"Available Resource" Actor
Created an actor to store resource information such as:
Resource Type
Discovery status
Distance from Base
Implemented distance calculation from the base for exploration time
Here are some screenshots of the Available Resource Actor's Functionality:
You can expand these images to see them more clearly.
I also wrote comments to explain how the code works.
Farming Manager Implementation
Developed an actor to facilitate communication between:
Player's inventory
Individual map resources
Data table for farm upgrades
Utilized this actor as the map's "base" for distance calculations
Currently, not much functionality is used in it, but that is because it will mainly be needed for the actual resource farming.
Here are some screenshots of the Farming Manager Actor Currently:
You can expand these images to see them more clearly.
I also wrote comments to explain how the code works.
"Explore" Widget Component
Designed a widget to appear on undiscovered resources
Allows players to view discovery time upon interaction
Implemented complex time calculation logic
Resource Discovery Mechanism
Added a button to the widget for sending "explorers"
Implemented a boolean flag in the resource actor to track discovery status
Planned future enhancements:
Icon changes upon discovery
New interaction widgets for discovered resources
Here are some screenshots of how the Widget Component is set up:
The widget is a pretty simple one for now, but we don't need to get fancy just yet.
Set the discovery time on Begin Play. Set the Boolean to Discovered once they click the button. (This will eventually have a timer)
This function grabs the time in seconds from the Available Resource.
Now, this looks convoluted and in a way it is, but all this is to get the time to show up as Hours and Minutes in the Widget for the player. There is more description within the image.
Since we are using a combination of Blueprint and C++, we found it better to set the Widget's Reference to the Available Resource BP (Created from the C++ Class) for ease and ensure that it's getting an individually placed Actor for the component to reference.
Next Steps
The next phase of development will focus on implementing the farm-building system. This will involve:
Creating a data table for farm information:
Base resource production rate
Construction costs
Upgrade increments
Transforming discovered resources into functional farms
Implementing a resource production system that adds to the player's inventory over time
I'm excited about the progress made on Star Paws. The step-by-step approach suggested by Vives has been so beneficial in managing the complexity of the project. As I continue to lead more of the development process, my confidence in C++ and Unreal Engine grows. The challenges ahead are going to seem tough, but I'm looking forward to tackling them and seeing Star Paws come to life!