-
Notifications
You must be signed in to change notification settings - Fork 1
Milestone 3
Since Milestone 2...
The TTF file for the font is parsed using FreeType and saved into an internal bitmap layout of all the valid characters for rendering text. Then each glyph information (uv offset/size, bearing, advance) is stored in a hashmap for indexing into the bitmap. This allows us to render full lines of text with 1 draw call as opposed to having a texture for each glyph and a draw call for each character.
There's a basic Spatial Data Map in place that is intended to be utilized for pathfinding and other necessities. On scene load, all the entities are given to the spatial data map who populates a static map as well as a hashtable listing the spatial parameters for each entity in the scene. Dynamic Entities are updated as they move while static entities are left untouched within the static data map. While running in debug mode, you can view a visual representation of the spatial data structure by pressing 'm'. This rendering is rather expensive and is only available in debug mode. The color codes are as follows:
- Red: This represents a Static Entity. Path-finding will probably treat these spaces as unpassable terrain for finding a path to their target.
- White: This represents the Space a Point Light covers. I had intended to speed up lighting calculations by only using lights that the entity is near. This is currently not the case, but it may be revisited in the future.
- Purple: This represents a Spot Light. We had a vision for the aesthetic to be gritty and cyber-punky. We wanted Spotlights to cast shadows as dynamic entities crossed under them. In order to limit shadow calculations, I wanted to have a default shadow map for each light and only calculate shadows for spotlights that have a dynamic entity within their space. This may not make it to release.
- Jade: This represents a dynamic entity. Dynamic Entities cover multiple spaces based on their spatial dimensions and it's important that they stay updated every frame.
The directional light in the scene casts shadows. The shadow map is specified in the scene that loaded in under the directional light entity entry. The texture size for the shadow is rather large to avoid overly pixellated shadows. Also, a smoothing kernel is applied to the shadows to soften their edges and blend with the fragment colors in a nicer way.
Abilities
Rocket
- Implemented
- Controls
- Cooldown
- Sound
- Internal collision detection
- Collision processing
- Physics
- Rendering
Flame Trail
- Implemented
- Controls
- Fuel gauge
- Graphics
- Sound
- Internal collision detection
- Collision processing
- Physics collision detection
Spikes
- Implemented
- Controls
- Cooldown
- Sound
- Internal collision detection
- Collision processing
- Physics collision detection
- Graphics
Directional dash
- Fully implemented
Honk
- Fully implemented
Alternate camera
- Fully implemented
Stats
- All in game stat tracking is fully implemented in order for the game rules to work
Player:
Score:
Current score
Change in score
Total score
Kills:
Total kills
Total kills against players
Total kills against each player
Total kills against bots
Dominations:
Current dominations between players
Killstreaks:
Current total killstreak
Current killstreak between players
Largest total killstreak
Largest total killstreak between players
Powerups:
Total powerups picked up
Abilities:
Total abilities used
Count of each ability used
To test this, run in Debug
mode and press:
R - Player 1 hits Player 2
T - Player 2 hits Player 1
This demonstrates how players gain and lose points based on their current killstreaks, dominations and revenges.
Domination
- If player A kills player B 3 times in a row without being killed by player
B, player A will
dominate
player B.
Revenge
- If player A is dominating player B, and player B kills player A, player
B gets
revenge
on player A. Player A no longer dominates player B.
Killstreak
- Number of kills a player has in a row without being killed by anyone
Points
Points are tracked as as followed (are open to change):
Base points gained for killing a bot 10
Base points gained for killing a player 50
- It is more rewarding to hit another player than a bot
Points gained for getting the first kill of the round (first blood) 150
- Incentivize aggressive play at the start of the round.
Points gained for getting revenge 100
- This gives an incentive to players to seek revenge other other players
- Provides a means for players who are not performing too well to catch up, but only if they have the skill to perform that kill
Points gained per killstreak 20
- This stacks
- This rewards players who can obtain a high killstreak
Points gained for picking up a powerup 10
- Minor extra incentive to pick up powerups
Base points lost for getting killed 30
- Should be less points than a kill, not too much
Points lost per killstreak 10
- This stacks
- This makes it risky to those with highstreaks as they will also lose more points on death
Game Time
- Implemented
- The round timer tracks time correctly
- Not implemented
- The round ends when the timer hits 0:00
- Once the round ends, the player with the highest score wins
- Implemented
- Abilities statuses
- Score
- Score change
- Game time
- Domination, revenge, killstreak messages
- Not implemented
- Abilities images
Music
- Music transitions and loops
Collision sounds
-
Different entities result in different collision sound events.
- Hovercraft against hovercraft
- Hovercraft against world
- Rocket against hovercraft (implemented, but not testable)
- Flame against hovercraft (implemented, but not testable)
- Spikes against hovercraft
- Hovercraft and powerup (not implemented)
-
Sound events can randomize between a pool of available sound for that sound event to increase variance. Random sound pools implemented for.
- Hovercraft against hovercraft
- Hovercraft against world
- Spike activation
-
First blood
- First blood sound plays when the first kill is made
-
Killstreaks
- Killstreak sound plays when players reaches a high killstreak
-
Domination/Revenge
- Domination and revenge sounds play when players dominate another player or get revenge
-
AI
- The AI works on a basic follow model.
- It oscillates between following the player and seeking a random point on the map.
- The goal of this AI is to collide with the player with spikes engaged.
- This will result in the AI gaining a point.