Skip to content

Commit

Permalink
feat(helpers): add levels
Browse files Browse the repository at this point in the history
  • Loading branch information
remarkablemark committed Jan 26, 2025
1 parent 785070b commit d9e4ee7
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 50 deletions.
11 changes: 2 additions & 9 deletions src/gameobjects/enemy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,13 @@ import { getChildBubble, hurtPlayer } from '.'
import { incrementScore } from './score'

export function addEnemy() {
const sprites = [
Sprite.Bubbie,
Sprite.Gooba,
Sprite.Shellie,
Sprite.Spiny,
Sprite.Pokey,
]

const damage = randi(1, 10)
const hp = randi(20, 100) * gameState.enemyHealthMultiplier
const speed = randi(100, 300) * gameState.enemySpeedMultiplier
const { enemySprites } = gameState

const enemy = add([
sprite(sprites[randi(sprites.length)]),
sprite(enemySprites[randi(enemySprites.length)]),
pos(outsideCoordinates()),
anchor('center'),
health(hp, hp),
Expand Down
9 changes: 1 addition & 8 deletions src/helpers/gameState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,7 @@ class GameState {
this.enemyDamageMultiplier = 1
this.enemyHealthMultiplier = 1
this.enemySpeedMultiplier = 1

this.enemySprites = [
Sprite.Bubbie,
Sprite.Gooba,
Sprite.Shellie,
Sprite.Spiny,
Sprite.Pokey,
]
this.enemySprites = []
}
}

Expand Down
1 change: 1 addition & 0 deletions src/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ export * from './chance'
export * from './coordinates'
export * from './direction'
export * from './gameState'
export * from './levels'
export * from './time'
123 changes: 123 additions & 0 deletions src/helpers/levels.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
import { Sprite } from '../constants'

const MINUTE = 60

export const levels = [
// 0 - 0.5
{
start: 0,
end: 0.5 * MINUTE,
loop: {
enemy: 4,
drain: 10,
},
enemies: [Sprite.Shellie, Sprite.Spiny],
multiplier: {
damage: 1,
health: 1,
speed: 1,
},
},

// 0.5 - 1
{
start: 0.5 * MINUTE,
end: 2 * MINUTE,
loop: {
enemy: 3,
drain: 10,
},
enemies: [Sprite.Gooba],
multiplier: {
damage: 1,
health: 1,
speed: 1,
},
},

// 1 - 2
{
start: 1 * MINUTE,
end: 2 * MINUTE,
loop: {
enemy: 3,
drain: 10,
},
enemies: [Sprite.Gooba, Sprite.Shellie, Sprite.Spiny],
multiplier: {
damage: 1,
health: 1,
speed: 1,
},
},

// 2 - 3
{
start: 2 * MINUTE,
end: 3 * MINUTE,
loop: {
enemy: 3,
drain: 15,
},
enemies: [Sprite.Bubbie],
multiplier: {
damage: 1,
health: 1,
speed: 1,
},
},

// 3 - 4
{
start: 3 * MINUTE,
end: 4 * MINUTE,
loop: {
enemy: 3,
drain: 15,
},
enemies: [Sprite.Pokey],
multiplier: {
damage: 1.5,
health: 1.5,
speed: 1.5,
},
},

// 4 - 5
{
start: 4 * MINUTE,
end: 5 * MINUTE,
loop: {
enemy: 3,
drain: 20,
},
enemies: [Sprite.Gooba, Sprite.Bubbie, Sprite.Pokey],
multiplier: {
damage: 1.5,
health: 1.5,
speed: 1.5,
},
},

// 5 - ∞
{
start: 5 * MINUTE,
end: undefined,
loop: {
enemy: 1,
drain: 30,
},
enemies: [
Sprite.Bubbie,
Sprite.Gooba,
Sprite.Shellie,
Sprite.Spiny,
Sprite.Pokey,
],
multiplier: {
damage: 2,
health: 2,
speed: 2,
},
},
]
56 changes: 23 additions & 33 deletions src/scenes/game.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@ import {
addScore,
playMusic,
} from '../gameobjects'
import { gameState } from '../helpers'

const MINUTE = 60
import { gameState, levels } from '../helpers'

scene(Scene.Game, () => {
gameState.init()
Expand All @@ -33,35 +31,27 @@ scene(Scene.Game, () => {
const player = addPlayer()
addHealth(player)

// 0-1
wait(0, () => {
const level = MINUTE
const enemy = 5
const drain = 10
loop(enemy, addEnemy, level / enemy, true)
loop(drain, addDrain, level / drain, true)
})

// 1-3
wait(MINUTE, () => {
gameState.enemyDamageMultiplier = 1.5
gameState.enemyHealthMultiplier = 1.5
gameState.enemySpeedMultiplier = 1.5

const level = 3 * MINUTE
const enemy = 3
const drain = 15
loop(enemy, addEnemy, level / enemy, true)
loop(drain, addDrain, level / drain, true)
})

// 3-∞
wait(3 * MINUTE, () => {
gameState.enemyDamageMultiplier = 2
gameState.enemyHealthMultiplier = 2
gameState.enemySpeedMultiplier = 2

loop(1, addEnemy, undefined, true)
loop(20, addDrain, undefined, true)
levels.forEach((level) => {
wait(level.start, () => {
gameState.enemyDamageMultiplier = level.multiplier.damage
gameState.enemyHealthMultiplier = level.multiplier.health
gameState.enemySpeedMultiplier = level.multiplier.speed
gameState.enemySprites = level.enemies
const duration = level.end && level.end - level.start

loop(
level.loop.enemy,
addEnemy,
duration && duration / level.loop.enemy,
true,
)

loop(
level.loop.enemy,
addDrain,
duration && duration / level.loop.drain,
true,
)
})
})
})

0 comments on commit d9e4ee7

Please sign in to comment.