// export Antoine , Gom , Mahmoud ; export TeamGom ; export function PrepareOurs ; var i , v ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
// uc_side = 2 ;
   5: LD_ADDR_OWVAR 20
   9: PUSH
  10: LD_INT 2
  12: ST_TO_ADDR
// uc_nation = 2 ;
  13: LD_ADDR_OWVAR 21
  17: PUSH
  18: LD_INT 2
  20: ST_TO_ADDR
// Gom = LoadCharacter ( Gom , 4 , 0 ) ;
  21: LD_ADDR_EXP 2
  25: PUSH
  26: LD_STRING Gom
  28: PPUSH
  29: LD_INT 4
  31: PPUSH
  32: LD_INT 0
  34: PPUSH
  35: CALL_OW 527
  39: ST_TO_ADDR
// PlaceUnitXY ( Gom , 79 , 18 , false ) ;
  40: LD_EXP 2
  44: PPUSH
  45: LD_INT 79
  47: PPUSH
  48: LD_INT 18
  50: PPUSH
  51: LD_INT 0
  53: PPUSH
  54: CALL_OW 48
// Mahmoud = NewCharacter ( Mahmoud ) ;
  58: LD_ADDR_EXP 3
  62: PUSH
  63: LD_STRING Mahmoud
  65: PPUSH
  66: CALL_OW 25
  70: ST_TO_ADDR
// SetClass ( Mahmoud , class_desert_warior ) ;
  71: LD_EXP 3
  75: PPUSH
  76: LD_INT 11
  78: PPUSH
  79: CALL_OW 336
// InitHc ;
  83: CALL_OW 19
// for i = 1 to 5 do
  87: LD_ADDR_VAR 0 2
  91: PUSH
  92: DOUBLE
  93: LD_INT 1
  95: DEC
  96: ST_TO_ADDR
  97: LD_INT 5
  99: PUSH
 100: FOR_TO
 101: IFFALSE 250
// begin case i of 1 , 2 :
 103: LD_VAR 0 2
 107: PUSH
 108: LD_INT 1
 110: DOUBLE
 111: EQUAL
 112: IFTRUE 122
 114: LD_INT 2
 116: DOUBLE
 117: EQUAL
 118: IFTRUE 122
 120: GO 155
 122: POP
// PrepareHuman ( false , class_scientistic , [ 5 , 4 , 3 ] [ difficulty ] ) ; 3 :
 123: LD_INT 0
 125: PPUSH
 126: LD_INT 4
 128: PPUSH
 129: LD_INT 5
 131: PUSH
 132: LD_INT 4
 134: PUSH
 135: LD_INT 3
 137: PUSH
 138: EMPTY
 139: LIST
 140: LIST
 141: LIST
 142: PUSH
 143: LD_OWVAR 67
 147: ARRAY
 148: PPUSH
 149: CALL_OW 380
 153: GO 227
 155: LD_INT 3
 157: DOUBLE
 158: EQUAL
 159: IFTRUE 163
 161: GO 196
 163: POP
// PrepareHuman ( false , class_engineer , [ 5 , 4 , 3 ] [ difficulty ] ) ; 4 , 5 :
 164: LD_INT 0
 166: PPUSH
 167: LD_INT 2
 169: PPUSH
 170: LD_INT 5
 172: PUSH
 173: LD_INT 4
 175: PUSH
 176: LD_INT 3
 178: PUSH
 179: EMPTY
 180: LIST
 181: LIST
 182: LIST
 183: PUSH
 184: LD_OWVAR 67
 188: ARRAY
 189: PPUSH
 190: CALL_OW 380
 194: GO 227
 196: LD_INT 4
 198: DOUBLE
 199: EQUAL
 200: IFTRUE 210
 202: LD_INT 5
 204: DOUBLE
 205: EQUAL
 206: IFTRUE 210
 208: GO 226
 210: POP
// PrepareHuman ( false , class_apeman_soldier , 2 ) ; end ;
 211: LD_INT 0
 213: PPUSH
 214: LD_INT 15
 216: PPUSH
 217: LD_INT 2
 219: PPUSH
 220: CALL_OW 380
 224: GO 227
 226: POP
// PlaceUnitXYR ( CreateHuman , 79 , 18 , 2 , false ) ;
 227: CALL_OW 44
 231: PPUSH
 232: LD_INT 79
 234: PPUSH
 235: LD_INT 18
 237: PPUSH
 238: LD_INT 2
 240: PPUSH
 241: LD_INT 0
 243: PPUSH
 244: CALL_OW 50
// end ;
 248: GO 100
 250: POP
 251: POP
// TeamGom = FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] , [ f_nation , nation_arabian ] ] ) diff [ Antoine , Gom ] ;
 252: LD_ADDR_EXP 4
 256: PUSH
 257: LD_INT 22
 259: PUSH
 260: LD_INT 2
 262: PUSH
 263: EMPTY
 264: LIST
 265: LIST
 266: PUSH
 267: LD_INT 21
 269: PUSH
 270: LD_INT 1
 272: PUSH
 273: EMPTY
 274: LIST
 275: LIST
 276: PUSH
 277: LD_INT 23
 279: PUSH
 280: LD_INT 2
 282: PUSH
 283: EMPTY
 284: LIST
 285: LIST
 286: PUSH
 287: EMPTY
 288: LIST
 289: LIST
 290: LIST
 291: PPUSH
 292: CALL_OW 69
 296: PUSH
 297: LD_EXP 1
 301: PUSH
 302: LD_EXP 2
 306: PUSH
 307: EMPTY
 308: LIST
 309: LIST
 310: DIFF
 311: ST_TO_ADDR
// if difficulty = 3 then
 312: LD_OWVAR 67
 316: PUSH
 317: LD_INT 3
 319: EQUAL
 320: IFFALSE 350
// RemoveUnit ( UnitFilter ( TeamGom , [ f_class , class_scientistic ] ) [ 2 ] ) ;
 322: LD_EXP 4
 326: PPUSH
 327: LD_INT 25
 329: PUSH
 330: LD_INT 4
 332: PUSH
 333: EMPTY
 334: LIST
 335: LIST
 336: PPUSH
 337: CALL_OW 72
 341: PUSH
 342: LD_INT 2
 344: ARRAY
 345: PPUSH
 346: CALL_OW 64
// InitVc ;
 350: CALL_OW 20
// vc_weapon = ar_cargo_bay ;
 354: LD_ADDR_OWVAR 40
 358: PUSH
 359: LD_INT 32
 361: ST_TO_ADDR
// vc_control = control_manual ;
 362: LD_ADDR_OWVAR 38
 366: PUSH
 367: LD_INT 1
 369: ST_TO_ADDR
// vc_engine = engine_solar ;
 370: LD_ADDR_OWVAR 39
 374: PUSH
 375: LD_INT 2
 377: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
 378: LD_ADDR_OWVAR 37
 382: PUSH
 383: LD_INT 14
 385: ST_TO_ADDR
// v = CreateVehicle ;
 386: LD_ADDR_VAR 0 3
 390: PUSH
 391: CALL_OW 45
 395: ST_TO_ADDR
// SetDir ( v , 3 ) ;
 396: LD_VAR 0 3
 400: PPUSH
 401: LD_INT 3
 403: PPUSH
 404: CALL_OW 233
// PlaceUnitXY ( v , 78 , 3 , false ) ;
 408: LD_VAR 0 3
 412: PPUSH
 413: LD_INT 78
 415: PPUSH
 416: LD_INT 3
 418: PPUSH
 419: LD_INT 0
 421: PPUSH
 422: CALL_OW 48
// SetCargo ( v , mat_cans , [ 100 , 80 , 60 ] [ difficulty ] ) ;
 426: LD_VAR 0 3
 430: PPUSH
 431: LD_INT 1
 433: PPUSH
 434: LD_INT 100
 436: PUSH
 437: LD_INT 80
 439: PUSH
 440: LD_INT 60
 442: PUSH
 443: EMPTY
 444: LIST
 445: LIST
 446: LIST
 447: PUSH
 448: LD_OWVAR 67
 452: ARRAY
 453: PPUSH
 454: CALL_OW 290
// Antoine = LoadCharacter ( Antoine , 1 , 0 ) ;
 458: LD_ADDR_EXP 1
 462: PUSH
 463: LD_STRING Antoine
 465: PPUSH
 466: LD_INT 1
 468: PPUSH
 469: LD_INT 0
 471: PPUSH
 472: CALL_OW 527
 476: ST_TO_ADDR
// PlaceHumanInUnit ( Antoine , v ) ;
 477: LD_EXP 1
 481: PPUSH
 482: LD_VAR 0 3
 486: PPUSH
 487: CALL_OW 52
// ComMoveXY ( v , 79 , 13 ) ;
 491: LD_VAR 0 3
 495: PPUSH
 496: LD_INT 79
 498: PPUSH
 499: LD_INT 13
 501: PPUSH
 502: CALL_OW 111
// end ;
 506: LD_VAR 0 1
 510: RET
// starting begin InGameOn ;
 511: CALL_OW 8
// Query ( Q1 ) ;
 515: LD_STRING Q1
 517: PPUSH
 518: CALL_OW 97
// Query ( Q2 ) ;
 522: LD_STRING Q2
 524: PPUSH
 525: CALL_OW 97
// Wait ( 0 0$1 ) ;
 529: LD_INT 35
 531: PPUSH
 532: CALL_OW 67
// PrepareOurs ;
 536: CALL 0 0 0
// PrepareDelta ;
 540: CALL 1945 0 0
// PrepareOutpost ;
 544: CALL 3749 0 0
// CenterNowOnXY ( 78 , 4 ) ;
 548: LD_INT 78
 550: PPUSH
 551: LD_INT 4
 553: PPUSH
 554: CALL_OW 86
// Wait ( 0 0$4 ) ;
 558: LD_INT 140
 560: PPUSH
 561: CALL_OW 67
// ComExitVehicle ( Antoine ) ;
 565: LD_EXP 1
 569: PPUSH
 570: CALL_OW 121
// ComTurnUnit ( Gom , Antoine ) ;
 574: LD_EXP 2
 578: PPUSH
 579: LD_EXP 1
 583: PPUSH
 584: CALL_OW 119
// Wait ( 0 0$1 ) ;
 588: LD_INT 35
 590: PPUSH
 591: CALL_OW 67
// ComTurnUnit ( Antoine , Gom ) ;
 595: LD_EXP 1
 599: PPUSH
 600: LD_EXP 2
 604: PPUSH
 605: CALL_OW 119
// Wait ( 0 0$1 ) ;
 609: LD_INT 35
 611: PPUSH
 612: CALL_OW 67
// DialogueOn ;
 616: CALL_OW 6
// Say ( Gom , di-l-1 ) ;
 620: LD_EXP 2
 624: PPUSH
 625: LD_STRING di-l-1
 627: PPUSH
 628: CALL_OW 88
// Say ( Antoine , di-a-1 ) ;
 632: LD_EXP 1
 636: PPUSH
 637: LD_STRING di-a-1
 639: PPUSH
 640: CALL_OW 88
// Say ( Gom , di-l-2 ) ;
 644: LD_EXP 2
 648: PPUSH
 649: LD_STRING di-l-2
 651: PPUSH
 652: CALL_OW 88
// Say ( Gom , di-l-3 ) ;
 656: LD_EXP 2
 660: PPUSH
 661: LD_STRING di-l-3
 663: PPUSH
 664: CALL_OW 88
// Say ( Antoine , di-a-2 ) ;
 668: LD_EXP 1
 672: PPUSH
 673: LD_STRING di-a-2
 675: PPUSH
 676: CALL_OW 88
// DialogueOff ;
 680: CALL_OW 7
// InGameOff ;
 684: CALL_OW 9
// SaveForQuickRestart ;
 688: CALL_OW 22
// ChangeMissionObjectives ( OSiberite ) ;
 692: LD_STRING OSiberite
 694: PPUSH
 695: CALL_OW 337
// end ; end_of_file
 699: END
// export MortarDone , PowerDone , VehsDiscovered ; every 0 0$1 trigger GetResourceVisibility ( 18 , 19 , 2 ) or GetResourceVisibility ( 65 , 24 , 2 ) do var x , y , n ;
 700: LD_INT 18
 702: PPUSH
 703: LD_INT 19
 705: PPUSH
 706: LD_INT 2
 708: PPUSH
 709: CALL_OW 440
 713: PUSH
 714: LD_INT 65
 716: PPUSH
 717: LD_INT 24
 719: PPUSH
 720: LD_INT 2
 722: PPUSH
 723: CALL_OW 440
 727: OR
 728: IFFALSE 908
 730: GO 732
 732: DISABLE
 733: LD_INT 0
 735: PPUSH
 736: PPUSH
 737: PPUSH
// begin if GetResourceVisibility ( 18 , 19 , 2 ) then
 738: LD_INT 18
 740: PPUSH
 741: LD_INT 19
 743: PPUSH
 744: LD_INT 2
 746: PPUSH
 747: CALL_OW 440
 751: IFFALSE 771
// begin x = 18 ;
 753: LD_ADDR_VAR 0 1
 757: PUSH
 758: LD_INT 18
 760: ST_TO_ADDR
// y = 19 ;
 761: LD_ADDR_VAR 0 2
 765: PUSH
 766: LD_INT 19
 768: ST_TO_ADDR
// end else
 769: GO 787
// begin x = 65 ;
 771: LD_ADDR_VAR 0 1
 775: PUSH
 776: LD_INT 65
 778: ST_TO_ADDR
// y = 24 ;
 779: LD_ADDR_VAR 0 2
 783: PUSH
 784: LD_INT 24
 786: ST_TO_ADDR
// end ; CenterOnXY ( x , y ) ;
 787: LD_VAR 0 1
 791: PPUSH
 792: LD_VAR 0 2
 796: PPUSH
 797: CALL_OW 84
// DialogueOn ;
 801: CALL_OW 6
// n = NearestUnitToXY ( FilterAllUnits ( [ [ f_side , 2 ] , [ f_class , class_scientistic ] ] ) , x , y ) ;
 805: LD_ADDR_VAR 0 3
 809: PUSH
 810: LD_INT 22
 812: PUSH
 813: LD_INT 2
 815: PUSH
 816: EMPTY
 817: LIST
 818: LIST
 819: PUSH
 820: LD_INT 25
 822: PUSH
 823: LD_INT 4
 825: PUSH
 826: EMPTY
 827: LIST
 828: LIST
 829: PUSH
 830: EMPTY
 831: LIST
 832: LIST
 833: PPUSH
 834: CALL_OW 69
 838: PPUSH
 839: LD_VAR 0 1
 843: PPUSH
 844: LD_VAR 0 2
 848: PPUSH
 849: CALL_OW 73
 853: ST_TO_ADDR
// if n = Antoine then
 854: LD_VAR 0 3
 858: PUSH
 859: LD_EXP 1
 863: EQUAL
 864: IFFALSE 880
// Say ( Antoine , ds-a-1a ) else
 866: LD_EXP 1
 870: PPUSH
 871: LD_STRING ds-a-1a
 873: PPUSH
 874: CALL_OW 88
 878: GO 904
// begin Say ( n , ds-n-1 ) ;
 880: LD_VAR 0 3
 884: PPUSH
 885: LD_STRING ds-n-1
 887: PPUSH
 888: CALL_OW 88
// Say ( Antoine , ds-a-1 ) ;
 892: LD_EXP 1
 896: PPUSH
 897: LD_STRING ds-a-1
 899: PPUSH
 900: CALL_OW 88
// end ; DialogueOff ;
 904: CALL_OW 7
// end ;
 908: PPOPN 3
 910: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 1 ] , [ f_see , 2 ] ] ) do var u ;
 911: LD_INT 22
 913: PUSH
 914: LD_INT 1
 916: PUSH
 917: EMPTY
 918: LIST
 919: LIST
 920: PUSH
 921: LD_INT 101
 923: PUSH
 924: LD_INT 2
 926: PUSH
 927: EMPTY
 928: LIST
 929: LIST
 930: PUSH
 931: EMPTY
 932: LIST
 933: LIST
 934: PPUSH
 935: CALL_OW 69
 939: IFFALSE 1150
 941: GO 943
 943: DISABLE
 944: LD_INT 0
 946: PPUSH
// begin u = WhoDiscovered ( 2 , FilterAllUnits ( [ f_side , 1 ] ) ) ;
 947: LD_ADDR_VAR 0 1
 951: PUSH
 952: LD_INT 2
 954: PPUSH
 955: LD_INT 22
 957: PUSH
 958: LD_INT 1
 960: PUSH
 961: EMPTY
 962: LIST
 963: LIST
 964: PPUSH
 965: CALL_OW 69
 969: PPUSH
 970: CALL 7403 0 2
 974: ST_TO_ADDR
// DialogueOn ;
 975: CALL_OW 6
