A Typescript server emulator for Box Critters, a defunct virtual world.
1export type CritterId =
2 | "hamster"
3 | "snail"
4 | "lizard"
5 | "beaver"
6 | "raccoon"
7 | "penguin"
8 | "huggable";
9
10export type Trigger = {
11 hex: string;
12 world?: { joinRoom: string };
13 room?: { hide: Array<string> };
14 server?: {
15 grantItem?: string | Array<string>;
16 hasItems?: Array<string>;
17 joinGame?: string;
18 addEgg?: string;
19 };
20};
21
22export type Room = {
23 roomId: string;
24 name: string;
25 width: number;
26 height: number;
27 startX: number;
28 startY: number;
29 startR: number;
30 media: {
31 background: string;
32 foreground?: string;
33 treasure?: string;
34 navMesh: string;
35 music?: string;
36 video?: string;
37 };
38 layout: string;
39 triggers: Array<Trigger>;
40 spriteSheet: string;
41 extra: null;
42 partyExclusive?: Array<string>;
43};
44
45export type LocalPlayer = {
46 playerId: string;
47 nickname: string;
48 critterId: CritterId;
49 ignore: Array<string>;
50 friends: Array<string>;
51 inventory: Array<string>;
52 gear: Array<string>;
53 /** Eggs is the term used to describe any object used in a scavenger hunt. Any prop name found in that list will be hidden and replaced with it's "_found" suffix prop counterpart */
54 eggs: Array<string>;
55 coins: number;
56 isMember: boolean | false;
57 isGuest: boolean | false;
58 isTeam: boolean | false;
59 x: number | 440;
60 y: number | 210;
61 rotation: number | 180;
62 mutes: Array<unknown>;
63
64 _partyId: string;
65 _mods: Array<string>;
66
67 // deno-lint-ignore no-explicit-any
68 [key: string]: any;
69};
70
71export type PlayerCrumb = {
72 /** Player ID */
73 i: string;
74 /** Player Nickname */
75 n: string;
76 /** Critter (Hamster, Beaver, Lizard, Snail, etc) */
77 c: CritterId;
78 x: number;
79 y: number;
80 r: number;
81 /** Gear (equipped items) */
82 g: Array<string>;
83
84 /** Message */
85 m: string;
86 /** Emote */
87 e: string;
88
89 _roomId: string;
90};
91
92export type ShopData = {
93 lastItem: { itemId: string; cost: number };
94 freeItem: { itemId: string; cost: number };
95 nextItem: { itemId: string; cost: number };
96 collection: Array<{ itemId: string; cost: number }>;
97};
98
99export type PartySchedule = {
100 [key: string]: {
101 start: string | null;
102 end: string | null;
103 };
104};
105
106export type SocketHandlerContext = {
107 localPlayer: null | LocalPlayer;
108 localCrumb: null | PlayerCrumb;
109};