MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // 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 | |