home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
ARSRC21.ZIP
/
AR256H3.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-26
|
22KB
|
803 lines
// CREATE
// function to create mon[play][number], id whatsort, at x,y square
// this function is declared in arena.cpp
monster create(char play,char number,unsigned char whatsort,char status,char x,char y)
{
char *str;
int i,r,given;
mon[play][number].whatside=play;
mon[play][number].id=whatsort;
mon[play][number].x=x;
mon[play][number].y=y;
sq[x][y].whatside=play;
sq[x][y].whatmonster=number;
if (whatsort==0xff)
{
str="Wizard";
strcpy (mon[play][number].name, str);
str="stabs";
strcpy (mon[play][number].atmes, str);
str="but ineffectively.";
strcpy (mon[play][number].defmes, str);
str="to death!";
strcpy (mon[play][number].diemes, str);
str="throws a spell at";
strcpy (mon[play][number].shotmes, str);
mon[play][number].graphic=pgraph[play];
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=0;
mon[play][number].range=6;
mon[play][number].attack=1+random(2);
mon[play][number].defend=1+random(2);
mon[play][number].spellnum=25;
mon[play][number].status=1;
if(alignment[play]<0)
mon[play][number].alignment=-1; //give new wiz same alignment as his owner
if(alignment[play]>0)
mon[play][number].alignment=1;
if(alignment[play]==0)
mon[play][number].alignment=0;
mon[play][number].spells[0]=99;given=1;
while(given<mon[curpla][curmon].spellnum)
{
r=random(59);
if(random(8)+1>spellprob[r])
{
mon[play][number].spells[given]=r;
++given;
}
}
for (i=0;i<3;++i) //change 3 spells to call spells
{
r=random(mon[curpla][curmon].spellnum-1)+1;
mon[play][number].spells[r]=random(26)+31;
}
}
if (whatsort==1)//beholder
{
str="Beholder";
strcpy (mon[play][number].name, str);
str="gazes toward";
strcpy (mon[play][number].atmes, str);
str="who shrugs.";
strcpy (mon[play][number].defmes, str);
str="and destroys!";
strcpy (mon[play][number].diemes, str);
str="glares at";
strcpy (mon[play][number].shotmes, str);
mon[play][number].graphic=3;
mon[play][number].mmoves=1;
mon[play][number].mshots=1;
mon[play][number].fire=2;
mon[play][number].range=6;
mon[play][number].attack=3;
mon[play][number].defend=4;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=1;
mon[play][number].alignment=-1;
mon[play][number].immunities=2;
}
if (whatsort==2)//warrior
{
str="Loyal Retainer";
strcpy (mon[play][number].name, str);
str="slices at";
strcpy (mon[play][number].atmes, str);
str="but misses!";
strcpy (mon[play][number].defmes, str);
str="with great skill.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=4;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=0;
mon[play][number].range=6;
mon[play][number].attack=2;
mon[play][number].defend=4;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==3)//skeleton
{
str="Skeleton";
strcpy (mon[play][number].name, str);
str="gleefully chops at";
strcpy (mon[play][number].atmes, str);
str="but misses!";
strcpy (mon[play][number].defmes, str);
str="and cackles nastily.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=5;
mon[play][number].mmoves=1;
mon[play][number].mshots=0;
mon[play][number].fire=0;
mon[play][number].range=6;
mon[play][number].attack=2;
mon[play][number].defend=2;
mon[play][number].spellnum=0;
mon[play][number].status=3;//undead is 3
mon[play][number].fly=0;
mon[play][number].id+=0x80;//appear in recho as undead
mon[play][number].alignment=-1;
mon[play][number].immunities=2;
}
if (whatsort==4)//bat
{
str="Little bat";
strcpy (mon[play][number].name, str);
str="feebly claws";
strcpy (mon[play][number].atmes, str);
str="to no effect.";
strcpy (mon[play][number].defmes, str);
str="and swats it.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=2;
mon[play][number].mmoves=4;
mon[play][number].mshots=0;
mon[play][number].fire=0;
mon[play][number].range=6;
mon[play][number].attack=1;
mon[play][number].defend=1;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=1;
mon[play][number].alignment=-1;
}
if (whatsort==5)//archer
{
str="Archer";
strcpy (mon[play][number].name, str);
str="cuts at";
strcpy (mon[play][number].atmes, str);
str="but misses!";
strcpy (mon[play][number].defmes, str);
str="and hits!";
strcpy (mon[play][number].diemes, str);
str="fires arrows at";
strcpy (mon[play][number].shotmes, str);
mon[play][number].graphic=24;
mon[play][number].mmoves=2;
mon[play][number].mshots=2;
mon[play][number].fire=1;
mon[play][number].range=8;
mon[play][number].attack=1;
mon[play][number].defend=1;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==6)//goblin
{
str="Goblin";
strcpy (mon[play][number].name, str);
str="jabs at";
strcpy (mon[play][number].atmes, str);
str="uselessly.";
strcpy (mon[play][number].defmes, str);
str="viciously!";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=7;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=1;
mon[play][number].range=6;
mon[play][number].attack=3;
mon[play][number].defend=1;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=-1;
}
if (whatsort==7)//red dragon
{
str="Red Dragon";
strcpy (mon[play][number].name, str);
str="slashes";
strcpy (mon[play][number].atmes, str);
str="but is baffled.";
strcpy (mon[play][number].defmes, str);
str="to ribbons!";
strcpy (mon[play][number].diemes, str);
str="breathes flame at";
strcpy (mon[play][number].shotmes, str);
mon[play][number].graphic=8;
mon[play][number].mmoves=3;
mon[play][number].mshots=1;
mon[play][number].fire=3;
mon[play][number].range=4;
mon[play][number].attack=7;
mon[play][number].defend=7;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=1;
mon[play][number].alignment=-1;
}
if (whatsort==8)//spectre
{
str="Spectre";
strcpy (mon[play][number].name, str);
str="touches";
strcpy (mon[play][number].atmes, str);
str="who is unharmed.";
strcpy (mon[play][number].defmes, str);
str="and laughs darkly.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=9;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=0;
mon[play][number].range=6;
mon[play][number].attack=3;
mon[play][number].defend=3;
mon[play][number].spellnum=0;
mon[play][number].status=3;
mon[play][number].fly=0;
mon[play][number].id+=0x80;//appear in recho as undead
mon[play][number].alignment=-1;
}
if (whatsort==9)//lich
{
str="Lich";
strcpy (mon[play][number].name, str);
str="directs hate at";
strcpy (mon[play][number].atmes, str);
str="who doesn't care!";
strcpy (mon[play][number].defmes, str);
str="who dissolves!";
strcpy (mon[play][number].diemes, str);
str="hurls pure evil at";
strcpy (mon[play][number].shotmes, str);
mon[play][number].graphic=10;
mon[play][number].mmoves=2;
mon[play][number].mshots=1;
mon[play][number].fire=2;
mon[play][number].range=2;
mon[play][number].attack=5;
mon[play][number].defend=5;
mon[play][number].spellnum=2;
mon[play][number].status=3;
mon[play][number].fly=0;
mon[play][number].spells[0]=0;
mon[play][number].spells[1]=random(5)+1;
mon[play][number].id+=0x80;//appear in recho as undead
mon[play][number].alignment=-1;
}
if (whatsort==10)//ghost
{
str="Ghost";
strcpy (mon[play][number].name, str);
str="says 'boo' to";
strcpy (mon[play][number].atmes, str);
str="who giggles.";
strcpy (mon[play][number].defmes, str);
str="who dies of fear.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=25;
mon[play][number].mmoves=3;
mon[play][number].mshots=0;
mon[play][number].fire=1;
mon[play][number].range=6;
mon[play][number].attack=3;
mon[play][number].defend=1;
mon[play][number].spellnum=0;
mon[play][number].status=3;
mon[play][number].fly=1;
mon[play][number].id+=0x80;//appear in recho as undead
mon[play][number].alignment=-1;
}
if (whatsort==11)//gold dragon
{
str="Gold Dragon";
strcpy (mon[play][number].name, str);
str="mightily crushes";
strcpy (mon[play][number].atmes, str);
str="but, oddly, fails!";
strcpy (mon[play][number].defmes, str);
str="to a singed pulp";
strcpy (mon[play][number].diemes, str);
str="shoots flames at";
strcpy (mon[play][number].shotmes, str);
mon[play][number].graphic=11;
mon[play][number].mmoves=3;
mon[play][number].mshots=1;if(!random(3))mon[play][number].mshots++;
mon[play][number].fire=3;
mon[play][number].range=5;
mon[play][number].attack=7;
mon[play][number].defend=9;
mon[play][number].spellnum=3;
mon[play][number].status=1;
mon[play][number].fly=1;
mon[play][number].alignment=1;
mon[play][number].spells[0]=0;
mon[play][number].spells[1]=random(28)+1;
mon[play][number].spells[2]=random(28)+1;
}
if (whatsort==12)//nema
{
str="A nema";
strcpy (mon[play][number].name, str);
str="pats";
strcpy (mon[play][number].atmes, str);
str="who smiles.";
strcpy (mon[play][number].defmes, str);
str="with her ickle claws.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=12;
mon[play][number].mmoves=1;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=0;
mon[play][number].defend=1;
mon[play][number].spellnum=2;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
mon[play][number].spells[0]=0;
mon[play][number].spells[1]=98;
}
if (whatsort==13)//lion
{
str="Lion";
strcpy (mon[play][number].name, str);
str="claws";
strcpy (mon[play][number].atmes, str);
str="futilely.";
strcpy (mon[play][number].defmes, str);
str="to red ribbons.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=13;
mon[play][number].mmoves=4;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=4;
mon[play][number].defend=4;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==14)//gnome
{
str="Brownie";
strcpy (mon[play][number].name, str);
str="swipes at";
strcpy (mon[play][number].atmes, str);
str="pointlessly.";
strcpy (mon[play][number].defmes, str);
str="and hits.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=14;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=1;
mon[play][number].defend=1;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==15)//chaun
{
str="Leprechaun";
strcpy (mon[play][number].name, str);
str="shillelaghs";
strcpy (mon[play][number].atmes, str);
str="but misses.";
strcpy (mon[play][number].defmes, str);
str="on the head.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=14;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=1;
mon[play][number].defend=1;
mon[play][number].spellnum=3;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
mon[play][number].spells[0]=0;
mon[play][number].spells[1]=random(28)+1;
mon[play][number].spells[2]=random(28)+1;
}
if (whatsort==16)//dog
{
str="Big dog";
strcpy (mon[play][number].name, str);
str="snaps at";
strcpy (mon[play][number].atmes, str);
str="to no effect.";
strcpy (mon[play][number].defmes, str);
str="and kills!";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=15;
mon[play][number].mmoves=3;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=2;
mon[play][number].defend=2;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==17)//wolf
{
str="Grey Wolf";
strcpy (mon[play][number].name, str);
str="leaps at";
strcpy (mon[play][number].atmes, str);
str="but is foiled.";
strcpy (mon[play][number].defmes, str);
str="and takes a bite!";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=15;
mon[play][number].mmoves=4;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=3;
mon[play][number].defend=3;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=-1;
}
if (whatsort==18)//griffy
{
str="Gryphon";
strcpy (mon[play][number].name, str);
str="tears into";
strcpy (mon[play][number].atmes, str);
str="who survives.";
strcpy (mon[play][number].defmes, str);
str="who abandons hope.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=16;
mon[play][number].mmoves=4;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=7;
mon[play][number].defend=5;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=1;
mon[play][number].alignment=1;
}
if (whatsort==19)//manty
{
str="Manticore";
strcpy (mon[play][number].name, str);
str="bites at";
strcpy (mon[play][number].atmes, str);
str="who escapes.";
strcpy (mon[play][number].defmes, str);
str="who dies.";
strcpy (mon[play][number].diemes, str);
str="throws spikes at";
strcpy(mon[play][number].shotmes,str);
mon[play][number].graphic=17;
mon[play][number].mmoves=3;
mon[play][number].mshots=1;
mon[play][number].fire=1;
mon[play][number].range=5;
mon[play][number].attack=3;
mon[play][number].defend=2;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=-1;
}
if (whatsort==20)//centy
{
str="Centaur";
strcpy (mon[play][number].name, str);
str="tramples over";
strcpy (mon[play][number].atmes, str);
str="who gets back up.";
strcpy (mon[play][number].defmes, str);
str="who is crushed.";
strcpy (mon[play][number].diemes, str);
str="fires arrows at";
strcpy(mon[play][number].shotmes,str);
mon[play][number].graphic=18;
mon[play][number].mmoves=4;
mon[play][number].mshots=1;
mon[play][number].fire=1;
mon[play][number].range=6;
mon[play][number].attack=3;
mon[play][number].defend=3;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==21)//eagie
{
str="Bald Eagle";
strcpy (mon[play][number].name, str);
str="swoops on";
strcpy (mon[play][number].atmes, str);
str="inexpertly.";
strcpy (mon[play][number].defmes, str);
str="with deadly force.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=19;
mon[play][number].mmoves=5;
mon[play][number].mshots=0;
mon[play][number].fire=0;
mon[play][number].range=5;
mon[play][number].attack=5;
mon[play][number].defend=2;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=1;
mon[play][number].alignment=1;
}
if (whatsort==22)//giant
{
str="Mighty Giant";
strcpy (mon[play][number].name, str);
str="stomps on";
strcpy (mon[play][number].atmes, str);
str="who laughs.";
strcpy (mon[play][number].defmes, str);
str="who goes flat!";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=20;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=6;
mon[play][number].defend=4;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
}
if (whatsort==23)//sally
{
str="Salamander";
strcpy (mon[play][number].name, str);
str="ignites";
strcpy (mon[play][number].atmes, str);
str="who escapes";
strcpy (mon[play][number].defmes, str);
str="who burns to death.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=21;
mon[play][number].mmoves=2;
mon[play][number].mshots=0;
mon[play][number].fire=1;
mon[play][number].range=4;
mon[play][number].attack=3;
mon[play][number].defend=3;
mon[play][number].spellnum=4;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=1;
mon[play][number].immunities=3; //fire resistant.
mon[play][number].spells[0]=0;
mon[play][number].spells[1]=1;
mon[play][number].spells[3]=1;
mon[play][number].spells[2]=1;
}
if (whatsort==24)//mutie
{
str="Unknown Beast";
strcpy (mon[play][number].name, str);
str="grobbles to";
strcpy (mon[play][number].atmes, str);
str="feeningly.";
strcpy (mon[play][number].defmes, str);
str="with fripping!";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=22;
mon[play][number].mmoves=random(5);
if(!random(4))mon[play][number].mshots=1;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=random(7);
mon[play][number].defend=random(7);
mon[play][number].spellnum=0;
mon[play][number].status=random(3)+1;
if(random(4))mon[play][number].fly=1;
mon[play][number].alignment=0;
}
if (whatsort==25)//zombie
{
str="Zombie";
strcpy (mon[play][number].name, str);
str="claws";
strcpy (mon[play][number].atmes, str);
str="who resists.";
strcpy (mon[play][number].defmes, str);
str="to death.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=4;
mon[play][number].mmoves=1;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=1;
mon[play][number].defend=1;
mon[play][number].spellnum=0;
mon[play][number].status=3;
mon[play][number].fly=0;
mon[play][number].id+=0x80;//appear in recho as undead
mon[play][number].alignment=-1;
mon[play][number].immunities=2;
}
if (whatsort==26)//hydra
{
str="Hydra";
strcpy (mon[play][number].name, str);
str="surrounds";
strcpy (mon[play][number].atmes, str);
str="but can't win.";
strcpy (mon[play][number].defmes, str);
str="with poison.";
strcpy (mon[play][number].diemes, str);
mon[play][number].graphic=6;
mon[play][number].mmoves=1;
mon[play][number].mshots=0;
mon[play][number].fire=2;
mon[play][number].range=5;
mon[play][number].attack=3;
mon[play][number].defend=8;
mon[play][number].spellnum=0;
mon[play][number].status=1;
mon[play][number].fly=0;
mon[play][number].alignment=-1;
}
// UD monsters
if((UD_MONSTERS)&&(number))//wizzes never UD
{
mon[play][number].mmoves=mondata[whatsort].mmoves;
mon[play][number].mshots=mondata[whatsort].mshots;
mon[play][number].fire=mondata[whatsort].fire;
mon[play][number].range=mondata[whatsort].range;
mon[play][number].attack=mondata[whatsort].attack;
mon[play][number].defend=mondata[whatsort].defend;
//mon[play][number].spellnum=mondata[whatsort].spellnum;
//mon[play][number].status=mondata[whatsort].status;
mon[play][number].fly=mondata[whatsort].fly;
//mon[play][number].alignment=mondata[whatsort].alignment;
mon[play][number].immunities=mondata[whatsort].immunities;
//if(mondata[whatsort].spellnum)
// {
mon[play][number].spellnum=mondata[whatsort].spellnum;
mon[play][number].spellnum++;//to make room for null first spell
if(mon[play][number].spellnum>128)
{
mon[play][number].spellnum-=128;//to remove only-firing-spells flag
for(i=1;i<mon[play][number].spellnum;++i)
{
mon[play][number].spells[i]=random(3)+1;
}
}
else
{
for(i=1;i<mon[play][number].spellnum;++i)
{
mon[play][number].spells[i]=random(30)+1;
}
}
// }
if(mondata[whatsort].status==3) //if undead, make it undead
{ //and change the id for
mon[play][number].status=3; //recce purposes. This
mon[play][number].id=whatsort+128;
} //doesnt seem to work very
else //well...
{
mon[play][number].status=1;
}
}
if ((status==2)&&(cheetR!=curpla))mon[play][number].status=2;
//change player's alignment according to what he summoned.
alignment[play]+=(mon[play][number].power()*mon[play][number].alignment);
if (alignment[play]>299 )alignment[play]=299;
if (alignment[play]<-299)alignment[play]=-299;
return mon[play][number];
}