From 1f10b9c750955778e979eb315f84140fd49c392c Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Fri, 12 Jun 2026 21:46:47 +0100 Subject: [PATCH] Rebrand --- .vscode/settings.json | 2 +- Dockerfile | 2 +- README.md | 10 ++-- backend/deployment/README.md | 14 ----- backend/deployment/declared-servers.service | 11 ---- backend/deployment/declared-servers.sh | 5 -- backend/deployment/nginx.conf | 49 ---------------- backend/deployment/setup.sh | 28 --------- backend/package.json | 6 +- backend/src/commands/generate-points.ts | 2 +- backend/src/game-server.ts | 18 +++--- backend/src/objects/character-physical.ts | 40 ++++++++++++- backend/src/objects/circle-physical.ts | 3 + backend/src/players/player-container.ts | 6 +- frontend/.firebaserc | 5 -- frontend/firebase.json | 16 ------ frontend/package-lock.json | 4 +- frontend/package.json | 2 +- frontend/src/index.html | 10 ++-- frontend/src/main.scss | 57 ++++++++++--------- frontend/src/scripts/analytics.ts | 2 +- frontend/src/scripts/configuration.ts | 6 +- frontend/src/scripts/scoreboard.ts | 28 ++++----- frontend/src/scripts/tutorial.ts | 2 +- frontend/src/styles/_vars.scss | 4 +- .../src/commands/types/update-game-state.ts | 4 +- shared/src/objects/types/character-base.ts | 2 +- shared/src/settings.ts | 16 +++--- 28 files changed, 134 insertions(+), 220 deletions(-) delete mode 100644 backend/deployment/README.md delete mode 100644 backend/deployment/declared-servers.service delete mode 100644 backend/deployment/declared-servers.sh delete mode 100644 backend/deployment/nginx.conf delete mode 100644 backend/deployment/setup.sh delete mode 100644 frontend/.firebaserc delete mode 100644 frontend/firebase.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 2561c01..57b1058 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,7 @@ "Deserializable", "Deserialization", "Respawn", - "decla", + "doppler", "overridable", "serializable" ] diff --git a/Dockerfile b/Dockerfile index 83f7922..327d1f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -# decla.red game server (the `declared-server` package). +# doppler game server (the `doppler-server` package). # The frontend is a static site and is NOT built here — see .forgejo/workflows. # ---- Stage 1: build the shared lib, then bundle the server ------------------- diff --git a/README.md b/README.md index c7f1f53..ce57285 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# [decla.red](https://decla.red) +# doppler A 2-dimensional multiplayer game utilising ray tracing. -> **Available at [decla.red](https://decla.red).** +> **Available at [doppler.schmelczer.dev](https://doppler.schmelczer.dev).** ![screenshot of in-game fight](media/game-pc.png) ![three screenshots taken at iPhone SE screen size](media/collage-iphone.png) @@ -15,7 +15,7 @@ CI/CD runs on Forgejo Actions (`.forgejo/workflows/deploy.yml`). On a push to `main` it: - builds the static frontend and rsyncs `frontend/dist/` to the `/pages/declared` - mount on the runner host, and + mount on the runner host (the mount keeps its pre-rebrand name), and - builds the server image from the root `Dockerfile` and pushes it to the Forgejo container registry as `//-server`. @@ -30,6 +30,6 @@ edit it to add or remove game-server origins. Run the server image locally: ```sh -docker build -t declared-server . -docker run -p 3000:3000 declared-server --name "My server" --playerLimit 16 +docker build -t doppler-server . +docker run -p 3000:3000 doppler-server --name "My server" --playerLimit 16 ``` diff --git a/backend/deployment/README.md b/backend/deployment/README.md deleted file mode 100644 index 4e2c7d9..0000000 --- a/backend/deployment/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Setup a decla.red server on a fresh debian/ubuntu machine - -> The method was tested on Debian 10 DigitalOcean droplets. - -- Copy the files from this directory to the target machine. -- Execute the following commands. -- ```sh - chmod +x setup.sh - ./setup.sh serverX - ``` - - > Where `serverX` is the serverX.decla.red subdomain pointing to the server. - -- Optionally, change the arguments in [declared-servers.sh](declared-servers.sh). diff --git a/backend/deployment/declared-servers.service b/backend/deployment/declared-servers.service deleted file mode 100644 index 678942d..0000000 --- a/backend/deployment/declared-servers.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=declared-server - -Requires=basic.target network.target - -[Service] -Type=simple -ExecStart=/bin/sh /root/declared-servers.sh - -[Install] -WantedBy=multi-user.target diff --git a/backend/deployment/declared-servers.sh b/backend/deployment/declared-servers.sh deleted file mode 100644 index 166ef8b..0000000 --- a/backend/deployment/declared-servers.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -set -e - -NODE_ENV=production declared-server --port=3000 --name="Simonyi" --playerLimit=256 --npcCount=48 --scoreLimit=20000 diff --git a/backend/deployment/nginx.conf b/backend/deployment/nginx.conf deleted file mode 100644 index 1fbf3b5..0000000 --- a/backend/deployment/nginx.conf +++ /dev/null @@ -1,49 +0,0 @@ -user www-data; -worker_processes auto; -pid /run/nginx.pid; - -events { - worker_connections 768; -} - -http { - sendfile on; - tcp_nopush on; - tcp_nodelay on; - keepalive_timeout 65; - types_hash_max_size 2048; - server_tokens off; - - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_prefer_server_ciphers on; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - server { - listen 443 ssl; - - include /etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; - ssl_certificate /etc/letsencrypt/live/serverName.decla.red/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/serverName.decla.red/privkey.pem; - - server_name serverName.decla.red; - - location / { - proxy_pass http://127.0.0.1:3000/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - proxy_set_header Host $host; - } - } -} \ No newline at end of file diff --git a/backend/deployment/setup.sh b/backend/deployment/setup.sh deleted file mode 100644 index 017e599..0000000 --- a/backend/deployment/setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -set -e - -if [ -z "$1" ]; then - echo "Please specify a domain" 1>&2 - exit 1 -fi - -domain="$1" - -apt install -y curl -curl -sL https://deb.nodesource.com/setup_15.x | bash - -apt update -apt install -y nodejs nginx certbot python3-certbot-nginx -npm i -g declared-server - -certbot certonly --nginx -m schmelczerandras@gmail.com -d "$domain".decla.red --agree-tos --non-interactive - -mv nginx.conf /etc/nginx/nginx.conf -sed -i "s/serverName/$domain/g" /etc/nginx/nginx.conf -nginx -s reload - -chmod +x /root/declared-servers.sh -chown root:root /root/declared-servers.sh -cp declared-servers.service /etc/systemd/system/declared-servers.service -systemctl enable declared-servers.service -systemctl start declared-servers diff --git a/backend/package.json b/backend/package.json index 9ccaec3..50cd443 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,12 +1,12 @@ { - "name": "declared-server", + "name": "doppler-server", "version": "0.1.0", - "description": "Game server for decla.red", + "description": "Game server for doppler", "keywords": [], "author": "András Schmelczer (https://schmelczer.dev/)", "main": "dist/main.js", "bin": { - "declared-server": "dist/main.js" + "doppler-server": "dist/main.js" }, "scripts": { "build": "npx webpack --mode production", diff --git a/backend/src/commands/generate-points.ts b/backend/src/commands/generate-points.ts index b639d4c..3f1ac98 100644 --- a/backend/src/commands/generate-points.ts +++ b/backend/src/commands/generate-points.ts @@ -2,7 +2,7 @@ import { Command } from 'shared'; export class GeneratePointsCommand extends Command { public constructor( - public readonly decla: number, + public readonly blue: number, public readonly red: number, ) { super(); diff --git a/backend/src/game-server.ts b/backend/src/game-server.ts index 1b51a35..dd8f0d1 100644 --- a/backend/src/game-server.ts +++ b/backend/src/game-server.ts @@ -30,7 +30,7 @@ export class GameServer extends CommandReceiver { private deltaTimes!: Array; private deltaTimeCalculator!: DeltaTimeCalculator; - private declaPoints = 0; + private bluePoints = 0; private redPoints = 0; private matchPointAnnounced: Partial> = {}; @@ -52,7 +52,7 @@ export class GameServer extends CommandReceiver { ); this.deltaTimeCalculator = new DeltaTimeCalculator(); this.deltaTimes = []; - this.declaPoints = 0; + this.bluePoints = 0; this.redPoints = 0; this.matchPointAnnounced = {}; this.isInEndGame = false; @@ -118,19 +118,19 @@ export class GameServer extends CommandReceiver { this.handlePhysics(); } - private addPoints({ decla, red }: GeneratePointsCommand) { + private addPoints({ blue, red }: GeneratePointsCommand) { if (this.isInEndGame) { return; } - this.declaPoints += decla; + this.bluePoints += blue; this.redPoints += red; - if (this.declaPoints >= this.options.scoreLimit) { - this.endGame(CharacterTeam.decla); + if (this.bluePoints >= this.options.scoreLimit) { + this.endGame(CharacterTeam.blue); } else if (this.redPoints >= this.options.scoreLimit) { this.endGame(CharacterTeam.red); } else { - this.announceMatchPointOnce(CharacterTeam.decla, this.declaPoints); + this.announceMatchPointOnce(CharacterTeam.blue, this.bluePoints); this.announceMatchPointOnce(CharacterTeam.red, this.redPoints); } } @@ -179,7 +179,7 @@ export class GameServer extends CommandReceiver { if ((this.timeSinceLastPointUpdate += delta) > 0.5) { this.timeSinceLastPointUpdate = 0; this.players.queueCommandForEachClient( - new UpdateGameState(this.declaPoints, this.redPoints, this.options.scoreLimit), + new UpdateGameState(this.bluePoints, this.redPoints, this.options.scoreLimit), ); } @@ -224,7 +224,7 @@ export class GameServer extends CommandReceiver { } private get gameProgress(): number { - return (Math.max(this.declaPoints, this.redPoints) / this.options.scoreLimit) * 100; + return (Math.max(this.bluePoints, this.redPoints) / this.options.scoreLimit) * 100; } public get serverInfo(): ServerInformation { diff --git a/backend/src/objects/character-physical.ts b/backend/src/objects/character-physical.ts index bd46282..8425f93 100644 --- a/backend/src/objects/character-physical.ts +++ b/backend/src/objects/character-physical.ts @@ -151,10 +151,10 @@ export class CharacterPhysical extends CharacterBase implements DynamicPhysical private getPoints(game: CommandReceiver) { if (!this.isAlive && !this.hasGeneratedPoints) { this.hasGeneratedPoints = true; - const decla = this.team === CharacterTeam.decla ? 0 : settings.playerKillPoint; + const blue = this.team === CharacterTeam.blue ? 0 : settings.playerKillPoint; const red = this.team === CharacterTeam.red ? 0 : settings.playerKillPoint; - game.handleCommand(new GeneratePointsCommand(decla, red)); + game.handleCommand(new GeneratePointsCommand(blue, red)); } } @@ -405,7 +405,7 @@ export class CharacterPhysical extends CharacterBase implements DynamicPhysical this.projectileStrength = Math.min( settings.playerMaxStrength, this.projectileStrength + - settings.playerStrengthRegenerationPerSeconds * deltaTimeInSeconds, + settings.playerStrengthRegenerationPerSeconds * deltaTimeInSeconds, ); this.regenerateHealth(deltaTimeInSeconds); @@ -443,6 +443,8 @@ export class CharacterPhysical extends CharacterBase implements DynamicPhysical this.setDirection(vec2.length(sumForce) === 0 ? vec2.fromValues(0, -1) : sumForce); } else { + this.carryWithRotatingPlanet(deltaTimeInSeconds); + const leftFootGravity = this.currentPlanet!.getForce(this.leftFoot.center); const rightFootGravity = this.currentPlanet!.getForce(this.rightFoot.center); @@ -493,6 +495,38 @@ export class CharacterPhysical extends CharacterBase implements DynamicPhysical ); } + // While standing on a planet, ride its spin: rigidly rotate the whole body + // around the planet centre by the same per-tick angle the renderer and the + // collision SDF use, so the player is carried around and turned with the + // surface instead of it sliding frictionlessly underneath. The positional + // change becomes velocity in setPropertyUpdates, so the motion syncs and the + // client extrapolates it smoothly. + private carryWithRotatingPlanet(deltaTimeInSeconds: number) { + const planet = this.currentPlanet; + if (!planet) { + return; + } + + // Negative: the rendered/collidable surface turns by R(-rotation) — see + // PlanetPhysical.distance (toLocalFrame) and planet-shape.ts. + const angle = -planet.angularVelocity * deltaTimeInSeconds; + const center = planet.center; + + this.head.center = vec2.rotate(vec2.create(), this.head.center, center, angle); + this.leftFoot.center = vec2.rotate( + vec2.create(), + this.leftFoot.center, + center, + angle, + ); + this.rightFoot.center = vec2.rotate( + vec2.create(), + this.rightFoot.center, + center, + angle, + ); + } + private keepPosture() { const center = this.center; this.springMove( diff --git a/backend/src/objects/circle-physical.ts b/backend/src/objects/circle-physical.ts index 2a36215..fcc912f 100644 --- a/backend/src/objects/circle-physical.ts +++ b/backend/src/objects/circle-physical.ts @@ -8,6 +8,7 @@ import { } from 'shared'; import { BoundingBox } from '../physics/bounding-boxes/bounding-box'; import { BoundingBoxBase } from '../physics/bounding-boxes/bounding-box-base'; +import { depenetrateCircle } from '../physics/functions/depenetrate-circle'; import { moveCircle } from '../physics/functions/move-circle'; import { PhysicalContainer } from '../physics/containers/physical-container'; import { DynamicPhysical } from '../physics/physicals/dynamic-physical'; @@ -100,6 +101,8 @@ export class CirclePhysical extends CommandReceiver implements Circle, DynamicPh .filter((b) => b.gameObject !== this.gameObject && b.canCollide); this.radius -= vec2.length(delta); + depenetrateCircle(this, intersecting); + const { normal, hitSurface, hitObject } = moveCircle(this, delta, intersecting); if (hitSurface) { diff --git a/backend/src/players/player-container.ts b/backend/src/players/player-container.ts index 5faea71..afc67bb 100644 --- a/backend/src/players/player-container.ts +++ b/backend/src/players/player-container.ts @@ -79,11 +79,11 @@ export class PlayerContainer { private getTeamOfNextPlayer(isNpc = false): CharacterTeam { const players = isNpc ? this.players : this._players; - const declaCount = players.filter((p) => p.team === CharacterTeam.decla).length; + const blueCount = players.filter((p) => p.team === CharacterTeam.blue).length; const redCount = players.filter((p) => p.team === CharacterTeam.red).length; - if ((declaCount === redCount && Random.getRandom() >= 0.5) || declaCount < redCount) { - return CharacterTeam.decla; + if ((blueCount === redCount && Random.getRandom() >= 0.5) || blueCount < redCount) { + return CharacterTeam.blue; } else { return CharacterTeam.red; } diff --git a/frontend/.firebaserc b/frontend/.firebaserc deleted file mode 100644 index 2f95982..0000000 --- a/frontend/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "decla-red - } -} \ No newline at end of file diff --git a/frontend/firebase.json b/frontend/firebase.json deleted file mode 100644 index 2c33c29..0000000 --- a/frontend/firebase.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "hosting": { - "public": "dist", - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9652017..bfa9f49 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,11 +1,11 @@ { - "name": "decla.red-frontend", + "name": "doppler-frontend", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "decla.red-frontend", + "name": "doppler-frontend", "version": "0.0.0", "devDependencies": { "@plausible-analytics/tracker": "^0.4.5", diff --git a/frontend/package.json b/frontend/package.json index 6dc2f68..fbf1d72 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "decla.red-frontend", + "name": "doppler-frontend", "version": "0.0.0", "description": "", "keywords": [], diff --git a/frontend/src/index.html b/frontend/src/index.html index e04a9bc..0d4d201 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -9,13 +9,13 @@ /> - - + + - decla.red + doppler @@ -37,7 +37,7 @@
-

