private void initializeAge() {
    final Attribute attrEdu = investigator.getAttribute("EDU");
    final int baseAge = 6 + attrEdu.getUnmodifiedValue();
    NumberPicker agePicker = (NumberPicker) findViewById(R.id.tv_age);
    agePicker.setOnChangeListener(
        new OnChangedListener() {

          @Override
          public void onChanged(NumberPicker picker, int oldVal, int newVal) {
            investigator.setAge(newVal);
            int selectedAge = newVal;
            int ageDiff = selectedAge - baseAge;
            int extraEdu = ageDiff / 10;
            int currentEdu = attrEdu.getMod();
            attrEdu.setMod(extraEdu);
            if (extraEdu != currentEdu) {
              calculateDynamicSkills(attrEdu, true);
            }
            calculateDerivedAttributes();
            int newMustDrop = Math.max(0, (selectedAge / 10) - 3);
            if (newMustDrop != mustDrop) {
              mustDrop = newMustDrop;
              updateMustDrop();
            }
          }
        });
  }
  private void rerollBasicAttributes() {
    StringBuffer log = new StringBuffer();
    investigator.rerollBasicAttributes(log);
    ((TextView) findViewById(R.id.log)).setText(log.toString());

    Attribute attrDex = investigator.getAttribute("DEX");
    Attribute attrEdu = investigator.getAttribute("EDU");
    calculateDynamicSkills(attrDex, false);
    calculateDynamicSkills(attrEdu, false);
    populateSkillsTable();
    findViewById(R.id.tv_age).setVisibility(View.VISIBLE);
  }
  private void calculateDerivedAttributes() {
    int attrPow = investigator.getAttribute("POW").getTotal();
    int attrSiz = investigator.getAttribute("SIZ").getTotal();
    int attrStr = investigator.getAttribute("STR").getTotal();
    int attrCon = investigator.getAttribute("CON").getTotal();
    int attrInt = investigator.getAttribute("INT").getTotal();
    int attrEdu = investigator.getAttribute("EDU").getTotal();

    setIntValue(R.id.tv_san, 5 * attrPow);
    setIntValue(R.id.tv_idea, 5 * attrInt);
    setIntValue(R.id.tv_luck, 5 * attrPow);
    setIntValue(R.id.tv_know, Math.min(99, 5 * attrEdu));

    // Hit points
    setIntValue(R.id.tv_hp, roundUpDiv(attrSiz + attrCon, 2));

    // Str bonus
    ((TextView) findViewById(R.id.tv_dam)).setText(investigator.getDamBonus());

    // Points
    setIntValue(R.id.tv_points_occ, 20 * attrEdu);
    setIntValue(R.id.tv_points_per, 10 * attrInt);
  }
 private void loadInvestigator(Investigator investigator, String saveName) {
   dbAdapter.loadInvestigator(investigator, saveName);
   findViewById(R.id.tv_age).setVisibility(View.VISIBLE);
   initializeAge();
   NumberPicker picker = (NumberPicker) findViewById(R.id.tv_age);
   picker.setCurrentAndNotify(investigator.getAge());
   resetSeekBars();
   calculateDerivedAttributes();
   updateMustDrop();
   // Log.d( "LOAD_INVESTIGATOR: ", investigator.getSkills().toString() );
   Attribute attrDex = investigator.getAttribute("DEX");
   Attribute attrEdu = investigator.getAttribute("EDU");
   calculateDynamicSkills(attrDex, false);
   calculateDynamicSkills(attrEdu, false);
   populateSkillsTable();
 }