diff options
author | peterb12 <peterb12@c06c8d41-db1a-0410-9941-cceddc491573> | 2005-07-21 02:34:44 +0000 |
---|---|---|
committer | peterb12 <peterb12@c06c8d41-db1a-0410-9941-cceddc491573> | 2005-07-21 02:34:44 +0000 |
commit | 673bdae75485d14f759af597c3c62b99601f9a43 (patch) | |
tree | 368103f29fe0ce5dcf98060d9b5faa04590085fb /trunk/source/wpn-misc.cc | |
parent | 7e900be770db24b0405fd2162491c405a425873e (diff) | |
download | crawl-ref-673bdae75485d14f759af597c3c62b99601f9a43.tar.gz crawl-ref-673bdae75485d14f759af597c3c62b99601f9a43.zip |
Initial revision
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'trunk/source/wpn-misc.cc')
-rw-r--r-- | trunk/source/wpn-misc.cc | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/trunk/source/wpn-misc.cc b/trunk/source/wpn-misc.cc new file mode 100644 index 0000000000..c6d38f98e6 --- /dev/null +++ b/trunk/source/wpn-misc.cc @@ -0,0 +1,268 @@ +/* + ********************************************************************* + * File: wpn-misc.cc * + * Summary: temporary home for weapon f(x) until struct'ed * + * Written by: don brodale <dbrodale@bigfootinteractive.com> * + * * + * Changelog(most recent first): * + * * + * <00> 12jun2000 dlb created after little thought * + ********************************************************************* + */ + +#include "AppHdr.h" +#include "wpn-misc.h" + +#include "externs.h" + +// all of this will be replaced by a struct and data handlers {dlb}: + +/* + ************************************************** + * * + * BEGIN PUBLIC FUNCTIONS * + * * + ************************************************** +*/ + +char damage_type(unsigned char wclass, unsigned char wtype) +{ + char type_damage = DVORP_CRUSHING; // this is the default, btw {dlb} + + if (wclass == OBJ_WEAPONS) + { + switch (wtype) + { + case WPN_DAGGER: + case WPN_DEMON_BLADE: + case WPN_DOUBLE_SWORD: + case WPN_GREAT_SWORD: + case WPN_KATANA: + case WPN_KNIFE: + case WPN_LONG_SWORD: + case WPN_QUICK_BLADE: + case WPN_SABRE: + case WPN_FALCHION: + case WPN_SCIMITAR: + case WPN_SCYTHE: + case WPN_SHORT_SWORD: + case WPN_TRIPLE_SWORD: + type_damage = DVORP_SLICING; + break; + + case WPN_DEMON_TRIDENT: + case WPN_EVENINGSTAR: + case WPN_GIANT_SPIKED_CLUB: + case WPN_MORNINGSTAR: + case WPN_SPEAR: + case WPN_SPIKED_FLAIL: + case WPN_TRIDENT: + type_damage = DVORP_PIERCING; + break; + + case WPN_WAR_AXE: + case WPN_BATTLEAXE: + case WPN_BROAD_AXE: + case WPN_EXECUTIONERS_AXE: + case WPN_GLAIVE: + case WPN_HALBERD: + case WPN_HAND_AXE: + type_damage = DVORP_CHOPPING; + break; + } + } + + return (type_damage); +} // end damage_type() + +bool can_cut_meat(unsigned char wclass, unsigned char wtype) +{ + int type = damage_type( wclass, wtype ); + + if (type == DVORP_CHOPPING || type == DVORP_SLICING) + return (true); + + return (false); +} + +int hands_reqd_for_weapon(unsigned char wclass, unsigned char wtype) +{ + int reqd_hands = HANDS_ONE_HANDED; + + switch (wclass) + { + case OBJ_WEAPONS: + switch (wtype) + { + case WPN_HALBERD: + case WPN_SCYTHE: + case WPN_GLAIVE: + case WPN_QUARTERSTAFF: + case WPN_BATTLEAXE: + case WPN_EXECUTIONERS_AXE: + case WPN_GREAT_SWORD: + case WPN_TRIPLE_SWORD: + case WPN_GREAT_MACE: + case WPN_GREAT_FLAIL: + case WPN_GIANT_CLUB: + case WPN_GIANT_SPIKED_CLUB: + reqd_hands = HANDS_TWO_HANDED; + break; + + case WPN_SPEAR: + case WPN_TRIDENT: + case WPN_DEMON_TRIDENT: + case WPN_WAR_AXE: + case WPN_BROAD_AXE: + case WPN_KATANA: + case WPN_DOUBLE_SWORD: + reqd_hands = HANDS_ONE_OR_TWO_HANDED; + break; + } + break; + + case OBJ_STAVES: + reqd_hands = HANDS_TWO_HANDED; + break; + } + + return (reqd_hands); +} // end hands_reqd_for_weapon() + +bool is_demonic(unsigned char weapon_subtype) +{ + switch (weapon_subtype) + { + case WPN_DEMON_BLADE: + case WPN_DEMON_WHIP: + case WPN_DEMON_TRIDENT: + return true; + + default: + return false; + } +} // end is_demonic() + +bool launches_things( unsigned char weapon_subtype ) +{ + switch (weapon_subtype) + { + case WPN_SLING: + case WPN_BOW: + case WPN_CROSSBOW: + case WPN_HAND_CROSSBOW: + case WPN_BLOWGUN: + return (true); + + default: + return (false); + } +} // end launches_things() + +unsigned char launched_by(unsigned char weapon_subtype) +{ + switch (weapon_subtype) + { + case WPN_BLOWGUN: + return MI_NEEDLE; + case WPN_SLING: + return MI_STONE; + case WPN_BOW: + return MI_ARROW; + case WPN_CROSSBOW: + return MI_BOLT; + case WPN_HAND_CROSSBOW: + return MI_DART; + default: + return MI_EGGPLANT; // lame debugging code :P {dlb} + } +} // end launched_by() + +// this function returns the skill that the weapon would use in melee +char weapon_skill(unsigned char wclass, unsigned char wtype) +{ + char skill2use = SK_FIGHTING; + + if (wclass == OBJ_STAVES + && (wtype < STAFF_SMITING || wtype >= STAFF_AIR)) + { + skill2use = SK_STAVES; + } + else if (wclass != OBJ_WEAPONS) + skill2use = SK_FIGHTING; + else + { + switch (wtype) + { + case WPN_CLUB: + case WPN_MACE: + case WPN_HAMMER: + case WPN_ANCUS: + case WPN_WHIP: + case WPN_FLAIL: + case WPN_MORNINGSTAR: + case WPN_GIANT_CLUB: + case WPN_GIANT_SPIKED_CLUB: + case WPN_EVENINGSTAR: + case WPN_DEMON_WHIP: + case WPN_SPIKED_FLAIL: + case WPN_GREAT_FLAIL: + case WPN_GREAT_MACE: + case WPN_BOW: + case WPN_BLOWGUN: + case WPN_CROSSBOW: + case WPN_HAND_CROSSBOW: + skill2use = SK_MACES_FLAILS; + break; + + case WPN_KNIFE: + case WPN_DAGGER: + case WPN_SHORT_SWORD: + case WPN_QUICK_BLADE: + case WPN_SABRE: + skill2use = SK_SHORT_BLADES; + break; + + case WPN_FALCHION: + case WPN_LONG_SWORD: + case WPN_SCIMITAR: + case WPN_KATANA: + case WPN_DOUBLE_SWORD: + case WPN_DEMON_BLADE: + case WPN_GREAT_SWORD: + case WPN_TRIPLE_SWORD: + skill2use = SK_LONG_SWORDS; + break; + + case WPN_HAND_AXE: + case WPN_WAR_AXE: + case WPN_BROAD_AXE: + case WPN_BATTLEAXE: + case WPN_EXECUTIONERS_AXE: + skill2use = SK_AXES; + break; + + case WPN_SPEAR: + case WPN_HALBERD: + case WPN_GLAIVE: + case WPN_SCYTHE: + case WPN_TRIDENT: + case WPN_DEMON_TRIDENT: + skill2use = SK_POLEARMS; + break; + + case WPN_QUARTERSTAFF: + skill2use = SK_STAVES; + break; + } + } + + return (skill2use); +} // end weapon_skill() +/* + ************************************************** + * * + * END PUBLIC FUNCTIONS * + * * + ************************************************** +*/ |