99e041d6cf
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
export const TILE_SIZE = 48;
|
|
export const WORLD_WIDTH = 64;
|
|
export const WORLD_HEIGHT = 64;
|
|
export const TICK_RATE = 10; // server ticks per second
|
|
export const MOVE_SPEED = 0.75; // tiles per tick (NPC movement speed)
|
|
export const BROADCAST_EVERY_N_TICKS = 3; // state broadcast frequency
|
|
export const SPRITE_FRAME_WIDTH = 48;
|
|
export const SPRITE_FRAME_HEIGHT = 48;
|
|
export const SPRITE_COLS = 6;
|
|
export const SPRITE_ROWS = 4;
|
|
|
|
// NPC needs
|
|
export const HUNGER_DECAY_PER_TICK = 0.05;
|
|
export const ENERGY_DECAY_PER_TICK = 0.03;
|
|
export const HUNGER_THRESHOLD = 30;
|
|
export const ENERGY_THRESHOLD = 20;
|
|
export const NEED_RECOVERY_RATE = 0.5;
|
|
|
|
// Directions (row index in spritesheet)
|
|
export const Direction = {
|
|
DOWN: 0,
|
|
LEFT: 1,
|
|
UP: 2,
|
|
RIGHT: 3,
|
|
} as const;
|
|
export type Direction = (typeof Direction)[keyof typeof Direction];
|
|
|
|
// Accessory slot names in z-order (bottom to top rendering)
|
|
export const ACCESSORY_SLOTS = [
|
|
'bottom', 'feet', 'chest', 'arm', 'shoulder',
|
|
'waist', 'back', 'facialHair', 'haircut', 'hat',
|
|
] as const;
|
|
export type AccessorySlot = (typeof ACCESSORY_SLOTS)[number];
|
|
|
|
// Portrait-only slots (facial features for close-up portraits)
|
|
export const PORTRAIT_SLOTS = ['brows', 'eyes', 'mouths'] as const;
|
|
export type PortraitSlot = (typeof PORTRAIT_SLOTS)[number];
|
|
|
|
// Mapping from sprite accessory slot names to portrait folder names
|
|
// (some folders are pluralized in the portrait assets)
|
|
export const SPRITE_TO_PORTRAIT_FOLDER: Record<string, string> = {
|
|
arm: 'arms',
|
|
back: 'back',
|
|
bottom: 'bottom',
|
|
chest: 'chest',
|
|
facialHair: 'facialHair',
|
|
// feet: no portrait equivalent
|
|
haircut: 'haircuts',
|
|
hat: 'hats',
|
|
shoulder: 'shoulders',
|
|
waist: 'waist',
|
|
};
|
|
|
|
// Social interactions
|
|
export const AWARENESS_RADIUS = 5; // Manhattan distance in tiles
|
|
export const FACING_DURATION = 10; // ticks (1s)
|
|
export const PAUSING_DURATION = 15; // ticks (1.5s)
|
|
export const EMOTING_DURATION = 20; // ticks (2s)
|
|
export const SOCIAL_GLOBAL_COOLDOWN = 50; // ticks (5s)
|
|
export const SOCIAL_PAIR_COOLDOWN = 300; // ticks (30s)
|
|
|
|
export const PROPOSAL_EMOTING_DURATION = 30; // 3 seconds - longer for dramatic effect
|
|
|
|
// Camera mode commands
|
|
export const MAX_NPC_COUNT = 50;
|