@ticktockbent/rogue-ts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +175 -0
- package/dist/armor.d.ts +18 -0
- package/dist/armor.d.ts.map +1 -0
- package/dist/armor.js +84 -0
- package/dist/armor.js.map +1 -0
- package/dist/chase.d.ts +15 -0
- package/dist/chase.d.ts.map +1 -0
- package/dist/chase.js +152 -0
- package/dist/chase.js.map +1 -0
- package/dist/command.d.ts +12 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +761 -0
- package/dist/command.js.map +1 -0
- package/dist/curses.d.ts +102 -0
- package/dist/curses.d.ts.map +1 -0
- package/dist/curses.js +47 -0
- package/dist/curses.js.map +1 -0
- package/dist/daemon.d.ts +43 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +116 -0
- package/dist/daemon.js.map +1 -0
- package/dist/daemons.d.ts +47 -0
- package/dist/daemons.d.ts.map +1 -0
- package/dist/daemons.js +194 -0
- package/dist/daemons.js.map +1 -0
- package/dist/fight.d.ts +52 -0
- package/dist/fight.d.ts.map +1 -0
- package/dist/fight.js +508 -0
- package/dist/fight.js.map +1 -0
- package/dist/globals.d.ts +387 -0
- package/dist/globals.d.ts.map +1 -0
- package/dist/globals.js +935 -0
- package/dist/globals.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +30 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +159 -0
- package/dist/init.js.map +1 -0
- package/dist/io.d.ts +48 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +248 -0
- package/dist/io.js.map +1 -0
- package/dist/list.d.ts +37 -0
- package/dist/list.d.ts.map +1 -0
- package/dist/list.js +109 -0
- package/dist/list.js.map +1 -0
- package/dist/main.d.ts +23 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +207 -0
- package/dist/main.js.map +1 -0
- package/dist/misc.d.ts +53 -0
- package/dist/misc.d.ts.map +1 -0
- package/dist/misc.js +296 -0
- package/dist/misc.js.map +1 -0
- package/dist/monsters.d.ts +55 -0
- package/dist/monsters.d.ts.map +1 -0
- package/dist/monsters.js +211 -0
- package/dist/monsters.js.map +1 -0
- package/dist/move.d.ts +23 -0
- package/dist/move.d.ts.map +1 -0
- package/dist/move.js +270 -0
- package/dist/move.js.map +1 -0
- package/dist/new_level.d.ts +17 -0
- package/dist/new_level.d.ts.map +1 -0
- package/dist/new_level.js +173 -0
- package/dist/new_level.js.map +1 -0
- package/dist/pack.d.ts +47 -0
- package/dist/pack.d.ts.map +1 -0
- package/dist/pack.js +359 -0
- package/dist/pack.js.map +1 -0
- package/dist/passages.d.ts +23 -0
- package/dist/passages.d.ts.map +1 -0
- package/dist/passages.js +277 -0
- package/dist/passages.js.map +1 -0
- package/dist/potions.d.ts +13 -0
- package/dist/potions.d.ts.map +1 -0
- package/dist/potions.js +239 -0
- package/dist/potions.js.map +1 -0
- package/dist/rings.d.ts +13 -0
- package/dist/rings.d.ts.map +1 -0
- package/dist/rings.js +173 -0
- package/dist/rings.js.map +1 -0
- package/dist/rip.d.ts +22 -0
- package/dist/rip.d.ts.map +1 -0
- package/dist/rip.js +216 -0
- package/dist/rip.js.map +1 -0
- package/dist/rooms.d.ts +62 -0
- package/dist/rooms.d.ts.map +1 -0
- package/dist/rooms.js +432 -0
- package/dist/rooms.js.map +1 -0
- package/dist/save.d.ts +25 -0
- package/dist/save.d.ts.map +1 -0
- package/dist/save.js +565 -0
- package/dist/save.js.map +1 -0
- package/dist/scrolls.d.ts +13 -0
- package/dist/scrolls.d.ts.map +1 -0
- package/dist/scrolls.js +305 -0
- package/dist/scrolls.js.map +1 -0
- package/dist/sticks.d.ts +9 -0
- package/dist/sticks.d.ts.map +1 -0
- package/dist/sticks.js +379 -0
- package/dist/sticks.js.map +1 -0
- package/dist/things.d.ts +28 -0
- package/dist/things.d.ts.map +1 -0
- package/dist/things.js +307 -0
- package/dist/things.js.map +1 -0
- package/dist/types.d.ts +113 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +36 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +198 -0
- package/dist/util.js.map +1 -0
- package/dist/weapons.d.ts +22 -0
- package/dist/weapons.d.ts.map +1 -0
- package/dist/weapons.js +185 -0
- package/dist/weapons.js.map +1 -0
- package/package.json +31 -0
package/dist/misc.js
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Miscellaneous utility functions.
|
|
3
|
+
* Ported from misc.c
|
|
4
|
+
*/
|
|
5
|
+
import { state, NUMLINES, NUMCOLS, LAMPDIST, FLOOR, TRAP, GOLD, POTION, SCROLL, FOOD, WEAPON, ARMOR, RING, STICK, AMULET, ISDARK, ISGONE, ISBLIND, ISINVIS, ISHALU, SEEMONST, CANSEE, F_REAL, INDEX, chat, moat, e_levels, monsters as monsterTemplates, } from "./globals.js";
|
|
6
|
+
import { rnd } from "./util.js";
|
|
7
|
+
import { getBackend, step_ok } from "./io.js";
|
|
8
|
+
import { msg } from "./io.js";
|
|
9
|
+
import { dist } from "./monsters.js";
|
|
10
|
+
/**
|
|
11
|
+
* look: Examine the surroundings and update the display.
|
|
12
|
+
* C original: scans 3x3 area around hero, handles dark rooms,
|
|
13
|
+
* hallucination, wake_monster, SEEMONST, and lamp area.
|
|
14
|
+
*/
|
|
15
|
+
export async function look(wakeup) {
|
|
16
|
+
const backend = getBackend();
|
|
17
|
+
const heroPos = state.player.t_pos;
|
|
18
|
+
const playerRoom = state.player.t_room;
|
|
19
|
+
const isBlind = !!(state.player.t_flags & ISBLIND);
|
|
20
|
+
const isHallucinating = !!(state.player.t_flags & ISHALU);
|
|
21
|
+
const isDarkRoom = playerRoom !== null && !!(playerRoom.r_flags & ISDARK) &&
|
|
22
|
+
!(playerRoom.r_flags & ISGONE);
|
|
23
|
+
// Erase old lamp area in dark rooms (erase_lamp equivalent)
|
|
24
|
+
// If we moved in a dark room, erase the 3x3 area around our old position
|
|
25
|
+
if (isDarkRoom && !isBlind &&
|
|
26
|
+
(state.oldpos.y !== heroPos.y || state.oldpos.x !== heroPos.x)) {
|
|
27
|
+
for (let ody = -1; ody <= 1; ody++) {
|
|
28
|
+
for (let odx = -1; odx <= 1; odx++) {
|
|
29
|
+
const oy = state.oldpos.y + ody;
|
|
30
|
+
const ox = state.oldpos.x + odx;
|
|
31
|
+
if (oy < 0 || oy >= NUMLINES || ox < 0 || ox >= NUMCOLS)
|
|
32
|
+
continue;
|
|
33
|
+
const pp = INDEX(oy, ox);
|
|
34
|
+
if (pp.p_ch === FLOOR) {
|
|
35
|
+
// Only erase floor tiles (walls, doors stay visible)
|
|
36
|
+
backend.mvaddch(oy, ox, " ".charCodeAt(0));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (let dy = -1; dy <= 1; dy++) {
|
|
42
|
+
for (let dx = -1; dx <= 1; dx++) {
|
|
43
|
+
const y = heroPos.y + dy;
|
|
44
|
+
const x = heroPos.x + dx;
|
|
45
|
+
if (y < 0 || y >= NUMLINES || x < 0 || x >= NUMCOLS)
|
|
46
|
+
continue;
|
|
47
|
+
// Can't see diagonals through walls
|
|
48
|
+
if (dy !== 0 && dx !== 0 && !diag_ok({ y: heroPos.y, x: heroPos.x }, { y, x })) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (dy === 0 && dx === 0)
|
|
52
|
+
continue;
|
|
53
|
+
if (isBlind)
|
|
54
|
+
continue;
|
|
55
|
+
const pp = INDEX(y, x);
|
|
56
|
+
const ch = pp.p_ch;
|
|
57
|
+
const monster = moat(y, x);
|
|
58
|
+
// Handle floor visibility in dark rooms — only show within lamp distance
|
|
59
|
+
if (isDarkRoom && ch === FLOOR) {
|
|
60
|
+
if (dist(y, x, heroPos.y, heroPos.x) > LAMPDIST) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Wake up monsters when the hero steps near them
|
|
65
|
+
if (wakeup && monster !== null && monster._kind === "monster") {
|
|
66
|
+
const { wake_monster } = await import("./monsters.js");
|
|
67
|
+
await wake_monster(y, x);
|
|
68
|
+
}
|
|
69
|
+
// Determine what to show
|
|
70
|
+
let showCh = ch;
|
|
71
|
+
if (monster !== null && monster._kind === "monster") {
|
|
72
|
+
if (see_monst(monster)) {
|
|
73
|
+
showCh = isHallucinating ? pick_color() : monster.t_disguise;
|
|
74
|
+
}
|
|
75
|
+
else if (state.player.t_flags & SEEMONST) {
|
|
76
|
+
showCh = monster.t_type;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
showCh = ch;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (isHallucinating && isItemChar(ch)) {
|
|
83
|
+
showCh = pick_color();
|
|
84
|
+
}
|
|
85
|
+
// Handle traps: only show if F_REAL
|
|
86
|
+
if (ch === TRAP && !(pp.p_flags & F_REAL)) {
|
|
87
|
+
showCh = FLOOR;
|
|
88
|
+
}
|
|
89
|
+
const oldScreenChar = String.fromCharCode(backend.mvinch(y, x) & 0xff);
|
|
90
|
+
if (oldScreenChar !== showCh) {
|
|
91
|
+
backend.mvaddch(y, x, showCh.charCodeAt(0));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* pick_color: Random character for hallucination display.
|
|
98
|
+
*/
|
|
99
|
+
const halluChars = "!?])=/,:*ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
100
|
+
function pick_color() {
|
|
101
|
+
return halluChars[rnd(halluChars.length)];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* isItemChar: Check if a character represents an item on the ground.
|
|
105
|
+
*/
|
|
106
|
+
function isItemChar(ch) {
|
|
107
|
+
return ch === POTION || ch === SCROLL || ch === FOOD ||
|
|
108
|
+
ch === WEAPON || ch === ARMOR || ch === RING ||
|
|
109
|
+
ch === STICK || ch === AMULET || ch === GOLD;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* cansee: Returns true if the hero can see a certain coordinate.
|
|
113
|
+
*/
|
|
114
|
+
export function cansee(y, x) {
|
|
115
|
+
if (state.player.t_flags & ISBLIND)
|
|
116
|
+
return false;
|
|
117
|
+
const playerRoom = state.player.t_room;
|
|
118
|
+
if (playerRoom === null) {
|
|
119
|
+
// In a passage — can only see adjacent (dist < LAMPDIST)
|
|
120
|
+
return dist(y, x, state.player.t_pos.y, state.player.t_pos.x) < LAMPDIST;
|
|
121
|
+
}
|
|
122
|
+
// In a room
|
|
123
|
+
if (y >= playerRoom.r_pos.y &&
|
|
124
|
+
y < playerRoom.r_pos.y + playerRoom.r_max.y &&
|
|
125
|
+
x >= playerRoom.r_pos.x &&
|
|
126
|
+
x < playerRoom.r_pos.x + playerRoom.r_max.x) {
|
|
127
|
+
// In same room — lit room: can see everything
|
|
128
|
+
if (!(playerRoom.r_flags & ISDARK))
|
|
129
|
+
return true;
|
|
130
|
+
// Dark room — can only see within lamp distance
|
|
131
|
+
return dist(y, x, state.player.t_pos.y, state.player.t_pos.x) < LAMPDIST;
|
|
132
|
+
}
|
|
133
|
+
return dist(y, x, state.player.t_pos.y, state.player.t_pos.x) < LAMPDIST;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* see_monst: Returns true if the hero can see the monster.
|
|
137
|
+
*/
|
|
138
|
+
export function see_monst(mp) {
|
|
139
|
+
if (state.player.t_flags & ISBLIND)
|
|
140
|
+
return false;
|
|
141
|
+
if (mp.t_flags & ISINVIS) {
|
|
142
|
+
if (!(state.player.t_flags & CANSEE))
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return cansee(mp.t_pos.y, mp.t_pos.x);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* diag_ok: Returns true if it is ok to move diagonally from sp to ep.
|
|
149
|
+
*/
|
|
150
|
+
export function diag_ok(sp, ep) {
|
|
151
|
+
if (ep.x === sp.x || ep.y === sp.y)
|
|
152
|
+
return true;
|
|
153
|
+
if (!step_ok(chat(sp.y, ep.x)))
|
|
154
|
+
return false;
|
|
155
|
+
if (!step_ok(chat(ep.y, sp.x)))
|
|
156
|
+
return false;
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* find_obj: Find an object at a given position.
|
|
161
|
+
*/
|
|
162
|
+
export function find_obj(y, x) {
|
|
163
|
+
let obj = state.lvl_obj;
|
|
164
|
+
while (obj !== null) {
|
|
165
|
+
if (obj._kind === "object" && obj.o_pos.y === y && obj.o_pos.x === x) {
|
|
166
|
+
return obj;
|
|
167
|
+
}
|
|
168
|
+
obj = obj.l_next;
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* floor_at: Get the floor character at the hero's position.
|
|
174
|
+
*/
|
|
175
|
+
export function floor_at() {
|
|
176
|
+
const pp = INDEX(state.player.t_pos.y, state.player.t_pos.x);
|
|
177
|
+
if (pp.p_ch === FLOOR) {
|
|
178
|
+
const playerRoom = state.player.t_room;
|
|
179
|
+
if (playerRoom !== null && (playerRoom.r_flags & ISDARK) && !(state.player.t_flags & ISBLIND)) {
|
|
180
|
+
return " ";
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return pp.p_ch;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* check_level: Check if the player should go up a level of experience.
|
|
187
|
+
*/
|
|
188
|
+
export async function check_level() {
|
|
189
|
+
const playerStats = state.player.t_stats;
|
|
190
|
+
let i = 0;
|
|
191
|
+
while (e_levels[i] !== 0 && e_levels[i] <= playerStats.s_exp) {
|
|
192
|
+
i++;
|
|
193
|
+
}
|
|
194
|
+
i++;
|
|
195
|
+
if (i > playerStats.s_lvl) {
|
|
196
|
+
const oldLevel = playerStats.s_lvl;
|
|
197
|
+
playerStats.s_lvl = i;
|
|
198
|
+
const addedHp = roll(i - oldLevel, 10);
|
|
199
|
+
playerStats.s_maxhp += addedHp;
|
|
200
|
+
playerStats.s_hpt += addedHp;
|
|
201
|
+
await msg("Welcome to level %d", i);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* chg_str: Change the hero's strength.
|
|
206
|
+
*/
|
|
207
|
+
export function chg_str(amt) {
|
|
208
|
+
const playerStats = state.player.t_stats;
|
|
209
|
+
const maxStats = state.max_stats;
|
|
210
|
+
if (amt > 0) {
|
|
211
|
+
// Increase strength
|
|
212
|
+
playerStats.s_str = Math.min(playerStats.s_str + amt, 31);
|
|
213
|
+
if (playerStats.s_str > maxStats.s_str) {
|
|
214
|
+
maxStats.s_str = playerStats.s_str;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// Decrease strength
|
|
219
|
+
playerStats.s_str = Math.max(playerStats.s_str + amt, 3);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* get_dir: Get a direction from the user.
|
|
224
|
+
* Returns true if a valid direction was obtained.
|
|
225
|
+
*/
|
|
226
|
+
export async function get_dir() {
|
|
227
|
+
const backend = getBackend();
|
|
228
|
+
const { readchar } = await import("./io.js");
|
|
229
|
+
if (!state.terse) {
|
|
230
|
+
await msg("which direction? ");
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
await msg("direction: ");
|
|
234
|
+
}
|
|
235
|
+
const ch = await readchar();
|
|
236
|
+
switch (ch) {
|
|
237
|
+
case "h":
|
|
238
|
+
state.delta = { y: 0, x: -1 };
|
|
239
|
+
break;
|
|
240
|
+
case "j":
|
|
241
|
+
state.delta = { y: 1, x: 0 };
|
|
242
|
+
break;
|
|
243
|
+
case "k":
|
|
244
|
+
state.delta = { y: -1, x: 0 };
|
|
245
|
+
break;
|
|
246
|
+
case "l":
|
|
247
|
+
state.delta = { y: 0, x: 1 };
|
|
248
|
+
break;
|
|
249
|
+
case "y":
|
|
250
|
+
state.delta = { y: -1, x: -1 };
|
|
251
|
+
break;
|
|
252
|
+
case "u":
|
|
253
|
+
state.delta = { y: -1, x: 1 };
|
|
254
|
+
break;
|
|
255
|
+
case "b":
|
|
256
|
+
state.delta = { y: 1, x: -1 };
|
|
257
|
+
break;
|
|
258
|
+
case "n":
|
|
259
|
+
state.delta = { y: 1, x: 1 };
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
await msg("illegal direction");
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
state.dir_ch = ch;
|
|
266
|
+
if (state.player.t_flags & ISBLIND) {
|
|
267
|
+
state.delta = { y: 0, x: 0 };
|
|
268
|
+
}
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* sign: Return -1, 0, or 1.
|
|
273
|
+
*/
|
|
274
|
+
export { sign } from "./util.js";
|
|
275
|
+
/**
|
|
276
|
+
* set_mname: Get the name of a monster for messages.
|
|
277
|
+
*/
|
|
278
|
+
export function set_mname(tp) {
|
|
279
|
+
if (state.player.t_flags & ISHALU) {
|
|
280
|
+
const m = rnd(26);
|
|
281
|
+
return monsterTemplates[m].m_name;
|
|
282
|
+
}
|
|
283
|
+
if (see_monst(tp)) {
|
|
284
|
+
const monsterIndex = tp.t_type.charCodeAt(0) - "A".charCodeAt(0);
|
|
285
|
+
return "the " + monsterTemplates[monsterIndex].m_name;
|
|
286
|
+
}
|
|
287
|
+
return "it";
|
|
288
|
+
}
|
|
289
|
+
function roll(number, sides) {
|
|
290
|
+
let total = 0;
|
|
291
|
+
for (let i = 0; i < number; i++) {
|
|
292
|
+
total += rnd(sides) + 1;
|
|
293
|
+
}
|
|
294
|
+
return total;
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=misc.js.map
|
package/dist/misc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monster functions.
|
|
3
|
+
* Ported from monsters.c
|
|
4
|
+
*/
|
|
5
|
+
import type { Coord, Thing, Monster } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* randmonster: Pick a monster to show up.
|
|
8
|
+
*/
|
|
9
|
+
export declare function randmonster(wander: boolean): string;
|
|
10
|
+
/**
|
|
11
|
+
* new_monster: Pick a new monster and add it to the list.
|
|
12
|
+
*/
|
|
13
|
+
export declare function new_monster(tp: Monster, type: string, cp: Coord): void;
|
|
14
|
+
/**
|
|
15
|
+
* exp_add: Experience to add for this monster's level/hit points.
|
|
16
|
+
*/
|
|
17
|
+
export declare function exp_add(tp: Monster): number;
|
|
18
|
+
/**
|
|
19
|
+
* rnd_thing: Pick a random thing appropriate for this level.
|
|
20
|
+
*/
|
|
21
|
+
export declare function rnd_thing(): string;
|
|
22
|
+
/**
|
|
23
|
+
* give_pack: Give a pack to a monster if it deserves one.
|
|
24
|
+
* Requires new_thing() from things.ts (will be wired later to avoid circular dep).
|
|
25
|
+
*/
|
|
26
|
+
export declare let newThingFactory: (() => Thing) | null;
|
|
27
|
+
export declare function setNewThingFactory(factory: () => Thing): void;
|
|
28
|
+
export declare function give_pack(tp: Monster): void;
|
|
29
|
+
/**
|
|
30
|
+
* save_throw: See if a creature saves against something.
|
|
31
|
+
*/
|
|
32
|
+
export declare function save_throw(which: number, tp: Monster): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* save: See if the player saves against various nasty things.
|
|
35
|
+
*/
|
|
36
|
+
export declare function save(which: number): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* runto: Set a monster running toward the hero.
|
|
39
|
+
*/
|
|
40
|
+
export declare function runto(runner: Coord): void;
|
|
41
|
+
/**
|
|
42
|
+
* wake_monster: What to do when the hero steps next to a monster.
|
|
43
|
+
* Simplified for Phase 4 — full implementation in Phase 6.
|
|
44
|
+
*/
|
|
45
|
+
export declare function wake_monster(y: number, x: number): Promise<Thing | null>;
|
|
46
|
+
/**
|
|
47
|
+
* wanderer: Create a new wandering monster and aim it at the player.
|
|
48
|
+
* Requires find_floor from rooms.ts.
|
|
49
|
+
*/
|
|
50
|
+
export declare function wanderer(): void;
|
|
51
|
+
/**
|
|
52
|
+
* dist: Distance between two points (squared).
|
|
53
|
+
*/
|
|
54
|
+
export declare function dist(y1: number, x1: number, y2: number, x2: number): number;
|
|
55
|
+
//# sourceMappingURL=monsters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monsters.d.ts","sourceRoot":"","sources":["../src/monsters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAqBxD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CASnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,CA0CtE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAa3C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CASlC;AAED;;;GAGG;AACH,eAAO,IAAI,eAAe,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,IAAW,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,IAAI,CAE7D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAY3C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAG9D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAa3C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAMzC;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA0C9E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3E"}
|
package/dist/monsters.js
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monster functions.
|
|
3
|
+
* Ported from monsters.c
|
|
4
|
+
*/
|
|
5
|
+
import { state, monsters as monsterTemplates, AMULETLEVEL, ISHASTE, ISRUN, ISMEAN, ISGREED, ISCANC, ISBLIND, ISHUH, ISHELD, ISWEARING, R_STEALTH, ISLEVIT, R_AGGR, R_PROTECT, POTION, SCROLL, RING, STICK, FOOD, WEAPON, ARMOR, STAIRS, GOLD, AMULET, VS_MAGIC, HUHDURATION, AFTER, moat, setMoat, } from "./globals.js";
|
|
6
|
+
import { rnd, roll } from "./util.js";
|
|
7
|
+
import { _attach } from "./list.js";
|
|
8
|
+
import { roomin } from "./rooms.js";
|
|
9
|
+
import { getBackend } from "./io.js";
|
|
10
|
+
// Monster vorpalness order
|
|
11
|
+
const lvl_mons = "KEBSHIROZLCQANYFTWPXUMVGJD";
|
|
12
|
+
// C original: excludes I(5), C(10), N(13), F(15), X(19) from wandering
|
|
13
|
+
const wand_mons = "KEBSH\x00ROZL\x00QA\x00Y\x00TWP\x00UMVGJD";
|
|
14
|
+
/**
|
|
15
|
+
* randmonster: Pick a monster to show up.
|
|
16
|
+
*/
|
|
17
|
+
export function randmonster(wander) {
|
|
18
|
+
const mons = wander ? wand_mons : lvl_mons;
|
|
19
|
+
let d;
|
|
20
|
+
do {
|
|
21
|
+
d = state.level + (rnd(10) - 6);
|
|
22
|
+
if (d < 0)
|
|
23
|
+
d = rnd(5);
|
|
24
|
+
if (d > 25)
|
|
25
|
+
d = rnd(5) + 21;
|
|
26
|
+
} while (mons[d] === "\0");
|
|
27
|
+
return mons[d];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* new_monster: Pick a new monster and add it to the list.
|
|
31
|
+
*/
|
|
32
|
+
export function new_monster(tp, type, cp) {
|
|
33
|
+
const backend = getBackend();
|
|
34
|
+
let levAdd = state.level - AMULETLEVEL;
|
|
35
|
+
if (levAdd < 0)
|
|
36
|
+
levAdd = 0;
|
|
37
|
+
// Attach to mlist
|
|
38
|
+
const listHead = { head: state.mlist };
|
|
39
|
+
_attach(listHead, tp);
|
|
40
|
+
state.mlist = listHead.head;
|
|
41
|
+
tp.t_type = type;
|
|
42
|
+
tp.t_disguise = type;
|
|
43
|
+
tp.t_pos = { x: cp.x, y: cp.y };
|
|
44
|
+
backend.move(cp.y, cp.x);
|
|
45
|
+
tp.t_oldch = String.fromCharCode(backend.inch() & 0xff);
|
|
46
|
+
tp.t_room = roomin(cp);
|
|
47
|
+
setMoat(cp.y, cp.x, tp);
|
|
48
|
+
const monsterIndex = type.charCodeAt(0) - "A".charCodeAt(0);
|
|
49
|
+
const mp = monsterTemplates[monsterIndex];
|
|
50
|
+
tp.t_stats.s_lvl = mp.m_stats.s_lvl + levAdd;
|
|
51
|
+
tp.t_stats.s_maxhp = tp.t_stats.s_hpt = roll(tp.t_stats.s_lvl, 8);
|
|
52
|
+
tp.t_stats.s_arm = mp.m_stats.s_arm - levAdd;
|
|
53
|
+
tp.t_stats.s_dmg = mp.m_stats.s_dmg;
|
|
54
|
+
tp.t_stats.s_str = mp.m_stats.s_str;
|
|
55
|
+
tp.t_stats.s_exp = mp.m_stats.s_exp + levAdd * 10 + exp_add(tp);
|
|
56
|
+
tp.t_flags = mp.m_flags;
|
|
57
|
+
if (state.level > 29) {
|
|
58
|
+
tp.t_flags |= ISHASTE;
|
|
59
|
+
}
|
|
60
|
+
tp.t_turn = true;
|
|
61
|
+
tp.t_pack = null;
|
|
62
|
+
if (ISWEARING(R_AGGR)) {
|
|
63
|
+
runto(cp);
|
|
64
|
+
}
|
|
65
|
+
if (type === "X") {
|
|
66
|
+
tp.t_disguise = rnd_thing();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* exp_add: Experience to add for this monster's level/hit points.
|
|
71
|
+
*/
|
|
72
|
+
export function exp_add(tp) {
|
|
73
|
+
let mod;
|
|
74
|
+
if (tp.t_stats.s_lvl === 1) {
|
|
75
|
+
mod = Math.floor(tp.t_stats.s_maxhp / 8);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
mod = Math.floor(tp.t_stats.s_maxhp / 6);
|
|
79
|
+
}
|
|
80
|
+
if (tp.t_stats.s_lvl > 9) {
|
|
81
|
+
mod *= 20;
|
|
82
|
+
}
|
|
83
|
+
else if (tp.t_stats.s_lvl > 6) {
|
|
84
|
+
mod *= 4;
|
|
85
|
+
}
|
|
86
|
+
return mod;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* rnd_thing: Pick a random thing appropriate for this level.
|
|
90
|
+
*/
|
|
91
|
+
export function rnd_thing() {
|
|
92
|
+
const thingList = [POTION, SCROLL, RING, STICK, FOOD, WEAPON, ARMOR, STAIRS, GOLD, AMULET];
|
|
93
|
+
let count;
|
|
94
|
+
if (state.level >= AMULETLEVEL) {
|
|
95
|
+
count = thingList.length;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
count = thingList.length - 1;
|
|
99
|
+
}
|
|
100
|
+
return thingList[rnd(count)];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* give_pack: Give a pack to a monster if it deserves one.
|
|
104
|
+
* Requires new_thing() from things.ts (will be wired later to avoid circular dep).
|
|
105
|
+
*/
|
|
106
|
+
export let newThingFactory = null;
|
|
107
|
+
export function setNewThingFactory(factory) {
|
|
108
|
+
newThingFactory = factory;
|
|
109
|
+
}
|
|
110
|
+
export function give_pack(tp) {
|
|
111
|
+
const monsterIndex = tp.t_type.charCodeAt(0) - "A".charCodeAt(0);
|
|
112
|
+
if (state.level >= state.max_level &&
|
|
113
|
+
rnd(100) < monsterTemplates[monsterIndex].m_carry &&
|
|
114
|
+
newThingFactory !== null) {
|
|
115
|
+
const newThing = newThingFactory();
|
|
116
|
+
const listHead = { head: tp.t_pack };
|
|
117
|
+
_attach(listHead, newThing);
|
|
118
|
+
tp.t_pack = listHead.head;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* save_throw: See if a creature saves against something.
|
|
123
|
+
*/
|
|
124
|
+
export function save_throw(which, tp) {
|
|
125
|
+
const need = 14 + which - Math.floor(tp.t_stats.s_lvl / 2);
|
|
126
|
+
return roll(1, 20) >= need;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* save: See if the player saves against various nasty things.
|
|
130
|
+
*/
|
|
131
|
+
export function save(which) {
|
|
132
|
+
let adjustedWhich = which;
|
|
133
|
+
if (which === VS_MAGIC) {
|
|
134
|
+
if (state.cur_ring[0] !== null && state.cur_ring[0]._kind === "object" &&
|
|
135
|
+
state.cur_ring[0].o_which === R_PROTECT) {
|
|
136
|
+
adjustedWhich -= state.cur_ring[0].o_arm;
|
|
137
|
+
}
|
|
138
|
+
if (state.cur_ring[1] !== null && state.cur_ring[1]._kind === "object" &&
|
|
139
|
+
state.cur_ring[1].o_which === R_PROTECT) {
|
|
140
|
+
adjustedWhich -= state.cur_ring[1].o_arm;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return save_throw(adjustedWhich, state.player);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* runto: Set a monster running toward the hero.
|
|
147
|
+
*/
|
|
148
|
+
export function runto(runner) {
|
|
149
|
+
const tp = moat(runner.y, runner.x);
|
|
150
|
+
if (tp !== null && tp._kind === "monster") {
|
|
151
|
+
tp.t_flags |= ISRUN;
|
|
152
|
+
tp.t_dest = state.player.t_pos;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* wake_monster: What to do when the hero steps next to a monster.
|
|
157
|
+
* Simplified for Phase 4 — full implementation in Phase 6.
|
|
158
|
+
*/
|
|
159
|
+
export async function wake_monster(y, x) {
|
|
160
|
+
const tp = moat(y, x);
|
|
161
|
+
if (tp === null || tp._kind !== "monster")
|
|
162
|
+
return null;
|
|
163
|
+
// Mean monsters might start chasing
|
|
164
|
+
if (!(tp.t_flags & ISRUN) &&
|
|
165
|
+
rnd(3) !== 0 &&
|
|
166
|
+
(tp.t_flags & ISMEAN) &&
|
|
167
|
+
!(tp.t_flags & ISHELD) &&
|
|
168
|
+
!ISWEARING(R_STEALTH) &&
|
|
169
|
+
!(state.player.t_flags & ISLEVIT)) {
|
|
170
|
+
tp.t_dest = state.player.t_pos;
|
|
171
|
+
tp.t_flags |= ISRUN;
|
|
172
|
+
}
|
|
173
|
+
// Greedy ones guard gold
|
|
174
|
+
if ((tp.t_flags & ISGREED) && !(tp.t_flags & ISRUN)) {
|
|
175
|
+
tp.t_flags |= ISRUN;
|
|
176
|
+
const playerRoom = state.player.t_room;
|
|
177
|
+
if (playerRoom !== null && playerRoom.r_goldval > 0) {
|
|
178
|
+
tp.t_dest = playerRoom.r_gold;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
tp.t_dest = state.player.t_pos;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// C original: Medusa gaze confuses player on sight
|
|
185
|
+
if (tp.t_type === "M" && !(state.player.t_flags & ISBLIND) &&
|
|
186
|
+
!(state.player.t_flags & ISHUH) && !(tp.t_flags & ISCANC) &&
|
|
187
|
+
!save(VS_MAGIC)) {
|
|
188
|
+
state.player.t_flags |= ISHUH;
|
|
189
|
+
const { spread } = await import("./util.js");
|
|
190
|
+
const { fuse } = await import("./daemon.js");
|
|
191
|
+
const { unconfuse } = await import("./daemons.js");
|
|
192
|
+
const { msg: msgFn } = await import("./io.js");
|
|
193
|
+
fuse(unconfuse, 0, spread(HUHDURATION), AFTER);
|
|
194
|
+
await msgFn("the gaze of the medusa has confused you");
|
|
195
|
+
}
|
|
196
|
+
return tp;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* wanderer: Create a new wandering monster and aim it at the player.
|
|
200
|
+
* Requires find_floor from rooms.ts.
|
|
201
|
+
*/
|
|
202
|
+
export function wanderer() {
|
|
203
|
+
// Deferred to Phase 5/6 when the full game loop is ready
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* dist: Distance between two points (squared).
|
|
207
|
+
*/
|
|
208
|
+
export function dist(y1, x1, y2, x2) {
|
|
209
|
+
return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=monsters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monsters.js","sourceRoot":"","sources":["../src/monsters.ts"],"names":[],"mappings":"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"}
|
package/dist/move.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hero movement commands.
|
|
3
|
+
* Ported from move.c
|
|
4
|
+
*/
|
|
5
|
+
import type { Coord, Monster } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* do_run: Start the hero running.
|
|
8
|
+
*/
|
|
9
|
+
export declare function do_run(ch: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* do_move: Check to see that a move is legal. If it is, handle consequences.
|
|
12
|
+
*/
|
|
13
|
+
export declare function do_move(dy: number, dx: number): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* be_trapped: Handle trap effects.
|
|
16
|
+
* Simplified for Phase 6 milestone.
|
|
17
|
+
*/
|
|
18
|
+
export declare function be_trapped(tc: Coord): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* rndmove: Pick a random valid move for a confused creature.
|
|
21
|
+
*/
|
|
22
|
+
export declare function rndmove(who: Monster): Coord;
|
|
23
|
+
//# sourceMappingURL=move.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../src/move.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAS,MAAM,YAAY,CAAC;AAiBxD;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIvC;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHnE;AAwBD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA8D3D;AA8BD;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAuB3C"}
|