Changeset 549
- Timestamp:
- Apr 21, 2024, 8:55:53 PM (7 months ago)
- Location:
- trunk
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AI/StdAI/AI.pas
r548 r549 1788 1788 DistrictNeed, DistrictNeed0: array[0..maxCOD - 1] of Integer; 1789 1789 ModelOrder: array[0..nMmax - 1] of Integer; 1790 complete, Fortified: Boolean;1790 Complete, Fortified: Boolean; 1791 1791 1792 1792 function IsBombarded(cix: Integer): Boolean; … … 1953 1953 end; 1954 1954 1955 complete := Loop >= FirstSurplusLoop[Cat];1955 Complete := Loop >= FirstSurplusLoop[Cat]; 1956 1956 for I := nModelOrder - 1 downto 0 do 1957 1957 begin … … 1967 1967 Dec(DistrictNeed[District[Loc]]); 1968 1968 Destination[uix] := Loc; 1969 complete := False;1969 Complete := False; 1970 1970 end; 1971 1971 … … 1980 1980 FindDestination(uix); 1981 1981 if Destination[uix] >= 0 then 1982 complete := False;1982 Complete := False; 1983 1983 end; 1984 1984 end; 1985 1985 Inc(Loop) 1986 until complete;1986 until Complete; 1987 1987 end; 1988 1988 … … 2005 2005 DistrictNeed0 := DistrictNeed; 2006 2006 2007 complete := True;2007 Complete := True; 2008 2008 for uix := 0 to RO.nUn - 1 do 2009 2009 with MyUnit[uix] do … … 2015 2015 begin 2016 2016 if DistrictNeed0[District[Loc]] > 0 then 2017 complete := False;2017 Complete := False; 2018 2018 end 2019 2019 else … … 2021 2021 FindDestination(uix); 2022 2022 // if (Destination[uix]<0) and (RO.Territory[Loc]=me) then 2023 // complete:=false; // causes hangup when unit can't move due to zoc2023 // Complete:=false; // causes hangup when unit can't move due to zoc 2024 2024 end; 2025 until complete;2025 until Complete; 2026 2026 2027 2027 for uix := 0 to RO.nUn - 1 do … … 2044 2044 case ModelCat[mix] of 2045 2045 mctGroundDefender, mctGroundAttacker: 2046 Dec(UnitLack[District[Loc], ModelCat[mix]]) 2046 Dec(UnitLack[District[Loc], ModelCat[mix]]); 2047 2047 end; 2048 2048 end; … … 2351 2351 F := Formation[AdjacentLoc]; 2352 2352 if (F >= 0) and (F < maxCOD) and (OceanPresence[F] and 2353 not (1 shl Me) <> 0) then 2354 Result := True; 2353 not (1 shl Me) <> 0) then begin 2354 Result := True; 2355 Exit; 2356 end; 2355 2357 end; 2356 2358 end; -
trunk/AI/StdAI/Barbarina.pas
r531 r549 218 218 Result := True; 219 219 for cix := 0 to RO.nCity - 1 do 220 with MyCity[cix] do 220 with MyCity[cix] do begin 221 221 if Loc >= 0 then 222 222 begin // search for modern resource … … 225 225 begin 226 226 Loc1 := Radius[V21]; 227 if (Loc1 >= 0) and (RO.Map[Loc1] and fModern <> 0) then 227 if (Loc1 >= 0) and (RO.Map[Loc1] and fModern <> 0) then begin 228 228 Result := False; 229 end; 230 end; 229 Break; 230 end; 231 end; 232 end; 233 if not Result then Break; 234 end; 231 235 end 232 236 else if IsResearched(adGunPowder) then … … 892 896 for F := 0 to maxCOD - 1 do 893 897 if (F < nContinent) and (ContinentPresence[F] and not 894 (1 shl Me or PresenceUnknown) <> 0) then 895 Go := True; // any enemy island known? 898 (1 shl Me or PresenceUnknown) <> 0) then begin 899 Go := True; // any enemy island known? 900 Break; 901 end; 896 902 if not Go then 897 903 Exit; … … 922 928 (TroopLoad = 0) and (Health = 100) then 923 929 begin 924 go := True;930 Go := True; 925 931 SeaTransport_AddTransport(uix); 926 932 end; … … 1170 1176 if MyUnit[uix].Loc >= 0 then 1171 1177 RateAttack(uix); 1172 end 1173 until BackToStart 1178 end; 1179 until BackToStart; 1174 1180 until not BackToStart; 1175 1181 … … 1214 1220 function LowPriority(cix: Integer): Boolean; 1215 1221 var 1216 part, cixHighPriority, TestDistance: Integer;1222 Part, cixHighPriority, TestDistance: Integer; 1217 1223 begin 1218 1224 Result := False; 1219 for part := 0 to nShipPart - 1 do1225 for Part := 0 to nShipPart - 1 do 1220 1226 begin 1221 cixHighPriority := ColonyShipPlan[ part].cixProducing;1227 cixHighPriority := ColonyShipPlan[Part].cixProducing; 1222 1228 if (cixHighPriority >= 0) and (cixHighPriority <> cix) then 1223 1229 begin … … 1375 1381 for cix := 0 to RO.nCity - 1 do 1376 1382 with MyCity[cix] do 1377 if (Loc >= 0) and (Project and (cpImp + cpIndex) = cpImp + imAlgae) then 1383 if (Loc >= 0) and (Project and (cpImp + cpIndex) = cpImp + imAlgae) then begin 1378 1384 AlgaeAvailable := False; 1385 Break; 1386 end; 1379 1387 1380 1388 for cix := 0 to RO.nCity - 1 do … … 1494 1502 with MyUnit[uix] do 1495 1503 if (Loc >= 0) and (Home = cix) and 1496 (MyModel[mix].Kind = mkSettler) then 1497 HasSettler := True; 1504 (MyModel[mix].Kind = mkSettler) then begin 1505 HasSettler := True; 1506 Break; 1507 end; 1498 1508 if ((RO.Government <> gDespotism) or (RO.nUn >= RO.nCity * 4)) and 1499 1509 not IsResearched(adMassProduction) and (Built[imPalace] > 0) and … … 1552 1562 ImportantCity := WillProduceColonyShip or (Built[imPalace] > 0); 1553 1563 for iix := 0 to nWonder - 1 do 1554 if Built[iix] > 0 then 1564 if Built[iix] > 0 then begin 1555 1565 ImportantCity := True; 1566 Break; 1567 end; 1556 1568 City_GetReportNew(cix, Report); 1557 1569 if (Report.Corruption >= 6) and (RO.nUn >= RO.nCity * 4) and … … 1697 1709 for I := 0 to nFeature - 1 do 1698 1710 if (Cap[I] > 0) and (Feature[I].Preq <> preNone) and 1699 ((Feature[I].Preq < 0) or not IsResearched(Feature[I].Preq)) then 1700 Ready := False; 1711 ((Feature[I].Preq < 0) or not IsResearched(Feature[I].Preq)) then begin 1712 Ready := False; 1713 Break; 1714 end; 1701 1715 if Ready then 1702 1716 begin 1703 1717 for I := 0 to nUpgrade - 1 do 1704 1718 if (Upgrades and (1 shl I) <> 0) and not 1705 IsResearched(Upgrade[Domain, I].Preq) then 1706 Ready := False; 1719 IsResearched(Upgrade[Domain, I].Preq) then begin 1720 Ready := False; 1721 Break; 1722 end; 1707 1723 end; 1708 1724 if Ready then … … 1911 1927 for Part := 0 to nShipPart - 1 do 1912 1928 if (RO.Ship[Me].Parts[Part] < ShipNeed[Part]) // not enough of this kind already 1913 and (ColonyShipPlan[Part].cixProducing < 0) then // no city to produce 1914 Check := True; 1929 and (ColonyShipPlan[Part].cixProducing < 0) then begin // no city to produce 1930 Check := True; 1931 Break; 1932 end; 1915 1933 if Check then 1916 1934 begin -
trunk/CityProcessing.pas
r548 r549 1605 1605 RareOK := False; 1606 1606 for iH := 0 to nHierarchy - 1 do 1607 if Hierarchy[iH, nSelection[iH]].V21 and RareTiles <> 0 then 1607 if Hierarchy[iH, nSelection[iH]].V21 and RareTiles <> 0 then begin 1608 1608 RareOK := True; 1609 Break; 1610 end; 1609 1611 if not RareOK then 1610 1612 TestReport.ProdRep := TestReport.Support; -
trunk/Database.pas
r548 r549 1036 1036 begin 1037 1037 Loc1 := dLoc(Loc, Dir and 1 * 2 - 1, Dir shr 1 * 2 - 1); 1038 if (Loc1 >= 0) and (RealMap[Loc1] and fTerrain < fGrass) then 1038 if (Loc1 >= 0) and (RealMap[Loc1] and fTerrain < fGrass) then begin 1039 1039 OneTileLake := False; 1040 Break; 1041 end; 1040 1042 end; 1041 1043 if not OneTileLake then … … 1416 1418 Ok := True; 1417 1419 for C := 1 to nsc do 1418 if nCityLoc[C] < sccount[C] * (8 - MinGood) div (7 - MinGood) then 1420 if nCityLoc[C] < sccount[C] * (8 - MinGood) div (7 - MinGood) then begin 1419 1421 Ok := False; 1422 Break; 1423 end; 1420 1424 until Ok; 1421 1425 -
trunk/GameServer.pas
r531 r549 474 474 for ix := 0 to RW[P].nUn - 1 do 475 475 with RW[P].Un[ix] do 476 if (Loc >= 0) and (SavedStatus <> Status) then 476 if (Loc >= 0) and (SavedStatus <> Status) then begin 477 477 Result := True; 478 Exit; 479 end; 478 480 for ix := 0 to RW[P].nCity - 1 do 479 481 with RW[P].City[ix] do 480 if (Loc >= 0) and (SavedStatus <> Status) then 482 if (Loc >= 0) and (SavedStatus <> Status) then begin 481 483 Result := True; 484 Exit; 485 end; 482 486 for ix := 0 to RW[P].nModel - 1 do 483 487 with RW[P].Model[ix] do 484 if SavedStatus <> Status then 488 if SavedStatus <> Status then begin 485 489 Result := True; 490 Exit; 491 end; 486 492 for ix := 0 to RW[P].nEnemyCity - 1 do 487 493 with RW[P].EnemyCity[ix] do 488 if (Loc >= 0) and (SavedStatus <> Status) then 494 if (Loc >= 0) and (SavedStatus <> Status) then begin 489 495 Result := True; 496 Exit; 497 end; 490 498 if RW[P].Data <> nil then 491 499 for ix := 0 to bix[P].DataSize - 1 do 492 if PDWortList(SavedData[P])[ix] <> PDWortList(RW[P].Data)[ix] then 500 if PDWortList(SavedData[P])[ix] <> PDWortList(RW[P].Data)[ix] then begin 493 501 Result := True; 502 Exit; 503 end; 494 504 end; 495 505 … … 1069 1079 for cix := 0 to RW[pTurn].nCity - 1 do 1070 1080 with RW[pTurn].City[cix] do 1071 if Loc >= 0 then 1072 begin 1073 // if SavedResourceWeights[cix]<>ResourceWeights then result:=true; 1074 if SavedTiles[cix] <> Tiles then 1081 if Loc >= 0 then begin 1082 // if SavedResourceWeights[cix] <> ResourceWeights then Result := true; 1083 if SavedTiles[cix] <> Tiles then begin 1075 1084 Result := True; 1085 Break; 1086 end; 1076 1087 end; 1077 1088 end; … … 1204 1215 Notify(ntLoadBegin); 1205 1216 1206 started := False;1217 Started := False; 1207 1218 StatRequest := False; 1208 1219 MovieStopped := False; … … 1224 1235 end; 1225 1236 // complete all internal commands following an sTurn before generating statistics 1226 if (Command = sTurn) and not started then1237 if (Command = sTurn) and not Started then 1227 1238 begin 1228 1239 {$IFDEF TEXTLOG}WriteLn(TextLog, '---Turn 0 P0---'); {$ENDIF} … … 1237 1248 end; 1238 1249 StatRequest := True; 1239 started := True;1250 Started := True; 1240 1251 end 1241 1252 else if (Command = sTurn) and (pTurn = 0) and (GTurn = LoadTurn) then … … 1283 1294 if StatRequest then 1284 1295 GenerateStat(pTurn); 1285 Assert( started);1296 Assert(Started); 1286 1297 {$IFDEF TEXTLOG}CloseFile(TextLog); {$ENDIF} 1287 1298 {$IFDEF LOADPERF}QueryPerformanceCounter(time_total); { time in s is: (time_total-time_total0)/PerfFreq }{$ENDIF} … … 1499 1510 procedure DestroyCity_TellPlayers(P, cix: Integer; SaveUnits: Boolean); 1500 1511 begin 1501 if RW[P].City[cix]. built[imSpacePort] > 0 then1512 if RW[P].City[cix].Built[imSpacePort] > 0 then 1502 1513 DestroySpacePort_TellPlayers(P, -1); 1503 1514 DestroyCity(P, cix, SaveUnits); … … 1506 1517 procedure ChangeCityOwner_TellPlayers(pOld, cixOld, pNew: Integer); 1507 1518 begin 1508 if RW[pOld].City[cixOld]. built[imSpacePort] > 0 then1519 if RW[pOld].City[cixOld].Built[imSpacePort] > 0 then 1509 1520 if RW[pNew].NatBuilt[imSpacePort] > 0 then 1510 1521 DestroySpacePort_TellPlayers(pOld, pNew) … … 1521 1532 ShipComplete := True; 1522 1533 for I := 0 to nShipPart - 1 do 1523 if GShip[P].Parts[I] < ShipNeed[I] then 1534 if GShip[P].Parts[I] < ShipNeed[I] then begin 1524 1535 ShipComplete := False; 1536 Break; 1537 end; 1525 1538 if ShipComplete then 1526 1539 GWinner := GWinner or 1 shl P; // game won! … … 1587 1600 for cix := 1 to nCity - 1 do 1588 1601 if (City[cix].Loc >= 0) and 1589 ((Loc1 < 0) or (City[cix]. built[imPalace] > 0)) then1602 ((Loc1 < 0) or (City[cix].Built[imPalace] > 0)) then 1590 1603 Loc1 := City[cix].Loc; 1591 1604 for uix := 0 to nUn - 1 do … … 1933 1946 for cix := 0 to RW[p1].nCity - 1 do 1934 1947 if (RW[p1].City[cix].Loc >= 0) and 1935 (RW[p1].City[cix]. built[imTemple] > 0) then1948 (RW[p1].City[cix].Built[imTemple] > 0) then 1936 1949 Inc(OracleIncome); 1937 1950 end; … … 2396 2409 dGround: 2397 2410 LoseCityPop := (PModel.Cap[mcArtillery] > 0) or 2398 (RW[MoveInfo.Defender].City[MoveInfo.Dcix]. built[imWalls] = 0) and2411 (RW[MoveInfo.Defender].City[MoveInfo.Dcix].Built[imWalls] = 0) and 2399 2412 (Continent[ToLoc] <> GrWallContinent[MoveInfo.Defender]); 2400 2413 dSea: 2401 LoseCityPop := RW[MoveInfo.Defender].City[MoveInfo.Dcix]. built2414 LoseCityPop := RW[MoveInfo.Defender].City[MoveInfo.Dcix].Built 2402 2415 [imCoastalFort] = 0; 2403 2416 dAir: 2404 LoseCityPop := RW[MoveInfo.Defender].City[MoveInfo.Dcix]. built2417 LoseCityPop := RW[MoveInfo.Defender].City[MoveInfo.Dcix].Built 2405 2418 [imMissileBat] = 0; 2406 2419 end; … … 2459 2472 for cix1 := 1 to nCity - 1 do 2460 2473 if (City[cix1].Loc >= 0) and 2461 ((ExpelToLoc < 0) or (City[cix1]. built[imPalace] > 0)) then2474 ((ExpelToLoc < 0) or (City[cix1].Built[imPalace] > 0)) then 2462 2475 ExpelToLoc := City[cix1].Loc; 2463 2476 end; … … 3105 3118 AllHumansDead := True; 3106 3119 for p1 := 0 to nPl - 1 do 3107 if (1 shl p1 and GAlive <> 0) and (bix[p1].Kind = btTerm) then 3120 if (1 shl p1 and GAlive <> 0) and (bix[p1].Kind = btTerm) then begin 3108 3121 AllHumansDead := False; 3122 Break; 3123 end; 3109 3124 if (pDipActive >= 0) // still in negotiation mode 3110 3125 or (pTurn = 0) and ((GWinner > 0) or (GTurn = MaxTurn) or … … 3225 3240 (Integer(Data) >= 0) and (Integer(Data) < GTurn); 3226 3241 for p1 := 1 to nPl - 1 do 3227 if bix[p1].Kind = btTerm then 3242 if bix[p1].Kind = btTerm then begin 3228 3243 Ok := False; 3244 Break; 3245 end; 3229 3246 // allow reload in AI-only games only 3230 3247 end … … 3363 3380 Result := eOfferNotAcceptable; 3364 3381 for I := 0 to nDeliver + nCost - 1 do 3365 if Price[I] = opChoose then 3382 if Price[I] = opChoose then begin 3366 3383 Result := eOfferNotAcceptable; 3384 Break; 3385 end; 3367 3386 for I := 0 to nCost - 1 do 3368 3387 if not PayPrice(pDipActive, p1, Price[nDeliver + I], False) then … … 3487 3506 begin // no tribute allowed! 3488 3507 for I := 0 to TOffer(Data).nDeliver + TOffer(Data).nCost - 1 do 3489 if (TOffer(Data).Price[I] and opMask = opTribute) then 3508 if (TOffer(Data).Price[I] and opMask = opTribute) then begin 3490 3509 Result := eInvalidOffer; 3510 Break; 3511 end; 3491 3512 for I := 0 to TOffer(Data).nDeliver + TOffer(Data).nCost - 1 do 3492 if (TOffer(Data).Price[I] = opTreaty + trPeace) then 3513 if (TOffer(Data).Price[I] = opTreaty + trPeace) then begin 3493 3514 Result := eOK; 3515 Break; 3516 end; 3494 3517 end; 3495 3518 for I := 0 to TOffer(Data).nDeliver - 1 do … … 3500 3523 Result := eInvalidOffer; 3501 3524 for I := 0 to nShipPart - 1 do 3502 if CountPrice(TOffer(Data), opShipParts + I shl 16) > 1 then 3525 if CountPrice(TOffer(Data), opShipParts + I shl 16) > 1 then begin 3503 3526 Result := eInvalidOffer; 3527 Break; 3528 end; 3504 3529 if CountPrice(TOffer(Data), opMoney) > 1 then 3505 3530 Result := eInvalidOffer; … … 4191 4216 for I := 0 to nImpReplacement - 1 do 4192 4217 if (ImpReplacement[I].OldImp = NewProject and cpIndex) and 4193 (built[ImpReplacement[I].NewImp] > 0) then 4194 Result := eObsolete; 4218 (Built[ImpReplacement[I].NewImp] > 0) then begin 4219 Result := eObsolete; 4220 Break; 4221 end; 4195 4222 if Result = eObsolete then 4196 4223 else if Preq = preNA then … … 4199 4226 then 4200 4227 Result := eNoPreq 4201 else if built[NewProject and cpIndex] > 0 then4228 else if Built[NewProject and cpIndex] > 0 then 4202 4229 Result := eInvalid 4203 4230 else if (NewProject and cpIndex < nWonder) and … … 4207 4234 (RW[Player].NatBuilt[imSpacePort] > 0) then 4208 4235 Result := eViolation // space port already exists 4209 else if (NewProject = cpImp + imBank) and ( built[imMarket] = 0)4236 else if (NewProject = cpImp + imBank) and (Built[imMarket] = 0) 4210 4237 or (NewProject = cpImp + imUniversity) and 4211 ( built[imLibrary] = 0) or (NewProject = cpImp + imResLab) and4212 ( built[imUniversity] = 0) or (NewProject = cpImp + imMfgPlant)4213 and ( built[imFactory] = 0) then4238 (Built[imLibrary] = 0) or (NewProject = cpImp + imResLab) and 4239 (Built[imUniversity] = 0) or (NewProject = cpImp + imMfgPlant) 4240 and (Built[imFactory] = 0) then 4214 4241 Result := eNoPreq; 4215 4242 case NewProject - cpImp of … … 4362 4389 else 4363 4390 with RW[Player].City[Subject] do 4364 if built[Integer(Data)] = 0 then4391 if Built[Integer(Data)] = 0 then 4365 4392 Result := eInvalid 4366 4393 else if (RW[Player].Government = gAnarchy) or … … 4373 4400 Inc(RW[Player].Money, Imp[Integer(Data)].Cost * BuildCostMod 4374 4401 [Difficulty[Player]] div 12); 4375 built[Integer(Data)] := 0;4402 Built[Integer(Data)] := 0; 4376 4403 if Imp[Integer(Data)].Kind in [ikNatLocal, ikNatGlobal] then 4377 4404 begin … … 4402 4429 else 4403 4430 with RW[Player].City[Subject] do 4404 if ( built[OldImp] = 0) or (Project and cpImp = 0) or4431 if (Built[OldImp] = 0) or (Project and cpImp = 0) or 4405 4432 not(Imp[Project and cpIndex].Kind in [ikCommon, ikNatLocal, 4406 4433 ikNatGlobal]) then … … 4419 4446 Project0 := Project; 4420 4447 Prod0 := Prod; 4421 built[OldImp] := 0;4448 Built[OldImp] := 0; 4422 4449 if Imp[OldImp].Kind in [ikNatLocal, ikNatGlobal] then 4423 4450 begin // nat. project lost -
trunk/LocalPlayer/CityScreen.pas
r548 r549 883 883 Sprite(Offscreen, HGrSystem, X - 4, Y + 29 - 3 * J, 10, 10, 884 884 132, 115); 885 end 885 end; 886 886 end; 887 887 if imix[0] >= 0 then … … 1082 1082 Loc1 := dLoc(cLoc, dx, dy); 1083 1083 if (Loc1 >= 0) and (Loc1 < G.lx * G.ly) and 1084 (MyMap[Loc1] and fTerrain < fGrass) then 1085 IsPort := True; 1084 (MyMap[Loc1] and fTerrain < fGrass) then begin 1085 IsPort := True; 1086 Break; 1087 end; 1086 1088 end; 1087 1089 -
trunk/LocalPlayer/ClientTools.pas
r531 r549 178 178 Result := False; 179 179 for p1 := 1 to nPl - 1 do 180 if G.RO[p1] <> nil then 180 if G.RO[p1] <> nil then begin 181 181 Result := True; 182 Break; 183 end; 182 184 end; 183 185 … … 373 375 if Abs(dx) + Abs(dy) = 2 then 374 376 if Server(sMoveUnit - sExecute + dx and 7 shl 4 + dy and 375 7 shl 7, Me, uix, nil^) >= rExecuted then 376 Result := False; 377 7 shl 7, Me, uix, nil^) >= rExecuted then begin 378 Result := False; 379 Exit; 380 end; 377 381 end; 378 382 … … 608 612 dx := fix and 3 shl 1 - 3 + (dy + 3) and 1; 609 613 Loc1 := dLoc(MyCity[cix].Loc, dx, dy); 610 if MarkCitiesAround(Loc1, cix) then 614 if MarkCitiesAround(Loc1, cix) then begin 611 615 Done := False; 616 Break; 617 end; 612 618 end; 613 619 Server(sSetCityTiles, Me, cix, Advice.Tiles); … … 664 670 dx := fix and 3 shl 1 - 3 + (dy + 3) and 1; 665 671 Loc1 := dLoc(MyCity[cix].Loc, dx, dy); 666 if MarkCitiesAround(Loc1, cix) then 672 if MarkCitiesAround(Loc1, cix) then begin 667 673 Done := False; 674 Break; 675 end; 668 676 end; 669 677 if not Done then -
trunk/LocalPlayer/Draft.pas
r536 r549 307 307 for I := 0 to Lines - 1 do 308 308 begin 309 if not (Code[I] in AutoFeature) then309 if not (Code[I] in AutoFeature) then 310 310 begin 311 311 // paint +/- butttons … … 458 458 procedure TDraftDlg.FormShow(Sender: TObject); 459 459 var 460 count, D, I: Integer;460 Count, D, I: Integer; 461 461 begin 462 462 Domain := dGround; … … 465 465 Inc(Domain); 466 466 467 // count max number of features in any domain467 // Count max number of features in any domain 468 468 MaxLines := 0; 469 469 for D := 0 to nDomains - 1 do … … 471 471 (MyRO.Tech[upgrade[D, 0].Preq] >= tsApplicable) then 472 472 begin 473 count := 0;473 Count := 0; 474 474 for I := 0 to nFeature - 1 do 475 475 if IsFeatureInList(D, I) then 476 Inc( count);477 if count > MaxLines then478 MaxLines := count;476 Inc(Count); 477 if Count > MaxLines then 478 MaxLines := Count; 479 479 end; 480 480 Cut := (MaxLines0 - MaxLines) * LinePitch; -
trunk/LocalPlayer/Help.pas
r531 r549 965 965 else if Item = 'AITSTAT' then 966 966 for I := 0 to 3 do 967 AddLine(Phrases2.Lookup('AITSTAT', I), pkAITStat, I) 967 AddLine(Phrases2.Lookup('AITSTAT', I), pkAITStat, I); 968 968 end; 969 969 end; … … 1522 1522 for Domain := 0 to nDomains - 1 do 1523 1523 for I := 1 to nUpgrade - 1 do 1524 if upgrade[Domain, I].Preq = No then1524 if Upgrade[Domain, I].Preq = No then 1525 1525 begin 1526 if upgrade[Domain, I].Strength > 0 then1526 if Upgrade[Domain, I].Strength > 0 then 1527 1527 AddLine(Format(HelpText.Lookup('STRENGTHUP'), 1528 1528 [Phrases.Lookup('DOMAIN', Domain), upgrade[Domain, 1529 1529 I].Strength]), pkDomain, Domain); 1530 if upgrade[Domain, I].Trans > 0 then1530 if Upgrade[Domain, I].Trans > 0 then 1531 1531 AddLine(Format(HelpText.Lookup('TRANSUP'), 1532 1532 [Phrases.Lookup('DOMAIN', Domain), upgrade[Domain, I].Trans] … … 1534 1534 if No in FutureTech then 1535 1535 AddLine(Format(HelpText.Lookup('COSTUP'), 1536 [ upgrade[Domain, I].Cost]), pkNormal_Dot)1536 [Upgrade[Domain, I].Cost]), pkNormal_Dot) 1537 1537 else 1538 1538 AddLine(Format(HelpText.Lookup('COSTMIN'), 1539 [ upgrade[Domain, I].Cost]), pkNormal_Dot)1539 [Upgrade[Domain, I].Cost]), pkNormal_Dot) 1540 1540 end; 1541 1541 NextSection('EXPIRATION'); -
trunk/LocalPlayer/IsoEngine.pas
r548 r549 39 39 function IsShoreTile(Loc: Integer): Boolean; 40 40 procedure MakeDark(Line: PPixelPointer; Length: Integer); 41 procedure NameCity(X, Y, Loc: Integer); 42 procedure PaintBorder(X, Y, Loc, Tile: Integer); 43 function PoleTile(Loc: Integer): Integer; 41 44 procedure SetTileSize(AValue: TTileSize); 42 45 procedure ShadeOutside(x0, y0, Width, Height, xm, ym: Integer); 46 procedure ShowSpacePort(X, Y, Tile: Integer; CityInfo: TCityInfo); 43 47 protected 44 48 FOutput: TBitmap; … … 803 807 end; 804 808 805 function PoleTile(Loc: Integer): Integer;809 function TIsoMap.PoleTile(Loc: Integer): Integer; 806 810 begin { virtual pole tile } 807 811 Result := fUNKNOWN; … … 1047 1051 end; 1048 1052 1053 procedure TIsoMap.NameCity(X, Y, Loc: Integer); 1054 var 1055 cix, xs, W: Integer; 1056 BehindCityInfo: TCityInfo; 1057 S: string; 1058 IsCapital: Boolean; 1059 begin 1060 BehindCityInfo.Loc := Loc - 2 * G.lx; 1061 if ShowCityNames and not (moEditMode in MapOptions) and 1062 (BehindCityInfo.Loc >= 0) and (BehindCityInfo.Loc < G.lx * G.ly) and 1063 (MyMap[BehindCityInfo.Loc] and fCity <> 0) then 1064 begin 1065 GetCityInfo(BehindCityInfo.Loc, cix, BehindCityInfo); 1066 IsCapital := BehindCityInfo.Flags and ciCapital <> 0; 1067 { if Showuix and (cix>=0) then s:=IntToStr(cix) 1068 else } S := CityName(BehindCityInfo.ID); 1069 W := FOutput.Canvas.TextWidth(S); 1070 xs := X + xxt - (W + 1) div 2; 1071 if IsCapital then 1072 FOutput.Canvas.Font.Style := FOutput.Canvas.Font.Style + [TFontStyle.fsUnderline]; 1073 TextOut(xs + 1, Y - 9, $000000, S); 1074 TextOut(xs, Y - 10, $FFFFFF, S); 1075 if IsCapital then 1076 FOutput.Canvas.Font.Style := FOutput.Canvas.Font.Style - [TFontStyle.fsUnderline]; 1077 end; 1078 end; 1079 1080 procedure TIsoMap.PaintBorder(X, Y, Loc, Tile: Integer); 1081 var 1082 dx, dy: Integer; 1083 p1, p2, Loc1: Integer; 1084 begin 1085 if ShowBorder and (Loc >= 0) and (Loc < G.lx * G.ly) and 1086 (Tile and fTerrain <> fUNKNOWN) then begin 1087 p1 := MyRO.Territory[Loc]; 1088 if (p1 >= 0) and (ShowMyBorder or (p1 <> Me)) then begin 1089 if BordersOK^ and (1 shl p1) = 0 then begin 1090 UnshareBitmap(Borders); 1091 BitBltBitmap(Borders, 0, p1 * (yyt * 2), xxt * 2, 1092 yyt * 2, HGrTerrain.Data, 1093 1 + 8 * (xxt * 2 + 1), 1 + yyt + 16 * (yyt * 3 + 1)); 1094 BitmapReplaceColor(Borders, 0, p1 * (yyt * 2), xxt * 2, yyt * 2, $636363, Tribe[p1].Color); 1095 BordersOK^ := BordersOK^ or 1 shl p1; 1096 end; 1097 for dy := 0 to 1 do 1098 for dx := 0 to 1 do begin 1099 Loc1 := dLoc(Loc, dx * 2 - 1, dy * 2 - 1); 1100 begin 1101 if (Loc1 < 0) or (Loc1 >= G.lx * G.ly) then 1102 p2 := -1 1103 else if MyMap[Loc1] and fTerrain = fUNKNOWN then 1104 p2 := p1 1105 else 1106 p2 := MyRO.Territory[Loc1]; 1107 if p2 <> p1 then 1108 begin 1109 BitBltBitmapOutput(HGrTerrain.Mask, X + dx * xxt, Y + dy * yyt, xxt, 1110 yyt, 1 + 8 * (xxt * 2 + 1) + dx * xxt, 1111 1 + yyt + 16 * (yyt * 3 + 1) + dy * yyt, SRCAND); 1112 BitBltBitmapOutput(Borders, X + dx * xxt, Y + dy * yyt, xxt, yyt, dx * xxt, 1113 p1 * (yyt * 2) + dy * yyt, SRCPAINT); 1114 end; 1115 end; 1116 end; 1117 end; 1118 end; 1119 end; 1120 1121 procedure TIsoMap.ShowSpacePort(X, Y, Tile: Integer; CityInfo: TCityInfo); 1122 begin 1123 if ShowObjects and not (moEditMode in MapOptions) and 1124 (Tile and fCity <> 0) and (CityInfo.Flags and ciSpacePort <> 0) then 1125 TerrainSprite(X + xxt, Y - 6, spSpacePort); 1126 end; 1127 1049 1128 // (x,y) is top left pixel of (2*xxt,3*yyt) rectangle 1050 1129 procedure TIsoMap.PaintTileObjects(X, Y, Loc, CityLoc, CityOwner: Integer; 1051 1130 UseBlink: Boolean); 1052 1131 var 1053 p1, p2, uix, cix, dy, Loc1, Tile, Multi, Destination: Integer;1132 uix, cix, dy, Tile, Multi, Destination: Integer; 1054 1133 CityInfo: TCityInfo; 1055 1134 UnitInfo: TUnitInfo; … … 1057 1136 SpecialRow: Integer; 1058 1137 SpecialCol: Integer; 1059 1060 procedure NameCity;1061 var1062 cix, xs, W: Integer;1063 BehindCityInfo: TCityInfo;1064 S: string;1065 IsCapital: Boolean;1066 begin1067 BehindCityInfo.Loc := Loc - 2 * G.lx;1068 if ShowCityNames and not (moEditMode in MapOptions) and1069 (BehindCityInfo.Loc >= 0) and (BehindCityInfo.Loc < G.lx * G.ly) and1070 (MyMap[BehindCityInfo.Loc] and fCity <> 0) then1071 begin1072 GetCityInfo(BehindCityInfo.Loc, cix, BehindCityInfo);1073 IsCapital := BehindCityInfo.Flags and ciCapital <> 0;1074 { if Showuix and (cix>=0) then s:=IntToStr(cix)1075 else } S := CityName(BehindCityInfo.ID);1076 W := FOutput.Canvas.TextWidth(S);1077 xs := X + xxt - (W + 1) div 2;1078 if IsCapital then1079 FOutput.Canvas.Font.Style := FOutput.Canvas.Font.Style + [TFontStyle.fsUnderline];1080 TextOut(xs + 1, Y - 9, $000000, S);1081 TextOut(xs, Y - 10, $FFFFFF, S);1082 if IsCapital then1083 FOutput.Canvas.Font.Style := FOutput.Canvas.Font.Style - [TFontStyle.fsUnderline];1084 end;1085 end;1086 1087 procedure ShowSpacePort;1088 begin1089 if ShowObjects and not (moEditMode in MapOptions) and1090 (Tile and fCity <> 0) and (CityInfo.Flags and ciSpacePort <> 0) then1091 TerrainSprite(X + xxt, Y - 6, spSpacePort);1092 end;1093 1094 procedure PaintBorder;1095 var1096 dx, dy: Integer;1097 begin1098 if ShowBorder and (Loc >= 0) and (Loc < G.lx * G.ly) and1099 (Tile and fTerrain <> fUNKNOWN) then begin1100 p1 := MyRO.Territory[Loc];1101 if (p1 >= 0) and (ShowMyBorder or (p1 <> Me)) then begin1102 if BordersOK^ and (1 shl p1) = 0 then begin1103 UnshareBitmap(Borders);1104 BitBltBitmap(Borders, 0, p1 * (yyt * 2), xxt * 2,1105 yyt * 2, HGrTerrain.Data,1106 1 + 8 * (xxt * 2 + 1), 1 + yyt + 16 * (yyt * 3 + 1));1107 BitmapReplaceColor(Borders, 0, p1 * (yyt * 2), xxt * 2, yyt * 2, $636363, Tribe[p1].Color);1108 BordersOK^ := BordersOK^ or 1 shl p1;1109 end;1110 for dy := 0 to 1 do1111 for dx := 0 to 1 do begin1112 Loc1 := dLoc(Loc, dx * 2 - 1, dy * 2 - 1);1113 begin1114 if (Loc1 < 0) or (Loc1 >= G.lx * G.ly) then1115 p2 := -11116 else if MyMap[Loc1] and fTerrain = fUNKNOWN then1117 p2 := p11118 else1119 p2 := MyRO.Territory[Loc1];1120 if p2 <> p1 then1121 begin1122 BitBltBitmapOutput(HGrTerrain.Mask, X + dx * xxt, Y + dy * yyt, xxt,1123 yyt, 1 + 8 * (xxt * 2 + 1) + dx * xxt,1124 1 + yyt + 16 * (yyt * 3 + 1) + dy * yyt, SRCAND);1125 BitBltBitmapOutput(Borders, X + dx * xxt, Y + dy * yyt, xxt, yyt, dx * xxt,1126 p1 * (yyt * 2) + dy * yyt, SRCPAINT);1127 end;1128 end;1129 end;1130 end;1131 end;1132 end;1133 1134 1138 begin 1135 1139 if (Loc < 0) or (Loc >= G.lx * G.ly) then … … 1143 1147 (X > FRight) then 1144 1148 begin 1145 NameCity ;1146 ShowSpacePort ;1149 NameCity(X, Y, Loc); 1150 ShowSpacePort(X, Y, Tile, CityInfo); 1147 1151 Exit; 1148 1152 end; 1149 1153 if Tile and fTerrain = fUNKNOWN then 1150 1154 begin 1151 NameCity ;1152 ShowSpacePort ;1155 NameCity(X, Y, Loc); 1156 ShowSpacePort(X, Y, Tile, CityInfo); 1153 1157 Exit; 1154 1158 end; { square not discovered } 1155 1159 1156 1160 if not (FoW and (Tile and fObserved = 0)) then 1157 PaintBorder ;1161 PaintBorder(X, Y, Loc, Tile); 1158 1162 1159 1163 if (Loc >= 0) and (Loc < G.lx * G.ly) and (Loc = FAdviceLoc) then … … 1211 1215 1212 1216 if FoW and (Tile and fObserved = 0) then 1213 PaintBorder ;1217 PaintBorder(X, Y, Loc, Tile); 1214 1218 1215 1219 {$IFNDEF SCR} … … 1239 1243 else TerrainSprite(X, Y, 8 + 9 * 1); } 1240 1244 1241 NameCity ;1242 ShowSpacePort ;1245 NameCity(X, Y, Loc); 1246 ShowSpacePort(X, Y, Tile, CityInfo); 1243 1247 if Tile and fCity <> 0 then 1244 1248 PaintCity(X + xxt, Y + yyt, CityInfo, CityOwner < 0); … … 1383 1387 begin 1384 1388 Result := False; 1385 for Dir := 0 to 7 do 1386 begin 1389 for Dir := 0 to 7 do begin 1387 1390 ConnLoc := dLoc(Loc, Dirx[Dir], Diry[Dir]); 1388 1391 if (ConnLoc < 0) or (ConnLoc >= G.lx * G.ly) or 1389 ((MyMap[ConnLoc] - 2) and fTerrain < 13) then 1390 Result := True; 1392 ((MyMap[ConnLoc] - 2) and fTerrain < 13) then begin 1393 Result := True; 1394 Break; 1395 end; 1391 1396 end; 1392 1397 end; -
trunk/LocalPlayer/NatStat.pas
r536 r549 229 229 HasContact := False; 230 230 for p1 := 0 to nPl - 1 do 231 if (p1 <> Me) and (CurrentReport.Treaty[p1] > trNoContact) then 231 if (p1 <> Me) and (CurrentReport.Treaty[p1] > trNoContact) then begin 232 232 HasContact := True; 233 Break; 234 end; 233 235 if HasContact then 234 236 begin -
trunk/LocalPlayer/Nego.pas
r531 r549 366 366 begin 367 367 MyAllowed := MyAllowed + [opAllTech shr 24]; 368 Break 368 Break; 369 369 end; 370 370 OppoAllowed := OppoAllowed + [opCivilReport shr 24, opAllTech shr 24]; -
trunk/LocalPlayer/Select.pas
r536 r549 1119 1119 if (Loc1 >= 0) and (Loc1 < G.lx * G.ly) and 1120 1120 ((MyMap[Loc1] and fTerrain = fShore) or 1121 (MyMap[Loc1] and fCanal > 0)) then 1122 Ok := True; 1121 (MyMap[Loc1] and fCanal > 0)) then begin 1122 Ok := True; 1123 Break; 1124 end; 1123 1125 end; 1124 1126 end … … 1166 1168 for I := 0 to nDomains - 1 do 1167 1169 if (upgrade[I, 0].Preq = preNone) or 1168 (MyRO.Tech[upgrade[I, 0].Preq] >= tsApplicable) then 1169 Ok := True; 1170 (MyRO.Tech[upgrade[I, 0].Preq] >= tsApplicable) then begin 1171 Ok := True; 1172 Break; 1173 end; 1170 1174 if Ok then { new unit class } 1171 1175 begin … … 1273 1277 with MyRO.EnemyReport[Column[J]]^ do 1274 1278 if (MyRO.Alive and (1 shl Column[J]) <> 0) and 1275 (TurnOfCivilReport >= 0) and (ResearchTech = adMilitary) then 1276 Ok := True; 1279 (TurnOfCivilReport >= 0) and (ResearchTech = adMilitary) then begin 1280 Ok := True; 1281 Break; 1282 end; 1277 1283 if Ok then 1278 1284 begin … … 1333 1339 for emix := 0 to MyRO.nEnemyModel - 1 do 1334 1340 if (MyRO.EnemyModel[emix].Owner = DipMem[Me].pContact) and 1335 IsSameModel(MyRO.EnemyModel[emix], mi) then 1336 Ok := False; 1341 IsSameModel(MyRO.EnemyModel[emix], mi) then begin 1342 Ok := False; 1343 Break; 1344 end; 1337 1345 if Ok then 1338 1346 begin … … 1439 1447 end; 1440 1448 SortModels; 1441 FirstShrinkedLine[0] := 0 1449 FirstShrinkedLine[0] := 0; 1442 1450 end; 1443 1451 kTribe: … … 1554 1562 MultiPage := False; 1555 1563 for I := 1 to MaxLayer - 1 do 1556 if Lines[I] > 0 then 1564 if Lines[I] > 0 then begin 1557 1565 MultiPage := True; 1566 Break; 1567 end; 1558 1568 WideBottom := MultiPage or (Kind = kScience) or 1559 1569 not Phrases2FallenBackToEnglish and … … 1737 1747 ((AdvValue[I] < 2000) or (MyRO.Tech[adMassProduction] > tsNA)) and 1738 1748 ((AdvValue[I] < 1000) or (MyRO.Tech[adScience] > tsNA)) and 1739 (Server(sSetResearch - sExecute, Me, I, nil^) < rExecuted) then 1740 ShowFocus := True; 1749 (Server(sSetResearch - sExecute, Me, I, nil^) < rExecuted) then begin 1750 ShowFocus := True; 1751 Break; 1752 end; 1741 1753 end; 1742 1754 ToggleBtn.Visible := (Kind = kCities) and not Supervising or (Kind = kAdvance) -
trunk/LocalPlayer/Term.pas
r545 r549 1228 1228 IsTreatyDeal := False; 1229 1229 for I := 0 to ReceivedOffer.nDeliver + ReceivedOffer.nCost - 1 do 1230 if ReceivedOffer.Price[I] and opMask = opTreaty then 1230 if ReceivedOffer.Price[I] and opMask = opTreaty then begin 1231 1231 IsTreatyDeal := True; 1232 Break; 1233 end; 1232 1234 if IsTreatyDeal then 1233 1235 Play('NEWTREATY') … … 1466 1468 var 1467 1469 I, cix, mix: Integer; 1468 need: Boolean;1470 Need: Boolean; 1469 1471 mi: TModelInfo; 1470 1472 begin … … 1475 1477 end; 1476 1478 if (sbWonder in Check) and not (sbWonder in SoundPreloadDone) then begin 1477 need := False;1479 Need := False; 1478 1480 for I := 0 to nWonder - 1 do 1479 if MyRO.Wonder[I].CityID <> WonderNotBuiltYet then 1480 need := True; 1481 if need then begin 1481 if MyRO.Wonder[I].CityID <> WonderNotBuiltYet then begin 1482 Need := True; 1483 Break; 1484 end; 1485 if Need then begin 1482 1486 for I := 0 to nWonderBlock - 1 do 1483 1487 PreparePlay(WonderBlock[I]); … … 1630 1634 for I := 0 to nShipPart - 1 do 1631 1635 begin 1632 if Ship1Change[I] > 0 then 1633 Ship1Plus := True; 1634 if Ship2Change[I] > 0 then 1635 Ship2Plus := True; 1636 if Ship1Change[I] > 0 then Ship1Plus := True; 1637 if Ship2Change[I] > 0 then Ship2Plus := True; 1636 1638 end; 1637 1639 if Ship1Plus and Ship2Plus then … … 2140 2142 for cix := 0 to MyRO.nCity - 1 do 2141 2143 if (MyCity[cix].Loc >= 0) and (MyCity[cix].ID = MyRO.Wonder[I].CityID) 2142 then 2144 then begin 2143 2145 OwnWonder := True; 2146 Break; 2147 end; 2144 2148 if MyRO.Wonder[I].CityID <> MyData.ToldWonders[I].CityID then 2145 2149 begin … … 3029 3033 IsTreatyDeal := False; 3030 3034 for I := 0 to ReceivedOffer.nDeliver + ReceivedOffer.nCost - 1 do 3031 if DipMem[Me].SentOffer.Price[I] and opMask = opTreaty then 3035 if DipMem[Me].SentOffer.Price[I] and opMask = opTreaty then begin 3032 3036 IsTreatyDeal := True; 3037 Break; 3038 end; 3033 3039 if IsTreatyDeal then 3034 3040 Play('NEWTREATY') … … 3995 4001 for I := 2 to nGov - 1 do 3996 4002 if (GovPreq[I] <> preNA) and 3997 ((GovPreq[I] = preNone) or (MyRO.Tech[GovPreq[I]] >= tsApplicable)) then 3998 AltGovs := True; 4003 ((GovPreq[I] = preNone) or (MyRO.Tech[GovPreq[I]] >= tsApplicable)) then begin 4004 AltGovs := True; 4005 Break; 4006 end; 3999 4007 4000 4008 if not AltGovs then … … 4296 4304 begin 4297 4305 Result := True; 4298 Exit 4306 Exit; 4299 4307 end; 4300 4308 end … … 4490 4498 Skipped := WasSkipped; 4491 4499 for p1 := 1 to nPl - 1 do 4492 if G.RO[p1] <> nil then 4500 if G.RO[p1] <> nil then begin 4493 4501 Skipped := True; // don't show enemy moves in hotseat mode 4502 Break; 4503 end; 4494 4504 end 4495 4505 else … … 7465 7475 Multi := False; 7466 7476 for p1 := 1 to nPl - 1 do 7467 if G.RO[p1] <> nil then 7477 if G.RO[p1] <> nil then begin 7468 7478 Multi := True; 7479 Break; 7480 end; 7469 7481 mEnemyMovement.Visible := not Multi; 7470 7482 end; … … 7560 7572 for p1 := 0 to nPl - 1 do 7561 7573 if MyRO.Ship[p1].Parts[spComp] + MyRO.Ship[p1].Parts[spPow] + 7562 MyRO.Ship[p1].Parts[spHab] > 0 then 7563 mShips.Enabled := True; 7574 MyRO.Ship[p1].Parts[spHab] > 0 then begin 7575 mShips.Enabled := True; 7576 Break; 7577 end; 7564 7578 end 7565 7579 else if Popup = UnitPopup then … … 7685 7699 if NeedSep then 7686 7700 LastSep := Popup.Items[I]; 7687 NeedSep := False 7701 NeedSep := False; 7688 7702 end 7689 7703 else if Popup.Items[I].Visible then 7690 7704 NeedSep := True; 7691 7705 if (LastSep <> nil) and not NeedSep then 7692 LastSep.Visible := False 7706 LastSep.Visible := False; 7693 7707 end; 7694 7708 -
trunk/NoTerm.pas
r548 r549 256 256 ShipComplete := True; 257 257 for I := 0 to nShipPart - 1 do 258 if G.RO[Me].Ship[P].Parts[I] < ShipNeed[I] then 258 if G.RO[Me].Ship[P].Parts[I] < ShipNeed[I] then begin 259 259 ShipComplete := False; 260 Break; 261 end; 260 262 if ShipComplete then 261 263 Inc(WinStat[P]);
Note:
See TracChangeset
for help on using the changeset viewer.