@ -196,12 +196,13 @@ void InitRndLocBigObj(int min, int max, int objtype)
void InitRndLocObj5x5 ( int min , int max , int objtype )
{
BOOL exit ;
int xp , yp , numobjs , i , k , m , n ;
int xp , yp , numobjs , i , cnt , m , n ;
numobjs = min + random_ ( 139 , max - min ) ;
for ( i = 0 ; i < numobjs ; i + + ) {
k = 0 ;
for ( ; ; ) {
cnt = 0 ;
exit = FALSE ;
while ( ! exit ) {
exit = TRUE ;
xp = random_ ( 139 , 80 ) + 16 ;
yp = random_ ( 139 , 80 ) + 16 ;
@ -211,11 +212,11 @@ void InitRndLocObj5x5(int min, int max, int objtype)
exit = FALSE ;
}
}
if ( exit )
break ;
k + + ;
if ( k > 20000 )
return ;
if ( ! exit ) {
cnt + + ;
if ( cnt > 20000 )
return ;
}
}
AddObject ( objtype , xp , yp ) ;
}
@ -286,11 +287,12 @@ void AddCandles()
void AddBookLever ( int lx1 , int ly1 , int lx2 , int ly2 , int x1 , int y1 , int x2 , int y2 , int msg )
{
BOOL exit ;
int xp , yp , ob , k , m , n ;
DIA BOOL exit ;
int xp , yp , ob , cnt , m , n ;
k = 0 ;
for ( ; ; ) {
cnt = 0 ;
exit = FALSE ;
while ( ! exit ) {
exit = TRUE ;
xp = random_ ( 139 , 80 ) + 16 ;
yp = random_ ( 139 , 80 ) + 16 ;
@ -300,11 +302,11 @@ void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, in
exit = FALSE ;
}
}
if ( exit )
break ;
k + + ;
if ( k > 20000 )
if ( ! exit ) {
cnt + + ;
if ( cnt > 20000 )
return ;
}
}
if ( QuestStatus ( Q_BLIND ) )
@ -619,7 +621,8 @@ void AddStoryBooks()
BOOL done ;
cnt = 0 ;
while ( TRUE ) {
done = FALSE ;
while ( ! done ) {
done = TRUE ;
xp = random_ ( 139 , 80 ) + 16 ;
yp = random_ ( 139 , 80 ) + 16 ;
@ -629,11 +632,11 @@ void AddStoryBooks()
done = FALSE ;
}
}
if ( done )
break ;
if ( ! done ) {
cnt + + ;
if ( cnt > 20000 )
return ;
}
}
AddObject ( OBJ_STORYBOOK , xp , yp ) ;
AddObject ( OBJ_STORYCANDLE , xp - 2 , yp + 1 ) ;
@ -707,8 +710,9 @@ void AddLazStand()
BOOL found ;
cnt = 0 ;
while ( TRUE ) {
found = 1 ;
found = FALSE ;
while ( ! found ) {
found = TRUE ;
xp = random_ ( 139 , 80 ) + 16 ;
yp = random_ ( 139 , 80 ) + 16 ;
for ( yy = - 3 ; yy < = 3 ; yy + + ) {
@ -717,15 +721,14 @@ void AddLazStand()
found = FALSE ;
}
}
if ( found )
break ;
if ( ! found ) {
cnt + + ;
if ( cnt > 10000 ) {
InitRndLocObj ( 1 , 1 , OBJ_LAZSTAND ) ;
return ;
}
}
}
AddObject ( OBJ_LAZSTAND , xp , yp ) ;
AddObject ( OBJ_TNUDEM2 , xp , yp + 2 ) ;
AddObject ( OBJ_STORYCANDLE , xp + 1 , yp + 2 ) ;
@ -829,9 +832,9 @@ void InitObjects()
InitRndBarrels ( ) ;
AddL4Goodies ( ) ;
}
InitRndLocObj ( 5 , 10 , 5 ) ;
InitRndLocObj ( 3 , 6 , 6 ) ;
InitRndLocObj ( 1 , 5 , 7 ) ;
InitRndLocObj ( 5 , 10 , OBJ_CHEST1 ) ;
InitRndLocObj ( 3 , 6 , OBJ_CHEST2 ) ;
InitRndLocObj ( 1 , 5 , OBJ_CHEST3 ) ;
if ( leveltype ! = DTYPE_HELL )
AddObjTraps ( ) ;
if ( leveltype > DTYPE_CATHEDRAL )
@ -1104,7 +1107,8 @@ void AddBarrel(int i, int t)
void AddShrine ( int i )
{
int val , j , slist [ NUM_SHRINETYPE ] ;
int val , j ;
BOOL slist [ NUM_SHRINETYPE ] ;
object [ i ] . _oPreFlag = TRUE ;
for ( j = 0 ; j < NUM_SHRINETYPE ; j + + ) {
@ -1113,22 +1117,16 @@ void AddShrine(int i)
} else {
slist [ j ] = 1 ;
}
if ( gbMaxPlayers ! = 1 ) {
if ( shrineavail [ j ] = = 1 ) {
if ( gbMaxPlayers ! = 1 & & shrineavail [ j ] = = 1 ) {
slist [ j ] = 0 ;
}
} else {
if ( shrineavail [ j ] = = 2 ) {
if ( gbMaxPlayers = = 1 & & shrineavail [ j ] = = 2 ) {
slist [ j ] = 0 ;
}
}
}
while ( 1 ) {
do {
val = random_ ( 150 , NUM_SHRINETYPE ) ;
if ( slist [ val ] ) {
break ;
}
}
} while ( ! slist [ val ] ) ;
object [ i ] . _oVar1 = val ;
if ( random_ ( 150 , 2 ) ) {
@ -1548,21 +1546,21 @@ void Obj_StopAnim(int i)
void Obj_Door ( int i )
{
int dx , dy ;
BOOL dok ;
if ( ! object [ i ] . _oVar4 ) {
object [ i ] . _oMissFlag = FALSE ;
if ( object [ i ] . _oVar4 = = 0 ) {
object [ i ] . _oSelFlag = 3 ;
object [ i ] . _oMissFlag = FALSE ;
} else {
dy = object [ i ] . _oy ;
dx = object [ i ] . _ox ;
dy = object [ i ] . _oy ;
dok = ! dMonster [ dx ] [ dy ] ;
dok = dok & ! dItem [ dx ] [ dy ] ;
dok = dok & ! dDead [ dx ] [ dy ] ;
dok = dok & ! dPlayer [ dx ] [ dy ] ;
object [ i ] . _oSelFlag = 2 ;
object [ i ] . _oVar4 = dok ? 1 : 2 ;
object [ i ] . _oMissFlag = TRUE ;
object [ i ] . _oVar4 = ( ( ( dItem [ dx ] [ dy ] = = 0 ? 1 : 0 )
& ( dDead [ dx ] [ dy ] = = 0 ? 1 : 0 )
& ( dPlayer [ dx ] [ dy ] = = 0 ? 1 : 0 )
& ( dMonster [ dx ] [ dy ] = = 0 ? 1 : 0 ) )
= = 0 )
+ 1 ;
}
}
@ -2427,6 +2425,7 @@ void OperateBook(int pnum, int i)
{
int j , oi ;
int dx , dy ;
int otype ;
BOOL do_add_missile , missile_added ;
if ( object [ i ] . _oSelFlag = = 0 )
@ -2436,20 +2435,19 @@ void OperateBook(int pnum, int i)
missile_added = FALSE ;
for ( j = 0 ; j < nobjects ; j + + ) {
oi = objectactive [ j ] ;
if ( object [ oi ] . _otype = = OBJ_MCIRCLE2 ) {
if ( object [ oi ] . _oVar6 = = 1 ) {
otype = object [ oi ] . _otype ;
if ( otype = = OBJ_MCIRCLE2 & & object [ oi ] . _oVar6 = = 1 ) {
dx = 27 ;
dy = 29 ;
object [ oi ] . _oVar6 = 4 ;
do_add_missile = TRUE ;
}
if ( object [ oi ] . _oVar6 = = 2 ) {
if ( otype = = OBJ_MCIRCLE2 & & object [ oi ] . _oVar6 = = 2 ) {
dx = 43 ;
dy = 29 ;
object [ oi ] . _oVar6 = 4 ;
do_add_missile = TRUE ;
}
}
if ( do_add_missile ) {
object [ dObject [ 35 ] [ 36 ] - 1 ] . _oVar5 + + ;
AddMissile ( plr [ pnum ] . _px , plr [ pnum ] . _py , dx , dy , plr [ pnum ] . _pdir , MIS_RNDTELEPORT , 0 , pnum , 0 , 0 ) ;
@ -2460,8 +2458,8 @@ void OperateBook(int pnum, int i)
if ( ! missile_added )
return ;
}
object [ i ] . _oAnimFrame + + ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame + + ;
if ( ! setlevel )
return ;
@ -2574,8 +2572,8 @@ void OperateChest(int pnum, int i, BOOL sendmsg)
if ( object [ i ] . _oSelFlag ! = 0 ) {
if ( ! deltaload )
PlaySfxLoc ( IS_CHEST , object [ i ] . _ox , object [ i ] . _oy ) ;
object [ i ] . _oAnimFrame + = 2 ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame + = 2 ;
if ( ! deltaload ) {
SetRndSeed ( object [ i ] . _oRndSeed ) ;
if ( setlevel ) {
@ -2664,8 +2662,8 @@ void OperateInnSignChest(int pnum, int i)
if ( object [ i ] . _oSelFlag ! = 0 ) {
if ( ! deltaload )
PlaySfxLoc ( IS_CHEST , object [ i ] . _ox , object [ i ] . _oy ) ;
object [ i ] . _oAnimFrame + = 2 ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame + = 2 ;
if ( ! deltaload ) {
GetSuperItemLoc ( object [ i ] . _ox , object [ i ] . _oy , x , y ) ;
SpawnQuestItem ( IDI_BANNER , x , y , 0 , 0 ) ;
@ -3462,8 +3460,8 @@ void OperateSkelBook(int pnum, int i, BOOL sendmsg)
if ( object [ i ] . _oSelFlag ! = 0 ) {
if ( ! deltaload )
PlaySfxLoc ( IS_ISCROL , object [ i ] . _ox , object [ i ] . _oy ) ;
object [ i ] . _oAnimFrame + = 2 ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame + = 2 ;
if ( ! deltaload ) {
SetRndSeed ( object [ i ] . _oRndSeed ) ;
if ( random_ ( 161 , 5 ) )
@ -3481,8 +3479,8 @@ void OperateBookCase(int pnum, int i, BOOL sendmsg)
if ( object [ i ] . _oSelFlag ! = 0 ) {
if ( ! deltaload )
PlaySfxLoc ( IS_ISCROL , object [ i ] . _ox , object [ i ] . _oy ) ;
object [ i ] . _oAnimFrame - = 2 ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame - = 2 ;
if ( ! deltaload ) {
SetRndSeed ( object [ i ] . _oRndSeed ) ;
CreateTypeItem ( object [ i ] . _ox , object [ i ] . _oy , FALSE , ITYPE_MISC , IMISC_BOOK , sendmsg , FALSE ) ;
@ -3519,8 +3517,8 @@ void OperateArmorStand(int pnum, int i, BOOL sendmsg)
BOOL uniqueRnd ;
if ( object [ i ] . _oSelFlag ! = 0 ) {
object [ i ] . _oAnimFrame + + ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame + + ;
if ( ! deltaload ) {
SetRndSeed ( object [ i ] . _oRndSeed ) ;
uniqueRnd = random_ ( 0 , 2 ) ;
@ -3728,8 +3726,8 @@ void OperateWeaponRack(int pnum, int i, BOOL sendmsg)
break ;
}
object [ i ] . _oAnimFrame + + ;
object [ i ] . _oSelFlag = 0 ;
object [ i ] . _oAnimFrame + + ;
if ( deltaload )
return ;
@ -3898,9 +3896,7 @@ void SyncOpL1Door(int pnum, int cmd, int i)
return ;
do_sync = FALSE ;
if ( cmd = = CMD_OPENDOOR ) {
if ( object [ i ] . _oVar4 ! = 0 )
return ;
if ( cmd = = CMD_OPENDOOR & & object [ i ] . _oVar4 = = 0 ) {
do_sync = TRUE ;
}
if ( cmd = = CMD_CLOSEDOOR & & object [ i ] . _oVar4 = = 1 )
@ -3921,9 +3917,7 @@ void SyncOpL2Door(int pnum, int cmd, int i)
return ;
do_sync = FALSE ;
if ( cmd = = CMD_OPENDOOR ) {
if ( object [ i ] . _oVar4 ! = 0 )
return ;
if ( cmd = = CMD_OPENDOOR & & object [ i ] . _oVar4 = = 0 ) {
do_sync = TRUE ;
}
if ( cmd = = CMD_CLOSEDOOR & & object [ i ] . _oVar4 = = 1 )
@ -3944,9 +3938,7 @@ void SyncOpL3Door(int pnum, int cmd, int i)
return ;
do_sync = FALSE ;
if ( cmd = = CMD_OPENDOOR ) {
if ( object [ i ] . _oVar4 ! = 0 )
return ;
if ( cmd = = CMD_OPENDOOR & & object [ i ] . _oVar4 = = 0 ) {
do_sync = TRUE ;
}
if ( cmd = = CMD_CLOSEDOOR & & object [ i ] . _oVar4 = = 1 )