Skip to content

vaernion/crimsonstate

Repository files navigation

Crimsonstate

  • OOP & gamedev experiment inspired by Crimsonland.
  • For learning: code quality equally important as gameplay.

Design

  • Arena/twin-stick shooter concept, but with infinite procedurally generated world.
  • Top-down 2d, standard keyboard & mouse controls.
  • Enemies assault player from all sides, movement and kiting important.
  • Pick up weapons, abilities & power-ups.
  • Level up and select upgrades & stats.
  • Per-profile unlocks & stats - saved to localstate and/or DB.

Code

Tech

TypeScript, Canvas

Partial TODO

asap: player death/win/lose

then: static entities (terrain, water, plants, hazards, fire, traps), aoe damage?

consider: sprites, art library, music, sound effects, improving and tweaking collision, player progression/profile/unlocks

Features

class feature details status
Game loop & hierarchy ✔️
Controls intercept & buffer input ✔️
Player movement ✔️
Player entity collision ✔️
World world constructor only determines max area for now ✔️
Game world edge draw & collision ✔️
Game Menu Controls pause game conditional update in Game ✔️
Menu Controls select options wasd and/or mouse ✔️
Game Menu Controls start/reset hotkey too? ✔️
Game Player camera follows player ✔️
HUD hud draw method extract from Game ✔️
Entity movement v2 direction & acceleration -> velocity ✔️
Entity friction/drag/deceleration ✔️
Game/Save settings/score/unlocks? localStorage JSON
Entity Spawner generate enemies over time randomly placed inside world for now ✔️
Entity spawn outside vision depends on camera (canvas) size ✔️
MovingEntity move towards player ✔️
Entity take damage & destruction enemies.delete(this) should work ✔️
Game Player win/lose conditions lose: death, win: score/kills/time
Player use ability screen (visible enemies?) wipe, heal item ✔️
Player ability variety more consumables and/or cooldown based
Controls Player? mouse aim only when mouse inside canvas or not? ✔️
Weapon Controls fire projectile mouse1, vector player -> aim direction ✔️
Game Weapon spawn in world ✔️
Player Weapon pick up weapon on collision? attached? visuals? ✔️
Entity Projectile move & collide overload entity calculatevector (no friction) ✔️
Entity Enemy enemy ranged attacks vector enemy -> player ✔️
World Player Entity powerups activated on collision,various effects
Player Game Controls upgrades xp, pause and select stat++ and/or ability
World static entities (terrain) with collision
World hazards fire/lightning etc, damage based on delta time
World varying visuals random gradients at first for some variance
Graphics sprites/pixel art find free stuff with consistent theme
Graphics/Particles blood, explosions etc. visual effect only, despawn after X time?
World procedural generation seeded world, find algorithm
World area cells 3x3 or 5x5 matrix, player always in center
World infinite area generate cells around player (outside vision)
Sound sound effects find free library with good sound design
Sound music freely licensed doom/metal-ish ✔️
Save auth and/or database Netlify serverless/AWS lambda & MongoDB Atlas
code tests Jest
code CI/CD Netlify?
content more variety more enemies, weapons, upgrades, worlds(?) etc.

Structure so far (outdated)

Game
|-- canvas
|-- Debug
|-- Menu
|-- HUD
|-- Controls
|-- World
|   |-- width/height
|-- MovingEntity/Player
|   |-- health & maxHealth
|   |-- width & height
|   |-- position = {x,y}
|   |-- velocity = Vector
|   |-- acceleration = Vector
|   |-- speed() & maxSpeed
|-- MovingEntity/Enemy

About

OOP & gamedev experiment inspired by Crimsonland

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages