@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/fight.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combat functions.
|
|
3
|
+
* Ported from fight.c
|
|
4
|
+
*/
|
|
5
|
+
import type { Coord, Thing, Monster } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* fight: The player attacks the monster.
|
|
8
|
+
*/
|
|
9
|
+
export declare function fight(mp: Coord, weap: Thing | null, thrown: boolean): Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* attack: The monster attacks the player.
|
|
12
|
+
*/
|
|
13
|
+
export declare function attack(mp: Monster): Promise<number>;
|
|
14
|
+
/**
|
|
15
|
+
* swing: Determine if an attack hits.
|
|
16
|
+
*/
|
|
17
|
+
export declare function swing(atLvl: number, opArm: number, wplus: number): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* roll_em: Roll to see if the attacker hits the defender.
|
|
20
|
+
* Returns true if hit, damages defender.
|
|
21
|
+
*/
|
|
22
|
+
export declare function roll_em(thatt: Monster, thdef: Monster, weap: Thing | null, hurl: boolean): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* hit: Print a hit message.
|
|
25
|
+
*/
|
|
26
|
+
export declare function hit(er: string | null, ee: string | null, noend: boolean): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* miss: Print a miss message.
|
|
29
|
+
*/
|
|
30
|
+
export declare function miss(er: string | null, ee: string | null, noend: boolean): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* thunk: Print a thrown weapon hit message.
|
|
33
|
+
*/
|
|
34
|
+
export declare function thunk(weap: Thing | null, mname: string, noend: boolean): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* bounce: Print a thrown weapon miss message.
|
|
37
|
+
*/
|
|
38
|
+
export declare function bounce(weap: Thing | null, mname: string, noend: boolean): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* killed: Called when a monster has been killed.
|
|
41
|
+
*/
|
|
42
|
+
export declare function killed(tp: Monster, pr: boolean): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* remove_mon: Remove a monster from the level.
|
|
45
|
+
*/
|
|
46
|
+
export declare function remove_mon(mp: Coord, tp: Monster, wasKill: boolean): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* save_throw: See if a save throw is successful.
|
|
49
|
+
* C original: need = 14 - tp->t_stats.s_lvl / 2; roll(1,20) >= need - which
|
|
50
|
+
*/
|
|
51
|
+
export declare function save_throw(which: number, tp: Monster): boolean;
|
|
52
|
+
//# sourceMappingURL=fight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fight.d.ts","sourceRoot":"","sources":["../src/fight.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAW,MAAM,YAAY,CAAC;AAoDjE;;GAEG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAgD5F;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDzD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG1E;AAED;;;GAGG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,KAAK,GAAG,IAAI,EAClB,IAAI,EAAE,OAAO,GACZ,OAAO,CAuGT;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5F;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BpE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCxF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAG9D"}
|
package/dist/fight.js
ADDED
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combat functions.
|
|
3
|
+
* Ported from fight.c
|
|
4
|
+
*/
|
|
5
|
+
import { state, monsters as monsterTemplates, ISHUH, ISRUN, ISTARGET, ISCANC, ISHELD, CANHUH, R_ADDHIT, R_ADDDAM, R_PROTECT, R_SUSTSTR, R_SUSTARM, ISWEARING, VS_POISON, VS_MAGIC, ISPROT, moat, setMoat, } from "./globals.js";
|
|
6
|
+
import { rnd } from "./util.js";
|
|
7
|
+
import { msg, addmsg, endmsg, getBackend } from "./io.js";
|
|
8
|
+
import { _detach } from "./list.js";
|
|
9
|
+
import { set_mname, see_monst, check_level, chg_str } from "./misc.js";
|
|
10
|
+
import { runto } from "./monsters.js";
|
|
11
|
+
// Hit/miss message strings
|
|
12
|
+
const h_names = [
|
|
13
|
+
" scored an excellent hit on ",
|
|
14
|
+
" hit ",
|
|
15
|
+
" have injured ",
|
|
16
|
+
" swing and hit ",
|
|
17
|
+
" scored an excellent hit on ",
|
|
18
|
+
" hit ",
|
|
19
|
+
" has injured ",
|
|
20
|
+
" swings and hits ",
|
|
21
|
+
];
|
|
22
|
+
const m_names = [
|
|
23
|
+
" miss",
|
|
24
|
+
" swing and miss",
|
|
25
|
+
" barely miss",
|
|
26
|
+
" don't hit",
|
|
27
|
+
" misses",
|
|
28
|
+
" swings and misses",
|
|
29
|
+
" barely misses",
|
|
30
|
+
" doesn't hit",
|
|
31
|
+
];
|
|
32
|
+
// Strength adjustments to hit
|
|
33
|
+
const str_plus = [
|
|
34
|
+
-7, -6, -5, -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
35
|
+
1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
|
|
36
|
+
];
|
|
37
|
+
// Strength adjustments to damage
|
|
38
|
+
const add_dam = [
|
|
39
|
+
-7, -6, -5, -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3,
|
|
40
|
+
3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6,
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* fight: The player attacks the monster.
|
|
44
|
+
*/
|
|
45
|
+
export async function fight(mp, weap, thrown) {
|
|
46
|
+
const tp = moat(mp.y, mp.x);
|
|
47
|
+
if (tp === null || tp._kind !== "monster")
|
|
48
|
+
return false;
|
|
49
|
+
state.count = 0;
|
|
50
|
+
state.quiet = 0;
|
|
51
|
+
runto(mp);
|
|
52
|
+
// Xeroc: reveal on first attack if disguised
|
|
53
|
+
if (tp.t_type === "X" && tp.t_disguise !== "X" && !thrown) {
|
|
54
|
+
tp.t_disguise = "X";
|
|
55
|
+
const backend = getBackend();
|
|
56
|
+
if (see_monst(tp)) {
|
|
57
|
+
backend.mvaddch(mp.y, mp.x, "X".charCodeAt(0));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const mname = set_mname(tp);
|
|
61
|
+
let didHit = false;
|
|
62
|
+
state.has_hit = state.terse && !state.to_death;
|
|
63
|
+
if (roll_em(state.player, tp, weap, thrown)) {
|
|
64
|
+
if (thrown) {
|
|
65
|
+
await thunk(weap, mname, state.terse);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
await hit(null, mname, state.terse);
|
|
69
|
+
}
|
|
70
|
+
// CANHUH confusion transfer: if player has CANHUH and hits, confuse the monster
|
|
71
|
+
if (!thrown && (state.player.t_flags & CANHUH) && !(tp.t_flags & ISCANC)) {
|
|
72
|
+
await msg("your hands stop glowing %s", "red");
|
|
73
|
+
state.player.t_flags &= ~CANHUH;
|
|
74
|
+
tp.t_flags |= ISHUH;
|
|
75
|
+
}
|
|
76
|
+
if (tp.t_stats.s_hpt <= 0) {
|
|
77
|
+
await killed(tp, true);
|
|
78
|
+
}
|
|
79
|
+
didHit = true;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
if (thrown) {
|
|
83
|
+
await bounce(weap, mname, state.terse);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
await miss(null, mname, state.terse);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return didHit;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* attack: The monster attacks the player.
|
|
93
|
+
*/
|
|
94
|
+
export async function attack(mp) {
|
|
95
|
+
state.running = false;
|
|
96
|
+
state.count = 0;
|
|
97
|
+
state.quiet = 0;
|
|
98
|
+
if (state.to_death && !(mp.t_flags & ISTARGET)) {
|
|
99
|
+
state.to_death = false;
|
|
100
|
+
state.kamikaze = false;
|
|
101
|
+
}
|
|
102
|
+
const mname = set_mname(mp);
|
|
103
|
+
const oldHp = state.player.t_stats.s_hpt;
|
|
104
|
+
if (roll_em(mp, state.player, null, false)) {
|
|
105
|
+
if (state.has_hit) {
|
|
106
|
+
addmsg(". ");
|
|
107
|
+
}
|
|
108
|
+
await hit(mname, null, false);
|
|
109
|
+
state.has_hit = false;
|
|
110
|
+
if (state.player.t_stats.s_hpt <= 0) {
|
|
111
|
+
// Player dies
|
|
112
|
+
const { death } = await import("./rip.js");
|
|
113
|
+
await death(mp.t_type);
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
// Apply monster special attack effects
|
|
117
|
+
await special_hit(mp);
|
|
118
|
+
if (state.player.t_stats.s_hpt <= 0) {
|
|
119
|
+
const { death } = await import("./rip.js");
|
|
120
|
+
await death(mp.t_type);
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
if (!state.kamikaze) {
|
|
124
|
+
const damage = oldHp - state.player.t_stats.s_hpt;
|
|
125
|
+
if (damage > state.max_hit) {
|
|
126
|
+
state.max_hit = damage;
|
|
127
|
+
}
|
|
128
|
+
if (state.player.t_stats.s_hpt <= state.max_hit) {
|
|
129
|
+
state.to_death = false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
if (state.has_hit) {
|
|
135
|
+
addmsg(". ");
|
|
136
|
+
}
|
|
137
|
+
await miss(mname, null, false);
|
|
138
|
+
}
|
|
139
|
+
return 1;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* swing: Determine if an attack hits.
|
|
143
|
+
*/
|
|
144
|
+
export function swing(atLvl, opArm, wplus) {
|
|
145
|
+
const need = 20 - atLvl - opArm;
|
|
146
|
+
return rollDice(1, 20) >= need;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* roll_em: Roll to see if the attacker hits the defender.
|
|
150
|
+
* Returns true if hit, damages defender.
|
|
151
|
+
*/
|
|
152
|
+
export function roll_em(thatt, thdef, weap, hurl) {
|
|
153
|
+
const attStats = thatt.t_stats;
|
|
154
|
+
const defStats = thdef.t_stats;
|
|
155
|
+
// Parse damage string
|
|
156
|
+
let damageStr;
|
|
157
|
+
if (weap !== null && weap._kind === "object") {
|
|
158
|
+
damageStr = hurl ? weap.o_hurldmg : weap.o_damage;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
damageStr = attStats.s_dmg;
|
|
162
|
+
}
|
|
163
|
+
let didHit = false;
|
|
164
|
+
const isPlayerAttacking = thatt === state.player;
|
|
165
|
+
const isPlayerDefending = thdef === state.player;
|
|
166
|
+
// Each damage component (e.g., "1x8/1x8/2x6")
|
|
167
|
+
const parts = damageStr.split("/");
|
|
168
|
+
for (const part of parts) {
|
|
169
|
+
const match = part.match(/(\d+)x(\d+)/);
|
|
170
|
+
if (!match)
|
|
171
|
+
continue;
|
|
172
|
+
const ndice = parseInt(match[1], 10);
|
|
173
|
+
const nsides = parseInt(match[2], 10);
|
|
174
|
+
// Determine to-hit bonus
|
|
175
|
+
let hplus = 0;
|
|
176
|
+
let dplus = 0;
|
|
177
|
+
if (weap !== null && weap._kind === "object") {
|
|
178
|
+
hplus = weap.o_hplus;
|
|
179
|
+
dplus = weap.o_dplus;
|
|
180
|
+
}
|
|
181
|
+
if (isPlayerAttacking) {
|
|
182
|
+
const strIdx = Math.min(attStats.s_str, 31);
|
|
183
|
+
hplus += str_plus[strIdx];
|
|
184
|
+
dplus += add_dam[strIdx];
|
|
185
|
+
// Sleeping monster bonus: +4 to hit if monster isn't running
|
|
186
|
+
if (!isPlayerDefending && thdef !== state.player && !(thdef.t_flags & ISRUN)) {
|
|
187
|
+
hplus += 4;
|
|
188
|
+
}
|
|
189
|
+
// Launcher bonus: if hurling a missile with matching launcher
|
|
190
|
+
if (hurl && weap !== null && weap._kind === "object" && weap.o_launch >= 0) {
|
|
191
|
+
const curWeap = state.cur_weapon;
|
|
192
|
+
if (curWeap !== null && curWeap._kind === "object" && curWeap.o_which === weap.o_launch) {
|
|
193
|
+
hplus += curWeap.o_hplus;
|
|
194
|
+
dplus += curWeap.o_dplus;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Ring bonuses
|
|
198
|
+
if (ISWEARING(R_ADDHIT)) {
|
|
199
|
+
const ring = state.cur_ring[0];
|
|
200
|
+
if (ring !== null && ring._kind === "object" && ring.o_which === R_ADDHIT) {
|
|
201
|
+
hplus += ring.o_arm;
|
|
202
|
+
}
|
|
203
|
+
const ring2 = state.cur_ring[1];
|
|
204
|
+
if (ring2 !== null && ring2._kind === "object" && ring2.o_which === R_ADDHIT) {
|
|
205
|
+
hplus += ring2.o_arm;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (ISWEARING(R_ADDDAM)) {
|
|
209
|
+
const ring = state.cur_ring[0];
|
|
210
|
+
if (ring !== null && ring._kind === "object" && ring.o_which === R_ADDDAM) {
|
|
211
|
+
dplus += ring.o_arm;
|
|
212
|
+
}
|
|
213
|
+
const ring2 = state.cur_ring[1];
|
|
214
|
+
if (ring2 !== null && ring2._kind === "object" && ring2.o_which === R_ADDDAM) {
|
|
215
|
+
dplus += ring2.o_arm;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Determine defender's armor class
|
|
220
|
+
let defArm = defStats.s_arm;
|
|
221
|
+
if (isPlayerDefending) {
|
|
222
|
+
if (state.cur_armor !== null && state.cur_armor._kind === "object") {
|
|
223
|
+
defArm = state.cur_armor.o_arm;
|
|
224
|
+
}
|
|
225
|
+
// R_PROTECT ring bonus
|
|
226
|
+
if (ISWEARING(R_PROTECT)) {
|
|
227
|
+
for (let hand = 0; hand < 2; hand++) {
|
|
228
|
+
const ring = state.cur_ring[hand];
|
|
229
|
+
if (ring !== null && ring._kind === "object" && ring.o_which === R_PROTECT) {
|
|
230
|
+
defArm -= ring.o_arm;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Check if this attack hits
|
|
236
|
+
if (swing(attStats.s_lvl, defArm, hplus)) {
|
|
237
|
+
let damage = rollDice(ndice, nsides) + dplus;
|
|
238
|
+
if (damage < 0)
|
|
239
|
+
damage = 0;
|
|
240
|
+
defStats.s_hpt -= damage;
|
|
241
|
+
didHit = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return didHit;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* hit: Print a hit message.
|
|
248
|
+
*/
|
|
249
|
+
export async function hit(er, ee, noend) {
|
|
250
|
+
const attackerName = er === null ? "you" : er;
|
|
251
|
+
const defenderName = ee === null ? "you" : ee;
|
|
252
|
+
const idx = er === null ? rnd(4) : rnd(4) + 4;
|
|
253
|
+
addmsg(attackerName + h_names[idx] + defenderName);
|
|
254
|
+
if (!noend) {
|
|
255
|
+
await endmsg();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* miss: Print a miss message.
|
|
260
|
+
*/
|
|
261
|
+
export async function miss(er, ee, noend) {
|
|
262
|
+
const attackerName = er === null ? "you" : er;
|
|
263
|
+
const defenderName = ee === null ? " you" : " " + ee;
|
|
264
|
+
addmsg(attackerName + m_names[er === null ? rnd(4) : rnd(4) + 4] + defenderName);
|
|
265
|
+
if (!noend) {
|
|
266
|
+
await endmsg();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* thunk: Print a thrown weapon hit message.
|
|
271
|
+
*/
|
|
272
|
+
export async function thunk(weap, mname, noend) {
|
|
273
|
+
addmsg("the missile hit " + mname);
|
|
274
|
+
if (!noend) {
|
|
275
|
+
await endmsg();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* bounce: Print a thrown weapon miss message.
|
|
280
|
+
*/
|
|
281
|
+
export async function bounce(weap, mname, noend) {
|
|
282
|
+
addmsg("the missile misses " + mname);
|
|
283
|
+
if (!noend) {
|
|
284
|
+
await endmsg();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* killed: Called when a monster has been killed.
|
|
289
|
+
*/
|
|
290
|
+
export async function killed(tp, pr) {
|
|
291
|
+
const monsterIndex = tp.t_type.charCodeAt(0) - "A".charCodeAt(0);
|
|
292
|
+
const mname = monsterTemplates[monsterIndex].m_name;
|
|
293
|
+
if (pr) {
|
|
294
|
+
if (state.has_hit) {
|
|
295
|
+
addmsg(". ");
|
|
296
|
+
state.has_hit = false;
|
|
297
|
+
}
|
|
298
|
+
addmsg("you defeated ");
|
|
299
|
+
await msg("the %s", mname);
|
|
300
|
+
}
|
|
301
|
+
state.player.t_stats.s_exp += tp.t_stats.s_exp;
|
|
302
|
+
await check_level();
|
|
303
|
+
// Flytrap death: release the player
|
|
304
|
+
if (tp.t_type === "F") {
|
|
305
|
+
state.player.t_flags &= ~ISHELD;
|
|
306
|
+
state.vf_hit = 0;
|
|
307
|
+
}
|
|
308
|
+
// Leprechaun death: drop stolen gold
|
|
309
|
+
if (tp.t_type === "L" && tp.t_reserved > 0) {
|
|
310
|
+
state.purse += tp.t_reserved;
|
|
311
|
+
await msg("you find %d gold pieces", tp.t_reserved);
|
|
312
|
+
tp.t_reserved = 0;
|
|
313
|
+
}
|
|
314
|
+
// Remove monster from the map
|
|
315
|
+
await remove_mon(tp.t_pos, tp, true);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* remove_mon: Remove a monster from the level.
|
|
319
|
+
*/
|
|
320
|
+
export async function remove_mon(mp, tp, wasKill) {
|
|
321
|
+
const backend = getBackend();
|
|
322
|
+
// Detach from monster list
|
|
323
|
+
const mlistHead = { head: state.mlist };
|
|
324
|
+
_detach(mlistHead, tp);
|
|
325
|
+
state.mlist = mlistHead.head;
|
|
326
|
+
// Restore the character on the map
|
|
327
|
+
setMoat(mp.y, mp.x, null);
|
|
328
|
+
const oldCh = tp.t_oldch;
|
|
329
|
+
if (see_monst(tp)) {
|
|
330
|
+
backend.mvaddch(mp.y, mp.x, oldCh.charCodeAt(0));
|
|
331
|
+
}
|
|
332
|
+
// Drop any items the monster was carrying
|
|
333
|
+
if (tp.t_pack !== null) {
|
|
334
|
+
const { _attach: attachItem } = await import("./list.js");
|
|
335
|
+
const { setCh: setChAt, flat: flatAt, setFlat: setFlatAt, F_DROPPED: fDropped } = await import("./globals.js");
|
|
336
|
+
let item = tp.t_pack;
|
|
337
|
+
while (item !== null) {
|
|
338
|
+
const next = item.l_next;
|
|
339
|
+
item.l_next = null;
|
|
340
|
+
item.l_prev = null;
|
|
341
|
+
if (item._kind === "object") {
|
|
342
|
+
item.o_pos.y = mp.y;
|
|
343
|
+
item.o_pos.x = mp.x;
|
|
344
|
+
const typeCh = String.fromCharCode(item.o_type);
|
|
345
|
+
const listHead = { head: state.lvl_obj };
|
|
346
|
+
attachItem(listHead, item);
|
|
347
|
+
state.lvl_obj = listHead.head;
|
|
348
|
+
setChAt(mp.y, mp.x, typeCh);
|
|
349
|
+
setFlatAt(mp.y, mp.x, flatAt(mp.y, mp.x) | fDropped);
|
|
350
|
+
}
|
|
351
|
+
item = next;
|
|
352
|
+
}
|
|
353
|
+
tp.t_pack = null;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* save_throw: See if a save throw is successful.
|
|
358
|
+
* C original: need = 14 - tp->t_stats.s_lvl / 2; roll(1,20) >= need - which
|
|
359
|
+
*/
|
|
360
|
+
export function save_throw(which, tp) {
|
|
361
|
+
const need = 14 - Math.floor(tp.t_stats.s_lvl / 2);
|
|
362
|
+
return rollDice(1, 20) >= need - which;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* special_hit: Handle monster special attack effects after a hit.
|
|
366
|
+
*/
|
|
367
|
+
async function special_hit(mp) {
|
|
368
|
+
if (mp.t_flags & ISCANC)
|
|
369
|
+
return;
|
|
370
|
+
switch (mp.t_type) {
|
|
371
|
+
case "A": // Aquator — rust armor
|
|
372
|
+
await rust_armor(mp);
|
|
373
|
+
break;
|
|
374
|
+
case "I": // Ice Monster — freeze player
|
|
375
|
+
state.no_command += rnd(2) + 2;
|
|
376
|
+
if (state.no_command > 1) {
|
|
377
|
+
await msg("you are frozen");
|
|
378
|
+
}
|
|
379
|
+
break;
|
|
380
|
+
case "R": // Rattlesnake — poison
|
|
381
|
+
if (!save_throw(VS_POISON, state.player) && !ISWEARING(R_SUSTSTR)) {
|
|
382
|
+
chg_str(-1);
|
|
383
|
+
await msg("you feel a bite in your leg and now feel weaker");
|
|
384
|
+
}
|
|
385
|
+
break;
|
|
386
|
+
case "W": // Wraith — drain experience level
|
|
387
|
+
if (rnd(100) < 15) {
|
|
388
|
+
const playerStats = state.player.t_stats;
|
|
389
|
+
if (playerStats.s_exp === 0) {
|
|
390
|
+
// Already at minimum
|
|
391
|
+
const { death } = await import("./rip.js");
|
|
392
|
+
await death("W");
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
playerStats.s_exp = Math.floor(playerStats.s_exp / 2);
|
|
396
|
+
if (playerStats.s_lvl > 1) {
|
|
397
|
+
playerStats.s_lvl--;
|
|
398
|
+
const lostHp = rollDice(1, 10);
|
|
399
|
+
playerStats.s_maxhp -= lostHp;
|
|
400
|
+
if (playerStats.s_maxhp < 2)
|
|
401
|
+
playerStats.s_maxhp = 2;
|
|
402
|
+
if (playerStats.s_hpt > playerStats.s_maxhp) {
|
|
403
|
+
playerStats.s_hpt = playerStats.s_maxhp;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
await msg("you suddenly feel weaker");
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
break;
|
|
410
|
+
case "F": // Venus Flytrap — hold and digest
|
|
411
|
+
state.player.t_flags |= ISHELD;
|
|
412
|
+
state.vf_hit++;
|
|
413
|
+
if (state.vf_hit >= mp.t_stats.s_dmg.split("/").length) {
|
|
414
|
+
// Already got max hits, digest
|
|
415
|
+
const damage = (state.vf_hit + 1) * 2;
|
|
416
|
+
state.player.t_stats.s_hpt -= damage;
|
|
417
|
+
}
|
|
418
|
+
break;
|
|
419
|
+
case "L": // Leprechaun — steal gold
|
|
420
|
+
if (state.purse > 0) {
|
|
421
|
+
const stolen = rollDice(1, 10) * 50;
|
|
422
|
+
const actualStolen = Math.min(stolen, state.purse);
|
|
423
|
+
state.purse -= actualStolen;
|
|
424
|
+
mp.t_reserved = actualStolen; // store stolen gold for drop on death
|
|
425
|
+
await msg("your purse feels lighter");
|
|
426
|
+
}
|
|
427
|
+
break;
|
|
428
|
+
case "N": // Nymph — steal a random item
|
|
429
|
+
{
|
|
430
|
+
let count = 0;
|
|
431
|
+
let item = state.player.t_pack;
|
|
432
|
+
while (item !== null) {
|
|
433
|
+
count++;
|
|
434
|
+
item = item.l_next;
|
|
435
|
+
}
|
|
436
|
+
if (count > 0) {
|
|
437
|
+
let target = rnd(count);
|
|
438
|
+
item = state.player.t_pack;
|
|
439
|
+
while (item !== null && target > 0) {
|
|
440
|
+
target--;
|
|
441
|
+
item = item.l_next;
|
|
442
|
+
}
|
|
443
|
+
if (item !== null && item._kind === "object") {
|
|
444
|
+
if (item === state.cur_armor)
|
|
445
|
+
state.cur_armor = null;
|
|
446
|
+
if (item === state.cur_weapon)
|
|
447
|
+
state.cur_weapon = null;
|
|
448
|
+
if (item === state.cur_ring[0])
|
|
449
|
+
state.cur_ring[0] = null;
|
|
450
|
+
if (item === state.cur_ring[1])
|
|
451
|
+
state.cur_ring[1] = null;
|
|
452
|
+
const packIdx = item.o_packch.charCodeAt(0) - "a".charCodeAt(0);
|
|
453
|
+
if (packIdx >= 0 && packIdx < 26)
|
|
454
|
+
state.pack_used[packIdx] = false;
|
|
455
|
+
const packHead = { head: state.player.t_pack };
|
|
456
|
+
_detach(packHead, item);
|
|
457
|
+
state.player.t_pack = packHead.head;
|
|
458
|
+
state.inpack--;
|
|
459
|
+
const { inv_name: invName } = await import("./things.js");
|
|
460
|
+
await msg("she stole %s!", invName(item, false));
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
break;
|
|
465
|
+
case "V": // Vampire — drain max HP
|
|
466
|
+
if (!save_throw(VS_MAGIC, state.player)) {
|
|
467
|
+
const playerStats = state.player.t_stats;
|
|
468
|
+
playerStats.s_maxhp -= 1;
|
|
469
|
+
if (playerStats.s_hpt > playerStats.s_maxhp) {
|
|
470
|
+
playerStats.s_hpt = playerStats.s_maxhp;
|
|
471
|
+
}
|
|
472
|
+
if (playerStats.s_maxhp <= 0) {
|
|
473
|
+
const { death } = await import("./rip.js");
|
|
474
|
+
await death("V");
|
|
475
|
+
}
|
|
476
|
+
await msg("you feel weaker");
|
|
477
|
+
}
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* rust_armor: Rust the player's armor (called by Aquator hit and rust trap).
|
|
483
|
+
*/
|
|
484
|
+
async function rust_armor(mp) {
|
|
485
|
+
if (state.cur_armor === null || state.cur_armor._kind !== "object")
|
|
486
|
+
return;
|
|
487
|
+
if (ISWEARING(R_SUSTARM)) {
|
|
488
|
+
if (mp !== null) {
|
|
489
|
+
await msg("the %s's hit doesn't affect your armor", monsterTemplates[mp.t_type.charCodeAt(0) - "A".charCodeAt(0)].m_name);
|
|
490
|
+
}
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
if (state.cur_armor.o_flags & ISPROT)
|
|
494
|
+
return;
|
|
495
|
+
const armor = state.cur_armor;
|
|
496
|
+
armor.o_arm++;
|
|
497
|
+
if (armor.o_arm > 9)
|
|
498
|
+
armor.o_arm = 9;
|
|
499
|
+
await msg("your armor appears to be weaker");
|
|
500
|
+
}
|
|
501
|
+
function rollDice(number, sides) {
|
|
502
|
+
let total = 0;
|
|
503
|
+
for (let i = 0; i < number; i++) {
|
|
504
|
+
total += rnd(sides) + 1;
|
|
505
|
+
}
|
|
506
|
+
return total;
|
|
507
|
+
}
|
|
508
|
+
//# sourceMappingURL=fight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fight.js","sourceRoot":"","sources":["../src/fight.ts"],"names":[],"mappings":"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"}
|