from here on, all use_* functions return the number of items used, and use_item handles removing them from the unit (or the pool).
rules for E3 and E4 some missing files.