@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.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +175 -0
  3. package/dist/armor.d.ts +18 -0
  4. package/dist/armor.d.ts.map +1 -0
  5. package/dist/armor.js +84 -0
  6. package/dist/armor.js.map +1 -0
  7. package/dist/chase.d.ts +15 -0
  8. package/dist/chase.d.ts.map +1 -0
  9. package/dist/chase.js +152 -0
  10. package/dist/chase.js.map +1 -0
  11. package/dist/command.d.ts +12 -0
  12. package/dist/command.d.ts.map +1 -0
  13. package/dist/command.js +761 -0
  14. package/dist/command.js.map +1 -0
  15. package/dist/curses.d.ts +102 -0
  16. package/dist/curses.d.ts.map +1 -0
  17. package/dist/curses.js +47 -0
  18. package/dist/curses.js.map +1 -0
  19. package/dist/daemon.d.ts +43 -0
  20. package/dist/daemon.d.ts.map +1 -0
  21. package/dist/daemon.js +116 -0
  22. package/dist/daemon.js.map +1 -0
  23. package/dist/daemons.d.ts +47 -0
  24. package/dist/daemons.d.ts.map +1 -0
  25. package/dist/daemons.js +194 -0
  26. package/dist/daemons.js.map +1 -0
  27. package/dist/fight.d.ts +52 -0
  28. package/dist/fight.d.ts.map +1 -0
  29. package/dist/fight.js +508 -0
  30. package/dist/fight.js.map +1 -0
  31. package/dist/globals.d.ts +387 -0
  32. package/dist/globals.d.ts.map +1 -0
  33. package/dist/globals.js +935 -0
  34. package/dist/globals.js.map +1 -0
  35. package/dist/index.d.ts +11 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +9 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/init.d.ts +30 -0
  40. package/dist/init.d.ts.map +1 -0
  41. package/dist/init.js +159 -0
  42. package/dist/init.js.map +1 -0
  43. package/dist/io.d.ts +48 -0
  44. package/dist/io.d.ts.map +1 -0
  45. package/dist/io.js +248 -0
  46. package/dist/io.js.map +1 -0
  47. package/dist/list.d.ts +37 -0
  48. package/dist/list.d.ts.map +1 -0
  49. package/dist/list.js +109 -0
  50. package/dist/list.js.map +1 -0
  51. package/dist/main.d.ts +23 -0
  52. package/dist/main.d.ts.map +1 -0
  53. package/dist/main.js +207 -0
  54. package/dist/main.js.map +1 -0
  55. package/dist/misc.d.ts +53 -0
  56. package/dist/misc.d.ts.map +1 -0
  57. package/dist/misc.js +296 -0
  58. package/dist/misc.js.map +1 -0
  59. package/dist/monsters.d.ts +55 -0
  60. package/dist/monsters.d.ts.map +1 -0
  61. package/dist/monsters.js +211 -0
  62. package/dist/monsters.js.map +1 -0
  63. package/dist/move.d.ts +23 -0
  64. package/dist/move.d.ts.map +1 -0
  65. package/dist/move.js +270 -0
  66. package/dist/move.js.map +1 -0
  67. package/dist/new_level.d.ts +17 -0
  68. package/dist/new_level.d.ts.map +1 -0
  69. package/dist/new_level.js +173 -0
  70. package/dist/new_level.js.map +1 -0
  71. package/dist/pack.d.ts +47 -0
  72. package/dist/pack.d.ts.map +1 -0
  73. package/dist/pack.js +359 -0
  74. package/dist/pack.js.map +1 -0
  75. package/dist/passages.d.ts +23 -0
  76. package/dist/passages.d.ts.map +1 -0
  77. package/dist/passages.js +277 -0
  78. package/dist/passages.js.map +1 -0
  79. package/dist/potions.d.ts +13 -0
  80. package/dist/potions.d.ts.map +1 -0
  81. package/dist/potions.js +239 -0
  82. package/dist/potions.js.map +1 -0
  83. package/dist/rings.d.ts +13 -0
  84. package/dist/rings.d.ts.map +1 -0
  85. package/dist/rings.js +173 -0
  86. package/dist/rings.js.map +1 -0
  87. package/dist/rip.d.ts +22 -0
  88. package/dist/rip.d.ts.map +1 -0
  89. package/dist/rip.js +216 -0
  90. package/dist/rip.js.map +1 -0
  91. package/dist/rooms.d.ts +62 -0
  92. package/dist/rooms.d.ts.map +1 -0
  93. package/dist/rooms.js +432 -0
  94. package/dist/rooms.js.map +1 -0
  95. package/dist/save.d.ts +25 -0
  96. package/dist/save.d.ts.map +1 -0
  97. package/dist/save.js +565 -0
  98. package/dist/save.js.map +1 -0
  99. package/dist/scrolls.d.ts +13 -0
  100. package/dist/scrolls.d.ts.map +1 -0
  101. package/dist/scrolls.js +305 -0
  102. package/dist/scrolls.js.map +1 -0
  103. package/dist/sticks.d.ts +9 -0
  104. package/dist/sticks.d.ts.map +1 -0
  105. package/dist/sticks.js +379 -0
  106. package/dist/sticks.js.map +1 -0
  107. package/dist/things.d.ts +28 -0
  108. package/dist/things.d.ts.map +1 -0
  109. package/dist/things.js +307 -0
  110. package/dist/things.js.map +1 -0
  111. package/dist/types.d.ts +113 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +10 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/util.d.ts +36 -0
  116. package/dist/util.d.ts.map +1 -0
  117. package/dist/util.js +198 -0
  118. package/dist/util.js.map +1 -0
  119. package/dist/weapons.d.ts +22 -0
  120. package/dist/weapons.d.ts.map +1 -0
  121. package/dist/weapons.js +185 -0
  122. package/dist/weapons.js.map +1 -0
  123. package/package.json +31 -0
