Skip to content

Milestone 3

Evan Quan edited this page Apr 14, 2019 · 1 revision

Since Milestone 2...

Font Rendering

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.

Spatial Data Map

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.

Shadow Mapping

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.

Game Rules

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

User Interface

  • Implemented
    • Abilities statuses
    • Score
      • Score change
    • Game time
    • Domination, revenge, killstreak messages
  • Not implemented
    • Abilities images

Sound

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.
Clone this wiki locally