Fix sprite builder

Fixes sprite builder to not rely on sprite.ts that is generating
This commit is contained in:
2026-03-21 13:28:03 +01:00
parent 1fc21d700e
commit 6380f0bbcc
33 changed files with 143 additions and 3587 deletions
+1 -7
View File
@@ -321,14 +321,8 @@ const setProd = cb => {
cb(); cb();
}; };
const warnAboutTscBeingDumb = cb => {
console.log("You're probably about to see some warnings from tsc about not being able to find certain files.");
console.log("Don't worry about these. It's a known issue regarding circular build dependencies. The build should continue despite these errors.");
cb();
};
const empty = cb => cb(); const empty = cb => cb();
const tsTools = gulp.series(warnAboutTscBeingDumb, npmScript('ts-tools')); const tsTools = gulp.series(npmScript('ts-tools'));
const spritesTask = argv.sprites ? sprites : empty; const spritesTask = argv.sprites ? sprites : empty;
const buildSprites = gulp.series(tsTools, sprites); const buildSprites = gulp.series(tsTools, sprites);
+3 -2
View File
@@ -2,10 +2,10 @@ import { Injectable, NgZone } from '@angular/core';
import { Subject, BehaviorSubject } from 'rxjs'; import { Subject, BehaviorSubject } from 'rxjs';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
import { import {
EntityState, Pony, Notification, TileType, Action, IServerActions, Season, WorldState, Holiday, EntityState, Pony, Notification, TileType, Action, IServerActions, WorldState,
TileSets, ChatMessage, PartyInfo, Entity, DrawOptions, Engine, defaultDrawOptions, PonyStateFlags, TileSets, ChatMessage, PartyInfo, Entity, DrawOptions, Engine, defaultDrawOptions, PonyStateFlags,
DoAction, ChatType, WorldStateFlags, DebugFlags, MessageType, AccountSettings, Matrix4, DoAction, ChatType, WorldStateFlags, DebugFlags, MessageType, AccountSettings, Matrix4,
FakeEntity, SelectFlags, WorldMap, MapType, MapFlags, EntityFlags, houseTiles, isValidTile, GraphicsQuality FakeEntity, SelectFlags, WorldMap, EntityFlags, houseTiles, isValidTile, GraphicsQuality
} from '../common/interfaces'; } from '../common/interfaces';
import { import {
clamp, lengthOfXY, setFlag, hasFlag, boundsIntersect, point, toInt, lerpColor, distanceXY clamp, lengthOfXY, setFlag, hasFlag, boundsIntersect, point, toInt, lerpColor, distanceXY
@@ -72,6 +72,7 @@ import { Model } from '../components/services/model';
import { filterEntityName } from './handlers'; import { filterEntityName } from './handlers';
import { isOutsideMap } from '../common/collision'; import { isOutsideMap } from '../common/collision';
import { loadAndInitSpriteSheets } from './loadSprites'; import { loadAndInitSpriteSheets } from './loadSprites';
import { Holiday, MapFlags, MapType, Season } from '../common/commonInterfaces';
interface Minimap { interface Minimap {
width: number; width: number;
+2 -1
View File
@@ -18,7 +18,8 @@ import {
} from '../common/ponyUtils'; } from '../common/ponyUtils';
import { HEAD_ACCESSORY_OFFSETS, EAR_ACCESSORY_OFFSETS, EXTRA_ACCESSORY_OFFSETS } from '../common/offsets'; import { HEAD_ACCESSORY_OFFSETS, EAR_ACCESSORY_OFFSETS, EXTRA_ACCESSORY_OFFSETS } from '../common/offsets';
import { createMat2D, identityMat2D, translateMat2D, copyMat2D, rotateMat2D, scaleMat2D } from '../common/mat2d'; import { createMat2D, identityMat2D, translateMat2D, copyMat2D, rotateMat2D, scaleMat2D } from '../common/mat2d';
import { darkenForOutline } from '../common/ponyInfo'; import { darkenForOutline } from '../common/color';
type Batch = PaletteSpriteBatch; type Batch = PaletteSpriteBatch;
type Info = Readonly<PalettePonyInfo>; type Info = Readonly<PalettePonyInfo>;
+1 -3
View File
@@ -1,7 +1,5 @@
import * as sprites from '../generated/sprites'; import * as sprites from '../generated/sprites';
import { SpriteAnimation } from '../common/animationPlayer'; import { AnimatedRenderable, Sprite, SpriteAnimation } from '../common/interfaces';
import { AnimatedRenderable } from '../common/mixins';
import { Sprite } from '../common/interfaces';
export const zzzAnimation1 = createSpriteAnimation( export const zzzAnimation1 = createSpriteAnimation(
sprites.emote_sleep1, 8, 8, 4, 7, true, sprites.emote_sleep1_flip.frames); sprites.emote_sleep1, 8, 8, 4, 7, true, sprites.emote_sleep1_flip.frames);
+2 -1
View File
@@ -1,6 +1,6 @@
import { import {
Entity, Point, TileType, Rect, MapInfo, Camera, Region, MapState, defaultMapState, Pony, Entity, Point, TileType, Rect, MapInfo, Camera, Region, MapState, defaultMapState, Pony,
MapType, EntityFlags, WorldMap, Weather, EntityState, MapFlags, EntityFlags, WorldMap, EntityState,
} from '../common/interfaces'; } from '../common/interfaces';
import { contains, removeItem, boundsIntersect, array, pushUniq, containsPoint, removeItemFast } from '../common/utils'; import { contains, removeItem, boundsIntersect, array, pushUniq, containsPoint, removeItemFast } from '../common/utils';
import { isBoundsVisible, } from '../common/camera'; import { isBoundsVisible, } from '../common/camera';
@@ -22,6 +22,7 @@ import { PaletteManager } from '../graphics/paletteManager';
import { timeEnd, timeStart } from '../common/timing'; import { timeEnd, timeStart } from '../common/timing';
import { playEffect } from './handlers'; import { playEffect } from './handlers';
import { isFlyingDown } from '../common/ponyStates'; import { isFlyingDown } from '../common/ponyStates';
import { MapFlags, MapType, Weather } from '../common/commonInterfaces';
const defaultMapInfo: MapInfo = { const defaultMapInfo: MapInfo = {
type: MapType.None, type: MapType.None,
+1 -28
View File
@@ -1,36 +1,9 @@
import { sample } from 'lodash'; import { sample } from 'lodash';
import { Sprite, Palette, PaletteSpriteBatch } from './interfaces'; import { AnimationPhase, AnimationPlayer, Palette, PaletteSpriteBatch, SpriteAnimation } from './interfaces';
import { drawSpriteCropped } from '../graphics/graphicsUtils'; import { drawSpriteCropped } from '../graphics/graphicsUtils';
import { includes } from './utils'; import { includes } from './utils';
import { WHITE } from './colors'; import { WHITE } from './colors';
const enum AnimationPhase {
Starting,
Playing,
Ending,
}
export interface SpriteAnimation {
loop: boolean;
start: number;
middle: number;
end: number;
fps: number;
palette: Uint32Array;
frames: Sprite[];
flipFrames?: Sprite[];
}
export interface AnimationPlayer {
nextAnimation: SpriteAnimation | undefined;
currentAnimation: SpriteAnimation | undefined;
time: number;
frame: number;
phase: AnimationPhase;
dirty: boolean;
palette: Palette;
}
export function createAnimationPlayer(palette: Palette): AnimationPlayer { export function createAnimationPlayer(palette: Palette): AnimationPlayer {
return { return {
nextAnimation: undefined, nextAnimation: undefined,
+9
View File
@@ -533,3 +533,12 @@ export function rgb2hsl(rgb: RGB): HSL {
export function hsl2CSS(hsl: HSL) { export function hsl2CSS(hsl: HSL) {
return `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`; return `hsl(${hsl.h},${hsl.s}%,${hsl.l}%)`;
} }
export function darkenForOutline(color: number) {
const mult = (159 / 255);
const r = (mult * getR(color)) | 0;
const g = (mult * getG(color)) | 0;
const b = (mult * getB(color)) | 0;
const a = getAlpha(color);
return colorFromRGBA(r, g, b, a);
}
+3 -3
View File
@@ -1,7 +1,7 @@
import { MessageType, Season, TileType } from './interfaces'; import { MessageType, TileType } from './interfaces';
import { colorFromHSVA, colorToHexRGB, parseColorFast, colorToHSVA, withAlphaFloat } from './color'; import { colorFromHSVA, colorToHexRGB, parseColorFast, colorToHSVA, withAlphaFloat, darkenForOutline } from './color';
import { invalidEnum, invalidEnumReturn } from './utils'; import { invalidEnum, invalidEnumReturn } from './utils';
import { darkenForOutline } from './ponyInfo'; import { Season } from './commonInterfaces';
// basic // basic
+34
View File
@@ -0,0 +1,34 @@
export const enum Season {
Summer = 1,
Autumn = 2,
Winter = 4,
Spring = 8,
}
export const enum Holiday {
None,
Christmas,
Halloween,
StPatricks,
Easter,
}
export const enum Weather {
None,
Rain,
}
export const enum MapType {
None,
Island,
House,
Cave,
}
export const enum MapFlags {
None = 0,
EditableWalls = 1,
EditableEntities = 2,
EditableTiles = 4,
EdibleGrass = 8,
}
+1 -1
View File
@@ -1,4 +1,4 @@
import { Season, Holiday } from './interfaces'; import { Holiday, Season } from './commonInterfaces';
export const SEASON: Season = Season.Spring; export const SEASON: Season = Season.Spring;
export const HOLIDAY: Holiday = Holiday.None; export const HOLIDAY: Holiday = Holiday.None;
+4 -3
View File
@@ -2,13 +2,14 @@ import { compact } from 'lodash';
import * as sprites from '../generated/sprites'; import * as sprites from '../generated/sprites';
import { import {
Entity, PaletteManager, Rect, ServerFlags, PaletteRenderable, ColorShadow, EntityDescriptor, EntityOptions, Entity, PaletteManager, Rect, ServerFlags, PaletteRenderable, ColorShadow, EntityDescriptor, EntityOptions,
CreateEntityMethod, CreateEntity, EntityFlags, MixinEntity, EntityWorldState, defaultWorldState, ColorExtra, InteractAction CreateEntityMethod, CreateEntity, EntityFlags, MixinEntity, EntityWorldState, defaultWorldState, ColorExtra, InteractAction,
AnimatedRenderable1,
AnimatedRenderable
} from './interfaces'; } from './interfaces';
import { tileWidth, tileHeight, ENTITY_TYPE_LIMIT, WATER_FPS, PONY_TYPE, WATER_HEIGHT } from './constants'; import { tileWidth, tileHeight, ENTITY_TYPE_LIMIT, WATER_FPS, PONY_TYPE, WATER_HEIGHT } from './constants';
import { CLOUD_SHADOW_COLOR, WHITE } from './colors'; import { CLOUD_SHADOW_COLOR, WHITE } from './colors';
import { import {
mixDrawSpider, setPaletteManager, AnimatedRenderable, mixDrawSpider, setPaletteManager, collider, taperColliderSW, taperColliderNE, taperColliderSE,
AnimatedRenderable1, collider, taperColliderSW, taperColliderNE, taperColliderSE,
taperColliderNW, skewColliderNE, ponyColliders, ponyCollidersBounds, mixTrigger, mixDraw, mixInteract, taperColliderNW, skewColliderNE, ponyColliders, ponyCollidersBounds, mixTrigger, mixDraw, mixInteract,
mixPickable, mixMinimap, mixColliderRect, mixColliderRounded, mixLight, mixLightSprite, mixColliders, mixPickable, mixMinimap, mixColliderRect, mixColliderRounded, mixLight, mixLightSprite, mixColliders,
mixDrawShadow, mixAnimation, mixBobbing, mixDrawWall, mixDrawRain, mixDrawSeasonal, mixDrawWindow, mixDrawShadow, mixAnimation, mixBobbing, mixDrawWall, mixDrawRain, mixDrawSeasonal, mixDrawWindow,
+44 -36
View File
@@ -1,7 +1,7 @@
import { Texture2D } from '../graphics/webgl/texture2d'; import { Texture2D } from '../graphics/webgl/texture2d';
import { WHITE, SHADOW_COLOR } from './colors'; import { WHITE, SHADOW_COLOR } from './colors';
import { AnimationPlayer } from './animationPlayer';
import { Animator } from './animator'; import { Animator } from './animator';
import { Holiday, MapFlags, MapType, Season, Weather } from './commonInterfaces';
export type Log = (...args: any[]) => void; export type Log = (...args: any[]) => void;
export type Apply = (func: () => void) => void; export type Apply = (func: () => void) => void;
@@ -12,41 +12,6 @@ export interface Dict<T> {
[key: string]: T; [key: string]: T;
} }
export const enum Season {
Summer = 1,
Autumn = 2,
Winter = 4,
Spring = 8,
}
export const enum Holiday {
None,
Christmas,
Halloween,
StPatricks,
Easter,
}
export const enum Weather {
None,
Rain,
}
export const enum MapType {
None,
Island,
House,
Cave,
}
export const enum MapFlags {
None = 0,
EditableWalls = 1,
EditableEntities = 2,
EditableTiles = 4,
EdibleGrass = 8,
}
export const enum NotificationFlags { export const enum NotificationFlags {
None = 0, None = 0,
Ok = 1, Ok = 1,
@@ -1872,3 +1837,46 @@ if (typeof window !== 'undefined') {
} }
export type PrimitiveValues = string | number | symbol | boolean; export type PrimitiveValues = string | number | symbol | boolean;
export interface Renderable {
color?: Sprite;
shadow?: Sprite;
}
export interface AnimatedRenderable {
frames: Sprite[];
shadow?: Sprite;
palette: Uint32Array;
}
export interface AnimatedRenderable1 {
frames: (Sprite | undefined)[];
}
export const enum AnimationPhase {
Starting,
Playing,
Ending,
}
export interface SpriteAnimation {
loop: boolean;
start: number;
middle: number;
end: number;
fps: number;
palette: Uint32Array;
frames: Sprite[];
flipFrames?: Sprite[];
}
export interface AnimationPlayer {
nextAnimation: SpriteAnimation | undefined;
currentAnimation: SpriteAnimation | undefined;
time: number;
frame: number;
phase: AnimationPhase;
dirty: boolean;
palette: Palette;
}
+2 -16
View File
@@ -3,7 +3,7 @@ import * as sprites from '../generated/sprites';
import { import {
EntityPart, Sprite, Rect, SpriteBatch, PaletteManager, Palette, PaletteRenderable, PaletteSpriteBatch, EntityPart, Sprite, Rect, SpriteBatch, PaletteManager, Palette, PaletteRenderable, PaletteSpriteBatch,
DrawOptions, getAnimationFromEntityState, EntityState, SignEntityOptions, EntityFlags, Collider, MixinEntity, DrawOptions, getAnimationFromEntityState, EntityState, SignEntityOptions, EntityFlags, Collider, MixinEntity,
Season, AnimatedRenderable1, Renderable, AnimatedRenderable,
} from './interfaces'; } from './interfaces';
import { at, att, hasFlag, invalidEnum } from './utils'; import { at, att, hasFlag, invalidEnum } from './utils';
import { WHITE, BLACK, RED } from './colors'; import { WHITE, BLACK, RED } from './colors';
@@ -12,21 +12,7 @@ import { rect, addRects, addRect } from './rect';
import { SECOND, LIGHT_VOLUME_SCALE } from './constants'; import { SECOND, LIGHT_VOLUME_SCALE } from './constants';
import { mockPaletteManager } from './ponyInfo'; import { mockPaletteManager } from './ponyInfo';
import { releasePalette } from '../graphics/paletteManager'; import { releasePalette } from '../graphics/paletteManager';
import { Season } from './commonInterfaces';
interface Renderable {
color?: Sprite;
shadow?: Sprite;
}
export interface AnimatedRenderable {
frames: Sprite[];
shadow?: Sprite;
palette: Uint32Array;
}
export interface AnimatedRenderable1 {
frames: (Sprite | undefined)[];
}
const predefinedSteps = [ const predefinedSteps = [
[], [],
+1 -10
View File
@@ -6,7 +6,7 @@ import {
} from './interfaces'; } from './interfaces';
import { toInt, array, includes, att } from './utils'; import { toInt, array, includes, att } from './utils';
import { CM_SIZE } from './constants'; import { CM_SIZE } from './constants';
import { parseColorFast, getR, getAlpha, colorFromRGBA, getG, getB, colorToHexRGB } from './color'; import { parseColorFast, colorToHexRGB, darkenForOutline } from './color';
import { BLACK, fillToOutline, fillToOutlineColor, WHITE, TRANSPARENT, fillToOutlineWithDarken } from './colors'; import { BLACK, fillToOutline, fillToOutlineColor, WHITE, TRANSPARENT, fillToOutlineWithDarken } from './colors';
import { import {
mergedManes, mergedBackManes, mergedFacialHair, mergedEarAccessories, mergedChestAccessories, mergedManes, mergedBackManes, mergedFacialHair, mergedEarAccessories, mergedChestAccessories,
@@ -344,15 +344,6 @@ export function toColorList(colors: (string | undefined)[]): Uint32Array {
return result; return result;
} }
export function darkenForOutline(color: number) {
const mult = (159 / 255);
const r = (mult * getR(color)) | 0;
const g = (mult * getG(color)) | 0;
const b = (mult * getB(color)) | 0;
const a = getAlpha(color);
return colorFromRGBA(r, g, b, a);
}
function getColorsGeneric( function getColorsGeneric(
fillColors: Arr<string>, outlineColors: Arr<string>, defaultColor: string, length: number, darken: boolean fillColors: Arr<string>, outlineColors: Arr<string>, defaultColor: string, length: number, darken: boolean
): string[] { ): string[] {
+3 -2
View File
@@ -1,6 +1,6 @@
import { import {
PaletteManager, Season, TileSets, Region, TileType, Camera, PaletteSpriteBatch, DrawOptions, WorldMap, IMap, PaletteManager,TileSets, Region, TileType, Camera, PaletteSpriteBatch, DrawOptions, WorldMap, IMap,
Sprite, MapType, Sprite,
canWalk canWalk
} from './interfaces'; } from './interfaces';
import * as sprites from '../generated/sprites'; import * as sprites from '../generated/sprites';
@@ -13,6 +13,7 @@ import { releasePalette } from '../graphics/paletteManager';
import { drawPixelText } from '../graphics/graphicsUtils'; import { drawPixelText } from '../graphics/graphicsUtils';
import { toScreenX, toScreenY, toWorldZ } from './positionUtils'; import { toScreenX, toScreenY, toWorldZ } from './positionUtils';
import { setColliderDirty } from './collision'; import { setColliderDirty } from './collision';
import { MapType, Season } from './commonInterfaces';
const TILE_COUNTS = [[0, 4], [2, 3], [4, 3], [6, 3], [8, 3], [13, 3], [14, 3], [47, 4]]; const TILE_COUNTS = [[0, 4], [2, 3], [4, 3], [6, 3], [8, 3], [13, 3], [14, 3], [47, 4]];
export const TILE_COUNT_MAP: number[] = []; export const TILE_COUNT_MAP: number[] = [];
+2 -1
View File
@@ -1,7 +1,8 @@
import { lerpColors, withAlphaFloat } from './color'; import { lerpColors, withAlphaFloat } from './color';
import { WHITE, SHADOW_COLOR, BLACK } from './colors'; import { WHITE, SHADOW_COLOR, BLACK } from './colors';
import { Season } from './commonInterfaces';
import { MINUTE } from './constants'; import { MINUTE } from './constants';
import { Season } from './interfaces';
const DAY_START = 4.75; // 04:45 const DAY_START = 4.75; // 04:45
const DAY_END = 20.25; // 20:15 const DAY_END = 20.25; // 20:15
+2 -1
View File
@@ -1,8 +1,9 @@
import { HttpErrorResponse } from '@angular/common/http'; import { HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Point, Rect, Entity, Dict, Holiday, Season, PrimitiveValues } from './interfaces'; import { Point, Rect, Entity, Dict, PrimitiveValues } from './interfaces';
import { tileWidth, tileHeight, SECOND, MINUTE, HOUR, DAY } from './constants'; import { tileWidth, tileHeight, SECOND, MINUTE, HOUR, DAY } from './constants';
import { ACCESS_ERROR, NOT_FOUND_ERROR, OFFLINE_ERROR, PROTECTION_ERROR } from './errors'; import { ACCESS_ERROR, NOT_FOUND_ERROR, OFFLINE_ERROR, PROTECTION_ERROR } from './errors';
import { Season, Holiday } from './commonInterfaces';
// enum // enum
+1 -1
View File
@@ -1,8 +1,8 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Howl } from 'howler'; import { Howl } from 'howler';
import { random, sample } from 'lodash'; import { random, sample } from 'lodash';
import { Season, Holiday, MapType } from '../../common/interfaces';
import { getUrl } from '../../client/rev'; import { getUrl } from '../../client/rev';
import { Holiday, MapType, Season } from '../../common/commonInterfaces';
interface Track { interface Track {
name: string; name: string;
@@ -5,7 +5,7 @@ import { tileHeight, tileWidth, REGION_SIZE } from '../../../common/constants';
import { faHome } from '../../../client/icons'; import { faHome } from '../../../client/icons';
import { updateMap, createWorldMap, setRegion } from '../../../client/worldMap'; import { updateMap, createWorldMap, setRegion } from '../../../client/worldMap';
import { import {
Season, DrawOptions, defaultDrawOptions, EntityFlags, Entity, WorldMap, MapType, MapFlags DrawOptions, defaultDrawOptions, EntityFlags, Entity, WorldMap,
} from '../../../common/interfaces'; } from '../../../common/interfaces';
import { drawCanvas } from '../../../graphics/contextSpriteBatch'; import { drawCanvas } from '../../../graphics/contextSpriteBatch';
import { paletteSpriteSheet } from '../../../generated/sprites'; import { paletteSpriteSheet } from '../../../generated/sprites';
@@ -25,6 +25,7 @@ import { StorageService } from '../../services/storageService';
import { getTileColor } from '../../../common/colors'; import { getTileColor } from '../../../common/colors';
import { colorToCSS } from '../../../common/color'; import { colorToCSS } from '../../../common/color';
import { loadAndInitSpriteSheets } from '../../../client/loadSprites'; import { loadAndInitSpriteSheets } from '../../../client/loadSprites';
import { MapFlags, MapType, Season } from '../../../common/commonInterfaces';
export interface ToolsMapOtherInfo { export interface ToolsMapOtherInfo {
season: Season; season: Season;
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -1,6 +1,6 @@
import { range, compact, escapeRegExp } from 'lodash'; import { range, compact, escapeRegExp } from 'lodash';
import { import {
MessageType, ChatType, Expression, Eye, Muzzle, Action, Weather, toAnnouncementMessageType, MessageType, ChatType, Expression, Eye, Muzzle, Action, toAnnouncementMessageType,
} from '../common/interfaces'; } from '../common/interfaces';
import { hasRole } from '../common/accountUtils'; import { hasRole } from '../common/accountUtils';
import { butterfly, bat, firefly, cloud, getEntityType, getEntityTypeName } from '../common/entities'; import { butterfly, bat, firefly, cloud, getEntityType, getEntityTypeName } from '../common/entities';
@@ -34,6 +34,7 @@ import { writeFileAsync } from 'fs';
import { Account } from './db'; import { Account } from './db';
import { defaultHouseSave, removeToolbox, restoreToolbox } from './maps/houseMap'; import { defaultHouseSave, removeToolbox, restoreToolbox } from './maps/houseMap';
import { getRegionGlobal } from '../common/region'; import { getRegionGlobal } from '../common/region';
import { Weather } from '../common/commonInterfaces';
export interface CommandContext { export interface CommandContext {
world: World; world: World;
+2 -1
View File
@@ -4,13 +4,14 @@ import { ServerMap, MapUsage, ServerEntity } from '../serverInterfaces';
import { World, goToMap } from '../world'; import { World, goToMap } from '../world';
import { addSpawnPointIndicators } from '../mapUtils'; import { addSpawnPointIndicators } from '../mapUtils';
import { createServerMap, deserializeMap } from '../serverMap'; import { createServerMap, deserializeMap } from '../serverMap';
import { TileType, MapType } from '../../common/interfaces'; import { TileType } from '../../common/interfaces';
import { rect } from '../../common/rect'; import { rect } from '../../common/rect';
import { TorchController, FlyingCritterController } from '../controllers'; import { TorchController, FlyingCritterController } from '../controllers';
import * as entities from '../../common/entities'; import * as entities from '../../common/entities';
import { WallController } from '../controllers/wallController'; import { WallController } from '../controllers/wallController';
import { createBoxOfLanterns, give } from '../controllerUtils'; import { createBoxOfLanterns, give } from '../controllerUtils';
import { holdItem } from '../playerUtils'; import { holdItem } from '../playerUtils';
import { MapType } from '../../common/commonInterfaces';
const mapData = JSON.parse(fs.readFileSync(pathTo('src', 'maps', 'cave.json'), 'utf8')); const mapData = JSON.parse(fs.readFileSync(pathTo('src', 'maps', 'cave.json'), 'utf8'));
+2 -1
View File
@@ -1,12 +1,13 @@
import * as fs from 'fs'; import * as fs from 'fs';
import * as entities from '../../common/entities'; import * as entities from '../../common/entities';
import { rect } from '../../common/rect'; import { rect } from '../../common/rect';
import { TileType, MapType } from '../../common/interfaces'; import { TileType } from '../../common/interfaces';
import { createServerMap, deserializeMap } from '../serverMap'; import { createServerMap, deserializeMap } from '../serverMap';
import { World, goToMap } from '../world'; import { World, goToMap } from '../world';
import { createSign } from '../controllerUtils'; import { createSign } from '../controllerUtils';
import { ServerEntity } from '../serverInterfaces'; import { ServerEntity } from '../serverInterfaces';
import { pathTo } from '../paths'; import { pathTo } from '../paths';
import { MapType } from '../../common/commonInterfaces';
// load tile data // load tile data
// To customize the map use in-game editor tools to change tiles, then use `/savemap custom` command, // To customize the map use in-game editor tools to change tiles, then use `/savemap custom` command,
+2 -1
View File
@@ -3,12 +3,13 @@ import { rect } from '../../common/rect';
import { ServerMap, MapUsage, ServerEntity } from '../serverInterfaces'; import { ServerMap, MapUsage, ServerEntity } from '../serverInterfaces';
import { World, goToMap } from '../world'; import { World, goToMap } from '../world';
import { addSpawnPointIndicators } from '../mapUtils'; import { addSpawnPointIndicators } from '../mapUtils';
import { TileType, MapType, MapFlags, EntityState } from '../../common/interfaces'; import { TileType, EntityState } from '../../common/interfaces';
import { createServerMap, setTile, MapData, saveMap } from '../serverMap'; import { createServerMap, setTile, MapData, saveMap } from '../serverMap';
import { WallController } from '../controllers'; import { WallController } from '../controllers';
import { resetRegionUpdates } from '../serverRegion'; import { resetRegionUpdates } from '../serverRegion';
import { tileHeight, HOUSE_ENTITY_LIMIT } from '../../common/constants'; import { tileHeight, HOUSE_ENTITY_LIMIT } from '../../common/constants';
import { getTile } from '../../common/tileUtils'; import { getTile } from '../../common/tileUtils';
import { MapFlags, MapType } from '../../common/commonInterfaces';
export let defaultHouseSave: MapData | undefined = undefined; export let defaultHouseSave: MapData | undefined = undefined;
+2 -1
View File
@@ -8,7 +8,7 @@ import {
addSpawnPointIndicators, generateTileIndicesAndColliders, removePonies, worldForTemplates, createBunny addSpawnPointIndicators, generateTileIndicesAndColliders, removePonies, worldForTemplates, createBunny
} from '../mapUtils'; } from '../mapUtils';
import { serverMapInstanceFromTemplate, createServerMap, copyMapTiles, deserializeMap } from '../serverMap'; import { serverMapInstanceFromTemplate, createServerMap, copyMapTiles, deserializeMap } from '../serverMap';
import { TileType, MapType, Season } from '../../common/interfaces'; import { TileType } from '../../common/interfaces';
import { rect } from '../../common/rect'; import { rect } from '../../common/rect';
import { createAddLight, createSignWithText, createWoodenFenceMaker, createBoxOfLanterns } from '../controllerUtils'; import { createAddLight, createSignWithText, createWoodenFenceMaker, createBoxOfLanterns } from '../controllerUtils';
import { setEntityName, updateEntityOptions } from '../entityUtils'; import { setEntityName, updateEntityOptions } from '../entityUtils';
@@ -17,6 +17,7 @@ import { tileWidth, tileHeight } from '../../common/constants';
import { TorchController, UpdateController } from '../controllers'; import { TorchController, UpdateController } from '../controllers';
import { resetRegionUpdates } from '../serverRegion'; import { resetRegionUpdates } from '../serverRegion';
import { point } from '../../common/utils'; import { point } from '../../common/utils';
import { MapType, Season } from '../../common/commonInterfaces';
const islandMapData = JSON.parse(fs.readFileSync(pathTo('src', 'maps', 'island.json'), 'utf8')); const islandMapData = JSON.parse(fs.readFileSync(pathTo('src', 'maps', 'island.json'), 'utf8'));
+2 -1
View File
@@ -3,7 +3,7 @@ import { sample, random } from 'lodash';
import { pathTo } from '../paths'; import { pathTo } from '../paths';
import { World, goToMap } from '../world'; import { World, goToMap } from '../world';
import { createServerMap, deserializeMap, snapshotTiles, setTile, lockTile, lockTiles } from '../serverMap'; import { createServerMap, deserializeMap, snapshotTiles, setTile, lockTile, lockTiles } from '../serverMap';
import { TileType, Season, MapType, Holiday, MessageType, ServerFlags, MapFlags } from '../../common/interfaces'; import { TileType, MessageType, ServerFlags } from '../../common/interfaces';
import { rect } from '../../common/rect'; import { rect } from '../../common/rect';
import * as entities from '../../common/entities'; import * as entities from '../../common/entities';
import { import {
@@ -27,6 +27,7 @@ import { toWorldX } from '../../common/positionUtils';
import { deserializeTiles } from '../../common/compress'; import { deserializeTiles } from '../../common/compress';
import * as ctrl from '../controllers'; import * as ctrl from '../controllers';
import { isNightTime, isDayTime } from '../../common/timeUtils'; import { isNightTime, isDayTime } from '../../common/timeUtils';
import { Holiday, MapFlags, MapType, Season } from '../../common/commonInterfaces';
const mainMapData = JSON.parse(fs.readFileSync(pathTo('src', 'maps', 'main.json'), 'utf8')); const mainMapData = JSON.parse(fs.readFileSync(pathTo('src', 'maps', 'main.json'), 'utf8'));
const mainMapTiles = deserializeTiles(mainMapData.tiles); const mainMapTiles = deserializeTiles(mainMapData.tiles);
+2 -1
View File
@@ -1,12 +1,13 @@
import * as entities from '../../common/entities'; import * as entities from '../../common/entities';
import { rect } from '../../common/rect'; import { rect } from '../../common/rect';
import { TileType, MapType } from '../../common/interfaces'; import { TileType } from '../../common/interfaces';
import { createServerMap } from '../serverMap'; import { createServerMap } from '../serverMap';
import { World, goToMap } from '../world'; import { World, goToMap } from '../world';
import { allEntities } from '../api/account'; import { allEntities } from '../api/account';
import { createSign } from '../controllerUtils'; import { createSign } from '../controllerUtils';
import { ServerEntity } from '../serverInterfaces'; import { ServerEntity } from '../serverInterfaces';
import { setEntityName } from '../entityUtils'; import { setEntityName } from '../entityUtils';
import { MapType } from '../../common/commonInterfaces';
export function createPaletteMap(world: World) { export function createPaletteMap(world: World) {
const map = createServerMap('palette', MapType.None, 10, 10, TileType.Grass); const map = createServerMap('palette', MapType.None, 10, 10, TileType.Grass);
+2 -1
View File
@@ -2,7 +2,7 @@ import { Socket, Method, SocketServer, Bin, getMethods } from 'ag-sockets';
import { import {
PlayerAction, ModAction, ChatType, PonyData, IServerActions, TileType, Action, EditorAction, Entity, PlayerAction, ModAction, ChatType, PonyData, IServerActions, TileType, Action, EditorAction, Entity,
EntityOrPonyOptions, LeaveReason, SupporterInvite, InfoFlags, AccountSettings, FriendStatusFlags, EntityOrPonyOptions, LeaveReason, SupporterInvite, InfoFlags, AccountSettings, FriendStatusFlags,
SelectFlags, UpdateFlags, isValidModTile, isValidTile, MapFlags, EntityState, houseTiles SelectFlags, UpdateFlags, isValidModTile, isValidTile, EntityState, houseTiles
} from '../common/interfaces'; } from '../common/interfaces';
import { CharacterState, ServerConfig } from '../common/adminInterfaces'; import { CharacterState, ServerConfig } from '../common/adminInterfaces';
import { PARTY_LIMIT, OFFLINE_PONY, TILE_CHANGE_RANGE, MIN_HIDE_TIME, MAX_HIDE_TIME, PONY_TYPE } from '../common/constants'; import { PARTY_LIMIT, OFFLINE_PONY, TILE_CHANGE_RANGE, MIN_HIDE_TIME, MAX_HIDE_TIME, PONY_TYPE } from '../common/constants';
@@ -37,6 +37,7 @@ import { isOutsideMap } from '../common/collision';
import { createAnEntity } from '../common/entities'; import { createAnEntity } from '../common/entities';
import { mockPaletteManager } from '../common/ponyInfo'; import { mockPaletteManager } from '../common/ponyInfo';
import { getTile } from '../common/tileUtils'; import { getTile } from '../common/tileUtils';
import { MapFlags } from '../common/commonInterfaces';
interface AddedEntity { interface AddedEntity {
name: string; name: string;
+2 -1
View File
@@ -1,11 +1,12 @@
import { ClientExtensions, BinaryWriter } from 'ag-sockets'; import { ClientExtensions, BinaryWriter } from 'ag-sockets';
import { import {
Entity, ServerFlags, AccountSettings, NotificationFlags, Expression, Camera, SayData, Region, TileUpdate, Entity, ServerFlags, AccountSettings, NotificationFlags, Expression, Camera, SayData, Region, TileUpdate,
Rect, IMap, MapType, TileType, MapState, UpdateFlags, Action, EntityOrPonyOptions, EntityPlayerState, MapFlags Rect, IMap, TileType, MapState, UpdateFlags, Action, EntityOrPonyOptions, EntityPlayerState,
} from '../common/interfaces'; } from '../common/interfaces';
import { IAccount, ICharacter, UpdateAccount } from './db'; import { IAccount, ICharacter, UpdateAccount } from './db';
import { AccountUpdate, CharacterState, GameServerSettings, Suspicious } from '../common/adminInterfaces'; import { AccountUpdate, CharacterState, GameServerSettings, Suspicious } from '../common/adminInterfaces';
import { ClientActionsTemplate } from '../common/clientActionsTemplte'; import { ClientActionsTemplate } from '../common/clientActionsTemplte';
import { MapFlags, MapType } from '../common/commonInterfaces';
export interface EntityUpdate { export interface EntityUpdate {
entity: Entity; entity: Entity;
+2 -1
View File
@@ -1,7 +1,7 @@
import { writeFileAsync, readFileAsync, writeFileSync } from 'fs'; import { writeFileAsync, readFileAsync, writeFileSync } from 'fs';
import { fromByteArray } from 'base64-js'; import { fromByteArray } from 'base64-js';
import { import {
TileType, MapInfo, MapState, defaultMapState, Rect, MapType, ServerFlags, EntityFlags, MapFlags, EntityState TileType, MapInfo, MapState, defaultMapState, Rect, ServerFlags, EntityFlags, EntityState
} from '../common/interfaces'; } from '../common/interfaces';
import { distanceSquaredXY, containsPoint, hasFlag } from '../common/utils'; import { distanceSquaredXY, containsPoint, hasFlag } from '../common/utils';
import { POSITION_MAX } from '../common/movementUtils'; import { POSITION_MAX } from '../common/movementUtils';
@@ -20,6 +20,7 @@ import { setEntityName } from './entityUtils';
import { WallController } from './controllers/wallController'; import { WallController } from './controllers/wallController';
import { getTile } from '../common/tileUtils'; import { getTile } from '../common/tileUtils';
import { getRegion, getRegionGlobal } from '../common/region'; import { getRegion, getRegionGlobal } from '../common/region';
import { MapFlags, MapType } from '../common/commonInterfaces';
export interface EntityData { export interface EntityData {
type: string; type: string;
+2 -1
View File
@@ -1,7 +1,7 @@
import { getWriterBuffer } from 'ag-sockets'; import { getWriterBuffer } from 'ag-sockets';
import { remove, compact } from 'lodash'; import { remove, compact } from 'lodash';
import { import {
TileType, WorldState, Season, Holiday, WorldStateFlags, LeaveReason, NotificationFlags, UpdateFlags, Action, counterNow, TileType, WorldState, WorldStateFlags, LeaveReason, NotificationFlags, UpdateFlags, Action, counterNow,
} from '../common/interfaces'; } from '../common/interfaces';
import { removeItem, distance, clamp, randomPoint, includes, fromNow } from '../common/utils'; import { removeItem, distance, clamp, randomPoint, includes, fromNow } from '../common/utils';
import { HOUR_LENGTH, DAY_LENGTH } from '../common/timeUtils'; import { HOUR_LENGTH, DAY_LENGTH } from '../common/timeUtils';
@@ -44,6 +44,7 @@ import { createIslandMap } from './maps/islandMap';
import { createHouseMap } from './maps/houseMap'; import { createHouseMap } from './maps/houseMap';
import { updateMainMapSeason } from './maps/mainMap'; import { updateMainMapSeason } from './maps/mainMap';
import { updateWorldPerfStats } from './worldPerfStats'; import { updateWorldPerfStats } from './worldPerfStats';
import { Holiday, Season } from '../common/commonInterfaces';
interface MapSwitch { interface MapSwitch {
map: ServerMap; map: ServerMap;
+2 -1
View File
@@ -5,7 +5,7 @@ import { Subject } from 'rxjs';
import { expect } from 'chai'; import { expect } from 'chai';
import { stub, assert, SinonStub } from 'sinon'; import { stub, assert, SinonStub } from 'sinon';
import { import {
MessageType, Action, PartyFlags, NotificationFlags, LeaveReason, TileType, Weather, InfoFlags, Pony MessageType, Action, PartyFlags, NotificationFlags, LeaveReason, TileType, InfoFlags, Pony
} from '../../common/interfaces'; } from '../../common/interfaces';
import * as handlers from '../../client/handlers'; import * as handlers from '../../client/handlers';
import { pony } from '../../common/entities'; import { pony } from '../../common/entities';
@@ -24,6 +24,7 @@ import { addEntity, setRegion, createWorldMap } from '../../client/worldMap';
import { createServerRegion } from '../../server/serverRegion'; import { createServerRegion } from '../../server/serverRegion';
import { ServerRegion } from '../../server/serverInterfaces'; import { ServerRegion } from '../../server/serverInterfaces';
import { getTile } from '../../common/tileUtils'; import { getTile } from '../../common/tileUtils';
import { Weather } from '../../common/commonInterfaces';
describe('ClientActions', () => { describe('ClientActions', () => {
let zone: NgZone; let zone: NgZone;
+1 -1
View File
@@ -4,7 +4,7 @@ import {
formatHourMinutes, getLightColor, HOUR_LENGTH, isDay, isNight, LightData, createLightData formatHourMinutes, getLightColor, HOUR_LENGTH, isDay, isNight, LightData, createLightData
} from '../../common/timeUtils'; } from '../../common/timeUtils';
import { WHITE } from '../../common/colors'; import { WHITE } from '../../common/colors';
import { Season } from '../../common/interfaces'; import { Season } from '../../common/commonInterfaces';
const LIGHT_DAY = WHITE; const LIGHT_DAY = WHITE;
const LIGHT_NIGHT = 0x2b3374ff; const LIGHT_NIGHT = 0x2b3374ff;