SOURCE / PINNED RELEASE
Made of little things.
Browser Side Quest
- Release
- b9d42f5768e4…
- Author-recorded commit
- c267690145fa…
- License
- LICENSE
- Author’s source reference
- nostr://npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr/wss%3A%2F%2Fgit.shakespeare.diy%2F/browser-side-quest
Archive hash verified: 6d4b90b8a5f328f7…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
// Port of BrowserQuest server/js/properties.js (MPL-2.0). Stats and drop tables unchanged.
import { getArmorRank, getKindAsString, getWeaponRank, isMob } from './gametypes.js';
export interface MobProperties {
/** Cumulative-percentage drop table, iterated in declaration order. */
drops: Record<string, number>;
hp: number;
armor: number;
weapon: number;
}
export const Properties: Record<string, MobProperties> = {
rat: { drops: { flask: 40, burger: 10, firepotion: 5 }, hp: 25, armor: 1, weapon: 1 },
skeleton: {
drops: { flask: 40, mailarmor: 10, axe: 20, firepotion: 5 },
hp: 110,
armor: 2,
weapon: 2,
},
goblin: {
drops: { flask: 50, leatherarmor: 20, axe: 10, firepotion: 5 },
hp: 90,
armor: 2,
weapon: 1,
},
ogre: {
drops: { burger: 10, flask: 50, platearmor: 20, morningstar: 20, firepotion: 5 },
hp: 200,
armor: 3,
weapon: 2,
},
spectre: {
drops: { flask: 30, redarmor: 40, redsword: 30, firepotion: 5 },
hp: 250,
armor: 2,
weapon: 4,
},
deathknight: { drops: { burger: 95, firepotion: 5 }, hp: 250, armor: 3, weapon: 3 },
crab: {
drops: { flask: 50, axe: 20, leatherarmor: 10, firepotion: 5 },
hp: 60,
armor: 2,
weapon: 1,
},
snake: {
drops: { flask: 50, mailarmor: 10, morningstar: 10, firepotion: 5 },
hp: 150,
armor: 3,
weapon: 2,
},
skeleton2: {
drops: { flask: 60, platearmor: 15, bluesword: 15, firepotion: 5 },
hp: 200,
armor: 3,
weapon: 3,
},
eye: {
drops: { flask: 50, redarmor: 20, redsword: 10, firepotion: 5 },
hp: 200,
armor: 3,
weapon: 3,
},
bat: { drops: { flask: 50, axe: 10, firepotion: 5 }, hp: 80, armor: 2, weapon: 1 },
wizard: { drops: { flask: 50, platearmor: 20, firepotion: 5 }, hp: 100, armor: 2, weapon: 6 },
boss: { drops: { goldensword: 100 }, hp: 700, armor: 6, weapon: 7 },
};
function mobProps(kind: number): MobProperties {
const props = Properties[getKindAsString(kind) ?? ''];
if (!props) throw new Error(`No properties for kind ${kind}`);
return props;
}
export function getArmorLevel(kind: number): number {
return isMob(kind) ? mobProps(kind).armor : getArmorRank(kind) + 1;
}
export function getWeaponLevel(kind: number): number {
return isMob(kind) ? mobProps(kind).weapon : getWeaponRank(kind) + 1;
}
export function getHitPoints(kind: number): number {
return mobProps(kind).hp;
}
