hedgewars/uGears.pas
changeset 22 517be8dc5b76
parent 17 a6bed8d31444
child 24 79c411363184
equal deleted inserted replaced
21:dff476dcaaa3 22:517be8dc5b76
   485 procedure AddMiscGears;
   485 procedure AddMiscGears;
   486 var i, x, y: integer;
   486 var i, x, y: integer;
   487 begin
   487 begin
   488 for i:= 0 to cCloudsNumber do AddGear( - cScreenWidth + i * ((cScreenWidth * 2 + 2304) div cCloudsNumber), -128, gtCloud, random(4), (0.5-random)*0.01);
   488 for i:= 0 to cCloudsNumber do AddGear( - cScreenWidth + i * ((cScreenWidth * 2 + 2304) div cCloudsNumber), -128, gtCloud, random(4), (0.5-random)*0.01);
   489 AddGear(0, 0, gtActionTimer, gtsStartGame, 0, 0, 2000).Health:= 3;
   489 AddGear(0, 0, gtActionTimer, gtsStartGame, 0, 0, 2000).Health:= 3;
   490 for i:= 0 to 3 do
   490 if (GameFlags and gfForts) = 0 then
   491     begin
   491    begin
   492     GetHHPoint(x, y);
   492    for i:= 0 to 3 do
   493     AddGear(X, Y + 9, gtMine, 0);
   493        begin
   494     end;
   494        GetHHPoint(x, y);
       
   495        AddGear(X, Y + 9, gtMine, 0);
       
   496        end;
       
   497    end;
   495 end;
   498 end;
   496 
   499 
   497 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord);
   500 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord);
   498 var Gear: PGear;
   501 var Gear: PGear;
   499     dmg: integer;
   502     dmg: integer;
   574       begin
   577       begin
   575       if t.Kind in Kind then
   578       if t.Kind in Kind then
   576          if sqr(mX - t.X) / rX + sqr(mY - t.Y) / rY <= 1 then
   579          if sqr(mX - t.X) / rX + sqr(mY - t.Y) / rY <= 1 then
   577             begin
   580             begin
   578             Result:= t;
   581             Result:= t;
       
   582             {$IFDEF DEBUGFILE}AddFileLog('CheckGearsNear: near ('+inttostr(mx)+','+inttostr(my)+') is gear '+inttostr(integer(t)));{$ENDIF}
   579             exit
   583             exit
   580             end;
   584             end;
   581       t:= t.NextGear
   585       t:= t.NextGear
   582       end;
   586       end;
   583 Result:= nil
   587 Result:= nil
   597 
   601 
   598 procedure SpawnBoxOfSmth;
   602 procedure SpawnBoxOfSmth;
   599 var i, x, y, k: integer;
   603 var i, x, y, k: integer;
   600     b: boolean;
   604     b: boolean;
   601 begin
   605 begin
   602 if CountGears(gtCase) > 4 then exit;
   606 exit; // hack
       
   607 if CountGears(gtCase) > 2 then exit;
   603 k:= 7;
   608 k:= 7;
   604 repeat
   609 repeat
   605   x:= getrandom(2000) + 24;
   610   x:= getrandom(2000) + 24;
       
   611   {$IFDEF DEBUGFILE}AddFileLog('SpawnBoxOfSmth: check x = '+inttostr(x));{$ENDIF}
   606   b:= false;
   612   b:= false;
   607   y:= -1;
   613   y:= -1;
   608   while (y < 1024) and not b do
   614   while (y < 1023) and not b do
   609         begin
   615         begin
   610         inc(y);
   616         inc(y);
   611         i:= x - 14;
   617         i:= x - 13;
   612         while (i <= x + 14) and not b do // 14 is gtCase HalfWidth
   618         while (i <= x + 13) and not b do // 13 is gtCase HalfWidth-1
   613               begin
   619               begin
   614               if Land[y, i] <> 0 then b:= true;
   620               if Land[y, i] <> 0 then
       
   621                  begin
       
   622                  b:= true;
       
   623                  {$IFDEF DEBUGFILE}AddFileLog('SpawnBoxOfSmth: Land['+inttostr(y)+','+inttostr(i)+'] <> 0');{$ENDIF}
       
   624                  end;
   615               inc(i)
   625               inc(i)
   616               end;
   626               end;
   617         end;
   627         end;
   618   if b then
   628   if b then
   619      b:= CheckGearsNear(x, y, [gtMine, gtHedgehog, gtCase], 70, 70) = nil;
   629      b:= CheckGearsNear(x, y, [gtMine, gtHedgehog, gtCase], 70, 70) = nil;