// CenterOnUnits ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_see , 2 ] ] ) ) ;
 979: LD_INT 22
 981: PUSH
 982: LD_INT 1
 984: PUSH
 985: EMPTY
 986: LIST
 987: LIST
 988: PUSH
 989: LD_INT 101
 991: PUSH
 992: LD_INT 2
 994: PUSH
 995: EMPTY
 996: LIST
 997: LIST
 998: PUSH
 999: EMPTY
1000: LIST
1001: LIST
1002: PPUSH
1003: CALL_OW 69
1007: PPUSH
1008: CALL_OW 85
// if u = Antoine then
1012: LD_VAR 0 1
1016: PUSH
1017: LD_EXP 1
1021: EQUAL
1022: IFFALSE 1038
// Say ( Antoine , da-a-1 ) else
1024: LD_EXP 1
1028: PPUSH
1029: LD_STRING da-a-1
1031: PPUSH
1032: CALL_OW 88
1036: GO 1050
// Say ( u , da-s-1 ) ;
1038: LD_VAR 0 1
1042: PPUSH
1043: LD_STRING da-s-1
1045: PPUSH
1046: CALL_OW 88
// Say ( Gom , da-l-1 ) ;
1050: LD_EXP 2
1054: PPUSH
1055: LD_STRING da-l-1
1057: PPUSH
1058: CALL_OW 88
// Say ( Gom , da-l-2 ) ;
1062: LD_EXP 2
1066: PPUSH
1067: LD_STRING da-l-2
1069: PPUSH
1070: CALL_OW 88
// Say ( Antoine , da-a-2 ) ;
1074: LD_EXP 1
1078: PPUSH
1079: LD_STRING da-a-2
1081: PPUSH
1082: CALL_OW 88
// DialogueOff ;
1086: CALL_OW 7
// Wait ( 0 0$1.5 ) ;
1090: LD_INT 52
1092: PPUSH
1093: CALL_OW 67
// DialogueOn ;
1097: CALL_OW 6
// Say ( Antoine , da-a-3 ) ;
1101: LD_EXP 1
1105: PPUSH
1106: LD_STRING da-a-3
1108: PPUSH
1109: CALL_OW 88
// DialogueOff ;
1113: CALL_OW 7
// ChangeMissionObjectives ( OMortar ) ;
1117: LD_STRING OMortar
1119: PPUSH
1120: CALL_OW 337
// SetTech ( tech_Mortar , 2 , state_enabled ) ;
1124: LD_INT 41
1126: PPUSH
1127: LD_INT 2
1129: PPUSH
1130: LD_INT 1
1132: PPUSH
1133: CALL_OW 322
// SetTech ( tech_BioDet , 2 , state_enabled ) ;
1137: LD_INT 8
1139: PPUSH
1140: LD_INT 2
1142: PPUSH
1143: LD_INT 1
1145: PPUSH
1146: CALL_OW 322
// end ;
1150: PPOPN 1
1152: END
// export function DMortar ( l ) ; begin
1153: LD_INT 0
1155: PPUSH
// CenterOnUnits ( l ) ;
1156: LD_VAR 0 1
1160: PPUSH
1161: CALL_OW 85
// DialogueOn ;
1165: CALL_OW 6
// if IsInUnit ( Gom ) = l then
1169: LD_EXP 2
1173: PPUSH
1174: CALL_OW 310
1178: PUSH
1179: LD_VAR 0 1
1183: EQUAL
1184: IFFALSE 1200
// Say ( Gom , dm-l-1 ) else
1186: LD_EXP 2
1190: PPUSH
1191: LD_STRING dm-l-1
1193: PPUSH
1194: CALL_OW 88
1198: GO 1212
// Say ( Gom , dm-l-1a ) ;
1200: LD_EXP 2
1204: PPUSH
1205: LD_STRING dm-l-1a
1207: PPUSH
1208: CALL_OW 88
// Say ( Antoine , dm-a-1 ) ;
1212: LD_EXP 1
1216: PPUSH
1217: LD_STRING dm-a-1
1219: PPUSH
1220: CALL_OW 88
// DialogueOff ;
1224: CALL_OW 7
// ChangeMissionObjectives ( OMortarOut ) ;
1228: LD_STRING OMortarOut
1230: PPUSH
1231: CALL_OW 337
// MortarDone = true ;
1235: LD_ADDR_EXP 5
1239: PUSH
1240: LD_INT 1
1242: ST_TO_ADDR
// end ;
1243: LD_VAR 0 2
1247: RET
// export function DVehsDiscovered ( u ) ; var s ; begin
1248: LD_INT 0
1250: PPUSH
1251: PPUSH
// s = FindMaxSkill ( TeamGom , skill_mechanical ) ;
1252: LD_ADDR_VAR 0 3
1256: PUSH
1257: LD_EXP 4
1261: PPUSH
1262: LD_INT 3
1264: PPUSH
1265: CALL_OW 433
1269: ST_TO_ADDR
// DialogueOn ;
1270: CALL_OW 6
// CenterOnUnits ( u ) ;
1274: LD_VAR 0 1
1278: PPUSH
1279: CALL_OW 85
// Say ( s , dd-s-1 ) ;
1283: LD_VAR 0 3
1287: PPUSH
1288: LD_STRING dd-s-1
1290: PPUSH
1291: CALL_OW 88
// if GetControl ( u ) = control_remote then
1295: LD_VAR 0 1
1299: PPUSH
1300: CALL_OW 263
1304: PUSH
1305: LD_INT 2
1307: EQUAL
1308: IFFALSE 1324
// Say ( Gom , dd-l-1 ) else
1310: LD_EXP 2
1314: PPUSH
1315: LD_STRING dd-l-1
1317: PPUSH
1318: CALL_OW 88
1322: GO 1336
// Say ( Gom , dd-l-1a ) ;
1324: LD_EXP 2
1328: PPUSH
1329: LD_STRING dd-l-1a
1331: PPUSH
1332: CALL_OW 88
// Say ( Antoine , dd-a-1 ) ;
1336: LD_EXP 1
1340: PPUSH
1341: LD_STRING dd-a-1
1343: PPUSH
1344: CALL_OW 88
// DialogueOff ;
1348: CALL_OW 7
// end ;
1352: LD_VAR 0 2
1356: RET
// export function DSibPower ( l ) ; begin
1357: LD_INT 0
1359: PPUSH
// CenterOnUnits ( l ) ;
1360: LD_VAR 0 1
1364: PPUSH
1365: CALL_OW 85
// DialogueOn ;
1369: CALL_OW 6
// if UnitsInside ( l ) [ 1 ] = Antoine then
1373: LD_VAR 0 1
1377: PPUSH
1378: CALL_OW 313
1382: PUSH
1383: LD_INT 1
1385: ARRAY
1386: PUSH
1387: LD_EXP 1
1391: EQUAL
1392: IFFALSE 1408
// Say ( Antoine , dp-a-1a ) else
1394: LD_EXP 1
1398: PPUSH
1399: LD_STRING dp-a-1a
1401: PPUSH
1402: CALL_OW 88
1406: GO 1441
// begin Say ( UnitsInside ( l ) [ 1 ] , dp-n-1 ) ;
1408: LD_VAR 0 1
1412: PPUSH
1413: CALL_OW 313
1417: PUSH
1418: LD_INT 1
1420: ARRAY
1421: PPUSH
1422: LD_STRING dp-n-1
1424: PPUSH
1425: CALL_OW 88
// Say ( Antoine , dp-a-1 ) ;
1429: LD_EXP 1
1433: PPUSH
1434: LD_STRING dp-a-1
1436: PPUSH
1437: CALL_OW 88
// end ; Say ( Gom , dp-n-2 ) ;
1441: LD_EXP 2
1445: PPUSH
1446: LD_STRING dp-n-2
1448: PPUSH
1449: CALL_OW 88
// Say ( Antoine , dp-a-2 ) ;
1453: LD_EXP 1
1457: PPUSH
1458: LD_STRING dp-a-2
1460: PPUSH
1461: CALL_OW 88
// DialogueOff ;
1465: CALL_OW 7
// ChangeMissionObjectives ( OPower ) ;
1469: LD_STRING OPower
1471: PPUSH
1472: CALL_OW 337
// end ;
1476: LD_VAR 0 2
1480: RET
// export function DOates ; begin
1481: LD_INT 0
1483: PPUSH
// DialogueOn ;
1484: CALL_OW 6
// SayRadio ( Oates , do-o-1 ) ;
1488: LD_EXP 24
1492: PPUSH
1493: LD_STRING do-o-1
1495: PPUSH
1496: CALL_OW 94
// SayRadio ( Mahmoud , do-m-1 ) ;
1500: LD_EXP 3
1504: PPUSH
1505: LD_STRING do-m-1
1507: PPUSH
1508: CALL_OW 94
// SayRadio ( Oates , do-o-2 ) ;
1512: LD_EXP 24
1516: PPUSH
1517: LD_STRING do-o-2
1519: PPUSH
1520: CALL_OW 94
// Say ( Antoine , do-a-1 ) ;
1524: LD_EXP 1
1528: PPUSH
1529: LD_STRING do-a-1
1531: PPUSH
1532: CALL_OW 88
// SayRadio ( Oates , do-o-3 ) ;
1536: LD_EXP 24
1540: PPUSH
1541: LD_STRING do-o-3
1543: PPUSH
1544: CALL_OW 94
// SayRadio ( Mahmoud , do-m-2 ) ;
1548: LD_EXP 3
1552: PPUSH
1553: LD_STRING do-m-2
1555: PPUSH
1556: CALL_OW 94
// Say ( Antoine , do-a-2 ) ;
1560: LD_EXP 1
1564: PPUSH
1565: LD_STRING do-a-2
1567: PPUSH
1568: CALL_OW 88
// DialogueOff ;
1572: CALL_OW 7
// ChangeMissionObjectives ( OOates ) ;
1576: LD_STRING OOates
1578: PPUSH
1579: CALL_OW 337
// end ;
1583: LD_VAR 0 1
1587: RET
// every 0 0$1 trigger FilterAllUnits ( [ [ f_distxy , 175 , 100 , 10 ] , [ f_or , [ f_weapon , us_cargo_bay ] , [ f_weapon , ar_cargo_bay ] ] ] ) do var i ;
1588: LD_INT 92
1590: PUSH
1591: LD_INT 175
1593: PUSH
1594: LD_INT 100
1596: PUSH
1597: LD_INT 10
1599: PUSH
1600: EMPTY
1601: LIST
1602: LIST
1603: LIST
1604: LIST
1605: PUSH
1606: LD_INT 2
1608: PUSH
1609: LD_INT 34
1611: PUSH
1612: LD_INT 12
1614: PUSH
1615: EMPTY
1616: LIST
1617: LIST
1618: PUSH
1619: LD_INT 34
1621: PUSH
1622: LD_INT 32
1624: PUSH
1625: EMPTY
1626: LIST
1627: LIST
1628: PUSH
1629: EMPTY
1630: LIST
1631: LIST
1632: LIST
1633: PUSH
1634: EMPTY
1635: LIST
1636: LIST
1637: PPUSH
1638: CALL_OW 69
1642: IFFALSE 1942
1644: GO 1646
1646: DISABLE
1647: LD_INT 0
1649: PPUSH
// begin enable ;
1650: ENABLE
// for i in FilterAllUnits ( [ [ f_distxy , 175 , 100 , 10 ] , [ f_or , [ f_weapon , us_cargo_bay ] , [ f_weapon , ar_cargo_bay ] ] ] ) do
1651: LD_ADDR_VAR 0 1
1655: PUSH
1656: LD_INT 92
1658: PUSH
1659: LD_INT 175
1661: PUSH
1662: LD_INT 100
1664: PUSH
1665: LD_INT 10
1667: PUSH
1668: EMPTY
1669: LIST
1670: LIST
1671: LIST
1672: LIST
1673: PUSH
1674: LD_INT 2
1676: PUSH
1677: LD_INT 34
1679: PUSH
1680: LD_INT 12
1682: PUSH
1683: EMPTY
1684: LIST
1685: LIST
1686: PUSH
1687: LD_INT 34
1689: PUSH
1690: LD_INT 32
1692: PUSH
1693: EMPTY
1694: LIST
1695: LIST
1696: PUSH
1697: EMPTY
1698: LIST
1699: LIST
1700: LIST
1701: PUSH
1702: EMPTY
1703: LIST
1704: LIST
1705: PPUSH
1706: CALL_OW 69
1710: PUSH
1711: FOR_IN
1712: IFFALSE 1940
// if GetCargo ( i , mat_siberit ) = 100 then
1714: LD_VAR 0 1
1718: PPUSH
1719: LD_INT 3
1721: PPUSH
1722: CALL_OW 289
1726: PUSH
1727: LD_INT 100
1729: EQUAL
1730: IFFALSE 1938
// begin disable ;
1732: DISABLE
// InGameOn ;
1733: CALL_OW 8
// CenterOnUnits ( i ) ;
1737: LD_VAR 0 1
1741: PPUSH
1742: CALL_OW 85
// DialogueOn ;
1746: CALL_OW 6
// Say ( Antoine , de-a-1 ) ;
1750: LD_EXP 1
1754: PPUSH
1755: LD_STRING de-a-1
1757: PPUSH
1758: CALL_OW 88
// Say ( Oates , de-o-1 ) ;
1762: LD_EXP 24
1766: PPUSH
1767: LD_STRING de-o-1
1769: PPUSH
1770: CALL_OW 88
// DialogueOff ;
1774: CALL_OW 7
// ComMoveXY ( i , 166 , 91 ) ;
1778: LD_VAR 0 1
1782: PPUSH
1783: LD_INT 166
1785: PPUSH
1786: LD_INT 91
1788: PPUSH
1789: CALL_OW 111
// repeat Wait ( 0 0$1 ) until SeeXY ( 2 , 171 , 90 ) and SeeXY ( 2 , 164 , 88 ) ;
1793: LD_INT 35
1795: PPUSH
1796: CALL_OW 67
1800: LD_INT 2
1802: PPUSH
1803: LD_INT 171
1805: PPUSH
1806: LD_INT 90
1808: PPUSH
1809: CALL_OW 293
1813: PUSH
1814: LD_INT 2
1816: PPUSH
1817: LD_INT 164
1819: PPUSH
1820: LD_INT 88
1822: PPUSH
1823: CALL_OW 293
1827: AND
1828: IFFALSE 1793
// CenterOnXY ( 168 , 90 ) ;
1830: LD_INT 168
1832: PPUSH
1833: LD_INT 90
1835: PPUSH
1836: CALL_OW 84
// ComMoveXY ( Kuronski , 168 , 91 ) ;
1840: LD_EXP 23
1844: PPUSH
1845: LD_INT 168
1847: PPUSH
1848: LD_INT 91
1850: PPUSH
1851: CALL_OW 111
// Wait ( 0 0$1 ) ;
1855: LD_INT 35
1857: PPUSH
1858: CALL_OW 67
// DialogueOn ;
1862: CALL_OW 6
// Say ( Kuronski , de-k-1 ) ;
1866: LD_EXP 23
1870: PPUSH
1871: LD_STRING de-k-1
1873: PPUSH
1874: CALL_OW 88
// Say ( Antoine , de-a-2 ) ;
1878: LD_EXP 1
1882: PPUSH
1883: LD_STRING de-a-2
1885: PPUSH
1886: CALL_OW 88
// Say ( Oates , de-o-2 ) ;
1890: LD_EXP 24
1894: PPUSH
1895: LD_STRING de-o-2
1897: PPUSH
1898: CALL_OW 88
// Say ( Antoine , de-a-3 ) ;
1902: LD_EXP 1
1906: PPUSH
1907: LD_STRING de-a-3
1909: PPUSH
1910: CALL_OW 88
// Say ( Oates , de-o-3 ) ;
1914: LD_EXP 24
1918: PPUSH
1919: LD_STRING de-o-3
1921: PPUSH
1922: CALL_OW 88
// DialogueOff ;
1926: CALL_OW 7
// InGameOff ;
1930: CALL_OW 9
// SaveAndWin ;
1934: CALL 5956 0 0
// end ;
1938: GO 1711
1940: POP
1941: POP
// end ; end_of_file
1942: PPOPN 1
1944: END
// export VehControl ; export function PrepareDelta ; var i ; begin
1945: LD_INT 0
1947: PPUSH
1948: PPUSH
// uc_side = 1 ;
1949: LD_ADDR_OWVAR 20
1953: PUSH
1954: LD_INT 1
1956: ST_TO_ADDR
// uc_nation = 1 ;
1957: LD_ADDR_OWVAR 21
1961: PUSH
1962: LD_INT 1
1964: ST_TO_ADDR
// InitHc ;
1965: CALL_OW 19
// PrepareBase ( 1 , AmericanBase , Rand ( 3 , 6 ) , 3 , 0 , 2 , 1 ) ;
1969: LD_INT 1
1971: PPUSH
1972: LD_INT 3
1974: PPUSH
1975: LD_INT 3
1977: PPUSH
1978: LD_INT 6
1980: PPUSH
1981: CALL_OW 12
1985: PPUSH
1986: LD_INT 3
1988: PPUSH
1989: LD_INT 0
1991: PPUSH
1992: LD_INT 2
1994: PPUSH
1995: LD_INT 1
1997: PPUSH
1998: CALL 6857 0 7
// for i in FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) do
2002: LD_ADDR_VAR 0 2
2006: PUSH
2007: LD_INT 22
2009: PUSH
2010: LD_INT 1
2012: PUSH
2013: EMPTY
2014: LIST
2015: LIST
2016: PUSH
2017: LD_INT 21
2019: PUSH
2020: LD_INT 2
2022: PUSH
2023: EMPTY
2024: LIST
2025: LIST
2026: PUSH
2027: EMPTY
2028: LIST
2029: LIST
2030: PPUSH
2031: CALL_OW 69
2035: PUSH
2036: FOR_IN
2037: IFFALSE 2114
// begin PrepareMechanic ( Rand ( 1 , 2 ) , [ Rand ( 4 , 5 ) , Rand ( 4 , 6 ) , Rand ( 5 , 6 ) ] [ difficulty ] ) ;
2039: LD_INT 1
2041: PPUSH
2042: LD_INT 2
2044: PPUSH
2045: CALL_OW 12
2049: PPUSH
2050: LD_INT 4
2052: PPUSH
2053: LD_INT 5
2055: PPUSH
2056: CALL_OW 12
2060: PUSH
2061: LD_INT 4
2063: PPUSH
2064: LD_INT 6
2066: PPUSH
2067: CALL_OW 12
2071: PUSH
2072: LD_INT 5
2074: PPUSH
2075: LD_INT 6
2077: PPUSH
2078: CALL_OW 12
2082: PUSH
2083: EMPTY
2084: LIST
2085: LIST
2086: LIST
2087: PUSH
2088: LD_OWVAR 67
2092: ARRAY
2093: PPUSH
2094: CALL_OW 383
// PlaceHumanInUnit ( CreateHuman , i ) ;
2098: CALL_OW 44
2102: PPUSH
2103: LD_VAR 0 2
2107: PPUSH
2108: CALL_OW 52
// end ;
2112: GO 2036
2114: POP
2115: POP
// SetBName ( ad , delta ) ;
2116: LD_INT 36
2118: PPUSH
2119: LD_STRING delta
2121: PPUSH
2122: CALL_OW 500
// if TestVariable ( EddingsKilled ) then
2126: LD_STRING EddingsKilled
2128: PPUSH
2129: CALL_OW 27
2133: IFFALSE 2145
// VehControl = 2 else
2135: LD_ADDR_EXP 8
2139: PUSH
2140: LD_INT 2
2142: ST_TO_ADDR
2143: GO 2160
// begin VehControl = 1 ;
2145: LD_ADDR_EXP 8
2149: PUSH
2150: LD_INT 1
2152: ST_TO_ADDR
// RemoveUnit ( compext ) ;
2153: LD_INT 109
2155: PPUSH
2156: CALL_OW 64
// end ; end ;
2160: LD_VAR 0 1
2164: RET
// export Engineers , Vehs , Buildings , Cargo ; export Targets , Enemies ; export PatrolStrategy , AttackStrategy , DefenceStrategy , RepairStrategy , BaseStrategy ; every 0 0$1 do var i ;
2165: GO 2167
2167: DISABLE
2168: LD_INT 0
2170: PPUSH
// begin enable ;
2171: ENABLE
// Engineers = FilterUnitsInArea ( AmericanBase , [ [ f_side , 1 ] , [ f_or , [ f_class , class_engineer ] , [ f_class , class_apeman_engineer ] ] ] ) ^ FilterAllUnits ( [ [ f_side , 1 ] , [ f_weapon , us_crane ] ] ) ^ UnitFilter ( UnitsInside ( ad ) , [ f_side , 1 ] ) ;
2172: LD_ADDR_EXP 9
2176: PUSH
2177: LD_INT 3
2179: PPUSH
2180: LD_INT 22
2182: PUSH
2183: LD_INT 1
2185: PUSH
2186: EMPTY
2187: LIST
2188: LIST
2189: PUSH
2190: LD_INT 2
2192: PUSH
2193: LD_INT 25
2195: PUSH
2196: LD_INT 2
2198: PUSH
2199: EMPTY
2200: LIST
2201: LIST
2202: PUSH
2203: LD_INT 25
2205: PUSH
2206: LD_INT 16
2208: PUSH
2209: EMPTY
2210: LIST
2211: LIST
2212: PUSH
2213: EMPTY
2214: LIST
2215: LIST
2216: LIST
2217: PUSH
2218: EMPTY
2219: LIST
2220: LIST
2221: PPUSH
2222: CALL_OW 70
2226: PUSH
2227: LD_INT 22
2229: PUSH
2230: LD_INT 1
2232: PUSH
2233: EMPTY
2234: LIST
2235: LIST
2236: PUSH
2237: LD_INT 34
2239: PUSH
2240: LD_INT 13
2242: PUSH
2243: EMPTY
2244: LIST
2245: LIST
2246: PUSH
2247: EMPTY
2248: LIST
2249: LIST
2250: PPUSH
2251: CALL_OW 69
2255: ADD
2256: PUSH
2257: LD_INT 36
2259: PPUSH
2260: CALL_OW 313
2264: PPUSH
2265: LD_INT 22
2267: PUSH
2268: LD_INT 1
2270: PUSH
2271: EMPTY
2272: LIST
2273: LIST
2274: PPUSH
2275: CALL_OW 72
2279: ADD
2280: ST_TO_ADDR
// Buildings = FilterUnitsInArea ( AmericanBase , [ [ f_side , 1 ] , [ f_type , unit_building ] ] ) ;
2281: LD_ADDR_EXP 11
2285: PUSH
2286: LD_INT 3
2288: PPUSH
2289: LD_INT 22
2291: PUSH
2292: LD_INT 1
2294: PUSH
2295: EMPTY
2296: LIST
2297: LIST
2298: PUSH
2299: LD_INT 21
2301: PUSH
2302: LD_INT 3
2304: PUSH
2305: EMPTY
2306: LIST
2307: LIST
2308: PUSH
2309: EMPTY
2310: LIST
2311: LIST
2312: PPUSH
2313: CALL_OW 70
2317: ST_TO_ADDR
// if not ExistMc ( BaseStrategy ) then
2318: LD_EXP 19
2322: PPUSH
2323: CALL_OW 386
2327: NOT
2328: IFFALSE 2371
// BaseStrategy = McBase ( 1 , Engineers , GetBuildList ( GetBase ( ad ) ) , [ ] , [ ] , [ mc_base_cont ] ) ;
2330: LD_ADDR_EXP 19
2334: PUSH
2335: LD_INT 1
2337: PPUSH
2338: LD_EXP 9
2342: PPUSH
2343: LD_INT 36
2345: PPUSH
2346: CALL_OW 274
2350: PPUSH
2351: CALL_OW 417
2355: PPUSH
2356: EMPTY
2357: PPUSH
2358: EMPTY
2359: PPUSH
2360: LD_INT 1
2362: PUSH
2363: EMPTY
2364: LIST
2365: PPUSH
2366: CALL_OW 397
2370: ST_TO_ADDR
// if not ExistMc ( RepairStrategy ) and not FilterUnitsInArea ( AmericanDefenceArea , [ [ f_side , 2 ] , [ f_see , 1 ] ] ) then
2371: LD_EXP 18
2375: PPUSH
2376: CALL_OW 386
2380: NOT
2381: PUSH
2382: LD_INT 4
2384: PPUSH
2385: LD_INT 22
2387: PUSH
2388: LD_INT 2
2390: PUSH
2391: EMPTY
2392: LIST
2393: LIST
2394: PUSH
2395: LD_INT 101
2397: PUSH
2398: LD_INT 1
2400: PUSH
2401: EMPTY
2402: LIST
2403: LIST
2404: PUSH
2405: EMPTY
2406: LIST
2407: LIST
2408: PPUSH
2409: CALL_OW 70
2413: NOT
2414: AND
2415: IFFALSE 2453
// RepairStrategy = McRepair ( 2 , Engineers , Buildings , [ [ mcr_bui_limit , 1000 ] ] ) ;
2417: LD_ADDR_EXP 18
2421: PUSH
2422: LD_INT 2
2424: PPUSH
2425: LD_EXP 9
2429: PPUSH
2430: LD_EXP 11
2434: PPUSH
2435: LD_INT 6
2437: PUSH
2438: LD_INT 1000
2440: PUSH
2441: EMPTY
2442: LIST
2443: LIST
2444: PUSH
2445: EMPTY
2446: LIST
2447: PPUSH
2448: CALL_OW 414
2452: ST_TO_ADDR
// if FilterUnitsInArea ( AmericanDefenceArea , [ [ f_side , 2 ] , [ f_see , 1 ] ] ) then
2453: LD_INT 4
2455: PPUSH
2456: LD_INT 22
2458: PUSH
2459: LD_INT 2
2461: PUSH
2462: EMPTY
2463: LIST
2464: LIST
2465: PUSH
2466: LD_INT 101
2468: PUSH
2469: LD_INT 1
2471: PUSH
2472: EMPTY
2473: LIST
2474: LIST
2475: PUSH
2476: EMPTY
2477: LIST
2478: LIST
2479: PPUSH
2480: CALL_OW 70
2484: IFFALSE 2524
// begin KillMc ( RepairStrategy ) ;
2486: LD_EXP 18
2490: PPUSH
2491: CALL_OW 387
// for i in Engineers do
2495: LD_ADDR_VAR 0 1
2499: PUSH
2500: LD_EXP 9
2504: PUSH
2505: FOR_IN
2506: IFFALSE 2522
// ComMoveToArea ( i , AmericanRepairs ) ;
2508: LD_VAR 0 1
2512: PPUSH
2513: LD_INT 5
2515: PPUSH
2516: CALL_OW 113
2520: GO 2505
2522: POP
2523: POP
// end ; Cargo = FilterUnitsInArea ( AmericanDefenceArea , [ [ f_side , 1 ] , [ f_class , class_apeman_engineer ] ] ) ;
2524: LD_ADDR_EXP 12
2528: PUSH
2529: LD_INT 4
2531: PPUSH
2532: LD_INT 22
2534: PUSH
2535: LD_INT 1
2537: PUSH
2538: EMPTY
2539: LIST
2540: LIST
2541: PUSH
2542: LD_INT 25
2544: PUSH
2545: LD_INT 16
2547: PUSH
2548: EMPTY
2549: LIST
2550: LIST
2551: PUSH
2552: EMPTY
2553: LIST
2554: LIST
2555: PPUSH
2556: CALL_OW 70
2560: ST_TO_ADDR
// if GetListOfCratesInArea ( AmericanDefenceArea ) then
2561: LD_INT 4
2563: PPUSH
2564: CALL_OW 435
2568: IFFALSE 2603
// AddComCollect ( Cargo , GetListOfCratesInArea ( AmericanDefenceArea ) [ 1 ] , GetListOfCratesInArea ( AmericanDefenceArea ) [ 2 ] ) ;
2570: LD_EXP 12
2574: PPUSH
2575: LD_INT 4
2577: PPUSH
2578: CALL_OW 435
2582: PUSH
2583: LD_INT 1
2585: ARRAY
2586: PPUSH
2587: LD_INT 4
2589: PPUSH
2590: CALL_OW 435
2594: PUSH
2595: LD_INT 2
2597: ARRAY
2598: PPUSH
2599: CALL_OW 177
// end ;
2603: PPOPN 1
2605: END
// every 0 0$1 trigger tick > [ 12 12$30 , 10 10$0 , 8 8$0 ] [ difficulty ] do
2606: LD_OWVAR 1
2610: PUSH
2611: LD_INT 26250
2613: PUSH
2614: LD_INT 21000
2616: PUSH
2617: LD_INT 16800
2619: PUSH
2620: EMPTY
2621: LIST
2622: LIST
2623: LIST
2624: PUSH
2625: LD_OWVAR 67
2629: ARRAY
2630: GREATER
2631: IFFALSE 2918
2633: GO 2635
2635: DISABLE
// begin enable ;
2636: ENABLE
// if not IsBusy ( af ) and GetSide ( af ) = 1 and Vehs < [ 2 , 3 , 3 ] [ difficulty ] then
2637: LD_INT 28
2639: PPUSH
2640: CALL_OW 315
2644: NOT
2645: PUSH
2646: LD_INT 28
2648: PPUSH
2649: CALL_OW 255
2653: PUSH
2654: LD_INT 1
2656: EQUAL
2657: AND
2658: PUSH
2659: LD_EXP 10
2663: PUSH
2664: LD_INT 2
2666: PUSH
2667: LD_INT 3
2669: PUSH
2670: LD_INT 3
2672: PUSH
2673: EMPTY
2674: LIST
2675: LIST
2676: LIST
2677: PUSH
2678: LD_OWVAR 67
2682: ARRAY
2683: LESS
2684: AND
2685: IFFALSE 2918
// case [ Rand ( 1 , 2 ) , Rand ( 1 , 3 ) , Rand ( 2 , 3 ) ] [ difficulty ] of 1 :
2687: LD_INT 1
2689: PPUSH
2690: LD_INT 2
2692: PPUSH
2693: CALL_OW 12
2697: PUSH
2698: LD_INT 1
2700: PPUSH
2701: LD_INT 3
2703: PPUSH
2704: CALL_OW 12
2708: PUSH
2709: LD_INT 2
2711: PPUSH
2712: LD_INT 3
2714: PPUSH
2715: CALL_OW 12
2719: PUSH
2720: EMPTY
2721: LIST
2722: LIST
2723: LIST
2724: PUSH
2725: LD_OWVAR 67
2729: ARRAY
2730: PUSH
2731: LD_INT 1
2733: DOUBLE
2734: EQUAL
2735: IFTRUE 2739
2737: GO 2793
2739: POP
// ComConstruct ( af , us_light_wheeled , engine_solar , [ control_remote , control_computer ] [ VehControl ] , [ us_machine_gun , us_light_gun ] [ Rand ( 1 , 2 ) ] ) ; 2 :
2740: LD_INT 28
2742: PPUSH
2743: LD_INT 1
2745: PPUSH
2746: LD_INT 2
2748: PPUSH
2749: LD_INT 2
2751: PUSH
2752: LD_INT 3
2754: PUSH
2755: EMPTY
2756: LIST
2757: LIST
2758: PUSH
2759: LD_EXP 8
2763: ARRAY
2764: PPUSH
2765: LD_INT 2
2767: PUSH
2768: LD_INT 3
2770: PUSH
2771: EMPTY
2772: LIST
2773: LIST
2774: PUSH
2775: LD_INT 1
2777: PPUSH
2778: LD_INT 2
2780: PPUSH
2781: CALL_OW 12
2785: ARRAY
2786: PPUSH
2787: CALL_OW 125
2791: GO 2918
2793: LD_INT 2
2795: DOUBLE
2796: EQUAL
2797: IFTRUE 2801
2799: GO 2855
2801: POP
// ComConstruct ( af , us_medium_wheeled , engine_solar , [ control_remote , control_computer ] [ VehControl ] , [ us_light_gun , us_double_gun ] [ Rand ( 1 , 2 ) ] ) ; 3 :
2802: LD_INT 28
2804: PPUSH
2805: LD_INT 2
2807: PPUSH
2808: LD_INT 2
2810: PPUSH
2811: LD_INT 2
2813: PUSH
2814: LD_INT 3
2816: PUSH
2817: EMPTY
2818: LIST
2819: LIST
2820: PUSH
2821: LD_EXP 8
2825: ARRAY
2826: PPUSH
2827: LD_INT 3
2829: PUSH
2830: LD_INT 5
2832: PUSH
2833: EMPTY
2834: LIST
2835: LIST
2836: PUSH
2837: LD_INT 1
2839: PPUSH
2840: LD_INT 2
2842: PPUSH
2843: CALL_OW 12
2847: ARRAY
2848: PPUSH
2849: CALL_OW 125
2853: GO 2918
2855: LD_INT 3
2857: DOUBLE
2858: EQUAL
2859: IFTRUE 2863
2861: GO 2917
2863: POP
// ComConstruct ( af , us_medium_tracked , engine_solar , [ control_remote , control_computer ] [ VehControl ] , [ us_machine_gun , us_double_gun ] [ Rand ( 1 , 2 ) ] ) ; end ;
2864: LD_INT 28
2866: PPUSH
2867: LD_INT 3
2869: PPUSH
2870: LD_INT 2
2872: PPUSH
2873: LD_INT 2
2875: PUSH
2876: LD_INT 3
2878: PUSH
2879: EMPTY
2880: LIST
2881: LIST
2882: PUSH
2883: LD_EXP 8
2887: ARRAY
2888: PPUSH
2889: LD_INT 2
2891: PUSH
2892: LD_INT 5
2894: PUSH
2895: EMPTY
2896: LIST
2897: LIST
2898: PUSH
2899: LD_INT 1
2901: PPUSH
2902: LD_INT 2
2904: PPUSH
2905: CALL_OW 12
2909: ARRAY
2910: PPUSH
2911: CALL_OW 125
2915: GO 2918
2917: POP
// end ;
2918: END
// on VehicleConstructed ( v , f ) do if GetSide ( v ) = 1 then
2919: LD_VAR 0 1
2923: PPUSH
2924: CALL_OW 255
2928: PUSH
2929: LD_INT 1
2931: EQUAL
2932: IFFALSE 2962
// begin Vehs = Vehs ^ v ;
2934: LD_ADDR_EXP 10
2938: PUSH
2939: LD_EXP 10
2943: PUSH
2944: LD_VAR 0 1
2948: ADD
2949: ST_TO_ADDR
// SetFuel ( v , 100 ) ;
2950: LD_VAR 0 1
2954: PPUSH
2955: LD_INT 100
2957: PPUSH
2958: CALL_OW 240
// end ;
2962: PPOPN 2
2964: END
// every 0 0$1 do
2965: GO 2967
2967: DISABLE
// Targets = McRegistry ( 1 , [ [ mc_reg_refresh_time , 0 0$5 ] , [ mc_reg_area_to_guard , AntoinePosition ] , - mc_reg_ignore_fog ] ) ;
2968: LD_ADDR_EXP 13
2972: PUSH
2973: LD_INT 1
2975: PPUSH
2976: LD_INT 1
2978: PUSH
2979: LD_INT 175
2981: PUSH
2982: EMPTY
2983: LIST
2984: LIST
2985: PUSH
2986: LD_INT 2
2988: PUSH
2989: LD_INT 6
2991: PUSH
2992: EMPTY
2993: LIST
2994: LIST
2995: PUSH
2996: LD_INT 7
2998: NEG
2999: PUSH
3000: EMPTY
3001: LIST
3002: LIST
3003: LIST
3004: PPUSH
3005: CALL_OW 399
3009: ST_TO_ADDR
3010: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) do var i , j , u ;
3011: LD_INT 22
3013: PUSH
3014: LD_INT 1
3016: PUSH
3017: EMPTY
3018: LIST
3019: LIST
3020: PUSH
3021: LD_INT 21
3023: PUSH
3024: LD_INT 2
3026: PUSH
3027: EMPTY
3028: LIST
3029: LIST
3030: PUSH
3031: EMPTY
3032: LIST
3033: LIST
3034: PPUSH
3035: CALL_OW 69
3039: IFFALSE 3319
3041: GO 3043
3043: DISABLE
3044: LD_INT 0
3046: PPUSH
3047: PPUSH
3048: PPUSH
// begin enable ;
3049: ENABLE
// for i in FilterAllUnits ( [ [ f_side , 1 ] , [ f_control , control_remote ] ] ) do
3050: LD_ADDR_VAR 0 1
3054: PUSH
3055: LD_INT 22
3057: PUSH
3058: LD_INT 1
3060: PUSH
3061: EMPTY
3062: LIST
3063: LIST
3064: PUSH
3065: LD_INT 33
3067: PUSH
3068: LD_INT 2
3070: PUSH
3071: EMPTY
3072: LIST
3073: LIST
3074: PUSH
3075: EMPTY
3076: LIST
3077: LIST
3078: PPUSH
3079: CALL_OW 69
3083: PUSH
3084: FOR_IN
3085: IFFALSE 3122
// if not IsControledBy ( i ) then
3087: LD_VAR 0 1
3091: PPUSH
3092: CALL_OW 312
3096: NOT
3097: IFFALSE 3120
// ComLinkTo ( i , UnitsInside ( at ) [ 1 ] ) ;
3099: LD_VAR 0 1
3103: PPUSH
3104: LD_INT 108
3106: PPUSH
3107: CALL_OW 313
3111: PUSH
3112: LD_INT 1
3114: ARRAY
3115: PPUSH
3116: CALL_OW 135
3120: GO 3084
3122: POP
3123: POP
// if GetMcUnits ( AttackStrategy ) = 0 then
3124: LD_EXP 16
3128: PPUSH
3129: CALL_OW 389
3133: PUSH
3134: LD_INT 0
3136: EQUAL
3137: IFFALSE 3148
// KillMc ( AttackStrategy ) ;
3139: LD_EXP 16
3143: PPUSH
3144: CALL_OW 387
// for i in Vehs do
3148: LD_ADDR_VAR 0 1
3152: PUSH
3153: LD_EXP 10
3157: PUSH
3158: FOR_IN
3159: IFFALSE 3317
// begin if ExistMc ( PatrolStrategy ) and GetUnitMc ( i ) = false and GetLives ( i ) = 1000 then
3161: LD_EXP 15
3165: PPUSH
3166: CALL_OW 386
3170: PUSH
3171: LD_VAR 0 1
3175: PPUSH
3176: CALL_OW 388
3180: PUSH
3181: LD_INT 0
3183: EQUAL
3184: AND
3185: PUSH
3186: LD_VAR 0 1
3190: PPUSH
3191: CALL_OW 256
3195: PUSH
3196: LD_INT 1000
3198: EQUAL
3199: AND
3200: IFFALSE 3218
// AddMcUnits ( PatrolStrategy , i ) else
3202: LD_EXP 15
3206: PPUSH
3207: LD_VAR 0 1
3211: PPUSH
3212: CALL_OW 390
3216: GO 3288
// if UnitFilter ( Vehs , [ f_lives , 1000 ] ) >= 2 then
3218: LD_EXP 10
3222: PPUSH
3223: LD_INT 24
3225: PUSH
3226: LD_INT 1000
3228: PUSH
3229: EMPTY
3230: LIST
3231: LIST
3232: PPUSH
3233: CALL_OW 72
3237: PUSH
3238: LD_INT 2
3240: GREATEREQUAL
3241: IFFALSE 3288
// PatrolStrategy = McPatrol ( 2 , Targets , UnitFilter ( Vehs , [ f_lives , 1000 ] ) , [ - mc_pat_aggresive ] ) ;
3243: LD_ADDR_EXP 15
3247: PUSH
3248: LD_INT 2
3250: PPUSH
3251: LD_EXP 13
3255: PPUSH
3256: LD_EXP 10
3260: PPUSH
3261: LD_INT 24
3263: PUSH
3264: LD_INT 1000
3266: PUSH
3267: EMPTY
3268: LIST
3269: LIST
3270: PPUSH
3271: CALL_OW 72
3275: PPUSH
3276: LD_INT 11
3278: NEG
3279: PUSH
3280: EMPTY
3281: LIST
3282: PPUSH
3283: CALL_OW 403
3287: ST_TO_ADDR
// if IsDying ( i ) then
3288: LD_VAR 0 1
3292: PPUSH
3293: CALL_OW 303
3297: IFFALSE 3315
// Vehs = Vehs diff i ;
3299: LD_ADDR_EXP 10
3303: PUSH
3304: LD_EXP 10
3308: PUSH
3309: LD_VAR 0 1
3313: DIFF
3314: ST_TO_ADDR
// end ;
3315: GO 3158
3317: POP
3318: POP
// end ;
3319: PPOPN 3
3321: END
// every 0 0$1 do var v , Convoy ;
3322: GO 3324
3324: DISABLE
3325: LD_INT 0
3327: PPUSH
3328: PPUSH
// begin case tick of 1 .. 20 20$0 :
3329: LD_OWVAR 1
3333: PUSH
3334: LD_INT 1
3336: DOUBLE
3337: GREATEREQUAL
3338: IFFALSE 3346
3340: LD_INT 42000
3342: DOUBLE
3343: LESSEQUAL
3344: IFTRUE 3348
3346: GO 3366
3348: POP
// Wait ( Rand ( 4 4$0 , 6 6$0 ) ) ; 20 20$0 + 1 .. 30 30$0 :
3349: LD_INT 8400
3351: PPUSH
3352: LD_INT 12600
3354: PPUSH
3355: CALL_OW 12
3359: PPUSH
3360: CALL_OW 67
3364: GO 3418
3366: LD_INT 42000
3368: PUSH
3369: LD_INT 1
3371: PLUS
3372: DOUBLE
3373: GREATEREQUAL
3374: IFFALSE 3382
3376: LD_INT 63000
3378: DOUBLE
3379: LESSEQUAL
3380: IFTRUE 3384
3382: GO 3402
3384: POP
// Wait ( Rand ( 1 1$30 , 3 3$0 ) ) ; else
3385: LD_INT 3150
3387: PPUSH
3388: LD_INT 6300
3390: PPUSH
3391: CALL_OW 12
3395: PPUSH
3396: CALL_OW 67
3400: GO 3418
3402: POP
// Wait ( Rand ( 5 5$0 , 8 8$0 ) ) ; end ;
3403: LD_INT 10500
3405: PPUSH
3406: LD_INT 16800
3408: PPUSH
3409: CALL_OW 12
3413: PPUSH
3414: CALL_OW 67
// uc_side = 1 ;
3418: LD_ADDR_OWVAR 20
3422: PUSH
3423: LD_INT 1
3425: ST_TO_ADDR
// uc_nation = 1 ;
3426: LD_ADDR_OWVAR 21
3430: PUSH
3431: LD_INT 1
3433: ST_TO_ADDR
// uc_direction = 5 ;
3434: LD_ADDR_OWVAR 24
3438: PUSH
3439: LD_INT 5
3441: ST_TO_ADDR
// vc_chassis = us_medium_wheeled ;
3442: LD_ADDR_OWVAR 37
3446: PUSH
3447: LD_INT 2
3449: ST_TO_ADDR
// vc_engine = engine_solar ;
3450: LD_ADDR_OWVAR 39
3454: PUSH
3455: LD_INT 2
3457: ST_TO_ADDR
// vc_control = control_manual ;
3458: LD_ADDR_OWVAR 38
3462: PUSH
3463: LD_INT 1
3465: ST_TO_ADDR
// vc_weapon = [ us_radar , us_double_gun , us_gatling_gun ] [ Rand ( 1 , 3 ) ] ;
3466: LD_ADDR_OWVAR 40
3470: PUSH
3471: LD_INT 11
3473: PUSH
3474: LD_INT 5
3476: PUSH
3477: LD_INT 4
3479: PUSH
3480: EMPTY
3481: LIST
3482: LIST
3483: LIST
3484: PUSH
3485: LD_INT 1
3487: PPUSH
3488: LD_INT 3
3490: PPUSH
3491: CALL_OW 12
3495: ARRAY
3496: ST_TO_ADDR
// v = CreateVehicle ;
3497: LD_ADDR_VAR 0 1
3501: PUSH
3502: CALL_OW 45
3506: ST_TO_ADDR
// PlaceUnitArea ( v , AttackEnter , false ) ;
3507: LD_VAR 0 1
3511: PPUSH
3512: LD_INT 2
3514: PPUSH
3515: LD_INT 0
3517: PPUSH
3518: CALL_OW 49
// PrepareHuman ( false , Rand ( 1 , 4 ) , Rand ( 3 , 6 ) ) ;
3522: LD_INT 0
3524: PPUSH
3525: LD_INT 1
3527: PPUSH
3528: LD_INT 4
3530: PPUSH
3531: CALL_OW 12
3535: PPUSH
3536: LD_INT 3
3538: PPUSH
3539: LD_INT 6
3541: PPUSH
3542: CALL_OW 12
3546: PPUSH
3547: CALL_OW 380
// PlaceHumanInUnit ( CreateHuman , v ) ;
3551: CALL_OW 44
3555: PPUSH
3556: LD_VAR 0 1
3560: PPUSH
3561: CALL_OW 52
// Convoy = McMove ( 1 , v , [ [ 152 , 117 ] , [ 130 , 97 ] , [ 121 , 90 ] , [ 116 , 51 ] , [ 107 , 29 ] , [ 83 , 9 ] , [ 76 , 2 ] ] , [ [ mc_move_agressive ] , [ mc_move_through ] ] ) ;
3565: LD_ADDR_VAR 0 2
3569: PUSH
3570: LD_INT 1
3572: PPUSH
3573: LD_VAR 0 1
3577: PPUSH
3578: LD_INT 152
3580: PUSH
3581: LD_INT 117
3583: PUSH
3584: EMPTY
3585: LIST
3586: LIST
3587: PUSH
3588: LD_INT 130
3590: PUSH
3591: LD_INT 97
3593: PUSH
3594: EMPTY
3595: LIST
3596: LIST
3597: PUSH
3598: LD_INT 121
3600: PUSH
3601: LD_INT 90
3603: PUSH
3604: EMPTY
3605: LIST
3606: LIST
3607: PUSH
3608: LD_INT 116
3610: PUSH
3611: LD_INT 51
3613: PUSH
3614: EMPTY
3615: LIST
3616: LIST
3617: PUSH
3618: LD_INT 107
3620: PUSH
3621: LD_INT 29
3623: PUSH
3624: EMPTY
3625: LIST
3626: LIST
3627: PUSH
3628: LD_INT 83
3630: PUSH
3631: LD_INT 9
3633: PUSH
3634: EMPTY
3635: LIST
3636: LIST
3637: PUSH
3638: LD_INT 76
3640: PUSH
3641: LD_INT 2
3643: PUSH
3644: EMPTY
3645: LIST
3646: LIST
3647: PUSH
3648: EMPTY
3649: LIST
3650: LIST
3651: LIST
3652: LIST
3653: LIST
3654: LIST
3655: LIST
3656: PPUSH
3657: LD_INT 6
3659: PUSH
3660: EMPTY
3661: LIST
3662: PUSH
3663: LD_INT 2
3665: PUSH
3666: EMPTY
3667: LIST
3668: PUSH
3669: EMPTY
3670: LIST
3671: LIST
3672: PPUSH
3673: CALL_OW 398
3677: ST_TO_ADDR
// end ;
3678: PPOPN 2
3680: END
// every 0 0$1 trigger FilterUnitsInArea ( ConvoyExit , [ f_side , 1 ] ) do var i ;
3681: LD_INT 10
3683: PPUSH
3684: LD_INT 22
3686: PUSH
3687: LD_INT 1
3689: PUSH
3690: EMPTY
3691: LIST
3692: LIST
3693: PPUSH
3694: CALL_OW 70
3698: IFFALSE 3746
3700: GO 3702
3702: DISABLE
3703: LD_INT 0
3705: PPUSH
// begin enable ;
3706: ENABLE
// for i in FilterUnitsInArea ( ConvoyExit , [ f_side , 1 ] ) do
3707: LD_ADDR_VAR 0 1
3711: PUSH
3712: LD_INT 10
3714: PPUSH
3715: LD_INT 22
3717: PUSH
3718: LD_INT 1
3720: PUSH
3721: EMPTY
3722: LIST
3723: LIST
3724: PPUSH
3725: CALL_OW 70
3729: PUSH
3730: FOR_IN
3731: IFFALSE 3744
// RemoveUnit ( i ) ;
3733: LD_VAR 0 1
3737: PPUSH
3738: CALL_OW 64
3742: GO 3730
3744: POP
3745: POP
// end ; end_of_file
3746: PPOPN 1
3748: END
// export function PrepareOutpost ; var i ; begin
3749: LD_INT 0
3751: PPUSH
3752: PPUSH
// uc_side = 1 ;
3753: LD_ADDR_OWVAR 20
3757: PUSH
3758: LD_INT 1
3760: ST_TO_ADDR
// uc_nation = 1 ;
3761: LD_ADDR_OWVAR 21
3765: PUSH
3766: LD_INT 1
3768: ST_TO_ADDR
// InitHc ;
3769: CALL_OW 19
// PrepareBase ( 1 , AmericanOutpost , Rand ( 3 , 5 ) , 0 , 0 , 1 , 1 ) ;
3773: LD_INT 1
3775: PPUSH
3776: LD_INT 7
3778: PPUSH
3779: LD_INT 3
3781: PPUSH
3782: LD_INT 5
3784: PPUSH
3785: CALL_OW 12
3789: PPUSH
3790: LD_INT 0
3792: PPUSH
3793: LD_INT 0
3795: PPUSH
3796: LD_INT 1
3798: PPUSH
3799: LD_INT 1
3801: PPUSH
3802: CALL 6857 0 7
// for i in FilterUnitsInArea ( AmericanOutpost , [ f_btype , b_breastwork ] ) do
3806: LD_ADDR_VAR 0 2
3810: PUSH
3811: LD_INT 7
3813: PPUSH
3814: LD_INT 30
3816: PUSH
3817: LD_INT 31
3819: PUSH
3820: EMPTY
3821: LIST
3822: LIST
3823: PPUSH
3824: CALL_OW 70
3828: PUSH
3829: FOR_IN
3830: IFFALSE 3855
// SetClass ( UnitsInside ( i ) [ 1 ] , class_sniper ) ;
3832: LD_VAR 0 2
3836: PPUSH
3837: CALL_OW 313
3841: PUSH
3842: LD_INT 1
3844: ARRAY
3845: PPUSH
3846: LD_INT 5
3848: PPUSH
3849: CALL_OW 336
3853: GO 3829
3855: POP
3856: POP
// if VehControl = 1 then
3857: LD_EXP 8
3861: PUSH
3862: LD_INT 1
3864: EQUAL
3865: IFFALSE 3908
// begin PrepareMechanic ( false , [ 4 , 5 , 6 ] [ difficulty ] ) ;
3867: LD_INT 0
3869: PPUSH
3870: LD_INT 4
3872: PUSH
3873: LD_INT 5
3875: PUSH
3876: LD_INT 6
3878: PUSH
3879: EMPTY
3880: LIST
3881: LIST
3882: LIST
3883: PUSH
3884: LD_OWVAR 67
3888: ARRAY
3889: PPUSH
3890: CALL_OW 383
// PlaceHumanInUnit ( CreateHuman , at ) ;
3894: CALL_OW 44
3898: PPUSH
3899: LD_INT 108
3901: PPUSH
3902: CALL_OW 52
// end else
3906: GO 3915
// RemoveUnit ( at ) ;
3908: LD_INT 108
3910: PPUSH
3911: CALL_OW 64
// if difficulty = 1 then
3915: LD_OWVAR 67
3919: PUSH
3920: LD_INT 1
3922: EQUAL
3923: IFFALSE 3932
// RemoveUnit ( snip3 ) ;
3925: LD_INT 118
3927: PPUSH
3928: CALL_OW 64
// for i in [ snip1 , snip2 , snip3 ] do
3932: LD_ADDR_VAR 0 2
3936: PUSH
3937: LD_INT 116
3939: PUSH
3940: LD_INT 117
3942: PUSH
3943: LD_INT 118
3945: PUSH
3946: EMPTY
3947: LIST
3948: LIST
3949: LIST
3950: PUSH
3951: FOR_IN
3952: IFFALSE 3965
// ComHold ( i ) ;
3954: LD_VAR 0 2
3958: PPUSH
3959: CALL_OW 140
3963: GO 3951
3965: POP
3966: POP
// end ;
3967: LD_VAR 0 1
3971: RET
// export OEngineers , OBuildings , ORepairStrategy ; every 0 0$1 do var i ;
3972: GO 3974
3974: DISABLE
3975: LD_INT 0
3977: PPUSH
// begin enable ;
3978: ENABLE
// OEngineers = FilterUnitsInArea ( AmericanOutpost , [ [ f_side , 1 ] , [ f_or , [ f_class , class_engineer ] , [ f_class , class_apeman_engineer ] ] ] ) ^ UnitFilter ( UnitsInside ( od ) , [ f_side , 1 ] ) ;
3979: LD_ADDR_EXP 20
3983: PUSH
3984: LD_INT 7
3986: PPUSH
3987: LD_INT 22
3989: PUSH
3990: LD_INT 1
3992: PUSH
3993: EMPTY
3994: LIST
3995: LIST
3996: PUSH
3997: LD_INT 2
3999: PUSH
4000: LD_INT 25
4002: PUSH
4003: LD_INT 2
4005: PUSH
4006: EMPTY
4007: LIST
4008: LIST
4009: PUSH
4010: LD_INT 25
4012: PUSH
4013: LD_INT 16
4015: PUSH
4016: EMPTY
4017: LIST
4018: LIST
4019: PUSH
4020: EMPTY
4021: LIST
4022: LIST
4023: LIST
4024: PUSH
4025: EMPTY
4026: LIST
4027: LIST
4028: PPUSH
4029: CALL_OW 70
4033: PUSH
4034: LD_INT 79
4036: PPUSH
4037: CALL_OW 313
4041: PPUSH
4042: LD_INT 22
4044: PUSH
4045: LD_INT 1
4047: PUSH
4048: EMPTY
4049: LIST
4050: LIST
4051: PPUSH
4052: CALL_OW 72
4056: ADD
4057: ST_TO_ADDR
// OBuildings = FilterUnitsInArea ( AmericanOutpost , [ [ f_side , 1 ] , [ f_type , unit_building ] ] ) ;
4058: LD_ADDR_EXP 21
4062: PUSH
4063: LD_INT 7
4065: PPUSH
4066: LD_INT 22
4068: PUSH
4069: LD_INT 1
4071: PUSH
4072: EMPTY
4073: LIST
4074: LIST
4075: PUSH
4076: LD_INT 21
4078: PUSH
4079: LD_INT 3
4081: PUSH
4082: EMPTY
4083: LIST
4084: LIST
4085: PUSH
4086: EMPTY
4087: LIST
4088: LIST
4089: PPUSH
4090: CALL_OW 70
4094: ST_TO_ADDR
// if not ExistMc ( ORepairStrategy ) and not FilterUnitsInArea ( AmericanOutpostDefence , [ [ f_side , 2 ] , [ f_see , 1 ] ] ) then
4095: LD_EXP 22
4099: PPUSH
4100: CALL_OW 386
4104: NOT
4105: PUSH
4106: LD_INT 8
4108: PPUSH
4109: LD_INT 22
4111: PUSH
4112: LD_INT 2
4114: PUSH
4115: EMPTY
4116: LIST
4117: LIST
4118: PUSH
4119: LD_INT 101
4121: PUSH
4122: LD_INT 1
4124: PUSH
4125: EMPTY
4126: LIST
4127: LIST
4128: PUSH
4129: EMPTY
4130: LIST
4131: LIST
4132: PPUSH
4133: CALL_OW 70
4137: NOT
4138: AND
4139: IFFALSE 4203
// begin for i in OEngineers do
4141: LD_ADDR_VAR 0 1
4145: PUSH
4146: LD_EXP 20
4150: PUSH
4151: FOR_IN
4152: IFFALSE 4165
// ComExitBuilding ( i ) ;
4154: LD_VAR 0 1
4158: PPUSH
4159: CALL_OW 122
4163: GO 4151
4165: POP
4166: POP
// ORepairStrategy = McRepair ( 2 , OEngineers , OBuildings , [ [ mcr_bui_limit , 1000 ] ] ) ;
4167: LD_ADDR_EXP 22
4171: PUSH
4172: LD_INT 2
4174: PPUSH
4175: LD_EXP 20
4179: PPUSH
4180: LD_EXP 21
4184: PPUSH
4185: LD_INT 6
4187: PUSH
4188: LD_INT 1000
4190: PUSH
4191: EMPTY
4192: LIST
4193: LIST
4194: PUSH
4195: EMPTY
4196: LIST
4197: PPUSH
4198: CALL_OW 414
4202: ST_TO_ADDR
// end ; if FilterUnitsInArea ( AmericanOutpostDefence , [ [ f_side , 2 ] , [ f_see , 1 ] ] ) then
4203: LD_INT 8
4205: PPUSH
4206: LD_INT 22
4208: PUSH
4209: LD_INT 2
4211: PUSH
4212: EMPTY
4213: LIST
4214: LIST
4215: PUSH
4216: LD_INT 101
4218: PUSH
4219: LD_INT 1
4221: PUSH
4222: EMPTY
4223: LIST
4224: LIST
4225: PUSH
4226: EMPTY
4227: LIST
4228: LIST
4229: PPUSH
4230: CALL_OW 70
4234: IFFALSE 4274
// begin KillMc ( ORepairStrategy ) ;
4236: LD_EXP 22
4240: PPUSH
4241: CALL_OW 387
// for i in OEngineers do
4245: LD_ADDR_VAR 0 1
4249: PUSH
4250: LD_EXP 20
4254: PUSH
4255: FOR_IN
4256: IFFALSE 4272
// ComEnterUnit ( i , od ) ;
4258: LD_VAR 0 1
4262: PPUSH
4263: LD_INT 79
4265: PPUSH
4266: CALL_OW 120
4270: GO 4255
4272: POP
4273: POP
// end ; if GetListOfCratesInArea ( AmericanOutpost ) then
4274: LD_INT 7
4276: PPUSH
4277: CALL_OW 435
4281: IFFALSE 4333
// for i in OEngineers do
4283: LD_ADDR_VAR 0 1
4287: PUSH
4288: LD_EXP 20
4292: PUSH
4293: FOR_IN
4294: IFFALSE 4331
// AddComCollect ( i , GetListOfCratesInArea ( AmericanOutpost ) [ 1 ] , GetListOfCratesInArea ( AmericanOutpost ) [ 2 ] ) ;
4296: LD_VAR 0 1
4300: PPUSH
4301: LD_INT 7
4303: PPUSH
4304: CALL_OW 435
4308: PUSH
4309: LD_INT 1
4311: ARRAY
4312: PPUSH
4313: LD_INT 7
4315: PPUSH
4316: CALL_OW 435
4320: PUSH
4321: LD_INT 2
4323: ARRAY
4324: PPUSH
4325: CALL_OW 177
4329: GO 4293
4331: POP
4332: POP
// end ; end_of_file
4333: PPOPN 1
4335: END
// export Kuronski , Oates , TeamOates ; export OatesDepot , OatesBuildList , OatesRepairStrategy , OatesTimer ; export function PrepareOates ; var i ; begin
4336: LD_INT 0
4338: PPUSH
4339: PPUSH
// uc_side = 7 ;
4340: LD_ADDR_OWVAR 20
4344: PUSH
4345: LD_INT 7
4347: ST_TO_ADDR
// uc_nation = nation_american ;
4348: LD_ADDR_OWVAR 21
4352: PUSH
4353: LD_INT 1
4355: ST_TO_ADDR
// for i = 1 to 4 do
4356: LD_ADDR_VAR 0 2
4360: PUSH
4361: DOUBLE
4362: LD_INT 1
4364: DEC
4365: ST_TO_ADDR
4366: LD_INT 4
4368: PUSH
4369: FOR_TO
4370: IFFALSE 4474
// begin case i of 1 :
4372: LD_VAR 0 2
4376: PUSH
4377: LD_INT 1
4379: DOUBLE
4380: EQUAL
4381: IFTRUE 4385
4383: GO 4401
4385: POP
// PrepareHuman ( false , class_engineer , 4 ) ; 2 , 3 :
4386: LD_INT 0
4388: PPUSH
4389: LD_INT 2
4391: PPUSH
4392: LD_INT 4
4394: PPUSH
4395: CALL_OW 380
4399: GO 4456
4401: LD_INT 2
4403: DOUBLE
4404: EQUAL
4405: IFTRUE 4415
4407: LD_INT 3
4409: DOUBLE
4410: EQUAL
4411: IFTRUE 4415
4413: GO 4431
4415: POP
// PrepareHuman ( false , class_soldier , 3 ) ; 4 :
4416: LD_INT 0
4418: PPUSH
4419: LD_INT 1
4421: PPUSH
4422: LD_INT 3
4424: PPUSH
4425: CALL_OW 380
4429: GO 4456
4431: LD_INT 4
4433: DOUBLE
4434: EQUAL
4435: IFTRUE 4439
4437: GO 4455
4439: POP
// PrepareHuman ( false , class_apeman_engineer , 1 ) ; end ;
4440: LD_INT 0
4442: PPUSH
4443: LD_INT 16
4445: PPUSH
4446: LD_INT 1
4448: PPUSH
4449: CALL_OW 380
4453: GO 4456
4455: POP
// TeamOates = TeamOates ^ CreateHuman ;
4456: LD_ADDR_EXP 25
4460: PUSH
4461: LD_EXP 25
4465: PUSH
4466: CALL_OW 44
4470: ADD
4471: ST_TO_ADDR
// end ;
4472: GO 4369
4474: POP
4475: POP
// for i in TeamOates do
4476: LD_ADDR_VAR 0 2
4480: PUSH
4481: LD_EXP 25
4485: PUSH
4486: FOR_IN
4487: IFFALSE 4512
// PlaceUnitXYR ( i , 177 , 98 , 2 , false ) ;
4489: LD_VAR 0 2
4493: PPUSH
4494: LD_INT 177
4496: PPUSH
4497: LD_INT 98
4499: PPUSH
4500: LD_INT 2
4502: PPUSH
4503: LD_INT 0
4505: PPUSH
4506: CALL_OW 50
4510: GO 4486
4512: POP
4513: POP
// Kuronski = NewCharacter ( Kuronski ) ;
4514: LD_ADDR_EXP 23
4518: PUSH
4519: LD_STRING Kuronski
4521: PPUSH
4522: CALL_OW 25
4526: ST_TO_ADDR
// SetClass ( Kuronski , class_sniper ) ;
4527: LD_EXP 23
4531: PPUSH
4532: LD_INT 5
4534: PPUSH
4535: CALL_OW 336
// PlaceUnitXY ( Kuronski , 175 , 94 , false ) ;
4539: LD_EXP 23
4543: PPUSH
4544: LD_INT 175
4546: PPUSH
4547: LD_INT 94
4549: PPUSH
4550: LD_INT 0
4552: PPUSH
4553: CALL_OW 48
// Oates = NewCharacter ( Oates ) ;
4557: LD_ADDR_EXP 24
4561: PUSH
4562: LD_STRING Oates
4564: PPUSH
4565: CALL_OW 25
4569: ST_TO_ADDR
// PlaceUnitXY ( Oates , 180 , 104 , false ) ;
4570: LD_EXP 24
4574: PPUSH
4575: LD_INT 180
4577: PPUSH
4578: LD_INT 104
4580: PPUSH
4581: LD_INT 0
4583: PPUSH
4584: CALL_OW 48
// ComMoveXY ( Kuronski , 168 , 89 ) ;
4588: LD_EXP 23
4592: PPUSH
4593: LD_INT 168
4595: PPUSH
4596: LD_INT 89
4598: PPUSH
4599: CALL_OW 111
// AddComForceInvisible ( Kuronski ) ;
4603: LD_EXP 23
4607: PPUSH
4608: CALL_OW 497
// OatesBuildList = [ [ b_depot , 172 , 93 , 3 ] , [ b_breastwork , 161 , 91 , 2 ] , [ b_breastwork , 170 , 106 , 0 ] , [ b_solar_power , 178 , 105 , 2 ] , [ b_solar_power , 177 , 101 , 3 ] ] ;
4612: LD_ADDR_EXP 27
4616: PUSH
4617: LD_INT 0
4619: PUSH
4620: LD_INT 172
4622: PUSH
4623: LD_INT 93
4625: PUSH
4626: LD_INT 3
4628: PUSH
4629: EMPTY
4630: LIST
4631: LIST
4632: LIST
4633: LIST
4634: PUSH
4635: LD_INT 31
4637: PUSH
4638: LD_INT 161
4640: PUSH
4641: LD_INT 91
4643: PUSH
4644: LD_INT 2
4646: PUSH
4647: EMPTY
4648: LIST
4649: LIST
4650: LIST
4651: LIST
4652: PUSH
4653: LD_INT 31
4655: PUSH
4656: LD_INT 170
4658: PUSH
4659: LD_INT 106
4661: PUSH
4662: LD_INT 0
4664: PUSH
4665: EMPTY
4666: LIST
4667: LIST
4668: LIST
4669: LIST
4670: PUSH
4671: LD_INT 27
4673: PUSH
4674: LD_INT 178
4676: PUSH
4677: LD_INT 105
4679: PUSH
4680: LD_INT 2
4682: PUSH
4683: EMPTY
4684: LIST
4685: LIST
4686: LIST
4687: LIST
4688: PUSH
4689: LD_INT 27
4691: PUSH
4692: LD_INT 177
4694: PUSH
4695: LD_INT 101
4697: PUSH
4698: LD_INT 3
4700: PUSH
4701: EMPTY
4702: LIST
4703: LIST
4704: LIST
4705: LIST
4706: PUSH
4707: EMPTY
4708: LIST
4709: LIST
4710: LIST
4711: LIST
4712: LIST
4713: ST_TO_ADDR
// end ;
4714: LD_VAR 0 1
4718: RET
// every 0 0$1 trigger IsPlaced ( Oates ) do var i ;
4719: LD_EXP 24
4723: PPUSH
4724: CALL_OW 305
4728: IFFALSE 5304
4730: GO 4732
4732: DISABLE
4733: LD_INT 0
4735: PPUSH
// begin enable ;
4736: ENABLE
// OatesTimer = OatesTimer + 0 0$1 ;
4737: LD_ADDR_EXP 29
4741: PUSH
4742: LD_EXP 29
4746: PUSH
4747: LD_INT 35
4749: PLUS
4750: ST_TO_ADDR
// if GetListOfCratesInArea ( OatesArea ) then
4751: LD_INT 9
4753: PPUSH
4754: CALL_OW 435
4758: IFFALSE 4808
// AddComCollect ( UnitFilter ( TeamOates , [ f_class , class_apeman_engineer ] ) , GetListOfCratesInArea ( OatesArea ) [ 1 ] , GetListOfCratesInArea ( OatesArea ) [ 2 ] ) ;
4760: LD_EXP 25
4764: PPUSH
4765: LD_INT 25
4767: PUSH
4768: LD_INT 16
4770: PUSH
4771: EMPTY
4772: LIST
4773: LIST
4774: PPUSH
4775: CALL_OW 72
4779: PPUSH
4780: LD_INT 9
4782: PPUSH
4783: CALL_OW 435
4787: PUSH
4788: LD_INT 1
4790: ARRAY
4791: PPUSH
4792: LD_INT 9
4794: PPUSH
4795: CALL_OW 435
4799: PUSH
4800: LD_INT 2
4802: ARRAY
4803: PPUSH
4804: CALL_OW 177
// for i in UnitFilter ( TeamOates , [ f_class , class_engineer ] ) do
4808: LD_ADDR_VAR 0 1
4812: PUSH
4813: LD_EXP 25
4817: PPUSH
4818: LD_INT 25
4820: PUSH
4821: LD_INT 2
4823: PUSH
4824: EMPTY
4825: LIST
4826: LIST
4827: PPUSH
4828: CALL_OW 72
4832: PUSH
4833: FOR_IN
4834: IFFALSE 4995
// begin if not HasTask ( i ) and OatesBuildList then
4836: LD_VAR 0 1
4840: PPUSH
4841: CALL_OW 314
4845: NOT
4846: PUSH
4847: LD_EXP 27
4851: AND
4852: IFFALSE 4993
// if OatesBuildList [ 1 ] [ 1 ] = b_depot or GetResourceType ( GetBase ( OatesDepot ) , mat_cans ) >= GetBuildingCost ( OatesBuildList [ 1 ] [ 1 ] ) [ 1 ] then
4854: LD_EXP 27
4858: PUSH
4859: LD_INT 1
4861: ARRAY
4862: PUSH
4863: LD_INT 1
4865: ARRAY
4866: PUSH
4867: LD_INT 0
4869: EQUAL
4870: PUSH
4871: LD_EXP 26
4875: PPUSH
4876: CALL_OW 274
4880: PPUSH
4881: LD_INT 1
4883: PPUSH
4884: CALL_OW 275
4888: PUSH
4889: LD_EXP 27
4893: PUSH
4894: LD_INT 1
4896: ARRAY
4897: PUSH
4898: LD_INT 1
4900: ARRAY
4901: PPUSH
4902: CALL_OW 556
4906: PUSH
4907: LD_INT 1
4909: ARRAY
4910: GREATEREQUAL
4911: OR
4912: IFFALSE 4993
// begin AddComBuild ( i , OatesBuildList [ 1 ] [ 1 ] , OatesBuildList [ 1 ] [ 2 ] , OatesBuildList [ 1 ] [ 3 ] , OatesBuildList [ 1 ] [ 4 ] ) ;
4914: LD_VAR 0 1
4918: PPUSH
4919: LD_EXP 27
4923: PUSH
4924: LD_INT 1
4926: ARRAY
4927: PUSH
4928: LD_INT 1
4930: ARRAY
4931: PPUSH
4932: LD_EXP 27
4936: PUSH
4937: LD_INT 1
4939: ARRAY
4940: PUSH
4941: LD_INT 2
4943: ARRAY
4944: PPUSH
4945: LD_EXP 27
4949: PUSH
4950: LD_INT 1
4952: ARRAY
4953: PUSH
4954: LD_INT 3
4956: ARRAY
4957: PPUSH
4958: LD_EXP 27
4962: PUSH
4963: LD_INT 1
4965: ARRAY
4966: PUSH
4967: LD_INT 4
4969: ARRAY
4970: PPUSH
4971: CALL_OW 205
// OatesBuildList = Delete ( OatesBuildList , 1 ) ;
4975: LD_ADDR_EXP 27
4979: PUSH
4980: LD_EXP 27
4984: PPUSH
4985: LD_INT 1
4987: PPUSH
4988: CALL_OW 3
4992: ST_TO_ADDR
// end ; end ;
4993: GO 4833
4995: POP
4996: POP
// if FilterAllUnits ( [ [ f_side , 7 ] , [ f_type , unit_building ] , [ f_ready ] ] ) = 5 then
4997: LD_INT 22
4999: PUSH
5000: LD_INT 7
5002: PUSH
5003: EMPTY
5004: LIST
5005: LIST
5006: PUSH
5007: LD_INT 21
5009: PUSH
5010: LD_INT 3
5012: PUSH
5013: EMPTY
5014: LIST
5015: LIST
5016: PUSH
5017: LD_INT 53
5019: PUSH
5020: EMPTY
5021: LIST
5022: PUSH
5023: EMPTY
5024: LIST
5025: LIST
5026: LIST
5027: PPUSH
5028: CALL_OW 69
5032: PUSH
5033: LD_INT 5
5035: EQUAL
5036: IFFALSE 5304
// begin if ExistMc ( OatesRepairStrategy ) and FilterAllUnits ( [ [ f_side , 1 ] , [ f_see , 7 ] ] ) then
5038: LD_EXP 28
5042: PPUSH
5043: CALL_OW 386
5047: PUSH
5048: LD_INT 22
5050: PUSH
5051: LD_INT 1
5053: PUSH
5054: EMPTY
5055: LIST
5056: LIST
5057: PUSH
5058: LD_INT 101
5060: PUSH
5061: LD_INT 7
5063: PUSH
5064: EMPTY
5065: LIST
5066: LIST
5067: PUSH
5068: EMPTY
5069: LIST
5070: LIST
5071: PPUSH
5072: CALL_OW 69
5076: AND
5077: IFFALSE 5134
// begin KillMc ( OatesRepairStrategy ) ;
5079: LD_EXP 28
5083: PPUSH
5084: CALL_OW 387
// for i in UnitFilter ( TeamOates , [ f_class , class_engineer ] ) do
5088: LD_ADDR_VAR 0 1
5092: PUSH
5093: LD_EXP 25
5097: PPUSH
5098: LD_INT 25
5100: PUSH
5101: LD_INT 2
5103: PUSH
5104: EMPTY
5105: LIST
5106: LIST
5107: PPUSH
5108: CALL_OW 72
5112: PUSH
5113: FOR_IN
5114: IFFALSE 5132
// ComEnterUnit ( i , OatesDepot ) ;
5116: LD_VAR 0 1
5120: PPUSH
5121: LD_EXP 26
5125: PPUSH
5126: CALL_OW 120
5130: GO 5113
5132: POP
5133: POP
// end ; if not ExistMc ( OatesRepairStrategy ) and not FilterAllUnits ( [ [ f_side , 1 ] , [ f_see , 7 ] ] ) then
5134: LD_EXP 28
5138: PPUSH
5139: CALL_OW 386
5143: NOT
5144: PUSH
5145: LD_INT 22
5147: PUSH
5148: LD_INT 1
5150: PUSH
5151: EMPTY
5152: LIST
5153: LIST
5154: PUSH
5155: LD_INT 101
5157: PUSH
5158: LD_INT 7
5160: PUSH
5161: EMPTY
5162: LIST
5163: LIST
5164: PUSH
5165: EMPTY
5166: LIST
5167: LIST
5168: PPUSH
5169: CALL_OW 69
5173: NOT
5174: AND
5175: IFFALSE 5304
// begin for i in UnitFilter ( TeamOates , [ f_class , class_engineer ] ) do
5177: LD_ADDR_VAR 0 1
5181: PUSH
5182: LD_EXP 25
5186: PPUSH
5187: LD_INT 25
5189: PUSH
5190: LD_INT 2
5192: PUSH
5193: EMPTY
5194: LIST
5195: LIST
5196: PPUSH
5197: CALL_OW 72
5201: PUSH
5202: FOR_IN
5203: IFFALSE 5216
// ComExitBuilding ( i ) ;
5205: LD_VAR 0 1
5209: PPUSH
5210: CALL_OW 122
5214: GO 5202
5216: POP
5217: POP
// OatesRepairStrategy = McRepair ( 1 , UnitFilter ( TeamOates , [ f_class , class_engineer ] ) , FilterAllUnits ( [ [ f_side , 7 ] , [ f_type , unit_building ] ] ) , [ [ mcr_bui_limit , 1000 ] , [ mcr_area_only , OatesArea ] ] ) ;
5218: LD_ADDR_EXP 28
5222: PUSH
5223: LD_INT 1
5225: PPUSH
5226: LD_EXP 25
5230: PPUSH
5231: LD_INT 25
5233: PUSH
5234: LD_INT 2
5236: PUSH
5237: EMPTY
5238: LIST
5239: LIST
5240: PPUSH
5241: CALL_OW 72
5245: PPUSH
5246: LD_INT 22
5248: PUSH
5249: LD_INT 7
5251: PUSH
5252: EMPTY
5253: LIST
5254: LIST
5255: PUSH
5256: LD_INT 21
5258: PUSH
5259: LD_INT 3
5261: PUSH
5262: EMPTY
5263: LIST
5264: LIST
5265: PUSH
5266: EMPTY
5267: LIST
5268: LIST
5269: PPUSH
5270: CALL_OW 69
5274: PPUSH
5275: LD_INT 6
5277: PUSH
5278: LD_INT 1000
5280: PUSH
5281: EMPTY
5282: LIST
5283: LIST
5284: PUSH
5285: LD_INT 3
5287: PUSH
5288: LD_INT 9
5290: PUSH
5291: EMPTY
5292: LIST
5293: LIST
5294: PUSH
5295: EMPTY
5296: LIST
5297: LIST
5298: PPUSH
5299: CALL_OW 414
5303: ST_TO_ADDR
// end ; end ; end ;
5304: PPOPN 1
5306: END
// export function PrepareAttack ( h , v , area ) ; var a , i , tmp ; begin
5307: LD_INT 0
5309: PPUSH
5310: PPUSH
5311: PPUSH
5312: PPUSH
// uc_side = 1 ;
5313: LD_ADDR_OWVAR 20
5317: PUSH
5318: LD_INT 1
5320: ST_TO_ADDR
// uc_nation = 1 ;
5321: LD_ADDR_OWVAR 21
5325: PUSH
5326: LD_INT 1
5328: ST_TO_ADDR
// InitHc ;
5329: CALL_OW 19
// for i = 1 to h do
5333: LD_ADDR_VAR 0 6
5337: PUSH
5338: DOUBLE
5339: LD_INT 1
5341: DEC
5342: ST_TO_ADDR
5343: LD_VAR 0 1
5347: PUSH
5348: FOR_TO
5349: IFFALSE 5423
// begin PrepareHuman ( false , class_soldier , [ Rand ( 3 , 5 ) , Rand ( 3 , 5 ) , Rand ( 4 , 5 ) ] [ difficulty ] ) ;
5351: LD_INT 0
5353: PPUSH
5354: LD_INT 1
5356: PPUSH
5357: LD_INT 3
5359: PPUSH
5360: LD_INT 5
5362: PPUSH
5363: CALL_OW 12
5367: PUSH
5368: LD_INT 3
5370: PPUSH
5371: LD_INT 5
5373: PPUSH
5374: CALL_OW 12
5378: PUSH
5379: LD_INT 4
5381: PPUSH
5382: LD_INT 5
5384: PPUSH
5385: CALL_OW 12
5389: PUSH
5390: EMPTY
5391: LIST
5392: LIST
5393: LIST
5394: PUSH
5395: LD_OWVAR 67
5399: ARRAY
5400: PPUSH
5401: CALL_OW 380
// tmp = tmp ^ CreateHuman ;
5405: LD_ADDR_VAR 0 7
5409: PUSH
5410: LD_VAR 0 7
5414: PUSH
5415: CALL_OW 44
5419: ADD
5420: ST_TO_ADDR
// end ;
5421: GO 5348
5423: POP
5424: POP
// for i = 1 to v do
5425: LD_ADDR_VAR 0 6
5429: PUSH
5430: DOUBLE
5431: LD_INT 1
5433: DEC
5434: ST_TO_ADDR
5435: LD_VAR 0 2
5439: PUSH
5440: FOR_TO
5441: IFFALSE 5516
// begin vc_chassis = us_medium_tracked ;
5443: LD_ADDR_OWVAR 37
5447: PUSH
5448: LD_INT 3
5450: ST_TO_ADDR
// vc_engine = engine_solar ;
5451: LD_ADDR_OWVAR 39
5455: PUSH
5456: LD_INT 2
5458: ST_TO_ADDR
// vc_control = control_manual ;
5459: LD_ADDR_OWVAR 38
5463: PUSH
5464: LD_INT 1
5466: ST_TO_ADDR
// vc_weapon = [ us_gatling_gun , us_light_gun , us_double_gun ] [ Rand ( 1 , 3 ) ] ;
5467: LD_ADDR_OWVAR 40
5471: PUSH
5472: LD_INT 4
5474: PUSH
5475: LD_INT 3
5477: PUSH
5478: LD_INT 5
5480: PUSH
5481: EMPTY
5482: LIST
5483: LIST
5484: LIST
5485: PUSH
5486: LD_INT 1
5488: PPUSH
5489: LD_INT 3
5491: PPUSH
5492: CALL_OW 12
5496: ARRAY
5497: ST_TO_ADDR
// tmp = tmp ^ CreateVehicle ;
5498: LD_ADDR_VAR 0 7
5502: PUSH
5503: LD_VAR 0 7
5507: PUSH
5508: CALL_OW 45
5512: ADD
5513: ST_TO_ADDR
// end ;
5514: GO 5440
5516: POP
5517: POP
// for i in tmp do
5518: LD_ADDR_VAR 0 6
5522: PUSH
5523: LD_VAR 0 7
5527: PUSH
5528: FOR_IN
5529: IFFALSE 5664
// begin PlaceUnitArea ( i , area , false ) ;
5531: LD_VAR 0 6
5535: PPUSH
5536: LD_VAR 0 3
5540: PPUSH
5541: LD_INT 0
5543: PPUSH
5544: CALL_OW 49
// if GetType ( i ) = unit_vehicle then
5548: LD_VAR 0 6
5552: PPUSH
5553: CALL_OW 247
5557: PUSH
5558: LD_INT 2
5560: EQUAL
5561: IFFALSE 5628
// begin PrepareMechanic ( false , [ Rand ( 3 , 4 ) , Rand ( 3 , 5 ) , Rand ( 4 , 5 ) ] [ difficulty ] ) ;
5563: LD_INT 0
5565: PPUSH
5566: LD_INT 3
5568: PPUSH
5569: LD_INT 4
5571: PPUSH
5572: CALL_OW 12
5576: PUSH
5577: LD_INT 3
5579: PPUSH
5580: LD_INT 5
5582: PPUSH
5583: CALL_OW 12
5587: PUSH
5588: LD_INT 4
5590: PPUSH
5591: LD_INT 5
5593: PPUSH
5594: CALL_OW 12
5598: PUSH
5599: EMPTY
5600: LIST
5601: LIST
5602: LIST
5603: PUSH
5604: LD_OWVAR 67
5608: ARRAY
5609: PPUSH
5610: CALL_OW 383
// PlaceHumanInUnit ( CreateHuman , i ) ;
5614: CALL_OW 44
5618: PPUSH
5619: LD_VAR 0 6
5623: PPUSH
5624: CALL_OW 52
// end ; ComAttackUnit ( i , NearestUnitToUnit ( FilterAllUnits ( [ f_enemy , 1 ] ) , i ) ) ;
5628: LD_VAR 0 6
5632: PPUSH
5633: LD_INT 81
5635: PUSH
5636: LD_INT 1
5638: PUSH
5639: EMPTY
5640: LIST
5641: LIST
5642: PPUSH
5643: CALL_OW 69
5647: PPUSH
5648: LD_VAR 0 6
5652: PPUSH
5653: CALL_OW 74
5657: PPUSH
5658: CALL_OW 115
// end ;
5662: GO 5528
5664: POP
5665: POP
// end ;
5666: LD_VAR 0 4
5670: RET
// every 0 0$1 do
5671: GO 5673
5673: DISABLE
// begin case OatesTimer of 1 .. 1 1$0 :
5674: LD_EXP 29
5678: PUSH
5679: LD_INT 1
5681: DOUBLE
5682: GREATEREQUAL
5683: IFFALSE 5691
5685: LD_INT 2100
5687: DOUBLE
5688: LESSEQUAL
5689: IFTRUE 5693
5691: GO 5703
5693: POP
// Wait ( 0 0$45 ) ; 1 1$0 + 1 .. 3 3$0 :
5694: LD_INT 1575
5696: PPUSH
5697: CALL_OW 67
5701: GO 5742
5703: LD_INT 2100
5705: PUSH
5706: LD_INT 1
5708: PLUS
5709: DOUBLE
5710: GREATEREQUAL
5711: IFFALSE 5719
5713: LD_INT 6300
5715: DOUBLE
5716: LESSEQUAL
5717: IFTRUE 5721
5719: GO 5739
5721: POP
// Wait ( Rand ( 1 1$0 , 1 1$30 ) ) ; else
5722: LD_INT 2100
5724: PPUSH
5725: LD_INT 3150
5727: PPUSH
5728: CALL_OW 12
5732: PPUSH
5733: CALL_OW 67
5737: GO 5742
5739: POP
// exit ; end ;
5740: GO 5764
// CreateCratesArea ( Rand ( 3 , 5 ) , OatesArea , true ) ;
5742: LD_INT 3
5744: PPUSH
5745: LD_INT 5
5747: PPUSH
5748: CALL_OW 12
5752: PPUSH
5753: LD_INT 9
5755: PPUSH
5756: LD_INT 1
5758: PPUSH
5759: CALL_OW 55
// enable ;
5763: ENABLE
// end ;
5764: END
// every 0 0$1 do
5765: GO 5767
5767: DISABLE
// begin case OatesTimer of 1 .. 5 5$0 :
5768: LD_EXP 29
5772: PUSH
5773: LD_INT 1
5775: DOUBLE
5776: GREATEREQUAL
5777: IFFALSE 5785
5779: LD_INT 10500
5781: DOUBLE
5782: LESSEQUAL
5783: IFTRUE 5787
5785: GO 5797
5787: POP
// Wait ( 5 5$0 ) ; 5 5$0 + 1 .. 10 10$0 :
5788: LD_INT 10500
5790: PPUSH
5791: CALL_OW 67
5795: GO 5954
5797: LD_INT 10500
5799: PUSH
5800: LD_INT 1
5802: PLUS
5803: DOUBLE
5804: GREATEREQUAL
5805: IFFALSE 5813
5807: LD_INT 21000
5809: DOUBLE
5810: LESSEQUAL
5811: IFTRUE 5815
5813: GO 5846
5815: POP
// begin Wait ( Rand ( 2 2$0 , 3 3$0 ) ) ;
5816: LD_INT 4200
5818: PPUSH
5819: LD_INT 6300
5821: PPUSH
5822: CALL_OW 12
5826: PPUSH
5827: CALL_OW 67
// PrepareAttack ( 2 , 0 , AttackEnter ) ;
5831: LD_INT 2
5833: PPUSH
5834: LD_INT 0
5836: PPUSH
5837: LD_INT 2
5839: PPUSH
5840: CALL 5307 0 3
// end ; 10 10$0 + 1 .. 30 30$0 :
5844: GO 5954
5846: LD_INT 21000
5848: PUSH
5849: LD_INT 1
5851: PLUS
5852: DOUBLE
5853: GREATEREQUAL
5854: IFFALSE 5862
5856: LD_INT 63000
5858: DOUBLE
5859: LESSEQUAL
5860: IFTRUE 5864
5862: GO 5951
5864: POP
// begin Wait ( Rand ( 2 2$30 , 3 3$30 ) ) ;
5865: LD_INT 5250
5867: PPUSH
5868: LD_INT 7350
5870: PPUSH
5871: CALL_OW 12
5875: PPUSH
5876: CALL_OW 67
// if Rand ( 1 , 2 ) = 1 then
5880: LD_INT 1
5882: PPUSH
5883: LD_INT 2
5885: PPUSH
5886: CALL_OW 12
5890: PUSH
5891: LD_INT 1
5893: EQUAL
5894: IFFALSE 5919
// PrepareAttack ( Rand ( 2 , 3 ) , 0 , SoldierAttack ) else
5896: LD_INT 2
5898: PPUSH
5899: LD_INT 3
5901: PPUSH
5902: CALL_OW 12
5906: PPUSH
5907: LD_INT 0
5909: PPUSH
5910: LD_INT 12
5912: PPUSH
5913: CALL 5307 0 3
5917: GO 5949
// PrepareAttack ( 2 , [ 1 , 2 , 3 ] [ difficulty ] , AttackEnter ) ;
5919: LD_INT 2
5921: PPUSH
5922: LD_INT 1
5924: PUSH
5925: LD_INT 2
5927: PUSH
5928: LD_INT 3
5930: PUSH
5931: EMPTY
5932: LIST
5933: LIST
5934: LIST
5935: PUSH
5936: LD_OWVAR 67
5940: ARRAY
5941: PPUSH
5942: LD_INT 2
5944: PPUSH
5945: CALL 5307 0 3
// end ; else
5949: GO 5954
5951: POP
// exit ; end ;
5952: GO 5955
// enable ;
5954: ENABLE
// end ; end_of_file
5955: END
// export function SaveAndWin ; var i , sib ; begin
5956: LD_INT 0
5958: PPUSH
5959: PPUSH
5960: PPUSH
// for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) do
5961: LD_ADDR_VAR 0 2
5965: PUSH
5966: LD_INT 22
5968: PUSH
5969: LD_INT 2
5971: PUSH
5972: EMPTY
5973: LIST
5974: LIST
5975: PUSH
5976: LD_INT 2
5978: PUSH
5979: LD_INT 30
5981: PUSH
5982: LD_INT 0
5984: PUSH
5985: EMPTY
5986: LIST
5987: LIST
5988: PUSH
5989: LD_INT 30
5991: PUSH
5992: LD_INT 1
5994: PUSH
5995: EMPTY
5996: LIST
5997: LIST
5998: PUSH
5999: EMPTY
6000: LIST
6001: LIST
6002: LIST
6003: PUSH
6004: EMPTY
6005: LIST
6006: LIST
6007: PPUSH
6008: CALL_OW 69
6012: PUSH
6013: FOR_IN
6014: IFFALSE 6047
// sib = sib + GetResourceType ( GetBase ( i ) , mat_siberit ) ;
6016: LD_ADDR_VAR 0 3
6020: PUSH
6021: LD_VAR 0 3
6025: PUSH
6026: LD_VAR 0 2
6030: PPUSH
6031: CALL_OW 274
6035: PPUSH
6036: LD_INT 3
6038: PPUSH
6039: CALL_OW 275
6043: PLUS
6044: ST_TO_ADDR
6045: GO 6013
6047: POP
6048: POP
// if sib >= 50 then
6049: LD_VAR 0 3
6053: PUSH
6054: LD_INT 50
6056: GREATEREQUAL
6057: IFFALSE 6071
// AddMedal ( MSiberite , 1 ) else
6059: LD_STRING MSiberite
6061: PPUSH
6062: LD_INT 1
6064: PPUSH
6065: CALL_OW 101
6069: GO 6082
// AddMedal ( MSiberite , - 1 ) ;
6071: LD_STRING MSiberite
6073: PPUSH
6074: LD_INT 1
6076: NEG
6077: PPUSH
6078: CALL_OW 101
// if PowerDone then
6082: LD_EXP 6
6086: IFFALSE 6100
// AddMedal ( MPower , 1 ) else
6088: LD_STRING MPower
6090: PPUSH
6091: LD_INT 1
6093: PPUSH
6094: CALL_OW 101
6098: GO 6111
// AddMedal ( MPower , - 1 ) ;
6100: LD_STRING MPower
6102: PPUSH
6103: LD_INT 1
6105: NEG
6106: PPUSH
6107: CALL_OW 101
// if MortarDone then
6111: LD_EXP 5
6115: IFFALSE 6129
// AddMedal ( MMortar , 1 ) else
6117: LD_STRING MMortar
6119: PPUSH
6120: LD_INT 1
6122: PPUSH
6123: CALL_OW 101
6127: GO 6140
// AddMedal ( MMortar , - 1 ) ;
6129: LD_STRING MMortar
6131: PPUSH
6132: LD_INT 1
6134: NEG
6135: PPUSH
6136: CALL_OW 101
// GiveMedals ( Main ) ;
6140: LD_STRING Main
6142: PPUSH
6143: CALL_OW 102
// RewardPeople ( Antoine ^ Gom ^ TeamGom ) ;
6147: LD_EXP 1
6151: PUSH
6152: LD_EXP 2
6156: ADD
6157: PUSH
6158: LD_EXP 4
6162: ADD
6163: PPUSH
6164: CALL_OW 43
// SaveCharacters ( Antoine , Antoine ) ;
6168: LD_EXP 1
6172: PPUSH
6173: LD_STRING Antoine
6175: PPUSH
6176: CALL_OW 38
// SaveCharacters ( Gom , Gom ) ;
6180: LD_EXP 2
6184: PPUSH
6185: LD_STRING Gom
6187: PPUSH
6188: CALL_OW 38
// SaveCharacters ( UnitFilter ( TeamGom , [ f_alive ] ) , TeamGom ) ;
6192: LD_EXP 4
6196: PPUSH
6197: LD_INT 51
6199: PUSH
6200: EMPTY
6201: LIST
6202: PPUSH
6203: CALL_OW 72
6207: PPUSH
6208: LD_STRING TeamGom
6210: PPUSH
6211: CALL_OW 38
// SaveCharacters ( Oates , Oates ) ;
6215: LD_EXP 24
6219: PPUSH
6220: LD_STRING Oates
6222: PPUSH
6223: CALL_OW 38
// YouWin ;
6227: CALL_OW 103
// end ; end_of_file
6231: LD_VAR 0 1
6235: RET
// export ArabianDepot ; every 0 0$1 do var i ;
6236: GO 6238
6238: DISABLE
6239: LD_INT 0
6241: PPUSH
// begin Randomize ;
6242: CALL_OW 10
// Wait ( Rand ( 1 1$0 , 2 2$30 ) ) ;
6246: LD_INT 2100
6248: PPUSH
6249: LD_INT 5250
6251: PPUSH
6252: CALL_OW 12
6256: PPUSH
6257: CALL_OW 67
// for i in [ AntoinePosition , AmericanOutpost , AmericanDefenceArea ] do
6261: LD_ADDR_VAR 0 1
6265: PUSH
6266: LD_INT 6
6268: PUSH
6269: LD_INT 7
6271: PUSH
6272: LD_INT 4
6274: PUSH
6275: EMPTY
6276: LIST
6277: LIST
6278: LIST
6279: PUSH
6280: FOR_IN
6281: IFFALSE 6323
// begin CreateCratesArea ( Rand ( 4 , 5 ) , i , true ) ;
6283: LD_INT 4
6285: PPUSH
6286: LD_INT 5
6288: PPUSH
6289: CALL_OW 12
6293: PPUSH
6294: LD_VAR 0 1
6298: PPUSH
6299: LD_INT 1
6301: PPUSH
6302: CALL_OW 55
// Wait ( Rand ( 0 0$20 , 1 1$0 ) ) ;
6306: LD_INT 700
6308: PPUSH
6309: LD_INT 2100
6311: PPUSH
6312: CALL_OW 12
6316: PPUSH
6317: CALL_OW 67
// end ;
6321: GO 6280
6323: POP
6324: POP
// enable ;
6325: ENABLE
// end ;
6326: PPOPN 1
6328: END
// every 0 0$1 do
6329: GO 6331
6331: DISABLE
// begin Wait ( Rand ( 1 1$0 , 2 2$0 ) ) ;
6332: LD_INT 2100
6334: PPUSH
6335: LD_INT 4200
6337: PPUSH
6338: CALL_OW 12
6342: PPUSH
6343: CALL_OW 67
// CreateCratesArea ( Rand ( 2 , 4 ) , AmericanBase , true ) ;
6347: LD_INT 2
6349: PPUSH
6350: LD_INT 4
6352: PPUSH
6353: CALL_OW 12
6357: PPUSH
6358: LD_INT 3
6360: PPUSH
6361: LD_INT 1
6363: PPUSH
6364: CALL_OW 55
// enable ;
6368: ENABLE
// end ;
6369: END
// on ResearchComplete ( t , l ) do begin if t = tech_Mortar then
6370: LD_VAR 0 1
6374: PUSH
6375: LD_INT 41
6377: EQUAL
6378: IFFALSE 6389
// DMortar ( l ) ;
6380: LD_VAR 0 2
6384: PPUSH
6385: CALL 1153 0 1
// if t = tech_SibPow then
6389: LD_VAR 0 1
6393: PUSH
6394: LD_INT 21
6396: EQUAL
6397: IFFALSE 6408
// DSibPower ( l ) ;
6399: LD_VAR 0 2
6403: PPUSH
6404: CALL 1357 0 1
// if t = tech_Sib2 then
6408: LD_VAR 0 1
6412: PUSH
6413: LD_INT 55
6415: EQUAL
6416: IFFALSE 6426
// begin PrepareOates ;
6418: CALL 4336 0 0
// DOates ;
6422: CALL 1481 0 0
// end ; end ;
6426: PPOPN 2
6428: END
// on BuildingComplete ( b ) do var u ;
6429: LD_INT 0
6431: PPUSH
// begin if GetSide ( b ) = 2 and GetBType ( b ) = b_depot and not ArabianDepot then
6432: LD_VAR 0 1
6436: PPUSH
6437: CALL_OW 255
6441: PUSH
6442: LD_INT 2
6444: EQUAL
6445: PUSH
6446: LD_VAR 0 1
6450: PPUSH
6451: CALL_OW 266
6455: PUSH
6456: LD_INT 0
6458: EQUAL
6459: AND
6460: PUSH
6461: LD_EXP 30
6465: NOT
6466: AND
6467: IFFALSE 6479
// ArabianDepot = b ;
6469: LD_ADDR_EXP 30
6473: PUSH
6474: LD_VAR 0 1
6478: ST_TO_ADDR
// if GetSide ( b ) = 2 and GetBType ( b ) = b_siberite_power then
6479: LD_VAR 0 1
6483: PPUSH
6484: CALL_OW 255
6488: PUSH
6489: LD_INT 2
6491: EQUAL
6492: PUSH
6493: LD_VAR 0 1
6497: PPUSH
6498: CALL_OW 266
6502: PUSH
6503: LD_INT 28
6505: EQUAL
6506: AND
6507: IFFALSE 6524
// begin PowerDone = true ;
6509: LD_ADDR_EXP 6
6513: PUSH
6514: LD_INT 1
6516: ST_TO_ADDR
// ChangeMissionObjectives ( OPowerOut ) ;
6517: LD_STRING OPowerOut
6519: PPUSH
6520: CALL_OW 337
// end ; if GetSide ( b ) = 7 and GetBType ( b ) = b_depot then
6524: LD_VAR 0 1
6528: PPUSH
6529: CALL_OW 255
6533: PUSH
6534: LD_INT 7
6536: EQUAL
6537: PUSH
6538: LD_VAR 0 1
6542: PPUSH
6543: CALL_OW 266
6547: PUSH
6548: LD_INT 0
6550: EQUAL
6551: AND
6552: IFFALSE 6564
// OatesDepot = b ;
6554: LD_ADDR_EXP 26
6558: PUSH
6559: LD_VAR 0 1
6563: ST_TO_ADDR
// if GetSide ( b ) = 7 and GetBType ( b ) = b_breastwork then
6564: LD_VAR 0 1
6568: PPUSH
6569: CALL_OW 255
6573: PUSH
6574: LD_INT 7
6576: EQUAL
6577: PUSH
6578: LD_VAR 0 1
6582: PPUSH
6583: CALL_OW 266
6587: PUSH
6588: LD_INT 31
6590: EQUAL
6591: AND
6592: IFFALSE 6652
// begin u = NearestUnitToUnit ( FilterAllUnits ( [ [ f_side , 7 ] , [ f_class , class_soldier ] ] ) , b ) ;
6594: LD_ADDR_VAR 0 2
6598: PUSH
6599: LD_INT 22
6601: PUSH
6602: LD_INT 7
6604: PUSH
6605: EMPTY
6606: LIST
6607: LIST
6608: PUSH
6609: LD_INT 25
6611: PUSH
6612: LD_INT 1
6614: PUSH
6615: EMPTY
6616: LIST
6617: LIST
6618: PUSH
6619: EMPTY
6620: LIST
6621: LIST
6622: PPUSH
6623: CALL_OW 69
6627: PPUSH
6628: LD_VAR 0 1
6632: PPUSH
6633: CALL_OW 74
6637: ST_TO_ADDR
// ComEnterUnit ( u , b ) ;
6638: LD_VAR 0 2
6642: PPUSH
6643: LD_VAR 0 1
6647: PPUSH
6648: CALL_OW 120
// end ; end ;
6652: PPOPN 2
6654: END
// on UnitGoesToRed ( u ) do begin if GetSide ( u ) = 1 and not VehsDiscovered then
6655: LD_VAR 0 1
6659: PPUSH
6660: CALL_OW 255
6664: PUSH
6665: LD_INT 1
6667: EQUAL
6668: PUSH
6669: LD_EXP 7
6673: NOT
6674: AND
6675: IFFALSE 6724
// if GetControl ( u ) = control_remote or GetControl ( u ) = control_computer then
6677: LD_VAR 0 1
6681: PPUSH
6682: CALL_OW 263
6686: PUSH
6687: LD_INT 2
6689: EQUAL
6690: PUSH
6691: LD_VAR 0 1
6695: PPUSH
6696: CALL_OW 263
6700: PUSH
6701: LD_INT 3
6703: EQUAL
6704: OR
6705: IFFALSE 6724
// begin VehsDiscovered = true ;
6707: LD_ADDR_EXP 7
6711: PUSH
6712: LD_INT 1
6714: ST_TO_ADDR
// DVehsDiscovered ( u ) ;
6715: LD_VAR 0 1
6719: PPUSH
6720: CALL 1248 0 1
// end ; end ;
6724: PPOPN 1
6726: END
// on UnitDestroyed ( u ) do begin if u = Antoine then
6727: LD_VAR 0 1
6731: PUSH
6732: LD_EXP 1
6736: EQUAL
6737: IFFALSE 6746
// YouLost ( AntoineDead ) ;
6739: LD_STRING AntoineDead
6741: PPUSH
6742: CALL_OW 104
// if u = Gom then
6746: LD_VAR 0 1
6750: PUSH
6751: LD_EXP 2
6755: EQUAL
6756: IFFALSE 6765
// YouLost ( LucyDead ) ;
6758: LD_STRING LucyDead
6760: PPUSH
6761: CALL_OW 104
// if GetSide ( u ) = 7 then
6765: LD_VAR 0 1
6769: PPUSH
6770: CALL_OW 255
6774: PUSH
6775: LD_INT 7
6777: EQUAL
6778: IFFALSE 6807
// begin DialogueOn ;
6780: CALL_OW 6
// SayRadio ( Kuronski , dx-o-1 ) ;
6784: LD_EXP 23
6788: PPUSH
6789: LD_STRING dx-o-1
6791: PPUSH
6792: CALL_OW 94
// DialogueOff ;
6796: CALL_OW 7
// YouLost ( OatesDead ) ;
6800: LD_STRING OatesDead
6802: PPUSH
6803: CALL_OW 104
// end ; end ;
6807: PPOPN 1
6809: END
// every 0 0$1 trigger GetAttitude ( 7 , 2 ) = att_enemy do
6810: LD_INT 7
6812: PPUSH
6813: LD_INT 2
6815: PPUSH
6816: CALL_OW 81
6820: PUSH
6821: LD_INT 2
6823: EQUAL
6824: IFFALSE 6856
6826: GO 6828
6828: DISABLE
// begin DialogueOn ;
6829: CALL_OW 6
// SayRadio ( Kuronski , dx-o-1 ) ;
6833: LD_EXP 23
6837: PPUSH
6838: LD_STRING dx-o-1
6840: PPUSH
6841: CALL_OW 94
// DialogueOff ;
6845: CALL_OW 7
// YouLost ( OatesDead ) ;
6849: LD_STRING OatesDead
6851: PPUSH
6852: CALL_OW 104
// end ; end_of_file
6856: END
// export function PrepareBase ( side , area , skill , workshop , lab , armoury , engineers ) ; var i , j , h ; begin
6857: LD_INT 0
6859: PPUSH
6860: PPUSH
6861: PPUSH
6862: PPUSH
// InitHc ;
6863: CALL_OW 19
// for i in FilterUnitsInArea ( area , [ [ f_side , side ] , [ f_type , unit_building ] ] ) do
6867: LD_ADDR_VAR 0 9
6871: PUSH
6872: LD_VAR 0 2
6876: PPUSH
6877: LD_INT 22
6879: PUSH
6880: LD_VAR 0 1
6884: PUSH
6885: EMPTY
6886: LIST
6887: LIST
6888: PUSH
6889: LD_INT 21
6891: PUSH
6892: LD_INT 3
6894: PUSH
6895: EMPTY
6896: LIST
6897: LIST
6898: PUSH
6899: EMPTY
6900: LIST
6901: LIST
6902: PPUSH
6903: CALL_OW 70
6907: PUSH
6908: FOR_IN
6909: IFFALSE 7396
// case GetBType ( i ) of b_depot , b_warehouse :
6911: LD_VAR 0 9
6915: PPUSH
6916: CALL_OW 266
6920: PUSH
6921: LD_INT 0
6923: DOUBLE
6924: EQUAL
6925: IFTRUE 6935
6927: LD_INT 1
6929: DOUBLE
6930: EQUAL
6931: IFTRUE 6935
6933: GO 7077
6935: POP
// for j = 1 to engineers do
6936: LD_ADDR_VAR 0 10
6940: PUSH
6941: DOUBLE
6942: LD_INT 1
6944: DEC
6945: ST_TO_ADDR
6946: LD_VAR 0 7
6950: PUSH
6951: FOR_TO
6952: IFFALSE 7073
// begin PrepareEngineer ( Rand ( 1 , 2 ) , skill ) ;
6954: LD_INT 1
6956: PPUSH
6957: LD_INT 2
6959: PPUSH
6960: CALL_OW 12
6964: PPUSH
6965: LD_VAR 0 3
6969: PPUSH
6970: CALL_OW 382
// h = CreateHuman ;
6974: LD_ADDR_VAR 0 11
6978: PUSH
6979: CALL_OW 44
6983: ST_TO_ADDR
// PlaceUnitXYR ( h , ShiftX ( GetX ( i ) , GetDir ( i ) , Rand ( 4 , 10 ) ) , ShiftY ( GetY ( i ) , GetDir ( i ) , Rand ( 4 , 10 ) ) , 8 , false ) ;
6984: LD_VAR 0 11
6988: PPUSH
6989: LD_VAR 0 9
6993: PPUSH
6994: CALL_OW 250
6998: PPUSH
6999: LD_VAR 0 9
7003: PPUSH
7004: CALL_OW 254
7008: PPUSH
7009: LD_INT 4
7011: PPUSH
7012: LD_INT 10
7014: PPUSH
7015: CALL_OW 12
7019: PPUSH
7020: CALL_OW 272
7024: PPUSH
7025: LD_VAR 0 9
7029: PPUSH
7030: CALL_OW 251
7034: PPUSH
7035: LD_VAR 0 9
7039: PPUSH
7040: CALL_OW 254
7044: PPUSH
7045: LD_INT 4
7047: PPUSH
7048: LD_INT 10
7050: PPUSH
7051: CALL_OW 12
7055: PPUSH
7056: CALL_OW 273
7060: PPUSH
7061: LD_INT 8
7063: PPUSH
7064: LD_INT 0
7066: PPUSH
7067: CALL_OW 50
// end ; b_armoury , b_barracks :
7071: GO 6951
7073: POP
7074: POP
7075: GO 7394
7077: LD_INT 4
7079: DOUBLE
7080: EQUAL
7081: IFTRUE 7091
7083: LD_INT 5
7085: DOUBLE
7086: EQUAL
7087: IFTRUE 7091
7089: GO 7160
7091: POP
// for j = 1 to armoury do
7092: LD_ADDR_VAR 0 10
7096: PUSH
7097: DOUBLE
7098: LD_INT 1
7100: DEC
7101: ST_TO_ADDR
7102: LD_VAR 0 6
7106: PUSH
7107: FOR_TO
7108: IFFALSE 7156
// begin PrepareSoldier ( Rand ( 1 , 2 ) , skill ) ;
7110: LD_INT 1
7112: PPUSH
7113: LD_INT 2
7115: PPUSH
7116: CALL_OW 12
7120: PPUSH
7121: LD_VAR 0 3
7125: PPUSH
7126: CALL_OW 381
// h = CreateHuman ;
7130: LD_ADDR_VAR 0 11
7134: PUSH
7135: CALL_OW 44
7139: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7140: LD_VAR 0 11
7144: PPUSH
7145: LD_VAR 0 9
7149: PPUSH
7150: CALL_OW 52
// end ; b_lab_basic , b_lab_half , b_lab_full :
7154: GO 7107
7156: POP
7157: POP
7158: GO 7394
7160: LD_INT 9
7162: DOUBLE
7163: EQUAL
7164: IFTRUE 7180
7166: LD_INT 7
7168: DOUBLE
7169: EQUAL
7170: IFTRUE 7180
7172: LD_INT 8
7174: DOUBLE
7175: EQUAL
7176: IFTRUE 7180
7178: GO 7249
7180: POP
// for j = 1 to lab do
7181: LD_ADDR_VAR 0 10
7185: PUSH
7186: DOUBLE
7187: LD_INT 1
7189: DEC
7190: ST_TO_ADDR
7191: LD_VAR 0 5
7195: PUSH
7196: FOR_TO
7197: IFFALSE 7245
// begin PrepareScientist ( Rand ( 1 , 2 ) , skill ) ;
7199: LD_INT 1
7201: PPUSH
7202: LD_INT 2
7204: PPUSH
7205: CALL_OW 12
7209: PPUSH
7210: LD_VAR 0 3
7214: PPUSH
7215: CALL_OW 384
// h = CreateHuman ;
7219: LD_ADDR_VAR 0 11
7223: PUSH
7224: CALL_OW 44
7228: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7229: LD_VAR 0 11
7233: PPUSH
7234: LD_VAR 0 9
7238: PPUSH
7239: CALL_OW 52
// end ; b_workshop , b_factory :
7243: GO 7196
7245: POP
7246: POP
7247: GO 7394
7249: LD_INT 2
7251: DOUBLE
7252: EQUAL
7253: IFTRUE 7263
7255: LD_INT 3
7257: DOUBLE
7258: EQUAL
7259: IFTRUE 7263
7261: GO 7332
7263: POP
// for j = 1 to workshop do
7264: LD_ADDR_VAR 0 10
7268: PUSH
7269: DOUBLE
7270: LD_INT 1
7272: DEC
7273: ST_TO_ADDR
7274: LD_VAR 0 4
7278: PUSH
7279: FOR_TO
7280: IFFALSE 7328
// begin PrepareMechanic ( Rand ( 1 , 2 ) , skill ) ;
7282: LD_INT 1
7284: PPUSH
7285: LD_INT 2
7287: PPUSH
7288: CALL_OW 12
7292: PPUSH
7293: LD_VAR 0 3
7297: PPUSH
7298: CALL_OW 383
// h = CreateHuman ;
7302: LD_ADDR_VAR 0 11
7306: PUSH
7307: CALL_OW 44
7311: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7312: LD_VAR 0 11
7316: PPUSH
7317: LD_VAR 0 9
7321: PPUSH
7322: CALL_OW 52
// end ; b_breastwork , b_bunker :
7326: GO 7279
7328: POP
7329: POP
7330: GO 7394
7332: LD_INT 31
7334: DOUBLE
7335: EQUAL
7336: IFTRUE 7346
7338: LD_INT 32
7340: DOUBLE
7341: EQUAL
7342: IFTRUE 7346
7344: GO 7393
7346: POP
// begin PrepareSoldier ( Rand ( 1 , 2 ) , skill ) ;
7347: LD_INT 1
7349: PPUSH
7350: LD_INT 2
7352: PPUSH
7353: CALL_OW 12
7357: PPUSH
7358: LD_VAR 0 3
7362: PPUSH
7363: CALL_OW 381
// h = CreateHuman ;
7367: LD_ADDR_VAR 0 11
7371: PUSH
7372: CALL_OW 44
7376: ST_TO_ADDR
// PlaceHumanInUnit ( h , i ) ;
7377: LD_VAR 0 11
7381: PPUSH
7382: LD_VAR 0 9
7386: PPUSH
7387: CALL_OW 52
// end ; end ;
7391: GO 7394
7393: POP
7394: GO 6908
7396: POP
7397: POP
// end ;
7398: LD_VAR 0 8
7402: RET
// export function WhoDiscovered ( side , target ) ; var i ; begin
7403: LD_INT 0
7405: PPUSH
7406: PPUSH
// i = NearestUnitToUnit ( FilterAllUnits ( [ [ f_side , side ] , [ f_not , [ f_nation , nation_nature ] ] ] ) , target [ 1 ] ) ;
7407: LD_ADDR_VAR 0 4
7411: PUSH
7412: LD_INT 22
7414: PUSH
7415: LD_VAR 0 1
7419: PUSH
7420: EMPTY
7421: LIST
7422: LIST
7423: PUSH
7424: LD_INT 3
7426: PUSH
7427: LD_INT 23
7429: PUSH
7430: LD_INT 0
7432: PUSH
7433: EMPTY
7434: LIST
7435: LIST
7436: PUSH
7437: EMPTY
7438: LIST
7439: LIST
7440: PUSH
7441: EMPTY
7442: LIST
7443: LIST
7444: PPUSH
7445: CALL_OW 69
7449: PPUSH
7450: LD_VAR 0 2
7454: PUSH
7455: LD_INT 1
7457: ARRAY
7458: PPUSH
7459: CALL_OW 74
7463: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
7464: LD_VAR 0 4
7468: PPUSH
7469: CALL_OW 247
7473: PUSH
7474: LD_INT 2
7476: EQUAL
7477: IFFALSE 7541
// if GetControl ( i ) = control_manual then
7479: LD_VAR 0 4
7483: PPUSH
7484: CALL_OW 263
7488: PUSH
7489: LD_INT 1
7491: EQUAL
7492: IFFALSE 7511
// i = IsDrivenBy ( i ) else
7494: LD_ADDR_VAR 0 4
7498: PUSH
7499: LD_VAR 0 4
7503: PPUSH
7504: CALL_OW 311
7508: ST_TO_ADDR
7509: GO 7541
// if GetControl ( i ) = control_remote then
7511: LD_VAR 0 4
7515: PPUSH
7516: CALL_OW 263
7520: PUSH
7521: LD_INT 2
7523: EQUAL
7524: IFFALSE 7541
// i = IsControledBy ( i ) ;
7526: LD_ADDR_VAR 0 4
7530: PUSH
7531: LD_VAR 0 4
7535: PPUSH
7536: CALL_OW 312
7540: ST_TO_ADDR
// if GetType ( i ) = unit_building then
7541: LD_VAR 0 4
7545: PPUSH
7546: CALL_OW 247
7550: PUSH
7551: LD_INT 3
7553: EQUAL
7554: IFFALSE 7597
// i = UnitFilter ( UnitsInside ( i ) , [ f_not , [ f_nation , nation_nature ] ] ) [ 1 ] ;
7556: LD_ADDR_VAR 0 4
7560: PUSH
7561: LD_VAR 0 4
7565: PPUSH
7566: CALL_OW 313
7570: PPUSH
7571: LD_INT 3
7573: PUSH
7574: LD_INT 23
7576: PUSH
7577: LD_INT 0
7579: PUSH
7580: EMPTY
7581: LIST
7582: LIST
7583: PUSH
7584: EMPTY
7585: LIST
7586: LIST
7587: PPUSH
7588: CALL_OW 72
7592: PUSH
7593: LD_INT 1
7595: ARRAY
7596: ST_TO_ADDR
// if not GetType ( i ) = unit_human then
7597: LD_VAR 0 4
7601: PPUSH
7602: CALL_OW 247
7606: PUSH
7607: LD_INT 1
7609: EQUAL
7610: NOT
7611: IFFALSE 7671
// i = FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , [ f_not , [ f_nation , nation_nature ] ] ] ) [ 1 ] ;
7613: LD_ADDR_VAR 0 4
7617: PUSH
7618: LD_INT 22
7620: PUSH
7621: LD_VAR 0 1
7625: PUSH
7626: EMPTY
7627: LIST
7628: LIST
7629: PUSH
7630: LD_INT 21
7632: PUSH
7633: LD_INT 1
7635: PUSH
7636: EMPTY
7637: LIST
7638: LIST
7639: PUSH
7640: LD_INT 3
7642: PUSH
7643: LD_INT 23
7645: PUSH
7646: LD_INT 0
7648: PUSH
7649: EMPTY
7650: LIST
7651: LIST
7652: PUSH
7653: EMPTY
7654: LIST
7655: LIST
7656: PUSH
7657: EMPTY
7658: LIST
7659: LIST
7660: LIST
7661: PPUSH
7662: CALL_OW 69
7666: PUSH
7667: LD_INT 1
7669: ARRAY
7670: ST_TO_ADDR
// result = i ;
7671: LD_ADDR_VAR 0 3
7675: PUSH
7676: LD_VAR 0 4
7680: ST_TO_ADDR
// end ;
7681: LD_VAR 0 3
7685: RET