decla.red

+

doppler

Join a game diff --git a/frontend/src/main.scss b/frontend/src/main.scss index 08e6889..2e2e60e 100644 --- a/frontend/src/main.scss +++ b/frontend/src/main.scss @@ -41,6 +41,18 @@ h1 { font-size: 6rem; text-align: center; padding-bottom: $medium-padding; + width: fit-content; + margin-inline: auto; + background: linear-gradient(90deg, $bright-blue, $bright-red); + background-clip: text; + -webkit-background-clip: text; + color: transparent; + + &::selection { + color: white; + -webkit-text-fill-color: white; + background-color: $accent; + } @media (max-width: $height-breakpoint) { font-size: 4.5rem; @@ -51,15 +63,6 @@ h1 { } } -.red { - color: $accent; - - &::selection { - color: $accent; - background-color: white; - } -} - html, body, canvas { @@ -126,14 +129,14 @@ body { border-radius: 1000px; transition: transform 200ms; - &.decla { - color: $bright-decla; + &.blue { + color: $bright-blue; .health { - background-color: $bright-decla; + background-color: $bright-blue; &:before { - background-color: $bright-decla; + background-color: $bright-blue; opacity: 0.3; } } @@ -211,8 +214,8 @@ body { font-weight: 700; animation: falling-point 2s ease-out forwards; - &.decla { - color: $bright-decla; + &.blue { + color: $bright-blue; } &.red { @@ -232,8 +235,8 @@ body { mask-image: url('../static/chevron.svg'); mask-size: contain; - &.decla { - background-color: $bright-decla; + &.blue { + background-color: $bright-blue; } &.red { @@ -324,8 +327,8 @@ body { display: none; } - .decla { - color: $bright-decla; + .blue { + color: $bright-blue; } .red { @@ -374,10 +377,10 @@ body { transition: width $animation-time; } - .fill.decla { + .fill.blue { right: 50%; - background: $bright-decla; - color: $bright-decla; + background: $bright-blue; + color: $bright-blue; border-radius: 1000px 0 0 1000px; } @@ -425,7 +428,7 @@ body { font-size $animation-time; } - .score.decla { + .score.blue { right: calc(50% + #{$small-padding}); } @@ -438,10 +441,10 @@ body { font-size: 1.2rem; } - .score.decla.leading { + .score.blue.leading { text-shadow: 0 0 3px rgba(0, 0, 0, 0.95), - 0 0 8px $bright-decla; + 0 0 8px $bright-blue; } .score.red.leading { @@ -471,9 +474,9 @@ body { border-bottom: 5px solid currentColor; } - &.decla { + &.blue { right: calc(50% + #{$small-padding}); - color: $bright-decla; + color: $bright-blue; } &.red { diff --git a/frontend/src/scripts/analytics.ts b/frontend/src/scripts/analytics.ts index 474cb7a..e732cc4 100644 --- a/frontend/src/scripts/analytics.ts +++ b/frontend/src/scripts/analytics.ts @@ -1,7 +1,7 @@ import { init as plausibleInit } from '@plausible-analytics/tracker'; const ANALYTICS_AUTO_CAPTURE_PAGEVIEWS = true; -const ANALYTICS_DOMAIN = 'decla.red'; +const ANALYTICS_DOMAIN = 'doppler.schmelczer.dev'; const ANALYTICS_ENDPOINT = 'https://stats.schmelczer.dev/status'; const ANALYTICS_LOGGING = process.env.NODE_ENV !== 'production'; diff --git a/frontend/src/scripts/configuration.ts b/frontend/src/scripts/configuration.ts index d3b16fe..9ab3fb6 100644 --- a/frontend/src/scripts/configuration.ts +++ b/frontend/src/scripts/configuration.ts @@ -1,18 +1,20 @@ /** * Hardcoded list of game servers the landing page offers to players. * - * Each entry is the public origin of a dockerized `declared-server` instance. + * Each entry is the public origin of a dockerized `doppler-server` instance. * The join screen polls `/state` (see `serverInformationEndpoint`) and * only shows a server once it responds, so listing an offline origin here is * harmless. Add or remove origins as you deploy more server containers. */ +// This origin predates the rebrand; update it once the game server is +// redeployed under a doppler subdomain. const productionServers: Array = ['https://declared.schmelczer.dev']; /** * When the page is served from localhost (i.e. the webpack-dev-server), also * offer the local backend so a `npm start` server can be joined during * development. The backend's default port is 3000 (see backend/src/options.ts). - * In production the hostname is `declared.schmelczer.dev`, so this never leaks. + * In production the page is served from its own hostname, so this never leaks. */ const isDevelopment = typeof location !== 'undefined' && diff --git a/frontend/src/scripts/scoreboard.ts b/frontend/src/scripts/scoreboard.ts index 38dff4e..41b02ba 100644 --- a/frontend/src/scripts/scoreboard.ts +++ b/frontend/src/scripts/scoreboard.ts @@ -8,35 +8,35 @@ import { CharacterTeam, UpdateGameState, clamp, settings } from 'shared'; export class Scoreboard { public readonly element = document.createElement('div'); - private readonly declaFill = document.createElement('div'); + private readonly blueFill = document.createElement('div'); private readonly redFill = document.createElement('div'); - private readonly declaScore = document.createElement('span'); + private readonly blueScore = document.createElement('span'); private readonly redScore = document.createElement('span'); private readonly youMarker = document.createElement('div'); constructor() { this.element.className = 'planet-progress'; - this.declaFill.className = 'fill decla'; + this.blueFill.className = 'fill blue'; this.redFill.className = 'fill red'; - this.declaScore.className = 'score decla'; + this.blueScore.className = 'score blue'; this.redScore.className = 'score red'; this.youMarker.className = 'you-marker'; this.youMarker.innerText = 'YOU'; this.element.append( - this.declaFill, + this.blueFill, this.redFill, - this.declaScore, + this.blueScore, this.redScore, this.youMarker, ); } public update( - { declaCount, redCount, limit }: UpdateGameState, + { blueCount, redCount, limit }: UpdateGameState, localTeam: CharacterTeam | undefined, ) { const { scoreboardHalfWidthPercent, scoreboardMinFillPercent } = settings; @@ -46,23 +46,23 @@ export class Scoreboard { clamp(count / limit, 0, 1) * scoreboardHalfWidthPercent, ); - this.declaFill.style.width = fraction(declaCount) + '%'; + this.blueFill.style.width = fraction(blueCount) + '%'; this.redFill.style.width = fraction(redCount) + '%'; const isMatchPoint = (count: number) => count / limit >= settings.matchPointScoreRatio; - this.declaFill.classList.toggle('match-point', isMatchPoint(declaCount)); + this.blueFill.classList.toggle('match-point', isMatchPoint(blueCount)); this.redFill.classList.toggle('match-point', isMatchPoint(redCount)); - this.declaScore.innerText = String(Math.round(declaCount)); + this.blueScore.innerText = String(Math.round(blueCount)); this.redScore.innerText = String(Math.round(redCount)); - this.declaScore.classList.toggle('leading', declaCount > redCount); - this.redScore.classList.toggle('leading', redCount > declaCount); + this.blueScore.classList.toggle('leading', blueCount > redCount); + this.redScore.classList.toggle('leading', redCount > blueCount); - if (localTeam === CharacterTeam.decla || localTeam === CharacterTeam.red) { + if (localTeam === CharacterTeam.blue || localTeam === CharacterTeam.red) { this.youMarker.style.display = ''; - this.youMarker.classList.toggle('decla', localTeam === CharacterTeam.decla); + this.youMarker.classList.toggle('blue', localTeam === CharacterTeam.blue); this.youMarker.classList.toggle('red', localTeam === CharacterTeam.red); } else { this.youMarker.style.display = 'none'; diff --git a/frontend/src/scripts/tutorial.ts b/frontend/src/scripts/tutorial.ts index 823ef40..64befb5 100644 --- a/frontend/src/scripts/tutorial.ts +++ b/frontend/src/scripts/tutorial.ts @@ -86,7 +86,7 @@ export class Tutorial extends CommandReceiver { } if (standing) { const drift = standing.ownership - this.standingBaseline; - const progress = player.team === CharacterTeam.decla ? -drift : drift; + const progress = player.team === CharacterTeam.blue ? -drift : drift; if (progress > captureProgressThreshold) { this.finish(); } diff --git a/frontend/src/styles/_vars.scss b/frontend/src/styles/_vars.scss index 377d9db..f19825b 100644 --- a/frontend/src/styles/_vars.scss +++ b/frontend/src/styles/_vars.scss @@ -11,12 +11,12 @@ $breakpoint: 700px; $height-breakpoint: 500px; $large-icon: 48px; $small-icon: 32px; -$bright-decla: #4069a5; +$bright-blue: #4069a5; $bright-red: #d15652; $bright-neutral: #ccc; :root { - --bright-decla: #{$bright-decla}; + --bright-blue: #{$bright-blue}; --bright-red: #{$bright-red}; --bright-neutral: #{$bright-neutral}; } diff --git a/shared/src/commands/types/update-game-state.ts b/shared/src/commands/types/update-game-state.ts index 40ce4e1..7e66c19 100644 --- a/shared/src/commands/types/update-game-state.ts +++ b/shared/src/commands/types/update-game-state.ts @@ -4,7 +4,7 @@ import { Command } from '../command'; @serializable export class UpdateGameState extends Command { public constructor( - public readonly declaCount: number, + public readonly blueCount: number, public readonly redCount: number, public readonly limit: number, ) { @@ -12,6 +12,6 @@ export class UpdateGameState extends Command { } public toArray(): Array { - return [this.declaCount, this.redCount, this.limit]; + return [this.blueCount, this.redCount, this.limit]; } } diff --git a/shared/src/objects/types/character-base.ts b/shared/src/objects/types/character-base.ts index 69cc670..e6414b8 100644 --- a/shared/src/objects/types/character-base.ts +++ b/shared/src/objects/types/character-base.ts @@ -4,7 +4,7 @@ import { serializable } from '../../serialization/serializable'; import { GameObject } from '../game-object'; export enum CharacterTeam { - decla = 'decla', + blue = 'blue', neutral = 'neutral', red = 'red', } diff --git a/shared/src/settings.ts b/shared/src/settings.ts index f38bd81..3a1a157 100644 --- a/shared/src/settings.ts +++ b/shared/src/settings.ts @@ -1,13 +1,13 @@ import { rgb255 } from './helper/rgb255'; import { CharacterTeam } from './objects/types/character-base'; -const declaColor = rgb255(64, 105, 165); +const blueColor = rgb255(64, 105, 165); const neutralColor = rgb255(82, 165, 64); const redColor = rgb255(209, 86, 82); const q = 2.5; -const declaColorDim = rgb255(64 * q, 105 * q, 165 * q); +const blueColorDim = rgb255(64 * q, 105 * q, 165 * q); const redColorDim = rgb255(209 * q, 86 * q, 82 * q); -const declaPlanetColor = declaColorDim; +const bluePlanetColor = blueColorDim; const redPlanetColor = redColorDim; export const settings = { @@ -64,8 +64,8 @@ export const settings = { chargeShotSpeedMax: 3400, playerColorIndexOffset: 3, backgroundGradient: [rgb255(90, 38, 43), rgb255(43, 39, 73)], - declaColor, - declaPlanetColor, + blueColor, + bluePlanetColor, npcNames: [ 'Adam', 'Andrew', @@ -119,12 +119,12 @@ export const settings = { redColor, redPlanetColor, colorIndices: { - [CharacterTeam.decla]: 0, + [CharacterTeam.blue]: 0, [CharacterTeam.neutral]: 1, [CharacterTeam.red]: 2, }, - palette: [declaColor, neutralColor, redColor], - paletteDim: [declaColorDim, neutralColor, redColorDim], + palette: [blueColor, neutralColor, redColor], + paletteDim: [blueColorDim, neutralColor, redColorDim], targetPhysicsDeltaTimeInSeconds: 1 / 200, inViewAreaSize: 1920 * 1080 * 4, scoreboardHalfWidthPercent: 50,