// export Alex , Anne , Eddings , TeamAlex ; export Scout , SecondScout ; export CaptureTimer ; export function PrepareOurs ; var i , v , tmp ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
// uc_side = 1 ;
   6: LD_ADDR_OWVAR 20
  10: PUSH
  11: LD_INT 1
  13: ST_TO_ADDR
// uc_nation = 1 ;
  14: LD_ADDR_OWVAR 21
  18: PUSH
  19: LD_INT 1
  21: ST_TO_ADDR
// InitHc ;
  22: CALL_OW 19
// Alex = LoadCharacter ( Alex , 0 , 0 ) ;
  26: LD_ADDR_EXP 1
  30: PUSH
  31: LD_STRING Alex
  33: PPUSH
  34: LD_INT 0
  36: PPUSH
  37: LD_INT 0
  39: PPUSH
  40: CALL_OW 527
  44: ST_TO_ADDR
// if TestVariable ( EddingsTaken ) then
  45: LD_STRING EddingsTaken
  47: PPUSH
  48: CALL_OW 27
  52: IFFALSE 73
// Eddings = LoadCharacter ( Eddings , 0 , 0 ) ;
  54: LD_ADDR_EXP 3
  58: PUSH
  59: LD_STRING Eddings
  61: PPUSH
  62: LD_INT 0
  64: PPUSH
  65: LD_INT 0
  67: PPUSH
  68: CALL_OW 527
  72: ST_TO_ADDR
// if CheckCharacterSet ( Anne ) then
  73: LD_STRING Anne
  75: PPUSH
  76: CALL_OW 29
  80: IFFALSE 103
// Anne = LoadCharacter ( Anne , 5 , 0 ) else
  82: LD_ADDR_EXP 2
  86: PUSH
  87: LD_STRING Anne
  89: PPUSH
  90: LD_INT 5
  92: PPUSH
  93: LD_INT 0
  95: PPUSH
  96: CALL_OW 527
 100: ST_TO_ADDR
 101: GO 143
// begin PrepareHuman ( 1 , class_sniper , [ 7 , 5 , 4 ] [ difficulty ] ) ;
 103: LD_INT 1
 105: PPUSH
 106: LD_INT 5
 108: PPUSH
 109: LD_INT 7
 111: PUSH
 112: LD_INT 5
 114: PUSH
 115: LD_INT 4
 117: PUSH
 118: EMPTY
 119: LIST
 120: LIST
 121: LIST
 122: PUSH
 123: LD_OWVAR 67
 127: ARRAY
 128: PPUSH
 129: CALL_OW 380
// Scout = CreateHuman ;
 133: LD_ADDR_EXP 5
 137: PUSH
 138: CALL_OW 44
 142: ST_TO_ADDR
// end ; PrepareScientist ( Rand ( 1 , 2 ) , [ 6 , 4 , 4 ] [ difficulty ] ) ;
 143: LD_INT 1
 145: PPUSH
 146: LD_INT 2
 148: PPUSH
 149: CALL_OW 12
 153: PPUSH
 154: LD_INT 6
 156: PUSH
 157: LD_INT 4
 159: PUSH
 160: LD_INT 4
 162: PUSH
 163: EMPTY
 164: LIST
 165: LIST
 166: LIST
 167: PUSH
 168: LD_OWVAR 67
 172: ARRAY
 173: PPUSH
 174: CALL_OW 384
// SecondScout = CreateHuman ;
 178: LD_ADDR_EXP 6
 182: PUSH
 183: CALL_OW 44
 187: ST_TO_ADDR
// TeamAlex = LoadCharacter ( TeamAlex , 0 , 0 ) ;
 188: LD_ADDR_EXP 4
 192: PUSH
 193: LD_STRING TeamAlex
 195: PPUSH
 196: LD_INT 0
 198: PPUSH
 199: LD_INT 0
 201: PPUSH
 202: CALL_OW 527
 206: ST_TO_ADDR
// tmp = [ Alex , Eddings ] ^ TeamAlex ;
 207: LD_ADDR_VAR 0 4
 211: PUSH
 212: LD_EXP 1
 216: PUSH
 217: LD_EXP 3
 221: PUSH
 222: EMPTY
 223: LIST
 224: LIST
 225: PUSH
 226: LD_EXP 4
 230: ADD
 231: ST_TO_ADDR
// for i in tmp do
 232: LD_ADDR_VAR 0 2
 236: PUSH
 237: LD_VAR 0 4
 241: PUSH
 242: FOR_IN
 243: IFFALSE 262
// PlaceUnitArea ( i , ExitArea , false ) ;
 245: LD_VAR 0 2
 249: PPUSH
 250: LD_INT 4
 252: PPUSH
 253: LD_INT 0
 255: PPUSH
 256: CALL_OW 49
 260: GO 242
 262: POP
 263: POP
// for i in [ Anne , Scout , SecondScout ] do
 264: LD_ADDR_VAR 0 2
 268: PUSH
 269: LD_EXP 2
 273: PUSH
 274: LD_EXP 5
 278: PUSH
 279: LD_EXP 6
 283: PUSH
 284: EMPTY
 285: LIST
 286: LIST
 287: LIST
 288: PUSH
 289: FOR_IN
 290: IFFALSE 315
// PlaceUnitXYR ( i , 61 , 94 , 2 , false ) ;
 292: LD_VAR 0 2
 296: PPUSH
 297: LD_INT 61
 299: PPUSH
 300: LD_INT 94
 302: PPUSH
 303: LD_INT 2
 305: PPUSH
 306: LD_INT 0
 308: PPUSH
 309: CALL_OW 50
 313: GO 289
 315: POP
 316: POP
// vc_chassis = [ us_heavy_tracked , us_medium_tracked , us_medium_tracked ] [ difficulty ] ;
 317: LD_ADDR_OWVAR 37
 321: PUSH
 322: LD_INT 4
 324: PUSH
 325: LD_INT 3
 327: PUSH
 328: LD_INT 3
 330: PUSH
 331: EMPTY
 332: LIST
 333: LIST
 334: LIST
 335: PUSH
 336: LD_OWVAR 67
 340: ARRAY
 341: ST_TO_ADDR
// vc_engine = engine_combustion ;
 342: LD_ADDR_OWVAR 39
 346: PUSH
 347: LD_INT 1
 349: ST_TO_ADDR
// vc_control = control_manual ;
 350: LD_ADDR_OWVAR 38
 354: PUSH
 355: LD_INT 1
 357: ST_TO_ADDR
// vc_weapon = us_double_gun ;
 358: LD_ADDR_OWVAR 40
 362: PUSH
 363: LD_INT 5
 365: ST_TO_ADDR
// v = CreateVehicle ;
 366: LD_ADDR_VAR 0 3
 370: PUSH
 371: CALL_OW 45
 375: ST_TO_ADDR
// PlaceUnitXY ( v , 54 , 92 , false ) ;
 376: LD_VAR 0 3
 380: PPUSH
 381: LD_INT 54
 383: PPUSH
 384: LD_INT 92
 386: PPUSH
 387: LD_INT 0
 389: PPUSH
 390: CALL_OW 48
// if LoadVariable ( ArabEquipmentCaptured , 0 ) >= [ 3 , 6 , 8 ] [ difficulty ] then
 394: LD_STRING ArabEquipmentCaptured
 396: PPUSH
 397: LD_INT 0
 399: PPUSH
 400: CALL_OW 30
 404: PUSH
 405: LD_INT 3
 407: PUSH
 408: LD_INT 6
 410: PUSH
 411: LD_INT 8
 413: PUSH
 414: EMPTY
 415: LIST
 416: LIST
 417: LIST
 418: PUSH
 419: LD_OWVAR 67
 423: ARRAY
 424: GREATEREQUAL
 425: IFFALSE 504
// begin vc_chassis = us_medium_tracked ;
 427: LD_ADDR_OWVAR 37
 431: PUSH
 432: LD_INT 3
 434: ST_TO_ADDR
// vc_engine = engine_combustion ;
 435: LD_ADDR_OWVAR 39
 439: PUSH
 440: LD_INT 1
 442: ST_TO_ADDR
// vc_control = control_manual ;
 443: LD_ADDR_OWVAR 38
 447: PUSH
 448: LD_INT 1
 450: ST_TO_ADDR
// vc_weapon = [ us_gatling_gun , us_gatling_gun , us_light_gun ] [ difficulty ] ;
 451: LD_ADDR_OWVAR 40
 455: PUSH
 456: LD_INT 4
 458: PUSH
 459: LD_INT 4
 461: PUSH
 462: LD_INT 3
 464: PUSH
 465: EMPTY
 466: LIST
 467: LIST
 468: LIST
 469: PUSH
 470: LD_OWVAR 67
 474: ARRAY
 475: ST_TO_ADDR
// v = CreateVehicle ;
 476: LD_ADDR_VAR 0 3
 480: PUSH
 481: CALL_OW 45
 485: ST_TO_ADDR
// PlaceUnitXY ( v , 56 , 102 , false ) ;
 486: LD_VAR 0 3
 490: PPUSH
 491: LD_INT 56
 493: PPUSH
 494: LD_INT 102
 496: PPUSH
 497: LD_INT 0
 499: PPUSH
 500: CALL_OW 48
// end ; end ;
 504: LD_VAR 0 1
 508: RET
// export function SetTechs ; var ApemenAllowed ; begin
 509: LD_INT 0
 511: PPUSH
 512: PPUSH
// ApemenAllowed = LoadVariable ( ApemenAllowed , 0 ) ;
 513: LD_ADDR_VAR 0 2
 517: PUSH
 518: LD_STRING ApemenAllowed
 520: PPUSH
 521: LD_INT 0
 523: PPUSH
 524: CALL_OW 30
 528: ST_TO_ADDR
// if ApemenAllowed then
 529: LD_VAR 0 2
 533: IFFALSE 561
// begin SetTech ( tech_ApeLang , 1 , state_researched ) ;
 535: LD_INT 1
 537: PPUSH
 538: LD_INT 1
 540: PPUSH
 541: LD_INT 2
 543: PPUSH
 544: CALL_OW 322
// SetTech ( tech_ApePsych , 1 , state_researched ) ;
 548: LD_INT 2
 550: PPUSH
 551: LD_INT 1
 553: PPUSH
 554: LD_INT 2
 556: PPUSH
 557: CALL_OW 322
// end ; end ;
 561: LD_VAR 0 1
 565: RET
// starting begin InGameOn ;
 566: CALL_OW 8
// PrepareOurs ;
 570: CALL 0 0 0
// PrepareArabs ;
 574: CALL 1159 0 0
// PrepareSnipers ;
 578: CALL 5095 0 0
// SetTechs ;
 582: CALL 509 0 0
// RandomizeAll ;
 586: CALL_OW 11
// CenterNowOnUnits ( Alex ) ;
 590: LD_EXP 1
 594: PPUSH
 595: CALL_OW 87
// ComMoveXY ( Alex , 53 , 89 ) ;
 599: LD_EXP 1
 603: PPUSH
 604: LD_INT 53
 606: PPUSH
 607: LD_INT 89
 609: PPUSH
 610: CALL_OW 111
// ComTurnUnit ( [ Anne , Scout , SecondScout ] , Alex ) ;
 614: LD_EXP 2
 618: PUSH
 619: LD_EXP 5
 623: PUSH
 624: LD_EXP 6
 628: PUSH
 629: EMPTY
 630: LIST
 631: LIST
 632: LIST
 633: PPUSH
 634: LD_EXP 1
 638: PPUSH
 639: CALL_OW 119
// Wait ( 0 0$2 ) ;
 643: LD_INT 70
 645: PPUSH
 646: CALL_OW 67
// DialogueOn ;
 650: CALL_OW 6
// if Anne then
 654: LD_EXP 2
 658: IFFALSE 674
// Say ( Alex , di-a-1 ) else
 660: LD_EXP 1
 664: PPUSH
 665: LD_STRING di-a-1
 667: PPUSH
 668: CALL_OW 88
 672: GO 686
// Say ( Alex , di-a-1a ) ;
 674: LD_EXP 1
 678: PPUSH
 679: LD_STRING di-a-1a
 681: PPUSH
 682: CALL_OW 88
// RevealFogArea ( 1 , AnneScout ) ;
 686: LD_INT 1
 688: PPUSH
 689: LD_INT 1
 691: PPUSH
 692: CALL_OW 332
// CenterOnXY ( 128 , 92 ) ;
 696: LD_INT 128
 698: PPUSH
 699: LD_INT 92
 701: PPUSH
 702: CALL_OW 84
// if Anne then
 706: LD_EXP 2
 710: IFFALSE 726
// Say ( Anne , di-n-1 ) else
 712: LD_EXP 2
 716: PPUSH
 717: LD_STRING di-n-1
 719: PPUSH
 720: CALL_OW 88
 724: GO 738
// Say ( Scout , di-x-1 ) ;
 726: LD_EXP 5
 730: PPUSH
 731: LD_STRING di-x-1
 733: PPUSH
 734: CALL_OW 88
// CenterOnXY ( 102 , 54 ) ;
 738: LD_INT 102
 740: PPUSH
 741: LD_INT 54
 743: PPUSH
 744: CALL_OW 84
// if Anne then
 748: LD_EXP 2
 752: IFFALSE 768
// Say ( Anne , di-n-2 ) else
 754: LD_EXP 2
 758: PPUSH
 759: LD_STRING di-n-2
 761: PPUSH
 762: CALL_OW 88
 766: GO 780
// Say ( Scout , di-x-2 ) ;
 768: LD_EXP 5
 772: PPUSH
 773: LD_STRING di-x-2
 775: PPUSH
 776: CALL_OW 88
// CenterNowOnXY ( 53 , 89 ) ;
 780: LD_INT 53
 782: PPUSH
 783: LD_INT 89
 785: PPUSH
 786: CALL_OW 86
// Say ( Alex , di-a-2 ) ;
 790: LD_EXP 1
 794: PPUSH
 795: LD_STRING di-a-2
 797: PPUSH
 798: CALL_OW 88
// DialogueOff ;
 802: CALL_OW 7
// InGameOff ;
 806: CALL_OW 9
// SaveForQuickRestart ;
 810: CALL_OW 22
// ChangeMissionObjectives ( OAtt ) ;
 814: LD_STRING OAtt
 816: PPUSH
 817: CALL_OW 337
// Wait ( 0 0$15 ) ;
 821: LD_INT 525
 823: PPUSH
 824: CALL_OW 67
// DialogueOn ;
 828: CALL_OW 6
// Say ( SecondScout , do-s-1 ) ;
 832: LD_EXP 6
 836: PPUSH
 837: LD_STRING do-s-1
 839: PPUSH
 840: CALL_OW 88
// SayRadio ( Bojan , do-b-1 ) ;
 844: LD_EXP 8
 848: PPUSH
 849: LD_STRING do-b-1
 851: PPUSH
 852: CALL_OW 94
// SayRadio ( Kuronski , do-k-1 ) ;
 856: LD_EXP 10
 860: PPUSH
 861: LD_STRING do-k-1
 863: PPUSH
 864: CALL_OW 94
// SayRadio ( Gom , do-l-1 ) ;
 868: LD_EXP 9
 872: PPUSH
 873: LD_STRING do-l-1
 875: PPUSH
 876: CALL_OW 94
// SayRadio ( Kuronski , do-k-2 ) ;
 880: LD_EXP 10
 884: PPUSH
 885: LD_STRING do-k-2
 887: PPUSH
 888: CALL_OW 94
// SayRadio ( Bojan , do-b-2 ) ;
 892: LD_EXP 8
 896: PPUSH
 897: LD_STRING do-b-2
 899: PPUSH
 900: CALL_OW 94
// DWait ( 0 0$1 ) ;
 904: LD_INT 35
 906: PPUSH
 907: CALL_OW 68
// Say ( SecondScout , do-s-2 ) ;
 911: LD_EXP 6
 915: PPUSH
 916: LD_STRING do-s-2
 918: PPUSH
 919: CALL_OW 88
// Say ( Alex , do-a-1 ) ;
 923: LD_EXP 1
 927: PPUSH
 928: LD_STRING do-a-1
 930: PPUSH
 931: CALL_OW 88
// if Anne then
 935: LD_EXP 2
 939: IFFALSE 967
// begin Say ( Anne , do-n-1 ) ;
 941: LD_EXP 2
 945: PPUSH
 946: LD_STRING do-n-1
 948: PPUSH
 949: CALL_OW 88
// Say ( Alex , do-a-2 ) ;
 953: LD_EXP 1
 957: PPUSH
 958: LD_STRING do-a-2
 960: PPUSH
 961: CALL_OW 88
// end else
 965: GO 991
// begin Say ( Scout , do-n-1 ) ;
 967: LD_EXP 5
 971: PPUSH
 972: LD_STRING do-n-1
 974: PPUSH
 975: CALL_OW 88
// Say ( Alex , do-a-2a ) ;
 979: LD_EXP 1
 983: PPUSH
 984: LD_STRING do-a-2a
 986: PPUSH
 987: CALL_OW 88
// end ; DialogueOff ;
 991: CALL_OW 7
// ChangeMissionObjectives ( OLab ) ;
 995: LD_STRING OLab
 997: PPUSH
 998: CALL_OW 337
// end ;
1002: END
// every 0 0$1 trigger BaseCaptured = false do
1003: LD_EXP 21
1007: PUSH
1008: LD_INT 0
1010: EQUAL
1011: IFFALSE 1031
1013: GO 1015
1015: DISABLE
// begin enable ;
1016: ENABLE
// CaptureTimer = CaptureTimer + 0 0$1 ;
1017: LD_ADDR_EXP 7
1021: PUSH
1022: LD_EXP 7
1026: PUSH
1027: LD_INT 35
1029: PLUS
1030: ST_TO_ADDR
// end ;
1031: END
// on UnitDestroyed ( u ) do begin if u = Alex then
1032: LD_VAR 0 1
1036: PUSH
1037: LD_EXP 1
1041: EQUAL
1042: IFFALSE 1051
// YouLost ( AlexDead ) ;
1044: LD_STRING AlexDead
1046: PPUSH
1047: CALL_OW 104
// if u = al and not EndingAllowed then
1051: LD_VAR 0 1
1055: PUSH
1056: LD_INT 119
1058: EQUAL
1059: PUSH
1060: LD_EXP 25
1064: NOT
1065: AND
1066: IFFALSE 1075
// YouLost ( ArabLabDestroyed ) ;
1068: LD_STRING ArabLabDestroyed
1070: PPUSH
1071: CALL_OW 104
// end ;
1075: PPOPN 1
1077: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 1 ] , [ f_or , [ f_class , class_engineer ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) = 0 and not BaseCaptured do
1078: LD_INT 22
1080: PUSH
1081: LD_INT 1
1083: PUSH
1084: EMPTY
1085: LIST
1086: LIST
1087: PUSH
1088: LD_INT 2
1090: PUSH
1091: LD_INT 25
1093: PUSH
1094: LD_INT 2
1096: PUSH
1097: EMPTY
1098: LIST
1099: LIST
1100: PUSH
1101: LD_INT 30
1103: PUSH
1104: LD_INT 0
1106: PUSH
1107: EMPTY
1108: LIST
1109: LIST
1110: PUSH
1111: LD_INT 30
1113: PUSH
1114: LD_INT 1
1116: PUSH
1117: EMPTY
1118: LIST
1119: LIST
1120: PUSH
1121: EMPTY
1122: LIST
1123: LIST
1124: LIST
1125: LIST
1126: PUSH
1127: EMPTY
1128: LIST
1129: LIST
1130: PPUSH
1131: CALL_OW 69
1135: PUSH
1136: LD_INT 0
1138: EQUAL
1139: PUSH
1140: LD_EXP 21
1144: NOT
1145: AND
1146: IFFALSE 1158
1148: GO 1150
1150: DISABLE
// YouLost ( NoEngineer ) ; end_of_file
1151: LD_STRING NoEngineer
1153: PPUSH
1154: CALL_OW 104
1158: END
// export Bojan , Gom , Kuronski ; export ArabsEscaped ; export AlhambraBaseStrategy , AlhambraEngineers , AlhambraBuildings , AlhambraRepairStrategy ; export function PrepareArabs ; var i , b ; begin
1159: LD_INT 0
1161: PPUSH
1162: PPUSH
1163: PPUSH
// uc_side = 2 ;
1164: LD_ADDR_OWVAR 20
1168: PUSH
1169: LD_INT 2
1171: ST_TO_ADDR
// uc_nation = 1 ;
1172: LD_ADDR_OWVAR 21
1176: PUSH
1177: LD_INT 1
1179: ST_TO_ADDR
// Kuronski = NewCharacter ( Kuronski ) ;
1180: LD_ADDR_EXP 10
1184: PUSH
1185: LD_STRING Kuronski
1187: PPUSH
1188: CALL_OW 25
1192: ST_TO_ADDR
// SetClass ( Kuronski , class_sniper ) ;
1193: LD_EXP 10
1197: PPUSH
1198: LD_INT 5
1200: PPUSH
1201: CALL_OW 336
// uc_nation = 2 ;
1205: LD_ADDR_OWVAR 21
1209: PUSH
1210: LD_INT 2
1212: ST_TO_ADDR
// Bojan = NewCharacter ( Bojan ) ;
1213: LD_ADDR_EXP 8
1217: PUSH
1218: LD_STRING Bojan
1220: PPUSH
1221: CALL_OW 25
1225: ST_TO_ADDR
// Gom = NewCharacter ( Gom ) ;
1226: LD_ADDR_EXP 9
1230: PUSH
1231: LD_STRING Gom
1233: PPUSH
1234: CALL_OW 25
1238: ST_TO_ADDR
// PrepareBase ( 2 , AlhambraArea , [ Rand ( 3 , 5 ) , Rand ( 3 , 6 ) , Rand ( 4 , 6 ) ] [ difficulty ] , 2 , 4 , 2 , 2 ) ;
1239: LD_INT 2
1241: PPUSH
1242: LD_INT 6
1244: PPUSH
1245: LD_INT 3
1247: PPUSH
1248: LD_INT 5
1250: PPUSH
1251: CALL_OW 12
1255: PUSH
1256: LD_INT 3
1258: PPUSH
1259: LD_INT 6
1261: PPUSH
1262: CALL_OW 12
1266: PUSH
1267: LD_INT 4
1269: PPUSH
1270: LD_INT 6
1272: PPUSH
1273: CALL_OW 12
1277: PUSH
1278: EMPTY
1279: LIST
1280: LIST
1281: LIST
1282: PUSH
1283: LD_OWVAR 67
1287: ARRAY
1288: PPUSH
1289: LD_INT 2
1291: PPUSH
1292: LD_INT 4
1294: PPUSH
1295: LD_INT 2
1297: PPUSH
1298: LD_INT 2
1300: PPUSH
1301: CALL 7079 0 7
// for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) do
1305: LD_ADDR_VAR 0 2
1309: PUSH
1310: LD_INT 22
1312: PUSH
1313: LD_INT 2
1315: PUSH
1316: EMPTY
1317: LIST
1318: LIST
1319: PUSH
1320: LD_INT 21
1322: PUSH
1323: LD_INT 1
1325: PUSH
1326: EMPTY
1327: LIST
1328: LIST
1329: PUSH
1330: EMPTY
1331: LIST
1332: LIST
1333: PPUSH
1334: CALL_OW 69
1338: PUSH
1339: FOR_IN
1340: IFFALSE 1503
// begin if GetBType ( IsInUnit ( i ) ) = b_breastwork then
1342: LD_VAR 0 2
1346: PPUSH
1347: CALL_OW 310
1351: PPUSH
1352: CALL_OW 266
1356: PUSH
1357: LD_INT 31
1359: EQUAL
1360: IFFALSE 1379
// SetClass ( UnitsInside ( i ) , class_mortar ) ;
1362: LD_VAR 0 2
1366: PPUSH
1367: CALL_OW 313
1371: PPUSH
1372: LD_INT 8
1374: PPUSH
1375: CALL_OW 336
// if GetBType ( IsInUnit ( i ) ) = b_bunker then
1379: LD_VAR 0 2
1383: PPUSH
1384: CALL_OW 310
1388: PPUSH
1389: CALL_OW 266
1393: PUSH
1394: LD_INT 32
1396: EQUAL
1397: IFFALSE 1501
// case Rand ( 1 , 2 ) of 1 :
1399: LD_INT 1
1401: PPUSH
1402: LD_INT 2
1404: PPUSH
1405: CALL_OW 12
1409: PUSH
1410: LD_INT 1
1412: DOUBLE
1413: EQUAL
1414: IFTRUE 1418
1416: GO 1489
1418: POP
// begin b = IsInUnit ( i ) ;
1419: LD_ADDR_VAR 0 3
1423: PUSH
1424: LD_VAR 0 2
1428: PPUSH
1429: CALL_OW 310
1433: ST_TO_ADDR
// RemoveUnit ( i ) ;
1434: LD_VAR 0 2
1438: PPUSH
1439: CALL_OW 64
// PrepareHuman ( false , class_apeman_soldier , [ 2 , 3 , 4 ] [ difficulty ] ) ;
1443: LD_INT 0
1445: PPUSH
1446: LD_INT 15
1448: PPUSH
1449: LD_INT 2
1451: PUSH
1452: LD_INT 3
1454: PUSH
1455: LD_INT 4
1457: PUSH
1458: EMPTY
1459: LIST
1460: LIST
1461: LIST
1462: PUSH
1463: LD_OWVAR 67
1467: ARRAY
1468: PPUSH
1469: CALL_OW 380
// PlaceHumanInUnit ( CreateHuman , b ) ;
1473: CALL_OW 44
1477: PPUSH
1478: LD_VAR 0 3
1482: PPUSH
1483: CALL_OW 52
// end ; 2 :
1487: GO 1501
1489: LD_INT 2
1491: DOUBLE
1492: EQUAL
1493: IFTRUE 1497
1495: GO 1500
1497: POP
// begin end ; end ;
1498: GO 1501
1500: POP
// end ;
1501: GO 1339
1503: POP
1504: POP
// if TestVariable ( ArabLosses ) then
1505: LD_STRING ArabLosses
1507: PPUSH
1508: CALL_OW 27
1512: IFFALSE 1558
// for i in [ ab1 , ab2 , aa ] do
1514: LD_ADDR_VAR 0 2
1518: PUSH
1519: LD_INT 36
1521: PUSH
1522: LD_INT 45
1524: PUSH
1525: LD_INT 128
1527: PUSH
1528: EMPTY
1529: LIST
1530: LIST
1531: LIST
1532: PUSH
1533: FOR_IN
1534: IFFALSE 1556
// RemoveUnit ( UnitsInside ( i ) [ 1 ] ) ;
1536: LD_VAR 0 2
1540: PPUSH
1541: CALL_OW 313
1545: PUSH
1546: LD_INT 1
1548: ARRAY
1549: PPUSH
1550: CALL_OW 64
1554: GO 1533
1556: POP
1557: POP
// SetBName ( ad , alhambra ) ;
1558: LD_INT 2
1560: PPUSH
1561: LD_STRING alhambra
1563: PPUSH
1564: CALL_OW 500
// AlhambraEngineers = FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_engineer ] ] ) ;
1568: LD_ADDR_EXP 13
1572: PUSH
1573: LD_INT 22
1575: PUSH
1576: LD_INT 2
1578: PUSH
1579: EMPTY
1580: LIST
1581: LIST
1582: PUSH
1583: LD_INT 25
1585: PUSH
1586: LD_INT 2
1588: PUSH
1589: EMPTY
1590: LIST
1591: LIST
1592: PUSH
1593: EMPTY
1594: LIST
1595: LIST
1596: PPUSH
1597: CALL_OW 69
1601: ST_TO_ADDR
// AlhambraBuildings = FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_building ] ] ) ;
1602: LD_ADDR_EXP 14
1606: PUSH
1607: LD_INT 22
1609: PUSH
1610: LD_INT 2
1612: PUSH
1613: EMPTY
1614: LIST
1615: LIST
1616: PUSH
1617: LD_INT 21
1619: PUSH
1620: LD_INT 3
1622: PUSH
1623: EMPTY
1624: LIST
1625: LIST
1626: PUSH
1627: EMPTY
1628: LIST
1629: LIST
1630: PPUSH
1631: CALL_OW 69
1635: ST_TO_ADDR
// if difficulty > 1 then
1636: LD_OWVAR 67
1640: PUSH
1641: LD_INT 1
1643: GREATER
1644: IFFALSE 1679
// AlhambraBaseStrategy = McBase ( 1 , AlhambraEngineers , AlhambraBuildings , [ ] , [ ] , [ mc_base_cont ] ) ;
1646: LD_ADDR_EXP 12
1650: PUSH
1651: LD_INT 1
1653: PPUSH
1654: LD_EXP 13
1658: PPUSH
1659: LD_EXP 14
1663: PPUSH
1664: EMPTY
1665: PPUSH
1666: EMPTY
1667: PPUSH
1668: LD_INT 1
1670: PUSH
1671: EMPTY
1672: LIST
1673: PPUSH
1674: CALL_OW 397
1678: ST_TO_ADDR
// AlhambraRepairStrategy = McRepair ( 2 , AlhambraEngineers , AlhambraBuildings , [ [ mcr_bui_limit , 1000 ] , [ mcr_area_only , AlhambraArea ] ] ) ;
1679: LD_ADDR_EXP 15
1683: PUSH
1684: LD_INT 2
1686: PPUSH
1687: LD_EXP 13
1691: PPUSH
1692: LD_EXP 14
1696: PPUSH
1697: LD_INT 6
1699: PUSH
1700: LD_INT 1000
1702: PUSH
1703: EMPTY
1704: LIST
1705: LIST
1706: PUSH
1707: LD_INT 3
1709: PUSH
1710: LD_INT 6
1712: PUSH
1713: EMPTY
1714: LIST
1715: LIST
1716: PUSH
1717: EMPTY
1718: LIST
1719: LIST
1720: PPUSH
1721: CALL_OW 414
1725: ST_TO_ADDR
// SetCargo ( bombtruck , mat_oil , 100 ) ;
1726: LD_INT 138
1728: PPUSH
1729: LD_INT 2
1731: PPUSH
1732: LD_INT 100
1734: PPUSH
1735: CALL_OW 290
// if difficulty = 1 then
1739: LD_OWVAR 67
1743: PUSH
1744: LD_INT 1
1746: EQUAL
1747: IFFALSE 1756
// RemoveUnit ( v3 ) ;
1749: LD_INT 156
1751: PPUSH
1752: CALL_OW 64
// end ;
1756: LD_VAR 0 1
1760: RET
// export AlhambraEnemies , AlhambraDefenders ; export AlhambraDefenceStrategy ; every 0 0$1 do
1761: GO 1763
1763: DISABLE
// AlhambraEnemies = McRegistry ( 2 , [ [ mc_reg_area_to_protect , AlhambraArea ] , [ mc_reg_refresh_time , 0 0$1 ] ] ) ;
1764: LD_ADDR_EXP 16
1768: PUSH
1769: LD_INT 2
1771: PPUSH
1772: LD_INT 3
1774: PUSH
1775: LD_INT 6
1777: PUSH
1778: EMPTY
1779: LIST
1780: LIST
1781: PUSH
1782: LD_INT 1
1784: PUSH
1785: LD_INT 35
1787: PUSH
1788: EMPTY
1789: LIST
1790: LIST
1791: PUSH
1792: EMPTY
1793: LIST
1794: LIST
1795: PPUSH
1796: CALL_OW 399
1800: ST_TO_ADDR
1801: END
// every 0 0$1 trigger FilterUnitsInArea ( AlhambraBuffer , [ [ f_side , 1 ] , [ f_see , 2 ] ] ) do var i ;
1802: LD_INT 8
1804: PPUSH
1805: LD_INT 22
1807: PUSH
1808: LD_INT 1
1810: PUSH
1811: EMPTY
1812: LIST
1813: LIST
1814: PUSH
1815: LD_INT 101
1817: PUSH
1818: LD_INT 2
1820: PUSH
1821: EMPTY
1822: LIST
1823: LIST
1824: PUSH
1825: EMPTY
1826: LIST
1827: LIST
1828: PPUSH
1829: CALL_OW 70
1833: IFFALSE 2172
1835: GO 1837
1837: DISABLE
1838: LD_INT 0
1840: PPUSH
// begin enable ;
1841: ENABLE
// if BaseCaptured then
1842: LD_EXP 21
1846: IFFALSE 1851
// begin disable ;
1848: DISABLE
// exit ;
1849: GO 2172
// end ; if not ExistMc ( AlhambraDefenceStrategy ) then
1851: LD_EXP 18
1855: PPUSH
1856: CALL_OW 386
1860: NOT
1861: IFFALSE 1925
// begin AlhambraDefenders = FilterUnitsInArea ( AlhambraArea , [ [ f_side , 2 ] , [ f_type , unit_vehicle ] ] ) ;
1863: LD_ADDR_EXP 17
1867: PUSH
1868: LD_INT 6
1870: PPUSH
1871: LD_INT 22
1873: PUSH
1874: LD_INT 2
1876: PUSH
1877: EMPTY
1878: LIST
1879: LIST
1880: PUSH
1881: LD_INT 21
1883: PUSH
1884: LD_INT 2
1886: PUSH
1887: EMPTY
1888: LIST
1889: LIST
1890: PUSH
1891: EMPTY
1892: LIST
1893: LIST
1894: PPUSH
1895: CALL_OW 70
1899: ST_TO_ADDR
// AlhambraDefenceStrategy = McDefend ( 1 , AlhambraEnemies , AlhambraDefenders , [ ] ) ;
1900: LD_ADDR_EXP 18
1904: PUSH
1905: LD_INT 1
1907: PPUSH
1908: LD_EXP 16
1912: PPUSH
1913: LD_EXP 17
1917: PPUSH
1918: EMPTY
1919: PPUSH
1920: CALL_OW 401
1924: ST_TO_ADDR
// end ; for i in AlhambraDefenders do
1925: LD_ADDR_VAR 0 1
1929: PUSH
1930: LD_EXP 17
1934: PUSH
1935: FOR_IN
1936: IFFALSE 2170
// begin if GetLives ( i ) < [ 500 , 450 , 400 ] [ difficulty ] then
1938: LD_VAR 0 1
1942: PPUSH
1943: CALL_OW 256
1947: PUSH
1948: LD_INT 500
1950: PUSH
1951: LD_INT 450
1953: PUSH
1954: LD_INT 400
1956: PUSH
1957: EMPTY
1958: LIST
1959: LIST
1960: LIST
1961: PUSH
1962: LD_OWVAR 67
1966: ARRAY
1967: LESS
1968: IFFALSE 2005
// begin RemoveMcUnits ( AlhambraDefenceStrategy , i ) ;
1970: LD_EXP 18
1974: PPUSH
1975: LD_VAR 0 1
1979: PPUSH
1980: CALL_OW 391
// ComMoveToArea ( i , AlhambraRepairs ) ;
1984: LD_VAR 0 1
1988: PPUSH
1989: LD_INT 7
1991: PPUSH
1992: CALL_OW 113
// AddComExitVehicle ( i ) ;
1996: LD_VAR 0 1
2000: PPUSH
2001: CALL_OW 181
// end ; if GetLives ( i ) = 1000 then
2005: LD_VAR 0 1
2009: PPUSH
2010: CALL_OW 256
2014: PUSH
2015: LD_INT 1000
2017: EQUAL
2018: IFFALSE 2141
// begin if GetControl ( i ) = control_manual and not IsDrivenBy ( i ) then
2020: LD_VAR 0 1
2024: PPUSH
2025: CALL_OW 263
2029: PUSH
2030: LD_INT 1
2032: EQUAL
2033: PUSH
2034: LD_VAR 0 1
2038: PPUSH
2039: CALL_OW 311
2043: NOT
2044: AND
2045: IFFALSE 2127
// if UnitsInside ( af ) then
2047: LD_INT 3
2049: PPUSH
2050: CALL_OW 313
2054: IFFALSE 2079
// ComEnterUnit ( UnitsInside ( af ) [ 1 ] , i ) else
2056: LD_INT 3
2058: PPUSH
2059: CALL_OW 313
2063: PUSH
2064: LD_INT 1
2066: ARRAY
2067: PPUSH
2068: LD_VAR 0 1
2072: PPUSH
2073: CALL_OW 120
2077: GO 2127
// ComEnterUnit ( NearestUnitToUnit ( FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) , i ) , i ) ;
2079: LD_INT 22
2081: PUSH
2082: LD_INT 2
2084: PUSH
2085: EMPTY
2086: LIST
2087: LIST
2088: PUSH
2089: LD_INT 21
2091: PUSH
2092: LD_INT 1
2094: PUSH
2095: EMPTY
2096: LIST
2097: LIST
2098: PUSH
2099: EMPTY
2100: LIST
2101: LIST
2102: PPUSH
2103: CALL_OW 69
2107: PPUSH
2108: LD_VAR 0 1
2112: PPUSH
2113: CALL_OW 74
2117: PPUSH
2118: LD_VAR 0 1
2122: PPUSH
2123: CALL_OW 120
// AddMcUnits ( AlhambraDefenceStrategy , i ) ;
2127: LD_EXP 18
2131: PPUSH
2132: LD_VAR 0 1
2136: PPUSH
2137: CALL_OW 390
// end ; if not IsInArea ( i , AlhambraArea ) then
2141: LD_VAR 0 1
2145: PPUSH
2146: LD_INT 6
2148: PPUSH
2149: CALL_OW 308
2153: NOT
2154: IFFALSE 2168
// ComMoveToArea ( i , AlhambraArea ) ;
2156: LD_VAR 0 1
2160: PPUSH
2161: LD_INT 6
2163: PPUSH
2164: CALL_OW 113
// end ;
2168: GO 1935
2170: POP
2171: POP
// end ;
2172: PPOPN 1
2174: END
// export AlhambraMedic ; every 0 0$1 do var i , j ;
2175: GO 2177
2177: DISABLE
2178: LD_INT 0
2180: PPUSH
2181: PPUSH
// begin enable ;
2182: ENABLE
// if BaseCaptured then
2183: LD_EXP 21
2187: IFFALSE 2192
// begin disable ;
2189: DISABLE
// exit ;
2190: GO 2684
// end ; if not AlhambraMedic then
2192: LD_EXP 19
2196: NOT
2197: IFFALSE 2250
// AlhambraMedic = FindMaxSkill ( FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_scientistic ] ] ) diff [ Gom ] , class_scientistic ) ;
2199: LD_ADDR_EXP 19
2203: PUSH
2204: LD_INT 22
2206: PUSH
2207: LD_INT 2
2209: PUSH
2210: EMPTY
2211: LIST
2212: LIST
2213: PUSH
2214: LD_INT 25
2216: PUSH
2217: LD_INT 4
2219: PUSH
2220: EMPTY
2221: LIST
2222: LIST
2223: PUSH
2224: EMPTY
2225: LIST
2226: LIST
2227: PPUSH
2228: CALL_OW 69
2232: PUSH
2233: LD_EXP 9
2237: PUSH
2238: EMPTY
2239: LIST
2240: DIFF
2241: PPUSH
2242: LD_INT 4
2244: PPUSH
2245: CALL_OW 433
2249: ST_TO_ADDR
// if FilterUnitsInArea ( AlhambraRepairs , [ [ f_type , unit_human ] , [ f_side , 2 ] ] ) then
2250: LD_INT 7
2252: PPUSH
2253: LD_INT 21
2255: PUSH
2256: LD_INT 1
2258: PUSH
2259: EMPTY
2260: LIST
2261: LIST
2262: PUSH
2263: LD_INT 22
2265: PUSH
2266: LD_INT 2
2268: PUSH
2269: EMPTY
2270: LIST
2271: LIST
2272: PUSH
2273: EMPTY
2274: LIST
2275: LIST
2276: PPUSH
2277: CALL_OW 70
2281: IFFALSE 2431
// for i in FilterUnitsInArea ( AlhambraRepairs , [ [ f_type , unit_human ] , [ f_side , 2 ] ] ) do
2283: LD_ADDR_VAR 0 1
2287: PUSH
2288: LD_INT 7
2290: PPUSH
2291: LD_INT 21
2293: PUSH
2294: LD_INT 1
2296: PUSH
2297: EMPTY
2298: LIST
2299: LIST
2300: PUSH
2301: LD_INT 22
2303: PUSH
2304: LD_INT 2
2306: PUSH
2307: EMPTY
2308: LIST
2309: LIST
2310: PUSH
2311: EMPTY
2312: LIST
2313: LIST
2314: PPUSH
2315: CALL_OW 70
2319: PUSH
2320: FOR_IN
2321: IFFALSE 2429
// if GetLives ( i ) < 1000 then
2323: LD_VAR 0 1
2327: PPUSH
2328: CALL_OW 256
2332: PUSH
2333: LD_INT 1000
2335: LESS
2336: IFFALSE 2363
// begin ComExitBuilding ( AlhambraMedic ) ;
2338: LD_EXP 19
2342: PPUSH
2343: CALL_OW 122
// AddComHeal ( AlhambraMedic , i ) ;
2347: LD_EXP 19
2351: PPUSH
2352: LD_VAR 0 1
2356: PPUSH
2357: CALL_OW 188
// end else
2361: GO 2427
// if FilterUnitsInArea ( AlhambraRepairs , [ f_type , unit_human ] ) = FilterUnitsInArea ( AlhambraRepairs , [ [ f_type , unit_human ] , [ f_lives , 1000 ] ] ) then
2363: LD_INT 7
2365: PPUSH
2366: LD_INT 21
2368: PUSH
2369: LD_INT 1
2371: PUSH
2372: EMPTY
2373: LIST
2374: LIST
2375: PPUSH
2376: CALL_OW 70
2380: PUSH
2381: LD_INT 7
2383: PPUSH
2384: LD_INT 21
2386: PUSH
2387: LD_INT 1
2389: PUSH
2390: EMPTY
2391: LIST
2392: LIST
2393: PUSH
2394: LD_INT 24
2396: PUSH
2397: LD_INT 1000
2399: PUSH
2400: EMPTY
2401: LIST
2402: LIST
2403: PUSH
2404: EMPTY
2405: LIST
2406: LIST
2407: PPUSH
2408: CALL_OW 70
2412: EQUAL
2413: IFFALSE 2427
// ComEnterUnit ( AlhambraMedic , al ) ;
2415: LD_EXP 19
2419: PPUSH
2420: LD_INT 119
2422: PPUSH
2423: CALL_OW 120
2427: GO 2320
2429: POP
2430: POP
// for i in AlhambraEngineers do
2431: LD_ADDR_VAR 0 1
2435: PUSH
2436: LD_EXP 13
2440: PUSH
2441: FOR_IN
2442: IFFALSE 2682
// begin if GetLives ( i ) < 600 and See ( 1 , i ) then
2444: LD_VAR 0 1
2448: PPUSH
2449: CALL_OW 256
2453: PUSH
2454: LD_INT 600
2456: LESS
2457: PUSH
2458: LD_INT 1
2460: PPUSH
2461: LD_VAR 0 1
2465: PPUSH
2466: CALL_OW 292
2470: AND
2471: IFFALSE 2521
// begin for j in GetUnitMc ( i ) do
2473: LD_ADDR_VAR 0 2
2477: PUSH
2478: LD_VAR 0 1
2482: PPUSH
2483: CALL_OW 388
2487: PUSH
2488: FOR_IN
2489: IFFALSE 2507
// RemoveMcUnits ( j , i ) ;
2491: LD_VAR 0 2
2495: PPUSH
2496: LD_VAR 0 1
2500: PPUSH
2501: CALL_OW 391
2505: GO 2488
2507: POP
2508: POP
// ComMoveToArea ( i , AlhambraRepairs ) ;
2509: LD_VAR 0 1
2513: PPUSH
2514: LD_INT 7
2516: PPUSH
2517: CALL_OW 113
// end ; if GetLives ( i ) = 1000 then
2521: LD_VAR 0 1
2525: PPUSH
2526: CALL_OW 256
2530: PUSH
2531: LD_INT 1000
2533: EQUAL
2534: IFFALSE 2680
// begin if ExistMc ( AlhambraBaseStrategy ) then
2536: LD_EXP 12
2540: PPUSH
2541: CALL_OW 386
2545: IFFALSE 2563
// AddMcUnits ( AlhambraBaseStrategy , i ) else
2547: LD_EXP 12
2551: PPUSH
2552: LD_VAR 0 1
2556: PPUSH
2557: CALL_OW 390
2561: GO 2606
// if difficulty > 1 then
2563: LD_OWVAR 67
2567: PUSH
2568: LD_INT 1
2570: GREATER
2571: IFFALSE 2606
// AlhambraBaseStrategy = McBase ( 1 , AlhambraEngineers , AlhambraBuildings , [ ] , [ ] , [ mc_base_cont ] ) ;
2573: LD_ADDR_EXP 12
2577: PUSH
2578: LD_INT 1
2580: PPUSH
2581: LD_EXP 13
2585: PPUSH
2586: LD_EXP 14
2590: PPUSH
2591: EMPTY
2592: PPUSH
2593: EMPTY
2594: PPUSH
2595: LD_INT 1
2597: PUSH
2598: EMPTY
2599: LIST
2600: PPUSH
2601: CALL_OW 397
2605: ST_TO_ADDR
// if ExistMc ( AlhambraRepairStrategy ) then
2606: LD_EXP 15
2610: PPUSH
2611: CALL_OW 386
2615: IFFALSE 2633
// AddMcUnits ( AlhambraRepairStrategy , i ) else
2617: LD_EXP 15
2621: PPUSH
2622: LD_VAR 0 1
2626: PPUSH
2627: CALL_OW 390
2631: GO 2680
// AlhambraRepairStrategy = McRepair ( 2 , AlhambraEngineers , AlhambraBuildings , [ [ mcr_bui_limit , 1000 ] , [ mcr_area_only , AlhambraArea ] ] ) ;
2633: LD_ADDR_EXP 15
2637: PUSH
2638: LD_INT 2
2640: PPUSH
2641: LD_EXP 13
2645: PPUSH
2646: LD_EXP 14
2650: PPUSH
2651: LD_INT 6
2653: PUSH
2654: LD_INT 1000
2656: PUSH
2657: EMPTY
2658: LIST
2659: LIST
2660: PUSH
2661: LD_INT 3
2663: PUSH
2664: LD_INT 6
2666: PUSH
2667: EMPTY
2668: LIST
2669: LIST
2670: PUSH
2671: EMPTY
2672: LIST
2673: LIST
2674: PPUSH
2675: CALL_OW 414
2679: ST_TO_ADDR
// end ; end ;
2680: GO 2441
2682: POP
2683: POP
// end ;
2684: PPOPN 2
2686: END
// every 0 0$1 trigger BaseCaptured do var i ;
2687: LD_EXP 21
2691: IFFALSE 2758
2693: GO 2695
2695: DISABLE
2696: LD_INT 0
2698: PPUSH
// begin KillMc ( AlhambraDefenceStrategy ) ;
2699: LD_EXP 18
2703: PPUSH
2704: CALL_OW 387
// KillMc ( AlhambraBaseStrategy ) ;
2708: LD_EXP 12
2712: PPUSH
2713: CALL_OW 387
// KillMc ( AlhambraRepairStrategy ) ;
2717: LD_EXP 15
2721: PPUSH
2722: CALL_OW 387
// for i in AlhambraSnipers do
2726: LD_ADDR_VAR 0 1
2730: PUSH
2731: LD_EXP 27
2735: PUSH
2736: FOR_IN
2737: IFFALSE 2756
// ComAgressiveMove ( i , 28 , 2 ) ;
2739: LD_VAR 0 1
2743: PPUSH
2744: LD_INT 28
2746: PPUSH
2747: LD_INT 2
2749: PPUSH
2750: CALL_OW 114
2754: GO 2736
2756: POP
2757: POP
// end ;
2758: PPOPN 1
2760: END
// every 0 0$1 do var i ;
2761: GO 2763
2763: DISABLE
2764: LD_INT 0
2766: PPUSH
// begin enable ;
2767: ENABLE
// for i in AlhambraSnipers do
2768: LD_ADDR_VAR 0 1
2772: PUSH
2773: LD_EXP 27
2777: PUSH
2778: FOR_IN
2779: IFFALSE 2806
// if IsInArea ( i , BorderArea ) then
2781: LD_VAR 0 1
2785: PPUSH
2786: LD_INT 10
2788: PPUSH
2789: CALL_OW 308
2793: IFFALSE 2804
// RemoveUnit ( i ) ;
2795: LD_VAR 0 1
2799: PPUSH
2800: CALL_OW 64
2804: GO 2778
2806: POP
2807: POP
// end ;
2808: PPOPN 1
2810: END
// every 0 0$1 trigger FilterUnitsInArea ( ArabEscapeArea , [ [ f_side , 2 ] , [ f_class , class_scientistic ] , [ f_ok ] ] ) do
2811: LD_INT 5
2813: PPUSH
2814: LD_INT 22
2816: PUSH
2817: LD_INT 2
2819: PUSH
2820: EMPTY
2821: LIST
2822: LIST
2823: PUSH
2824: LD_INT 25
2826: PUSH
2827: LD_INT 4
2829: PUSH
2830: EMPTY
2831: LIST
2832: LIST
2833: PUSH
2834: LD_INT 50
2836: PUSH
2837: EMPTY
2838: LIST
2839: PUSH
2840: EMPTY
2841: LIST
2842: LIST
2843: LIST
2844: PPUSH
2845: CALL_OW 70
2849: IFFALSE 2869
2851: GO 2853
2853: DISABLE
// begin ArabsEscaped = true ;
2854: LD_ADDR_EXP 11
2858: PUSH
2859: LD_INT 1
2861: ST_TO_ADDR
// ChangeMissionObjectives ( OArabsEscaped ) ;
2862: LD_STRING OArabsEscaped
2864: PPUSH
2865: CALL_OW 337
// end ; end_of_file
2869: END
// export SniperSpotted , BaseCaptured , EvacuateLab , SibVehDone , SiberiteThingsDone , EndingAllowed ; every 0 0$1 trigger FilterAllUnits ( [ [ f_class , class_apeman_kamikaze ] , [ f_see , 1 ] ] ) do var u ;
2870: LD_INT 25
2872: PUSH
2873: LD_INT 17
2875: PUSH
2876: EMPTY
2877: LIST
2878: LIST
2879: PUSH
2880: LD_INT 101
2882: PUSH
2883: LD_INT 1
2885: PUSH
2886: EMPTY
2887: LIST
2888: LIST
2889: PUSH
2890: EMPTY
2891: LIST
2892: LIST
2893: PPUSH
2894: CALL_OW 69
2898: IFFALSE 3050
2900: GO 2902
2902: DISABLE
2903: LD_INT 0
2905: PPUSH
// begin u = WhoDiscovered ( 1 , FilterAllUnits ( [ [ f_class , class_apeman_kamikaze ] , [ f_see , 1 ] ] ) ) ;
2906: LD_ADDR_VAR 0 1
2910: PUSH
2911: LD_INT 1
2913: PPUSH
2914: LD_INT 25
2916: PUSH
2917: LD_INT 17
2919: PUSH
2920: EMPTY
2921: LIST
2922: LIST
2923: PUSH
2924: LD_INT 101
2926: PUSH
2927: LD_INT 1
2929: PUSH
2930: EMPTY
2931: LIST
2932: LIST
2933: PUSH
2934: EMPTY
2935: LIST
2936: LIST
2937: PPUSH
2938: CALL_OW 69
2942: PPUSH
2943: CALL 7625 0 2
2947: ST_TO_ADDR
// if u = Alex then
2948: LD_VAR 0 1
2952: PUSH
2953: LD_EXP 1
2957: EQUAL
2958: IFFALSE 2985
// u = UnitFilter ( TeamAlex , [ f_ok ] ) [ 1 ] ;
2960: LD_ADDR_VAR 0 1
2964: PUSH
2965: LD_EXP 4
2969: PPUSH
2970: LD_INT 50
2972: PUSH
2973: EMPTY
2974: LIST
2975: PPUSH
2976: CALL_OW 72
2980: PUSH
2981: LD_INT 1
2983: ARRAY
2984: ST_TO_ADDR
// DialogueOn ;
2985: CALL_OW 6
// CenterOnUnits ( FilterAllUnits ( [ [ f_class , class_apeman_kamikaze ] , [ f_see , 1 ] ] ) ) ;
2989: LD_INT 25
2991: PUSH
2992: LD_INT 17
2994: PUSH
2995: EMPTY
2996: LIST
2997: LIST
2998: PUSH
2999: LD_INT 101
3001: PUSH
3002: LD_INT 1
3004: PUSH
3005: EMPTY
3006: LIST
3007: LIST
3008: PUSH
3009: EMPTY
3010: LIST
3011: LIST
3012: PPUSH
3013: CALL_OW 69
3017: PPUSH
3018: CALL_OW 85
// Say ( u , dk-s-1 ) ;
3022: LD_VAR 0 1
3026: PPUSH
3027: LD_STRING dk-s-1
3029: PPUSH
3030: CALL_OW 88
// Say ( Alex , dk-a-1 ) ;
3034: LD_EXP 1
3038: PPUSH
3039: LD_STRING dk-a-1
3041: PPUSH
3042: CALL_OW 88
// DialogueOff ;
3046: CALL_OW 7
// end ;
3050: PPOPN 1
3052: END
// on Deinvisibled ( u ) do if See ( 1 , u ) and not SniperSpotted then
3053: LD_INT 1
3055: PPUSH
3056: LD_VAR 0 1
3060: PPUSH
3061: CALL_OW 292
3065: PUSH
3066: LD_EXP 20
3070: NOT
3071: AND
3072: IFFALSE 3119
// begin CenterOnUnits ( u ) ;
3074: LD_VAR 0 1
3078: PPUSH
3079: CALL_OW 85
// DialogueOn ;
3083: CALL_OW 6
// Say ( WhoDiscovered ( 1 , u ) , df-s-1 ) ;
3087: LD_INT 1
3089: PPUSH
3090: LD_VAR 0 1
3094: PPUSH
3095: CALL 7625 0 2
3099: PPUSH
3100: LD_STRING df-s-1
3102: PPUSH
3103: CALL_OW 88
// DialogueOff ;
3107: CALL_OW 7
// SniperSpotted = true ;
3111: LD_ADDR_EXP 20
3115: PUSH
3116: LD_INT 1
3118: ST_TO_ADDR
// end ;
3119: PPOPN 1
3121: END
// on BuildingCaptured ( b , os , cp ) do if b = ad and BaseCaptured = false then
3122: LD_VAR 0 1
3126: PUSH
3127: LD_INT 2
3129: EQUAL
3130: PUSH
3131: LD_EXP 21
3135: PUSH
3136: LD_INT 0
3138: EQUAL
3139: AND
3140: IFFALSE 3146
// PlayCaptureDialogue ;
3142: CALL 3186 0 0
3146: PPOPN 3
3148: END
// on UnitGoesToRed ( u ) do if u = ad or u = al then
3149: LD_VAR 0 1
3153: PUSH
3154: LD_INT 2
3156: EQUAL
3157: PUSH
3158: LD_VAR 0 1
3162: PUSH
3163: LD_INT 119
3165: EQUAL
3166: OR
3167: IFFALSE 3183
// if BaseCaptured = false then
3169: LD_EXP 21
3173: PUSH
3174: LD_INT 0
3176: EQUAL
3177: IFFALSE 3183
// PlayCaptureDialogue ;
3179: CALL 3186 0 0
3183: PPOPN 1
3185: END
// export function PlayCaptureDialogue ; var i ; begin
3186: LD_INT 0
3188: PPUSH
3189: PPUSH
// BaseCaptured = true ;
3190: LD_ADDR_EXP 21
3194: PUSH
3195: LD_INT 1
3197: ST_TO_ADDR
// EvacuateLab = true ;
3198: LD_ADDR_EXP 22
3202: PUSH
3203: LD_INT 1
3205: ST_TO_ADDR
// repeat Wait ( 0 0$3 ) until FilterUnitsInArea ( AlhambraArea , [ [ f_side , 2 ] , [ f_type , unit_human ] , [ f_ok ] ] ) = 0 ;
3206: LD_INT 105
3208: PPUSH
3209: CALL_OW 67
3213: LD_INT 6
3215: PPUSH
3216: LD_INT 22
3218: PUSH
3219: LD_INT 2
3221: PUSH
3222: EMPTY
3223: LIST
3224: LIST
3225: PUSH
3226: LD_INT 21
3228: PUSH
3229: LD_INT 1
3231: PUSH
3232: EMPTY
3233: LIST
3234: LIST
3235: PUSH
3236: LD_INT 50
3238: PUSH
3239: EMPTY
3240: LIST
3241: PUSH
3242: EMPTY
3243: LIST
3244: LIST
3245: LIST
3246: PPUSH
3247: CALL_OW 70
3251: PUSH
3252: LD_INT 0
3254: EQUAL
3255: IFFALSE 3206
// DialogueOn ;
3257: CALL_OW 6
// CenterOnXY ( 118 , 64 ) ;
3261: LD_INT 118
3263: PPUSH
3264: LD_INT 64
3266: PPUSH
3267: CALL_OW 84
// Say ( Alex , db-a-1 ) ;
3271: LD_EXP 1
3275: PPUSH
3276: LD_STRING db-a-1
3278: PPUSH
3279: CALL_OW 88
// if Anne then
3283: LD_EXP 2
3287: IFFALSE 3303
// Say ( Anne , db-n-1 ) else
3289: LD_EXP 2
3293: PPUSH
3294: LD_STRING db-n-1
3296: PPUSH
3297: CALL_OW 88
3301: GO 3330
// Say ( UnitFilter ( TeamAlex , [ f_ok ] ) [ 1 ] , db-s-1 ) ;
3303: LD_EXP 4
3307: PPUSH
3308: LD_INT 50
3310: PUSH
3311: EMPTY
3312: LIST
3313: PPUSH
3314: CALL_OW 72
3318: PUSH
3319: LD_INT 1
3321: ARRAY
3322: PPUSH
3323: LD_STRING db-s-1
3325: PPUSH
3326: CALL_OW 88
// Say ( Alex , db-a-2 ) ;
3330: LD_EXP 1
3334: PPUSH
3335: LD_STRING db-a-2
3337: PPUSH
3338: CALL_OW 88
// DialogueOff ;
3342: CALL_OW 7
// if not ArabsEscaped then
3346: LD_EXP 11
3350: NOT
3351: IFFALSE 3360
// ChangeMissionObjectives ( OArabsKilled ) ;
3353: LD_STRING OArabsKilled
3355: PPUSH
3356: CALL_OW 337
// ChangeMissionObjectives ( OBrowse ) ;
3360: LD_STRING OBrowse
3362: PPUSH
3363: CALL_OW 337
// SetRestrict ( b_ext_siberium , 1 , true ) ;
3367: LD_INT 21
3369: PPUSH
3370: LD_INT 1
3372: PPUSH
3373: LD_INT 1
3375: PPUSH
3376: CALL_OW 324
// SetRestrict ( b_siberite_power , 1 , true ) ;
3380: LD_INT 28
3382: PPUSH
3383: LD_INT 1
3385: PPUSH
3386: LD_INT 1
3388: PPUSH
3389: CALL_OW 324
// end ;
3393: LD_VAR 0 1
3397: RET
// every 0 0$1 trigger EvacuateLab do var i ;
3398: LD_EXP 22
3402: IFFALSE 3800
3404: GO 3406
3406: DISABLE
3407: LD_INT 0
3409: PPUSH
// begin DialogueOn ;
3410: CALL_OW 6
// Say ( FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_scientistic ] , [ f_ok ] ] ) [ 1 ] , dev-x-1 ) ;
3414: LD_INT 22
3416: PUSH
3417: LD_INT 2
3419: PUSH
3420: EMPTY
3421: LIST
3422: LIST
3423: PUSH
3424: LD_INT 25
3426: PUSH
3427: LD_INT 4
3429: PUSH
3430: EMPTY
3431: LIST
3432: LIST
3433: PUSH
3434: LD_INT 50
3436: PUSH
3437: EMPTY
3438: LIST
3439: PUSH
3440: EMPTY
3441: LIST
3442: LIST
3443: LIST
3444: PPUSH
3445: CALL_OW 69
3449: PUSH
3450: LD_INT 1
3452: ARRAY
3453: PPUSH
3454: LD_STRING dev-x-1
3456: PPUSH
3457: CALL_OW 88
// if Anne then
3461: LD_EXP 2
3465: IFFALSE 3479
// Say ( Anne , dev-n-1 ) ;
3467: LD_EXP 2
3471: PPUSH
3472: LD_STRING dev-n-1
3474: PPUSH
3475: CALL_OW 88
// DialogueOff ;
3479: CALL_OW 7
// Wait ( 0 0$1 ) ;
3483: LD_INT 35
3485: PPUSH
3486: CALL_OW 67
// MineExplosion ( 107 , 74 , 5 ) ;
3490: LD_INT 107
3492: PPUSH
3493: LD_INT 74
3495: PPUSH
3496: LD_INT 5
3498: PPUSH
3499: CALL_OW 453
// MineExplosion ( 137 , 79 , 5 ) ;
3503: LD_INT 137
3505: PPUSH
3506: LD_INT 79
3508: PPUSH
3509: LD_INT 5
3511: PPUSH
3512: CALL_OW 453
// MineExplosion ( 129 , 73 , 5 ) ;
3516: LD_INT 129
3518: PPUSH
3519: LD_INT 73
3521: PPUSH
3522: LD_INT 5
3524: PPUSH
3525: CALL_OW 453
// MineExplosion ( 121 , 53 , 5 ) ;
3529: LD_INT 121
3531: PPUSH
3532: LD_INT 53
3534: PPUSH
3535: LD_INT 5
3537: PPUSH
3538: CALL_OW 453
// for i in UnitsInside ( al ) do
3542: LD_ADDR_VAR 0 1
3546: PUSH
3547: LD_INT 119
3549: PPUSH
3550: CALL_OW 313
3554: PUSH
3555: FOR_IN
3556: IFFALSE 3572
// ComMoveToArea ( i , ArabEscapeArea ) ;
3558: LD_VAR 0 1
3562: PPUSH
3563: LD_INT 5
3565: PPUSH
3566: CALL_OW 113
3570: GO 3555
3572: POP
3573: POP
// for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_or , [ f_class , class_soldier ] , [ f_class , class_mortar ] ] , [ f_ok ] ] ) do
3574: LD_ADDR_VAR 0 1
3578: PUSH
3579: LD_INT 22
3581: PUSH
3582: LD_INT 2
3584: PUSH
3585: EMPTY
3586: LIST
3587: LIST
3588: PUSH
3589: LD_INT 2
3591: PUSH
3592: LD_INT 25
3594: PUSH
3595: LD_INT 1
3597: PUSH
3598: EMPTY
3599: LIST
3600: LIST
3601: PUSH
3602: LD_INT 25
3604: PUSH
3605: LD_INT 8
3607: PUSH
3608: EMPTY
3609: LIST
3610: LIST
3611: PUSH
3612: EMPTY
3613: LIST
3614: LIST
3615: LIST
3616: PUSH
3617: LD_INT 50
3619: PUSH
3620: EMPTY
3621: LIST
3622: PUSH
3623: EMPTY
3624: LIST
3625: LIST
3626: LIST
3627: PPUSH
3628: CALL_OW 69
3632: PUSH
3633: FOR_IN
3634: IFFALSE 3708
// begin ComExitBuilding ( i ) ;
3636: LD_VAR 0 1
3640: PPUSH
3641: CALL_OW 122
// case Rand ( 1 , 2 ) of 1 :
3645: LD_INT 1
3647: PPUSH
3648: LD_INT 2
3650: PPUSH
3651: CALL_OW 12
3655: PUSH
3656: LD_INT 1
3658: DOUBLE
3659: EQUAL
3660: IFTRUE 3664
3662: GO 3682
3664: POP
// AddComAgressiveMove ( i , 118 , 64 ) ; 2 :
3665: LD_VAR 0 1
3669: PPUSH
3670: LD_INT 118
3672: PPUSH
3673: LD_INT 64
3675: PPUSH
3676: CALL_OW 174
3680: GO 3706
3682: LD_INT 2
3684: DOUBLE
3685: EQUAL
3686: IFTRUE 3690
3688: GO 3705
3690: POP
// AddComMoveToArea ( i , ArabEscapeArea ) ; end ;
3691: LD_VAR 0 1
3695: PPUSH
3696: LD_INT 5
3698: PPUSH
3699: CALL_OW 173
3703: GO 3706
3705: POP
// end ;
3706: GO 3633
3708: POP
3709: POP
// for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_mechanic ] , [ f_ok ] ] ) do
3710: LD_ADDR_VAR 0 1
3714: PUSH
3715: LD_INT 22
3717: PUSH
3718: LD_INT 2
3720: PUSH
3721: EMPTY
3722: LIST
3723: LIST
3724: PUSH
3725: LD_INT 25
3727: PUSH
3728: LD_INT 3
3730: PUSH
3731: EMPTY
3732: LIST
3733: LIST
3734: PUSH
3735: LD_INT 50
3737: PUSH
3738: EMPTY
3739: LIST
3740: PUSH
3741: EMPTY
3742: LIST
3743: LIST
3744: LIST
3745: PPUSH
3746: CALL_OW 69
3750: PUSH
3751: FOR_IN
3752: IFFALSE 3798
// if not GetType ( IsInUnit ( i ) ) = unit_vehicle then
3754: LD_VAR 0 1
3758: PPUSH
3759: CALL_OW 310
3763: PPUSH
3764: CALL_OW 247
3768: PUSH
3769: LD_INT 2
3771: EQUAL
3772: NOT
3773: IFFALSE 3796
// begin ComExitBuilding ( i ) ;
3775: LD_VAR 0 1
3779: PPUSH
3780: CALL_OW 122
// AddComMoveToArea ( i , ArabEscapeArea ) ;
3784: LD_VAR 0 1
3788: PPUSH
3789: LD_INT 5
3791: PPUSH
3792: CALL_OW 173
// end ;
3796: GO 3751
3798: POP
3799: POP
// end ;
3800: PPOPN 1
3802: END
// every 0 0$1 trigger EvacuateLab do var i ;
3803: LD_EXP 22
3807: IFFALSE 3865
3809: GO 3811
3811: DISABLE
3812: LD_INT 0
3814: PPUSH
// begin enable ;
3815: ENABLE
// for i in FilterUnitsInArea ( ArabEscapeArea , [ [ f_side , 2 ] , [ f_ok ] ] ) do
3816: LD_ADDR_VAR 0 1
3820: PUSH
3821: LD_INT 5
3823: PPUSH
3824: LD_INT 22
3826: PUSH
3827: LD_INT 2
3829: PUSH
3830: EMPTY
3831: LIST
3832: LIST
3833: PUSH
3834: LD_INT 50
3836: PUSH
3837: EMPTY
3838: LIST
3839: PUSH
3840: EMPTY
3841: LIST
3842: LIST
3843: PPUSH
3844: CALL_OW 70
3848: PUSH
3849: FOR_IN
3850: IFFALSE 3863
// RemoveUnit ( i ) ;
3852: LD_VAR 0 1
3856: PPUSH
3857: CALL_OW 64
3861: GO 3849
3863: POP
3864: POP
// end ;
3865: PPOPN 1
3867: END
// on ResearchComplete ( t , l ) do var u ;
3868: LD_INT 0
3870: PPUSH
// begin if t = tech_SibPow then
3871: LD_VAR 0 1
3875: PUSH
3876: LD_INT 21
3878: EQUAL
3879: IFFALSE 3990
// begin u = UnitsInside ( l ) diff [ Alex ] ;
3881: LD_ADDR_VAR 0 3
3885: PUSH
3886: LD_VAR 0 2
3890: PPUSH
3891: CALL_OW 313
3895: PUSH
3896: LD_EXP 1
3900: PUSH
3901: EMPTY
3902: LIST
3903: DIFF
3904: ST_TO_ADDR
// u = u [ 1 ] ;
3905: LD_ADDR_VAR 0 3
3909: PUSH
3910: LD_VAR 0 3
3914: PUSH
3915: LD_INT 1
3917: ARRAY
3918: ST_TO_ADDR
// if not u then
3919: LD_VAR 0 3
3923: NOT
3924: IFFALSE 3951
// u = UnitFilter ( TeamAlex , [ f_ok ] ) [ 1 ] ;
3926: LD_ADDR_VAR 0 3
3930: PUSH
3931: LD_EXP 4
3935: PPUSH
3936: LD_INT 50
3938: PUSH
3939: EMPTY
3940: LIST
3941: PPUSH
3942: CALL_OW 72
3946: PUSH
3947: LD_INT 1
3949: ARRAY
3950: ST_TO_ADDR
// DialogueOn ;
3951: CALL_OW 6
// Say ( u , ds-s-1 ) ;
3955: LD_VAR 0 3
3959: PPUSH
3960: LD_STRING ds-s-1
3962: PPUSH
3963: CALL_OW 88
// Say ( Alex , ds-a-1 ) ;
3967: LD_EXP 1
3971: PPUSH
3972: LD_STRING ds-a-1
3974: PPUSH
3975: CALL_OW 88
// DialogueOff ;
3979: CALL_OW 7
// ChangeMissionObjectives ( OConstruct ) ;
3983: LD_STRING OConstruct
3985: PPUSH
3986: CALL_OW 337
// end ; end ;
3990: PPOPN 3
3992: END
// on VehicleConstructed ( v , f ) do if GetEngine ( v ) = engine_siberite and not SibVehDone then
3993: LD_VAR 0 1
3997: PPUSH
3998: CALL_OW 262
4002: PUSH
4003: LD_INT 3
4005: EQUAL
4006: PUSH
4007: LD_EXP 23
4011: NOT
4012: AND
4013: IFFALSE 4107
// begin Wait ( 0 0$2 ) ;
4015: LD_INT 70
4017: PPUSH
4018: CALL_OW 67
// SibVehDone = true ;
4022: LD_ADDR_EXP 23
4026: PUSH
4027: LD_INT 1
4029: ST_TO_ADDR
// CenterOnUnits ( v ) ;
4030: LD_VAR 0 1
4034: PPUSH
4035: CALL_OW 85
// DialogueOn ;
4039: CALL_OW 6
// if IsDrivenBy ( v ) = Alex then
4043: LD_VAR 0 1
4047: PPUSH
4048: CALL_OW 311
4052: PUSH
4053: LD_EXP 1
4057: EQUAL
4058: IFFALSE 4074
// Say ( Alex , ds-a-2a ) else
4060: LD_EXP 1
4064: PPUSH
4065: LD_STRING ds-a-2a
4067: PPUSH
4068: CALL_OW 88
4072: GO 4103
// begin Say ( IsDrivenBy ( v ) , ds-s-2 ) ;
4074: LD_VAR 0 1
4078: PPUSH
4079: CALL_OW 311
4083: PPUSH
4084: LD_STRING ds-s-2
4086: PPUSH
4087: CALL_OW 88
// Say ( Alex , ds-a-2 ) ;
4091: LD_EXP 1
4095: PPUSH
4096: LD_STRING ds-a-2
4098: PPUSH
4099: CALL_OW 88
// end ; DialogueOff ;
4103: CALL_OW 7
// end ;
4107: PPOPN 2
4109: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_siberite_power ] , [ f_ready ] ] ) and SibVehDone do
4110: LD_INT 22
4112: PUSH
4113: LD_INT 1
4115: PUSH
4116: EMPTY
4117: LIST
4118: LIST
4119: PUSH
4120: LD_INT 30
4122: PUSH
4123: LD_INT 28
4125: PUSH
4126: EMPTY
4127: LIST
4128: LIST
4129: PUSH
4130: LD_INT 53
4132: PUSH
4133: EMPTY
4134: LIST
4135: PUSH
4136: EMPTY
4137: LIST
4138: LIST
4139: LIST
4140: PPUSH
4141: CALL_OW 69
4145: PUSH
4146: LD_EXP 23
4150: AND
4151: IFFALSE 4171
4153: GO 4155
4155: DISABLE
// begin ChangeMissionObjectives ( OConstructOut ) ;
4156: LD_STRING OConstructOut
4158: PPUSH
4159: CALL_OW 337
// SiberiteThingsDone = true ;
4163: LD_ADDR_EXP 24
4167: PUSH
4168: LD_INT 1
4170: ST_TO_ADDR
// end ;
4171: END
// every 0 0$1 trigger Researched ( 1 , tech_SibPow ) and Researched ( 1 , tech_SibEng ) and Researched ( 1 , tech_Sib1 ) and Researched ( 1 , tech_Sib2 ) do
4172: LD_INT 1
4174: PPUSH
4175: LD_INT 21
4177: PPUSH
4178: CALL_OW 325
4182: PUSH
4183: LD_INT 1
4185: PPUSH
4186: LD_INT 22
4188: PPUSH
4189: CALL_OW 325
4193: AND
4194: PUSH
4195: LD_INT 1
4197: PPUSH
4198: LD_INT 54
4200: PPUSH
4201: CALL_OW 325
4205: AND
4206: PUSH
4207: LD_INT 1
4209: PPUSH
4210: LD_INT 55
4212: PPUSH
4213: CALL_OW 325
4217: AND
4218: IFFALSE 4320
4220: GO 4222
4222: DISABLE
// begin DialogueOn ;
4223: CALL_OW 6
// if UnitsInside ( al ) [ 1 ] = Alex then
4227: LD_INT 119
4229: PPUSH
4230: CALL_OW 313
4234: PUSH
4235: LD_INT 1
4237: ARRAY
4238: PUSH
4239: LD_EXP 1
4243: EQUAL
4244: IFFALSE 4260
// Say ( Alex , de-a-1a ) else
4246: LD_EXP 1
4250: PPUSH
4251: LD_STRING de-a-1a
4253: PPUSH
4254: CALL_OW 88
4258: GO 4291
// begin Say ( UnitsInside ( al ) [ 1 ] , de-s-1 ) ;
4260: LD_INT 119
4262: PPUSH
4263: CALL_OW 313
4267: PUSH
4268: LD_INT 1
4270: ARRAY
4271: PPUSH
4272: LD_STRING de-s-1
4274: PPUSH
4275: CALL_OW 88
// Say ( Alex , de-a-1 ) ;
4279: LD_EXP 1
4283: PPUSH
4284: LD_STRING de-a-1
4286: PPUSH
4287: CALL_OW 88
// end ; ChangeMissionObjectives ( ODismantle ) ;
4291: LD_STRING ODismantle
4293: PPUSH
4294: CALL_OW 337
// SetAreaMapShow ( ExitArea , 1 ) ;
4298: LD_INT 4
4300: PPUSH
4301: LD_INT 1
4303: PPUSH
4304: CALL_OW 424
// DialogueOff ;
4308: CALL_OW 7
// EndingAllowed = true ;
4312: LD_ADDR_EXP 25
4316: PUSH
4317: LD_INT 1
4319: ST_TO_ADDR
// end ;
4320: END
// every 0 0$1 trigger EndingAllowed and FilterUnitsExceptArea ( ExitArea , [ [ f_side , 1 ] , [ f_or , [ f_type , unit_human ] , [ [ f_type , unit_building ] , [ f_ok ] ] ] , [ f_not , [ f_nation , nation_nature ] ] ] ) = 0 do
4321: LD_EXP 25
4325: PUSH
4326: LD_INT 4
4328: PPUSH
4329: LD_INT 22
4331: PUSH
4332: LD_INT 1
4334: PUSH
4335: EMPTY
4336: LIST
4337: LIST
4338: PUSH
4339: LD_INT 2
4341: PUSH
4342: LD_INT 21
4344: PUSH
4345: LD_INT 1
4347: PUSH
4348: EMPTY
4349: LIST
4350: LIST
4351: PUSH
4352: LD_INT 21
4354: PUSH
4355: LD_INT 3
4357: PUSH
4358: EMPTY
4359: LIST
4360: LIST
4361: PUSH
4362: LD_INT 50
4364: PUSH
4365: EMPTY
4366: LIST
4367: PUSH
4368: EMPTY
4369: LIST
4370: LIST
4371: PUSH
4372: EMPTY
4373: LIST
4374: LIST
4375: LIST
4376: PUSH
4377: LD_INT 3
4379: PUSH
4380: LD_INT 23
4382: PUSH
4383: LD_INT 0
4385: PUSH
4386: EMPTY
4387: LIST
4388: LIST
4389: PUSH
4390: EMPTY
4391: LIST
4392: LIST
4393: PUSH
4394: EMPTY
4395: LIST
4396: LIST
4397: LIST
4398: PPUSH
4399: CALL_OW 71
4403: PUSH
4404: LD_INT 0
4406: EQUAL
4407: AND
4408: IFFALSE 4417
4410: GO 4412
4412: DISABLE
// SaveAndWin ;
4413: CALL 4418 0 0
4417: END
// export function SaveAndWin ; begin
4418: LD_INT 0
4420: PPUSH
// if CaptureTimer < [ 30 30$0 , 20 20$0 , 15 15$0 ] [ difficulty ] then
4421: LD_EXP 7
4425: PUSH
4426: LD_INT 63000
4428: PUSH
4429: LD_INT 42000
4431: PUSH
4432: LD_INT 31500
4434: PUSH
4435: EMPTY
4436: LIST
4437: LIST
4438: LIST
4439: PUSH
4440: LD_OWVAR 67
4444: ARRAY
4445: LESS
4446: IFFALSE 4460
// AddMedal ( MQuick , 1 ) else
4448: LD_STRING MQuick
4450: PPUSH
4451: LD_INT 1
4453: PPUSH
4454: CALL_OW 101
4458: GO 4471
// AddMedal ( MQuick , - 1 ) ;
4460: LD_STRING MQuick
4462: PPUSH
4463: LD_INT 1
4465: NEG
4466: PPUSH
4467: CALL_OW 101
// if not ArabsEscaped then
4471: LD_EXP 11
4475: NOT
4476: IFFALSE 4490
// AddMedal ( MKiller , 1 ) else
4478: LD_STRING MKiller
4480: PPUSH
4481: LD_INT 1
4483: PPUSH
4484: CALL_OW 101
4488: GO 4501
// AddMedal ( MKiller , - 1 ) ;
4490: LD_STRING MKiller
4492: PPUSH
4493: LD_INT 1
4495: NEG
4496: PPUSH
4497: CALL_OW 101
// if SiberiteThingsDone then
4501: LD_EXP 24
4505: IFFALSE 4519
// AddMedal ( MPower , 1 ) else
4507: LD_STRING MPower
4509: PPUSH
4510: LD_INT 1
4512: PPUSH
4513: CALL_OW 101
4517: GO 4530
// AddMedal ( MPower , - 1 ) ;
4519: LD_STRING MPower
4521: PPUSH
4522: LD_INT 1
4524: NEG
4525: PPUSH
4526: CALL_OW 101
// GiveMedals ( Main ) ;
4530: LD_STRING Main
4532: PPUSH
4533: CALL_OW 102
// RewardPeople ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] , [ f_nation , nation_american ] ] ) ) ;
4537: LD_INT 22
4539: PUSH
4540: LD_INT 1
4542: PUSH
4543: EMPTY
4544: LIST
4545: LIST
4546: PUSH
4547: LD_INT 21
4549: PUSH
4550: LD_INT 1
4552: PUSH
4553: EMPTY
4554: LIST
4555: LIST
4556: PUSH
4557: LD_INT 23
4559: PUSH
4560: LD_INT 1
4562: PUSH
4563: EMPTY
4564: LIST
4565: LIST
4566: PUSH
4567: EMPTY
4568: LIST
4569: LIST
4570: LIST
4571: PPUSH
4572: CALL_OW 69
4576: PPUSH
4577: CALL_OW 43
// SaveCharacters ( Alex , Alex ) ;
4581: LD_EXP 1
4585: PPUSH
4586: LD_STRING Alex
4588: PPUSH
4589: CALL_OW 38
// if Anne then
4593: LD_EXP 2
4597: IFFALSE 4611
// SaveCharacters ( Anne , Anne ) ;
4599: LD_EXP 2
4603: PPUSH
4604: LD_STRING Anne
4606: PPUSH
4607: CALL_OW 38
// if Eddings then
4611: LD_EXP 3
4615: IFFALSE 4629
// SaveCharacters ( Eddings , Eddings ) ;
4617: LD_EXP 3
4621: PPUSH
4622: LD_STRING Eddings
4624: PPUSH
4625: CALL_OW 38
// SaveCharacters ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] , [ f_nation , nation_american ] ] ) diff [ Alex , Anne , Eddings ] , TeamAlex ) ;
4629: LD_INT 22
4631: PUSH
4632: LD_INT 1
4634: PUSH
4635: EMPTY
4636: LIST
4637: LIST
4638: PUSH
4639: LD_INT 21
4641: PUSH
4642: LD_INT 1
4644: PUSH
4645: EMPTY
4646: LIST
4647: LIST
4648: PUSH
4649: LD_INT 23
4651: PUSH
4652: LD_INT 1
4654: PUSH
4655: EMPTY
4656: LIST
4657: LIST
4658: PUSH
4659: EMPTY
4660: LIST
4661: LIST
4662: LIST
4663: PPUSH
4664: CALL_OW 69
4668: PUSH
4669: LD_EXP 1
4673: PUSH
4674: LD_EXP 2
4678: PUSH
4679: LD_EXP 3
4683: PUSH
4684: EMPTY
4685: LIST
4686: LIST
4687: LIST
4688: DIFF
4689: PPUSH
4690: LD_STRING TeamAlex
4692: PPUSH
4693: CALL_OW 38
// YouWin ;
4697: CALL_OW 103
// end ; end_of_file
4701: LD_VAR 0 1
4705: RET
// export MinePositions ; every 0 0$1 do
4706: GO 4708
4708: DISABLE
// MinePositions = [ [ 130 , 99 ] , [ 134 , 101 ] , [ 138 , 104 ] , [ 71 , 49 ] , [ 69 , 44 ] ] ;
4709: LD_ADDR_EXP 26
4713: PUSH
4714: LD_INT 130
4716: PUSH
4717: LD_INT 99
4719: PUSH
4720: EMPTY
4721: LIST
4722: LIST
4723: PUSH
4724: LD_INT 134
4726: PUSH
4727: LD_INT 101
4729: PUSH
4730: EMPTY
4731: LIST
4732: LIST
4733: PUSH
4734: LD_INT 138
4736: PUSH
4737: LD_INT 104
4739: PUSH
4740: EMPTY
4741: LIST
4742: LIST
4743: PUSH
4744: LD_INT 71
4746: PUSH
4747: LD_INT 49
4749: PUSH
4750: EMPTY
4751: LIST
4752: LIST
4753: PUSH
4754: LD_INT 69
4756: PUSH
4757: LD_INT 44
4759: PUSH
4760: EMPTY
4761: LIST
4762: LIST
4763: PUSH
4764: EMPTY
4765: LIST
4766: LIST
4767: LIST
4768: LIST
4769: LIST
4770: ST_TO_ADDR
4771: END
// export function TestTheMine ( x , y ) ; var t ; begin
4772: LD_INT 0
4774: PPUSH
4775: PPUSH
// t = FilterAllUnits ( [ [ f_side , 1 ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] , [ f_distxy , x , y , 2 ] ] ) ;
4776: LD_ADDR_VAR 0 4
4780: PUSH
4781: LD_INT 22
4783: PUSH
4784: LD_INT 1
4786: PUSH
4787: EMPTY
4788: LIST
4789: LIST
4790: PUSH
4791: LD_INT 2
4793: PUSH
4794: LD_INT 21
4796: PUSH
4797: LD_INT 1
4799: PUSH
4800: EMPTY
4801: LIST
4802: LIST
4803: PUSH
4804: LD_INT 21
4806: PUSH
4807: LD_INT 2
4809: PUSH
4810: EMPTY
4811: LIST
4812: LIST
4813: PUSH
4814: EMPTY
4815: LIST
4816: LIST
4817: LIST
4818: PUSH
4819: LD_INT 92
4821: PUSH
4822: LD_VAR 0 1
4826: PUSH
4827: LD_VAR 0 2
4831: PUSH
4832: LD_INT 2
4834: PUSH
4835: EMPTY
4836: LIST
4837: LIST
4838: LIST
4839: LIST
4840: PUSH
4841: EMPTY
4842: LIST
4843: LIST
4844: LIST
4845: PPUSH
4846: CALL_OW 69
4850: ST_TO_ADDR
// if t and not BaseCaptured then
4851: LD_VAR 0 4
4855: PUSH
4856: LD_EXP 21
4860: NOT
4861: AND
4862: IFFALSE 4891
// begin MineExplosion ( x , y , 1 ) ;
4864: LD_VAR 0 1
4868: PPUSH
4869: LD_VAR 0 2
4873: PPUSH
4874: LD_INT 1
4876: PPUSH
4877: CALL_OW 453
// Result = true ;
4881: LD_ADDR_VAR 0 3
4885: PUSH
4886: LD_INT 1
4888: ST_TO_ADDR
// end else
4889: GO 4899
// Result = false ;
4891: LD_ADDR_VAR 0 3
4895: PUSH
4896: LD_INT 0
4898: ST_TO_ADDR
// end ;
4899: LD_VAR 0 3
4903: RET
// every 0 0$2 do var MineOut , i ;
4904: GO 4906
4906: DISABLE
4907: LD_INT 0
4909: PPUSH
4910: PPUSH
// begin MineOut = [ ] ;
4911: LD_ADDR_VAR 0 1
4915: PUSH
4916: EMPTY
4917: ST_TO_ADDR
// for i in MinePositions do
4918: LD_ADDR_VAR 0 2
4922: PUSH
4923: LD_EXP 26
4927: PUSH
4928: FOR_IN
4929: IFFALSE 4976
// if TestTheMine ( i [ 1 ] , i [ 2 ] ) then
4931: LD_VAR 0 2
4935: PUSH
4936: LD_INT 1
4938: ARRAY
4939: PPUSH
4940: LD_VAR 0 2
4944: PUSH
4945: LD_INT 2
4947: ARRAY
4948: PPUSH
4949: CALL 4772 0 2
4953: IFFALSE 4974
// MineOut = MineOut ^ [ i ] ;
4955: LD_ADDR_VAR 0 1
4959: PUSH
4960: LD_VAR 0 1
4964: PUSH
4965: LD_VAR 0 2
4969: PUSH
4970: EMPTY
4971: LIST
4972: ADD
4973: ST_TO_ADDR
4974: GO 4928
4976: POP
4977: POP
// if MineOut then
4978: LD_VAR 0 1
4982: IFFALSE 5000
// MinePositions = MinePositions diff MineOut ;
4984: LD_ADDR_EXP 26
4988: PUSH
4989: LD_EXP 26
4993: PUSH
4994: LD_VAR 0 1
4998: DIFF
4999: ST_TO_ADDR
// if MinePositions then
5000: LD_EXP 26
5004: IFFALSE 5007
// enable ;
5006: ENABLE
// end ;
5007: PPOPN 2
5009: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 1 ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] , [ f_distxy , 70 , 69 , 3 ] ] ) and not BaseCaptured do
5010: LD_INT 22
5012: PUSH
5013: LD_INT 1
5015: PUSH
5016: EMPTY
5017: LIST
5018: LIST
5019: PUSH
5020: LD_INT 2
5022: PUSH
5023: LD_INT 21
5025: PUSH
5026: LD_INT 1
5028: PUSH
5029: EMPTY
5030: LIST
5031: LIST
5032: PUSH
5033: LD_INT 21
5035: PUSH
5036: LD_INT 2
5038: PUSH
5039: EMPTY
5040: LIST
5041: LIST
5042: PUSH
5043: EMPTY
5044: LIST
5045: LIST
5046: LIST
5047: PUSH
5048: LD_INT 92
5050: PUSH
5051: LD_INT 70
5053: PUSH
5054: LD_INT 69
5056: PUSH
5057: LD_INT 3
5059: PUSH
5060: EMPTY
5061: LIST
5062: LIST
5063: LIST
5064: LIST
5065: PUSH
5066: EMPTY
5067: LIST
5068: LIST
5069: LIST
5070: PPUSH
5071: CALL_OW 69
5075: PUSH
5076: LD_EXP 21
5080: NOT
5081: AND
5082: IFFALSE 5094
5084: GO 5086
5086: DISABLE
// ComSelfDestruction ( bombtruck ) ; end_of_file
5087: LD_INT 138
5089: PPUSH
5090: CALL_OW 577
5094: END
// export AlhambraSnipers , Targets ; export function PrepareSnipers ; var i , h , pos ; begin
5095: LD_INT 0
5097: PPUSH
5098: PPUSH
5099: PPUSH
5100: PPUSH
// uc_side = 2 ;
5101: LD_ADDR_OWVAR 20
5105: PUSH
5106: LD_INT 2
5108: ST_TO_ADDR
// uc_nation = 1 ;
5109: LD_ADDR_OWVAR 21
5113: PUSH
5114: LD_INT 1
5116: ST_TO_ADDR
// InitHc ;
5117: CALL_OW 19
// pos = [ [ 119 , 43 ] , [ 78 , 3 ] , [ 64 , 30 ] , [ 100 , 93 ] , [ 104 , 100 ] ] ;
5121: LD_ADDR_VAR 0 4
5125: PUSH
5126: LD_INT 119
5128: PUSH
5129: LD_INT 43
5131: PUSH
5132: EMPTY
5133: LIST
5134: LIST
5135: PUSH
5136: LD_INT 78
5138: PUSH
5139: LD_INT 3
5141: PUSH
5142: EMPTY
5143: LIST
5144: LIST
5145: PUSH
5146: LD_INT 64
5148: PUSH
5149: LD_INT 30
5151: PUSH
5152: EMPTY
5153: LIST
5154: LIST
5155: PUSH
5156: LD_INT 100
5158: PUSH
5159: LD_INT 93
5161: PUSH
5162: EMPTY
5163: LIST
5164: LIST
5165: PUSH
5166: LD_INT 104
5168: PUSH
5169: LD_INT 100
5171: PUSH
5172: EMPTY
5173: LIST
5174: LIST
5175: PUSH
5176: EMPTY
5177: LIST
5178: LIST
5179: LIST
5180: LIST
5181: LIST
5182: ST_TO_ADDR
// for i in pos do
5183: LD_ADDR_VAR 0 2
5187: PUSH
5188: LD_VAR 0 4
5192: PUSH
5193: FOR_IN
5194: IFFALSE 5317
// begin PrepareHuman ( false , class_sniper , [ Rand ( 3 , 4 ) , Rand ( 4 , 5 ) , Rand ( 4 , 6 ) ] [ difficulty ] ) ;
5196: LD_INT 0
5198: PPUSH
5199: LD_INT 5
5201: PPUSH
5202: LD_INT 3
5204: PPUSH
5205: LD_INT 4
5207: PPUSH
5208: CALL_OW 12
5212: PUSH
5213: LD_INT 4
5215: PPUSH
5216: LD_INT 5
5218: PPUSH
5219: CALL_OW 12
5223: PUSH
5224: LD_INT 4
5226: PPUSH
5227: LD_INT 6
5229: PPUSH
5230: CALL_OW 12
5234: PUSH
5235: EMPTY
5236: LIST
5237: LIST
5238: LIST
5239: PUSH
5240: LD_OWVAR 67
5244: ARRAY
5245: PPUSH
5246: CALL_OW 380
// h = CreateHuman ;
5250: LD_ADDR_VAR 0 3
5254: PUSH
5255: CALL_OW 44
5259: ST_TO_ADDR
// PlaceUnitXY ( h , i [ 1 ] , i [ 2 ] , false ) ;
5260: LD_VAR 0 3
5264: PPUSH
5265: LD_VAR 0 2
5269: PUSH
5270: LD_INT 1
5272: ARRAY
5273: PPUSH
5274: LD_VAR 0 2
5278: PUSH
5279: LD_INT 2
5281: ARRAY
5282: PPUSH
5283: LD_INT 0
5285: PPUSH
5286: CALL_OW 48
// AlhambraSnipers = AlhambraSnipers ^ h ;
5290: LD_ADDR_EXP 27
5294: PUSH
5295: LD_EXP 27
5299: PUSH
5300: LD_VAR 0 3
5304: ADD
5305: ST_TO_ADDR
// ComInvisible ( h ) ;
5306: LD_VAR 0 3
5310: PPUSH
5311: CALL_OW 152
// end ;
5315: GO 5193
5317: POP
5318: POP
// end ;
5319: LD_VAR 0 1
5323: RET
// every 0 0$3 trigger not BaseCaptured do var i ;
5324: LD_EXP 21
5328: NOT
5329: IFFALSE 5532
5331: GO 5333
5333: DISABLE
5334: LD_INT 0
5336: PPUSH
// begin enable ;
5337: ENABLE
// for i in FilterUnitsExceptArea ( AlhambraBuffer , [ [ f_side , 1 ] , [ f_type , unit_human ] ] ) do
5338: LD_ADDR_VAR 0 1
5342: PUSH
5343: LD_INT 8
5345: PPUSH
5346: LD_INT 22
5348: PUSH
5349: LD_INT 1
5351: PUSH
5352: EMPTY
5353: LIST
5354: LIST
5355: PUSH
5356: LD_INT 21
5358: PUSH
5359: LD_INT 1
5361: PUSH
5362: EMPTY
5363: LIST
5364: LIST
5365: PUSH
5366: EMPTY
5367: LIST
5368: LIST
5369: PPUSH
5370: CALL_OW 71
5374: PUSH
5375: FOR_IN
5376: IFFALSE 5483
// if See ( 2 , i ) then
5378: LD_INT 2
5380: PPUSH
5381: LD_VAR 0 1
5385: PPUSH
5386: CALL_OW 292
5390: IFFALSE 5453
// begin if GetClass ( i ) = class_scientistic or GetClass ( i ) = class_mechanic then
5392: LD_VAR 0 1
5396: PPUSH
5397: CALL_OW 257
5401: PUSH
5402: LD_INT 4
5404: EQUAL
5405: PUSH
5406: LD_VAR 0 1
5410: PPUSH
5411: CALL_OW 257
5415: PUSH
5416: LD_INT 3
5418: EQUAL
5419: OR
5420: IFFALSE 5451
// if not i in Targets then
5422: LD_VAR 0 1
5426: PUSH
5427: LD_EXP 28
5431: IN
5432: NOT
5433: IFFALSE 5451
// Targets = Targets ^ i ;
5435: LD_ADDR_EXP 28
5439: PUSH
5440: LD_EXP 28
5444: PUSH
5445: LD_VAR 0 1
5449: ADD
5450: ST_TO_ADDR
// end else
5451: GO 5481
// if i in Targets then
5453: LD_VAR 0 1
5457: PUSH
5458: LD_EXP 28
5462: IN
5463: IFFALSE 5481
// Targets = Targets diff i ;
5465: LD_ADDR_EXP 28
5469: PUSH
5470: LD_EXP 28
5474: PUSH
5475: LD_VAR 0 1
5479: DIFF
5480: ST_TO_ADDR
5481: GO 5375
5483: POP
5484: POP
// if Targets then
5485: LD_EXP 28
5489: IFFALSE 5532
// for i in Targets do
5491: LD_ADDR_VAR 0 1
5495: PUSH
5496: LD_EXP 28
5500: PUSH
5501: FOR_IN
5502: IFFALSE 5530
// AddComAttackUnit ( NearestUnitToUnit ( AlhambraSnipers , i ) , i ) ;
5504: LD_EXP 27
5508: PPUSH
5509: LD_VAR 0 1
5513: PPUSH
5514: CALL_OW 74
5518: PPUSH
5519: LD_VAR 0 1
5523: PPUSH
5524: CALL_OW 175
5528: GO 5501
5530: POP
5531: POP
// end ;
5532: PPOPN 1
5534: END
// every 0 0$2 trigger AlhambraSnipers and not BaseCaptured do var i , dir ;
5535: LD_EXP 27
5539: PUSH
5540: LD_EXP 21
5544: NOT
5545: AND
5546: IFFALSE 5783
5548: GO 5550
5550: DISABLE
5551: LD_INT 0
5553: PPUSH
5554: PPUSH
// begin enable ;
5555: ENABLE
// for i in AlhambraSnipers do
5556: LD_ADDR_VAR 0 1
5560: PUSH
5561: LD_EXP 27
5565: PUSH
5566: FOR_IN
5567: IFFALSE 5781
// begin if not IsInvisible ( i ) and not Targets then
5569: LD_VAR 0 1
5573: PPUSH
5574: CALL_OW 571
5578: NOT
5579: PUSH
5580: LD_EXP 28
5584: NOT
5585: AND
5586: IFFALSE 5627
// begin if GetDistUnitArea ( i , SnipersPositions ) >= 3 then
5588: LD_VAR 0 1
5592: PPUSH
5593: LD_INT 9
5595: PPUSH
5596: CALL_OW 299
5600: PUSH
5601: LD_INT 3
5603: GREATEREQUAL
5604: IFFALSE 5618
// ComMoveToArea ( i , SnipersPositions ) ;
5606: LD_VAR 0 1
5610: PPUSH
5611: LD_INT 9
5613: PPUSH
5614: CALL_OW 113
// AddComInvisible ( i ) ;
5618: LD_VAR 0 1
5622: PPUSH
5623: CALL_OW 212
// end ; if GetLives ( i ) < 1000 then
5627: LD_VAR 0 1
5631: PPUSH
5632: CALL_OW 256
5636: PUSH
5637: LD_INT 1000
5639: LESS
5640: IFFALSE 5779
// if See ( 1 , i ) then
5642: LD_INT 1
5644: PPUSH
5645: LD_VAR 0 1
5649: PPUSH
5650: CALL_OW 292
5654: IFFALSE 5779
// begin dir = GetOppositeDir ( i ) ;
5656: LD_ADDR_VAR 0 2
5660: PUSH
5661: LD_VAR 0 1
5665: PPUSH
5666: CALL 6994 0 1
5670: ST_TO_ADDR
// repeat begin ComMoveXY ( i , ShiftX ( GetX ( i ) , dir , Rand ( 2 , 5 ) ) , ShiftY ( GetY ( i ) , dir , Rand ( 2 , 5 ) ) ) ;
5671: LD_VAR 0 1
5675: PPUSH
5676: LD_VAR 0 1
5680: PPUSH
5681: CALL_OW 250
5685: PPUSH
5686: LD_VAR 0 2
5690: PPUSH
5691: LD_INT 2
5693: PPUSH
5694: LD_INT 5
5696: PPUSH
5697: CALL_OW 12
5701: PPUSH
5702: CALL_OW 272
5706: PPUSH
5707: LD_VAR 0 1
5711: PPUSH
5712: CALL_OW 251
5716: PPUSH
5717: LD_VAR 0 2
5721: PPUSH
5722: LD_INT 2
5724: PPUSH
5725: LD_INT 5
5727: PPUSH
5728: CALL_OW 12
5732: PPUSH
5733: CALL_OW 273
5737: PPUSH
5738: CALL_OW 111
// Wait ( 0 0$1 ) ;
5742: LD_INT 35
5744: PPUSH
5745: CALL_OW 67
// dir = GetDir ( i ) end until not See ( 1 , i ) ;
5749: LD_ADDR_VAR 0 2
5753: PUSH
5754: LD_VAR 0 1
5758: PPUSH
5759: CALL_OW 254
5763: ST_TO_ADDR
5764: LD_INT 1
5766: PPUSH
5767: LD_VAR 0 1
5771: PPUSH
5772: CALL_OW 292
5776: NOT
5777: IFFALSE 5671
// end end ;
5779: GO 5566
5781: POP
5782: POP
// end ; end_of_file
5783: PPOPN 2
5785: END
// export ArabTimer ; every 0 0$1 trigger BaseCaptured do
5786: LD_EXP 21
5790: IFFALSE 5810
5792: GO 5794
5794: DISABLE
// begin enable ;
5795: ENABLE
// ArabTimer = ArabTimer + 0 0$1 ;
5796: LD_ADDR_EXP 29
5800: PUSH
5801: LD_EXP 29
5805: PUSH
5806: LD_INT 35
5808: PLUS
5809: ST_TO_ADDR
// end ;
5810: END
// export function PrepareAttack ( area , path , sols , vehs ) ; var a , i , go ; begin
5811: LD_INT 0
5813: PPUSH
5814: PPUSH
5815: PPUSH
5816: PPUSH
// uc_side = 2 ;
5817: LD_ADDR_OWVAR 20
5821: PUSH
5822: LD_INT 2
5824: ST_TO_ADDR
// uc_nation = 2 ;
5825: LD_ADDR_OWVAR 21
5829: PUSH
5830: LD_INT 2
5832: ST_TO_ADDR
// InitHc ;
5833: CALL_OW 19
// for i = 1 to sols do
5837: LD_ADDR_VAR 0 7
5841: PUSH
5842: DOUBLE
5843: LD_INT 1
5845: DEC
5846: ST_TO_ADDR
5847: LD_VAR 0 3
5851: PUSH
5852: FOR_TO
5853: IFFALSE 5927
// begin PrepareHuman ( false , class_mortar , [ Rand ( 4 , 6 ) , Rand ( 4 , 7 ) , Rand ( 5 , 7 ) ] [ difficulty ] ) ;
5855: LD_INT 0
5857: PPUSH
5858: LD_INT 8
5860: PPUSH
5861: LD_INT 4
5863: PPUSH
5864: LD_INT 6
5866: PPUSH
5867: CALL_OW 12
5871: PUSH
5872: LD_INT 4
5874: PPUSH
5875: LD_INT 7
5877: PPUSH
5878: CALL_OW 12
5882: PUSH
5883: LD_INT 5
5885: PPUSH
5886: LD_INT 7
5888: PPUSH
5889: CALL_OW 12
5893: PUSH
5894: EMPTY
5895: LIST
5896: LIST
5897: LIST
5898: PUSH
5899: LD_OWVAR 67
5903: ARRAY
5904: PPUSH
5905: CALL_OW 380
// a = a ^ CreateHuman ;
5909: LD_ADDR_VAR 0 6
5913: PUSH
5914: LD_VAR 0 6
5918: PUSH
5919: CALL_OW 44
5923: ADD
5924: ST_TO_ADDR
// end ;
5925: GO 5852
5927: POP
5928: POP
// vc_chassis = ar_half_tracked ;
5929: LD_ADDR_OWVAR 37
5933: PUSH
5934: LD_INT 14
5936: ST_TO_ADDR
// vc_engine = engine_siberite ;
5937: LD_ADDR_OWVAR 39
5941: PUSH
5942: LD_INT 3
5944: ST_TO_ADDR
// vc_control = control_apeman ;
5945: LD_ADDR_OWVAR 38
5949: PUSH
5950: LD_INT 5
5952: ST_TO_ADDR
// for i = 1 to vehs do
5953: LD_ADDR_VAR 0 7
5957: PUSH
5958: DOUBLE
5959: LD_INT 1
5961: DEC
5962: ST_TO_ADDR
5963: LD_VAR 0 4
5967: PUSH
5968: FOR_TO
5969: IFFALSE 6018
// begin vc_weapon = [ ar_gun , ar_flame_thrower , ar_gun , ar_flame_thrower ] [ i ] ;
5971: LD_ADDR_OWVAR 40
5975: PUSH
5976: LD_INT 27
5978: PUSH
5979: LD_INT 26
5981: PUSH
5982: LD_INT 27
5984: PUSH
5985: LD_INT 26
5987: PUSH
5988: EMPTY
5989: LIST
5990: LIST
5991: LIST
5992: LIST
5993: PUSH
5994: LD_VAR 0 7
5998: ARRAY
5999: ST_TO_ADDR
// a = a ^ CreateVehicle ;
6000: LD_ADDR_VAR 0 6
6004: PUSH
6005: LD_VAR 0 6
6009: PUSH
6010: CALL_OW 45
6014: ADD
6015: ST_TO_ADDR
// end ;
6016: GO 5968
6018: POP
6019: POP
// for i in a do
6020: LD_ADDR_VAR 0 7
6024: PUSH
6025: LD_VAR 0 6
6029: PUSH
6030: FOR_IN
6031: IFFALSE 6052
// PlaceUnitArea ( i , area , false ) ;
6033: LD_VAR 0 7
6037: PPUSH
6038: LD_VAR 0 1
6042: PPUSH
6043: LD_INT 0
6045: PPUSH
6046: CALL_OW 49
6050: GO 6030
6052: POP
6053: POP
// go = McMove ( 1 , a , path , [ mc_move_agressive ] ) ;
6054: LD_ADDR_VAR 0 8
6058: PUSH
6059: LD_INT 1
6061: PPUSH
6062: LD_VAR 0 6
6066: PPUSH
6067: LD_VAR 0 2
6071: PPUSH
6072: LD_INT 6
6074: PUSH
6075: EMPTY
6076: LIST
6077: PPUSH
6078: CALL_OW 398
6082: ST_TO_ADDR
// end ;
6083: LD_VAR 0 5
6087: RET
// export function PrepareKamikaze ( area , path , number ) ; var a , i , ape ; begin
6088: LD_INT 0
6090: PPUSH
6091: PPUSH
6092: PPUSH
6093: PPUSH
// uc_side = 2 ;
6094: LD_ADDR_OWVAR 20
6098: PUSH
6099: LD_INT 2
6101: ST_TO_ADDR
// uc_nation = 2 ;
6102: LD_ADDR_OWVAR 21
6106: PUSH
6107: LD_INT 2
6109: ST_TO_ADDR
// for i = 1 to number do
6110: LD_ADDR_VAR 0 6
6114: PUSH
6115: DOUBLE
6116: LD_INT 1
6118: DEC
6119: ST_TO_ADDR
6120: LD_VAR 0 3
6124: PUSH
6125: FOR_TO
6126: IFFALSE 6176
// begin PrepareHuman ( false , class_apeman_kamikaze , [ 0 , 3 , 4 ] [ difficulty ] ) ;
6128: LD_INT 0
6130: PPUSH
6131: LD_INT 17
6133: PPUSH
6134: LD_INT 0
6136: PUSH
6137: LD_INT 3
6139: PUSH
6140: LD_INT 4
6142: PUSH
6143: EMPTY
6144: LIST
6145: LIST
6146: LIST
6147: PUSH
6148: LD_OWVAR 67
6152: ARRAY
6153: PPUSH
6154: CALL_OW 380
// a = a ^ CreateHuman ;
6158: LD_ADDR_VAR 0 5
6162: PUSH
6163: LD_VAR 0 5
6167: PUSH
6168: CALL_OW 44
6172: ADD
6173: ST_TO_ADDR
// end ;
6174: GO 6125
6176: POP
6177: POP
// for i in a do
6178: LD_ADDR_VAR 0 6
6182: PUSH
6183: LD_VAR 0 5
6187: PUSH
6188: FOR_IN
6189: IFFALSE 6277
// begin PlaceUnitArea ( i , area , false ) ;
6191: LD_VAR 0 6
6195: PPUSH
6196: LD_VAR 0 1
6200: PPUSH
6201: LD_INT 0
6203: PPUSH
6204: CALL_OW 49
// if not ExistMc ( ape ) then
6208: LD_VAR 0 7
6212: PPUSH
6213: CALL_OW 386
6217: NOT
6218: IFFALSE 6254
// ape = McMove ( 1 , a , path , [ [ mc_move_agressive ] ] ) else
6220: LD_ADDR_VAR 0 7
6224: PUSH
6225: LD_INT 1
6227: PPUSH
6228: LD_VAR 0 5
6232: PPUSH
6233: LD_VAR 0 2
6237: PPUSH
6238: LD_INT 6
6240: PUSH
6241: EMPTY
6242: LIST
6243: PUSH
6244: EMPTY
6245: LIST
6246: PPUSH
6247: CALL_OW 398
6251: ST_TO_ADDR
6252: GO 6268
// AddMcUnits ( ape , i ) ;
6254: LD_VAR 0 7
6258: PPUSH
6259: LD_VAR 0 6
6263: PPUSH
6264: CALL_OW 390
// Wait ( 0 0$15 ) ;
6268: LD_INT 525
6270: PPUSH
6271: CALL_OW 67
// end ;
6275: GO 6188
6277: POP
6278: POP
// end ;
6279: LD_VAR 0 4
6283: RET
// export function ApeTarget ( u ) ; begin
6284: LD_INT 0
6286: PPUSH
// result = NearestUnitToUnit ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] , [ f_distxy , GetX ( u ) , GetY ( u ) , 15 ] ] ) , u ) ;
6287: LD_ADDR_VAR 0 2
6291: PUSH
6292: LD_INT 22
6294: PUSH
6295: LD_INT 1
6297: PUSH
6298: EMPTY
6299: LIST
6300: LIST
6301: PUSH
6302: LD_INT 2
6304: PUSH
6305: LD_INT 21
6307: PUSH
6308: LD_INT 1
6310: PUSH
6311: EMPTY
6312: LIST
6313: LIST
6314: PUSH
6315: LD_INT 21
6317: PUSH
6318: LD_INT 2
6320: PUSH
6321: EMPTY
6322: LIST
6323: LIST
6324: PUSH
6325: EMPTY
6326: LIST
6327: LIST
6328: LIST
6329: PUSH
6330: LD_INT 92
6332: PUSH
6333: LD_VAR 0 1
6337: PPUSH
6338: CALL_OW 250
6342: PUSH
6343: LD_VAR 0 1
6347: PPUSH
6348: CALL_OW 251
6352: PUSH
6353: LD_INT 15
6355: PUSH
6356: EMPTY
6357: LIST
6358: LIST
6359: LIST
6360: LIST
6361: PUSH
6362: EMPTY
6363: LIST
6364: LIST
6365: LIST
6366: PPUSH
6367: CALL_OW 69
6371: PPUSH
6372: LD_VAR 0 1
6376: PPUSH
6377: CALL_OW 74
6381: ST_TO_ADDR
// end ;
6382: LD_VAR 0 2
6386: RET
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_apeman_kamikaze ] ] ) do var i ;
6387: LD_INT 22
6389: PUSH
6390: LD_INT 2
6392: PUSH
6393: EMPTY
6394: LIST
6395: LIST
6396: PUSH
6397: LD_INT 25
6399: PUSH
6400: LD_INT 17
6402: PUSH
6403: EMPTY
6404: LIST
6405: LIST
6406: PUSH
6407: EMPTY
6408: LIST
6409: LIST
6410: PPUSH
6411: CALL_OW 69
6415: IFFALSE 6543
6417: GO 6419
6419: DISABLE
6420: LD_INT 0
6422: PPUSH
// begin enable ;
6423: ENABLE
// for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_apeman_kamikaze ] ] ) do
6424: LD_ADDR_VAR 0 1
6428: PUSH
6429: LD_INT 22
6431: PUSH
6432: LD_INT 2
6434: PUSH
6435: EMPTY
6436: LIST
6437: LIST
6438: PUSH
6439: LD_INT 25
6441: PUSH
6442: LD_INT 17
6444: PUSH
6445: EMPTY
6446: LIST
6447: LIST
6448: PUSH
6449: EMPTY
6450: LIST
6451: LIST
6452: PPUSH
6453: CALL_OW 69
6457: PUSH
6458: FOR_IN
6459: IFFALSE 6541
// if ApeTarget ( i ) then
6461: LD_VAR 0 1
6465: PPUSH
6466: CALL 6284 0 1
6470: IFFALSE 6493
// ComAttackUnit ( i , ApeTarget ( i ) ) else
6472: LD_VAR 0 1
6476: PPUSH
6477: LD_VAR 0 1
6481: PPUSH
6482: CALL 6284 0 1
6486: PPUSH
6487: CALL_OW 115
6491: GO 6539
// if not HasTask ( i ) then
6493: LD_VAR 0 1
6497: PPUSH
6498: CALL_OW 314
6502: NOT
6503: IFFALSE 6539
// ComAttackUnit ( i , NearestUnitToUnit ( FilterAllUnits ( [ f_side , 1 ] ) , i ) ) ;
6505: LD_VAR 0 1
6509: PPUSH
6510: LD_INT 22
6512: PUSH
6513: LD_INT 1
6515: PUSH
6516: EMPTY
6517: LIST
6518: LIST
6519: PPUSH
6520: CALL_OW 69
6524: PPUSH
6525: LD_VAR 0 1
6529: PPUSH
6530: CALL_OW 74
6534: PPUSH
6535: CALL_OW 115
6539: GO 6458
6541: POP
6542: POP
// end ;
6543: PPOPN 1
6545: END
// every 0 0$1 do var losses ;
6546: GO 6548
6548: DISABLE
6549: LD_INT 0
6551: PPUSH
// begin if TestVariable ( ArabLosses ) then
6552: LD_STRING ArabLosses
6554: PPUSH
6555: CALL_OW 27
6559: IFFALSE 6571
// losses = 1 else
6561: LD_ADDR_VAR 0 1
6565: PUSH
6566: LD_INT 1
6568: ST_TO_ADDR
6569: GO 6579
// losses = 2 ;
6571: LD_ADDR_VAR 0 1
6575: PUSH
6576: LD_INT 2
6578: ST_TO_ADDR
// enable ;
6579: ENABLE
// case ArabTimer of 5 5$0 :
6580: LD_EXP 29
6584: PUSH
6585: LD_INT 10500
6587: DOUBLE
6588: EQUAL
6589: IFTRUE 6593
6591: GO 6723
6593: POP
// begin PrepareAttack ( NorthArabEnter , [ [ 70 , 20 ] , [ 97 , 50 ] , [ 115 , 71 ] ] , 2 , [ 2 , 3 ] [ losses ] ) ;
6594: LD_INT 11
6596: PPUSH
6597: LD_INT 70
6599: PUSH
6600: LD_INT 20
6602: PUSH
6603: EMPTY
6604: LIST
6605: LIST
6606: PUSH
6607: LD_INT 97
6609: PUSH
6610: LD_INT 50
6612: PUSH
6613: EMPTY
6614: LIST
6615: LIST
6616: PUSH
6617: LD_INT 115
6619: PUSH
6620: LD_INT 71
6622: PUSH
6623: EMPTY
6624: LIST
6625: LIST
6626: PUSH
6627: EMPTY
6628: LIST
6629: LIST
6630: LIST
6631: PPUSH
6632: LD_INT 2
6634: PPUSH
6635: LD_INT 2
6637: PUSH
6638: LD_INT 3
6640: PUSH
6641: EMPTY
6642: LIST
6643: LIST
6644: PUSH
6645: LD_VAR 0 1
6649: ARRAY
6650: PPUSH
6651: CALL 5811 0 4
// if difficulty > 1 then
6655: LD_OWVAR 67
6659: PUSH
6660: LD_INT 1
6662: GREATER
6663: IFFALSE 6721
// PrepareKamikaze ( KamikazeEnter , [ [ 101 , 17 ] , [ 118 , 43 ] , [ 124 , 58 ] , [ 124 , 68 ] ] , 2 ) ;
6665: LD_INT 12
6667: PPUSH
6668: LD_INT 101
6670: PUSH
6671: LD_INT 17
6673: PUSH
6674: EMPTY
6675: LIST
6676: LIST
6677: PUSH
6678: LD_INT 118
6680: PUSH
6681: LD_INT 43
6683: PUSH
6684: EMPTY
6685: LIST
6686: LIST
6687: PUSH
6688: LD_INT 124
6690: PUSH
6691: LD_INT 58
6693: PUSH
6694: EMPTY
6695: LIST
6696: LIST
6697: PUSH
6698: LD_INT 124
6700: PUSH
6701: LD_INT 68
6703: PUSH
6704: EMPTY
6705: LIST
6706: LIST
6707: PUSH
6708: EMPTY
6709: LIST
6710: LIST
6711: LIST
6712: LIST
6713: PPUSH
6714: LD_INT 2
6716: PPUSH
6717: CALL 6088 0 3
// end ; 12 12$0 :
6721: GO 6932
6723: LD_INT 25200
6725: DOUBLE
6726: EQUAL
6727: IFTRUE 6731
6729: GO 6854
6731: POP
// begin PrepareAttack ( NorthArabEnter , [ [ 70 , 20 ] , [ 97 , 50 ] , [ 115 , 71 ] ] , 0 , 3 ) ;
6732: LD_INT 11
6734: PPUSH
6735: LD_INT 70
6737: PUSH
6738: LD_INT 20
6740: PUSH
6741: EMPTY
6742: LIST
6743: LIST
6744: PUSH
6745: LD_INT 97
6747: PUSH
6748: LD_INT 50
6750: PUSH
6751: EMPTY
6752: LIST
6753: LIST
6754: PUSH
6755: LD_INT 115
6757: PUSH
6758: LD_INT 71
6760: PUSH
6761: EMPTY
6762: LIST
6763: LIST
6764: PUSH
6765: EMPTY
6766: LIST
6767: LIST
6768: LIST
6769: PPUSH
6770: LD_INT 0
6772: PPUSH
6773: LD_INT 3
6775: PPUSH
6776: CALL 5811 0 4
// PrepareAttack ( SouthArabEnter , [ [ 142 , 129 ] , [ 135 , 105 ] , [ 121 , 78 ] , [ 114 , 62 ] ] , 2 , [ 2 , 4 ] [ losses ] ) ;
6780: LD_INT 13
6782: PPUSH
6783: LD_INT 142
6785: PUSH
6786: LD_INT 129
6788: PUSH
6789: EMPTY
6790: LIST
6791: LIST
6792: PUSH
6793: LD_INT 135
6795: PUSH
6796: LD_INT 105
6798: PUSH
6799: EMPTY
6800: LIST
6801: LIST
6802: PUSH
6803: LD_INT 121
6805: PUSH
6806: LD_INT 78
6808: PUSH
6809: EMPTY
6810: LIST
6811: LIST
6812: PUSH
6813: LD_INT 114
6815: PUSH
6816: LD_INT 62
6818: PUSH
6819: EMPTY
6820: LIST
6821: LIST
6822: PUSH
6823: EMPTY
6824: LIST
6825: LIST
6826: LIST
6827: LIST
6828: PPUSH
6829: LD_INT 2
6831: PPUSH
6832: LD_INT 2
6834: PUSH
6835: LD_INT 4
6837: PUSH
6838: EMPTY
6839: LIST
6840: LIST
6841: PUSH
6842: LD_VAR 0 1
6846: ARRAY
6847: PPUSH
6848: CALL 5811 0 4
// end ; 12 12$30 :
6852: GO 6932
6854: LD_INT 26250
6856: DOUBLE
6857: EQUAL
6858: IFTRUE 6862
6860: GO 6931
6862: POP
// if difficulty > 1 then
6863: LD_OWVAR 67
6867: PUSH
6868: LD_INT 1
6870: GREATER
6871: IFFALSE 6929
// PrepareKamikaze ( KamikazeEnter , [ [ 101 , 17 ] , [ 118 , 43 ] , [ 124 , 58 ] , [ 124 , 68 ] ] , 3 ) ; end ;
6873: LD_INT 12
6875: PPUSH
6876: LD_INT 101
6878: PUSH
6879: LD_INT 17
6881: PUSH
6882: EMPTY
6883: LIST
6884: LIST
6885: PUSH
6886: LD_INT 118
6888: PUSH
6889: LD_INT 43
6891: PUSH
6892: EMPTY
6893: LIST
6894: LIST
6895: PUSH
6896: LD_INT 124
6898: PUSH
6899: LD_INT 58
6901: PUSH
6902: EMPTY
6903: LIST
6904: LIST
6905: PUSH
6906: LD_INT 124
6908: PUSH
6909: LD_INT 68
6911: PUSH
6912: EMPTY
6913: LIST
6914: LIST
6915: PUSH
6916: EMPTY
6917: LIST
6918: LIST
6919: LIST
6920: LIST
6921: PPUSH
6922: LD_INT 3
6924: PPUSH
6925: CALL 6088 0 3
6929: GO 6932
6931: POP
// end ;
6932: PPOPN 1
6934: END
// on DestinationUnreachable ( u ) do if GetSide ( u ) <> 1 then
6935: LD_VAR 0 1
6939: PPUSH
6940: CALL_OW 255
6944: PUSH
6945: LD_INT 1
6947: NONEQUAL
6948: IFFALSE 6991
// ComAttackUnit ( u , NearestUnitToUnit ( FilterAllUnits ( [ f_enemy , GetSide ( u ) ] ) , u ) ) ; end_of_file
6950: LD_VAR 0 1
6954: PPUSH
6955: LD_INT 81
6957: PUSH
6958: LD_VAR 0 1
6962: PPUSH
6963: CALL_OW 255
6967: PUSH
6968: EMPTY
6969: LIST
6970: LIST
6971: PPUSH
6972: CALL_OW 69
6976: PPUSH
6977: LD_VAR 0 1
6981: PPUSH
6982: CALL_OW 74
6986: PPUSH
6987: CALL_OW 115
6991: PPOPN 1
6993: END
// export function GetOppositeDir ( u ) ; var tmp ; begin
6994: LD_INT 0
6996: PPUSH
6997: PPUSH
// tmp = GetDir ( u ) + 3 ;
6998: LD_ADDR_VAR 0 3
7002: PUSH
7003: LD_VAR 0 1
7007: PPUSH
7008: CALL_OW 254
7012: PUSH
7013: LD_INT 3
7015: PLUS
7016: ST_TO_ADDR
// if tmp > 5 then
7017: LD_VAR 0 3
7021: PUSH
7022: LD_INT 5
7024: GREATER
7025: IFFALSE 7041
// tmp = tmp - 6 ;
7027: LD_ADDR_VAR 0 3
7031: PUSH
7032: LD_VAR 0 3
7036: PUSH
7037: LD_INT 6
7039: MINUS
7040: ST_TO_ADDR
// result = tmp ;
7041: LD_ADDR_VAR 0 2
7045: PUSH
7046: LD_VAR 0 3
7050: ST_TO_ADDR
// end ;
7051: LD_VAR 0 2
7055: RET
// every 3 3$20 do
7056: GO 7058
7058: DISABLE
// begin enable ;
7059: ENABLE
// CreateCratesAnywhere ( Rand ( 4 , 5 ) , false ) ;
7060: LD_INT 4
7062: PPUSH
7063: LD_INT 5
7065: PPUSH
7066: CALL_OW 12
7070: PPUSH
7071: LD_INT 0
7073: PPUSH
7074: CALL_OW 57
// end ; end_of_file
7078: END
// export function PrepareBase ( side , area , skill , workshop , lab , armoury , engineers ) ; var i , j , h ; begin
7079: LD_INT 0
7081: PPUSH
7082: PPUSH
7083: PPUSH
7084: PPUSH
// InitHc ;
7085: CALL_OW 19
// for i in FilterUnitsInArea ( area , [ [ f_side , side ] , [ f_type , unit_building ] ] ) do
7089: LD_ADDR_VAR 0 9
7093: PUSH
7094: LD_VAR 0 2
7098: PPUSH
7099: LD_INT 22
7101: PUSH
7102: LD_VAR 0 1
7106: PUSH
7107: EMPTY
7108: LIST
7109: LIST
7110: PUSH
7111: LD_INT 21
7113: PUSH
7114: LD_INT 3
7116: PUSH
7117: EMPTY
7118: LIST
7119: LIST
7120: PUSH
7121: EMPTY
7122: LIST
7123: LIST
7124: PPUSH
7125: CALL_OW 70
7129: PUSH
7130: FOR_IN
7131: IFFALSE 7618
// case GetBType ( i ) of b_depot , b_warehouse :
7133: LD_VAR 0 9
7137: PPUSH
7138: CALL_OW 266
7142: PUSH
7143: LD_INT 0
7145: DOUBLE
7146: EQUAL
7147: IFTRUE 7157
7149: LD_INT 1
7151: DOUBLE
7152: EQUAL
7153: IFTRUE 7157
7155: GO 7299
7157: POP
// for j = 1 to engineers do
7158: LD_ADDR_VAR 0 10
7162: PUSH
7163: DOUBLE
7164: LD_INT 1
7166: DEC
7167: ST_TO_ADDR
7168: LD_VAR 0 7
7172: PUSH
7173: FOR_TO
7174: IFFALSE 7295
// begin PrepareEngineer ( Rand ( 1 , 2 ) , skill ) ;
7176: LD_INT 1
7178: PPUSH
7179: LD_INT 2
7181: PPUSH
7182: CALL_OW 12
7186: PPUSH
7187: LD_VAR 0 3
7191: PPUSH
7192: CALL_OW 382
// h = CreateHuman ;
7196: LD_ADDR_VAR 0 11
7200: PUSH
7201: CALL_OW 44
7205: ST_TO_ADDR
// PlaceUnitXYR ( h , ShiftX ( GetX ( i ) , GetDir ( i ) , Rand ( 4 , 10 ) ) , ShiftY ( GetY ( i ) , GetDir ( i ) , Rand ( 4 , 10 ) ) , 8 , false ) ;
7206: LD_VAR 0 11
7210: PPUSH
7211: LD_VAR 0 9
7215: PPUSH
7216: CALL_OW 250
7220: PPUSH
7221: LD_VAR 0 9
7225: PPUSH
7226: CALL_OW 254
7230: PPUSH
7231: LD_INT 4
7233: PPUSH
7234: LD_INT 10
7236: PPUSH
7237: CALL_OW 12
7241: PPUSH
7242: CALL_OW 272
7246: PPUSH
7247: LD_VAR 0 9
7251: PPUSH
7252: CALL_OW 251
7256: PPUSH
7257: LD_VAR 0 9
7261: PPUSH
7262: CALL_OW 254
7266: PPUSH
7267: LD_INT 4
7269: PPUSH
7270: LD_INT 10
7272: PPUSH
7273: CALL_OW 12
7277: PPUSH
7278: CALL_OW 273
7282: PPUSH
7283: LD_INT 8
7285: PPUSH
7286: LD_INT 0
7288: PPUSH
7289: CALL_OW 50
// end ; b_armoury , b_barracks :
7293: GO 7173
7295: POP
7296: POP
7297: GO 7616
7299: LD_INT 4
7301: DOUBLE
7302: EQUAL
7303: IFTRUE 7313
7305: LD_INT 5
7307: DOUBLE
7308: EQUAL
7309: IFTRUE 7313
7311: GO 7382
7313: POP
// for j = 1 to armoury do
7314: LD_ADDR_VAR 0 10
7318: PUSH
7319: DOUBLE
7320: LD_INT 1
7322: DEC
7323: ST_TO_ADDR
7324: LD_VAR 0 6
7328: PUSH
7329: FOR_TO
7330: IFFALSE 7378
// begin PrepareSoldier ( Rand ( 1 , 2 ) , skill ) ;
7332: LD_INT 1
7334: PPUSH
7335: LD_INT 2
7337: PPUSH
7338: CALL_OW 12
7342: PPUSH
7343: LD_VAR 0 3
7347: PPUSH
7348: CALL_OW 381
// h = CreateHuman ;
7352: LD_ADDR_VAR 0 11
7356: PUSH
7357: CALL_OW 44
7361: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7362: LD_VAR 0 11
7366: PPUSH
7367: LD_VAR 0 9
7371: PPUSH
7372: CALL_OW 52
// end ; b_lab_basic , b_lab_half , b_lab_full :
7376: GO 7329
7378: POP
7379: POP
7380: GO 7616
7382: LD_INT 9
7384: DOUBLE
7385: EQUAL
7386: IFTRUE 7402
7388: LD_INT 7
7390: DOUBLE
7391: EQUAL
7392: IFTRUE 7402
7394: LD_INT 8
7396: DOUBLE
7397: EQUAL
7398: IFTRUE 7402
7400: GO 7471
7402: POP
// for j = 1 to lab do
7403: LD_ADDR_VAR 0 10
7407: PUSH
7408: DOUBLE
7409: LD_INT 1
7411: DEC
7412: ST_TO_ADDR
7413: LD_VAR 0 5
7417: PUSH
7418: FOR_TO
7419: IFFALSE 7467
// begin PrepareScientist ( Rand ( 1 , 2 ) , skill ) ;
7421: LD_INT 1
7423: PPUSH
7424: LD_INT 2
7426: PPUSH
7427: CALL_OW 12
7431: PPUSH
7432: LD_VAR 0 3
7436: PPUSH
7437: CALL_OW 384
// h = CreateHuman ;
7441: LD_ADDR_VAR 0 11
7445: PUSH
7446: CALL_OW 44
7450: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7451: LD_VAR 0 11
7455: PPUSH
7456: LD_VAR 0 9
7460: PPUSH
7461: CALL_OW 52
// end ; b_workshop , b_factory :
7465: GO 7418
7467: POP
7468: POP
7469: GO 7616
7471: LD_INT 2
7473: DOUBLE
7474: EQUAL
7475: IFTRUE 7485
7477: LD_INT 3
7479: DOUBLE
7480: EQUAL
7481: IFTRUE 7485
7483: GO 7554
7485: POP
// for j = 1 to workshop do
7486: LD_ADDR_VAR 0 10
7490: PUSH
7491: DOUBLE
7492: LD_INT 1
7494: DEC
7495: ST_TO_ADDR
7496: LD_VAR 0 4
7500: PUSH
7501: FOR_TO
7502: IFFALSE 7550
// begin PrepareMechanic ( Rand ( 1 , 2 ) , skill ) ;
7504: LD_INT 1
7506: PPUSH
7507: LD_INT 2
7509: PPUSH
7510: CALL_OW 12
7514: PPUSH
7515: LD_VAR 0 3
7519: PPUSH
7520: CALL_OW 383
// h = CreateHuman ;
7524: LD_ADDR_VAR 0 11
7528: PUSH
7529: CALL_OW 44
7533: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7534: LD_VAR 0 11
7538: PPUSH
7539: LD_VAR 0 9
7543: PPUSH
7544: CALL_OW 52
// end ; b_breastwork , b_bunker :
7548: GO 7501
7550: POP
7551: POP
7552: GO 7616
7554: LD_INT 31
7556: DOUBLE
7557: EQUAL
7558: IFTRUE 7568
7560: LD_INT 32
7562: DOUBLE
7563: EQUAL
7564: IFTRUE 7568
7566: GO 7615
7568: POP
// begin PrepareSoldier ( Rand ( 1 , 2 ) , skill ) ;
7569: LD_INT 1
7571: PPUSH
7572: LD_INT 2
7574: PPUSH
7575: CALL_OW 12
7579: PPUSH
7580: LD_VAR 0 3
7584: PPUSH
7585: CALL_OW 381
// h = CreateHuman ;
7589: LD_ADDR_VAR 0 11
7593: PUSH
7594: CALL_OW 44
7598: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7599: LD_VAR 0 11
7603: PPUSH
7604: LD_VAR 0 9
7608: PPUSH
7609: CALL_OW 52
// end ; end ;
7613: GO 7616
7615: POP
7616: GO 7130
7618: POP
7619: POP
// end ;
7620: LD_VAR 0 8
7624: RET
// export function WhoDiscovered ( side , target ) ; var i ; begin
7625: LD_INT 0
7627: PPUSH
7628: PPUSH
// i = NearestUnitToUnit ( FilterAllUnits ( [ [ f_side , side ] , [ f_not , [ f_nation , nation_nature ] ] ] ) , target [ 1 ] ) ;
7629: LD_ADDR_VAR 0 4
7633: PUSH
7634: LD_INT 22
7636: PUSH
7637: LD_VAR 0 1
7641: PUSH
7642: EMPTY
7643: LIST
7644: LIST
7645: PUSH
7646: LD_INT 3
7648: PUSH
7649: LD_INT 23
7651: PUSH
7652: LD_INT 0
7654: PUSH
7655: EMPTY
7656: LIST
7657: LIST
7658: PUSH
7659: EMPTY
7660: LIST
7661: LIST
7662: PUSH
7663: EMPTY
7664: LIST
7665: LIST
7666: PPUSH
7667: CALL_OW 69
7671: PPUSH
7672: LD_VAR 0 2
7676: PUSH
7677: LD_INT 1
7679: ARRAY
7680: PPUSH
7681: CALL_OW 74
7685: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
7686: LD_VAR 0 4
7690: PPUSH
7691: CALL_OW 247
7695: PUSH
7696: LD_INT 2
7698: EQUAL
7699: IFFALSE 7763
// if GetControl ( i ) = control_manual then
7701: LD_VAR 0 4
7705: PPUSH
7706: CALL_OW 263
7710: PUSH
7711: LD_INT 1
7713: EQUAL
7714: IFFALSE 7733
// i = IsDrivenBy ( i ) else
7716: LD_ADDR_VAR 0 4
7720: PUSH
7721: LD_VAR 0 4
7725: PPUSH
7726: CALL_OW 311
7730: ST_TO_ADDR
7731: GO 7763
// if GetControl ( i ) = control_remote then
7733: LD_VAR 0 4
7737: PPUSH
7738: CALL_OW 263
7742: PUSH
7743: LD_INT 2
7745: EQUAL
7746: IFFALSE 7763
// i = IsControledBy ( i ) ;
7748: LD_ADDR_VAR 0 4
7752: PUSH
7753: LD_VAR 0 4
7757: PPUSH
7758: CALL_OW 312
7762: ST_TO_ADDR
// if GetType ( i ) = unit_building then
7763: LD_VAR 0 4
7767: PPUSH
7768: CALL_OW 247
7772: PUSH
7773: LD_INT 3
7775: EQUAL
7776: IFFALSE 7819
// i = UnitFilter ( UnitsInside ( i ) , [ f_not , [ f_nation , nation_nature ] ] ) [ 1 ] ;
7778: LD_ADDR_VAR 0 4
7782: PUSH
7783: LD_VAR 0 4
7787: PPUSH
7788: CALL_OW 313
7792: PPUSH
7793: LD_INT 3
7795: PUSH
7796: LD_INT 23
7798: PUSH
7799: LD_INT 0
7801: PUSH
7802: EMPTY
7803: LIST
7804: LIST
7805: PUSH
7806: EMPTY
7807: LIST
7808: LIST
7809: PPUSH
7810: CALL_OW 72
7814: PUSH
7815: LD_INT 1
7817: ARRAY
7818: ST_TO_ADDR
// if not GetType ( i ) = unit_human then
7819: LD_VAR 0 4
7823: PPUSH
7824: CALL_OW 247
7828: PUSH
7829: LD_INT 1
7831: EQUAL
7832: NOT
7833: IFFALSE 7893
// i = FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , [ f_not , [ f_nation , nation_nature ] ] ] ) [ 1 ] ;
7835: LD_ADDR_VAR 0 4
7839: PUSH
7840: LD_INT 22
7842: PUSH
7843: LD_VAR 0 1
7847: PUSH
7848: EMPTY
7849: LIST
7850: LIST
7851: PUSH
7852: LD_INT 21
7854: PUSH
7855: LD_INT 1
7857: PUSH
7858: EMPTY
7859: LIST
7860: LIST
7861: PUSH
7862: LD_INT 3
7864: PUSH
7865: LD_INT 23
7867: PUSH
7868: LD_INT 0
7870: PUSH
7871: EMPTY
7872: LIST
7873: LIST
7874: PUSH
7875: EMPTY
7876: LIST
7877: LIST
7878: PUSH
7879: EMPTY
7880: LIST
7881: LIST
7882: LIST
7883: PPUSH
7884: CALL_OW 69
7888: PUSH
7889: LD_INT 1
7891: ARRAY
7892: ST_TO_ADDR
// result = i ;
7893: LD_ADDR_VAR 0 3
7897: PUSH
7898: LD_VAR 0 4
7902: ST_TO_ADDR
// end ;
7903: LD_VAR 0 3
7907: RET