package/dist/move.js ADDED
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Hero movement commands.
3
+ * Ported from move.c
4
+ */
5
+ import { state, NUMCOLS, NUMLINES, FLOOR, PASSAGE, DOOR, TRAP, STAIRS, ISHUH, ISLEVIT, ISHELD, ISWEARING, R_SUSTSTR, R_SUSTARM, SLEEPTIME, BEARTIME, F_PASS, F_REAL, F_TMASK, INDEX, chat, setCh, flat, moat, winat, T_DOOR, T_ARROW, T_SLEEP, T_BEAR, T_TELEP, T_DART, T_RUST, T_MYST, } from "./globals.js";
6
+ import { rnd, spread } from "./util.js";
7
+ import { msg, step_ok, getBackend } from "./io.js";
8
+ import { diag_ok, floor_at, chg_str } from "./misc.js";
9
+ import { enter_room, leave_room, find_floor, roomin } from "./rooms.js";
10
+ /**
11
+ * do_run: Start the hero running.
12
+ */
13
+ export function do_run(ch) {
14
+ state.running = true;
15
+ state.after = false;
16
+ state.runch = ch;
17
+ }
18
+ /**
19
+ * do_move: Check to see that a move is legal. If it is, handle consequences.
20
+ */
21
+ export async function do_move(dy, dx) {
22
+ const backend = getBackend();
23
+ const heroPos = state.player.t_pos;
24
+ state.firstmove = false;
25
+ if (state.no_move > 0) {
26
+ state.no_move--;
27
+ await msg("you are still stuck in the bear trap");
28
+ return;
29
+ }
30
+ let nhY;
31
+ let nhX;
32
+ // Do a confused move (maybe)
33
+ if ((state.player.t_flags & ISHUH) && rnd(5) !== 0) {
34
+ const rndPos = rndmove(state.player);
35
+ nhY = rndPos.y;
36
+ nhX = rndPos.x;
37
+ if (nhY === heroPos.y && nhX === heroPos.x) {
38
+ state.after = false;
39
+ state.running = false;
40
+ state.to_death = false;
41
+ return;
42
+ }
43
+ }
44
+ else {
45
+ nhY = heroPos.y + dy;
46
+ nhX = heroPos.x + dx;
47
+ }
48
+ // Check bounds
49
+ if (nhX < 0 || nhX >= NUMCOLS || nhY <= 0 || nhY >= NUMLINES - 1) {
50
+ state.running = false;
51
+ state.after = false;
52
+ return;
53
+ }
54
+ // Check diagonal movement
55
+ if (!diag_ok(heroPos, { y: nhY, x: nhX })) {
56
+ state.after = false;
57
+ state.running = false;
58
+ return;
59
+ }
60
+ if (state.running && nhY === heroPos.y && nhX === heroPos.x) {
61
+ state.after = false;
62
+ state.running = false;
63
+ }
64
+ const fl = flat(nhY, nhX);
65
+ let ch = winat(nhY, nhX);
66
+ // Check for hidden traps
67
+ if (!(fl & F_REAL) && ch === FLOOR) {
68
+ if (!(state.player.t_flags & ISLEVIT)) {
69
+ setCh(nhY, nhX, TRAP);
70
+ const pp = INDEX(nhY, nhX);
71
+ pp.p_flags |= F_REAL;
72
+ ch = TRAP;
73
+ }
74
+ }
75
+ else if ((state.player.t_flags & ISHELD) && ch !== "F") {
76
+ await msg("you are being held");
77
+ return;
78
+ }
79
+ switch (ch) {
80
+ case " ":
81
+ case "|":
82
+ case "-":
83
+ state.running = false;
84
+ state.after = false;
85
+ break;
86
+ case DOOR:
87
+ state.running = false;
88
+ if (flat(heroPos.y, heroPos.x) & F_PASS) {
89
+ enter_room({ y: nhY, x: nhX });
90
+ }
91
+ doMoveStuff(nhY, nhX, fl);
92
+ break;
93
+ case TRAP:
94
+ await be_trapped({ y: nhY, x: nhX });
95
+ doMoveStuff(nhY, nhX, fl);
96
+ break;
97
+ case PASSAGE:
98
+ state.player.t_room = roomin(heroPos);
99
+ doMoveStuff(nhY, nhX, fl);
100
+ break;
101
+ case FLOOR:
102
+ if (!(fl & F_REAL)) {
103
+ await be_trapped(heroPos);
104
+ }
105
+ doMoveStuff(nhY, nhX, fl);
106
+ break;
107
+ case STAIRS:
108
+ state.seenstairs = true;
109
+ state.running = false;
110
+ // Don't set state.take for stairs (no auto-pickup)
111
+ doMoveStuff(nhY, nhX, fl);
112
+ break;
113
+ default:
114
+ state.running = false;
115
+ // Check if it's a monster
116
+ if ((ch >= "A" && ch <= "Z") || moat(nhY, nhX) !== null) {
117
+ // fight — simplified for Phase 6 milestone
118
+ const { fight } = await import("./fight.js");
119
+ await fight({ y: nhY, x: nhX }, state.cur_weapon, false);
120
+ }
121
+ else {
122
+ if (ch !== STAIRS) {
123
+ state.take = ch;
124
+ }
125
+ doMoveStuff(nhY, nhX, fl);
126
+ }
127
+ break;
128
+ }
129
+ }
130
+ /**
131
+ * doMoveStuff: Handle the actual position update after a valid move.
132
+ */
133
+ function doMoveStuff(nhY, nhX, fl) {
134
+ const backend = getBackend();
135
+ const heroPos = state.player.t_pos;
136
+ // Erase hero from old position
137
+ backend.mvaddch(heroPos.y, heroPos.x, floor_at().charCodeAt(0));
138
+ // Check if leaving a room
139
+ if ((fl & F_PASS) && chat(state.oldpos.y, state.oldpos.x) === DOOR) {
140
+ leave_room({ y: nhY, x: nhX });
141
+ }
142
+ // Update hero position
143
+ state.oldpos.y = heroPos.y;
144
+ state.oldpos.x = heroPos.x;
145
+ heroPos.y = nhY;
146
+ heroPos.x = nhX;
147
+ }
148
+ /**
149
+ * be_trapped: Handle trap effects.
150
+ * Simplified for Phase 6 milestone.
151
+ */
152
+ export async function be_trapped(tc) {
153
+ // Levitating players don't trigger traps
154
+ if (state.player.t_flags & ISLEVIT)
155
+ return "";
156
+ const fl = flat(tc.y, tc.x);
157
+ const trapType = fl & F_TMASK;
158
+ switch (trapType) {
159
+ case T_DOOR: // Trapdoor
160
+ state.level++;
161
+ state._newLevel = true;
162
+ await msg("you fell into a trap!");
163
+ return String.fromCharCode(T_DOOR);
164
+ case T_ARROW: { // Arrow trap
165
+ const arrowDmg = roll(1, 6);
166
+ if (state.player.t_stats.s_hpt > arrowDmg) {
167
+ await msg("oh no! An arrow shot you");
168
+ }
169
+ else {
170
+ await msg("an arrow killed you");
171
+ }
172
+ state.player.t_stats.s_hpt -= arrowDmg;
173
+ break;
174
+ }
175
+ case T_SLEEP: // Sleeping gas
176
+ await msg("a strange white mist envelops you and you fall asleep");
177
+ state.no_command += spread(SLEEPTIME);
178
+ if (state.no_command < 0)
179
+ state.no_command = 0;
180
+ break;
181
+ case T_BEAR: // Bear trap
182
+ state.no_move += spread(BEARTIME);
183
+ if (state.no_move < 0)
184
+ state.no_move = 0;
185
+ await msg("you are caught in a bear trap");
186
+ break;
187
+ case T_TELEP: { // Teleport trap
188
+ const backend = getBackend();
189
+ // Erase hero from old position
190
+ backend.mvaddch(state.player.t_pos.y, state.player.t_pos.x, floor_at().charCodeAt(0));
191
+ // Teleport to random location
192
+ find_floor(null, state.player.t_pos, false, true);
193
+ enter_room(state.player.t_pos);
194
+ await msg("teleport!");
195
+ return String.fromCharCode(T_TELEP);
196
+ }
197
+ case T_DART: { // Poison dart
198
+ const dartDmg = roll(1, 4);
199
+ state.player.t_stats.s_hpt -= dartDmg;
200
+ if (!ISWEARING(R_SUSTSTR) && !save_throw(0, state.player)) {
201
+ chg_str(-1);
202
+ }
203
+ await msg("a small dart just hit you in the shoulder");
204
+ break;
205
+ }
206
+ case T_RUST: // Rust trap
207
+ await msg("a gush of water hits you on the head");
208
+ rust_armor();
209
+ break;
210
+ case T_MYST: // Mysterious trap
211
+ await msg("you hear a strange humming");
212
+ break;
213
+ }
214
+ return "";
215
+ }
216
+ /**
217
+ * rust_armor: Rust the player's armor from trap.
218
+ */
219
+ function rust_armor() {
220
+ if (state.cur_armor === null || state.cur_armor._kind !== "object")
221
+ return;
222
+ if (ISWEARING(R_SUSTARM))
223
+ return;
224
+ const armor = state.cur_armor;
225
+ if (armor.o_flags & 0o40)
226
+ return; // ISPROT
227
+ armor.o_arm++;
228
+ if (armor.o_arm > 9)
229
+ armor.o_arm = 9;
230
+ }
231
+ /**
232
+ * save_throw: Check for a saving throw (local for traps).
233
+ */
234
+ function save_throw(which, tp) {
235
+ const need = 14 - Math.floor(tp.t_stats.s_lvl / 2);
236
+ return roll(1, 20) >= need - which;
237
+ }
238
+ function roll(number, sides) {
239
+ let total = 0;
240
+ for (let i = 0; i < number; i++) {
241
+ total += rnd(sides) + 1;
242
+ }
243
+ return total;
244
+ }
245
+ /**
246
+ * rndmove: Pick a random valid move for a confused creature.
247
+ */
248
+ export function rndmove(who) {
249
+ const heroPos = who.t_pos;
250
+ const possibleMoves = [];
251
+ for (let dy = -1; dy <= 1; dy++) {
252
+ for (let dx = -1; dx <= 1; dx++) {
253
+ const ny = heroPos.y + dy;
254
+ const nx = heroPos.x + dx;
255
+ if (ny <= 0 || ny >= NUMLINES - 1 || nx < 0 || nx >= NUMCOLS)
256
+ continue;
257
+ if (!diag_ok(heroPos, { y: ny, x: nx }))
258
+ continue;
259
+ const ch = winat(ny, nx);
260
+ if (step_ok(ch)) {
261
+ possibleMoves.push({ y: ny, x: nx });
262
+ }
263
+ }
264
+ }
265
+ if (possibleMoves.length === 0) {
266
+ return { y: heroPos.y, x: heroPos.x };
267
+ }
268
+ return possibleMoves[rnd(possibleMoves.length)];
269
+ }
270
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.js","sourceRoot":"","sources":["../src/move.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Level generation.
3
+ * Ported from new_level.c
4
+ */
5
+ /**
6
+ * new_level: Dig and draw a new level.
7
+ */
8
+ export declare function new_level(): void;
9
+ /**
10
+ * put_things: Put potions, scrolls, and other items on this level.
11
+ */
12
+ export declare function put_things(): void;
13
+ /**
14
+ * treas_room: Add a treasure room.
15
+ */
16
+ export declare function treas_room(): void;
17
+ //# sourceMappingURL=new_level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new_level.d.ts","sourceRoot":"","sources":["../src/new_level.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAiFhC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAyCjC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA2CjC"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Level generation.
3
+ * Ported from new_level.c
4
+ */
5
+ import { state, MAXOBJ, MAXTRAPS, AMULETLEVEL, NTRAPS, ISHELD, ISMEAN, SEEMONST, FLOOR, STAIRS, AMULET, PLAYER, F_REAL, INDEX, chat, setCh, } from "./globals.js";
6
+ import { rnd } from "./util.js";
7
+ import { _attach, _free_list, new_item } from "./list.js";
8
+ import { do_rooms, find_floor, rnd_room, enter_room } from "./rooms.js";
9
+ import { do_passages } from "./passages.js";
10
+ import { new_thing } from "./things.js";
11
+ import { new_monster_thing } from "./list.js";
12
+ import { new_monster, randmonster, give_pack } from "./monsters.js";
13
+ import { roomin } from "./rooms.js";
14
+ import { getBackend } from "./io.js";
15
+ const TREAS_ROOM = 20;
16
+ const MAXTREAS = 10;
17
+ const MINTREAS = 2;
18
+ const MAXTRIES = 10;
19
+ /**
20
+ * new_level: Dig and draw a new level.
21
+ */
22
+ export function new_level() {
23
+ const backend = getBackend();
24
+ // Unhold when you go down, clear SEEMONST
25
+ state.player.t_flags &= ~ISHELD;
26
+ state.player.t_flags &= ~SEEMONST;
27
+ if (state.level > state.max_level) {
28
+ state.max_level = state.level;
29
+ }
30
+ // Clear places for a new level
31
+ for (const pp of state.places) {
32
+ pp.p_ch = " ";
33
+ pp.p_flags = F_REAL;
34
+ pp.p_monst = null;
35
+ }
36
+ backend.clear();
37
+ // Free up monsters from last level
38
+ let tp = state.mlist;
39
+ while (tp !== null) {
40
+ if (tp._kind === "monster" && tp.t_pack !== null) {
41
+ const packHead = { head: tp.t_pack };
42
+ _free_list(packHead);
43
+ tp.t_pack = packHead.head;
44
+ }
45
+ tp = tp.l_next;
46
+ }
47
+ const mlistHead = { head: state.mlist };
48
+ _free_list(mlistHead);
49
+ state.mlist = mlistHead.head;
50
+ // Throw away stuff left on previous level
51
+ const lvlObjHead = { head: state.lvl_obj };
52
+ _free_list(lvlObjHead);
53
+ state.lvl_obj = lvlObjHead.head;
54
+ do_rooms();
55
+ do_passages();
56
+ state.no_food++;
57
+ put_things();
58
+ // Place the traps
59
+ if (rnd(10) < state.level) {
60
+ state.ntraps = rnd(Math.floor(state.level / 4)) + 1;
61
+ if (state.ntraps > MAXTRAPS) {
62
+ state.ntraps = MAXTRAPS;
63
+ }
64
+ let trapCount = state.ntraps;
65
+ while (trapCount-- > 0) {
66
+ // Don't place traps in mazes
67
+ do {
68
+ find_floor(null, state.stairs, false, false);
69
+ } while (chat(state.stairs.y, state.stairs.x) !== FLOOR);
70
+ const pp = INDEX(state.stairs.y, state.stairs.x);
71
+ pp.p_flags &= ~F_REAL;
72
+ pp.p_flags |= rnd(NTRAPS);
73
+ }
74
+ }
75
+ // Place the staircase
76
+ find_floor(null, state.stairs, false, false);
77
+ setCh(state.stairs.y, state.stairs.x, STAIRS);
78
+ state.seenstairs = false;
79
+ // Assign rooms to all monsters
80
+ tp = state.mlist;
81
+ while (tp !== null) {
82
+ if (tp._kind === "monster") {
83
+ tp.t_room = roomin(tp.t_pos);
84
+ }
85
+ tp = tp.l_next;
86
+ }
87
+ // Place the hero
88
+ find_floor(null, state.player.t_pos, false, true);
89
+ enter_room(state.player.t_pos);
90
+ backend.mvaddch(state.player.t_pos.y, state.player.t_pos.x, PLAYER.charCodeAt(0));
91
+ }
92
+ /**
93
+ * put_things: Put potions, scrolls, and other items on this level.
94
+ */
95
+ export function put_things() {
96
+ // If the amulet has been found and we're above max level, no new stuff
97
+ if (state.amulet && state.level < state.max_level) {
98
+ return;
99
+ }
100
+ // Check for treasure rooms
101
+ if (rnd(TREAS_ROOM) === 0) {
102
+ treas_room();
103
+ }
104
+ // Do MAXOBJ attempts to put things on a level
105
+ for (let i = 0; i < MAXOBJ; i++) {
106
+ if (rnd(100) < 36) {
107
+ const obj = new_thing();
108
+ const listHead = { head: state.lvl_obj };
109
+ _attach(listHead, obj);
110
+ state.lvl_obj = listHead.head;
111
+ find_floor(null, obj.o_pos, false, false);
112
+ setCh(obj.o_pos.y, obj.o_pos.x, String.fromCharCode(obj.o_type));
113
+ }
114
+ }
115
+ // If deep enough and no amulet yet, place it
116
+ if (state.level >= AMULETLEVEL && !state.amulet) {
117
+ const obj = new_item();
118
+ const listHead = { head: state.lvl_obj };
119
+ _attach(listHead, obj);
120
+ state.lvl_obj = listHead.head;
121
+ obj.o_hplus = 0;
122
+ obj.o_dplus = 0;
123
+ obj.o_damage = "0x0";
124
+ obj.o_hurldmg = "0x0";
125
+ obj.o_arm = 11;
126
+ obj.o_type = AMULET.charCodeAt(0);
127
+ find_floor(null, obj.o_pos, false, false);
128
+ setCh(obj.o_pos.y, obj.o_pos.x, AMULET);
129
+ }
130
+ }
131
+ /**
132
+ * treas_room: Add a treasure room.
133
+ */
134
+ export function treas_room() {
135
+ const rp = state.rooms[rnd_room()];
136
+ let spots = (rp.r_max.y - 2) * (rp.r_max.x - 2) - MINTREAS;
137
+ if (spots > MAXTREAS - MINTREAS) {
138
+ spots = MAXTREAS - MINTREAS;
139
+ }
140
+ const numMonst = rnd(spots) + MINTREAS;
141
+ let nm = numMonst;
142
+ const mp = { x: 0, y: 0 };
143
+ // Place treasures
144
+ while (nm-- > 0) {
145
+ find_floor(rp, mp, 2 * MAXTRIES, false);
146
+ const obj = new_thing();
147
+ obj.o_pos = { x: mp.x, y: mp.y };
148
+ const listHead = { head: state.lvl_obj };
149
+ _attach(listHead, obj);
150
+ state.lvl_obj = listHead.head;
151
+ setCh(mp.y, mp.x, String.fromCharCode(obj.o_type));
152
+ }
153
+ // Fill room with monsters from the next level down
154
+ nm = rnd(spots) + MINTREAS;
155
+ if (nm < numMonst + 2) {
156
+ nm = numMonst + 2;
157
+ }
158
+ spots = (rp.r_max.y - 2) * (rp.r_max.x - 2);
159
+ if (nm > spots) {
160
+ nm = spots;
161
+ }
162
+ state.level++;
163
+ while (nm-- > 0) {
164
+ if (find_floor(rp, mp, MAXTRIES, true)) {
165
+ const monsterThing = new_monster_thing();
166
+ new_monster(monsterThing, randmonster(false), mp);
167
+ monsterThing.t_flags |= ISMEAN;
168
+ give_pack(monsterThing);
169
+ }
170
+ }
171
+ state.level--;
172
+ }
173
+ //# sourceMappingURL=new_level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new_level.js","sourceRoot":"","sources":["../src/new_level.ts"],"names":[],"mappings":"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"}
package/dist/pack.d.ts ADDED
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Pack (inventory) management.
3
+ * Ported from pack.c — simplified for Phase 6 milestone.
4
+ */
5
+ import type { Thing, GameObj, Coord } from "./types.js";
6
+ /**
7
+ * add_pack: Add an item to the hero's pack.
8
+ */
9
+ export declare function add_pack(obj: GameObj, silent: boolean): Promise<void>;
10
+ /**
11
+ * pick_up: Pick up an object at the hero's location.
12
+ */
13
+ export declare function pick_up(ch: string): Promise<void>;
14
+ /**
15
+ * money: Handle picking up gold.
16
+ */
17
+ export declare function money(): Promise<void>;
18
+ /**
19
+ * inventory: Display the player's inventory.
20
+ */
21
+ export declare function inventory(list: Thing | null, type: number): Promise<boolean>;
22
+ /**
23
+ * get_item: Get an item from the pack by letter.
24
+ */
25
+ export declare function get_item(purpose: string, type: number): Promise<GameObj | null>;
26
+ /**
27
+ * leave_pack: Take an item out of the pack.
28
+ * If count > 1 and !all, splits off one copy.
29
+ */
30
+ export declare function leave_pack(obj: GameObj, newpack: boolean, all: boolean): GameObj;
31
+ /**
32
+ * dropcheck: Check if an item can be dropped/thrown. Unequips if needed.
33
+ */
34
+ export declare function dropcheck(obj: GameObj): Promise<boolean>;
35
+ /**
36
+ * fallpos: Find an adjacent empty position for a dropped/thrown item.
37
+ */
38
+ export declare function fallpos(pos: Coord, newpos: Coord): boolean;
39
+ /**
40
+ * drop: The drop command — drop an item from the pack.
41
+ */
42
+ export declare function drop(): Promise<void>;
43
+ /**
44
+ * eat: Eat food from the pack.
45
+ */
46
+ export declare function eat(): Promise<void>;
47
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAkBxD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D3E;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvD;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB3C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBlF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAoCrF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAmChF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB9D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO,CAoB1D;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC1C;AAED;;GAEG;AACH,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA2CzC"}