ATTACK_DATA *next; // only used in clean up and recycling purposes, as in putting it into a free pointer list to re-use it like how char_data works
char *string; // A string for the name of the attack, it gets used by damage_mes and in my parry, dodge and shield block functions
long raw_damage; // Unmodified damage, both one_attack and raw_damage modify this as it passes through (sanc, hitting a sleeping victim etc etc)
int damtype; // Used in raw_damage to determine res/vuln/imm flags or however you have that set up.
int raw_accuracy; // your 1-100 range, I also included -1 as being an unavoidable hit
long flags; // I defined ones for parriable and shield block'abe etc, you'll want a flag for magic attack so that one_attack knows to check your saves system against it
OBJ_DATA *obj; // typically the wield weapon but good if you want alternate attacks where an object is involved(dual wield immediately apparent)
attack->defense_flags=ATTACK_DEF_SB|ATTACK_MAGIC; // shield block'able, also this attack is magic so anti-magic defenses are called within one_attack