Program Initiate;
Uses crt, sysutils, dos, windows, process;
Type
TChar = Record //type char
levid: String; //used for checking if current record is correct.
name: String; //name
password: String; //password
weight: integer; //current weight being carried
mweight: integer; //max weight that can be carried
oweight: integer; //weight before equip
hp: integer; //health point
mhp: integer; //max hp
mp: integer; //mind power
mmp: integer; //max mp
oatk: integer; //atk before weapon. used in equipping
atk: integer; //attack
def: integer; //defense
ospd: integer; //spd before weapon. used in equipping
spd: integer; //speed
lev: integer; //level
levup : boolean;
race: String; //race
location: String; //origin on map, IE, eastern, southern, western, nothern, underdark
weapon: String; //weapon currently equipped
armor: String; //armor set. no individual pieces
exp: integer; //experience
exp_rate: real; //experience rate, is multiplier of received exp
sex: String; //sex/gender
luck: integer; //Chance variable, luck
weapons: Array[1..51] Of String; //all of the below must be 1 more than they actually are, so the page system will work.
armors: Array[1..51] Of String;
potions: Array[1..51] Of String;
spellbooks: Array[1..51] Of String;
items: Array[1..51] Of String;
End;
techar = Record //type enemy char
weight: integer;
mweight: integer;
oweight: integer;
hp: integer;
mhp: integer;
mp: integer;
mmp: integer;
atk: integer;
oatk: integer;
def: integer;
spd: integer;
ospd: integer;
lev: integer;
levup : boolean;
race: String;
weapon: String;
armorset: String;
exp: integer;
exp_rate: real;
sex: String;
name: String;
weapons: Array[1..51] Of String;
armors: Array[1..51] Of String;
potions: Array[1..51] Of String;
spellbooks: Array[1..51] Of String;
items: Array[1..51] Of String;
End;
{for future reference:
A record must have a variable reference, IE, a variable of the type record, or it will not allow functions to be performed on the record. IE, var char :
tchar; is a variable char of type record tchar. You cannot reador write this, but you can use this to write to a data file :) }
Var
//records
char : tchar; //character
echar : techar; //enemy_character
temp : tchar;
//main menu stuff
gametype : integer; //1, 2, 3, 4, or 5: New, Load, Password, Quit, and Credits.
//loading stuff
auth : boolean; //is the user authorized?
username : String; //actual username in game
user : String; //comparison for loading
password : String; //actual password in game
pass : String; //comparison for loading
save : String; //used for multiple purposes, Check if user wants to save (y/n),
//check type of save (new registration, current level/mission)
//misc stuff
x, y, z : integer;
entry : String;
entryi : integer;
scroll : Array[1..21] Of String;
txt : text; //for text file storage
dat : File Of tchar; //used for saving save files. writes record to file.
choice : integer; //general use, for picking menu items etc
sec, hour, min, ms: word; //time, used for random number generation. ms = milli-seconds
hwindow : longword; //for opening external apps
turncomplete : boolean; //is players turn complete? if not, return to menu
listnuma : integer; //page system for the inventory
listnumx : integer; //page system for the inventory
listnumz : integer; //page system for the inventory
xy : integer;
//inventory functions
weaponid : integer; //when trying to equip a new weapon, save the weaponid to file so external dll can read it
potionid : integer;
potion : string; //name of potion
weapon : String; //name of weapon to equip.
randwep : integer; //the random weapon to be picked when you win a battle.
randpot : integer;
weaponreceived : boolean; //you received a weapon from your battle, true, else false.
potionreceived : boolean;
//char functions
curturn : integer; //current turn, p1 or p2
spd_com : String; //speed comparison
spd_bool : boolean; //speed comparison
chance : boolean;
//Notes:
//MP is not Magical Power as normally thought, but rather Mind Power.
//When you cast a spell, it drains your mind power, or resistance to
//magical attacks/attack ability. It does not affect your actual attack
//but rather makes you MORE vulnerable to a magical attack. As your mind
//power decreases, so does the damage dealt by magical attacks.
//battle functions
critical : boolean; //if it is a critical hit (triple the atk or more) then true
atkbonus : integer;
mpbonus : integer;
defbonus : integer;
expbonus : integer;
lchar : boolean; //did Char lose in battle?
lechar : boolean; //did eChar lose in battle?
//external procedures.
Procedure inventory; external 'inventory.dll';
Procedure returnweapon; external 'inventory.dll';
procedure potions; external 'inventory.dll';
procedure returnpotion; external 'inventory.dll';
procedure battledisp; forward;
//interaction stuff
Function TopMenu: Integer;
Begin
textcolor(2);
Write('F');
Delay(100);
Write('i');
Delay(100);
write('r');
Delay(100);
Write('s');
Delay(100);
write('t');
Delay(100);
Write(' ');
Delay(100);
write('I');
Delay(100);
Write('n');
Delay(100);
write('i');
Delay(100);
Write('t');
Delay(100);
write('i');
Delay(100);
Write('a');
Delay(100);
write('t');
Delay(100);
Writeln('e');
Delay(100);
Writeln;
writeln('1 New Game');
Delay(100);
writeln('2 Load Game');
Delay(100);
writeln('3 Password');
Delay(100);
writeln('4 Quit');
Delay(100);
writeln('5 Credits');
delay(100);
textcolor(7);
readln(topmenu);
End;
Procedure dispback;
//sets up the display for writing the backpack list to. Mostly
//just for visual effects, as its all text based, after all...
Begin
GotoXy(1, 1);
Writeln('+');
{Bottom Side}
For entryi := 2 To 79 Do
Begin
gotoxy(entryi, 23);
writeln('-');
End;
GotoXy(80, 23);
Writeln('+');
{Top Side}
For entryi := 2 To 79 Do
Begin
gotoxy(entryi, 1);
writeln('-');
End;
GotoXy(80, 1);
Writeln('+');
{entrybar}
textbackground(blue);
For entryi := 1 To 80 Do
Begin
gotoxy(entryi, 24);
writeln(' ');
End;
textbackground(black);
{Right/Left Side Removed to make easier formatting}
gotoxy(1, 23);
writeln('+');
GotoXy(5, 23);
Writeln('v');
gotoxy(5, 22);
writeln('Press Enter Continue...');
End;
Procedure PickRandomWeapon;
begin
echar.weapons[1] := 'Fist';
char.weapons[1] := 'Fist';
randomize;
randwep := random(5);
assign(txt,'io.dat');
rewrite(txt);
writeln(txt,randwep);
close(txt);
returnweapon;
assign(txt,'io.dat');
reset(txt);
randwep := 1;
repeat
if char.weapons[randwep] <> '' then randwep := randwep+1;
until char.weapons[randwep] = '';
readln(txt,char.weapons[randwep]);
close(txt);
if char.weapons[randwep] = 'Fist' then begin
WeaponReceived := false;
char.weapons[randwep] := '';
end else begin
WeaponReceived := true;
end;
end;
Procedure PickRandomPotion;
begin
randomize;
randpot := random(5);
assign(txt,'io.dat');
rewrite(txt);
writeln(txt,randwep);
close(txt);
returnpotion;
assign(txt,'io.dat');
reset(txt);
randpot := 1;
repeat
if char.potions[randpot] <> '' then randpot := randpot+1;
until char.potions[randpot] = '';
readln(txt,char.potions[randpot]);
close(txt);
if char.potions[randpot] = '' then begin
PotionReceived := false;
char.potions[randpot] := '';
end else begin
PotionReceived := true;
end;
end;
Procedure displaybackpack(target: integer; btype: integer);
//btype is the type of contents to display. in the array,
//btype0 is your weapons, btype1 your armor sets,
//btype2 your potions, btype3 your spellbooks,
//and btype4 all misc items.
Begin
clrscr;
If (target = 0) And (btype = 0) Then
Begin
choice := 1;
listnuma := 16;
xy := 2;
Repeat
dispback;
If char.weapons[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', char.weapons[choice]);
xy := xy + 1;
turncomplete := false;
choice := choice + 1;
End
Else
Begin
turncomplete := true;
End;
Until (choice = listnuma + 1) Or (turncomplete = true);
xy := 2;
readln;
ClrScr;
If turncomplete = false Then
Begin
listnumx := listnuma;
listnumz := listnuma + listnuma;
Repeat
xy := 2;
Repeat
dispback;
If char.weapons[choice] = '' Then turncomplete := true;
If char.weapons[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', char.weapons[choice]);
xy := xy + 1;
choice := choice + 1;
turncomplete := false;
End;
Until (choice = listnumz) Or (turncomplete = true);
listnumz := listnumz + listnuma;
readln;
ClrScr;
Until turncomplete = true;
End; //turn complete = false then begin
End else if (target = 0) and (btype = 1) then begin //end target = 0, btype = 0
end else if (target = 0) and (btype = 2) then begin
choice := 1;
listnuma := 16;
xy := 2;
Repeat
dispback;
If char.potions[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', char.potions[choice]);
xy := xy + 1;
turncomplete := false;
choice := choice + 1;
End
Else
Begin
turncomplete := true;
End;
Until (choice = listnuma + 1) Or (turncomplete = true);
xy := 2;
readln;
ClrScr;
If turncomplete = false Then
Begin
listnumx := listnuma;
listnumz := listnuma + listnuma;
Repeat
xy := 2;
Repeat
dispback;
If char.potions[choice] = '' Then turncomplete := true;
If char.potions[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', char.potions[choice]);
xy := xy + 1;
choice := choice + 1;
turncomplete := false;
End;
Until (choice = listnumz) Or (turncomplete = true);
listnumz := listnumz + listnuma;
readln;
ClrScr;
Until turncomplete = true;
End; //turn complete = false then begin
end;
////////////////////////////////////////////////////
If (target = 1) And (btype = 0) Then
Begin
choice := 1;
listnuma := 16;
xy := 2;
Repeat
dispback;
If echar.weapons[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', echar.weapons[choice]);
xy := xy + 1;
turncomplete := false;
choice := choice + 1;
End
Else
Begin
turncomplete := true;
End;
Until (choice = listnuma + 1) Or (turncomplete = true);
xy := 2;
readln;
ClrScr;
If turncomplete = false Then
Begin
listnumx := listnuma;
listnumz := listnuma + listnuma;
Repeat
xy := 2;
Repeat
dispback;
If echar.weapons[choice] = '' Then turncomplete := true;
If echar.weapons[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', echar.weapons[choice]);
xy := xy + 1;
choice := choice + 1;
turncomplete := false;
End;
Until (choice = listnumz) Or (turncomplete = true);
listnumz := listnumz + listnuma;
readln;
ClrScr;
Until turncomplete = true;
End; //turn complete = false then begin
End else if (target = 1) and (btype = 1) then begin //end target = 0, btype = 0
end else if (target = 1) and (btype = 2) then begin
choice := 1;
listnuma := 16;
xy := 2;
Repeat
dispback;
If echar.potions[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', echar.potions[choice]);
xy := xy + 1;
turncomplete := false;
choice := choice + 1;
End
Else
Begin
turncomplete := true;
End;
Until (choice = listnuma + 1) Or (turncomplete = true);
xy := 2;
readln;
ClrScr;
If turncomplete = false Then
Begin
listnumx := listnuma;
listnumz := listnuma + listnuma;
Repeat
xy := 2;
Repeat
dispback;
If echar.potions[choice] = '' Then turncomplete := true;
If echar.potions[choice] <> '' Then
Begin
gotoxy(1, xy);
Writeln('Slot ', choice, ': ', echar.potions[choice]);
xy := xy + 1;
choice := choice + 1;
turncomplete := false;
End;
Until (choice = listnumz) Or (turncomplete = true);
listnumz := listnumz + listnuma;
readln;
ClrScr;
Until turncomplete = true;
End; //turn complete = false then begin
end;; //target = 1, btype = 0
turncomplete := false;
End;
Procedure savegame;
Begin
assign(txt, 'data.dat');
append(txt);
writeln(txt, '@');
writeln(txt, char.name);
writeln(txt, char.password);
writeln(txt, char.levid);
writeln(txt, char.weight);
writeln(txt, char.mweight);
writeln(txt, char.hp);
writeln(txt, char.mhp);
writeln(txt, char.mp);
writeln(txt, char.mmp);
writeln(txt, char.atk);
writeln(txt, char.def);
writeln(txt, char.spd);
writeln(txt, char.lev);
writeln(txt, char.race);
writeln(txt, char.location);
writeln(txt, char.weapon);
writeln(txt, char.exp);
writeln(txt, char.exp_rate);
writeln(txt, char.sex);
writeln(txt, '!');
close(txt);
End;
Procedure loadchar;
Begin
textcolor(2);
assign(txt, 'data.dat');
reset(txt);
clrscr;
writeln('Please enter your username.');
textcolor(12);
readln(user);
textcolor(2);
writeln('Please enter your password.');
textcolor(12);
readln(pass);
textcolor(2);
Repeat
readln(txt, entry);
If entry = '@' Then
Begin
readln(txt, char.name);
readln(txt, char.password);
//check user/pass
If (char.name = user) And (char.password = pass) Then
Begin
//user and pass correct
readln(txt, char.levid);
readln(txt, char.weight);
readln(txt, char.mweight);
readln(txt, char.hp);
readln(txt, char.mhp);
readln(txt, char.mp);
readln(txt, char.mmp);
readln(txt, char.atk);
readln(txt, char.def);
readln(txt, char.spd);
readln(txt, char.lev);
readln(txt, char.race);
readln(txt, char.location);
readln(txt, char.weapon);
readln(txt, char.exp);
readln(txt, char.exp_rate);
readln(txt, char.sex);
End
Else
Repeat readln(txt, entry);
Until entry = '!';
End;
Until (user = char.name) And (pass = char.password) Or (eof(txt));
If (user = char.name) And (pass = char.password) Then auth := true;
If (eof(txt)) Then
Begin
auth := false;
End;
//authentication complete
close(txt);
End;
Procedure unloadchar;
//used for unloading the character before loading a new one, to prevent conflicts.
Begin
char.name := '';
char.password := '';
char.levid := '';
char.weight := 0;
char.mweight := 0;
char.hp := 0;
char.mp := 0;
char.atk := 0;
char.def := 0;
char.spd := 0;
char.lev := 0;
char.race := '';
char.location := '';
char.weapon := '';
char.exp := 0;
char.exp_rate := 0;
char.sex := '';
End;
//Character Stuff
Procedure IOInventory(target: integer);
Begin
///////////////////////////
if weapon = 'FIST' then
begin
weaponid := 0;
end else if weapon = 'SWORD' Then Begin
weaponid := 1;
End Else If weapon = 'AXE' Then Begin
weaponid := 2;
End Else If weapon = 'DAGGER' Then Begin
weaponid := 3;
End Else If weapon = 'TWO HANDED SWORD' Then Begin
weaponid := 4;
End Else If weapon = 'BASTARD SWORD' Then Begin
weaponid := 5;
End;
///////////////////////////
assign(txt, 'io.dat');
rewrite(txt);
writeln(txt, target);
writeln(txt, weaponid);
If target = 0 Then
Begin //char.*
char.oatk := char.atk;
char.ospd := char.spd;
char.oweight := char.weight;
writeln(txt, char.atk); //char's atk
writeln(txt, char.spd);
writeln(txt, char.weight);
End
Else If target = 1 Then
Begin //echar.e_*
echar.oatk := echar.atk;
echar.ospd := echar.spd;
echar.oweight := echar.weight;
writeln(txt, echar.atk);
writeln(txt, echar.spd);
writeln(txt, echar.weight);
End;
close(txt);
Inventory;
assign(txt, 'io.dat');
reset(txt);
If target = 0 Then
Begin
readln(txt, char.weapon);
if (char.weapon <> 'Fist') and (char.weapon <> '') then begin
readln(txt, char.atk);
readln(txt, char.spd);
readln(txt, char.weight);
end else begin
char.atk := char.oatk;
char.spd := char.ospd;
char.weight := char.oweight;
end;
End
Else If target = 1 Then
Begin
readln(txt, echar.weapon);
if (echar.weapon <> 'Fist') and (echar.weapon <> '') then begin
readln(txt, echar.atk);
readln(txt, echar.spd);
readln(txt, echar.weight);
end else begin
echar.atk := echar.oatk;
echar.spd := echar.ospd;
echar.weight := echar.oweight;
end;
End;
close(txt);
End;
Procedure IOPotions(target: integer);
var potiontarget,potiontype : string;
potiondamage: integer;
begin
//determine potionid
if potion = 'No Potion' then potionid := 0 else if potion = 'Small HP Vial' then potionid := 1
else if potion = 'Small MP Vial' then potionid := 2 else if potion = 'Large HP Vial' then potionid := 3
else if potion = 'Large MP Vial' then potionid := 4 else if potion = 'Explosive Vial' then potionid := 5;
/////////////////////
assign(txt,'io.dat');
rewrite(txt);
writeln(txt,target);
writeln(txt,potionid);
close(txt);
potions;
assign(txt,'io.dat');
reset(txt);
readln(txt,potion);
readln(txt,potiontype);
readln(txt,potiontarget);
readln(txt,potiondamage);
close(txt);
if potiontype = 'HEAL' then begin
if target = 0 then begin
battledisp;
textcolor(12);
Writeln(' /________________________________\ ');
Writeln(' |Type the number of your choice. | ');
writeln(' |1.. Attack With Melee | ');
writeln(' |2.. Magic.. | ');
textcolor(2);
Writeln(' |3.. Use Potion.. | ');
textcolor(12);
Writeln(' |4.. Menu.. | ');
writeln(' \_v______________________________/ ');
textcolor(7);
if potiontarget = 'HP' then begin
gotoxy(21, 24);
char.hp := char.hp+potiondamage;
if char.hp > char.mhp then char.hp := char.mhp;
write('You used a ',potion,' to heal ',potiondamage,' HP! You now have ',char.hp,' HP!');
readln;
end else if potiontarget = 'MP' then begin
gotoxy(21, 24);
char.mp := char.mp+potiondamage;
if char.mp > char.mmp then char.mp := char.mmp;
write('You used a ',potion,' to heal ',potiondamage,' MP! You now have ',char.mp,' MP!');
read;
end;
end else if target = 1 then begin
battledisp;
textcolor(2);
Writeln(' /________________________________\ ');
Writeln(' |Type the number of your choice. | ');
writeln(' |1.. Attack With Melee | ');
writeln(' |2.. Magic.. | ');
textcolor(12);
Writeln(' |3.. Use Potion.. | ');
textcolor(2);
Writeln(' |4.. Menu.. | ');
writeln(' \_v______________________________/ ');
textcolor(7);
if potiontarget = 'HP' then begin
gotoxy(21, 24);
echar.hp := echar.hp+potiondamage;
if echar.hp > echar.mhp then echar.hp := echar.mhp;
write(echar.name,' used a ',potion,' to heal ',potiondamage,' HP! You now have ',echar.hp,' HP!');
readln;
end else if potiontarget = 'MP' then begin
gotoxy(21, 24);
echar.mp := echar.mp+potiondamage;
if echar.mp > echar.mmp then echar.mp := echar.mmp;
write(echar.name,' used a ',potion,' to heal ',potiondamage,' MP! You now have ',echar.mp,' MP!');
readln;
end;
end;
end;
if potiontype = 'DAMAGE' then begin
if target = 0 then begin //p2 attacking p1
battledisp;
textcolor(2);
Writeln(' /________________________________\ ');
Writeln(' |Type the number of your choice. | ');
writeln(' |1.. Attack With Melee | ');
writeln(' |2.. Magic.. | ');
textcolor(12);
Writeln(' |3.. Use Potion.. | ');
textcolor(2);
Writeln(' |4.. Menu.. | ');
writeln(' \_v______________________________/ ');
textcolor(7);
if potiontarget = 'HP' then begin
gotoxy(21, 24);
writeln(echar.name,' used a ',potion,' to inflict ',potiondamage,' damage on ',char.name,'s HP!');
char.hp := char.hp-potiondamage;
end else if potiontarget = 'MP' then begin
gotoxy(21, 24);
writeln(echar.name,' used a ',potion,' to inflict ',potiondamage,' damage on ',char.name,'s MP!');
char.mp := char.mp-potiondamage;
end;
end else if target = 1 then begin //p1 attacking p2
battledisp;
textcolor(12);
Writeln(' /________________________________\ ');
Writeln(' |Type the number of your choice. | ');
writeln(' |1.. Attack With Melee | ');
writeln(' |2.. Magic.. | ');
textcolor(2);
Writeln(' |3.. Use Potion.. | ');
textcolor(12);
Writeln(' |4.. Menu.. | ');
writeln(' \_v______________________________/ ');
textcolor(7);
if potiontarget = 'HP' then begin
gotoxy(21, 24);
writeln(char.name,' used a ',potion,' to inflict ',potiondamage,' damage on ',echar.name,'s HP!');
echar.hp := echar.hp-potiondamage;
end else if potiontarget = 'MP' then begin
gotoxy(21, 24);
writeln(char.name,' used a ',potion,' to inflict ',potiondamage,' damage on ',echar.name,'s HP!');
echar.mp := echar.mp-potiondamage;
end;
end;
end;
end;
Procedure equipweapon(target: integer);
//if target = 0 then equip to player1, = 1 then player 2.
Begin
clrscr;
If target = 0 Then
Begin
If (char.weapon <> '') and (char.weapon <> 'Fist') Then
Begin
char.atk := char.oatk;
char.spd := char.ospd;
char.weight := char.oweight;
End;
clrscr;
Writeln('Your backpack will now be displayed in a page format.');
Writeln('Remember the slot # of the weapon you want to use,');
writeln('as you will need it to equip your new weapon.');
writeln('Press enter to continue.');
readln;
DisplayBackpack(0, 0);
End
Else If target = 1 Then
Begin
If (echar.weapon <> '') and (echar.weapon <> 'Fist') Then
Begin
echar.atk := echar.oatk;
echar.spd := echar.ospd;
echar.weight := echar.oweight;
End;
clrscr;
Writeln('Your backpack will now be displayed in a page format.');
Writeln('Remember the slot # of the weapon you want to use,');
writeln('as you will need it to equip your new weapon.');
writeln('Press enter to continue.');
readln;
DisplayBackpack(1, 0);
End;
clrscr;
writeln('Ok, now what slot # do you wish to equip?');
readln(entryi);
If target = 0 Then
Begin
weapon := char.weapons[entryi];
For entryi := 1 To length(weapon) Do
weapon[entryi] := upcase(weapon[entryi]);
End
Else If target = 1 Then
Begin
weapon := echar.weapons[entryi];
For entryi := 1 To length(weapon) Do
weapon[entryi] := upcase(weapon[entryi]);
End;
IOInventory(target);
If char.spd < 1 Then char.spd := 1;
If echar.spd < 1 Then echar.spd := 3;
End;
Procedure equippotion(target: integer);
//if target = 0 then equip to player1, = 1 then player 2.
Begin
clrscr;
If target = 0 Then
Begin
clrscr;
Writeln('Your backpack will now be displayed in a page format.');
Writeln('Remember the slot # of the potion you want to use,');
writeln('as you will need it to equip your new weapon.');
writeln('Press enter to continue.');
readln;
DisplayBackpack(0, 2);
End
Else If target = 1 Then
Begin
clrscr;
Writeln('Your backpack will now be displayed in a page format.');
Writeln('Remember the slot # of the potion you want to use,');
writeln('as you will need it to equip your new weapon.');
writeln('Press enter to continue.');
readln;
DisplayBackpack(1, 2);
End;
clrscr;
writeln('Ok, now what slot # do you wish to equip?');
readln(entryi);
If target = 0 Then
Begin
potion := char.potions[entryi];
writeln('Potion : ',potion);
delay(1500);
{For entryi := 1 To length(potion) Do
potion[entryi] := upcase(potion[entryi])}
End
Else If target = 1 Then
Begin
potion := echar.potions[entryi];
writeln('Potion : ',potion);
delay(1500);
{For entryi := 1 To length(potion) Do
potion[entryi] := upcase(potion[entryi]);}
End;
IOPotions(target);
End;
Procedure equiparmor(target: integer);
Begin
End;
Procedure AddRandNum(target: integer; stat: String);
Var
store : integer;
//if target is 0, then the number should be added
//to player1/char. Likewise, if it is 1, then it
//should be added to echar/player2. Stat refers
//to the stat this should be added to. Acceptable
//values are: ATK, DEF, MP, and EXP.
Begin
DecodeTime(Time, hour, min, sec, ms);
If target = 0 Then
Begin
if stat = 'CHANCE' then begin
randomize;
store := random(50);
if store > 40 then store := 0 else if store > 30 then store := 1 else if store > 20 then store := 2 else if store > 10 then store := 3 else if store > 4 then store := 4;
case store of
0 : begin
store := char.atk-char.spd+char.weight-char.def*char.luck;
if store > 20+char.luck then chance := true;
if store div 2 > 15+char.luck then chance := false;
randomize;
if (chance = false) and (store * 2+char.luck > 25+random(15)) and (store * 2 < random(15)) then chance := true;
if store > random (50) then chance := false;
if random(50) > random(250) then chance := true;
expbonus := store;
end;
1 : begin
store := char.atk-char.spd+char.weight-char.def;
if store > 20 then chance := true;
if store div 2 > 15 then chance := false;
randomize;
if (chance = false) and (store * 2 > 25) and (store * 2 < random(15)) then chance := true;
if store > random (50) then chance := false;
if random(50) > random(250) then chance := true;
expbonus := store;
end;
2 : begin
store := char.atk+char.spd-char.mweight+char.def;
if store >= 20 then chance := true;
if store div 3 > 15 then chance := false;
randomize;
if (chance = false) and (store * 2 > 25) and (store * 2 < random(15)) then chance := true;
if store > random (80) then chance := false;
randomize;
if random(85) > random(1000) then chance := true;
expbonus := store;
end;
3 : begin
store := char.atk-char.spd+char.mweight-char.def;
if store >= 40 then chance := true;
if store div 5 > 15 then chance := false;
randomize;
if (chance = false) and (store div 3 > 25) or (store * 2 < random(100)) then chance := true;
randomize;
if store > random (80) then chance := false;
randomize;
if random(85) < random(random(1000)) then chance := true;
expbonus := store;
end;
4 : begin
randomize;
store := random((random(100)*(random(10)) * random(random(200))));
if store > 50 then chance := true;
if store < 50 then chance := false;
randomize;
if (store * 2) > random(5000) then chance := true;
if store div 3 > char.luck then chance := false;
expbonus := store;
end;
end;
end;
If stat = 'ATK' Then
Begin
randomize;
store := char.atk - random(echar.def)+1;
randomize;
store := store + random(store div 2)+1;
if store = store + store div 2 then critical := true;
randomize;
store := store - random(char.spd*2)+1;
randomize;
store := store + random(char.atk)+1;
atkbonus := store;
End
Else If stat = 'DEF' Then
Begin
randomize;
store := char.def - char.atk;
store := store + char.spd;
store := store + sec;
store := store - random(char.spd*2);
store := store + random(char.def+1);
defbonus := store;
End
Else If stat = 'MP' Then
Begin
store := char.atk - char.def - char.mp;
store := store + char.spd;
store := store + sec;
store := store + ms;
store := store Div char.spd Div 8;
mpbonus := store;
End
Else If stat = 'EXP' Then
Begin
store := echar.atk - echar.def;
store := store + echar.spd;
store := store + sec;
store := store + ms;
store := store Div echar.spd Div 8;
expbonus := store;
End;
End;
If target = 1 Then
Begin
If stat = 'ATK' Then
Begin
randomize;
store := echar.atk - random(char.def);
randomize;
store := store + random(store div 2);
if store = store + store div 2 then critical := true;
randomize;
store := store - random(echar.spd*2);
randomize;
store := store + random(echar.atk)+1;
atkbonus := store;
End
Else If stat = 'DEF' Then
Begin
randomize;
store := echar.def - echar.atk;
store := store + echar.spd;
store := store + sec;
store := store - random(echar.spd*2);
store := store + random(echar.def+1);
defbonus := store;
End
Else If stat = 'MP' Then
Begin
store := echar.atk - echar.def - echar.mp;
store := store + echar.spd;
store := store + sec;
store := store + ms;
store := store Div echar.spd Div 8;
mpbonus := store;
End
Else If stat = 'EXP' Then
Begin
store := echar.atk - echar.def;
store := store + echar.spd;
store := store + sec;
store := store + ms;
store := store Div echar.spd Div 8;
expbonus := store;
End;
End;
End;
Procedure SetupChar;
Begin
If (char.race = 'ORC') Then
Begin;
char.hp := 55;
char.mp := 4;
char.atk := 6;
char.def := 4;
char.spd := 6;
char.lev := 1;
char.race := 'Orc';
char.weapon := '';
char.exp := 8;
char.exp_rate := 2;
If char.location = 'EASTERN' Then
Begin
char.race := 'Wood Orc';
char.hp := 65;
char.mp := 5;
char.atk := 4;
//add stat affects
End
Else If char.location = 'SOUTHERN' Then
Begin
char.race := 'Gray Orc';
char.mp := 6;
char.atk := 4;
char.spd := 4;
char.exp_rate := 1.5;
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'Mountain Orc';
char.atk := 8;
char.hp := 65;
char.def := 3;
char.spd := 8;
End
Else If char.location = 'NORTHERN' Then
Begin
gametype := 1; //can't have northern Orcs
End
Else If char.location = 'UNDERDARK' Then
Begin
char.race := 'Mountain Orc';
char.atk := 8;
char.hp := 65;
char.def := 3;
char.spd := 8;
End;
End;
If (char.race = 'HUMAN') Then
Begin
char.hp := 45;
char.mp := 5;
char.atk := 5;
char.def := 7;
char.spd := 5;
char.lev := 1;
char.race := 'Human';
char.weapon := '';
char.exp := 4;
char.exp_rate := 1.5;
If char.location = 'EASTERN' Then
Begin
char.race := 'Barbarian';
char.hp := 50;
char.atk := 8;
char.def := 5;
End
Else If char.location = 'SOUTHERN' Then
Begin
char.race := 'Viking';
char.hp := 60;
char.def := 4;
char.spd := 6;
char.exp_rate := 2.0;
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'Noble';
char.hp := 50;
char.hp := 5;
char.atk := 5;
char.def := 5;
char.spd := 6;
End
Else If char.location = 'NORTHERN' Then
Begin
gametype := 1; //can't have northern humans
End
Else If char.location = 'UNDERDARK' Then
Begin
char.race := 'Drow Human';
End;
char.mhp := char.hp;
char.mmp := char.mp;
char.mweight := char.weight;
End;
If (char.race = 'ELF') Then
Begin
char.hp := 70;
char.mp := 10;
char.atk := 8;
char.def := 4;
char.spd := 8;
char.lev := 1;
char.race := 'Elf';
char.weapon := '';
char.exp := 0;
char.exp_rate := 0.5;
If char.location = 'EASTERN' Then
Begin
char.race := 'Wood Elf';
char.atk := 7;
char.def := 7;
char.spd := 7;
End
Else If char.location = 'SOUTHERN' Then
Begin
char.race := 'Gray Elf';
char.atk := 7;
char.spd := 6;
char.hp := 65;
char.exp_rate := 1.0;
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'High Elf';
char.atk := 10;
char.spd := 10;
End
Else If char.location = 'NORTHERN' Then
Begin
gametype := 1; //can't have northern Elves
End
Else If char.location = 'UNDERDARK' Then
Begin
char.race := 'Drow Elf';
End;
End;
If (char.race = 'DWARF') Then
Begin
char.hp := 60;
char.mp := 4;
char.atk := 8;
char.def := 8;
char.spd := 4;
char.lev := 1;
char.race := 'Dwarf';
char.weapon := '';
char.exp := 2;
char.exp_rate := 1.2;
If char.location = 'EASTERN' Then
Begin
char.race := 'Axe Dwarf';
char.spd := 6;
char.exp_rate := 1.0;
End
Else If char.location = 'SOUTHERN' Then
Begin
char.race := 'Gray Dwarf';
char.atk := 7;
char.def := 7;
char.hp := 70;
char.spd := 5;
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'Shield Dwarf';
char.atk := 7;
char.def := 10;
End
Else If char.location = 'NORTHERN' Then
Begin
gametype := 1; //can't have northern dwarves
End
Else If char.location = 'UNDERDARK' Then
Begin
char.race := 'Duergar';
char.hp := 50;
char.mp := 5;
char.exp_rate := 2.0;
End;
End;
If (char.race = 'HALFLING') Then
Begin
char.hp := 75;
char.mp := 9;
char.atk := 3;
char.def := 3;
char.spd := 9;
char.lev := 1;
char.race := 'Halfling';
char.weapon := '';
char.exp := 0;
char.exp_rate := 3.0;
If char.location = 'EASTERN' Then
Begin
char.race := 'Halfling';
//add stat affects
End
Else If char.location = 'SOUTHERN' Then
Begin
gametype := 1; //can't have southern halflings
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'Gnome';
End
Else If char.location = 'NORTHERN' Then
Begin
gametype := 1; //can't have northern halflings
End
Else If char.location = 'UNDERDARK' Then
Begin
gametype := 1; //can't have halflings from underdark
End;
End;
If (char.race = 'GIANT') Then
Begin
//Giants need to be limited somehow; pherhaps limit them to two-handed swords?
char.hp := 85;
char.mp := 8;
char.atk := 8;
char.def := 8;
char.spd := 8;
char.lev := 1;
char.race := 'Giant';
char.weapon := '';
char.exp := 0;
char.exp_rate := 0.5;
If char.location = 'EASTERN' Then
Begin
char.race := 'Half Giant'; //can use all swords?
char.hp := 65;
char.mp := 6;
char.atk := 7;
char.def := 7;
char.spd := 5;
char.exp_rate := 0.7;
//add stat affects
End
Else If char.location = 'SOUTHERN' Then
Begin
char.race := 'Hill Giant';
char.hp := 95;
char.def := 5;
char.spd := 5;
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'Frost Giant';
char.exp_rate := 2.0;
char.def := 5;
char.atk := 5;
End
Else If char.location = 'NORTHERN' Then
Begin
gametype := 1; //can't have northern giants
End
Else If char.location = 'UNDERDARK' Then
Begin
char.race := 'Drow Giant';
End;
End;
If (char.race = 'UTHUD') Then
Begin
char.hp := 55;
char.mp := 8;
char.atk := 8;
char.def := 3;
char.spd := 8;
char.lev := 1;
char.race := 'Uthud';
char.weapon := '';
char.exp := 0;
char.exp_rate := 1.5;
If char.location = 'EASTERN' Then
Begin
char.race := 'High Uthud';
char.atk := 10;
char.mp := 10;
char.hp := 35;
char.spd := 5;
End
Else If char.location = 'SOUTHERN' Then
Begin
char.race := 'Hill Uthud';
char.hp := 85;
char.mp := 5;
char.atk := 5;
char.def := 5;
char.spd := 5;
char.exp_rate := 1.0;
End
Else If char.location = 'WESTERN' Then
Begin
char.race := 'Mountain Uthud';
char.hp := 65;
char.mp := 6;
char.atk := 6;
char.spd := 6;
End
Else If char.location = 'NORTHERN' Then
Begin
char.race := 'Drow Uthud';
End
Else If char.location = 'UNDERDARK' Then
Begin
char.race := 'Uthud';
End;
End;
char.mhp := char.hp;
char.mmp := char.mp;
char.mweight := char.weight;
End;
//battle stuff
Procedure BattleDisp;
Begin
ClrScr;
GotoXy(1, 2);
textcolor(12);
Writeln(char.name, 's Level: ', char.lev);
writeln(char.name, 's Speed: ', char.spd);
Writeln(char.name, 's Attack: ', char.atk);
Writeln(char.name, 's Defense: ', char.def);
Writeln(char.name, 's HP: ', char.hp,'/',char.mhp);
Writeln(char.name, 's MP: ', char.mp,'/',char.mmp);
Writeln(char.name, 's Experiece: ', char.exp);
textcolor(2);
GotoXy(30, 2);
Writeln(' ', echar.name, 's Level: ', echar.lev);
GotoXy(30, 3);
Writeln(' ', echar.name, 's Speed: ', echar.spd);
GotoXy(30, 4);
Writeln(' ', echar.name, 's Attack: ', echar.atk);
GotoXy(30, 5);
Writeln(' ', echar.name, 's Defense: ', echar.def);
GotoXy(30, 6);
Writeln(' ', echar.name, 's HP: ', echar.hp,'/',echar.mhp);
GotoXy(30, 7);
Writeln(' ', echar.name, 's MP: ', echar.mp,'/',echar.mmp);
gotoxy(30, 8);
Writeln(' ',echar.name, 's Experience: ', echar.exp);
GotoXy(4, 9);
textcolor(12);
Write('-------------------');
textcolor(2);
writeln('---------------------');
If curturn = 1 Then
textcolor(12)
Else
textcolor(2);
write('Current Turn: ');
If curturn = 1 Then
write(char.name, ' | Current Weapon: ',char.weapon)
Else
write(echar.name, ' | Current Weapon: ',echar.weapon);
gotoxy(1, 17);
textcolor(7);
End;
Procedure Player1;
Begin
if char.weapon = '' then char.weapon := 'Fist';
Repeat
turncomplete := true;
curturn := 1; //player1's turn
BattleDisp;
textcolor(12);
Writeln(' /________________________________\ ');
Writeln(' |Type the number of your choice. | ');
writeln(' |1.. Attack With Melee | ');
writeln(' |2.. Magic.. | ');
Writeln(' |3.. Use Potion.. | ');
Writeln(' |4.. Menu.. | ');
writeln(' \_v______________________________/ ');
textcolor(7);
gotoxy(21, 24);
readln(choice);
Case choice Of
1:
Begin
gotoxy(21, 24);
AddRandNum(0, 'ATK');
atkbonus := atkbonus + char.atk;
if atkbonus > 0 then echar.hp := echar.hp - atkbonus;
if atkbonus > 0 then Writeln('You hit ', echar.name, ' for ', atkbonus, '!') else writeln('You did no damage! ',char.atk);
End;
2:
Begin
gotoxy(21, 24);
AddRandNum(0, 'MP');
Writeln('MAGIC!!!!');
End;
3:
Begin
gotoxy(21, 24);
EquipPotion(0);
turncomplete := true;
End;
4:
Begin
clrscr;
textcolor(12);
Writeln('1.. Equip Weapon');
Writeln('2.. Equip Armor');
Writeln('3.. Go Back..');
textcolor(7);
readln(choice);
Case choice Of
1:
Begin
EquipWeapon(0); //player1, equip weapon
turncomplete := false;
End;
2:
Begin
EquipArmor(0); //player1 equip armor
turncomplete := false;
End;
3:
Begin
turncomplete := false;
End;
End; //end case
End;
End; //end case
Until turncomplete = true;
readln;
End;
Procedure Player2;
Begin
if echar.weapon = '' then echar.weapon := 'Fist';
Repeat
turncomplete := true;
curturn := 2; //player2's turn
BattleDisp;
textcolor(2);
Writeln(' /________________________________\ ');
Writeln(' |Type the number of your choice. | ');
writeln(' |1.. Attack With Melee | ');
writeln(' |2.. Magic.. | ');
Writeln(' |3.. Use Potion.. | ');
Writeln(' |4.. Menu.. | ');
writeln(' \_v______________________________/ ');
textcolor(7);
gotoxy(21, 24);
readln(choice);
Case choice Of
1:
Begin
gotoxy(21, 24);
AddRandNum(1, 'ATK');
atkbonus := atkbonus + echar.atk;
if atkbonus > 0 then char.hp := char.hp - atkbonus;
if atkbonus > 0 then Writeln('You hit ', char.name, ' for ', atkbonus, '!') else writeln('You did no damage! ',echar.atk);
End;
2:
Begin
gotoxy(21, 24);
AddRandNum(1, 'MP');
Writeln('MAGIC!!!!');
End;
3:
Begin
gotoxy(21, 24);
Equippotion(1);
turncomplete := true;
End;
4:
Begin
clrscr;
textcolor(2);
Writeln('1.. Equip Weapon');
Writeln('2.. Equip Armor');
Writeln('3.. Go Back..');
textcolor(7);
readln(choice);
Case choice Of
1:
Begin
EquipWeapon(1); //player2, equip weapon
turncomplete := false;
End;
2:
Begin
EquipArmor(1); //player2 equip armor
turncomplete := false;
End;
3:
Begin
turncomplete := false;
End;
End; //end case
End;
End; //end case
Until turncomplete;
readln;
End;
Procedure Battle;
Begin
//////////////
char.potions[1] := 'Small HP Vial';
//////////////
BattleDisp;
If (char.spd > echar.spd) Then
Begin
Repeat
If (char.hp > 0) And (echar.hp > 0) Then
Begin
Player1;
End
Else begin
if char.hp < 1 then lchar := true;
if echar.hp < 1 then lechar := true;
end;
//begin playerb's attack
If (echar.hp > 0) And (char.hp > 0) Then
Begin
Player2;
End
Else begin
if echar.hp < 1 then lechar := true;
if char.hp < 1 then lchar := true;
end;
Until (lchar = true) Or (lechar = true); //Someone lost.
End
Else
Begin
Repeat
If (echar.hp > 0) And (char.hp > 0) Then
Begin
Player2;
End
Else begin
if echar.hp < 1 then lechar := true;
if char.hp < 1 then lchar := true;
end;
//begin playera's attack
If (char.hp > 0) And (echar.hp > 0) Then
Begin
Player1;
End
Else begin
if char.hp < 1 then lchar := true;
if echar.hp < 1 then lechar := true;
end;
Until (lchar) Or (lechar); //Someone lost.
End; //end chunk
//lchar means Char lost, so if Char wins, lechar must be true.
clrscr;
writeln('Battle over! Press enter to continue...');
if (lchar = true) then begin
writeln('You lost!');
AddRandNum(1, 'EXP');
echar.exp := echar.exp + expbonus;
writeln(echar.name, ' received ',expbonus,' experience!');
end;
if (lechar = true) then begin
writeln('You won!');
writeln('You received ',expbonus,' experience!');
AddRandNum(0, 'EXP');
char.exp := char.exp + expbonus;
PickRandomWeapon;
if WeaponReceived = true then writeln('You received ',char.weapons[randwep],'!') else writeln('You received no weapons from this fight.');
PickRandomPotion;
if potionreceived = true then writeln('You received ',char.potions[randpot],'!') else writeln('You received no potions from this fight.');
weaponreceived := false;
potionreceived := false;
end;
lechar := false;
lchar := false;
readln;
End;
Procedure Mission1;
Begin
echar.name := 'Dwarven Soldier';
echar.hp := echar.hp + 45;
echar.mp := echar.mp + 4;
echar.mhp := echar.hp;
echar.mmp := echar.mp;
echar.atk := echar.atk + 10;
echar.def := echar.def + 6;
echar.spd := echar.spd + 5;
echar.lev := echar.lev + 1;
echar.race := 'Dwarf';
echar.exp_rate := 1;
Battle;
End;
Procedure Mission2;
Begin
echar.name := 'Elven Hunter';
echar.hp := echar.hp + 10;
echar.mp := echar.mp + 4;
echar.mhp := echar.hp;
echar.mmp := echar.mp;
echar.atk := echar.atk + 5;
echar.def := echar.def + 3;
echar.spd := echar.spd + 6;
echar.lev := echar.lev + 5;
echar.race := 'Elf';
echar.exp_rate := 2;
Battle;
End;
Procedure Mission3;
Begin
echar.name := 'Giantess';
echar.hp := echar.hp + 300;
echar.mp := echar.mp + 3;
echar.mhp := echar.hp;
echar.mmp := echar.mp;
echar.atk := echar.atk + 15;
echar.def := echar.def + 20;
echar.spd := echar.spd - 5;
echar.lev := echar.lev + 10;
echar.race := 'Giant';
echar.exp_rate := 1;
Battle;
End;
Begin
{ for entryi := 1 to 19 do begin
char.weapons[entryi] := 'weapon#';
end;
char.weapons[1] := 'Sword';
char.weapons[2] := 'Bastard Sword';
char.weapons[3] := 'Axe';
char.weapons[4] := 'Two-Handed Sword';
char.weapons[5] := 'Dagger';
echar.weapons[1] := 'Sword';
echar.weapons[2] := 'Bastard Sword';
echar.weapons[3] := 'Axe';
echar.weapons[4] := 'Two-Handed Sword';
echar.weapons[5] := 'Dagger';
displaybackpack(0,0);
readln;}
{whole main loop... restore when done testing
////////////}
addrandnum(0,'CHANCE');
char.luck := 10;
writeln(char.luck);
if chance = true then writeln('TRUE!!!');
if chance = false then writeln('FALSE!!!');
writeln('Expbonus: ',expbonus);
readln;
{ Case topmenu Of
1:
Begin
ClrScr;
textcolor(6);
writeln(' Welcome to the Initiative, soldier. We have an assignment for you. ');
Writeln(' First, however, we must collect some details from you.');
writeln;
writeln(' End Transmission. ');
writeln;
gametype := 4;
textcolor(7);
End;
2:
Begin
clrscr;
gametype := 1;
End;
3:
Begin
writeln(' Password ');
End;
4:
Begin
writeln(' Online Play ');
End;
5:
Begin
writeln(' Quit ');
End;
6:
Begin
Writeln(' Credits ');
End;
End;
//begin game loop
//gametype = 1 : Authentication
//gametype = 2 : Briefing
//gametype = 3 : Game Play
//gametype = 4 : Register
//gametype = 5 : exit
Repeat
Repeat
If gametype = 1 Then
Begin
//unloadchar; ;not needed?
clrscr;
loadchar;
writeln;
If auth = true Then
Writeln('Authenticated!')
Else
Begin
textcolor(12);
Writeln('Sorry, that username/password does not exist.');
textcolor(7);
End;
Writeln('Press enter to continue.');
readln;
clrscr;
If auth = true Then
gametype := 2
Else
gametype := 1;
End;
Until gametype <> 1;
If gametype = 2 Then
Begin
echar.weapons[1] := 'Fist';
char.weapons[1] := 'Fist';
echar.weapons[2] := 'Axe';
Mission1;
clrscr;
Writeln('Level Up!');
Writeln('You are now level ',char.lev+1,'!');
char.lev := char.lev+1;
char.atk := char.atk + 6;
char.def := char.def + 4;
char.spd := char.spd - 1;
char.hp := char.mhp + 50; //heals at same time because of Mhp and not just hp
char.mhp := char.mhp + 50;
Writeln('Attack: ', char.atk);
writeln('Defense: ', char.def);
writeln('Speed: ', char.spd);
writeln('HP: ', char.hp);
Writeln('Press enter to continue...');
readln;
clrscr;
writeln('Ok, so you beat the dwarf.. So what... You think you can beat an Elf?');
echar.weapons[2] := 'Sword';
writeln('Press enter to continue...');
readln;
mission2;
clrscr;
Writeln('Level Up!');
Writeln('You are now level ',char.lev+1,'!');
char.lev := char.lev+1;
char.atk := char.atk + 11;
char.def := char.def + 11;
char.spd := char.spd - 1;
char.hp := char.mhp + 55; //heals at same time because of Mhp and not just hp
char.mhp := char.mhp + 55;
Writeln('Attack: ', char.atk);
writeln('Defense: ', char.def);
writeln('Speed: ', char.spd);
writeln('HP: ', char.hp);
Writeln('Press enter to continue...');
readln;
clrscr;
writeln('Hmmmm.. Not bad, not bad. How about a giant, then?');
Writeln('We will give you our most powerful weapon, the Bastard Sword.');
for entryi := 1 to 4 do begin
if char.weapons[entryi] = '' then char.weapons[entryi] := 'Bastard Sword';
end;
writeln('Press enter to continue.');
readln;
mission3;
clrscr;
Writeln('Level Up!');
Writeln('You are now level ',char.lev+1,'!');
char.lev := char.lev+1;
char.atk := char.atk + 16;
char.def := char.def + 16;
char.spd := char.spd + 1;
char.hp := char.mhp + 60; //heals at same time because of Mhp and not just hp
char.mhp := char.mhp + 60;
Writeln('Attack: ', char.atk);
writeln('Defense: ', char.def);
writeln('Speed: ', char.spd);
writeln('HP: ', char.hp);
Writeln('Press enter to continue...');
readln;
clrscr;
End;
If gametype = 3 Then
Begin
End;
If gametype = 4 Then
Begin
textcolor(2);
ClrScr;
Writeln('So you wanna join the Initiate eh? Well, fill out this form,');
writeln('and we will put you on your first training mission.');
writeln;
Repeat
Writeln('Initiate Username: ');
textcolor(12);
readln(char.name);
textcolor(2);
writeln('Initiate Password: ');
textcolor(12);
readln(pass);
textcolor(2);
Writeln('Re-enter Password: ');
textcolor(12);
readln(char.password);
textcolor(2);
Until pass = char.password;
ClrScr;
Repeat
writeln('Ok, ', char.name, ', you are now ready to begin the registration process.');
Writeln('Please choose a race. If you forget the names of the races, type ''help''');
textcolor(12);
readln(char.race);
textcolor(2);
For entryi := 1 To length(char.race) Do
char.race[entryi] := upcase(char.race[entryi]);
If char.race = 'HELP' Then
Begin
clrscr;
writeln('Orc');
Writeln('Human');
Writeln('Elf');
Writeln('Dwarf');
Writeln('Halfling');
Writeln('Giant');
Writeln('Uthud');
Writeln('For descriptions of the races, please type ''desc'' and then press enter.');
For entryi := 1 To length(entry) Do
entry[entryi] := upcase(entry[entryi]);
writeln('This will open the readme file.');
Writeln('Press enter to continue.');
textcolor(12);
readln(entry);
textcolor(2);
If entry = 'desc' Then ShellExecute(hwindow, 'open', 'races.txt', Nil, Nil, SW_SHOWMAXIMIZED);
End;
clrscr;
Until (char.race = 'ORC') Or (char.race = 'HUMAN') Or (char.race = 'ELF') Or (char.race = 'DWARF') Or (char.race = 'HALFLING') Or (char.race = 'GIANT') Or (char.race = 'UTHUD');
Repeat
clrscr;
writeln('Ok, well, where on the map are you from?');
writeln('If you are not sure, type ''help''.');
textcolor(12);
readln(char.location);
textcolor(2);
For entryi := 1 To length(char.location) Do
char.location[entryi] := upcase(char.location[entryi]);
If char.location = 'HELP' Then
Begin
clrscr;
If char.race = 'HUMAN' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: Vikings');
writeln('Eastern: Barbarians');
writeln('Western: Nobility');
writeln('Northern: ----');
writeln('Underdark: Drow');
writeln('Press Enter to continue...');
readln;
End;
If char.race = 'ELF' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: Gray Elf');
writeln('Eastern: Wood Elf');
writeln('Western: High Elf');
writeln('Northern: ----');
writeln('Underdark: Drow Elf');
writeln('Press Enter to continue...');
readln;
End;
If char.race = 'DWARF' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: Gray Dwarf');
writeln('Eastern: Axe Dwarf');
writeln('Western: Shield Dwarf');
writeln('Northern: ----');
writeln('Underdark: Duergar');
writeln('Press Enter to continue...');
readln;
End;
If char.race = 'ORC' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: Gray Orc');
writeln('Eastern: Wood Orc');
writeln('Western: Mountain Orc');
writeln('Northern: ----');
writeln('Underdark: Mountain Orc');
writeln('Press Enter to continue...');
readln;
End;
If char.race = 'HALFLING' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: ----');
writeln('Eastern: Halfling');
writeln('Western: Gnome');
writeln('Northern: ----');
writeln('Underdark: ----');
writeln('Press Enter to continue...');
readln;
If char.race = 'GIANT' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: Hill Giant');
writeln('Eastern: Half-Giant');
writeln('Western: Frost Giant');
writeln('Northern: ----');
writeln('Underdark: ----');
writeln('Press Enter to continue...');
readln;
End;
If char.race = 'UTHUD' Then
Begin
writeln('Choose one of the below, Southern, Western, Eastern, Nothern, or Underdark.');
Writeln('Southern: Hill Uthud');
writeln('Eastern: High Uthud');
writeln('Western: Mountain Uthud');
writeln('Northern: Drow Uthud');
writeln('Underdark: Uthud');
writeln('Press Enter to continue...');
readln;
End;
End;
End;
Until (char.location = 'SOUTHERN') Or (char.location = 'EASTERN') Or (char.location = 'NORTHERN') Or (char.location = 'WESTERN') Or (char.location = 'UNDERDARK');
Repeat
clrscr;
writeln('So.. What gender are you, ', char.name, '? Male or Female?');
textcolor(12);
readln(char.sex);
textcolor(2);
For entryi := 1 To length(char.sex) Do
char.sex[entryi] := upcase(char.sex[entryi]);
If (char.sex <> 'MALE') Or (char.sex <> 'FEMALE') Then writeln('Sorry, you must be either male or female. We do not accept trans-genders in the Initiative.');
clrscr;
Until (char.sex = 'MALE') Or (char.sex = 'FEMALE');
Writeln('Ok, Initiate. Return to the briefing tent for your first mission.');
readln;
SetupChar;
Save := 'SaveChar';
SaveGame;
gametype := 1;
textcolor(7);
End;
Until gametype = 5;
exit; }
{////////
DONE RESTORE}
End.