Devlog 1
Devlog 1
Week 1 - Week 4
Contents
- Game Pitch Idea
- GDD
- TDD
- Gantt Chart
- Miro Ideation board
- Itch.io
- Github
- Grapple System
- Slide System
- Shooting System
- Zipline System
- Interact System
- Inventory System
- Quest System
In the first week we had a team meeting for the first time and we gave our ideas of what type of game we wanted to design. We came to some common ideas and stuck with them as we all agreed. The Programming team came up with the ideas of game mechanics and system that we will design for the game. The Art and Animation team came up with the mood board for the art and style. The story was a team effort.
I created a GDD to help the team have an overall design plan of what will be in the game we are designing. Our team name was given by the art and animation team. The game name was a programmer's choice.
The TDD I created for a more in depth of information about the game. It covers file formats, software, map layouts, control layouts and more.
I created a Kanban board using monday.com to help with organisation of the tasks that need to be completed for the game. The board holds information of dates for the deadline and its current state and who is currently working on that task.
Miro Ideation Board
I created a ideation board on Miro.com to place everyone's ideas on to it for people to see and express their thoughts and vision.
https://miro.com/app/board/uXjVK92Sz9w=/?share_link_id=979186681997
Itch.io
I created a project on my Itch.io account for when the game is done I will upload it.plus i will add updates of information on current progress.
Github
I created a GitHub and Github Desktop account. I created a repository on github to hold the project files. I downloaded Git and Git Lfs for use with the upload of files for github. Git LFS allows larger files to be uploaded.
Github Desktop
Unreal Engine Project
I used the third person template to create my game. I structured my folders as when I add new files to the project I have an organised system to place the files in.
The first Blueprint I wanted to sort out first was my layer character named MasterCharacter.
In the MasterCharacter blueprint I add to the beginplay node the GetActorOfClass node to get the Zipline blueprint in the current level and store it from the beginning. Next I spawn the BP_cable which is used for the grappling hook ability and is attached to this character’s transform.
The Initialize function of the AC_InventoryComponent is used to load the saved file meshes for example armour to the player character. Also to set up the HUD and inventory slots in the inventory menu in game.
I get the current gamemode to get a reference to the HUD. I then get the GameInstance to load the current saved data for the current quest the play is on.
I get a reference to the widget for the interact prompt and the pause menu by creating the widget and storing its value.
In the Tick event I used a sequence to clean up the graph. The Interact Trace function does a line trace and checks to see if the actor the line trace has collided with implements the interactable interface. If yes then the widget interact prompt will appear on screen letting the player know you can interact with it. In the sequence Then 1 execution line the nodes check to see if the player has reached or is less than the distance of 400 to the end of the zipline. If yes the zipline animation is stopped and the player falls to ground.
In the Tick event sequence Then 2, It checks to see if the player is grappling. If not then it does a sphere trace out and detects areas that can be grappled hooked on to and draws a white square on screen where the grapple point is that has been detected.
I changed the max walk speed default value to 270, so when the left shift key is held down sprint is activated and speed goes to 600.
Dodge/Roll System - Accessed on 27 May 2024
Link to youtube video for the dodge.roll system.
Directional Dodge/Roll System on UE5 - Tutorial
I created a roll/dodge game mechanic for the player. I created a Macro named Dodge Direction. Once the middle mouse button is pressed the first Dodge Direction macro is called. It checks to see if the W key has been pressed that is stored in the input value named Key Direction. If it does then the Dodge Direction Montage is played in that direction.
Slide System - Accessed on 27 May 2024
I created a slide game mechanic. When the C key is held the slide animation is played. If the C key is released then the slide action is stopped and goes to the walk run animations. If the C key is held for the full amount of time of the animation the player character stops sliding and returns to walk / run. The Player’s capsule collider shrinks during the slide animation and returns to normal size when complete.
Grapple Hook System - Access on 27 May 2024
Link to youtube video for grapple hook system -
Grappling Hook System - Tutorial on UE5
I created a grappling hook game mechanic. To activate it you have to press the G Key. First it checks to see if you're already grappling. Then next check if you got a valid grapple point. I created a function called Grapple Get Target Info that returns a bool value. This is used to see if the floor below the grapple point is walkable by using a sphere trace on the Z axis.
For the grapple point to be valid to be used for the grapple hook, the distance between the grapple point and the floor must be less than 200 units. Set the cable attach start to allow the cable to attach to the grapple hook point.
Turn the player to face the direction of the grapple hook location. Then it moves the cable with the player to the grapple point location and then releases the cable from the grapple point.
The Start Grappling event sets the movement mode to flying that set of the collider to ignore collisions and gravity. This allows the player character to move through objects in the world. It uses the timeline float to move to the grappling hook point over the time. Once the timeline is finished the EndGrappleSwitchStates is called. This set the movement mode to Falling. This sets the collision and gravity back to normal and sets the IsGrappling? Bool to false.
I added two states called GrappleStartState that shoots the cable animation. The HoldGrappleToLand state plays the acrobatic spin animation when moving through the air.
These AnimNotifies get called when the state changes between GrappleStartState and HoldGrappleToLand and Idle. The Anim notifies are called at the beginning of the animation.
Shooting System - Accessed on June 3, 2024
Link to shooting system on youtube
Pistol System on UE5 - Tutorial
I added a shooting game mechanic that uses a pistol as a firing weapon.
I used the Q key to play the equip pistol montage to place the pistol in the player character’s hand.
To activate the shooting player has to press the left mouse button. Next the player has to be aiming to set the isAiming bool to true. You have to hold down the right mouse button while clicking the left mouse button down.
I created a line trace to be sent out by the camera up to 50000 units.
The bullet location of the object it hits stores the value from the impact point. The actor component it hits is stored in the hit comp variable. The values I received from the hit result are used to draw the decal for the bullet hole image on the object. I needed the rotation of the normal on the hit component to flip around so the decal can be seen.
I spawn particles and sound effects on impact location. I created a camera shake when the line trace hits the object.
When the line trace hits the object it checks to see if the object implements the interface BPI_Damagable. If it does then damage is applied to that object.
The pistol when shooting produces a sound and a muzzle flash particle effect.
When shooting the player character does the shooting animation and resets the Shoot bool to false.
I created a Blendspace for the pistol locomotion and an aim offset animation for aiming and using the upper body bones from the pistol aim offset. I added it to the animation blueprint on the anim graph.
I added the layered blend per bone node to allow the animations for the default slot and upper body slot to blend together. I cached the Locomotion and Pistol Locomotion so it can be used for other functionality within the anim graph.
I use the right mouse button to aim the pistol and set the isAiming?
variable to true. The Set Desired Rotation rotates the player differently when aiming to turn on or off the rotation based on the player rotation or controller rotation. Also changing the Socket offset of the Camera Boom component to give a better view of what the player character is aiming at.
Zipline System - Accessed On 28 May 2024
Link to Zipline system I followed on youtube -
Ziplining System on UE5 - Tutorial
I created a Zipline game mechanic. It is activated by pressing the F Key. The first check is to see if the play is allowed to zipline. Next it does a sphere trace in the z axis to a set distance in the upwards direction. The object it collided with is of type BP_Zipline and the distance is within 230. Then the zipline bool is set to true and the animation montage is played. I added camera shake to the zipline animation.
I play a zipline sound and change the braking deceleration for flying. I set the Movement mode to flying and turn off the collision of the player to make the player move freely down the zipline. I created a simulated legs event to ragdoll the legs of the player character.
I created a Cancel Zipline event to cancel the zipline movement and animation and set the character to falling. Once the character collides with the ground then the player plates the land animation. Also the collision settings are enabled. This is activated when the player character hits the end collider at the end of the zipline.
I added a Z key input for cancelling the zipline action during the middle of the zipline movement.
This helps the player characters ragdoll on these bones.
Interact System
I created an Interact input action. The event does a sphere trace forward of the player character's position and checks to see if the object implements the interact interface. If it does, the user widget interact prompt will be drawn on screen and display the text “Press E To Interact”.
Interact Trace function does a line trace to a certain distance and if it collides with an object that implements the interact interface then it will display the Interact Prompt user widget. Also if you interact with an actor that has a Quest Giver component on it will display the W_QuestGiver user widget and collect all the current quest details.
This E key input is used to open and display menus for the dialogue of characters, picking up items in the world, opening the chest and storing your items by clicking or dragging in the displayed menu UI. Also to interact with the merchant to buy and sell items in the Merchant menu.
I use the I Key input to display and close the inventory menu.
All the inventory items that are currently equipped in the inventory menu are saved in the Save Game object named Save_Inventory. To save you just need to press the L key. To delete all the values saved in the inventory slot name, you just need to press the delete key in mid game to delete all the values in the save slot.
In the start up of the game the Load inventory is called and the saved values are attached to the current values at the start of the game.
This event draws on the screen to display the 4 consumable item slots.
This event adds the save game inventory attached equipment to the player character if there are any. Plus it's added after the player character has been spawned in the level already.
This event sets the chest bool to be true or false for if it is closed or open when interacting with it.
This event returns the slot that has no item equipped to empty.
These events are called when the player picks up an item in the world.
These custom events remove the item from the chest menu into the inventory UI.
This event is called when the player drops an item from the inventory window into the world.
This event removes the item that is equipped to the quick equip slots. I still need to sort the players stats system for health, mana and stamina.
The RemovePlayerFromMerchant event removes the connection between player and merchant. That removes the merchant UI menu. The AddPlayerToMerchant event is opposite. The other two events are used for buying and selling items between the player and merchant and updating the UI.
This event is used to display the prompt text User Widget to interact with the merchant character, chest or item pickup.
This event is called when the player character overlaps an item and you press the E Key to pick up the item and the item is added to the inventory.
This event is called when your character is not overlapping the item and removes the user widget from prompts for the player to pick up the item using the E key.
These events are called when the player equips the items to the weapon and armour slot and saves the current state of that slot into the game instance.
When I press these input keys it accesses the current equipped quickslots. This will decrease the value inside the slot if there are any.
These functions are used to add and remove items and the quantity within the inventory menu.
Dialogue System - Access on June 9, 2024
Link to youtube video I follow for Dialogue System
Unreal Engine 4 Tutorial - Advanced Dialogue Pt.2 - Starting a Dialogue
In the Beginplay for the NPC dialogue characters, the character gets the AIController that is set on it and stores it. Then sets the dialogue tree in the character class with the one in the AIController. The Event Interact gets called when the player character presses E key. This calls the Start Dialogue event to run the Behavior tree that is connected.
The dialogue tree and name text is exposed to the level editor so the designer can choose the name for the character and behavior tree to use for the dialogue.
In the StartDialogue behavior Tree task it displays the dialogue box UI with the text that is set in the name and the display line Behavior Tree task in the dialogue behavior tree. It also disables the input to the player.
In the EndDialogue behavior tree task it turns off the dialogue box UIand enables input to the player again to allow the player character to move.
In the DisplayLine behaviour tree task it displays the text in the dialogue box UI. The text is typed up in the detail panel of the behaviour tree on this node when selected. The Tick event is used to listen for the E key which is the interact button. Once pressed the DisplayLine node will finish execution on move to the next node in the behavior tree.
I have an InventoryComponent actor component that has 3 functions that add and remove items in the inventory menu. I also have a QuestLogComponent that deals with the main quests of the game.
Quest System - Access on June 5, 2024
Link to Quest System I followed on youtube.
Unreal Engine 4 Tutorial - Quest System - Part 1 Introduction
In the QuestLogComponent actor component it holds functionality to add new quests to the menu when interacting with quest giver characters and accepting the quest. Complete quest will add to the complete quest array and remove from the current quest array. The QueryActiveQuest checks to see if you have any current quests active. The TrackQuest function draws the W_tracker widget and displays the text of your current quest. The GetQuestActor returns an array of current quests based on the actor you interacted with that has its own quest connected to it. TurnInQuest is called when the quest is completed. QueryCompletedQuests function is used to let the quest system know if the player character has returned to the quest giver NPC after completing the quests and returns a bool if done.
QuestGiverComponent actor component is attached to the quest giving NPC to give the quests to the player when interacted with. The DisplayQuest displays the user widget for the accept or decline of the quest. The DisplayRewards function is used to display when completing the quest what rewards you are given for the completion of the quest.
Quest_Base actor is used to hold the overall information of the current quests. In beginplay it checks to see if the current active quest when the game is loaded up is a collect item quest. If not, it checks to see if the quest has been completed. The other functions are used to return information of how far you are into the quest for example you have collected 3 out of 5 items. One quest can have multiple objectives and so the other function checks to see if the objective has been completed before moving on to the next.
QuestData datatable is used to store the information of the type of quests. 1 stage is a quest but you can have multiple quests into 1 quest. I use this for the main quests from the start to finish of the game. There can be more objectives per stage that you need to complete before that stage is complete.
W_QuestGiver user widget is used to display information of the quest you are going to accept or decline. When this user widget is shown the player can't move their character as the input mode is set to UI.
W_QuestLog user widget is used to display your currently available main quests and side quests. When you have selected your quest the details of that quest is displayed in the right side window.
W_QuestLog_QuestEntry is to track the quest it is next to. This activates the compass icons of the location of the quest and updates on quest objectives when reached.
W_QuestLogEntry_Objective user widget is used to tell the player if all quest objectives have been completed. If yes then it will display 0/0.
EObjectiveType enumeration is used for the four types of quest I will have in my game.
FObjectiveDetails struct is used for the objectives in the quests.
FQuestDetails Struct is used for the details of the quests.
FQuestSaveData Struct is used to hold information on the current state of the quest.
FStageDetails Struct is used for the rewards system when the quest is completed.
W_QuestNotification user widget is displayed when the objective is completed then disappears after a short time.
Leave a comment
Log in with itch.io to leave a comment.