blob: d00cbd3b4bf980efeda174d942211d7d392af2fb [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// combat.h -- Schadenstypen, Waffen- und Ruestungsklassen und ein
4// paar Properties fuer das Kampfsystem
5//
6// $Id: combat.h 7178 2009-03-09 20:42:49Z Zesstra $
7
8#ifndef _COMBAT_H_
9#define _COMBAT_H_
10
11#include <weapon.h>
12#include <armour.h>
13#include <ranged_weapon.h>
14
15/* -------------------- Properties -------------------- */
16
17/* ---------- Kampf allgemein ---------- */
18
19#define P_ENABLE_IN_ATTACK_OUT "enable_in_attack_out"
20#define P_NO_GLOBAL_ATTACK "no_global_attack"
21#define P_FRIEND "friend"
22#define P_LAST_COMBAT_TIME "last_combat_time"
23
24/* ---------- Befrieden ---------------- */
25
26#define P_ACCEPT_PEACE "accept_peace"
27
28/* ---------- Waffen und Ruestungen ---------- */
29
30#define P_LAST_USE "last_object_use"
31#define P_DAMAGED "item_damaged"
32#define P_EFFECTIVE_WC "effective_wc"
33#define P_EFFECTIVE_AC "effective_ac"
34#define P_QUALITY "quality"
35#define P_RESTRICTIONS "restrictions"
36#define P_EQUIP_TIME "equip_time"
37
38/* ---------- Artillerie ------------*/
39
40#define P_IS_ARTILLERY "artillery"
41
42/* ---------- Fernkampfwaffen ---------- */
43
44#define P_SHOOTING_WC "shooting_wc"
45#define P_AMMUNITION "munition"
46#define P_STRETCH_TIME "stretch_time"
47#define P_RANGE "range"
48#define P_SHOOTING_AREA "shooting_area"
49#define P_TARGET_AREA "target_area"
50
51/* ----- Defines fuer Array-Positionen ----- */
52
53#define RW_SIZE 5
54#define RW_ENEMY 0
55#define RW_AMMU 1
56#define RW_WRITE 2
57#define RW_VICTIM 3
58#define RW_SAY 4
59
60/* -------------------- Waffentypen -------------------- */
61
62#define WT_AMMU "ammunition"
63#define WT_AXE "axe"
64#define WT_CLUB "club"
65#define WT_HANDS "hands"
66#define WT_KNIFE "knife"
67#define WT_MAGIC "magic"
68#define WT_RANGED_WEAPON "fernwaffe"
69#define WT_SPEAR "spear"
70#define WT_STAFF "staff"
71#define WT_SWORD "sword"
72#define WT_WHIP "whip"
73
74// Fuer alles, was sich unter den o.g. Typen nicht einordnen laesst
75#define WT_MISC "misc"
76
77/* ---------- Liste aller erlaubten Waffentypen ---------- */
78
79#define VALID_WEAPON_TYPE(t) (member(({\
80 WT_SWORD, WT_AXE, WT_CLUB, WT_SPEAR, WT_KNIFE, WT_AMMU, WT_MAGIC,\
81 WT_STAFF, WT_WHIP, WT_MISC, WT_RANGED_WEAPON }), t ) != -1)
82
83/* ---------- Maximal erlaubte Waffenstaerke ---------- */
84
85#define MAX_WEAPON_CLASS 200
86
87#define MAX_TWOHANDED_WC MAX_WEAPON_CLASS
88/* Die Einhaltung der Einhaender-Grenze wird bisher nicht garantiert */
89#define MAX_ONEHANDED_WC 150
90
91/* ---------- Mindest-Waffenstaerke, die eine Waffe
92 bei einer Beschaedigung behaelt ---------- */
93
94#define MIN_WEAPON_CLASS 30
95
96/* ---------- Maximal erlaubte Parierwaffenstaerke ---------- */
97
98#define MAX_PARRY_CLASS 40
99
100/* ---------- Auch fuer Paruerwaffen gibt
101 es eine Minimalstaerke ---------- */
102
103#define MIN_PARRY_CLASS 0
104
105/* ---------- Dito fuer Ruestungen ---------- */
106
107#define MIN_ARMOUR_CLASS 0
108
109/* -------------------- Munition fuer Fernkampfwaffen -------------------- */
110
111// als x bitte _immer_ den Namen der Munitionsart im Plural angeben,
112// dieses ermoeglicht ein auswerten via MUN_NAME() z.b. in gilden
113
114#define MUN_MISC(x) "Munition:"+x
115
116// ueber dieses define und bitte _nur_ ueber dieses define koennen
117// Gilden oder aehnliches den Namen einer Munitionsart ermitteln. Dieses
118// ist wichtig wenn naehere Infos ueber eine Waffe ausgegeben werden sollen.
119// Bsp. "Ein Bogen wiegt 1500 Gramm und erlaubt es Dir Pfeile mit einer
120// Reichweite von 50 m zu verschiessen."
121// sprintf("%s wiegt %d Gramm und erlaubt es Dir %s mit einer Reichweite "
122// +"von %d m zu verschiessen.", ob->Name(WER), ob->QueryProp(P_WEIGHT),
123// MUN_NAME(ob->QueryProp(P_AMMUNITION)), ob->QueryProp(P_RANGE))
124
125#define MUN_NAME(x) x[9..]
126
127#define MUN_ARROW MUN_MISC("Pfeile")
128#define MUN_STONE MUN_MISC("Steine")
129#define MUN_BOLT MUN_MISC("Bolzen")
130#define MUN_DART MUN_MISC("kleine Blasrohrpfeile")
131
132// Fuer die hier definierten Munitionstypen gibt es auch einen Schuss-Skill
133
134#define VALID_SHOOT_SKILL ([\
135 MUN_ARROW : "arrow",\
136 MUN_STONE : "stone",\
137 MUN_BOLT : "bolt",\
138 MUN_DART : "dart" ])
139
140/* -------------------- Schadensarten -------------------- */
141
142/* ---------- physikalisch --------- */
143
144// Schlagschaden
145#define DT_BLUDGEON "bludgeon"
146
147#define DT_EXPLOSION "explosion"
148
149// Stichschaden
150#define DT_PIERCE "pierce"
151
152// reissender Schaden/Krallen
153#define DT_RIP "rip"
154
155// Schnittschaden
156#define DT_SLASH "slash"
157
158// Quetschungsschaden
159#define DT_SQUEEZE "squeeze"
160
161// peitschender Schaden
162#define DT_WHIP "whip"
163
164/* ---------- Mapping aller physikalischen Schadensarten ---------- */
165
166#define PHYSICAL_DAMAGE_TYPES ([\
167 DT_BLUDGEON : 1,\
168 DT_EXPLOSION : 1,\
169 DT_PIERCE : 1,\
170 DT_RIP : 1,\
171 DT_SLASH : 1,\
172 DT_SQUEEZE : 1,\
173 DT_WHIP : 1 ])
174
175/* ----------- magisch ---------- */
176
177// Saeure
178#define DT_ACID "acid"
179
180// Luft(mangel)
181#define DT_AIR "air"
182
183// Kaelte oder Eis
184#define DT_COLD "cold"
185
186// Feuer
187#define DT_FIRE "fire"
188
189// heiliger Schaden
190#define DT_HOLY "holy"
191
192// Blitz oder Elektrizitaet
193#define DT_LIGHTNING "lightning"
194
195// (allg.) Magie
196#define DT_MAGIC "magic"
197
198// Gift
199#define DT_POISON "poison"
200
201// Laerm bzw. Schall
202#define DT_SOUND "sound"
203
204// Angst
205#define DT_TERROR "terror"
206
207// satanischer Schaden
208#define DT_UNHOLY "unholy"
209
210// Wasser
211#define DT_WATER "water"
212
213/* ---------- Mapping aller magischen Schadensarten ---------- */
214
215#define MAGICAL_DAMAGE_TYPES ([\
216 DT_ACID : 1,\
217 DT_AIR : 1,\
218 DT_COLD : 1,\
219 DT_FIRE : 1,\
220 DT_HOLY : 1,\
221 DT_LIGHTNING : 1,\
222 DT_MAGIC : 1,\
223 DT_POISON : 1,\
224 DT_SOUND : 1,\
225 DT_TERROR : 1,\
226 DT_UNHOLY : 1,\
227 DT_WATER : 1 ])
228
229
230/* ---------- Liste aller Schadensarten ---------- */
231
232#define ALL_DAMAGE_TYPES ({ DT_BLUDGEON, DT_SLASH, DT_PIERCE, DT_MAGIC, \
233 DT_FIRE, DT_COLD, DT_ACID, DT_WATER, \
234 DT_LIGHTNING, DT_AIR, DT_POISON, DT_EXPLOSION, \
235 DT_SQUEEZE, DT_SOUND, DT_RIP, DT_WHIP, \
236 DT_HOLY, DT_UNHOLY, DT_TERROR })
237
238/* Ist x ein gueltiger Schadenstyp der Mudlib? */
239#define VALID_DAMAGE_TYPE(x) (member(ALL_DAMAGE_TYPES, x) > -1)
240
241/* -------------------- Ruestungstypen -------------------- */
242
243#define AT_AMULET "Amulett"
244#define AT_ARMOUR "Ruestung"
245#define AT_BELT "Guertel"
246#define AT_BOOT "Schuhe"
247#define AT_CLOAK "Umhang"
248#define AT_GLOVE "Handschuh"
249#define AT_HELMET "Helm"
250#define AT_QUIVER "Koecher"
251#define AT_RING "Ring"
252#define AT_SHIELD "Schild"
253#define AT_TROUSERS "Hosen"
254
255// Fuer alles, was sich unter den o.g. Typen nicht einordnen laesst
256#define AT_MISC "Misc"
257
258// Ruestungen, die nicht angezogen werden koennen/duerfen
259#define AT_ILLEGAL "ILLEGAL"
260
261/* ---------- Liste aller erlaubten Ruestungstypen ---------- */
262
263#define VALID_ARMOUR_TYPE(t) (member(({\
264 AT_ARMOUR, AT_HELMET, AT_RING, AT_GLOVE, AT_CLOAK, AT_BOOT,\
265 AT_TROUSERS, AT_SHIELD, AT_AMULET, AT_MISC, AT_BELT,\
266 AT_QUIVER}), t ) != -1)
267
268/* ---------- Mapping mit den maximal erlaubten
269 Ruestungswerten der einzelnen Ruestungstypen ---------- */
270
271#define VALID_ARMOUR_CLASS ([ \
272 AT_AMULET : 2 ,\
273 AT_ARMOUR : 50 ,\
274 AT_BELT : 2 ,\
275 AT_BOOT : 6 ,\
276 AT_CLOAK : 10 ,\
277 AT_GLOVE : 5 ,\
278 AT_HELMET : 15 ,\
279 AT_QUIVER : 0 ,\
280 AT_RING : 2 ,\
281 AT_SHIELD : 40 ,\
282 AT_TROUSERS : 15 ,\
283 AT_MISC : 0 ])
284
285/* ---------- Mapping mit den Ruestungswerten, ab denen
286 die Ruestung im Laden einbehalten werden ---------- */
287
288#define KEEP_ARMOUR_CLASS ([ \
289 AT_AMULET : 2 ,\
290 AT_ARMOUR : 35 ,\
291 AT_BELT : 2 ,\
292 AT_BOOT : 5 ,\
293 AT_CLOAK : 7 ,\
294 AT_GLOVE : 5 ,\
295 AT_HELMET : 12 ,\
296 AT_QUIVER : 1 ,\
297 AT_RING : 2 ,\
298 AT_SHIELD : 26 ,\
299 AT_TROUSERS : 12 ,\
300 AT_MISC : 1 ])
301
302/* -------------------- Defines fuer Kampfkommandos -------------------- */
303
304#define C_AVG "avg"
305#define C_MAX "max"
306#define C_MIN "min"
307#define C_DTYPES "dtypes"
308#define C_HEAL "heal"
309
310
311/* -------------------- Defines fuer erweiterte Defendinformationen -- */
312#define EINFO_DEFEND "einfo_defend"
313#define ORIGINAL_DAM "original_dam"
314#define ORIGINAL_DAMTYPE "original_damtype"
315#define CURRENT_DAM "current_dam"
316#define CURRENT_DAMTYPE "current_damtype"
317#define ORIGINAL_AINFO "original_ainfo"
318#define ENEMY_INSERTED "enemy_inserted"
319#define RFR_REDUCE "rfr_reduce"
320#define PRESENT_DEFENDERS "present_defenders"
321#define DEFENDING_DEFENDER "defending_defender"
322#define DEFEND_HOOK "defend_hook"
323#define DEFEND_ARMOURS "defend_armours"
324#define DEFEND_GUILD "defend_guild"
325#define DEFEND_RESI "defend_resi"
326#define DEFEND_BODY "defend_body"
327#define DEFEND_LOSTLP "defend_lostlp"
328#define DEFEND_CUR_ARMOUR_PROT "defend_cur_armour_prot"
329
330#define DEF_DEFENDER 0
331#define DEF_DAM 1
332#define DEF_DAMTYPE 2
333#define DEF_SPELL 3
334
335#define HOOK_DAM 0
336#define HOOK_DAMTYPE 1
337#define HOOK_SPELL 2
338#define DI_NOHOOK 0
339#define DI_HOOK 1
340#define DI_HOOKINTERRUPT 2
341
342#define DEF_ARMOUR_DAM 0
343#define DEF_ARMOUR_PROT 1
344
345#define GUILD_DAM 0
346#define GUILD_DAMTYPE 1
347
348#endif
349
350/* -------------------- Prototypen-Deklarationen -------------------- */
351
352#ifndef __COMBAT_H_PROTOTYPES__
353#define __COMBAT_H_PROTOTYPES__
354
355#ifdef NEED_PROTOTYPES
356
357#endif // NEED_PROTOTYPES
358
359#endif // __COMBAT_H_PROTOTYPES__
360