The game is a fast-paced multiplayer arena first-person shooter. The game focuses on fast-paced and diversified combat modes, fast movements, and intuitive strategies. Players will have simple and direct fun in this game.
Dev Log 03: Sprint Review
Yes, we made the Matchmaker! And we gave it a name, "Highrise Guardian."
According to the Process Flow Charts designed in Dev Log 01, I completed the implementation of the Matchmaker. Due to the Matchmaker's addition, the game framework's process has also been modified. After loading, the clients will connect to the User Info Server to get the account information, especially the session id. Then, the client will join the matchmaker pool. The client can request the game mode he wants to play. Once matched, the clients will jump to the Lobby. In the Lobby, clients can equip weapons and abilities. That info will be sent to the Matchmaker and stored in the Matchmaker. Once all the clients are ready, the Matchmaker will launch the UE5 dedicated server and notify all the clients of the dedicated server address and port.
Now, the dedicated server is responsible for the initial weapon equipped, validating the player's carried weapons and abilities. It's much safer and hard to cheat.
Today, we got a zoom meeting with Rockstar. They gave us helpful advice and posted many questions we should consider in depth. So, in the next stage, we decide not to add more new features, we have many bugs to fix, and our designer needs to think more about the game balance.
Dev Log 02: Prototype Playtest
Though we only have three weeks to work, we are happy and proud that we achieved the target we made before. We completed the whole game processing in the prototype version, including the join match, the match-ready phase, and the game settlement. The network is stable and easy to handle three vs three matches. There is no noticeable net delay. I'm happy that I proved that we can master the multiplayer framework. We build a solid fundamental for our project.
Dev Log 01: Unnamed Project
![Post](/2022/08/29/DevLog01-ShootGame/MatchMaker.png)
![Post](/2022/08/29/DevLog01-ShootGame/RoundFlow.png)
This week we started a new Third Person Shooting Game project. The game is a fast-paced multiplayer arena first-person shooter. The game focuses on fast-paced and diversified combat modes, fast movements, and intuitive strategies. Players will have simple and direct fun in this game.
The project is based on UE4's multiplayer framework. I'll update our progress here every week.
As the sequence diagram presents, we want to build an online game with a dedicated server. It's a massive challenge for us. We need to handle the matchmaker server, player info server, and, most importantly, the game server.
This project will last about eight months. Our final target is to build a version that supports at least six players to play around two maps with various weapons and pickups.
The network is the most challenging part and fundamental of the project. As the tech leader of my team, my target in the prototype is to build a simple game that implements the whole process of the game. It will including assign team id to players, applying damage to players, killing and re-spawn players, adding score to the team, etc.
BFS Search Algorithm
In one of my recent projects, I needed to find the shortest path from one state to another. This reminds me of the Breadth-First Search Algorithm.
Personal Project: Clockwork Spy
![Clockwork Spy One Sheet](/2022/05/01/Project-Clockwork-Spy/ClockworkSpyOneSheet.png)
Clockwork Spy is a cinematic game which player can use his clock to solve puzzles and reach the objective. Player is a spy with a magical clock that can adjust the timeline of certain objects. There are multiple ways to succeed or fail each level.
Heap Memory Manager
This project is an implement of heap allocator in pure C++. Its job is to manage allocation and deallocation of addresses for a given block of memory.
Features
- Work well in both x86 and x64.
- Support address alignment.
- Has multi Fixed Size Allocators and a Genral Allocator inside. Use the Fixed Size Allocator to cover most small size (64KB, 128KB and 256KB) allocation and use the General Allocator to cover other situations.
- Dynamic garbage collection and compact structure. In the General Allocator, allocation start from the end of the internal heap, and use the top of the heap to place memory description blocks. Every allocation use first fit strategy, automatic collect and merge garbage after release.
- Support using Guardbands to check data overflow.
- Use BitArray to track the used situation of memory block in the Fixed Size Allocator.
Source
Learning Journal: RayTracing
This article is a summary of my self-study about Ray-Tracing.
![Final Effect](/2021/12/09/RayTracing/RayTracing_Result.jpg)
In the traditional rendering pipeline, every object, primitive, and pixel are calculated lighting independently. They know less or even nothing about nearby objects. As a result, it’s hard to calculate indirect illumination. For example, those objects out of view frustum will be culled. But in reality, they make great contributions to the scene. Though, these years many methods have be proposed, they are more like some tricks.
The theory of Ray-Tracing has been advanced for almost 40 years, but due to its giant amount of calculation, it has not been widely applied. Recently, the breakthrough of graphics technology makes it possible to apply this technology in real-time rendering and greatly improves the rendering quality.
EndlessGraves
![Post](/2021/12/08/Dev-EndlessGraves/EndlessGraves_Post.png)
Endless Graves is a two-week student prototype project, and I am the lead programmer in the team. I completed all the core function based on UE4 and C++.
This is a 3D Dungeon Adventure game where Twitch chat can provide aid or attempt to thwart the player in real time. Use your sword and crossbow to defeat the hordes sent by Twitch chat. Use the commands: (!ranged, !melee, !skel, !drag, and !heal) to directly impact the experience and become an integral part of the play.
Twitch Chat Commands: !ranged - vote for the player to switch to the ranged weapon. When 50% of the votes are for ranged, the player is forced into ranged mode.
!melee - vote for the player to switch to the melee weapon. When 50% of the votes are for melee, the player is forced into melee mode.
!heal - vote for a heal drop. Requires X amount of votes and then goes on cooldown.
!skel - vote to spawn a skeleton. Requires X amount of votes and then goes on cooldown.
!drag - vote to spawn a dragon. Requires X amount of votes and then goes on cooldown.
Outline Effect In Unity
![Final Effect](/2021/11/07/OutlineEffectInUnity/OutlineEffect.png)
Outline effect is widely used in real-time rendering, and there have been a number of methods advanced. In the book “Real Time Rendering”, the author classifies them into five main categories. This article is based on one of them. The core idea is to use two passes to render. In the first pass, only render the back face and expend the vertices in their normal directions. And in the second pass, cull the back face. Further, this article presents a method to render a pixel-perfect outline.