/* * STRUCTURES */ int roll_dice ( int, int ); void damage ( dice_data&, char_data*, obj_data* ); void sprintf_dice ( char*, int ); class Dice_Data { public: int number; int side; int plus; Dice_Data& operator=( const int& value ) { number = ( value & 0x3F ); side = (( value >> 6 ) & 0xFFF ); plus = ( value >> 18 ); return *this; }; operator int( ) { int value; value = number; value += ( side << 6 ); value += ( plus << 18 ); return value; }; inline friend int average( const dice_data dice ) { return dice.number*(dice.side+1)/2+dice.plus; }; inline friend int roll_dice( const dice_data dice ) { return roll_dice( dice.number, dice.side )+dice.plus; }; inline friend int roll_dice( int value ) { dice_data dice; dice = value; return roll_dice( dice ); } }; /* * VARIOUS INLINE MATH MACROS */ template < class T > T sqr( T a ) { return( a*a ); } template < class T > T cube ( T a ) { return( a*a*a ); } template < class T > T pow4 ( T a ) { return( a*a*a*a ); } // inline int max ( int a, int b ) { return( a > b ? a : b ); } // inline int min ( int a, int b ) { return( a < b ? a : b ); } inline int sign ( int a ) { return( a > 0 ? 1 : -1 ); } inline int range( int a, int b, int c ) { return( b < a ? a : ( b > c ? c : b ) ); } inline bool not_in_range( int i, int a, int b ) { return( i < a || i > b ); } /* * FUNCTIONS */ const char* number_word ( int, char_data* = NULL ); int number_range ( int, int ); int evaluate ( char* s1, bool&, int = 0, int = 0 ); void atorange ( char*, int&, int& ); const char* atos ( int ); bool renumber ( int&, int, int ); const char* int3 ( int ); const char* int4 ( int ); const char* int5 ( int ); const char* float3 ( float ); extern bool numeric;