{* Program that works!
** Shows use of Variant Records.
** roleplaying Type implemented.
*}
Uses Crt;
Type
  CharType = (Warrior, Wizard);
  CharacterType = Record
                    Name: String[16];
                    Health, MaxHealth: Integer;
                    Char: CharType;
                    Case CharType of
                      Warrior: ( DamagetoHit: Integer);
                      Wizard : ( Spell, MaxSpell: Integer);
                  end;

Var
  Character: CharacterType;
  S: String;

begin

  { select Character Type }
  Writeln;
  Writeln('Select Character Type:');
  Writeln(' [ 1 ] Warrior');
  Writeln(' [ 2 ] Wizard');
  Readln(S);

  With Character do
   begin
     if S = '1' then Character.Char := Warrior else
       Character.Char := Wizard;

     { set fixed Variables }
     Write('Enter Character name: ');
     Readln(Name);
     Write('Enter Character health value: ');
     Readln(MaxHealth);
     Health := MaxHealth;
     { set Variant Variables }
     Case Char of
       Warrior: begin
                  Write('Enter ', Name, '''s hit value: ');
                  Readln(Character.DamagetoHit);
                end;
       Wizard:  begin
                  Write('Enter ', Name, '''s spell value: ');
                  Readln(MaxSpell);
                  Spell := MaxSpell;
                end;
     end;
   end;

  With Character do     { display Character info }
    begin
      { fixed Variables }
      Writeln;
      Writeln('*** Your Character:');
      Writeln('    Name: ', Name);
      Writeln('  Health: ', Health,'/',MaxHealth);
      { Variant Variables }
      Case Char of
        Warrior: Writeln('     Hit: ', DamagetoHit);
        Wizard:  Writeln('   Spell: ', Spell, '/', MaxSpell);
      end;
    end;
end.
