diff --git a/resources/images/buildings/cityAlt1.png b/resources/images/buildings/cityAlt1.png index 2f9c52d8b..1975fd265 100644 Binary files a/resources/images/buildings/cityAlt1.png and b/resources/images/buildings/cityAlt1.png differ diff --git a/resources/images/buildings/fortAlt3.png b/resources/images/buildings/fortAlt3.png index 4637bdd8f..8087a8998 100644 Binary files a/resources/images/buildings/fortAlt3.png and b/resources/images/buildings/fortAlt3.png differ diff --git a/resources/images/buildings/silo1.png b/resources/images/buildings/silo1.png index a68c5e5c9..89686639c 100644 Binary files a/resources/images/buildings/silo1.png and b/resources/images/buildings/silo1.png differ diff --git a/resources/images/buildings/silo4.png b/resources/images/buildings/silo4.png index b01f33adf..8216f6b2f 100644 Binary files a/resources/images/buildings/silo4.png and b/resources/images/buildings/silo4.png differ diff --git a/resources/sprites/halloween/bats.png b/resources/sprites/halloween/bats.png deleted file mode 100644 index ff96f164b..000000000 Binary files a/resources/sprites/halloween/bats.png and /dev/null differ diff --git a/resources/sprites/halloween/bubble.png b/resources/sprites/halloween/bubble.png deleted file mode 100644 index b8d82112f..000000000 Binary files a/resources/sprites/halloween/bubble.png and /dev/null differ diff --git a/resources/sprites/halloween/ghost.png b/resources/sprites/halloween/ghost.png deleted file mode 100644 index 15603066b..000000000 Binary files a/resources/sprites/halloween/ghost.png and /dev/null differ diff --git a/resources/sprites/halloween/miniPumpkin.png b/resources/sprites/halloween/miniPumpkin.png deleted file mode 100644 index 33274a1ef..000000000 Binary files a/resources/sprites/halloween/miniPumpkin.png and /dev/null differ diff --git a/resources/sprites/halloween/minifireGreen.png b/resources/sprites/halloween/minifireGreen.png deleted file mode 100644 index 8de5aa2ec..000000000 Binary files a/resources/sprites/halloween/minifireGreen.png and /dev/null differ diff --git a/resources/sprites/halloween/pumpkin.png b/resources/sprites/halloween/pumpkin.png deleted file mode 100644 index a6b772d41..000000000 Binary files a/resources/sprites/halloween/pumpkin.png and /dev/null differ diff --git a/resources/sprites/halloween/sam_explosion.png b/resources/sprites/halloween/sam_explosion.png deleted file mode 100644 index f8ad56602..000000000 Binary files a/resources/sprites/halloween/sam_explosion.png and /dev/null differ diff --git a/resources/sprites/halloween/shark.png b/resources/sprites/halloween/shark.png deleted file mode 100644 index 2ce0a2275..000000000 Binary files a/resources/sprites/halloween/shark.png and /dev/null differ diff --git a/resources/sprites/halloween/skull.png b/resources/sprites/halloween/skull.png deleted file mode 100644 index 73d9ecacd..000000000 Binary files a/resources/sprites/halloween/skull.png and /dev/null differ diff --git a/resources/sprites/halloween/skullNuke.png b/resources/sprites/halloween/skullNuke.png deleted file mode 100644 index 1a262ab83..000000000 Binary files a/resources/sprites/halloween/skullNuke.png and /dev/null differ diff --git a/resources/sprites/halloween/smokeAndFireGreen.png b/resources/sprites/halloween/smokeAndFireGreen.png deleted file mode 100644 index 641803e7d..000000000 Binary files a/resources/sprites/halloween/smokeAndFireGreen.png and /dev/null differ diff --git a/resources/sprites/halloween/tentacle.png b/resources/sprites/halloween/tentacle.png deleted file mode 100644 index 9fb590a66..000000000 Binary files a/resources/sprites/halloween/tentacle.png and /dev/null differ diff --git a/resources/sprites/halloween/tornado.png b/resources/sprites/halloween/tornado.png deleted file mode 100644 index ba51fc069..000000000 Binary files a/resources/sprites/halloween/tornado.png and /dev/null differ diff --git a/src/client/graphics/AnimatedSpriteLoader.ts b/src/client/graphics/AnimatedSpriteLoader.ts index ab6fd5d8e..03e49e0cc 100644 --- a/src/client/graphics/AnimatedSpriteLoader.ts +++ b/src/client/graphics/AnimatedSpriteLoader.ts @@ -1,21 +1,15 @@ +import miniBigSmoke from "../../../resources/sprites/bigsmoke.png"; import buildingExplosion from "../../../resources/sprites/buildingExplosion.png"; +import conquestSword from "../../../resources/sprites/conquestSword.png"; import dust from "../../../resources/sprites/dust.png"; import miniExplosion from "../../../resources/sprites/miniExplosion.png"; +import miniFire from "../../../resources/sprites/minifire.png"; +import nuke from "../../../resources/sprites/nukeExplosion.png"; import SAMExplosion from "../../../resources/sprites/samExplosion.png"; import sinkingShip from "../../../resources/sprites/sinkingShip.png"; +import miniSmoke from "../../../resources/sprites/smoke.png"; +import miniSmokeAndFire from "../../../resources/sprites/smokeAndFire.png"; import unitExplosion from "../../../resources/sprites/unitExplosion.png"; - -import bats from "../../../resources/sprites/halloween/bats.png"; -import bubble from "../../../resources/sprites/halloween/bubble.png"; -import ghost from "../../../resources/sprites/halloween/ghost.png"; -import minifireGreen from "../../../resources/sprites/halloween/minifireGreen.png"; -import shark from "../../../resources/sprites/halloween/shark.png"; -import skull from "../../../resources/sprites/halloween/skull.png"; -import skullNuke from "../../../resources/sprites/halloween/skullNuke.png"; -import miniSmokeAndFireGreen from "../../../resources/sprites/halloween/smokeAndFireGreen.png"; -import tentacle from "../../../resources/sprites/halloween/tentacle.png"; -import tornado from "../../../resources/sprites/halloween/tornado.png"; - import { Theme } from "../../core/configuration/Config"; import { PlayerView } from "../../core/game/GameView"; import { AnimatedSprite } from "./AnimatedSprite"; @@ -34,7 +28,7 @@ type AnimatedSpriteConfig = { const ANIMATED_SPRITE_CONFIG: Partial> = { [FxType.MiniFire]: { - url: minifireGreen, + url: miniFire, frameWidth: 7, frameCount: 6, frameDuration: 100, @@ -43,28 +37,28 @@ const ANIMATED_SPRITE_CONFIG: Partial> = { originY: 11, }, [FxType.MiniSmoke]: { - url: ghost, - frameWidth: 10, - frameCount: 5, - frameDuration: 100, + url: miniSmoke, + frameWidth: 11, + frameCount: 4, + frameDuration: 120, looping: true, - originX: 4, + originX: 2, originY: 10, }, [FxType.MiniBigSmoke]: { - url: bats, - frameWidth: 21, - frameCount: 6, + url: miniBigSmoke, + frameWidth: 24, + frameCount: 5, frameDuration: 120, looping: true, originX: 9, originY: 14, }, [FxType.MiniSmokeAndFire]: { - url: miniSmokeAndFireGreen, + url: miniSmokeAndFire, frameWidth: 24, frameCount: 5, - frameDuration: 90, + frameDuration: 120, looping: true, originX: 9, originY: 14, @@ -96,15 +90,6 @@ const ANIMATED_SPRITE_CONFIG: Partial> = { originX: 9, originY: 9, }, - [FxType.SinkingShip]: { - url: sinkingShip, - frameWidth: 16, - frameCount: 14, - frameDuration: 90, - looping: false, - originX: 7, - originY: 7, - }, [FxType.BuildingExplosion]: { url: buildingExplosion, frameWidth: 17, @@ -114,14 +99,23 @@ const ANIMATED_SPRITE_CONFIG: Partial> = { originX: 8, originY: 8, }, - [FxType.Nuke]: { - url: skullNuke, - frameWidth: 42, - frameCount: 19, - frameDuration: 50, + [FxType.SinkingShip]: { + url: sinkingShip, + frameWidth: 16, + frameCount: 14, + frameDuration: 90, looping: false, - originX: 20, - originY: 21, + originX: 7, + originY: 7, + }, + [FxType.Nuke]: { + url: nuke, + frameWidth: 60, + frameCount: 9, + frameDuration: 70, + looping: false, + originX: 30, + originY: 30, }, [FxType.SAMExplosion]: { url: SAMExplosion, @@ -133,51 +127,16 @@ const ANIMATED_SPRITE_CONFIG: Partial> = { originY: 19, }, [FxType.Conquest]: { - url: skull, - frameWidth: 14, - frameCount: 14, - frameDuration: 90, - looping: false, - originX: 7, - originY: 23, - }, - [FxType.Tentacle]: { - url: tentacle, - frameWidth: 22, - frameCount: 26, - frameDuration: 90, - looping: false, - originX: 13, - originY: 28, - }, - [FxType.Shark]: { - url: shark, - frameWidth: 25, - frameCount: 14, - frameDuration: 90, - looping: false, - originX: 13, - originY: 8, - }, - [FxType.Bubble]: { - url: bubble, - frameWidth: 22, - frameCount: 13, - frameDuration: 80, - looping: false, - originX: 13, - originY: 8, - }, - [FxType.Tornado]: { - url: tornado, - frameWidth: 30, + url: conquestSword, + frameWidth: 21, frameCount: 10, - frameDuration: 80, - looping: true, - originX: 11, - originY: 22, + frameDuration: 90, + looping: false, + originX: 10, + originY: 16, }, }; + export class AnimatedSpriteLoader { private animatedSpriteImageMap: Map = new Map(); // Do not color the same sprite twice diff --git a/src/client/graphics/SpriteLoader.ts b/src/client/graphics/SpriteLoader.ts index fdc3a3c14..29d5b7791 100644 --- a/src/client/graphics/SpriteLoader.ts +++ b/src/client/graphics/SpriteLoader.ts @@ -1,6 +1,6 @@ import { Colord } from "colord"; -import miniPumpkin from "../../../resources/sprites/halloween/miniPumpkin.png"; -import pumpkin from "../../../resources/sprites/halloween/pumpkin.png"; +import atomBombSprite from "../../../resources/sprites/atombomb.png"; +import hydrogenBombSprite from "../../../resources/sprites/hydrogenbomb.png"; import mirvSprite from "../../../resources/sprites/mirv2.png"; import samMissileSprite from "../../../resources/sprites/samMissile.png"; import tradeShipSprite from "../../../resources/sprites/tradeship.png"; @@ -26,8 +26,8 @@ const SPRITE_CONFIG: Partial> = { [UnitType.TransportShip]: transportShipSprite, [UnitType.Warship]: warshipSprite, [UnitType.SAMMissile]: samMissileSprite, - [UnitType.AtomBomb]: miniPumpkin, - [UnitType.HydrogenBomb]: pumpkin, + [UnitType.AtomBomb]: atomBombSprite, + [UnitType.HydrogenBomb]: hydrogenBombSprite, [UnitType.TradeShip]: tradeShipSprite, [UnitType.MIRV]: mirvSprite, [TrainTypeSprite.Engine]: trainEngineSprite, diff --git a/src/client/graphics/fx/ConquestFx.ts b/src/client/graphics/fx/ConquestFx.ts index 2c3f50413..7fa8d0690 100644 --- a/src/client/graphics/fx/ConquestFx.ts +++ b/src/client/graphics/fx/ConquestFx.ts @@ -26,6 +26,7 @@ export function conquestFxFactory( x, y, FxType.Conquest, + 2500, ); const fadeAnimation = new FadeFx(swordAnimation, 0.1, 0.6); conquestFx.push(fadeAnimation); diff --git a/src/client/graphics/fx/Fx.ts b/src/client/graphics/fx/Fx.ts index fa843de81..d4b206614 100644 --- a/src/client/graphics/fx/Fx.ts +++ b/src/client/graphics/fx/Fx.ts @@ -16,8 +16,4 @@ export enum FxType { UnderConstruction = "UnderConstruction", Dust = "Dust", Conquest = "Conquest", - Tentacle = "Tentacle", - Shark = "Shark", - Bubble = "Bubble", - Tornado = "Tornado", } diff --git a/src/client/graphics/fx/SpriteFx.ts b/src/client/graphics/fx/SpriteFx.ts index ebe8d410c..2926121a8 100644 --- a/src/client/graphics/fx/SpriteFx.ts +++ b/src/client/graphics/fx/SpriteFx.ts @@ -19,35 +19,6 @@ function fadeInOut( return 1 - f * f; } } -/** - * Move a sprite around - */ -export class MoveSpriteFx implements Fx { - private originX: number; - private originY: number; - constructor( - private fxToMove: SpriteFx, - private toX: number, - private toY: number, - private fadeIn: number = 0.1, - private fadeOut: number = 0.9, - ) { - this.originX = fxToMove.x; - this.originY = fxToMove.y; - } - - renderTick(duration: number, ctx: CanvasRenderingContext2D): boolean { - const t = this.fxToMove.getElapsedTime() / this.fxToMove.getDuration(); - this.fxToMove.x = Math.floor(this.originX * (1 - t) + this.toX * t); - this.fxToMove.y = Math.floor(this.originY * (1 - t) + this.toY * t); - ctx.save(); - ctx.globalAlpha = fadeInOut(t, this.fadeIn, this.fadeOut); - const result = this.fxToMove.renderTick(duration, ctx); - ctx.restore(); - return result; - } -} - /** * Fade in/out another FX */ @@ -78,8 +49,8 @@ export class SpriteFx implements Fx { protected waitToTheEnd = false; constructor( animatedSpriteLoader: AnimatedSpriteLoader, - public x: number, - public y: number, + protected x: number, + protected y: number, fxType: FxType, duration?: number, owner?: PlayerView, diff --git a/src/client/graphics/layers/FxLayer.ts b/src/client/graphics/layers/FxLayer.ts index 94a9c1040..e5ddf3831 100644 --- a/src/client/graphics/layers/FxLayer.ts +++ b/src/client/graphics/layers/FxLayer.ts @@ -13,7 +13,7 @@ import { AnimatedSpriteLoader } from "../AnimatedSpriteLoader"; import { conquestFxFactory } from "../fx/ConquestFx"; import { Fx, FxType } from "../fx/Fx"; import { nukeFxFactory, ShockwaveFx } from "../fx/NukeFx"; -import { FadeFx, MoveSpriteFx, SpriteFx } from "../fx/SpriteFx"; +import { SpriteFx } from "../fx/SpriteFx"; import { TargetFx } from "../fx/TargetFx"; import { TextFx } from "../fx/TextFx"; import { UnitExplosionFx } from "../fx/UnitExplosionFx"; @@ -21,8 +21,6 @@ import { Layer } from "./Layer"; export class FxLayer implements Layer { private canvas: HTMLCanvasElement; private context: CanvasRenderingContext2D; - private lastRandomEvent: number = 0; - private randomEventRate: number = 8; private lastRefresh: number = 0; private refreshRate: number = 10; @@ -42,14 +40,6 @@ export class FxLayer implements Layer { } tick() { - if (!this.game.config().userSettings()?.fxLayer()) { - return; - } - this.lastRandomEvent += 1; - if (this.lastRandomEvent > this.randomEventRate) { - this.lastRandomEvent = 0; - this.randomEvent(); - } this.manageBoatTargetFx(); this.game .updatesSinceLastTick() @@ -126,72 +116,6 @@ export class FxLayer implements Layer { this.allFx.push(textFx); } - randomEvent() { - const randX = Math.floor(Math.random() * this.game.width()); - const randY = Math.floor(Math.random() * this.game.height()); - const ref = this.game.ref(randX, randY); - if (this.game.isOcean(ref) && !this.game.isShoreline(ref)) { - const animation = Math.floor(Math.random() * 4); - if (animation === 0) { - const fx = new SpriteFx( - this.animatedSpriteLoader, - randX, - randY, - FxType.Shark, - ); - this.allFx.push(fx); - } else if (animation === 1) { - const fx = new SpriteFx( - this.animatedSpriteLoader, - randX, - randY, - FxType.Bubble, - ); - this.allFx.push(fx); - } else if (animation === 2) { - const fx = new MoveSpriteFx( - new SpriteFx( - this.animatedSpriteLoader, - randX, - randY, - FxType.Tornado, - 6000, - ), - randX - 40, - randY, - 0.1, - 0.8, - ); - this.allFx.push(fx); - } else if (animation === 3) { - const fx = new FadeFx( - new SpriteFx( - this.animatedSpriteLoader, - randX, - randY, - FxType.Tentacle, - ), - 0.1, - 0.8, - ); - this.allFx.push(fx); - } - } else { - const ghost = new FadeFx( - new SpriteFx( - this.animatedSpriteLoader, - randX, - randY, - FxType.MiniSmoke, - 4000, - ), - 0.1, - 0.8, - ); - this.allFx.push(ghost); - } - } - onUnitEvent(unit: UnitView) { switch (unit.type()) { case UnitType.TransportShip: { diff --git a/src/core/Util.ts b/src/core/Util.ts index 6524e300c..a6b72a304 100644 --- a/src/core/Util.ts +++ b/src/core/Util.ts @@ -289,17 +289,17 @@ export function createRandomName( } export const emojiTable = [ - ["😀", "😊", "😇", "😎", "😈"], + ["😀", "😊", "🥰", "😇", "😎"], ["😞", "🥺", "😭", "😱", "😡"], - ["⏳", "🥱", "🤦‍♂️", "🖕", "🤡"], - ["👋", "👏", "👻", "💪", "🎃"], + ["😈", "🤡", "🖕", "🥱", "🤦‍♂️"], + ["👋", "👏", "🤌", "💪", "🫡"], ["👍", "👎", "❓", "🐔", "🐀"], - ["🆘", "🤝", "🕊️", "🏳️", "🛡️"], + ["🤝", "🆘", "🕊️", "🏳️", "⏳"], ["🔥", "💥", "💀", "☢️", "⚠️"], ["↖️", "⬆️", "↗️", "👑", "🥇"], ["⬅️", "🎯", "➡️", "🥈", "🥉"], ["↙️", "⬇️", "↘️", "❤️", "💔"], - ["💰", "🏭", "🚂", "⚓", "⛵"], + ["💰", "⚓", "⛵", "🏡", "🛡️"], ] as const; // 2d to 1d array export const flattenedEmojiTable = emojiTable.flat(); diff --git a/src/core/configuration/PastelTheme.ts b/src/core/configuration/PastelTheme.ts index 5664c41bb..d40509e1c 100644 --- a/src/core/configuration/PastelTheme.ts +++ b/src/core/configuration/PastelTheme.ts @@ -18,7 +18,7 @@ export class PastelTheme implements Theme { private nationColorAllocator = new ColorAllocator(nationColors, nationColors); private background = colord({ r: 60, g: 60, b: 60 }); - private shore = colord({ r: 223, g: 187, b: 132 }); + private shore = colord({ r: 204, g: 203, b: 158 }); private falloutColors = [ colord({ r: 120, g: 255, b: 71 }), // Original color colord({ r: 130, g: 255, b: 85 }), // Slightly lighter @@ -26,8 +26,8 @@ export class PastelTheme implements Theme { colord({ r: 125, g: 255, b: 75 }), // Warmer tint colord({ r: 115, g: 250, b: 68 }), // Cooler tint ]; - private water = colord({ r: 80, g: 76, b: 179 }); - private shorelineWater = colord({ r: 100, g: 110, b: 255 }); + private water = colord({ r: 70, g: 132, b: 180 }); + private shorelineWater = colord({ r: 100, g: 143, b: 255 }); private _selfColor = colord({ r: 0, g: 255, b: 0 }); private _allyColor = colord({ r: 255, g: 255, b: 0 }); @@ -97,15 +97,15 @@ export class PastelTheme implements Theme { } case TerrainType.Plains: return colord({ - r: 216, - g: 205 - 2 * mag, - b: 127, + r: 190, + g: 220 - 2 * mag, + b: 138, }); case TerrainType.Highland: return colord({ - r: 223 + 2 * mag, - g: 187 + 2 * mag, - b: 132 + 2 * mag, + r: 200 + 2 * mag, + g: 183 + 2 * mag, + b: 138 + 2 * mag, }); case TerrainType.Mountain: return colord({ diff --git a/src/core/execution/utils/BotBehavior.ts b/src/core/execution/utils/BotBehavior.ts index 2b914db6a..868d55f74 100644 --- a/src/core/execution/utils/BotBehavior.ts +++ b/src/core/execution/utils/BotBehavior.ts @@ -20,7 +20,7 @@ const EMOJI_ASSIST_ACCEPT = (["👍", "⛵", "🤝", "🎯"] as const).map(emoji const EMOJI_RELATION_TOO_LOW = (["🥱", "🤦‍♂️"] as const).map(emojiId); const EMOJI_TARGET_ME = (["🥺", "💀"] as const).map(emojiId); const EMOJI_TARGET_ALLY = (["🕊️", "👎"] as const).map(emojiId); -export const EMOJI_HECKLE = (["👻", "🎃"] as const).map(emojiId); +export const EMOJI_HECKLE = (["🤡", "😡"] as const).map(emojiId); export class BotBehavior { private enemy: Player | null = null;