Start snip here---------------------------------------------------------------
Seeing we have so many discussions on long flags and such here is my solution.
Ok bit based flags i left the standard long flags and when i ran out of room
made a flag system like this.
char aff2[some_number] // obviously the some_number needs a value i am upto 12
each byte has 8 bits so eight flags per character or 96 bits minus 1 since 0 is
my terminator bit.
Here is the concept.
To add bits i add one to the array. By using the NULL terminator as 0 i do not
have to store all the bits in each place they are used. I only store those i
want turned on. I have examples below.
here is the IS_SET2 i use to test my values
I have made a basic snippet not all the answers but most anyway.
need more help drop me another line or drop by ghost dancer and say hey. i am
Taka head coder for the GhostMUD project.
BTW GhostMUD 3.0 is already available for public release it would save you some
of these headaches with OLC/Color already patched and 100 new spells and skills
and much more you may want to take a look at it.
So to use these new flags use in object at the end of the object
* Some of the advantages of doing things this way is no changing existing areas
* unless you want to add some new affects to items/mobiles/rooms. This is done
* by adding at the end of the OBJECT a new type of attribute that looks like
* this.
* From the lines below we will make an object mage only.
* #30036
* sword justice~
* Oyate Sword~
* The Oyate Sword of Justice~
* steel~
* weapon I AN
* sword 35 35 acid ABCDEGH
* 1 10 0 P
* X <- This lines tells the program new effects are coming
* 1 29 0 <- 1= mage 29= class limits flag 0= terminate line
* To make the same weapon mage/necromancer/witch/and enchanter
* X <- This lines tells the program new effects are coming
* 1 8 9 10 29 0 <- 1= mage 8= witch 9= necromancer 10= enchanter
* 29= class limits flag 0=
terminate line
* NOTE you can have as many indicator numbers as you like in a line always
* close with a 0 (zero)
*
* mobiles are the same as objects
* X
* 63 150 0
* sets the AFF_SILENT flag and the AFF_INDEX_FLAG on
that is all it takes :)
__________________________________SNIPET HERE______________________________
This snippet creates an arrary based affects.
It is not simple but it is unlimited when you
run out simply increase its size.
This will show you how i did objects the same
or simmilar can be done for character, area,
ect...
Alkso this way there are no changes to existing
areas. Many of these examples are for Ghost Dancer
only you will have to substitute your own values
where ours are.
in merc.h add this
/*******************************************************************************
* _ | File Name: array.txt
* / \ _-' | Description: This is allows for a array of bits
* _/| \-''- _ / | beypnd 32. It also does not change
* __-' | \ | existing areas except where the flags
* / \ | are used.
* / "o. |o | |
* | \ ; |
* ', |
* \_ __\ | (c) 2000-2003 TAKA
* ''-_ \.// | (c) 2000-2003 The GhostMud Project Team
* / '-____' |
* / | You may use this code under GNU license
restriction
* _' The Wolf | 1) This header block remains in the code.
* _-' strikes! | 2) You email me at [EMAIL PROTECTED]
*_________________________| letting me know you are using this code
* please incluse your name, your mud name
* All rights reserved your mud address, your email and this file
* GhostMud is copyrighted name.
* by TAKA 3) In your help files mention me where appropriate
* IE: help snippets.
********************************************************************************
*/
/******************************************************************************
* SETUP ARRAY bits for multi flags above 32
* BY TAKA of GHOST DANCER
*
* 8 bits per element of the character array.
* This idea is by Azash for more efficient use of our array flagging system
*
* Use these flags on your mud anyway you see fit. This is how we used them on
* ours. Increasing the size of the array makes for larger numbers able to be
* stored. Or you can define multiple arrays for different needs. They are
* literally unlimited.
*
* This is the example of how it works.
* 1) define a character array.
* 2) use the IS_SET2/SET_BIT2/REMOVE_BIT2 supplied to check and set the bits
* inside the array.
* **May need to set IS_SET2 ect to IS_SETX and SET_BITX and REMOVE_BITX
* 3) each character in the array has 8 bits.
* 4) You understand the values listed here are for my game your mileage
* may vary.
*
* Some of the advantages of doing things this way is no changing existing areas
* unless you want to add some new affects to items/mobiles/rooms. This is done
* by adding at the end of the OBJECT a new type of attribute that looks like
* this.
* From the lines below we will make an object mage only.
* #30036
* sword justice~
* Oyate Sword~
* The Oyate Sword of Justice~
* steel~
* weapon I AN
* sword 35 35 acid ABCDEGH
* 1 10 0 P
* X <- This lines tells the program new effects are coming
* 1 29 0 <- 1= mage 29= class limits flag 0= terminate line
* To make the same weapon mage/necromancer/witch/and enchanter
* X <- This lines tells the program new effects are coming
* 1 8 9 10 29 0 <- 1= mage 8= witch 9= necromancer 10= enchanter
* 29= class limits flag 0=
terminate line
* NOTE you can have as many indicator numbers as you like in a line always
* close with a 0 (zero)
*
* mobiles are the same as objects
* X
* 63 150 0
* sets the AFF_SILENT flag and the AFF_INDEX_FLAG on
* All this goes in MERC.H
******************************************************************************/
/*
* new utility macros by TAKA
* test a single character value here
* by testing a single character in the arry and dividing the bit number by 8
* we can tell if the test is true. Or we can set the right value as well this
* way.
*/
#define IS_SET2(flag, bit) ((flag) & \
(bit % 8 == 0 ? H : bit % 8 == 1 ? A : \
bit % 8 == 2 ? B : bit % 8 == 3 ? C : \
bit % 8 == 4 ? D : bit % 8 == 5 ? E : \
bit % 8 == 6 ? F : G ))
#define SET_BIT2(var, bit) ((var) |= \
(bit % 8 == 0 ? H : bit % 8 == 1 ? A : \
bit % 8 == 2 ? B : bit % 8 == 3 ? C : \
bit % 8 == 4 ? D : bit % 8 == 5 ? E : \
bit % 8 == 6 ? F : G))
#define REMOVE_BIT2(var, bit) ((var) &= \
~(bit % 8 == 0 ? H : bit % 8 == 1 ? A : \
bit % 8 == 2 ? B : bit % 8 == 3 ? C : \
bit % 8 == 4 ? D : bit % 8 == 5 ? E : \
bit % 8 == 6 ? F : G))
#define IS_REMORT(ch) ((ch)->pcdata->incarnations >=
2)
/* Class only definitions
* 1-29 reserved for class only flags
* use more if you like
* Change all these to match your own muds needs these are the ones
* I choose to share for illustration purposes.
*/
#define CLASS_MAGE 1
#define CLASS_CLERIC 2
#define CLASS_THIEF 3
#define CLASS_WARRIOR 4
#define CLASS_RANGER 5
#define CLASS_ASSASSIN 6
#define CLASS_PALADIN 7
#define CLASS_WITCH 8
#define CLASS_NECROMANCER 9
#define CLASS_ENCHANTER 10
#define CLASS_BERSERKER 11
#define CLASS_DEATH_KNIGHT 12
#define CLASS_SOLDIER 13
#define CLASS_OPOYA 14
#define CLASS_WICASA 15
#define CLASS_DRUID 16
#define CLASS_TELEPATH 17
#define CLASS_PRIEST 18
#define CLASS_BARD 19
#define CLASS_SAGE 20
#define CLASS_SORCERER 21
#define CLASS_BISHOP 22
#define CLASS_TEMPLAR 23
#define CLASS_MONK 24
#define CLASS_PSIONIST 25
#define CLASS_ONLY 29
/* Race only definitions
* 30-49 reserved for race only flags
* use more if you like
*/
#define R_HUMAN 30
#define R_ELF 31
#define R_DRAGONKIN 32
#define R_BARBARIAN 33
#define R_DWARF 34
#define R_GOBLIN 35
#define R_TROLL 36
#define R_ORC 37
#define R_GIANT 38
#define R_OYATE 39
#define R_HALFELF 40
#define R_HALFORC 41
#define R_HALFGIANT 42
#define R_WEREWOLF 43
#define R_VAMPIRE 44
#define R_LICH 45
#define RACE_ONLY 59
/* Immortal only definitions
* 50-59 used for IMMORTAL/REMORT only flag
*/
#define R_IMMORTAL 60
#define REMORT_ONLY 61
/* Affects data
* 61-150 for affects flags
* use more if you like
*/
#define AFF_OFFENSIVE_SHIELD 71
#define AFF_FEAR 72
#define AFF_SILENCE 73
#define AFF_INDEX_FLAG 150
/* other ideas for flags
* 151-170 immune flags
* 171-190 resist flags
* 191-210 vulnerable flags
* 210-240 room affects flags
*/
#define ROOM_HEAL 210
#define ROOM_RACE 211
#define ROOM_CLASS 212
#define ROOM_CLAN 213
#define ROOM_NOCAST 214
#define ROOM_INDEX 240
/* End of array define setups */
/*
* define size of arrary here to make it so we can dynamically
* control its size. I have tested it up to 299 arrary elements
*
* MAX_NEWAFF is how you add to your bits. Each +1 is 8 new bits.
*
* RACE and CLASS indexs used to dynamically define and use
* for race/class testing see the do_wear procedure in act_obj.c
*/
#define MAX_NEWAFF 30
#define RACE_INDEX 29
#define CLASS_INDEX 1
/*
* Anywhere you need more bits insert something like this
* i will show you an example for objects including object
* loads below.
*/
char newaff[MAX_NEWAFF];
/******************************************************************************
* SETUP ARRAY for multi flag above 32
******************************************************************************/
in obj_index_data at the end add
/* TAKA new affect bit */
char newaff[MAX_NEWAFF];
in the declarations for handler.c add at the end
/* TAKA new affect bit */
char * affect_bit_name2 args( ( OBJ_DATA *obj, CHAR_DATA *ch ) );
/*****************************************************************************
* above i have only given you the example of using array based bits for
* objects. However i use them for rooms, object, characters. I have also
* in many cases reused bits so ROOM_IMMORTAL_ONLY = bit 100 for rooms and
* for objects it could be OBJECT_SPIKES = bit 100.
* the room affect makes a room immortal only where the object affect could
* be on a shield and cuases a little extra damage each time it is struck
* due to the fact it has some defensive spikes.
*****************************************************************************/
in db2.c load_objects after the else if (letter == 'E') add this
/*
* new affects arrary by TAKA
* By using the 0 terminator i can add to my array anytime and
* also not worry about taking too much space in the files.
* Look back at my example above to see this in action, I only
* use the values i want to be on.
*/
else if ( letter == 'X' )
{
int x = 0, y;
/* make sure to clear before use */
for(y = 0; y >= (MAX_NEWAFF * 30); y++)
REMOVE_BIT2(pObjIndex->newaff[(y / 8)], (y));
/*
* allow loop for as many affects as you wish to add
* until 0 is encountered.
*/
for(;;)
{
x = fread_number( fp );
if(x != 0)
SET_BIT2(pObjIndex->newaff[(x / 8)], (x));
else
break;
}
}
in act_wiz.c in do_ostat add somewhere
/* TAKA new affects bit */
sprintf(buf, "{GAlso affected by {W%s{x\n\r",
affect_bit_name2( obj, ch ) );;
send_to_char(buf,ch);
in handler.c add something like this
/*
* Return ascii name of an affect bit 2.
* You will need to maintain this for yourself
* include anything you want returned to stat views
*/
char *affect_bit_name2( OBJ_DATA *obj, CHAR_DATA *ch )
{
static char buf[512];
int i = 0;
buf[0] = '\0';
/*
* by testing the bit IE number/8 tells me the character array
* then the flag i can tell if the bit is on or off
* necromancer = 9 9/8 = 1 that is the char to test char 1
* since all arrays start with value 0 i want 0-7 to be equal
* to char[0]
* necromancer = char[1]
*/
if IS_SET2( obj->pIndexData->newoaff[CLASS_MAGE / 8], (CLASS_MAGE))
strcat( buf, " mage" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_CLERIC / 8], (CLASS_CLERIC))
strcat( buf, " cleric" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_THIEF / 8], (CLASS_THIEF))
strcat( buf, " thief" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_WARRIOR / 8], (CLASS_WARRIOR))
strcat( buf, " warrior" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_RANGER / 8], (CLASS_RANGER))
strcat( buf, " ranger" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_ASSASSIN / 8], (CLASS_ASSASSIN))
strcat( buf, " assassin" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_PALADIN / 8], (CLASS_PALADIN))
strcat( buf, " paladin" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_WITCH / 8], (CLASS_WITCH))
strcat( buf, " witch" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_NECROMANCER / 8],
(CLASS_NECROMANCER))
strcat( buf, " necromancer" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_ENCHANTER / 8],
(CLASS_ENCHANTER))
strcat( buf, " enchanter" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_BERSERKER / 8],
(CLASS_BERSERKER))
strcat( buf, " berserker" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_DEATH_KNIGHT / 8],
(CLASS_DEATH_KNIGHT))
strcat( buf, " death knight" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_SOLDIER / 8], (CLASS_SOLDIER))
strcat( buf, " soldier" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_OPOYA / 8], (CLASS_OPOYA))
strcat( buf, " opoya" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_WICASA / 8], (CLASS_WICASA))
strcat( buf, " wicasa" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_DRUID / 8], (CLASS_DRUID))
strcat( buf, " druid" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_TELEPATH / 8], (CLASS_TELEPATH))
strcat( buf, " telepath" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_BARD / 8], (CLASS_BARD))
strcat( buf, " bard" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_SAGE / 8], (CLASS_SAGE))
strcat( buf, " sage" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_SORCERER / 8], (CLASS_SORCERER))
strcat( buf, " sorcerer" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_BISHOP / 8], (CLASS_BISHOP))
strcat( buf, " bishop" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_TEMPLAR / 8], (CLASS_TEMPLAR))
strcat( buf, " templar" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_MONK / 8], (CLASS_MONK))
strcat( buf, " monk" );
if IS_SET2( obj->pIndexData->newoaff[CLASS_PSIONIST /8], (CLASS_PSIONIST))
strcat( buf, " psionist" );
if IS_SET2( obj->pIndexData->newoaff[R_HUMAN / 8], (R_HUMAN))
strcat( buf, " human" );
if IS_SET2( obj->pIndexData->newoaff[R_ELF /8], (R_ELF))
strcat( buf, " elf" );
if IS_SET2( obj->pIndexData->newoaff[R_DRAGONKIN / 8], (R_DRAGONKIN))
strcat( buf, " dragonkin" );
if IS_SET2( obj->pIndexData->newoaff[R_BARBARIAN / 8], (R_BARBARIAN))
strcat( buf, " barbarian" );
if IS_SET2( obj->pIndexData->newoaff[R_DWARF / 8], (R_DWARF))
strcat( buf, " dwarf" );
if IS_SET2( obj->pIndexData->newoaff[R_GOBLIN / 8], (R_GOBLIN))
strcat( buf, " goblin" );
if IS_SET2( obj->pIndexData->newoaff[R_TROLL / 8], (R_TROLL))
strcat( buf, " troll" );
if IS_SET2( obj->pIndexData->newoaff[R_ORC / 8], (R_ORC))
strcat( buf, " orc" );
if IS_SET2( obj->pIndexData->newoaff[R_GIANT / 8], (R_GIANT))
strcat( buf, " giant" );
if IS_SET2( obj->pIndexData->newoaff[R_OYATE / 8], (R_OYATE))
strcat( buf, " oyate" );
if IS_SET2( obj->pIndexData->newoaff[R_ARCHON / 8], (R_ARCHON))
strcat( buf, " archon" );
if IS_SET2( obj->pIndexData->newoaff[R_SYLVAN / 8], (R_SYLVAN))
strcat( buf, " sylvan" );
if IS_SET2( obj->pIndexData->newoaff[R_DAERGAR / 8], (R_DAERGAR))
strcat( buf, " daergar" );
if IS_SET2( obj->pIndexData->newoaff[R_DROW / 8], (R_DROW))
strcat( buf, " drow" );
if IS_SET2( obj->pIndexData->newoaff[R_DRACON / 8], (R_DRACON))
strcat( buf, " dracon" );
if IS_SET2( obj->pIndexData->newoaff[R_GNOME / 8], (R_GNOME))
strcat( buf, " gnome" );
if IS_SET2( obj->pIndexData->newoaff[R_KYRIE / 8], (R_KYRIE))
strcat( buf, " kyrie" );
if IS_SET2( obj->pIndexData->newoaff[R_SAURIAL / 8], (R_SAURIAL))
strcat( buf, " saurial" );
if IS_SET2( obj->pIndexData->newoaff[R_VAMPIRE / 8], (R_VAMPIRE))
strcat( buf, " vampire" );
if IS_SET2( obj->pIndexData->newoaff[R_TIGRIAT / 8], (R_TIGRIAT))
strcat( buf, " tigriat" );
if IS_SET2( obj->pIndexData->newoaff[R_HALFELF / 8], (R_HALFELF))
strcat( buf, " halfelf" );
if IS_SET2( obj->pIndexData->newoaff[R_HALFORC / 8], (R_HALFORC))
strcat( buf, " halforc" );
if IS_SET2( obj->pIndexData->newoaff[R_HALFGIANT / 8], (R_HALFGIANT))
strcat( buf, " halfgiant" );
if IS_SET2( obj->pIndexData->newoaff[R_WEREWOLF / 8], (R_WEREWOLF))
strcat( buf, " werewolf" );
if IS_SET2( obj->pIndexData->newoaff[R_LICH / 8], (R_LICH))
strcat( buf, " lich" );
if IS_SET2( obj->pIndexData->newoaff[R_IMMORTAL / 8], (R_IMMORTAL))
strcat( buf, " immortal" );
if IS_SET2( obj->pIndexData->newoaff[REMORT_ONLY / 8], (REMORT_ONLY))
strcat( buf, " remort" );
/*
* all your tests should look like these above
* IS_SETX(array[bit number/8], bit number)
* this will make the proper test.
*
* SET_BITX(is the same) and REMOVE_BITX(same format as well)
*/
return ( buf[0] != '\0' ) ? buf+1 : " none";
}
** you will need to include also this routine in the
spell identify but i will not give you all the answers.
Also it is not for OLC YET. If you wish to assist me in
writting the OLC piece i will be happy to credit your work.
But at this time i do not use OLC so i do not care about
OLC. This document was ment as a guideline as much an
explaination on ways to get unlimited bits for your mud
it works well for me.
\
These are some of your answers drop me a line if you still need help.
-Taka Head coder of GhostMUD
[EMAIL PROTECTED]
209.83.132.85 port 3333
ghost dancer mud
bb12.betterbox.net:3333
For my snippets
http://ghostmud.betterbox.net
GhostMUD 3.0 is publically available!
GhostMUD is a ROM derivative and is bound by all licenses of ROM/MERC/DIKU as
well as GhostMUDs own license.
Thanks Taka
Here are some of the changes i have made so far to arrive at version 3.0
unremort/remort code (multi level remort)
long vnums
hp/mana/move expanded
training of moves
mortskill/mortspell
comm stat
consolidated open channel code
help stores any unfound results in a file
an immortal says - fixed as not to be confused with someone says
add battle prompts including improved battle prompt accurate to 5%
add current hp/mana/move seen in percentage form
** remort was the snippet but has been modified to allow multi level remort
and to allow unremort code
cleaned up all but 13 compile warnings also :)
force tick
banking system v2.0 (no bank card or atm support yet)
color login 100%
wizi entry for imms including wizi level selection
greet people entering the mud
bid fairwell as they leave
colored spells/skills
score command formated
affects command colored
rename
knock
version file support (command included)
mud time added
flexable wear location code added
wear locations made same as amarons and added tail, ankle_l, ankle_r,
cup/underwear, stomach ** all new
ac updates to include all wear locations new and rings for ac
format_obj_tochar colorized and formated to be less spammy
show_char_to_char colorized and formated to be less spammy
autolist
autoconsume
consume command
added stock prompt
stock wiznet
mud auto gratz players for a level
mud autorestores players for a level
dual wield added (not tested yet - command second not added yet)
who list race name fixed
elf was a race and was not??? now is fixed..
new races
dragonkin, barbarian,orc,troll,oyate
halfelf,halforc,halfgiant,werewolf,lich
commands organized for reforated wizhelp
reformated wizhelp added
act_comm.c ------ coloring
emote colored
pmote colored
do_qui colored
do_quit colored
do_save colored
do_rent colored
do_follow colored
add_follower colored
nuke_pet colored
stop_follower colored
do_order colored
do_group colored
do_split colored
do_gtell colored
new affect bit for objects any way (array based affects bit)
added 21 new classes
added scan command (3) rooms in each direction.
remort bonus is in
2x prac/train
hp/mana/move exp gain = (hp + ((hp * # times remorted) / 10)
move and mana same bonus.
banking code version 2.0 implemented
added atm support (flagable to allow/disallow it)
added silver deposit/withdrawal/conversion support
atm has daily limits
colored banking code
set added
train, bank gold, bank silver, shares 1-4, and incarnations
- added hours to set mob command and color
- upped train/prac to max of 250/999
- corlorized the set command
stat added
trian, bank gold/silver, shares 1-4 and incarnations
-recolored stat also
act_comm
tell/reply colored
delete colored
channels colored
deaf/quiet/replay colored
fixed open channel color problems
clann/immortal channels colored
say/yell colored
quit fixed coloring
act_enter
enter colored
act_info
char > char 1 colored
char > char colored
scroll command colored
auto
assist/consume/exit/damage
gold/loot/sac/split/all
brief-compact-show-combine
------colored
prompt colored
noloot/nofolow/nosummon colored
look colored -do_read
examine colored
exit colored
worth colored
time colored
weather colored
help colored
whois colored
inventory colored
count colored
compare colored
where colored
consider colored
description colored
report colored
practice colored-added all spells together, all skills together and a
line break between them as well as titles
whimpy colored
password colored and completion message improved
title colored and completion message improved
long vnums in/tested/working
added fread_long_number routine for vnum handles
fixed bank update on restart of the mud
added new class ninja
added circle skill
added butcher skill
balanced skills between 26 classes.
fixed mob calculation to make hp/mana/move above 32k not go negative!
fixed wear off message
giant strength
mslay - slay mobs
gslay - global slay with punishment message and force read rules
- pyrox idea (not limited to a room)
where shows credits (area name)
capital P on poke and peer removed.
slay has been changed slay name ! slays anywhere in the world
healer can now heal cancel
search skill added
hide changed to allow hiding items
log bad password attempts
-inform char if they are playing
force remove and sieze equipment
world peace
arealist all area list with vnums
- for mortals it lists areas with levels
added signal handling
memory perm increase checking WIZ_NET function
- fixed minor error on display perms
seperated olc from wizhelp
moved wield and wizlist up in the commands list
fixed omni to display levels in order and not show imms in mortal list portion
slay has been reset only max level imps can slay global
reset password
getpw
erwin S andersons disable command snippet added
area now lists by level
lore fixed
lpfile, ulpfile load/unload player file
area also sorted :)
clone x*
get x*
give x*
put x*
drop x*
whowas (basic for now)
home recall (selectable configurable by imp)
do_areas fixed so you can specify a level and colored and sorted.
level 2 backstab being added assassinate
changed char_to_char_0 to color output to make room/character different
added spells
sate, quench, adrenaline, stone meld, screen, acid rain, ice rain, fire rain
acid storm, ice strom, fire storm, damage, hit
SKIN: mud, moss, bark, steel, emerald, ruby, diamond
Failure messages:
blindness, calm
imms nolonger can destroy a weapon/armor with enchant spells
fixed whowas time for >= level
history added
whowas now shows history.
some log fixes to better assist tracking of errors
apply errors and new character errors
reset colors on look for obj, mob and room title
changed lightning bolt to lightning strike
added do_purg to stop accidental purging by high level imms
<>added spells------------------------------------------------------------------
ego whip, mind flail, psychic thrust, psychic crush,
mystic armor, mind bolt, bloddy tears, fighting trance,
ice bolt, lightning bolt, fire bolt, acid bolt, holy bolt, gas bolt,
fireblast, iceblast, electricblast, gasblast, lightningblast,
holyblast
<>groups added------------------------------------------------------------------
blood, rain, nature, bererker spells, skins, mental ofensive,
opoya only, bolt spells
<>skills added------------------------------------------------------------------
mpill, brew
<>Color act_wiz.c
skipping guild for now
outfit, nochannel, smote, poofin, poofout,deny,
disconnect, pardon, echo, pecho, zecho, recho,
transfer, at, goto, violate, stat
act_info.c
colored
description, report, wimpy, practice, password
jail, search
Fixed second
Fixed AUTODAMAGE now shows damage sustained.
end snip from Taka------------------------------------------------------------
there guys from Taka
thanks
Joe