// export CaptureAmBase ; export FarmerDepot ; export start_americans , ConvoyAmericans_List , AmConvoySeePlayer , AmConvoyEscapeFromMap , AmConvoyEscapedFromPlayer , AmAlarmAttack , ConvoyPlaced ; export attacksCounter ; export first_wave , second_wave , third_wave , fourth_wave ; export waveDialog , waveDialogBlock ; export main_crate_goal , secondary_crate_goal , crates_other_needs ; export americans_attacking , attack_times ; export Americans_are_evacuating , Americans_have_evacuated , Americans_got_away ; export aviradze_plant_gathering , tamed_apemen , num_apeman_soldiers , first_armoury ; export first_workshop , first_lab , first_oil_mine , first_vehicle ; export GameCounterShow ; export SpottedAmericansBase ; export KilledAmSci_02 ; export first_shipment_have_been_sent ; export OtherTechHint ; export testing ; starting begin Resetfog ;
   0: CALL_OW 335
// testing = false ;
   4: LD_ADDR_EXP 38
   8: PUSH
   9: LD_INT 0
  11: ST_TO_ADDR
// KilledAmSci_02 = LoadVariable ( scientists_got_away_02 , 1 ) ;
  12: LD_ADDR_EXP 35
  16: PUSH
  17: LD_STRING scientists_got_away_02
  19: PPUSH
  20: LD_INT 1
  22: PPUSH
  23: CALL_OW 30
  27: ST_TO_ADDR
// CaptureAmBase = false ;
  28: LD_ADDR_EXP 1
  32: PUSH
  33: LD_INT 0
  35: ST_TO_ADDR
// Americans_are_evacuating = false ;
  36: LD_ADDR_EXP 22
  40: PUSH
  41: LD_INT 0
  43: ST_TO_ADDR
// Americans_have_evacuated = false ;
  44: LD_ADDR_EXP 23
  48: PUSH
  49: LD_INT 0
  51: ST_TO_ADDR
// Americans_got_away = false ;
  52: LD_ADDR_EXP 24
  56: PUSH
  57: LD_INT 0
  59: ST_TO_ADDR
// SpottedAmericansBase = false ;
  60: LD_ADDR_EXP 34
  64: PUSH
  65: LD_INT 0
  67: ST_TO_ADDR
// AmConvoySeePlayer = false ;
  68: LD_ADDR_EXP 5
  72: PUSH
  73: LD_INT 0
  75: ST_TO_ADDR
// AmConvoyEscapeFromMap = false ;
  76: LD_ADDR_EXP 6
  80: PUSH
  81: LD_INT 0
  83: ST_TO_ADDR
// AmConvoyEscapedFromPlayer = false ;
  84: LD_ADDR_EXP 7
  88: PUSH
  89: LD_INT 0
  91: ST_TO_ADDR
// first_shipment_have_been_sent = false ;
  92: LD_ADDR_EXP 36
  96: PUSH
  97: LD_INT 0
  99: ST_TO_ADDR
// GameCounterShow = 0 ;
 100: LD_ADDR_EXP 33
 104: PUSH
 105: LD_INT 0
 107: ST_TO_ADDR
// first_workshop = true ;
 108: LD_ADDR_EXP 29
 112: PUSH
 113: LD_INT 1
 115: ST_TO_ADDR
// first_lab = true ;
 116: LD_ADDR_EXP 30
 120: PUSH
 121: LD_INT 1
 123: ST_TO_ADDR
// first_armoury = true ;
 124: LD_ADDR_EXP 28
 128: PUSH
 129: LD_INT 1
 131: ST_TO_ADDR
// first_oil_mine = true ;
 132: LD_ADDR_EXP 31
 136: PUSH
 137: LD_INT 1
 139: ST_TO_ADDR
// first_vehicle = true ;
 140: LD_ADDR_EXP 32
 144: PUSH
 145: LD_INT 1
 147: ST_TO_ADDR
// main_crate_goal = 350 ;
 148: LD_ADDR_EXP 17
 152: PUSH
 153: LD_INT 350
 155: ST_TO_ADDR
// secondary_crate_goal = 450 ;
 156: LD_ADDR_EXP 18
 160: PUSH
 161: LD_INT 450
 163: ST_TO_ADDR
// crates_other_needs = 140 ;
 164: LD_ADDR_EXP 19
 168: PUSH
 169: LD_INT 140
 171: ST_TO_ADDR
// attacksCounter = 1 ;
 172: LD_ADDR_EXP 10
 176: PUSH
 177: LD_INT 1
 179: ST_TO_ADDR
// waveDialog = 0 ;
 180: LD_ADDR_EXP 15
 184: PUSH
 185: LD_INT 0
 187: ST_TO_ADDR
// waveDialogBlock = 0 ;
 188: LD_ADDR_EXP 16
 192: PUSH
 193: LD_INT 0
 195: ST_TO_ADDR
// lastCrates = 0 ;
 196: LD_ADDR_EXP 58
 200: PUSH
 201: LD_INT 0
 203: ST_TO_ADDR
// aviradze_plant_gathering = [ 2 , 2 , 2 ] ;
 204: LD_ADDR_EXP 25
 208: PUSH
 209: LD_INT 2
 211: PUSH
 212: LD_INT 2
 214: PUSH
 215: LD_INT 2
 217: PUSH
 218: EMPTY
 219: LIST
 220: LIST
 221: LIST
 222: ST_TO_ADDR
// attack_times = [ ] ;
 223: LD_ADDR_EXP 21
 227: PUSH
 228: EMPTY
 229: ST_TO_ADDR
// ConvoyAmericans_List = [ ] ;
 230: LD_ADDR_EXP 4
 234: PUSH
 235: EMPTY
 236: ST_TO_ADDR
// first_wave = [ ] ;
 237: LD_ADDR_EXP 11
 241: PUSH
 242: EMPTY
 243: ST_TO_ADDR
// second_wave = [ ] ;
 244: LD_ADDR_EXP 12
 248: PUSH
 249: EMPTY
 250: ST_TO_ADDR
// third_wave = [ ] ;
 251: LD_ADDR_EXP 13
 255: PUSH
 256: EMPTY
 257: ST_TO_ADDR
// fourth_wave = [ ] ;
 258: LD_ADDR_EXP 14
 262: PUSH
 263: EMPTY
 264: ST_TO_ADDR
// SetTech ( tech_Weap1 , 2 , state_enabled ) ;
 265: LD_INT 51
 267: PPUSH
 268: LD_INT 2
 270: PPUSH
 271: LD_INT 1
 273: PPUSH
 274: CALL_OW 322
// PrepareDifficulty ;
 278: CALL 15952 0 0
// PrepareArabian ;
 282: CALL 299 0 0
// PrepareAmericans ;
 286: CALL 3987 0 0
// PrepareNature ;
 290: CALL 20056 0 0
// Action ;
 294: CALL 9081 0 0
// end ; end_of_file
 298: END
// export Heike , Aviradze , Ralph , Oswald , Sonya , Kowalski , Willard , ArEngi , ArSol , Messenger , Sebel ; export FarmerVehicle ; export function PrepareArabian ; var i , temp_list ; var Lister ; begin
 299: LD_INT 0
 301: PPUSH
 302: PPUSH
 303: PPUSH
 304: PPUSH
// InitUc ;
 305: CALL_OW 18
// InitHc ;
 309: CALL_OW 19
// uc_nation = nation_arabian ;
 313: LD_ADDR_OWVAR 21
 317: PUSH
 318: LD_INT 2
 320: ST_TO_ADDR
// uc_side = 2 ;
 321: LD_ADDR_OWVAR 20
 325: PUSH
 326: LD_INT 2
 328: ST_TO_ADDR
// uc_direction = 4 ;
 329: LD_ADDR_OWVAR 24
 333: PUSH
 334: LD_INT 4
 336: ST_TO_ADDR
// if not testing then
 337: LD_EXP 38
 341: NOT
 342: IFFALSE 636
// begin Heike = CreateCharacter ( Heike_02 ) ;
 344: LD_ADDR_EXP 39
 348: PUSH
 349: LD_STRING Heike_02
 351: PPUSH
 352: CALL_OW 34
 356: ST_TO_ADDR
// SetClass ( Heike , class_soldier ) ;
 357: LD_EXP 39
 361: PPUSH
 362: LD_INT 1
 364: PPUSH
 365: CALL_OW 336
// Aviradze = CreateCharacter ( Aviradze_02 ) ;
 369: LD_ADDR_EXP 40
 373: PUSH
 374: LD_STRING Aviradze_02
 376: PPUSH
 377: CALL_OW 34
 381: ST_TO_ADDR
// SetClass ( Aviradze , class_scientistic ) ;
 382: LD_EXP 40
 386: PPUSH
 387: LD_INT 4
 389: PPUSH
 390: CALL_OW 336
// if TestCharacters ( Ralph_02 ) then
 394: LD_STRING Ralph_02
 396: PPUSH
 397: CALL_OW 28
 401: IFFALSE 430
// begin Ralph = CreateCharacter ( Ralph_02 ) ;
 403: LD_ADDR_EXP 41
 407: PUSH
 408: LD_STRING Ralph_02
 410: PPUSH
 411: CALL_OW 34
 415: ST_TO_ADDR
// SetClass ( Ralph , class_soldier ) ;
 416: LD_EXP 41
 420: PPUSH
 421: LD_INT 1
 423: PPUSH
 424: CALL_OW 336
// end else
 428: GO 438
// Ralph = 0 ;
 430: LD_ADDR_EXP 41
 434: PUSH
 435: LD_INT 0
 437: ST_TO_ADDR
// if TestCharacters ( Oswald_02 ) then
 438: LD_STRING Oswald_02
 440: PPUSH
 441: CALL_OW 28
 445: IFFALSE 474
// begin Oswald = CreateCharacter ( Oswald_02 ) ;
 447: LD_ADDR_EXP 42
 451: PUSH
 452: LD_STRING Oswald_02
 454: PPUSH
 455: CALL_OW 34
 459: ST_TO_ADDR
// SetClass ( Oswald , class_soldier ) ;
 460: LD_EXP 42
 464: PPUSH
 465: LD_INT 1
 467: PPUSH
 468: CALL_OW 336
// end else
 472: GO 482
// Oswald = 0 ;
 474: LD_ADDR_EXP 42
 478: PUSH
 479: LD_INT 0
 481: ST_TO_ADDR
// if TestCharacters ( Sonya_02 ) then
 482: LD_STRING Sonya_02
 484: PPUSH
 485: CALL_OW 28
 489: IFFALSE 518
// begin Sonya = CreateCharacter ( Sonya_02 ) ;
 491: LD_ADDR_EXP 43
 495: PUSH
 496: LD_STRING Sonya_02
 498: PPUSH
 499: CALL_OW 34
 503: ST_TO_ADDR
// SetClass ( Sonya , class_scientistic ) ;
 504: LD_EXP 43
 508: PPUSH
 509: LD_INT 4
 511: PPUSH
 512: CALL_OW 336
// end else
 516: GO 526
// Sonya = 0 ;
 518: LD_ADDR_EXP 43
 522: PUSH
 523: LD_INT 0
 525: ST_TO_ADDR
// if TestCharacters ( Lister_02 ) then
 526: LD_STRING Lister_02
 528: PPUSH
 529: CALL_OW 28
 533: IFFALSE 562
// begin Lister = CreateCharacter ( Lister_02 ) ;
 535: LD_ADDR_VAR 0 4
 539: PUSH
 540: LD_STRING Lister_02
 542: PPUSH
 543: CALL_OW 34
 547: ST_TO_ADDR
// SetClass ( Lister , class_soldier ) ;
 548: LD_VAR 0 4
 552: PPUSH
 553: LD_INT 1
 555: PPUSH
 556: CALL_OW 336
// end else
 560: GO 570
// Lister = 0 ;
 562: LD_ADDR_VAR 0 4
 566: PUSH
 567: LD_INT 0
 569: ST_TO_ADDR
// for i in [ Heike , Aviradze , Ralph , Oswald , Sonya , Lister ] do
 570: LD_ADDR_VAR 0 2
 574: PUSH
 575: LD_EXP 39
 579: PUSH
 580: LD_EXP 40
 584: PUSH
 585: LD_EXP 41
 589: PUSH
 590: LD_EXP 42
 594: PUSH
 595: LD_EXP 43
 599: PUSH
 600: LD_VAR 0 4
 604: PUSH
 605: EMPTY
 606: LIST
 607: LIST
 608: LIST
 609: LIST
 610: LIST
 611: LIST
 612: PUSH
 613: FOR_IN
 614: IFFALSE 632
// SetDir ( i , uc_direction ) ;
 616: LD_VAR 0 2
 620: PPUSH
 621: LD_OWVAR 24
 625: PPUSH
 626: CALL_OW 233
 630: GO 613
 632: POP
 633: POP
// end else
 634: GO 1132
// begin hc_attr = [ 10 , 12 ] ;
 636: LD_ADDR_OWVAR 29
 640: PUSH
 641: LD_INT 10
 643: PUSH
 644: LD_INT 12
 646: PUSH
 647: EMPTY
 648: LIST
 649: LIST
 650: ST_TO_ADDR
// hc_class = class_soldier ;
 651: LD_ADDR_OWVAR 28
 655: PUSH
 656: LD_INT 1
 658: ST_TO_ADDR
// hc_importance = 110 ;
 659: LD_ADDR_OWVAR 32
 663: PUSH
 664: LD_INT 110
 666: ST_TO_ADDR
// hc_sex = sex_female ;
 667: LD_ADDR_OWVAR 27
 671: PUSH
 672: LD_INT 2
 674: ST_TO_ADDR
// hc_name = Heike ;
 675: LD_ADDR_OWVAR 26
 679: PUSH
 680: LD_STRING Heike
 682: ST_TO_ADDR
// hc_skills = [ 5 , 0 , 1 , 1 ] ;
 683: LD_ADDR_OWVAR 31
 687: PUSH
 688: LD_INT 5
 690: PUSH
 691: LD_INT 0
 693: PUSH
 694: LD_INT 1
 696: PUSH
 697: LD_INT 1
 699: PUSH
 700: EMPTY
 701: LIST
 702: LIST
 703: LIST
 704: LIST
 705: ST_TO_ADDR
// Heike = CreateHuman ;
 706: LD_ADDR_EXP 39
 710: PUSH
 711: CALL_OW 44
 715: ST_TO_ADDR
// hc_importance = 0 ;
 716: LD_ADDR_OWVAR 32
 720: PUSH
 721: LD_INT 0
 723: ST_TO_ADDR
// hc_sex := sex_male ;
 724: LD_ADDR_OWVAR 27
 728: PUSH
 729: LD_INT 1
 731: ST_TO_ADDR
// hc_class := class_scientistic ;
 732: LD_ADDR_OWVAR 28
 736: PUSH
 737: LD_INT 4
 739: ST_TO_ADDR
// hc_basic_skills = [ 0 , 1 , 1 , 4 ] ;
 740: LD_ADDR_OWVAR 30
 744: PUSH
 745: LD_INT 0
 747: PUSH
 748: LD_INT 1
 750: PUSH
 751: LD_INT 1
 753: PUSH
 754: LD_INT 4
 756: PUSH
 757: EMPTY
 758: LIST
 759: LIST
 760: LIST
 761: LIST
 762: ST_TO_ADDR
// hc_skills := [ 0 , 2 , 1 , 4 ] ;
 763: LD_ADDR_OWVAR 31
 767: PUSH
 768: LD_INT 0
 770: PUSH
 771: LD_INT 2
 773: PUSH
 774: LD_INT 1
 776: PUSH
 777: LD_INT 4
 779: PUSH
 780: EMPTY
 781: LIST
 782: LIST
 783: LIST
 784: LIST
 785: ST_TO_ADDR
// hc_name := Aviradze ;
 786: LD_ADDR_OWVAR 26
 790: PUSH
 791: LD_STRING Aviradze
 793: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
 794: LD_ADDR_OWVAR 29
 798: PUSH
 799: LD_INT 10
 801: PUSH
 802: LD_INT 12
 804: PUSH
 805: EMPTY
 806: LIST
 807: LIST
 808: ST_TO_ADDR
// Aviradze := CreateHuman ;
 809: LD_ADDR_EXP 40
 813: PUSH
 814: CALL_OW 44
 818: ST_TO_ADDR
// hc_sex := sex_male ;
 819: LD_ADDR_OWVAR 27
 823: PUSH
 824: LD_INT 1
 826: ST_TO_ADDR
// hc_class := class_soldier ;
 827: LD_ADDR_OWVAR 28
 831: PUSH
 832: LD_INT 1
 834: ST_TO_ADDR
// hc_basic_skills = [ 2 , 0 , 1 , 0 ] ;
 835: LD_ADDR_OWVAR 30
 839: PUSH
 840: LD_INT 2
 842: PUSH
 843: LD_INT 0
 845: PUSH
 846: LD_INT 1
 848: PUSH
 849: LD_INT 0
 851: PUSH
 852: EMPTY
 853: LIST
 854: LIST
 855: LIST
 856: LIST
 857: ST_TO_ADDR
// hc_skills := [ 4 , 1 , 2 , 0 ] ;
 858: LD_ADDR_OWVAR 31
 862: PUSH
 863: LD_INT 4
 865: PUSH
 866: LD_INT 1
 868: PUSH
 869: LD_INT 2
 871: PUSH
 872: LD_INT 0
 874: PUSH
 875: EMPTY
 876: LIST
 877: LIST
 878: LIST
 879: LIST
 880: ST_TO_ADDR
// hc_name := Ralph ;
 881: LD_ADDR_OWVAR 26
 885: PUSH
 886: LD_STRING Ralph
 888: ST_TO_ADDR
// hc_attr := [ 10 , 10 ] ;
 889: LD_ADDR_OWVAR 29
 893: PUSH
 894: LD_INT 10
 896: PUSH
 897: LD_INT 10
 899: PUSH
 900: EMPTY
 901: LIST
 902: LIST
 903: ST_TO_ADDR
// Ralph := CreateHuman ;
 904: LD_ADDR_EXP 41
 908: PUSH
 909: CALL_OW 44
 913: ST_TO_ADDR
// hc_sex := sex_male ;
 914: LD_ADDR_OWVAR 27
 918: PUSH
 919: LD_INT 1
 921: ST_TO_ADDR
// hc_class := class_soldier ;
 922: LD_ADDR_OWVAR 28
 926: PUSH
 927: LD_INT 1
 929: ST_TO_ADDR
// hc_basic_skills = [ 2 , 1 , 1 , 0 ] ;
 930: LD_ADDR_OWVAR 30
 934: PUSH
 935: LD_INT 2
 937: PUSH
 938: LD_INT 1
 940: PUSH
 941: LD_INT 1
 943: PUSH
 944: LD_INT 0
 946: PUSH
 947: EMPTY
 948: LIST
 949: LIST
 950: LIST
 951: LIST
 952: ST_TO_ADDR
// hc_skills := [ 5 , 2 , 1 , 0 ] ;
 953: LD_ADDR_OWVAR 31
 957: PUSH
 958: LD_INT 5
 960: PUSH
 961: LD_INT 2
 963: PUSH
 964: LD_INT 1
 966: PUSH
 967: LD_INT 0
 969: PUSH
 970: EMPTY
 971: LIST
 972: LIST
 973: LIST
 974: LIST
 975: ST_TO_ADDR
// hc_name := Oswald ;
 976: LD_ADDR_OWVAR 26
 980: PUSH
 981: LD_STRING Oswald
 983: ST_TO_ADDR
// hc_attr := [ 11 , 10 ] ;
 984: LD_ADDR_OWVAR 29
 988: PUSH
 989: LD_INT 11
 991: PUSH
 992: LD_INT 10
 994: PUSH
 995: EMPTY
 996: LIST
 997: LIST
 998: ST_TO_ADDR
// Oswald := CreateHuman ;
 999: LD_ADDR_EXP 42
1003: PUSH
1004: CALL_OW 44
1008: ST_TO_ADDR
// hc_sex := sex_female ;
1009: LD_ADDR_OWVAR 27
1013: PUSH
1014: LD_INT 2
1016: ST_TO_ADDR
// hc_class := class_scientistic ;
1017: LD_ADDR_OWVAR 28
1021: PUSH
1022: LD_INT 4
1024: ST_TO_ADDR
// hc_basic_skills = [ 0 , 1 , 2 , 3 ] ;
1025: LD_ADDR_OWVAR 30
1029: PUSH
1030: LD_INT 0
1032: PUSH
1033: LD_INT 1
1035: PUSH
1036: LD_INT 2
1038: PUSH
1039: LD_INT 3
1041: PUSH
1042: EMPTY
1043: LIST
1044: LIST
1045: LIST
1046: LIST
1047: ST_TO_ADDR
// hc_skills := [ 1 , 1 , 2 , 4 ] ;
1048: LD_ADDR_OWVAR 31
1052: PUSH
1053: LD_INT 1
1055: PUSH
1056: LD_INT 1
1058: PUSH
1059: LD_INT 2
1061: PUSH
1062: LD_INT 4
1064: PUSH
1065: EMPTY
1066: LIST
1067: LIST
1068: LIST
1069: LIST
1070: ST_TO_ADDR
// hc_name := Sonya ;
1071: LD_ADDR_OWVAR 26
1075: PUSH
1076: LD_STRING Sonya
1078: ST_TO_ADDR
// hc_attr := [ 10 , 11 ] ;
1079: LD_ADDR_OWVAR 29
1083: PUSH
1084: LD_INT 10
1086: PUSH
1087: LD_INT 11
1089: PUSH
1090: EMPTY
1091: LIST
1092: LIST
1093: ST_TO_ADDR
// Sonya := CreateHuman ;
1094: LD_ADDR_EXP 43
1098: PUSH
1099: CALL_OW 44
1103: ST_TO_ADDR
// PrepareSoldier ( sex_male , 3 ) ;
1104: LD_INT 1
1106: PPUSH
1107: LD_INT 3
1109: PPUSH
1110: CALL_OW 381
// hc_name = Lister ;
1114: LD_ADDR_OWVAR 26
1118: PUSH
1119: LD_STRING Lister
1121: ST_TO_ADDR
// Lister = CreateHuman ;
1122: LD_ADDR_VAR 0 4
1126: PUSH
1127: CALL_OW 44
1131: ST_TO_ADDR
// end ; Kowalski = NewCharacter ( Kowalski ) ;
1132: LD_ADDR_EXP 44
1136: PUSH
1137: LD_STRING Kowalski
1139: PPUSH
1140: CALL_OW 25
1144: ST_TO_ADDR
// SetDir ( Kowalski , uc_direction ) ;
1145: LD_EXP 44
1149: PPUSH
1150: LD_OWVAR 24
1154: PPUSH
1155: CALL_OW 233
// PlaceUnitXY ( Kowalski , 87 , 37 , false ) ;
1159: LD_EXP 44
1163: PPUSH
1164: LD_INT 87
1166: PPUSH
1167: LD_INT 37
1169: PPUSH
1170: LD_INT 0
1172: PPUSH
1173: CALL_OW 48
// uc_direction = 1 ;
1177: LD_ADDR_OWVAR 24
1181: PUSH
1182: LD_INT 1
1184: ST_TO_ADDR
// Willard = NewCharacter ( Hadarach ) ;
1185: LD_ADDR_EXP 45
1189: PUSH
1190: LD_STRING Hadarach
1192: PPUSH
1193: CALL_OW 25
1197: ST_TO_ADDR
// SetDir ( Willard , uc_direction ) ;
1198: LD_EXP 45
1202: PPUSH
1203: LD_OWVAR 24
1207: PPUSH
1208: CALL_OW 233
// PlaceUnitXY ( Willard , 85 , 39 , false ) ;
1212: LD_EXP 45
1216: PPUSH
1217: LD_INT 85
1219: PPUSH
1220: LD_INT 39
1222: PPUSH
1223: LD_INT 0
1225: PPUSH
1226: CALL_OW 48
// InitHc ;
1230: CALL_OW 19
// PrepareEngineer ( sex_male , 3 ) ;
1234: LD_INT 1
1236: PPUSH
1237: LD_INT 3
1239: PPUSH
1240: CALL_OW 382
// ArEngi = CreateHuman ;
1244: LD_ADDR_EXP 46
1248: PUSH
1249: CALL_OW 44
1253: ST_TO_ADDR
// SetSkill ( ArEngi , skill_engineering , 3 ) ;
1254: LD_EXP 46
1258: PPUSH
1259: LD_INT 2
1261: PPUSH
1262: LD_INT 3
1264: PPUSH
1265: CALL_OW 237
// PlaceUnitXY ( ArEngi , 87 , 38 , false ) ;
1269: LD_EXP 46
1273: PPUSH
1274: LD_INT 87
1276: PPUSH
1277: LD_INT 38
1279: PPUSH
1280: LD_INT 0
1282: PPUSH
1283: CALL_OW 48
// ArSol = Lister ;
1287: LD_ADDR_EXP 47
1291: PUSH
1292: LD_VAR 0 4
1296: ST_TO_ADDR
// hc_sex = sex_female ;
1297: LD_ADDR_OWVAR 27
1301: PUSH
1302: LD_INT 2
1304: ST_TO_ADDR
// hc_class = class_scientistic ;
1305: LD_ADDR_OWVAR 28
1309: PUSH
1310: LD_INT 4
1312: ST_TO_ADDR
// hc_attr = [ 10 , 10 ] ;
1313: LD_ADDR_OWVAR 29
1317: PUSH
1318: LD_INT 10
1320: PUSH
1321: LD_INT 10
1323: PUSH
1324: EMPTY
1325: LIST
1326: LIST
1327: ST_TO_ADDR
// hc_basic_skills = [ 0 , 1 , 0 , 2 ] ;
1328: LD_ADDR_OWVAR 30
1332: PUSH
1333: LD_INT 0
1335: PUSH
1336: LD_INT 1
1338: PUSH
1339: LD_INT 0
1341: PUSH
1342: LD_INT 2
1344: PUSH
1345: EMPTY
1346: LIST
1347: LIST
1348: LIST
1349: LIST
1350: ST_TO_ADDR
// hc_skills = [ 1 , 2 , 0 , 3 ] ;
1351: LD_ADDR_OWVAR 31
1355: PUSH
1356: LD_INT 1
1358: PUSH
1359: LD_INT 2
1361: PUSH
1362: LD_INT 0
1364: PUSH
1365: LD_INT 3
1367: PUSH
1368: EMPTY
1369: LIST
1370: LIST
1371: LIST
1372: LIST
1373: ST_TO_ADDR
// hc_gallery = SecondCharsGal ;
1374: LD_ADDR_OWVAR 33
1378: PUSH
1379: LD_STRING SecondCharsGal
1381: ST_TO_ADDR
// hc_face_number = 15 ;
1382: LD_ADDR_OWVAR 34
1386: PUSH
1387: LD_INT 15
1389: ST_TO_ADDR
// hc_name = Lucy Sebel ;
1390: LD_ADDR_OWVAR 26
1394: PUSH
1395: LD_STRING Lucy Sebel
1397: ST_TO_ADDR
// Sebel = CreateHuman ;
1398: LD_ADDR_EXP 49
1402: PUSH
1403: CALL_OW 44
1407: ST_TO_ADDR
// PlaceUnitXY ( Sebel , 88 , 40 , false ) ;
1408: LD_EXP 49
1412: PPUSH
1413: LD_INT 88
1415: PPUSH
1416: LD_INT 40
1418: PPUSH
1419: LD_INT 0
1421: PPUSH
1422: CALL_OW 48
// InitHc ;
1426: CALL_OW 19
// uc_direction = 4 ;
1430: LD_ADDR_OWVAR 24
1434: PUSH
1435: LD_INT 4
1437: ST_TO_ADDR
// uc_nation = 2 ;
1438: LD_ADDR_OWVAR 21
1442: PUSH
1443: LD_INT 2
1445: ST_TO_ADDR
// vc_chassis = ar_light_trike ;
1446: LD_ADDR_OWVAR 37
1450: PUSH
1451: LD_INT 12
1453: ST_TO_ADDR
// vc_control = control_manual ;
1454: LD_ADDR_OWVAR 38
1458: PUSH
1459: LD_INT 1
1461: ST_TO_ADDR
// vc_engine = engine_solar ;
1462: LD_ADDR_OWVAR 39
1466: PUSH
1467: LD_INT 2
1469: ST_TO_ADDR
// vc_weapon = 24 ;
1470: LD_ADDR_OWVAR 40
1474: PUSH
1475: LD_INT 24
1477: ST_TO_ADDR
// FarmerVehicle = CreateVehicle ;
1478: LD_ADDR_EXP 50
1482: PUSH
1483: CALL_OW 45
1487: ST_TO_ADDR
// PlaceUnitXY ( FarmerVehicle , 99 , 9 , false ) ;
1488: LD_EXP 50
1492: PPUSH
1493: LD_INT 99
1495: PPUSH
1496: LD_INT 9
1498: PPUSH
1499: LD_INT 0
1501: PPUSH
1502: CALL_OW 48
// if not testing then
1506: LD_EXP 38
1510: NOT
1511: IFFALSE 1528
// begin Messenger = CreateCharacter ( Messenger_03 ) ;
1513: LD_ADDR_EXP 48
1517: PUSH
1518: LD_STRING Messenger_03
1520: PPUSH
1521: CALL_OW 34
1525: ST_TO_ADDR
// end else
1526: GO 1541
// begin Messenger = NewCharacter ( Farmer ) ;
1528: LD_ADDR_EXP 48
1532: PUSH
1533: LD_STRING Farmer
1535: PPUSH
1536: CALL_OW 25
1540: ST_TO_ADDR
// end ; PlaceHumanInUnit ( Messenger , FarmerVehicle ) ;
1541: LD_EXP 48
1545: PPUSH
1546: LD_EXP 50
1550: PPUSH
1551: CALL_OW 52
// PlaceUnitXY ( Heike , 101 , 9 , false ) ;
1555: LD_EXP 39
1559: PPUSH
1560: LD_INT 101
1562: PPUSH
1563: LD_INT 9
1565: PPUSH
1566: LD_INT 0
1568: PPUSH
1569: CALL_OW 48
// PlaceUnitXY ( Aviradze , 102 , 7 , false ) ;
1573: LD_EXP 40
1577: PPUSH
1578: LD_INT 102
1580: PPUSH
1581: LD_INT 7
1583: PPUSH
1584: LD_INT 0
1586: PPUSH
1587: CALL_OW 48
// PlaceUnitXY ( Ralph , 101 , 8 , false ) ;
1591: LD_EXP 41
1595: PPUSH
1596: LD_INT 101
1598: PPUSH
1599: LD_INT 8
1601: PPUSH
1602: LD_INT 0
1604: PPUSH
1605: CALL_OW 48
// PlaceUnitXY ( Oswald , 102 , 10 , false ) ;
1609: LD_EXP 42
1613: PPUSH
1614: LD_INT 102
1616: PPUSH
1617: LD_INT 10
1619: PPUSH
1620: LD_INT 0
1622: PPUSH
1623: CALL_OW 48
// PlaceUnitXY ( Sonya , 103 , 9 , false ) ;
1627: LD_EXP 43
1631: PPUSH
1632: LD_INT 103
1634: PPUSH
1635: LD_INT 9
1637: PPUSH
1638: LD_INT 0
1640: PPUSH
1641: CALL_OW 48
// PlaceUnitXY ( Lister , 104 , 11 , false ) ;
1645: LD_VAR 0 4
1649: PPUSH
1650: LD_INT 104
1652: PPUSH
1653: LD_INT 11
1655: PPUSH
1656: LD_INT 0
1658: PPUSH
1659: CALL_OW 48
// ComTurnUnit ( [ Kowalski , Willard , ArEngi , Sebel ] , Heike ) ;
1663: LD_EXP 44
1667: PUSH
1668: LD_EXP 45
1672: PUSH
1673: LD_EXP 46
1677: PUSH
1678: LD_EXP 49
1682: PUSH
1683: EMPTY
1684: LIST
1685: LIST
1686: LIST
1687: LIST
1688: PPUSH
1689: LD_EXP 39
1693: PPUSH
1694: CALL_OW 119
// end ;
1698: LD_VAR 0 1
1702: RET
// export function PrepareFarmerUnits ; var eng , i ; begin
1703: LD_INT 0
1705: PPUSH
1706: PPUSH
1707: PPUSH
// InitUc ;
1708: CALL_OW 18
// InitHc ;
1712: CALL_OW 19
// uc_side = 5 ;
1716: LD_ADDR_OWVAR 20
1720: PUSH
1721: LD_INT 5
1723: ST_TO_ADDR
// uc_nation = 2 ;
1724: LD_ADDR_OWVAR 21
1728: PUSH
1729: LD_INT 2
1731: ST_TO_ADDR
// PrepareEngineer ( false , 4 ) ;
1732: LD_INT 0
1734: PPUSH
1735: LD_INT 4
1737: PPUSH
1738: CALL_OW 382
// eng = CreateHuman ;
1742: LD_ADDR_VAR 0 2
1746: PUSH
1747: CALL_OW 44
1751: ST_TO_ADDR
// PrepareEngineer ( false , 4 ) ;
1752: LD_INT 0
1754: PPUSH
1755: LD_INT 4
1757: PPUSH
1758: CALL_OW 382
// eng = eng ^ CreateHuman ;
1762: LD_ADDR_VAR 0 2
1766: PUSH
1767: LD_VAR 0 2
1771: PUSH
1772: CALL_OW 44
1776: ADD
1777: ST_TO_ADDR
// PrepareEngineer ( false , 4 ) ;
1778: LD_INT 0
1780: PPUSH
1781: LD_INT 4
1783: PPUSH
1784: CALL_OW 382
// eng = eng ^ CreateHuman ;
1788: LD_ADDR_VAR 0 2
1792: PUSH
1793: LD_VAR 0 2
1797: PUSH
1798: CALL_OW 44
1802: ADD
1803: ST_TO_ADDR
// for i in eng do
1804: LD_ADDR_VAR 0 3
1808: PUSH
1809: LD_VAR 0 2
1813: PUSH
1814: FOR_IN
1815: IFFALSE 1834
// PlaceUnitArea ( i , FarmerExitArea , false ) ;
1817: LD_VAR 0 3
1821: PPUSH
1822: LD_INT 1
1824: PPUSH
1825: LD_INT 0
1827: PPUSH
1828: CALL_OW 49
1832: GO 1814
1834: POP
1835: POP
// for i = 1 to [ 2 , 1 , 0 ] [ difficulty ] do
1836: LD_ADDR_VAR 0 3
1840: PUSH
1841: DOUBLE
1842: LD_INT 1
1844: DEC
1845: ST_TO_ADDR
1846: LD_INT 2
1848: PUSH
1849: LD_INT 1
1851: PUSH
1852: LD_INT 0
1854: PUSH
1855: EMPTY
1856: LIST
1857: LIST
1858: LIST
1859: PUSH
1860: LD_OWVAR 67
1864: ARRAY
1865: PUSH
1866: FOR_TO
1867: IFFALSE 1913
// begin PrepareSoldier ( false , [ 3 , 2 , 0 ] [ Difficulty ] ) ;
1869: LD_INT 0
1871: PPUSH
1872: LD_INT 3
1874: PUSH
1875: LD_INT 2
1877: PUSH
1878: LD_INT 0
1880: PUSH
1881: EMPTY
1882: LIST
1883: LIST
1884: LIST
1885: PUSH
1886: LD_OWVAR 67
1890: ARRAY
1891: PPUSH
1892: CALL_OW 381
// PlaceUnitArea ( CreateHuman , FarmerExitArea , false ) ;
1896: CALL_OW 44
1900: PPUSH
1901: LD_INT 1
1903: PPUSH
1904: LD_INT 0
1906: PPUSH
1907: CALL_OW 49
// end ;
1911: GO 1866
1913: POP
1914: POP
// end ; end_of_file
1915: LD_VAR 0 1
1919: RET
// export AmBuildCount ; every 0 0$1 do var i , temp , sol , eng , mech , sci , wounded , center , emptyBunkers , arm , enemy_inbase , fact , lab , depo , con , damaged ;
1920: GO 1922
1922: DISABLE
1923: LD_INT 0
1925: PPUSH
1926: PPUSH
1927: PPUSH
1928: PPUSH
1929: PPUSH
1930: PPUSH
1931: PPUSH
1932: PPUSH
1933: PPUSH
1934: PPUSH
1935: PPUSH
1936: PPUSH
1937: PPUSH
1938: PPUSH
1939: PPUSH
1940: PPUSH
// begin if americans_are_evacuating then
1941: LD_EXP 22
1945: IFFALSE 1949
// exit ;
1947: GO 3984
// center = [ 37 , 30 ] ;
1949: LD_ADDR_VAR 0 8
1953: PUSH
1954: LD_INT 37
1956: PUSH
1957: LD_INT 30
1959: PUSH
1960: EMPTY
1961: LIST
1962: LIST
1963: ST_TO_ADDR
// wounded = UnitFilter ( start_americans , [ f_not , [ f_lives , 600 ] ] ) ;
1964: LD_ADDR_VAR 0 7
1968: PUSH
1969: LD_EXP 3
1973: PPUSH
1974: LD_INT 3
1976: PUSH
1977: LD_INT 24
1979: PUSH
1980: LD_INT 600
1982: PUSH
1983: EMPTY
1984: LIST
1985: LIST
1986: PUSH
1987: EMPTY
1988: LIST
1989: LIST
1990: PPUSH
1991: CALL_OW 72
1995: ST_TO_ADDR
// con = FilterAllUnits ( [ [ f_side , 1 ] , [ f_constructed ] ] ) ;
1996: LD_ADDR_VAR 0 15
2000: PUSH
2001: LD_INT 22
2003: PUSH
2004: LD_INT 1
2006: PUSH
2007: EMPTY
2008: LIST
2009: LIST
2010: PUSH
2011: LD_INT 57
2013: PUSH
2014: EMPTY
2015: LIST
2016: PUSH
2017: EMPTY
2018: LIST
2019: LIST
2020: PPUSH
2021: CALL_OW 69
2025: ST_TO_ADDR
// for i in wounded do
2026: LD_ADDR_VAR 0 1
2030: PUSH
2031: LD_VAR 0 7
2035: PUSH
2036: FOR_IN
2037: IFFALSE 2123
// if IsInUnit ( i ) then
2039: LD_VAR 0 1
2043: PPUSH
2044: CALL_OW 310
2048: IFFALSE 2061
// ComExitBuilding ( i ) else
2050: LD_VAR 0 1
2054: PPUSH
2055: CALL_OW 122
2059: GO 2121
// if GetDistUnitXY ( i , center [ 1 ] , center [ 2 ] ) > 5 then
2061: LD_VAR 0 1
2065: PPUSH
2066: LD_VAR 0 8
2070: PUSH
2071: LD_INT 1
2073: ARRAY
2074: PPUSH
2075: LD_VAR 0 8
2079: PUSH
2080: LD_INT 2
2082: ARRAY
2083: PPUSH
2084: CALL_OW 297
2088: PUSH
2089: LD_INT 5
2091: GREATER
2092: IFFALSE 2121
// ComMoveXY ( i , center [ 1 ] , center [ 2 ] ) ;
2094: LD_VAR 0 1
2098: PPUSH
2099: LD_VAR 0 8
2103: PUSH
2104: LD_INT 1
2106: ARRAY
2107: PPUSH
2108: LD_VAR 0 8
2112: PUSH
2113: LD_INT 2
2115: ARRAY
2116: PPUSH
2117: CALL_OW 111
2121: GO 2036
2123: POP
2124: POP
// sol = UnitFilter ( start_americans , [ [ f_class , class_soldier ] , [ f_lives , 600 ] ] ) ;
2125: LD_ADDR_VAR 0 3
2129: PUSH
2130: LD_EXP 3
2134: PPUSH
2135: LD_INT 25
2137: PUSH
2138: LD_INT 1
2140: PUSH
2141: EMPTY
2142: LIST
2143: LIST
2144: PUSH
2145: LD_INT 24
2147: PUSH
2148: LD_INT 600
2150: PUSH
2151: EMPTY
2152: LIST
2153: LIST
2154: PUSH
2155: EMPTY
2156: LIST
2157: LIST
2158: PPUSH
2159: CALL_OW 72
2163: ST_TO_ADDR
// emptyBunkers = FilterAllUnits ( [ [ f_side , 1 ] , [ f_empty ] , [ f_btype , b_bunker ] ] ) ^ FilterAllUnits ( [ [ f_side , 1 ] , [ f_empty ] , [ f_btype , b_breastwork ] ] ) ;
2164: LD_ADDR_VAR 0 9
2168: PUSH
2169: LD_INT 22
2171: PUSH
2172: LD_INT 1
2174: PUSH
2175: EMPTY
2176: LIST
2177: LIST
2178: PUSH
2179: LD_INT 58
2181: PUSH
2182: EMPTY
2183: LIST
2184: PUSH
2185: LD_INT 30
2187: PUSH
2188: LD_INT 32
2190: PUSH
2191: EMPTY
2192: LIST
2193: LIST
2194: PUSH
2195: EMPTY
2196: LIST
2197: LIST
2198: LIST
2199: PPUSH
2200: CALL_OW 69
2204: PUSH
2205: LD_INT 22
2207: PUSH
2208: LD_INT 1
2210: PUSH
2211: EMPTY
2212: LIST
2213: LIST
2214: PUSH
2215: LD_INT 58
2217: PUSH
2218: EMPTY
2219: LIST
2220: PUSH
2221: LD_INT 30
2223: PUSH
2224: LD_INT 31
2226: PUSH
2227: EMPTY
2228: LIST
2229: LIST
2230: PUSH
2231: EMPTY
2232: LIST
2233: LIST
2234: LIST
2235: PPUSH
2236: CALL_OW 69
2240: ADD
2241: ST_TO_ADDR
// arm = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_armoury ] , [ f_ok ] ] ) ;
2242: LD_ADDR_VAR 0 10
2246: PUSH
2247: LD_INT 22
2249: PUSH
2250: LD_INT 1
2252: PUSH
2253: EMPTY
2254: LIST
2255: LIST
2256: PUSH
2257: LD_INT 30
2259: PUSH
2260: LD_INT 4
2262: PUSH
2263: EMPTY
2264: LIST
2265: LIST
2266: PUSH
2267: LD_INT 50
2269: PUSH
2270: EMPTY
2271: LIST
2272: PUSH
2273: EMPTY
2274: LIST
2275: LIST
2276: LIST
2277: PPUSH
2278: CALL_OW 69
2282: ST_TO_ADDR
// enemy_inbase = FilterUnitsInArea ( AmericanBaseArea , [ f_enemy , 1 ] ) ;
2283: LD_ADDR_VAR 0 11
2287: PUSH
2288: LD_INT 2
2290: PPUSH
2291: LD_INT 81
2293: PUSH
2294: LD_INT 1
2296: PUSH
2297: EMPTY
2298: LIST
2299: LIST
2300: PPUSH
2301: CALL_OW 70
2305: ST_TO_ADDR
// for i in sol do
2306: LD_ADDR_VAR 0 1
2310: PUSH
2311: LD_VAR 0 3
2315: PUSH
2316: FOR_IN
2317: IFFALSE 2561
// if emptybunkers > 0 then
2319: LD_VAR 0 9
2323: PUSH
2324: LD_INT 0
2326: GREATER
2327: IFFALSE 2367
// begin ComEnterUnit ( i , emptybunkers [ 1 ] ) ;
2329: LD_VAR 0 1
2333: PPUSH
2334: LD_VAR 0 9
2338: PUSH
2339: LD_INT 1
2341: ARRAY
2342: PPUSH
2343: CALL_OW 120
// emptybunkers = Delete ( emptybunkers , 1 ) ;
2347: LD_ADDR_VAR 0 9
2351: PUSH
2352: LD_VAR 0 9
2356: PPUSH
2357: LD_INT 1
2359: PPUSH
2360: CALL_OW 3
2364: ST_TO_ADDR
// end else
2365: GO 2559
// if not IsInUnit ( i ) then
2367: LD_VAR 0 1
2371: PPUSH
2372: CALL_OW 310
2376: NOT
2377: IFFALSE 2559
// if arm > 0 then
2379: LD_VAR 0 10
2383: PUSH
2384: LD_INT 0
2386: GREATER
2387: IFFALSE 2409
// ComEnterUnit ( i , arm [ 1 ] ) else
2389: LD_VAR 0 1
2393: PPUSH
2394: LD_VAR 0 10
2398: PUSH
2399: LD_INT 1
2401: ARRAY
2402: PPUSH
2403: CALL_OW 120
2407: GO 2559
// if enemy_inbase > 0 then
2409: LD_VAR 0 11
2413: PUSH
2414: LD_INT 0
2416: GREATER
2417: IFFALSE 2439
// ComAttackUnit ( i , enemy_inbase [ 1 ] ) else
2419: LD_VAR 0 1
2423: PPUSH
2424: LD_VAR 0 11
2428: PUSH
2429: LD_INT 1
2431: ARRAY
2432: PPUSH
2433: CALL_OW 115
2437: GO 2559
// if con > 0 then
2439: LD_VAR 0 15
2443: PUSH
2444: LD_INT 0
2446: GREATER
2447: IFFALSE 2499
// SetTaskList ( i , [ [ h , 0 , 0 , con [ 1 ] , 0 , 0 , 0 ] ] ) else
2449: LD_VAR 0 1
2453: PPUSH
2454: LD_STRING h
2456: PUSH
2457: LD_INT 0
2459: PUSH
2460: LD_INT 0
2462: PUSH
2463: LD_VAR 0 15
2467: PUSH
2468: LD_INT 1
2470: ARRAY
2471: PUSH
2472: LD_INT 0
2474: PUSH
2475: LD_INT 0
2477: PUSH
2478: LD_INT 0
2480: PUSH
2481: EMPTY
2482: LIST
2483: LIST
2484: LIST
2485: LIST
2486: LIST
2487: LIST
2488: LIST
2489: PUSH
2490: EMPTY
2491: LIST
2492: PPUSH
2493: CALL_OW 446
2497: GO 2559
// if GetDistUnitXY ( i , center [ 1 ] , center [ 2 ] ) > 5 then
2499: LD_VAR 0 1
2503: PPUSH
2504: LD_VAR 0 8
2508: PUSH
2509: LD_INT 1
2511: ARRAY
2512: PPUSH
2513: LD_VAR 0 8
2517: PUSH
2518: LD_INT 2
2520: ARRAY
2521: PPUSH
2522: CALL_OW 297
2526: PUSH
2527: LD_INT 5
2529: GREATER
2530: IFFALSE 2559
// ComMoveXY ( i , center [ 1 ] , center [ 2 ] ) ;
2532: LD_VAR 0 1
2536: PPUSH
2537: LD_VAR 0 8
2541: PUSH
2542: LD_INT 1
2544: ARRAY
2545: PPUSH
2546: LD_VAR 0 8
2550: PUSH
2551: LD_INT 2
2553: ARRAY
2554: PPUSH
2555: CALL_OW 111
2559: GO 2316
2561: POP
2562: POP
// mech = UnitFilter ( start_americans , [ [ f_class , class_mechanic ] , [ f_lives , 600 ] ] ) ;
2563: LD_ADDR_VAR 0 5
2567: PUSH
2568: LD_EXP 3
2572: PPUSH
2573: LD_INT 25
2575: PUSH
2576: LD_INT 3
2578: PUSH
2579: EMPTY
2580: LIST
2581: LIST
2582: PUSH
2583: LD_INT 24
2585: PUSH
2586: LD_INT 600
2588: PUSH
2589: EMPTY
2590: LIST
2591: LIST
2592: PUSH
2593: EMPTY
2594: LIST
2595: LIST
2596: PPUSH
2597: CALL_OW 72
2601: ST_TO_ADDR
// fact = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_factory ] , [ f_ok ] ] ) ;
2602: LD_ADDR_VAR 0 12
2606: PUSH
2607: LD_INT 22
2609: PUSH
2610: LD_INT 1
2612: PUSH
2613: EMPTY
2614: LIST
2615: LIST
2616: PUSH
2617: LD_INT 30
2619: PUSH
2620: LD_INT 3
2622: PUSH
2623: EMPTY
2624: LIST
2625: LIST
2626: PUSH
2627: LD_INT 50
2629: PUSH
2630: EMPTY
2631: LIST
2632: PUSH
2633: EMPTY
2634: LIST
2635: LIST
2636: LIST
2637: PPUSH
2638: CALL_OW 69
2642: ST_TO_ADDR
// for i in mech do
2643: LD_ADDR_VAR 0 1
2647: PUSH
2648: LD_VAR 0 5
2652: PUSH
2653: FOR_IN
2654: IFFALSE 2820
// if fact = 0 then
2656: LD_VAR 0 12
2660: PUSH
2661: LD_INT 0
2663: EQUAL
2664: IFFALSE 2788
// begin if con > 0 then
2666: LD_VAR 0 15
2670: PUSH
2671: LD_INT 0
2673: GREATER
2674: IFFALSE 2726
// SetTaskList ( i , [ [ h , 0 , 0 , con [ 1 ] , 0 , 0 , 0 ] ] ) else
2676: LD_VAR 0 1
2680: PPUSH
2681: LD_STRING h
2683: PUSH
2684: LD_INT 0
2686: PUSH
2687: LD_INT 0
2689: PUSH
2690: LD_VAR 0 15
2694: PUSH
2695: LD_INT 1
2697: ARRAY
2698: PUSH
2699: LD_INT 0
2701: PUSH
2702: LD_INT 0
2704: PUSH
2705: LD_INT 0
2707: PUSH
2708: EMPTY
2709: LIST
2710: LIST
2711: LIST
2712: LIST
2713: LIST
2714: LIST
2715: LIST
2716: PUSH
2717: EMPTY
2718: LIST
2719: PPUSH
2720: CALL_OW 446
2724: GO 2786
// if GetDistUnitXY ( i , center [ 1 ] , center [ 2 ] ) > 5 then
2726: LD_VAR 0 1
2730: PPUSH
2731: LD_VAR 0 8
2735: PUSH
2736: LD_INT 1
2738: ARRAY
2739: PPUSH
2740: LD_VAR 0 8
2744: PUSH
2745: LD_INT 2
2747: ARRAY
2748: PPUSH
2749: CALL_OW 297
2753: PUSH
2754: LD_INT 5
2756: GREATER
2757: IFFALSE 2786
// ComMoveXY ( i , center [ 1 ] , center [ 2 ] ) ;
2759: LD_VAR 0 1
2763: PPUSH
2764: LD_VAR 0 8
2768: PUSH
2769: LD_INT 1
2771: ARRAY
2772: PPUSH
2773: LD_VAR 0 8
2777: PUSH
2778: LD_INT 2
2780: ARRAY
2781: PPUSH
2782: CALL_OW 111
// end else
2786: GO 2818
// if not IsInUnit ( mech ) then
2788: LD_VAR 0 5
2792: PPUSH
2793: CALL_OW 310
2797: NOT
2798: IFFALSE 2818
// ComEnterUnit ( mech , fact [ 1 ] ) ;
2800: LD_VAR 0 5
2804: PPUSH
2805: LD_VAR 0 12
2809: PUSH
2810: LD_INT 1
2812: ARRAY
2813: PPUSH
2814: CALL_OW 120
2818: GO 2653
2820: POP
2821: POP
// sci = UnitFilter ( start_americans , [ [ f_class , class_scientistic ] , [ f_lives , 600 ] ] ) ;
2822: LD_ADDR_VAR 0 6
2826: PUSH
2827: LD_EXP 3
2831: PPUSH
2832: LD_INT 25
2834: PUSH
2835: LD_INT 4
2837: PUSH
2838: EMPTY
2839: LIST
2840: LIST
2841: PUSH
2842: LD_INT 24
2844: PUSH
2845: LD_INT 600
2847: PUSH
2848: EMPTY
2849: LIST
2850: LIST
2851: PUSH
2852: EMPTY
2853: LIST
2854: LIST
2855: PPUSH
2856: CALL_OW 72
2860: ST_TO_ADDR
// lab = FilterAllUnits ( [ [ f_side , 1 ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] ] , [ f_ok ] ] ) ;
2861: LD_ADDR_VAR 0 13
2865: PUSH
2866: LD_INT 22
2868: PUSH
2869: LD_INT 1
2871: PUSH
2872: EMPTY
2873: LIST
2874: LIST
2875: PUSH
2876: LD_INT 2
2878: PUSH
2879: LD_INT 30
2881: PUSH
2882: LD_INT 6
2884: PUSH
2885: EMPTY
2886: LIST
2887: LIST
2888: PUSH
2889: LD_INT 30
2891: PUSH
2892: LD_INT 7
2894: PUSH
2895: EMPTY
2896: LIST
2897: LIST
2898: PUSH
2899: EMPTY
2900: LIST
2901: LIST
2902: LIST
2903: PUSH
2904: LD_INT 50
2906: PUSH
2907: EMPTY
2908: LIST
2909: PUSH
2910: EMPTY
2911: LIST
2912: LIST
2913: LIST
2914: PPUSH
2915: CALL_OW 69
2919: ST_TO_ADDR
// for i in sci do
2920: LD_ADDR_VAR 0 1
2924: PUSH
2925: LD_VAR 0 6
2929: PUSH
2930: FOR_IN
2931: IFFALSE 3149
// if wounded > 0 then
2933: LD_VAR 0 7
2937: PUSH
2938: LD_INT 0
2940: GREATER
2941: IFFALSE 2985
// begin if IsInUnit ( i ) then
2943: LD_VAR 0 1
2947: PPUSH
2948: CALL_OW 310
2952: IFFALSE 2965
// ComExitBuilding ( i ) else
2954: LD_VAR 0 1
2958: PPUSH
2959: CALL_OW 122
2963: GO 2983
// ComHeal ( i , wounded [ 1 ] ) ;
2965: LD_VAR 0 1
2969: PPUSH
2970: LD_VAR 0 7
2974: PUSH
2975: LD_INT 1
2977: ARRAY
2978: PPUSH
2979: CALL_OW 128
// end else
2983: GO 3147
// if lab > 0 then
2985: LD_VAR 0 13
2989: PUSH
2990: LD_INT 0
2992: GREATER
2993: IFFALSE 3027
// begin if not IsInUnit ( i ) then
2995: LD_VAR 0 1
2999: PPUSH
3000: CALL_OW 310
3004: NOT
3005: IFFALSE 3025
// ComEnterUnit ( i , lab [ 1 ] ) ;
3007: LD_VAR 0 1
3011: PPUSH
3012: LD_VAR 0 13
3016: PUSH
3017: LD_INT 1
3019: ARRAY
3020: PPUSH
3021: CALL_OW 120
// end else
3025: GO 3147
// if con > 0 then
3027: LD_VAR 0 15
3031: PUSH
3032: LD_INT 0
3034: GREATER
3035: IFFALSE 3087
// SetTaskList ( i , [ [ h , 0 , 0 , con [ 1 ] , 0 , 0 , 0 ] ] ) else
3037: LD_VAR 0 1
3041: PPUSH
3042: LD_STRING h
3044: PUSH
3045: LD_INT 0
3047: PUSH
3048: LD_INT 0
3050: PUSH
3051: LD_VAR 0 15
3055: PUSH
3056: LD_INT 1
3058: ARRAY
3059: PUSH
3060: LD_INT 0
3062: PUSH
3063: LD_INT 0
3065: PUSH
3066: LD_INT 0
3068: PUSH
3069: EMPTY
3070: LIST
3071: LIST
3072: LIST
3073: LIST
3074: LIST
3075: LIST
3076: LIST
3077: PUSH
3078: EMPTY
3079: LIST
3080: PPUSH
3081: CALL_OW 446
3085: GO 3147
// if GetDistUnitXY ( i , center [ 1 ] , center [ 2 ] ) > 5 then
3087: LD_VAR 0 1
3091: PPUSH
3092: LD_VAR 0 8
3096: PUSH
3097: LD_INT 1
3099: ARRAY
3100: PPUSH
3101: LD_VAR 0 8
3105: PUSH
3106: LD_INT 2
3108: ARRAY
3109: PPUSH
3110: CALL_OW 297
3114: PUSH
3115: LD_INT 5
3117: GREATER
3118: IFFALSE 3147
// ComMoveXY ( i , center [ 1 ] , center [ 2 ] ) ;
3120: LD_VAR 0 1
3124: PPUSH
3125: LD_VAR 0 8
3129: PUSH
3130: LD_INT 1
3132: ARRAY
3133: PPUSH
3134: LD_VAR 0 8
3138: PUSH
3139: LD_INT 2
3141: ARRAY
3142: PPUSH
3143: CALL_OW 111
3147: GO 2930
3149: POP
3150: POP
// eng = UnitFilter ( start_americans , [ [ f_or , [ f_class , class_engineer ] , [ f_class , class_apeman_engineer ] ] , [ f_lives , 600 ] ] ) ;
3151: LD_ADDR_VAR 0 4
3155: PUSH
3156: LD_EXP 3
3160: PPUSH
3161: LD_INT 2
3163: PUSH
3164: LD_INT 25
3166: PUSH
3167: LD_INT 2
3169: PUSH
3170: EMPTY
3171: LIST
3172: LIST
3173: PUSH
3174: LD_INT 25
3176: PUSH
3177: LD_INT 16
3179: PUSH
3180: EMPTY
3181: LIST
3182: LIST
3183: PUSH
3184: EMPTY
3185: LIST
3186: LIST
3187: LIST
3188: PUSH
3189: LD_INT 24
3191: PUSH
3192: LD_INT 600
3194: PUSH
3195: EMPTY
3196: LIST
3197: LIST
3198: PUSH
3199: EMPTY
3200: LIST
3201: LIST
3202: PPUSH
3203: CALL_OW 72
3207: ST_TO_ADDR
// depo = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_depot ] ] ) ;
3208: LD_ADDR_VAR 0 14
3212: PUSH
3213: LD_INT 22
3215: PUSH
3216: LD_INT 1
3218: PUSH
3219: EMPTY
3220: LIST
3221: LIST
3222: PUSH
3223: LD_INT 30
3225: PUSH
3226: LD_INT 0
3228: PUSH
3229: EMPTY
3230: LIST
3231: LIST
3232: PUSH
3233: EMPTY
3234: LIST
3235: LIST
3236: PPUSH
3237: CALL_OW 69
3241: ST_TO_ADDR
// damaged = FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_building ] , [ f_not , [ f_lives , 1000 ] ] ] ) ;
3242: LD_ADDR_VAR 0 16
3246: PUSH
3247: LD_INT 22
3249: PUSH
3250: LD_INT 1
3252: PUSH
3253: EMPTY
3254: LIST
3255: LIST
3256: PUSH
3257: LD_INT 21
3259: PUSH
3260: LD_INT 3
3262: PUSH
3263: EMPTY
3264: LIST
3265: LIST
3266: PUSH
3267: LD_INT 3
3269: PUSH
3270: LD_INT 24
3272: PUSH
3273: LD_INT 1000
3275: PUSH
3276: EMPTY
3277: LIST
3278: LIST
3279: PUSH
3280: EMPTY
3281: LIST
3282: LIST
3283: PUSH
3284: EMPTY
3285: LIST
3286: LIST
3287: LIST
3288: PPUSH
3289: CALL_OW 69
3293: ST_TO_ADDR
// for i in eng do
3294: LD_ADDR_VAR 0 1
3298: PUSH
3299: LD_VAR 0 4
3303: PUSH
3304: FOR_IN
3305: IFFALSE 3873
// if damaged > 0 then
3307: LD_VAR 0 16
3311: PUSH
3312: LD_INT 0
3314: GREATER
3315: IFFALSE 3359
// begin if IsInUnit ( i ) then
3317: LD_VAR 0 1
3321: PPUSH
3322: CALL_OW 310
3326: IFFALSE 3339
// ComExitBuilding ( i ) else
3328: LD_VAR 0 1
3332: PPUSH
3333: CALL_OW 122
3337: GO 3357
// ComRepairBuilding ( i , damaged [ 1 ] ) end else
3339: LD_VAR 0 1
3343: PPUSH
3344: LD_VAR 0 16
3348: PUSH
3349: LD_INT 1
3351: ARRAY
3352: PPUSH
3353: CALL_OW 130
3357: GO 3871
// if con > 0 then
3359: LD_VAR 0 15
3363: PUSH
3364: LD_INT 0
3366: GREATER
3367: IFFALSE 3419
// SetTaskList ( i , [ [ h , 0 , 0 , con [ 1 ] , 0 , 0 , 0 ] ] ) else
3369: LD_VAR 0 1
3373: PPUSH
3374: LD_STRING h
3376: PUSH
3377: LD_INT 0
3379: PUSH
3380: LD_INT 0
3382: PUSH
3383: LD_VAR 0 15
3387: PUSH
3388: LD_INT 1
3390: ARRAY
3391: PUSH
3392: LD_INT 0
3394: PUSH
3395: LD_INT 0
3397: PUSH
3398: LD_INT 0
3400: PUSH
3401: EMPTY
3402: LIST
3403: LIST
3404: LIST
3405: LIST
3406: LIST
3407: LIST
3408: LIST
3409: PUSH
3410: EMPTY
3411: LIST
3412: PPUSH
3413: CALL_OW 446
3417: GO 3871
// case AmBuildCount of 0 :
3419: LD_EXP 51
3423: PUSH
3424: LD_INT 0
3426: DOUBLE
3427: EQUAL
3428: IFTRUE 3432
3430: GO 3456
3432: POP
// ComBuild ( i , b_lab , 29 , 15 , 2 ) ; 1 :
3433: LD_VAR 0 1
3437: PPUSH
3438: LD_INT 6
3440: PPUSH
3441: LD_INT 29
3443: PPUSH
3444: LD_INT 15
3446: PPUSH
3447: LD_INT 2
3449: PPUSH
3450: CALL_OW 145
3454: GO 3871
3456: LD_INT 1
3458: DOUBLE
3459: EQUAL
3460: IFTRUE 3464
3462: GO 3488
3464: POP
// ComBuild ( i , b_armoury , 42 , 19 , 3 ) ; 2 :
3465: LD_VAR 0 1
3469: PPUSH
3470: LD_INT 4
3472: PPUSH
3473: LD_INT 42
3475: PPUSH
3476: LD_INT 19
3478: PPUSH
3479: LD_INT 3
3481: PPUSH
3482: CALL_OW 145
3486: GO 3871
3488: LD_INT 2
3490: DOUBLE
3491: EQUAL
3492: IFTRUE 3496
3494: GO 3520
3496: POP
// ComBuild ( i , b_workshop , 30 , 29 , 2 ) ; 3 :
3497: LD_VAR 0 1
3501: PPUSH
3502: LD_INT 2
3504: PPUSH
3505: LD_INT 30
3507: PPUSH
3508: LD_INT 29
3510: PPUSH
3511: LD_INT 2
3513: PPUSH
3514: CALL_OW 145
3518: GO 3871
3520: LD_INT 3
3522: DOUBLE
3523: EQUAL
3524: IFTRUE 3528
3526: GO 3552
3528: POP
// ComBuild ( i , b_solar_power , 31 , 24 , 3 ) ; 4 :
3529: LD_VAR 0 1
3533: PPUSH
3534: LD_INT 27
3536: PPUSH
3537: LD_INT 31
3539: PPUSH
3540: LD_INT 24
3542: PPUSH
3543: LD_INT 3
3545: PPUSH
3546: CALL_OW 145
3550: GO 3871
3552: LD_INT 4
3554: DOUBLE
3555: EQUAL
3556: IFTRUE 3560
3558: GO 3639
3560: POP
// begin temp = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_lab ] ] ) ;
3561: LD_ADDR_VAR 0 2
3565: PUSH
3566: LD_INT 22
3568: PUSH
3569: LD_INT 1
3571: PUSH
3572: EMPTY
3573: LIST
3574: LIST
3575: PUSH
3576: LD_INT 30
3578: PUSH
3579: LD_INT 6
3581: PUSH
3582: EMPTY
3583: LIST
3584: LIST
3585: PUSH
3586: EMPTY
3587: LIST
3588: LIST
3589: PPUSH
3590: CALL_OW 69
3594: ST_TO_ADDR
// if temp = 0 then
3595: LD_VAR 0 2
3599: PUSH
3600: LD_INT 0
3602: EQUAL
3603: IFFALSE 3621
// AmBuildCount = AmBuildCount + 5 else
3605: LD_ADDR_EXP 51
3609: PUSH
3610: LD_EXP 51
3614: PUSH
3615: LD_INT 5
3617: PLUS
3618: ST_TO_ADDR
3619: GO 3637
// ComUpgradeLab ( temp [ 1 ] , b_lab_weapon ) ;
3621: LD_VAR 0 2
3625: PUSH
3626: LD_INT 1
3628: ARRAY
3629: PPUSH
3630: LD_INT 10
3632: PPUSH
3633: CALL_OW 147
// end ; 5 :
3637: GO 3871
3639: LD_INT 5
3641: DOUBLE
3642: EQUAL
3643: IFTRUE 3647
3645: GO 3723
3647: POP
// begin temp = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_workshop ] ] ) ;
3648: LD_ADDR_VAR 0 2
3652: PUSH
3653: LD_INT 22
3655: PUSH
3656: LD_INT 1
3658: PUSH
3659: EMPTY
3660: LIST
3661: LIST
3662: PUSH
3663: LD_INT 30
3665: PUSH
3666: LD_INT 2
3668: PUSH
3669: EMPTY
3670: LIST
3671: LIST
3672: PUSH
3673: EMPTY
3674: LIST
3675: LIST
3676: PPUSH
3677: CALL_OW 69
3681: ST_TO_ADDR
// if temp = 0 then
3682: LD_VAR 0 2
3686: PUSH
3687: LD_INT 0
3689: EQUAL
3690: IFFALSE 3708
// AmBuildCount = AmBuildCount + 5 else
3692: LD_ADDR_EXP 51
3696: PUSH
3697: LD_EXP 51
3701: PUSH
3702: LD_INT 5
3704: PLUS
3705: ST_TO_ADDR
3706: GO 3721
// ComUpgrade ( temp [ 1 ] ) ;
3708: LD_VAR 0 2
3712: PUSH
3713: LD_INT 1
3715: ARRAY
3716: PPUSH
3717: CALL_OW 146
// end ; 6 :
3721: GO 3871
3723: LD_INT 6
3725: DOUBLE
3726: EQUAL
3727: IFTRUE 3731
3729: GO 3840
3731: POP
// begin temp = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_breastwork ] ] ) ;
3732: LD_ADDR_VAR 0 2
3736: PUSH
3737: LD_INT 22
3739: PUSH
3740: LD_INT 1
3742: PUSH
3743: EMPTY
3744: LIST
3745: LIST
3746: PUSH
3747: LD_INT 30
3749: PUSH
3750: LD_INT 31
3752: PUSH
3753: EMPTY
3754: LIST
3755: LIST
3756: PUSH
3757: EMPTY
3758: LIST
3759: LIST
3760: PPUSH
3761: CALL_OW 69
3765: ST_TO_ADDR
// if temp = 0 then
3766: LD_VAR 0 2
3770: PUSH
3771: LD_INT 0
3773: EQUAL
3774: IFFALSE 3792
// AmBuildCount = AmBuildCount + 5 else
3776: LD_ADDR_EXP 51
3780: PUSH
3781: LD_EXP 51
3785: PUSH
3786: LD_INT 5
3788: PLUS
3789: ST_TO_ADDR
3790: GO 3838
// SetTaskList ( temp [ 1 ] , [ [ 2 , 0 , 0 , 0 , 0 , 0 , 0 ] ] ) ;
3792: LD_VAR 0 2
3796: PUSH
3797: LD_INT 1
3799: ARRAY
3800: PPUSH
3801: LD_INT 2
3803: PUSH
3804: LD_INT 0
3806: PUSH
3807: LD_INT 0
3809: PUSH
3810: LD_INT 0
3812: PUSH
3813: LD_INT 0
3815: PUSH
3816: LD_INT 0
3818: PUSH
3819: LD_INT 0
3821: PUSH
3822: EMPTY
3823: LIST
3824: LIST
3825: LIST
3826: LIST
3827: LIST
3828: LIST
3829: LIST
3830: PUSH
3831: EMPTY
3832: LIST
3833: PPUSH
3834: CALL_OW 446
// end ; else
3838: GO 3871
3840: POP
// if not IsInUnit ( i ) then
3841: LD_VAR 0 1
3845: PPUSH
3846: CALL_OW 310
3850: NOT
3851: IFFALSE 3871
// ComEnterUnit ( i , depo [ 1 ] ) ; end ;
3853: LD_VAR 0 1
3857: PPUSH
3858: LD_VAR 0 14
3862: PUSH
3863: LD_INT 1
3865: ARRAY
3866: PPUSH
3867: CALL_OW 120
3871: GO 3304
3873: POP
3874: POP
// temp = FilterAllUnits ( [ [ f_side , 1 ] , [ f_btype , b_bunker ] ] ) ;
3875: LD_ADDR_VAR 0 2
3879: PUSH
3880: LD_INT 22
3882: PUSH
3883: LD_INT 1
3885: PUSH
3886: EMPTY
3887: LIST
3888: LIST
3889: PUSH
3890: LD_INT 30
3892: PUSH
3893: LD_INT 32
3895: PUSH
3896: EMPTY
3897: LIST
3898: LIST
3899: PUSH
3900: EMPTY
3901: LIST
3902: LIST
3903: PPUSH
3904: CALL_OW 69
3908: ST_TO_ADDR
// if temp > 0 then
3909: LD_VAR 0 2
3913: PUSH
3914: LD_INT 0
3916: GREATER
3917: IFFALSE 3983
// if GetBWeapon ( temp [ 1 ] ) = 0 and fact > 0 and IsBusy ( fact [ 1 ] ) = 0 then
3919: LD_VAR 0 2
3923: PUSH
3924: LD_INT 1
3926: ARRAY
3927: PPUSH
3928: CALL_OW 269
3932: PUSH
3933: LD_INT 0
3935: EQUAL
3936: PUSH
3937: LD_VAR 0 12
3941: PUSH
3942: LD_INT 0
3944: GREATER
3945: AND
3946: PUSH
3947: LD_VAR 0 12
3951: PUSH
3952: LD_INT 1
3954: ARRAY
3955: PPUSH
3956: CALL_OW 315
3960: PUSH
3961: LD_INT 0
3963: EQUAL
3964: AND
3965: IFFALSE 3983
// ComPlaceWeapon ( temp [ 1 ] , us_gatling_gun ) ;
3967: LD_VAR 0 2
3971: PUSH
3972: LD_INT 1
3974: ARRAY
3975: PPUSH
3976: LD_INT 4
3978: PPUSH
3979: CALL_OW 148
// enable ;
3983: ENABLE
// end ;
3984: PPOPN 16
3986: END
// export function PrepareAmericans ; var i , k , temp_unit , temp_list ; begin
3987: LD_INT 0
3989: PPUSH
3990: PPUSH
3991: PPUSH
3992: PPUSH
3993: PPUSH
// SetBName ( dep , eta ) ;
3994: LD_INT 1
3996: PPUSH
3997: LD_STRING eta
3999: PPUSH
4000: CALL_OW 500
// InitHc ;
4004: CALL_OW 19
// InitUc ;
4008: CALL_OW 18
// uc_nation = nation_american ;
4012: LD_ADDR_OWVAR 21
4016: PUSH
4017: LD_INT 1
4019: ST_TO_ADDR
// uc_side = 1 ;
4020: LD_ADDR_OWVAR 20
4024: PUSH
4025: LD_INT 1
4027: ST_TO_ADDR
// start_americans = [ ] ;
4028: LD_ADDR_EXP 3
4032: PUSH
4033: EMPTY
4034: ST_TO_ADDR
// for i = 1 to 2 do
4035: LD_ADDR_VAR 0 2
4039: PUSH
4040: DOUBLE
4041: LD_INT 1
4043: DEC
4044: ST_TO_ADDR
4045: LD_INT 2
4047: PUSH
4048: FOR_TO
4049: IFFALSE 4146
// begin PrepareSoldier ( sex_male , am_skill_lvl ) ;
4051: LD_INT 1
4053: PPUSH
4054: LD_EXP 56
4058: PPUSH
4059: CALL_OW 381
// hc_attr = [ Rand ( 10 , 11 ) , [ 10 , 11 , 12 ] [ difficulty ] ] ;
4063: LD_ADDR_OWVAR 29
4067: PUSH
4068: LD_INT 10
4070: PPUSH
4071: LD_INT 11
4073: PPUSH
4074: CALL_OW 12
4078: PUSH
4079: LD_INT 10
4081: PUSH
4082: LD_INT 11
4084: PUSH
4085: LD_INT 12
4087: PUSH
4088: EMPTY
4089: LIST
4090: LIST
4091: LIST
4092: PUSH
4093: LD_OWVAR 67
4097: ARRAY
4098: PUSH
4099: EMPTY
4100: LIST
4101: LIST
4102: ST_TO_ADDR
// start_americans = start_americans ^ CreateHuman ;
4103: LD_ADDR_EXP 3
4107: PUSH
4108: LD_EXP 3
4112: PUSH
4113: CALL_OW 44
4117: ADD
4118: ST_TO_ADDR
// PlaceHumanInUnit ( start_americans [ i ] , [ bunkr1 ] [ 1 ] ) ;
4119: LD_EXP 3
4123: PUSH
4124: LD_VAR 0 2
4128: ARRAY
4129: PPUSH
4130: LD_INT 3
4132: PUSH
4133: EMPTY
4134: LIST
4135: PUSH
4136: LD_INT 1
4138: ARRAY
4139: PPUSH
4140: CALL_OW 52
// end ;
4144: GO 4048
4146: POP
4147: POP
// PrepareEngineer ( sex_male , 2 ) ;
4148: LD_INT 1
4150: PPUSH
4151: LD_INT 2
4153: PPUSH
4154: CALL_OW 382
// hc_attr = [ Rand ( 10 , 11 ) , [ 10 , 11 , 12 ] [ difficulty ] ] ;
4158: LD_ADDR_OWVAR 29
4162: PUSH
4163: LD_INT 10
4165: PPUSH
4166: LD_INT 11
4168: PPUSH
4169: CALL_OW 12
4173: PUSH
4174: LD_INT 10
4176: PUSH
4177: LD_INT 11
4179: PUSH
4180: LD_INT 12
4182: PUSH
4183: EMPTY
4184: LIST
4185: LIST
4186: LIST
4187: PUSH
4188: LD_OWVAR 67
4192: ARRAY
4193: PUSH
4194: EMPTY
4195: LIST
4196: LIST
4197: ST_TO_ADDR
// start_americans = start_americans ^ CreateHuman ;
4198: LD_ADDR_EXP 3
4202: PUSH
4203: LD_EXP 3
4207: PUSH
4208: CALL_OW 44
4212: ADD
4213: ST_TO_ADDR
// PlaceHumanInUnit ( start_americans [ 3 ] , dep ) ;
4214: LD_EXP 3
4218: PUSH
4219: LD_INT 3
4221: ARRAY
4222: PPUSH
4223: LD_INT 1
4225: PPUSH
4226: CALL_OW 52
// PrepareScientist ( false , 2 ) ;
4230: LD_INT 0
4232: PPUSH
4233: LD_INT 2
4235: PPUSH
4236: CALL_OW 384
// hc_attr = [ Rand ( 10 , 11 ) , [ 10 , 11 , 12 ] [ difficulty ] ] ;
4240: LD_ADDR_OWVAR 29
4244: PUSH
4245: LD_INT 10
4247: PPUSH
4248: LD_INT 11
4250: PPUSH
4251: CALL_OW 12
4255: PUSH
4256: LD_INT 10
4258: PUSH
4259: LD_INT 11
4261: PUSH
4262: LD_INT 12
4264: PUSH
4265: EMPTY
4266: LIST
4267: LIST
4268: LIST
4269: PUSH
4270: LD_OWVAR 67
4274: ARRAY
4275: PUSH
4276: EMPTY
4277: LIST
4278: LIST
4279: ST_TO_ADDR
// start_americans = start_americans ^ CreateHuman ;
4280: LD_ADDR_EXP 3
4284: PUSH
4285: LD_EXP 3
4289: PUSH
4290: CALL_OW 44
4294: ADD
4295: ST_TO_ADDR
// PlaceUnitXY ( start_americans [ 4 ] , 35 , 28 , false ) ;
4296: LD_EXP 3
4300: PUSH
4301: LD_INT 4
4303: ARRAY
4304: PPUSH
4305: LD_INT 35
4307: PPUSH
4308: LD_INT 28
4310: PPUSH
4311: LD_INT 0
4313: PPUSH
4314: CALL_OW 48
// PrepareMechanic ( false , 2 ) ;
4318: LD_INT 0
4320: PPUSH
4321: LD_INT 2
4323: PPUSH
4324: CALL_OW 383
// hc_attr = [ Rand ( 10 , 11 ) , [ 10 , 11 , 12 ] [ difficulty ] ] ;
4328: LD_ADDR_OWVAR 29
4332: PUSH
4333: LD_INT 10
4335: PPUSH
4336: LD_INT 11
4338: PPUSH
4339: CALL_OW 12
4343: PUSH
4344: LD_INT 10
4346: PUSH
4347: LD_INT 11
4349: PUSH
4350: LD_INT 12
4352: PUSH
4353: EMPTY
4354: LIST
4355: LIST
4356: LIST
4357: PUSH
4358: LD_OWVAR 67
4362: ARRAY
4363: PUSH
4364: EMPTY
4365: LIST
4366: LIST
4367: ST_TO_ADDR
// start_americans = start_americans ^ CreateHuman ;
4368: LD_ADDR_EXP 3
4372: PUSH
4373: LD_EXP 3
4377: PUSH
4378: CALL_OW 44
4382: ADD
4383: ST_TO_ADDR
// PlaceUnitXY ( start_americans [ 4 ] , 35 , 28 , false ) ;
4384: LD_EXP 3
4388: PUSH
4389: LD_INT 4
4391: ARRAY
4392: PPUSH
4393: LD_INT 35
4395: PPUSH
4396: LD_INT 28
4398: PPUSH
4399: LD_INT 0
4401: PPUSH
4402: CALL_OW 48
// for i = 1 to [ 2 , 2 , 3 ] [ Difficulty ] do
4406: LD_ADDR_VAR 0 2
4410: PUSH
4411: DOUBLE
4412: LD_INT 1
4414: DEC
4415: ST_TO_ADDR
4416: LD_INT 2
4418: PUSH
4419: LD_INT 2
4421: PUSH
4422: LD_INT 3
4424: PUSH
4425: EMPTY
4426: LIST
4427: LIST
4428: LIST
4429: PUSH
4430: LD_OWVAR 67
4434: ARRAY
4435: PUSH
4436: FOR_TO
4437: IFFALSE 4540
// begin PrepareSoldier ( sex_male , am_skill_lvl ) ;
4439: LD_INT 1
4441: PPUSH
4442: LD_EXP 56
4446: PPUSH
4447: CALL_OW 381
// hc_attr = [ Rand ( 10 , 11 ) , [ 10 , 11 , 12 ] [ difficulty ] ] ;
4451: LD_ADDR_OWVAR 29
4455: PUSH
4456: LD_INT 10
4458: PPUSH
4459: LD_INT 11
4461: PPUSH
4462: CALL_OW 12
4466: PUSH
4467: LD_INT 10
4469: PUSH
4470: LD_INT 11
4472: PUSH
4473: LD_INT 12
4475: PUSH
4476: EMPTY
4477: LIST
4478: LIST
4479: LIST
4480: PUSH
4481: LD_OWVAR 67
4485: ARRAY
4486: PUSH
4487: EMPTY
4488: LIST
4489: LIST
4490: ST_TO_ADDR
// start_americans = start_americans ^ CreateHuman ;
4491: LD_ADDR_EXP 3
4495: PUSH
4496: LD_EXP 3
4500: PUSH
4501: CALL_OW 44
4505: ADD
4506: ST_TO_ADDR
// PlaceUnitXYR ( start_americans [ 4 + i ] , 37 , 29 , 5 , false ) ;
4507: LD_EXP 3
4511: PUSH
4512: LD_INT 4
4514: PUSH
4515: LD_VAR 0 2
4519: PLUS
4520: ARRAY
4521: PPUSH
4522: LD_INT 37
4524: PPUSH
4525: LD_INT 29
4527: PPUSH
4528: LD_INT 5
4530: PPUSH
4531: LD_INT 0
4533: PPUSH
4534: CALL_OW 50
// end ;
4538: GO 4436
4540: POP
4541: POP
// if KilledAmSci_02 = 1 then
4542: LD_EXP 35
4546: PUSH
4547: LD_INT 1
4549: EQUAL
4550: IFFALSE 4635
// begin for i = 1 to 2 do
4552: LD_ADDR_VAR 0 2
4556: PUSH
4557: DOUBLE
4558: LD_INT 1
4560: DEC
4561: ST_TO_ADDR
4562: LD_INT 2
4564: PUSH
4565: FOR_TO
4566: IFFALSE 4633
// begin uc_nation = 0 ;
4568: LD_ADDR_OWVAR 21
4572: PUSH
4573: LD_INT 0
4575: ST_TO_ADDR
// hc_class = class_apeman_engineer ;
4576: LD_ADDR_OWVAR 28
4580: PUSH
4581: LD_INT 16
4583: ST_TO_ADDR
// temp_unit = CreateHuman ;
4584: LD_ADDR_VAR 0 4
4588: PUSH
4589: CALL_OW 44
4593: ST_TO_ADDR
// start_americans = start_americans ^ temp_unit ;
4594: LD_ADDR_EXP 3
4598: PUSH
4599: LD_EXP 3
4603: PUSH
4604: LD_VAR 0 4
4608: ADD
4609: ST_TO_ADDR
// PlaceUnitXYR ( temp_unit , 37 , 29 , 5 , false ) ;
4610: LD_VAR 0 4
4614: PPUSH
4615: LD_INT 37
4617: PPUSH
4618: LD_INT 29
4620: PPUSH
4621: LD_INT 5
4623: PPUSH
4624: LD_INT 0
4626: PPUSH
4627: CALL_OW 50
// end ;
4631: GO 4565
4633: POP
4634: POP
// end ; k = GetSkill ( start_americans [ 3 ] , skill_engineering ) ;
4635: LD_ADDR_VAR 0 3
4639: PUSH
4640: LD_EXP 3
4644: PUSH
4645: LD_INT 3
4647: ARRAY
4648: PPUSH
4649: LD_INT 2
4651: PPUSH
4652: CALL_OW 259
4656: ST_TO_ADDR
// for i in [ dep , bunkr1 ] do
4657: LD_ADDR_VAR 0 2
4661: PUSH
4662: LD_INT 1
4664: PUSH
4665: LD_INT 3
4667: PUSH
4668: EMPTY
4669: LIST
4670: LIST
4671: PUSH
4672: FOR_IN
4673: IFFALSE 4691
// SetBLevel ( i , k ) ;
4675: LD_VAR 0 2
4679: PPUSH
4680: LD_VAR 0 3
4684: PPUSH
4685: CALL_OW 241
4689: GO 4672
4691: POP
4692: POP
// SetResourceVisibility ( 28 , 3 , 1 ) ;
4693: LD_INT 28
4695: PPUSH
4696: LD_INT 3
4698: PPUSH
4699: LD_INT 1
4701: PPUSH
4702: CALL_OW 441
// end ;
4706: LD_VAR 0 1
4710: RET
// export function PrepareAmConvoy ; var i , tmp_veh , tmp_human ; begin
4711: LD_INT 0
4713: PPUSH
4714: PPUSH
4715: PPUSH
4716: PPUSH
// InitUc ;
4717: CALL_OW 18
// InitHc ;
4721: CALL_OW 19
// uc_side = 1 ;
4725: LD_ADDR_OWVAR 20
4729: PUSH
4730: LD_INT 1
4732: ST_TO_ADDR
// uc_nation = 1 ;
4733: LD_ADDR_OWVAR 21
4737: PUSH
4738: LD_INT 1
4740: ST_TO_ADDR
// vc_control = control_manual ;
4741: LD_ADDR_OWVAR 38
4745: PUSH
4746: LD_INT 1
4748: ST_TO_ADDR
// vc_engine = engine_combustion ;
4749: LD_ADDR_OWVAR 39
4753: PUSH
4754: LD_INT 1
4756: ST_TO_ADDR
// for i = 1 to [ 2 , 2 , 3 ] [ difficulty ] do
4757: LD_ADDR_VAR 0 2
4761: PUSH
4762: DOUBLE
4763: LD_INT 1
4765: DEC
4766: ST_TO_ADDR
4767: LD_INT 2
4769: PUSH
4770: LD_INT 2
4772: PUSH
4773: LD_INT 3
4775: PUSH
4776: EMPTY
4777: LIST
4778: LIST
4779: LIST
4780: PUSH
4781: LD_OWVAR 67
4785: ARRAY
4786: PUSH
4787: FOR_TO
4788: IFFALSE 5025
// begin case i of 1 :
4790: LD_VAR 0 2
4794: PUSH
4795: LD_INT 1
4797: DOUBLE
4798: EQUAL
4799: IFTRUE 4803
4801: GO 4822
4803: POP
// begin vc_chassis = us_light_wheeled ;
4804: LD_ADDR_OWVAR 37
4808: PUSH
4809: LD_INT 1
4811: ST_TO_ADDR
// vc_weapon = us_machine_gun ;
4812: LD_ADDR_OWVAR 40
4816: PUSH
4817: LD_INT 2
4819: ST_TO_ADDR
// end ; 2 :
4820: GO 4897
4822: LD_INT 2
4824: DOUBLE
4825: EQUAL
4826: IFTRUE 4830
4828: GO 4869
4830: POP
// begin vc_chassis = us_medium_wheeled ;
4831: LD_ADDR_OWVAR 37
4835: PUSH
4836: LD_INT 2
4838: ST_TO_ADDR
// if Difficulty = 1 then
4839: LD_OWVAR 67
4843: PUSH
4844: LD_INT 1
4846: EQUAL
4847: IFFALSE 4859
// vc_weapon = us_cargo_bay else
4849: LD_ADDR_OWVAR 40
4853: PUSH
4854: LD_INT 12
4856: ST_TO_ADDR
4857: GO 4867
// vc_weapon = us_gatling_gun ;
4859: LD_ADDR_OWVAR 40
4863: PUSH
4864: LD_INT 4
4866: ST_TO_ADDR
// end ; 3 :
4867: GO 4897
4869: LD_INT 3
4871: DOUBLE
4872: EQUAL
4873: IFTRUE 4877
4875: GO 4896
4877: POP
// begin vc_chassis = us_light_wheeled ;
4878: LD_ADDR_OWVAR 37
4882: PUSH
4883: LD_INT 1
4885: ST_TO_ADDR
// vc_weapon = us_light_gun ;
4886: LD_ADDR_OWVAR 40
4890: PUSH
4891: LD_INT 3
4893: ST_TO_ADDR
// end ; end ;
4894: GO 4897
4896: POP
// tmp_veh = CreateVehicle ;
4897: LD_ADDR_VAR 0 3
4901: PUSH
4902: CALL_OW 45
4906: ST_TO_ADDR
// PlaceUnitArea ( tmp_veh , AmConvoySpawnArea , false ) ;
4907: LD_VAR 0 3
4911: PPUSH
4912: LD_INT 3
4914: PPUSH
4915: LD_INT 0
4917: PPUSH
4918: CALL_OW 49
// if i = 1 then
4922: LD_VAR 0 2
4926: PUSH
4927: LD_INT 1
4929: EQUAL
4930: IFFALSE 4947
// AddCargo ( tmp_veh , 1 , 50 ) ;
4932: LD_VAR 0 3
4936: PPUSH
4937: LD_INT 1
4939: PPUSH
4940: LD_INT 50
4942: PPUSH
4943: CALL_OW 291
// PrepareMechanic ( false , am_skill_lvl ) ;
4947: LD_INT 0
4949: PPUSH
4950: LD_EXP 56
4954: PPUSH
4955: CALL_OW 383
// tmp_human = CreateHuman ;
4959: LD_ADDR_VAR 0 4
4963: PUSH
4964: CALL_OW 44
4968: ST_TO_ADDR
// PlaceHumanInUnit ( tmp_human , tmp_veh ) ;
4969: LD_VAR 0 4
4973: PPUSH
4974: LD_VAR 0 3
4978: PPUSH
4979: CALL_OW 52
// ConvoyAmericans_List = ConvoyAmericans_List ^ tmp_human ;
4983: LD_ADDR_EXP 4
4987: PUSH
4988: LD_EXP 4
4992: PUSH
4993: LD_VAR 0 4
4997: ADD
4998: ST_TO_ADDR
// ConvoyAmericans_List = ConvoyAmericans_List ^ tmp_veh ;
4999: LD_ADDR_EXP 4
5003: PUSH
5004: LD_EXP 4
5008: PUSH
5009: LD_VAR 0 3
5013: ADD
5014: ST_TO_ADDR
// ConvoyPlaced = 1 ;
5015: LD_ADDR_EXP 9
5019: PUSH
5020: LD_INT 1
5022: ST_TO_ADDR
// end ;
5023: GO 4787
5025: POP
5026: POP
// end ;
5027: LD_VAR 0 1
5031: RET
// export function SpawnAttack ( AttackIndex , SpawnArea ) ; var i , roadX , roadY , roadRand , temp_list , temp_unit , temp_veh ; begin
5032: LD_INT 0
5034: PPUSH
5035: PPUSH
5036: PPUSH
5037: PPUSH
5038: PPUSH
5039: PPUSH
5040: PPUSH
5041: PPUSH
// roadRand = 0 ;
5042: LD_ADDR_VAR 0 7
5046: PUSH
5047: LD_INT 0
5049: ST_TO_ADDR
// if SpawnArea = AmNorthSpawnArea then
5050: LD_VAR 0 2
5054: PUSH
5055: LD_INT 4
5057: EQUAL
5058: IFFALSE 5198
// begin roadRand = Rand ( 1 , 3 ) ;
5060: LD_ADDR_VAR 0 7
5064: PUSH
5065: LD_INT 1
5067: PPUSH
5068: LD_INT 3
5070: PPUSH
5071: CALL_OW 12
5075: ST_TO_ADDR
// roadX = [ [ 62 , 39 , 32 , 33 ] , [ 62 , 57 , 61 , 54 ] , [ 62 , 92 , 111 ] ] ;
5076: LD_ADDR_VAR 0 5
5080: PUSH
5081: LD_INT 62
5083: PUSH
5084: LD_INT 39
5086: PUSH
5087: LD_INT 32
5089: PUSH
5090: LD_INT 33
5092: PUSH
5093: EMPTY
5094: LIST
5095: LIST
5096: LIST
5097: LIST
5098: PUSH
5099: LD_INT 62
5101: PUSH
5102: LD_INT 57
5104: PUSH
5105: LD_INT 61
5107: PUSH
5108: LD_INT 54
5110: PUSH
5111: EMPTY
5112: LIST
5113: LIST
5114: LIST
5115: LIST
5116: PUSH
5117: LD_INT 62
5119: PUSH
5120: LD_INT 92
5122: PUSH
5123: LD_INT 111
5125: PUSH
5126: EMPTY
5127: LIST
5128: LIST
5129: LIST
5130: PUSH
5131: EMPTY
5132: LIST
5133: LIST
5134: LIST
5135: ST_TO_ADDR
// roadY = [ [ 6 , 5 , 9 , 26 ] , [ 6 , 23 , 38 , 36 ] , [ 6 , 30 , 59 ] ] ;
5136: LD_ADDR_VAR 0 6
5140: PUSH
5141: LD_INT 6
5143: PUSH
5144: LD_INT 5
5146: PUSH
5147: LD_INT 9
5149: PUSH
5150: LD_INT 26
5152: PUSH
5153: EMPTY
5154: LIST
5155: LIST
5156: LIST
5157: LIST
5158: PUSH
5159: LD_INT 6
5161: PUSH
5162: LD_INT 23
5164: PUSH
5165: LD_INT 38
5167: PUSH
5168: LD_INT 36
5170: PUSH
5171: EMPTY
5172: LIST
5173: LIST
5174: LIST
5175: LIST
5176: PUSH
5177: LD_INT 6
5179: PUSH
5180: LD_INT 30
5182: PUSH
5183: LD_INT 59
5185: PUSH
5186: EMPTY
5187: LIST
5188: LIST
5189: LIST
5190: PUSH
5191: EMPTY
5192: LIST
5193: LIST
5194: LIST
5195: ST_TO_ADDR
// end else
5196: GO 5304
// begin roadRand = Rand ( 1 , 2 ) ;
5198: LD_ADDR_VAR 0 7
5202: PUSH
5203: LD_INT 1
5205: PPUSH
5206: LD_INT 2
5208: PPUSH
5209: CALL_OW 12
5213: ST_TO_ADDR
// roadX = [ [ 38 , 45 , 38 ] , [ 38 , 54 , 81 , 87 , 111 ] ] ;
5214: LD_ADDR_VAR 0 5
5218: PUSH
5219: LD_INT 38
5221: PUSH
5222: LD_INT 45
5224: PUSH
5225: LD_INT 38
5227: PUSH
5228: EMPTY
5229: LIST
5230: LIST
5231: LIST
5232: PUSH
5233: LD_INT 38
5235: PUSH
5236: LD_INT 54
5238: PUSH
5239: LD_INT 81
5241: PUSH
5242: LD_INT 87
5244: PUSH
5245: LD_INT 111
5247: PUSH
5248: EMPTY
5249: LIST
5250: LIST
5251: LIST
5252: LIST
5253: LIST
5254: PUSH
5255: EMPTY
5256: LIST
5257: LIST
5258: ST_TO_ADDR
// roadY = [ [ 66 , 46 , 30 ] , [ 66 , 52 , 72 , 57 , 72 ] ] ;
5259: LD_ADDR_VAR 0 6
5263: PUSH
5264: LD_INT 66
5266: PUSH
5267: LD_INT 46
5269: PUSH
5270: LD_INT 30
5272: PUSH
5273: EMPTY
5274: LIST
5275: LIST
5276: LIST
5277: PUSH
5278: LD_INT 66
5280: PUSH
5281: LD_INT 52
5283: PUSH
5284: LD_INT 72
5286: PUSH
5287: LD_INT 57
5289: PUSH
5290: LD_INT 72
5292: PUSH
5293: EMPTY
5294: LIST
5295: LIST
5296: LIST
5297: LIST
5298: LIST
5299: PUSH
5300: EMPTY
5301: LIST
5302: LIST
5303: ST_TO_ADDR
// end ; InitHc ;
5304: CALL_OW 19
// InitUc ;
5308: CALL_OW 18
// uc_nation = nation_american ;
5312: LD_ADDR_OWVAR 21
5316: PUSH
5317: LD_INT 1
5319: ST_TO_ADDR
// uc_side = 1 ;
5320: LD_ADDR_OWVAR 20
5324: PUSH
5325: LD_INT 1
5327: ST_TO_ADDR
// case AttackIndex of 1 :
5328: LD_VAR 0 1
5332: PUSH
5333: LD_INT 1
5335: DOUBLE
5336: EQUAL
5337: IFTRUE 5341
5339: GO 6085
5341: POP
// begin temp_list = [ ] ;
5342: LD_ADDR_VAR 0 8
5346: PUSH
5347: EMPTY
5348: ST_TO_ADDR
// if Difficulty > 1 then
5349: LD_OWVAR 67
5353: PUSH
5354: LD_INT 1
5356: GREATER
5357: IFFALSE 5504
// begin PrepareMechanic ( false , am_skill_lvl ) ;
5359: LD_INT 0
5361: PPUSH
5362: LD_EXP 56
5366: PPUSH
5367: CALL_OW 383
// temp_unit = CreateHuman ;
5371: LD_ADDR_VAR 0 9
5375: PUSH
5376: CALL_OW 44
5380: ST_TO_ADDR
// vc_weapon = us_light_gun ;
5381: LD_ADDR_OWVAR 40
5385: PUSH
5386: LD_INT 3
5388: ST_TO_ADDR
// case difficulty of 2 :
5389: LD_OWVAR 67
5393: PUSH
5394: LD_INT 2
5396: DOUBLE
5397: EQUAL
5398: IFTRUE 5402
5400: GO 5413
5402: POP
// vc_chassis = us_light_wheeled ; 3 :
5403: LD_ADDR_OWVAR 37
5407: PUSH
5408: LD_INT 1
5410: ST_TO_ADDR
5411: GO 5433
5413: LD_INT 3
5415: DOUBLE
5416: EQUAL
5417: IFTRUE 5421
5419: GO 5432
5421: POP
// vc_chassis = us_medium_wheeled ; end ;
5422: LD_ADDR_OWVAR 37
5426: PUSH
5427: LD_INT 2
5429: ST_TO_ADDR
5430: GO 5433
5432: POP
// temp_veh = CreateVehicle ;
5433: LD_ADDR_VAR 0 10
5437: PUSH
5438: CALL_OW 45
5442: ST_TO_ADDR
// temp_list = [ [ temp_veh , temp_unit ] ] ;
5443: LD_ADDR_VAR 0 8
5447: PUSH
5448: LD_VAR 0 10
5452: PUSH
5453: LD_VAR 0 9
5457: PUSH
5458: EMPTY
5459: LIST
5460: LIST
5461: PUSH
5462: EMPTY
5463: LIST
5464: ST_TO_ADDR
// PlaceUnitArea ( temp_veh , SpawnArea , false ) ;
5465: LD_VAR 0 10
5469: PPUSH
5470: LD_VAR 0 2
5474: PPUSH
5475: LD_INT 0
5477: PPUSH
5478: CALL_OW 49
// PlaceHumanInUnit ( temp_unit , temp_list [ 1 ] [ 1 ] ) ;
5482: LD_VAR 0 9
5486: PPUSH
5487: LD_VAR 0 8
5491: PUSH
5492: LD_INT 1
5494: ARRAY
5495: PUSH
5496: LD_INT 1
5498: ARRAY
5499: PPUSH
5500: CALL_OW 52
// end ; first_wave = Replace ( first_wave , 1 , temp_list ) ;
5504: LD_ADDR_EXP 11
5508: PUSH
5509: LD_EXP 11
5513: PPUSH
5514: LD_INT 1
5516: PPUSH
5517: LD_VAR 0 8
5521: PPUSH
5522: CALL_OW 1
5526: ST_TO_ADDR
// temp_list = [ ] ;
5527: LD_ADDR_VAR 0 8
5531: PUSH
5532: EMPTY
5533: ST_TO_ADDR
// for i = 1 to difficulty + 1 do
5534: LD_ADDR_VAR 0 4
5538: PUSH
5539: DOUBLE
5540: LD_INT 1
5542: DEC
5543: ST_TO_ADDR
5544: LD_OWVAR 67
5548: PUSH
5549: LD_INT 1
5551: PLUS
5552: PUSH
5553: FOR_TO
5554: IFFALSE 5613
// begin PrepareSoldier ( false , am_skill_lvl ) ;
5556: LD_INT 0
5558: PPUSH
5559: LD_EXP 56
5563: PPUSH
5564: CALL_OW 381
// temp_unit = CreateHuman ;
5568: LD_ADDR_VAR 0 9
5572: PUSH
5573: CALL_OW 44
5577: ST_TO_ADDR
// temp_list = temp_list ^ temp_unit ;
5578: LD_ADDR_VAR 0 8
5582: PUSH
5583: LD_VAR 0 8
5587: PUSH
5588: LD_VAR 0 9
5592: ADD
5593: ST_TO_ADDR
// PlaceUnitArea ( temp_unit , SpawnArea , false ) ;
5594: LD_VAR 0 9
5598: PPUSH
5599: LD_VAR 0 2
5603: PPUSH
5604: LD_INT 0
5606: PPUSH
5607: CALL_OW 49
// end ;
5611: GO 5553
5613: POP
5614: POP
// first_wave = Replace ( first_wave , 2 , temp_list ) ;
5615: LD_ADDR_EXP 11
5619: PUSH
5620: LD_EXP 11
5624: PPUSH
5625: LD_INT 2
5627: PPUSH
5628: LD_VAR 0 8
5632: PPUSH
5633: CALL_OW 1
5637: ST_TO_ADDR
// for i = 1 to roadX [ RoadRand ] do
5638: LD_ADDR_VAR 0 4
5642: PUSH
5643: DOUBLE
5644: LD_INT 1
5646: DEC
5647: ST_TO_ADDR
5648: LD_VAR 0 5
5652: PUSH
5653: LD_VAR 0 7
5657: ARRAY
5658: PUSH
5659: FOR_TO
5660: IFFALSE 5887
// begin if SpawnArea = AmNorthSpawnArea and RoadRand <> 2 then
5662: LD_VAR 0 2
5666: PUSH
5667: LD_INT 4
5669: EQUAL
5670: PUSH
5671: LD_VAR 0 7
5675: PUSH
5676: LD_INT 2
5678: NONEQUAL
5679: AND
5680: IFFALSE 5751
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) else
5682: LD_INT 22
5684: PUSH
5685: LD_INT 1
5687: PUSH
5688: EMPTY
5689: LIST
5690: LIST
5691: PUSH
5692: LD_INT 21
5694: PUSH
5695: LD_INT 2
5697: PUSH
5698: EMPTY
5699: LIST
5700: LIST
5701: PUSH
5702: EMPTY
5703: LIST
5704: LIST
5705: PPUSH
5706: CALL_OW 69
5710: PPUSH
5711: LD_VAR 0 5
5715: PUSH
5716: LD_VAR 0 7
5720: ARRAY
5721: PUSH
5722: LD_VAR 0 4
5726: ARRAY
5727: PPUSH
5728: LD_VAR 0 6
5732: PUSH
5733: LD_VAR 0 7
5737: ARRAY
5738: PUSH
5739: LD_VAR 0 4
5743: ARRAY
5744: PPUSH
5745: CALL_OW 174
5749: GO 5818
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
5751: LD_INT 22
5753: PUSH
5754: LD_INT 1
5756: PUSH
5757: EMPTY
5758: LIST
5759: LIST
5760: PUSH
5761: LD_INT 21
5763: PUSH
5764: LD_INT 2
5766: PUSH
5767: EMPTY
5768: LIST
5769: LIST
5770: PUSH
5771: EMPTY
5772: LIST
5773: LIST
5774: PPUSH
5775: CALL_OW 69
5779: PPUSH
5780: LD_VAR 0 5
5784: PUSH
5785: LD_VAR 0 7
5789: ARRAY
5790: PUSH
5791: LD_VAR 0 4
5795: ARRAY
5796: PPUSH
5797: LD_VAR 0 6
5801: PUSH
5802: LD_VAR 0 7
5806: ARRAY
5807: PUSH
5808: LD_VAR 0 4
5812: ARRAY
5813: PPUSH
5814: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
5818: LD_INT 22
5820: PUSH
5821: LD_INT 1
5823: PUSH
5824: EMPTY
5825: LIST
5826: LIST
5827: PUSH
5828: LD_INT 21
5830: PUSH
5831: LD_INT 1
5833: PUSH
5834: EMPTY
5835: LIST
5836: LIST
5837: PUSH
5838: EMPTY
5839: LIST
5840: LIST
5841: PPUSH
5842: CALL_OW 69
5846: PPUSH
5847: LD_VAR 0 5
5851: PUSH
5852: LD_VAR 0 7
5856: ARRAY
5857: PUSH
5858: LD_VAR 0 4
5862: ARRAY
5863: PPUSH
5864: LD_VAR 0 6
5868: PUSH
5869: LD_VAR 0 7
5873: ARRAY
5874: PUSH
5875: LD_VAR 0 4
5879: ARRAY
5880: PPUSH
5881: CALL_OW 174
// end ;
5885: GO 5659
5887: POP
5888: POP
// if SpawnArea = AmNorthSpawnArea and RoadRand = 2 then
5889: LD_VAR 0 2
5893: PUSH
5894: LD_INT 4
5896: EQUAL
5897: PUSH
5898: LD_VAR 0 7
5902: PUSH
5903: LD_INT 2
5905: EQUAL
5906: AND
5907: IFFALSE 6083
// if Rand ( 1 , 2 ) = 1 then
5909: LD_INT 1
5911: PPUSH
5912: LD_INT 2
5914: PPUSH
5915: CALL_OW 12
5919: PUSH
5920: LD_INT 1
5922: EQUAL
5923: IFFALSE 5966
// ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 39 , 25 ) else
5925: LD_INT 22
5927: PUSH
5928: LD_INT 1
5930: PUSH
5931: EMPTY
5932: LIST
5933: LIST
5934: PUSH
5935: LD_INT 21
5937: PUSH
5938: LD_INT 2
5940: PUSH
5941: EMPTY
5942: LIST
5943: LIST
5944: PUSH
5945: EMPTY
5946: LIST
5947: LIST
5948: PPUSH
5949: CALL_OW 69
5953: PPUSH
5954: LD_INT 39
5956: PPUSH
5957: LD_INT 25
5959: PPUSH
5960: CALL_OW 114
5964: GO 6083
// begin ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 88 , 42 ) ;
5966: LD_INT 22
5968: PUSH
5969: LD_INT 1
5971: PUSH
5972: EMPTY
5973: LIST
5974: LIST
5975: PUSH
5976: LD_INT 21
5978: PUSH
5979: LD_INT 2
5981: PUSH
5982: EMPTY
5983: LIST
5984: LIST
5985: PUSH
5986: EMPTY
5987: LIST
5988: LIST
5989: PPUSH
5990: CALL_OW 69
5994: PPUSH
5995: LD_INT 88
5997: PPUSH
5998: LD_INT 42
6000: PPUSH
6001: CALL_OW 114
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 78 , 71 ) ;
6005: LD_INT 22
6007: PUSH
6008: LD_INT 1
6010: PUSH
6011: EMPTY
6012: LIST
6013: LIST
6014: PUSH
6015: LD_INT 21
6017: PUSH
6018: LD_INT 2
6020: PUSH
6021: EMPTY
6022: LIST
6023: LIST
6024: PUSH
6025: EMPTY
6026: LIST
6027: LIST
6028: PPUSH
6029: CALL_OW 69
6033: PPUSH
6034: LD_INT 78
6036: PPUSH
6037: LD_INT 71
6039: PPUSH
6040: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 35 , 29 ) ;
6044: LD_INT 22
6046: PUSH
6047: LD_INT 1
6049: PUSH
6050: EMPTY
6051: LIST
6052: LIST
6053: PUSH
6054: LD_INT 21
6056: PUSH
6057: LD_INT 2
6059: PUSH
6060: EMPTY
6061: LIST
6062: LIST
6063: PUSH
6064: EMPTY
6065: LIST
6066: LIST
6067: PPUSH
6068: CALL_OW 69
6072: PPUSH
6073: LD_INT 35
6075: PPUSH
6076: LD_INT 29
6078: PPUSH
6079: CALL_OW 174
// end ; end ; 2 :
6083: GO 8815
6085: LD_INT 2
6087: DOUBLE
6088: EQUAL
6089: IFTRUE 6093
6091: GO 6970
6093: POP
// begin temp_list = [ ] ;
6094: LD_ADDR_VAR 0 8
6098: PUSH
6099: EMPTY
6100: ST_TO_ADDR
// for i = 1 to 2 do
6101: LD_ADDR_VAR 0 4
6105: PUSH
6106: DOUBLE
6107: LD_INT 1
6109: DEC
6110: ST_TO_ADDR
6111: LD_INT 2
6113: PUSH
6114: FOR_TO
6115: IFFALSE 6373
// begin if i = 2 and difficulty = 1 then
6117: LD_VAR 0 4
6121: PUSH
6122: LD_INT 2
6124: EQUAL
6125: PUSH
6126: LD_OWVAR 67
6130: PUSH
6131: LD_INT 1
6133: EQUAL
6134: AND
6135: IFFALSE 6139
// break ;
6137: GO 6373
// if Rand ( 1 , 2 ) = 1 then
6139: LD_INT 1
6141: PPUSH
6142: LD_INT 2
6144: PPUSH
6145: CALL_OW 12
6149: PUSH
6150: LD_INT 1
6152: EQUAL
6153: IFFALSE 6169
// PrepareMechanic ( false , am_skill_lvl ) else
6155: LD_INT 0
6157: PPUSH
6158: LD_EXP 56
6162: PPUSH
6163: CALL_OW 383
6167: GO 6182
// PrepareMechanic ( false , - am_skill_lvl ) ;
6169: LD_INT 0
6171: PPUSH
6172: LD_EXP 56
6176: NEG
6177: PPUSH
6178: CALL_OW 383
// temp_unit = CreateHuman ;
6182: LD_ADDR_VAR 0 9
6186: PUSH
6187: CALL_OW 44
6191: ST_TO_ADDR
// case i of 1 :
6192: LD_VAR 0 4
6196: PUSH
6197: LD_INT 1
6199: DOUBLE
6200: EQUAL
6201: IFTRUE 6205
6203: GO 6244
6205: POP
// begin vc_chassis = us_medium_wheeled ;
6206: LD_ADDR_OWVAR 37
6210: PUSH
6211: LD_INT 2
6213: ST_TO_ADDR
// if difficulty = 1 then
6214: LD_OWVAR 67
6218: PUSH
6219: LD_INT 1
6221: EQUAL
6222: IFFALSE 6234
// vc_weapon = us_light_gun else
6224: LD_ADDR_OWVAR 40
6228: PUSH
6229: LD_INT 3
6231: ST_TO_ADDR
6232: GO 6242
// vc_weapon = us_double_gun ;
6234: LD_ADDR_OWVAR 40
6238: PUSH
6239: LD_INT 5
6241: ST_TO_ADDR
// end ; 2 :
6242: GO 6292
6244: LD_INT 2
6246: DOUBLE
6247: EQUAL
6248: IFTRUE 6252
6250: GO 6291
6252: POP
// begin if difficulty = 2 then
6253: LD_OWVAR 67
6257: PUSH
6258: LD_INT 2
6260: EQUAL
6261: IFFALSE 6273
// vc_chassis = us_light_wheeled else
6263: LD_ADDR_OWVAR 37
6267: PUSH
6268: LD_INT 1
6270: ST_TO_ADDR
6271: GO 6281
// vc_chassis = us_medium_wheeled ;
6273: LD_ADDR_OWVAR 37
6277: PUSH
6278: LD_INT 2
6280: ST_TO_ADDR
// vc_weapon = us_light_gun ;
6281: LD_ADDR_OWVAR 40
6285: PUSH
6286: LD_INT 3
6288: ST_TO_ADDR
// end ; end ;
6289: GO 6292
6291: POP
// temp_veh = CreateVehicle ;
6292: LD_ADDR_VAR 0 10
6296: PUSH
6297: CALL_OW 45
6301: ST_TO_ADDR
// temp_list = temp_list ^ [ [ temp_veh , temp_unit ] ] ;
6302: LD_ADDR_VAR 0 8
6306: PUSH
6307: LD_VAR 0 8
6311: PUSH
6312: LD_VAR 0 10
6316: PUSH
6317: LD_VAR 0 9
6321: PUSH
6322: EMPTY
6323: LIST
6324: LIST
6325: PUSH
6326: EMPTY
6327: LIST
6328: ADD
6329: ST_TO_ADDR
// PlaceUnitArea ( temp_veh , SpawnArea , false ) ;
6330: LD_VAR 0 10
6334: PPUSH
6335: LD_VAR 0 2
6339: PPUSH
6340: LD_INT 0
6342: PPUSH
6343: CALL_OW 49
// PlaceHumanInUnit ( temp_unit , temp_list [ i ] [ 1 ] ) ;
6347: LD_VAR 0 9
6351: PPUSH
6352: LD_VAR 0 8
6356: PUSH
6357: LD_VAR 0 4
6361: ARRAY
6362: PUSH
6363: LD_INT 1
6365: ARRAY
6366: PPUSH
6367: CALL_OW 52
// end ;
6371: GO 6114
6373: POP
6374: POP
// second_wave = Replace ( second_wave , 1 , temp_list ) ;
6375: LD_ADDR_EXP 12
6379: PUSH
6380: LD_EXP 12
6384: PPUSH
6385: LD_INT 1
6387: PPUSH
6388: LD_VAR 0 8
6392: PPUSH
6393: CALL_OW 1
6397: ST_TO_ADDR
// temp_list = [ ] ;
6398: LD_ADDR_VAR 0 8
6402: PUSH
6403: EMPTY
6404: ST_TO_ADDR
// for i = 1 to ( difficulty + 1 ) * 2 + difficulty - 1 do
6405: LD_ADDR_VAR 0 4
6409: PUSH
6410: DOUBLE
6411: LD_INT 1
6413: DEC
6414: ST_TO_ADDR
6415: LD_OWVAR 67
6419: PUSH
6420: LD_INT 1
6422: PLUS
6423: PUSH
6424: LD_INT 2
6426: MUL
6427: PUSH
6428: LD_OWVAR 67
6432: PLUS
6433: PUSH
6434: LD_INT 1
6436: MINUS
6437: PUSH
6438: FOR_TO
6439: IFFALSE 6498
// begin PrepareSoldier ( false , am_skill_lvl ) ;
6441: LD_INT 0
6443: PPUSH
6444: LD_EXP 56
6448: PPUSH
6449: CALL_OW 381
// temp_unit = CreateHuman ;
6453: LD_ADDR_VAR 0 9
6457: PUSH
6458: CALL_OW 44
6462: ST_TO_ADDR
// temp_list = temp_list ^ temp_unit ;
6463: LD_ADDR_VAR 0 8
6467: PUSH
6468: LD_VAR 0 8
6472: PUSH
6473: LD_VAR 0 9
6477: ADD
6478: ST_TO_ADDR
// PlaceUnitArea ( temp_unit , SpawnArea , false ) ;
6479: LD_VAR 0 9
6483: PPUSH
6484: LD_VAR 0 2
6488: PPUSH
6489: LD_INT 0
6491: PPUSH
6492: CALL_OW 49
// end ;
6496: GO 6438
6498: POP
6499: POP
// second_wave = Replace ( second_wave , 2 , temp_list ) ;
6500: LD_ADDR_EXP 12
6504: PUSH
6505: LD_EXP 12
6509: PPUSH
6510: LD_INT 2
6512: PPUSH
6513: LD_VAR 0 8
6517: PPUSH
6518: CALL_OW 1
6522: ST_TO_ADDR
// for i = 1 to roadX [ RoadRand ] do
6523: LD_ADDR_VAR 0 4
6527: PUSH
6528: DOUBLE
6529: LD_INT 1
6531: DEC
6532: ST_TO_ADDR
6533: LD_VAR 0 5
6537: PUSH
6538: LD_VAR 0 7
6542: ARRAY
6543: PUSH
6544: FOR_TO
6545: IFFALSE 6772
// begin if SpawnArea = AmNorthSpawnArea and RoadRand <> 2 then
6547: LD_VAR 0 2
6551: PUSH
6552: LD_INT 4
6554: EQUAL
6555: PUSH
6556: LD_VAR 0 7
6560: PUSH
6561: LD_INT 2
6563: NONEQUAL
6564: AND
6565: IFFALSE 6636
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) else
6567: LD_INT 22
6569: PUSH
6570: LD_INT 1
6572: PUSH
6573: EMPTY
6574: LIST
6575: LIST
6576: PUSH
6577: LD_INT 21
6579: PUSH
6580: LD_INT 2
6582: PUSH
6583: EMPTY
6584: LIST
6585: LIST
6586: PUSH
6587: EMPTY
6588: LIST
6589: LIST
6590: PPUSH
6591: CALL_OW 69
6595: PPUSH
6596: LD_VAR 0 5
6600: PUSH
6601: LD_VAR 0 7
6605: ARRAY
6606: PUSH
6607: LD_VAR 0 4
6611: ARRAY
6612: PPUSH
6613: LD_VAR 0 6
6617: PUSH
6618: LD_VAR 0 7
6622: ARRAY
6623: PUSH
6624: LD_VAR 0 4
6628: ARRAY
6629: PPUSH
6630: CALL_OW 174
6634: GO 6703
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
6636: LD_INT 22
6638: PUSH
6639: LD_INT 1
6641: PUSH
6642: EMPTY
6643: LIST
6644: LIST
6645: PUSH
6646: LD_INT 21
6648: PUSH
6649: LD_INT 2
6651: PUSH
6652: EMPTY
6653: LIST
6654: LIST
6655: PUSH
6656: EMPTY
6657: LIST
6658: LIST
6659: PPUSH
6660: CALL_OW 69
6664: PPUSH
6665: LD_VAR 0 5
6669: PUSH
6670: LD_VAR 0 7
6674: ARRAY
6675: PUSH
6676: LD_VAR 0 4
6680: ARRAY
6681: PPUSH
6682: LD_VAR 0 6
6686: PUSH
6687: LD_VAR 0 7
6691: ARRAY
6692: PUSH
6693: LD_VAR 0 4
6697: ARRAY
6698: PPUSH
6699: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
6703: LD_INT 22
6705: PUSH
6706: LD_INT 1
6708: PUSH
6709: EMPTY
6710: LIST
6711: LIST
6712: PUSH
6713: LD_INT 21
6715: PUSH
6716: LD_INT 1
6718: PUSH
6719: EMPTY
6720: LIST
6721: LIST
6722: PUSH
6723: EMPTY
6724: LIST
6725: LIST
6726: PPUSH
6727: CALL_OW 69
6731: PPUSH
6732: LD_VAR 0 5
6736: PUSH
6737: LD_VAR 0 7
6741: ARRAY
6742: PUSH
6743: LD_VAR 0 4
6747: ARRAY
6748: PPUSH
6749: LD_VAR 0 6
6753: PUSH
6754: LD_VAR 0 7
6758: ARRAY
6759: PUSH
6760: LD_VAR 0 4
6764: ARRAY
6765: PPUSH
6766: CALL_OW 174
// end ;
6770: GO 6544
6772: POP
6773: POP
// if SpawnArea = AmNorthSpawnArea and RoadRand = 2 then
6774: LD_VAR 0 2
6778: PUSH
6779: LD_INT 4
6781: EQUAL
6782: PUSH
6783: LD_VAR 0 7
6787: PUSH
6788: LD_INT 2
6790: EQUAL
6791: AND
6792: IFFALSE 6968
// if Rand ( 1 , 2 ) = 1 then
6794: LD_INT 1
6796: PPUSH
6797: LD_INT 2
6799: PPUSH
6800: CALL_OW 12
6804: PUSH
6805: LD_INT 1
6807: EQUAL
6808: IFFALSE 6851
// ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 39 , 25 ) else
6810: LD_INT 22
6812: PUSH
6813: LD_INT 1
6815: PUSH
6816: EMPTY
6817: LIST
6818: LIST
6819: PUSH
6820: LD_INT 21
6822: PUSH
6823: LD_INT 2
6825: PUSH
6826: EMPTY
6827: LIST
6828: LIST
6829: PUSH
6830: EMPTY
6831: LIST
6832: LIST
6833: PPUSH
6834: CALL_OW 69
6838: PPUSH
6839: LD_INT 39
6841: PPUSH
6842: LD_INT 25
6844: PPUSH
6845: CALL_OW 114
6849: GO 6968
// begin ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 88 , 42 ) ;
6851: LD_INT 22
6853: PUSH
6854: LD_INT 1
6856: PUSH
6857: EMPTY
6858: LIST
6859: LIST
6860: PUSH
6861: LD_INT 21
6863: PUSH
6864: LD_INT 2
6866: PUSH
6867: EMPTY
6868: LIST
6869: LIST
6870: PUSH
6871: EMPTY
6872: LIST
6873: LIST
6874: PPUSH
6875: CALL_OW 69
6879: PPUSH
6880: LD_INT 88
6882: PPUSH
6883: LD_INT 42
6885: PPUSH
6886: CALL_OW 114
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 78 , 71 ) ;
6890: LD_INT 22
6892: PUSH
6893: LD_INT 1
6895: PUSH
6896: EMPTY
6897: LIST
6898: LIST
6899: PUSH
6900: LD_INT 21
6902: PUSH
6903: LD_INT 2
6905: PUSH
6906: EMPTY
6907: LIST
6908: LIST
6909: PUSH
6910: EMPTY
6911: LIST
6912: LIST
6913: PPUSH
6914: CALL_OW 69
6918: PPUSH
6919: LD_INT 78
6921: PPUSH
6922: LD_INT 71
6924: PPUSH
6925: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 35 , 29 ) ;
6929: LD_INT 22
6931: PUSH
6932: LD_INT 1
6934: PUSH
6935: EMPTY
6936: LIST
6937: LIST
6938: PUSH
6939: LD_INT 21
6941: PUSH
6942: LD_INT 2
6944: PUSH
6945: EMPTY
6946: LIST
6947: LIST
6948: PUSH
6949: EMPTY
6950: LIST
6951: LIST
6952: PPUSH
6953: CALL_OW 69
6957: PPUSH
6958: LD_INT 35
6960: PPUSH
6961: LD_INT 29
6963: PPUSH
6964: CALL_OW 174
// end ; end ; 3 :
6968: GO 8815
6970: LD_INT 3
6972: DOUBLE
6973: EQUAL
6974: IFTRUE 6978
6976: GO 7850
6978: POP
// begin temp_list = [ ] ;
6979: LD_ADDR_VAR 0 8
6983: PUSH
6984: EMPTY
6985: ST_TO_ADDR
// for i = 1 to 2 do
6986: LD_ADDR_VAR 0 4
6990: PUSH
6991: DOUBLE
6992: LD_INT 1
6994: DEC
6995: ST_TO_ADDR
6996: LD_INT 2
6998: PUSH
6999: FOR_TO
7000: IFFALSE 7256
// begin if Rand ( 1 , 2 ) = 1 then
7002: LD_INT 1
7004: PPUSH
7005: LD_INT 2
7007: PPUSH
7008: CALL_OW 12
7012: PUSH
7013: LD_INT 1
7015: EQUAL
7016: IFFALSE 7032
// PrepareMechanic ( false , am_skill_lvl ) else
7018: LD_INT 0
7020: PPUSH
7021: LD_EXP 56
7025: PPUSH
7026: CALL_OW 383
7030: GO 7045
// PrepareMechanic ( false , - am_skill_lvl ) ;
7032: LD_INT 0
7034: PPUSH
7035: LD_EXP 56
7039: NEG
7040: PPUSH
7041: CALL_OW 383
// temp_unit = CreateHuman ;
7045: LD_ADDR_VAR 0 9
7049: PUSH
7050: CALL_OW 44
7054: ST_TO_ADDR
// case i of 1 :
7055: LD_VAR 0 4
7059: PUSH
7060: LD_INT 1
7062: DOUBLE
7063: EQUAL
7064: IFTRUE 7068
7066: GO 7107
7068: POP
// begin vc_chassis = us_medium_wheeled ;
7069: LD_ADDR_OWVAR 37
7073: PUSH
7074: LD_INT 2
7076: ST_TO_ADDR
// if difficulty = 1 then
7077: LD_OWVAR 67
7081: PUSH
7082: LD_INT 1
7084: EQUAL
7085: IFFALSE 7097
// vc_weapon = us_light_gun else
7087: LD_ADDR_OWVAR 40
7091: PUSH
7092: LD_INT 3
7094: ST_TO_ADDR
7095: GO 7105
// vc_weapon = us_double_gun ;
7097: LD_ADDR_OWVAR 40
7101: PUSH
7102: LD_INT 5
7104: ST_TO_ADDR
// end ; 2 :
7105: GO 7175
7107: LD_INT 2
7109: DOUBLE
7110: EQUAL
7111: IFTRUE 7115
7113: GO 7174
7115: POP
// begin if difficulty = 1 then
7116: LD_OWVAR 67
7120: PUSH
7121: LD_INT 1
7123: EQUAL
7124: IFFALSE 7136
// vc_chassis = us_light_wheeled else
7126: LD_ADDR_OWVAR 37
7130: PUSH
7131: LD_INT 1
7133: ST_TO_ADDR
7134: GO 7144
// vc_chassis = us_medium_wheeled ;
7136: LD_ADDR_OWVAR 37
7140: PUSH
7141: LD_INT 2
7143: ST_TO_ADDR
// if difficulty < 3 then
7144: LD_OWVAR 67
7148: PUSH
7149: LD_INT 3
7151: LESS
7152: IFFALSE 7164
// vc_weapon = us_light_gun else
7154: LD_ADDR_OWVAR 40
7158: PUSH
7159: LD_INT 3
7161: ST_TO_ADDR
7162: GO 7172
// vc_weapon = us_double_gun ;
7164: LD_ADDR_OWVAR 40
7168: PUSH
7169: LD_INT 5
7171: ST_TO_ADDR
// end ; end ;
7172: GO 7175
7174: POP
// temp_veh = CreateVehicle ;
7175: LD_ADDR_VAR 0 10
7179: PUSH
7180: CALL_OW 45
7184: ST_TO_ADDR
// temp_list = temp_list ^ [ [ temp_veh , temp_unit ] ] ;
7185: LD_ADDR_VAR 0 8
7189: PUSH
7190: LD_VAR 0 8
7194: PUSH
7195: LD_VAR 0 10
7199: PUSH
7200: LD_VAR 0 9
7204: PUSH
7205: EMPTY
7206: LIST
7207: LIST
7208: PUSH
7209: EMPTY
7210: LIST
7211: ADD
7212: ST_TO_ADDR
// PlaceUnitArea ( temp_veh , SpawnArea , false ) ;
7213: LD_VAR 0 10
7217: PPUSH
7218: LD_VAR 0 2
7222: PPUSH
7223: LD_INT 0
7225: PPUSH
7226: CALL_OW 49
// PlaceHumanInUnit ( temp_unit , temp_list [ i ] [ 1 ] ) ;
7230: LD_VAR 0 9
7234: PPUSH
7235: LD_VAR 0 8
7239: PUSH
7240: LD_VAR 0 4
7244: ARRAY
7245: PUSH
7246: LD_INT 1
7248: ARRAY
7249: PPUSH
7250: CALL_OW 52
// end ;
7254: GO 6999
7256: POP
7257: POP
// third_wave = Replace ( third_wave , 1 , temp_list ) ;
7258: LD_ADDR_EXP 13
7262: PUSH
7263: LD_EXP 13
7267: PPUSH
7268: LD_INT 1
7270: PPUSH
7271: LD_VAR 0 8
7275: PPUSH
7276: CALL_OW 1
7280: ST_TO_ADDR
// temp_list = [ ] ;
7281: LD_ADDR_VAR 0 8
7285: PUSH
7286: EMPTY
7287: ST_TO_ADDR
// for i = 1 to [ 7 , 9 , 11 ] [ difficulty ] do
7288: LD_ADDR_VAR 0 4
7292: PUSH
7293: DOUBLE
7294: LD_INT 1
7296: DEC
7297: ST_TO_ADDR
7298: LD_INT 7
7300: PUSH
7301: LD_INT 9
7303: PUSH
7304: LD_INT 11
7306: PUSH
7307: EMPTY
7308: LIST
7309: LIST
7310: LIST
7311: PUSH
7312: LD_OWVAR 67
7316: ARRAY
7317: PUSH
7318: FOR_TO
7319: IFFALSE 7378
// begin PrepareSoldier ( false , am_skill_lvl ) ;
7321: LD_INT 0
7323: PPUSH
7324: LD_EXP 56
7328: PPUSH
7329: CALL_OW 381
// temp_unit = CreateHuman ;
7333: LD_ADDR_VAR 0 9
7337: PUSH
7338: CALL_OW 44
7342: ST_TO_ADDR
// temp_list = temp_list ^ temp_unit ;
7343: LD_ADDR_VAR 0 8
7347: PUSH
7348: LD_VAR 0 8
7352: PUSH
7353: LD_VAR 0 9
7357: ADD
7358: ST_TO_ADDR
// PlaceUnitArea ( temp_unit , SpawnArea , false ) ;
7359: LD_VAR 0 9
7363: PPUSH
7364: LD_VAR 0 2
7368: PPUSH
7369: LD_INT 0
7371: PPUSH
7372: CALL_OW 49
// end ;
7376: GO 7318
7378: POP
7379: POP
// third_wave = Replace ( third_wave , 2 , temp_list ) ;
7380: LD_ADDR_EXP 13
7384: PUSH
7385: LD_EXP 13
7389: PPUSH
7390: LD_INT 2
7392: PPUSH
7393: LD_VAR 0 8
7397: PPUSH
7398: CALL_OW 1
7402: ST_TO_ADDR
// for i = 1 to roadX [ RoadRand ] do
7403: LD_ADDR_VAR 0 4
7407: PUSH
7408: DOUBLE
7409: LD_INT 1
7411: DEC
7412: ST_TO_ADDR
7413: LD_VAR 0 5
7417: PUSH
7418: LD_VAR 0 7
7422: ARRAY
7423: PUSH
7424: FOR_TO
7425: IFFALSE 7652
// begin if SpawnArea = AmNorthSpawnArea and RoadRand <> 2 then
7427: LD_VAR 0 2
7431: PUSH
7432: LD_INT 4
7434: EQUAL
7435: PUSH
7436: LD_VAR 0 7
7440: PUSH
7441: LD_INT 2
7443: NONEQUAL
7444: AND
7445: IFFALSE 7516
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) else
7447: LD_INT 22
7449: PUSH
7450: LD_INT 1
7452: PUSH
7453: EMPTY
7454: LIST
7455: LIST
7456: PUSH
7457: LD_INT 21
7459: PUSH
7460: LD_INT 2
7462: PUSH
7463: EMPTY
7464: LIST
7465: LIST
7466: PUSH
7467: EMPTY
7468: LIST
7469: LIST
7470: PPUSH
7471: CALL_OW 69
7475: PPUSH
7476: LD_VAR 0 5
7480: PUSH
7481: LD_VAR 0 7
7485: ARRAY
7486: PUSH
7487: LD_VAR 0 4
7491: ARRAY
7492: PPUSH
7493: LD_VAR 0 6
7497: PUSH
7498: LD_VAR 0 7
7502: ARRAY
7503: PUSH
7504: LD_VAR 0 4
7508: ARRAY
7509: PPUSH
7510: CALL_OW 174
7514: GO 7583
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
7516: LD_INT 22
7518: PUSH
7519: LD_INT 1
7521: PUSH
7522: EMPTY
7523: LIST
7524: LIST
7525: PUSH
7526: LD_INT 21
7528: PUSH
7529: LD_INT 2
7531: PUSH
7532: EMPTY
7533: LIST
7534: LIST
7535: PUSH
7536: EMPTY
7537: LIST
7538: LIST
7539: PPUSH
7540: CALL_OW 69
7544: PPUSH
7545: LD_VAR 0 5
7549: PUSH
7550: LD_VAR 0 7
7554: ARRAY
7555: PUSH
7556: LD_VAR 0 4
7560: ARRAY
7561: PPUSH
7562: LD_VAR 0 6
7566: PUSH
7567: LD_VAR 0 7
7571: ARRAY
7572: PUSH
7573: LD_VAR 0 4
7577: ARRAY
7578: PPUSH
7579: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
7583: LD_INT 22
7585: PUSH
7586: LD_INT 1
7588: PUSH
7589: EMPTY
7590: LIST
7591: LIST
7592: PUSH
7593: LD_INT 21
7595: PUSH
7596: LD_INT 1
7598: PUSH
7599: EMPTY
7600: LIST
7601: LIST
7602: PUSH
7603: EMPTY
7604: LIST
7605: LIST
7606: PPUSH
7607: CALL_OW 69
7611: PPUSH
7612: LD_VAR 0 5
7616: PUSH
7617: LD_VAR 0 7
7621: ARRAY
7622: PUSH
7623: LD_VAR 0 4
7627: ARRAY
7628: PPUSH
7629: LD_VAR 0 6
7633: PUSH
7634: LD_VAR 0 7
7638: ARRAY
7639: PUSH
7640: LD_VAR 0 4
7644: ARRAY
7645: PPUSH
7646: CALL_OW 174
// end ;
7650: GO 7424
7652: POP
7653: POP
// if SpawnArea = AmNorthSpawnArea and RoadRand = 2 then
7654: LD_VAR 0 2
7658: PUSH
7659: LD_INT 4
7661: EQUAL
7662: PUSH
7663: LD_VAR 0 7
7667: PUSH
7668: LD_INT 2
7670: EQUAL
7671: AND
7672: IFFALSE 7848
// if Rand ( 1 , 2 ) = 1 then
7674: LD_INT 1
7676: PPUSH
7677: LD_INT 2
7679: PPUSH
7680: CALL_OW 12
7684: PUSH
7685: LD_INT 1
7687: EQUAL
7688: IFFALSE 7731
// ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 39 , 25 ) else
7690: LD_INT 22
7692: PUSH
7693: LD_INT 1
7695: PUSH
7696: EMPTY
7697: LIST
7698: LIST
7699: PUSH
7700: LD_INT 21
7702: PUSH
7703: LD_INT 2
7705: PUSH
7706: EMPTY
7707: LIST
7708: LIST
7709: PUSH
7710: EMPTY
7711: LIST
7712: LIST
7713: PPUSH
7714: CALL_OW 69
7718: PPUSH
7719: LD_INT 39
7721: PPUSH
7722: LD_INT 25
7724: PPUSH
7725: CALL_OW 114
7729: GO 7848
// begin ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 88 , 42 ) ;
7731: LD_INT 22
7733: PUSH
7734: LD_INT 1
7736: PUSH
7737: EMPTY
7738: LIST
7739: LIST
7740: PUSH
7741: LD_INT 21
7743: PUSH
7744: LD_INT 2
7746: PUSH
7747: EMPTY
7748: LIST
7749: LIST
7750: PUSH
7751: EMPTY
7752: LIST
7753: LIST
7754: PPUSH
7755: CALL_OW 69
7759: PPUSH
7760: LD_INT 88
7762: PPUSH
7763: LD_INT 42
7765: PPUSH
7766: CALL_OW 114
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 78 , 71 ) ;
7770: LD_INT 22
7772: PUSH
7773: LD_INT 1
7775: PUSH
7776: EMPTY
7777: LIST
7778: LIST
7779: PUSH
7780: LD_INT 21
7782: PUSH
7783: LD_INT 2
7785: PUSH
7786: EMPTY
7787: LIST
7788: LIST
7789: PUSH
7790: EMPTY
7791: LIST
7792: LIST
7793: PPUSH
7794: CALL_OW 69
7798: PPUSH
7799: LD_INT 78
7801: PPUSH
7802: LD_INT 71
7804: PPUSH
7805: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 35 , 29 ) ;
7809: LD_INT 22
7811: PUSH
7812: LD_INT 1
7814: PUSH
7815: EMPTY
7816: LIST
7817: LIST
7818: PUSH
7819: LD_INT 21
7821: PUSH
7822: LD_INT 2
7824: PUSH
7825: EMPTY
7826: LIST
7827: LIST
7828: PUSH
7829: EMPTY
7830: LIST
7831: LIST
7832: PPUSH
7833: CALL_OW 69
7837: PPUSH
7838: LD_INT 35
7840: PPUSH
7841: LD_INT 29
7843: PPUSH
7844: CALL_OW 174
// end ; end ; 4 :
7848: GO 8815
7850: LD_INT 4
7852: DOUBLE
7853: EQUAL
7854: IFTRUE 7858
7856: GO 8814
7858: POP
// begin temp_list = [ ] ;
7859: LD_ADDR_VAR 0 8
7863: PUSH
7864: EMPTY
7865: ST_TO_ADDR
// for i = 1 to 6 do
7866: LD_ADDR_VAR 0 4
7870: PUSH
7871: DOUBLE
7872: LD_INT 1
7874: DEC
7875: ST_TO_ADDR
7876: LD_INT 6
7878: PUSH
7879: FOR_TO
7880: IFFALSE 8207
// begin if i > 4 and difficulty = 1 then
7882: LD_VAR 0 4
7886: PUSH
7887: LD_INT 4
7889: GREATER
7890: PUSH
7891: LD_OWVAR 67
7895: PUSH
7896: LD_INT 1
7898: EQUAL
7899: AND
7900: IFFALSE 7904
// break ;
7902: GO 8207
// if Rand ( 1 , 2 ) = 1 then
7904: LD_INT 1
7906: PPUSH
7907: LD_INT 2
7909: PPUSH
7910: CALL_OW 12
7914: PUSH
7915: LD_INT 1
7917: EQUAL
7918: IFFALSE 7934
// PrepareMechanic ( false , am_skill_lvl ) else
7920: LD_INT 0
7922: PPUSH
7923: LD_EXP 56
7927: PPUSH
7928: CALL_OW 383
7932: GO 7947
// PrepareMechanic ( false , - am_skill_lvl ) ;
7934: LD_INT 0
7936: PPUSH
7937: LD_EXP 56
7941: NEG
7942: PPUSH
7943: CALL_OW 383
// temp_unit = CreateHuman ;
7947: LD_ADDR_VAR 0 9
7951: PUSH
7952: CALL_OW 44
7956: ST_TO_ADDR
// case i of 1 , 2 :
7957: LD_VAR 0 4
7961: PUSH
7962: LD_INT 1
7964: DOUBLE
7965: EQUAL
7966: IFTRUE 7976
7968: LD_INT 2
7970: DOUBLE
7971: EQUAL
7972: IFTRUE 7976
7974: GO 7995
7976: POP
// begin vc_chassis = us_medium_wheeled ;
7977: LD_ADDR_OWVAR 37
7981: PUSH
7982: LD_INT 2
7984: ST_TO_ADDR
// vc_weapon = us_double_gun ;
7985: LD_ADDR_OWVAR 40
7989: PUSH
7990: LD_INT 5
7992: ST_TO_ADDR
// end ; 3 , 4 :
7993: GO 8126
7995: LD_INT 3
7997: DOUBLE
7998: EQUAL
7999: IFTRUE 8009
8001: LD_INT 4
8003: DOUBLE
8004: EQUAL
8005: IFTRUE 8009
8007: GO 8056
8009: POP
// begin vc_chassis = us_medium_wheeled ;
8010: LD_ADDR_OWVAR 37
8014: PUSH
8015: LD_INT 2
8017: ST_TO_ADDR
// if Rand ( 1 , difficulty ) = 1 then
8018: LD_INT 1
8020: PPUSH
8021: LD_OWVAR 67
8025: PPUSH
8026: CALL_OW 12
8030: PUSH
8031: LD_INT 1
8033: EQUAL
8034: IFFALSE 8046
// vc_weapon = us_light_gun else
8036: LD_ADDR_OWVAR 40
8040: PUSH
8041: LD_INT 3
8043: ST_TO_ADDR
8044: GO 8054
// vc_weapon = us_double_gun ;
8046: LD_ADDR_OWVAR 40
8050: PUSH
8051: LD_INT 5
8053: ST_TO_ADDR
// end ; 5 , 6 :
8054: GO 8126
8056: LD_INT 5
8058: DOUBLE
8059: EQUAL
8060: IFTRUE 8070
8062: LD_INT 6
8064: DOUBLE
8065: EQUAL
8066: IFTRUE 8070
8068: GO 8125
8070: POP
// if Rand ( 1 , difficulty ) = 1 then
8071: LD_INT 1
8073: PPUSH
8074: LD_OWVAR 67
8078: PPUSH
8079: CALL_OW 12
8083: PUSH
8084: LD_INT 1
8086: EQUAL
8087: IFFALSE 8107
// begin vc_weapon = us_light_gun ;
8089: LD_ADDR_OWVAR 40
8093: PUSH
8094: LD_INT 3
8096: ST_TO_ADDR
// vc_chassis = us_light_wheeled ;
8097: LD_ADDR_OWVAR 37
8101: PUSH
8102: LD_INT 1
8104: ST_TO_ADDR
// end else
8105: GO 8123
// begin vc_weapon = us_double_gun ;
8107: LD_ADDR_OWVAR 40
8111: PUSH
8112: LD_INT 5
8114: ST_TO_ADDR
// vc_chassis = us_medium_wheeled ;
8115: LD_ADDR_OWVAR 37
8119: PUSH
8120: LD_INT 2
8122: ST_TO_ADDR
// end ; end ;
8123: GO 8126
8125: POP
// temp_veh = CreateVehicle ;
8126: LD_ADDR_VAR 0 10
8130: PUSH
8131: CALL_OW 45
8135: ST_TO_ADDR
// temp_list = temp_list ^ [ [ temp_veh , temp_unit ] ] ;
8136: LD_ADDR_VAR 0 8
8140: PUSH
8141: LD_VAR 0 8
8145: PUSH
8146: LD_VAR 0 10
8150: PUSH
8151: LD_VAR 0 9
8155: PUSH
8156: EMPTY
8157: LIST
8158: LIST
8159: PUSH
8160: EMPTY
8161: LIST
8162: ADD
8163: ST_TO_ADDR
// PlaceUnitArea ( temp_veh , SpawnArea , false ) ;
8164: LD_VAR 0 10
8168: PPUSH
8169: LD_VAR 0 2
8173: PPUSH
8174: LD_INT 0
8176: PPUSH
8177: CALL_OW 49
// PlaceHumanInUnit ( temp_unit , temp_list [ i ] [ 1 ] ) ;
8181: LD_VAR 0 9
8185: PPUSH
8186: LD_VAR 0 8
8190: PUSH
8191: LD_VAR 0 4
8195: ARRAY
8196: PUSH
8197: LD_INT 1
8199: ARRAY
8200: PPUSH
8201: CALL_OW 52
// end ;
8205: GO 7879
8207: POP
8208: POP
// fourth_wave = Replace ( fourth_wave , 1 , temp_list ) ;
8209: LD_ADDR_EXP 14
8213: PUSH
8214: LD_EXP 14
8218: PPUSH
8219: LD_INT 1
8221: PPUSH
8222: LD_VAR 0 8
8226: PPUSH
8227: CALL_OW 1
8231: ST_TO_ADDR
// temp_list = [ ] ;
8232: LD_ADDR_VAR 0 8
8236: PUSH
8237: EMPTY
8238: ST_TO_ADDR
// for i = 1 to ( difficulty + 3 ) * 2 + difficulty + 2 + difficulty + 1 do
8239: LD_ADDR_VAR 0 4
8243: PUSH
8244: DOUBLE
8245: LD_INT 1
8247: DEC
8248: ST_TO_ADDR
8249: LD_OWVAR 67
8253: PUSH
8254: LD_INT 3
8256: PLUS
8257: PUSH
8258: LD_INT 2
8260: MUL
8261: PUSH
8262: LD_OWVAR 67
8266: PLUS
8267: PUSH
8268: LD_INT 2
8270: PLUS
8271: PUSH
8272: LD_OWVAR 67
8276: PLUS
8277: PUSH
8278: LD_INT 1
8280: PLUS
8281: PUSH
8282: FOR_TO
8283: IFFALSE 8342
// begin PrepareSoldier ( false , am_skill_lvl ) ;
8285: LD_INT 0
8287: PPUSH
8288: LD_EXP 56
8292: PPUSH
8293: CALL_OW 381
// temp_unit = CreateHuman ;
8297: LD_ADDR_VAR 0 9
8301: PUSH
8302: CALL_OW 44
8306: ST_TO_ADDR
// temp_list = temp_list ^ temp_unit ;
8307: LD_ADDR_VAR 0 8
8311: PUSH
8312: LD_VAR 0 8
8316: PUSH
8317: LD_VAR 0 9
8321: ADD
8322: ST_TO_ADDR
// PlaceUnitArea ( temp_unit , SpawnArea , false ) ;
8323: LD_VAR 0 9
8327: PPUSH
8328: LD_VAR 0 2
8332: PPUSH
8333: LD_INT 0
8335: PPUSH
8336: CALL_OW 49
// end ;
8340: GO 8282
8342: POP
8343: POP
// fourth_wave = Replace ( fourth_wave , 2 , temp_list ) ;
8344: LD_ADDR_EXP 14
8348: PUSH
8349: LD_EXP 14
8353: PPUSH
8354: LD_INT 2
8356: PPUSH
8357: LD_VAR 0 8
8361: PPUSH
8362: CALL_OW 1
8366: ST_TO_ADDR
// for i = 1 to roadX [ RoadRand ] do
8367: LD_ADDR_VAR 0 4
8371: PUSH
8372: DOUBLE
8373: LD_INT 1
8375: DEC
8376: ST_TO_ADDR
8377: LD_VAR 0 5
8381: PUSH
8382: LD_VAR 0 7
8386: ARRAY
8387: PUSH
8388: FOR_TO
8389: IFFALSE 8616
// begin if SpawnArea = AmNorthSpawnArea and RoadRand <> 2 then
8391: LD_VAR 0 2
8395: PUSH
8396: LD_INT 4
8398: EQUAL
8399: PUSH
8400: LD_VAR 0 7
8404: PUSH
8405: LD_INT 2
8407: NONEQUAL
8408: AND
8409: IFFALSE 8480
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) else
8411: LD_INT 22
8413: PUSH
8414: LD_INT 1
8416: PUSH
8417: EMPTY
8418: LIST
8419: LIST
8420: PUSH
8421: LD_INT 21
8423: PUSH
8424: LD_INT 2
8426: PUSH
8427: EMPTY
8428: LIST
8429: LIST
8430: PUSH
8431: EMPTY
8432: LIST
8433: LIST
8434: PPUSH
8435: CALL_OW 69
8439: PPUSH
8440: LD_VAR 0 5
8444: PUSH
8445: LD_VAR 0 7
8449: ARRAY
8450: PUSH
8451: LD_VAR 0 4
8455: ARRAY
8456: PPUSH
8457: LD_VAR 0 6
8461: PUSH
8462: LD_VAR 0 7
8466: ARRAY
8467: PUSH
8468: LD_VAR 0 4
8472: ARRAY
8473: PPUSH
8474: CALL_OW 174
8478: GO 8547
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
8480: LD_INT 22
8482: PUSH
8483: LD_INT 1
8485: PUSH
8486: EMPTY
8487: LIST
8488: LIST
8489: PUSH
8490: LD_INT 21
8492: PUSH
8493: LD_INT 2
8495: PUSH
8496: EMPTY
8497: LIST
8498: LIST
8499: PUSH
8500: EMPTY
8501: LIST
8502: LIST
8503: PPUSH
8504: CALL_OW 69
8508: PPUSH
8509: LD_VAR 0 5
8513: PUSH
8514: LD_VAR 0 7
8518: ARRAY
8519: PUSH
8520: LD_VAR 0 4
8524: ARRAY
8525: PPUSH
8526: LD_VAR 0 6
8530: PUSH
8531: LD_VAR 0 7
8535: ARRAY
8536: PUSH
8537: LD_VAR 0 4
8541: ARRAY
8542: PPUSH
8543: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] ] ) , roadX [ RoadRand ] [ i ] , roadY [ RoadRand ] [ i ] ) ;
8547: LD_INT 22
8549: PUSH
8550: LD_INT 1
8552: PUSH
8553: EMPTY
8554: LIST
8555: LIST
8556: PUSH
8557: LD_INT 21
8559: PUSH
8560: LD_INT 1
8562: PUSH
8563: EMPTY
8564: LIST
8565: LIST
8566: PUSH
8567: EMPTY
8568: LIST
8569: LIST
8570: PPUSH
8571: CALL_OW 69
8575: PPUSH
8576: LD_VAR 0 5
8580: PUSH
8581: LD_VAR 0 7
8585: ARRAY
8586: PUSH
8587: LD_VAR 0 4
8591: ARRAY
8592: PPUSH
8593: LD_VAR 0 6
8597: PUSH
8598: LD_VAR 0 7
8602: ARRAY
8603: PUSH
8604: LD_VAR 0 4
8608: ARRAY
8609: PPUSH
8610: CALL_OW 174
// end ;
8614: GO 8388
8616: POP
8617: POP
// if SpawnArea = AmNorthSpawnArea and RoadRand = 2 then
8618: LD_VAR 0 2
8622: PUSH
8623: LD_INT 4
8625: EQUAL
8626: PUSH
8627: LD_VAR 0 7
8631: PUSH
8632: LD_INT 2
8634: EQUAL
8635: AND
8636: IFFALSE 8812
// if Rand ( 1 , 2 ) = 1 then
8638: LD_INT 1
8640: PPUSH
8641: LD_INT 2
8643: PPUSH
8644: CALL_OW 12
8648: PUSH
8649: LD_INT 1
8651: EQUAL
8652: IFFALSE 8695
// ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 39 , 25 ) else
8654: LD_INT 22
8656: PUSH
8657: LD_INT 1
8659: PUSH
8660: EMPTY
8661: LIST
8662: LIST
8663: PUSH
8664: LD_INT 21
8666: PUSH
8667: LD_INT 2
8669: PUSH
8670: EMPTY
8671: LIST
8672: LIST
8673: PUSH
8674: EMPTY
8675: LIST
8676: LIST
8677: PPUSH
8678: CALL_OW 69
8682: PPUSH
8683: LD_INT 39
8685: PPUSH
8686: LD_INT 25
8688: PPUSH
8689: CALL_OW 114
8693: GO 8812
// begin ComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 88 , 42 ) ;
8695: LD_INT 22
8697: PUSH
8698: LD_INT 1
8700: PUSH
8701: EMPTY
8702: LIST
8703: LIST
8704: PUSH
8705: LD_INT 21
8707: PUSH
8708: LD_INT 2
8710: PUSH
8711: EMPTY
8712: LIST
8713: LIST
8714: PUSH
8715: EMPTY
8716: LIST
8717: LIST
8718: PPUSH
8719: CALL_OW 69
8723: PPUSH
8724: LD_INT 88
8726: PPUSH
8727: LD_INT 42
8729: PPUSH
8730: CALL_OW 114
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 78 , 71 ) ;
8734: LD_INT 22
8736: PUSH
8737: LD_INT 1
8739: PUSH
8740: EMPTY
8741: LIST
8742: LIST
8743: PUSH
8744: LD_INT 21
8746: PUSH
8747: LD_INT 2
8749: PUSH
8750: EMPTY
8751: LIST
8752: LIST
8753: PUSH
8754: EMPTY
8755: LIST
8756: LIST
8757: PPUSH
8758: CALL_OW 69
8762: PPUSH
8763: LD_INT 78
8765: PPUSH
8766: LD_INT 71
8768: PPUSH
8769: CALL_OW 174
// AddComAgressiveMove ( FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) , 35 , 29 ) ;
8773: LD_INT 22
8775: PUSH
8776: LD_INT 1
8778: PUSH
8779: EMPTY
8780: LIST
8781: LIST
8782: PUSH
8783: LD_INT 21
8785: PUSH
8786: LD_INT 2
8788: PUSH
8789: EMPTY
8790: LIST
8791: LIST
8792: PUSH
8793: EMPTY
8794: LIST
8795: LIST
8796: PPUSH
8797: CALL_OW 69
8801: PPUSH
8802: LD_INT 35
8804: PPUSH
8805: LD_INT 29
8807: PPUSH
8808: CALL_OW 174
// end ; end ; end ;
8812: GO 8815
8814: POP
// end ;
8815: LD_VAR 0 3
8819: RET
// every 0 0$1 trigger AmAlarmAttack and FilterAllUnits ( [ [ f_side , 1 ] , [ f_ok ] ] ) do var i , target1 , target2 ;
8820: LD_EXP 8
8824: PUSH
8825: LD_INT 22
8827: PUSH
8828: LD_INT 1
8830: PUSH
8831: EMPTY
8832: LIST
8833: LIST
8834: PUSH
8835: LD_INT 50
8837: PUSH
8838: EMPTY
8839: LIST
8840: PUSH
8841: EMPTY
8842: LIST
8843: LIST
8844: PPUSH
8845: CALL_OW 69
8849: AND
8850: IFFALSE 9078
8852: GO 8854
8854: DISABLE
8855: LD_INT 0
8857: PPUSH
8858: PPUSH
8859: PPUSH
// begin enable ;
8860: ENABLE
// for i in FilterAllUnits ( [ [ f_side , 1 ] , [ f_ok ] ] ) do
8861: LD_ADDR_VAR 0 1
8865: PUSH
8866: LD_INT 22
8868: PUSH
8869: LD_INT 1
8871: PUSH
8872: EMPTY
8873: LIST
8874: LIST
8875: PUSH
8876: LD_INT 50
8878: PUSH
8879: EMPTY
8880: LIST
8881: PUSH
8882: EMPTY
8883: LIST
8884: LIST
8885: PPUSH
8886: CALL_OW 69
8890: PUSH
8891: FOR_IN
8892: IFFALSE 9076
// if not HasTask ( i ) then
8894: LD_VAR 0 1
8898: PPUSH
8899: CALL_OW 314
8903: NOT
8904: IFFALSE 9074
// begin target1 := NearestUnitToUnit ( FilterAllUnits ( [ f_enemy , 1 ] ) , i ) ;
8906: LD_ADDR_VAR 0 2
8910: PUSH
8911: LD_INT 81
8913: PUSH
8914: LD_INT 1
8916: PUSH
8917: EMPTY
8918: LIST
8919: LIST
8920: PPUSH
8921: CALL_OW 69
8925: PPUSH
8926: LD_VAR 0 1
8930: PPUSH
8931: CALL_OW 74
8935: ST_TO_ADDR
// target2 := NearestUnitToUnit ( FilterAllUnits ( [ [ [ f_enemy , 1 ] , [ f_or , [ f_occupied ] , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] ] ] ) , i ) ;
8936: LD_ADDR_VAR 0 3
8940: PUSH
8941: LD_INT 81
8943: PUSH
8944: LD_INT 1
8946: PUSH
8947: EMPTY
8948: LIST
8949: LIST
8950: PUSH
8951: LD_INT 2
8953: PUSH
8954: LD_INT 59
8956: PUSH
8957: EMPTY
8958: LIST
8959: PUSH
8960: LD_INT 21
8962: PUSH
8963: LD_INT 1
8965: PUSH
8966: EMPTY
8967: LIST
8968: LIST
8969: PUSH
8970: LD_INT 21
8972: PUSH
8973: LD_INT 2
8975: PUSH
8976: EMPTY
8977: LIST
8978: LIST
8979: PUSH
8980: EMPTY
8981: LIST
8982: LIST
8983: LIST
8984: LIST
8985: PUSH
8986: EMPTY
8987: LIST
8988: LIST
8989: PUSH
8990: EMPTY
8991: LIST
8992: PPUSH
8993: CALL_OW 69
8997: PPUSH
8998: LD_VAR 0 1
9002: PPUSH
9003: CALL_OW 74
9007: ST_TO_ADDR
// if GetDistUnits ( i , target1 ) + 8 < GetDistUnits ( i , target2 ) then
9008: LD_VAR 0 1
9012: PPUSH
9013: LD_VAR 0 2
9017: PPUSH
9018: CALL_OW 296
9022: PUSH
9023: LD_INT 8
9025: PLUS
9026: PUSH
9027: LD_VAR 0 1
9031: PPUSH
9032: LD_VAR 0 3
9036: PPUSH
9037: CALL_OW 296
9041: LESS
9042: IFFALSE 9060
// ComAttackUnit ( i , target1 ) else
9044: LD_VAR 0 1
9048: PPUSH
9049: LD_VAR 0 2
9053: PPUSH
9054: CALL_OW 115
9058: GO 9074
// ComAttackUnit ( i , target2 ) ;
9060: LD_VAR 0 1
9064: PPUSH
9065: LD_VAR 0 3
9069: PPUSH
9070: CALL_OW 115
// end ;
9074: GO 8891
9076: POP
9077: POP
// end ; end_of_file
9078: PPOPN 3
9080: END
// export function Action ; begin
9081: LD_INT 0
9083: PPUSH
// InGameOn ;
9084: CALL_OW 8
// CenterNowOnUnits ( [ Heike , FarmerVehicle ] ) ;
9088: LD_EXP 39
9092: PUSH
9093: LD_EXP 50
9097: PUSH
9098: EMPTY
9099: LIST
9100: LIST
9101: PPUSH
9102: CALL_OW 87
// ComMoveXY ( [ Heike , Aviradze , Ralph , Oswald , Sonya , ArSol , FarmerVehicle ] , 97 , 11 ) ;
9106: LD_EXP 39
9110: PUSH
9111: LD_EXP 40
9115: PUSH
9116: LD_EXP 41
9120: PUSH
9121: LD_EXP 42
9125: PUSH
9126: LD_EXP 43
9130: PUSH
9131: LD_EXP 47
9135: PUSH
9136: LD_EXP 50
9140: PUSH
9141: EMPTY
9142: LIST
9143: LIST
9144: LIST
9145: LIST
9146: LIST
9147: LIST
9148: LIST
9149: PPUSH
9150: LD_INT 97
9152: PPUSH
9153: LD_INT 11
9155: PPUSH
9156: CALL_OW 111
// AddComMoveXY ( [ Heike , Aviradze , Ralph , Oswald , Sonya , ArSol , FarmerVehicle ] , 94 , 13 ) ;
9160: LD_EXP 39
9164: PUSH
9165: LD_EXP 40
9169: PUSH
9170: LD_EXP 41
9174: PUSH
9175: LD_EXP 42
9179: PUSH
9180: LD_EXP 43
9184: PUSH
9185: LD_EXP 47
9189: PUSH
9190: LD_EXP 50
9194: PUSH
9195: EMPTY
9196: LIST
9197: LIST
9198: LIST
9199: LIST
9200: LIST
9201: LIST
9202: LIST
9203: PPUSH
9204: LD_INT 94
9206: PPUSH
9207: LD_INT 13
9209: PPUSH
9210: CALL_OW 171
// AddComMoveXY ( [ Heike , Aviradze , Ralph , Oswald , Sonya , ArSol , FarmerVehicle ] , 94 , 20 ) ;
9214: LD_EXP 39
9218: PUSH
9219: LD_EXP 40
9223: PUSH
9224: LD_EXP 41
9228: PUSH
9229: LD_EXP 42
9233: PUSH
9234: LD_EXP 43
9238: PUSH
9239: LD_EXP 47
9243: PUSH
9244: LD_EXP 50
9248: PUSH
9249: EMPTY
9250: LIST
9251: LIST
9252: LIST
9253: LIST
9254: LIST
9255: LIST
9256: LIST
9257: PPUSH
9258: LD_INT 94
9260: PPUSH
9261: LD_INT 20
9263: PPUSH
9264: CALL_OW 171
// AddComMoveXY ( [ Heike , Aviradze , Ralph , Oswald , Sonya , ArSol , FarmerVehicle ] , 93 , 24 ) ;
9268: LD_EXP 39
9272: PUSH
9273: LD_EXP 40
9277: PUSH
9278: LD_EXP 41
9282: PUSH
9283: LD_EXP 42
9287: PUSH
9288: LD_EXP 43
9292: PUSH
9293: LD_EXP 47
9297: PUSH
9298: LD_EXP 50
9302: PUSH
9303: EMPTY
9304: LIST
9305: LIST
9306: LIST
9307: LIST
9308: LIST
9309: LIST
9310: LIST
9311: PPUSH
9312: LD_INT 93
9314: PPUSH
9315: LD_INT 24
9317: PPUSH
9318: CALL_OW 171
// AddComMoveXY ( [ Heike , Aviradze , Ralph , Oswald , Sonya , ArSol , FarmerVehicle ] , 90 , 30 ) ;
9322: LD_EXP 39
9326: PUSH
9327: LD_EXP 40
9331: PUSH
9332: LD_EXP 41
9336: PUSH
9337: LD_EXP 42
9341: PUSH
9342: LD_EXP 43
9346: PUSH
9347: LD_EXP 47
9351: PUSH
9352: LD_EXP 50
9356: PUSH
9357: EMPTY
9358: LIST
9359: LIST
9360: LIST
9361: LIST
9362: LIST
9363: LIST
9364: LIST
9365: PPUSH
9366: LD_INT 90
9368: PPUSH
9369: LD_INT 30
9371: PPUSH
9372: CALL_OW 171
// AddComMoveXY ( FarmerVehicle , 92 , 37 ) ;
9376: LD_EXP 50
9380: PPUSH
9381: LD_INT 92
9383: PPUSH
9384: LD_INT 37
9386: PPUSH
9387: CALL_OW 171
// AddComMoveXY ( Heike , 85 , 32 ) ;
9391: LD_EXP 39
9395: PPUSH
9396: LD_INT 85
9398: PPUSH
9399: LD_INT 32
9401: PPUSH
9402: CALL_OW 171
// AddComTurnUnit ( Heike , Kowalski ) ;
9406: LD_EXP 39
9410: PPUSH
9411: LD_EXP 44
9415: PPUSH
9416: CALL_OW 179
// AddComMoveXY ( Aviradze , 84 , 30 ) ;
9420: LD_EXP 40
9424: PPUSH
9425: LD_INT 84
9427: PPUSH
9428: LD_INT 30
9430: PPUSH
9431: CALL_OW 171
// AddComTurnUnit ( Aviradze , Kowalski ) ;
9435: LD_EXP 40
9439: PPUSH
9440: LD_EXP 44
9444: PPUSH
9445: CALL_OW 179
// AddComMoveXY ( Ralph , 85 , 31 ) ;
9449: LD_EXP 41
9453: PPUSH
9454: LD_INT 85
9456: PPUSH
9457: LD_INT 31
9459: PPUSH
9460: CALL_OW 171
// AddComTurnUnit ( Ralph , Kowalski ) ;
9464: LD_EXP 41
9468: PPUSH
9469: LD_EXP 44
9473: PPUSH
9474: CALL_OW 179
// AddComMoveXY ( Oswald , 86 , 32 ) ;
9478: LD_EXP 42
9482: PPUSH
9483: LD_INT 86
9485: PPUSH
9486: LD_INT 32
9488: PPUSH
9489: CALL_OW 171
// AddComTurnUnit ( Oswald , Kowalski ) ;
9493: LD_EXP 42
9497: PPUSH
9498: LD_EXP 44
9502: PPUSH
9503: CALL_OW 179
// AddComMoveXY ( Sonya , 87 , 33 ) ;
9507: LD_EXP 43
9511: PPUSH
9512: LD_INT 87
9514: PPUSH
9515: LD_INT 33
9517: PPUSH
9518: CALL_OW 171
// AddComTurnUnit ( Sonya , Kowalski ) ;
9522: LD_EXP 43
9526: PPUSH
9527: LD_EXP 44
9531: PPUSH
9532: CALL_OW 179
// AddComMoveXY ( ArSol , 88 , 34 ) ;
9536: LD_EXP 47
9540: PPUSH
9541: LD_INT 88
9543: PPUSH
9544: LD_INT 34
9546: PPUSH
9547: CALL_OW 171
// AddComTurnUnit ( ArSol , Kowalski ) ;
9551: LD_EXP 47
9555: PPUSH
9556: LD_EXP 44
9560: PPUSH
9561: CALL_OW 179
// repeat wait ( 0 0$1 ) ;
9565: LD_INT 35
9567: PPUSH
9568: CALL_OW 67
// until GetDistUnitXY ( FarmerVehicle , 92 , 37 ) <= 1 ;
9572: LD_EXP 50
9576: PPUSH
9577: LD_INT 92
9579: PPUSH
9580: LD_INT 37
9582: PPUSH
9583: CALL_OW 297
9587: PUSH
9588: LD_INT 1
9590: LESSEQUAL
9591: IFFALSE 9565
// AddComExitVehicle ( Messenger ) ;
9593: LD_EXP 48
9597: PPUSH
9598: CALL_OW 181
// wait ( 0 0$1 ) ;
9602: LD_INT 35
9604: PPUSH
9605: CALL_OW 67
// AddComMoveXY ( Messenger , 86 , 33 ) ;
9609: LD_EXP 48
9613: PPUSH
9614: LD_INT 86
9616: PPUSH
9617: LD_INT 33
9619: PPUSH
9620: CALL_OW 171
// AddComTurnUnit ( Messenger , Kowalski ) ;
9624: LD_EXP 48
9628: PPUSH
9629: LD_EXP 44
9633: PPUSH
9634: CALL_OW 179
// repeat wait ( 0 0$1 ) ;
9638: LD_INT 35
9640: PPUSH
9641: CALL_OW 67
// until GetDistUnitXY ( Heike , 85 , 32 ) <= 1 ;
9645: LD_EXP 39
9649: PPUSH
9650: LD_INT 85
9652: PPUSH
9653: LD_INT 32
9655: PPUSH
9656: CALL_OW 297
9660: PUSH
9661: LD_INT 1
9663: LESSEQUAL
9664: IFFALSE 9638
// CenterNowOnUnits ( [ Heike , Kowalski ] ) ;
9666: LD_EXP 39
9670: PUSH
9671: LD_EXP 44
9675: PUSH
9676: EMPTY
9677: LIST
9678: LIST
9679: PPUSH
9680: CALL_OW 87
// Say ( Messenger , D2Me1 ) ;
9684: LD_EXP 48
9688: PPUSH
9689: LD_STRING D2Me1
9691: PPUSH
9692: CALL_OW 88
// Say ( Heike , D2H1 ) ;
9696: LD_EXP 39
9700: PPUSH
9701: LD_STRING D2H1
9703: PPUSH
9704: CALL_OW 88
// Say ( Kowalski , D2Ko1 ) ;
9708: LD_EXP 44
9712: PPUSH
9713: LD_STRING D2Ko1
9715: PPUSH
9716: CALL_OW 88
// Say ( Heike , D2H2 ) ;
9720: LD_EXP 39
9724: PPUSH
9725: LD_STRING D2H2
9727: PPUSH
9728: CALL_OW 88
// Say ( Kowalski , D2Ko2 ) ;
9732: LD_EXP 44
9736: PPUSH
9737: LD_STRING D2Ko2
9739: PPUSH
9740: CALL_OW 88
// Say ( Heike , D2H3 ) ;
9744: LD_EXP 39
9748: PPUSH
9749: LD_STRING D2H3
9751: PPUSH
9752: CALL_OW 88
// Say ( Kowalski , D2Ko3 ) ;
9756: LD_EXP 44
9760: PPUSH
9761: LD_STRING D2Ko3
9763: PPUSH
9764: CALL_OW 88
// Say ( Heike , D2H4 ) ;
9768: LD_EXP 39
9772: PPUSH
9773: LD_STRING D2H4
9775: PPUSH
9776: CALL_OW 88
// ComTurnUnit ( Messenger , Heike ) ;
9780: LD_EXP 48
9784: PPUSH
9785: LD_EXP 39
9789: PPUSH
9790: CALL_OW 119
// Say ( Messenger , D2Me2 ) ;
9794: LD_EXP 48
9798: PPUSH
9799: LD_STRING D2Me2
9801: PPUSH
9802: CALL_OW 88
// SetSide ( [ Messenger , FarmerVehicle ] , 5 ) ;
9806: LD_EXP 48
9810: PUSH
9811: LD_EXP 50
9815: PUSH
9816: EMPTY
9817: LIST
9818: LIST
9819: PPUSH
9820: LD_INT 5
9822: PPUSH
9823: CALL_OW 235
// ComEnterUnit ( Messenger , FarmerVehicle ) ;
9827: LD_EXP 48
9831: PPUSH
9832: LD_EXP 50
9836: PPUSH
9837: CALL_OW 120
// AddComMoveXY ( Messenger , 87 , 45 ) ;
9841: LD_EXP 48
9845: PPUSH
9846: LD_INT 87
9848: PPUSH
9849: LD_INT 45
9851: PPUSH
9852: CALL_OW 171
// AddComMoveXY ( Messenger , 92 , 60 ) ;
9856: LD_EXP 48
9860: PPUSH
9861: LD_INT 92
9863: PPUSH
9864: LD_INT 60
9866: PPUSH
9867: CALL_OW 171
// AddComMoveXY ( Messenger , 107 , 71 ) ;
9871: LD_EXP 48
9875: PPUSH
9876: LD_INT 107
9878: PPUSH
9879: LD_INT 71
9881: PPUSH
9882: CALL_OW 171
// AddComMoveToArea ( Messenger , FarmerExitArea ) ;
9886: LD_EXP 48
9890: PPUSH
9891: LD_INT 1
9893: PPUSH
9894: CALL_OW 173
// Say ( Aviradze , D2Av1 ) ;
9898: LD_EXP 40
9902: PPUSH
9903: LD_STRING D2Av1
9905: PPUSH
9906: CALL_OW 88
// Say ( Heike , D2H5 ) ;
9910: LD_EXP 39
9914: PPUSH
9915: LD_STRING D2H5
9917: PPUSH
9918: CALL_OW 88
// RevealFogArea ( 2 , HillArea ) ;
9922: LD_INT 2
9924: PPUSH
9925: LD_INT 5
9927: PPUSH
9928: CALL_OW 332
// CenterOnXY ( 62 , 39 ) ;
9932: LD_INT 62
9934: PPUSH
9935: LD_INT 39
9937: PPUSH
9938: CALL_OW 84
// Say ( Kowalski , D2Ko5 ) ;
9942: LD_EXP 44
9946: PPUSH
9947: LD_STRING D2Ko5
9949: PPUSH
9950: CALL_OW 88
// CenterNowOnUnits ( [ Heike , Kowalski ] ) ;
9954: LD_EXP 39
9958: PUSH
9959: LD_EXP 44
9963: PUSH
9964: EMPTY
9965: LIST
9966: LIST
9967: PPUSH
9968: CALL_OW 87
// if Oswald > 0 then
9972: LD_EXP 42
9976: PUSH
9977: LD_INT 0
9979: GREATER
9980: IFFALSE 10018
// begin Say ( Oswald , D2Os1 ) ;
9982: LD_EXP 42
9986: PPUSH
9987: LD_STRING D2Os1
9989: PPUSH
9990: CALL_OW 88
// Say ( Heike , D2H6 ) ;
9994: LD_EXP 39
9998: PPUSH
9999: LD_STRING D2H6
10001: PPUSH
10002: CALL_OW 88
// Say ( Heike , D2H7 ) ;
10006: LD_EXP 39
10010: PPUSH
10011: LD_STRING D2H7
10013: PPUSH
10014: CALL_OW 88
// end ; repeat wait ( 0 0$1 ) ;
10018: LD_INT 35
10020: PPUSH
10021: CALL_OW 67
// until IsInUnit ( Messenger ) ;
10025: LD_EXP 48
10029: PPUSH
10030: CALL_OW 310
10034: IFFALSE 10018
// InGameOff ;
10036: CALL_OW 9
// ChangeMissionObjectives ( M1 ) ;
10040: LD_STRING M1
10042: PPUSH
10043: CALL_OW 337
// SaveForQuickRestart ;
10047: CALL_OW 22
// AddComMoveToArea ( FarmerVehicle , FarmerExitArea ) ;
10051: LD_EXP 50
10055: PPUSH
10056: LD_INT 1
10058: PPUSH
10059: CALL_OW 173
// end ;
10063: LD_VAR 0 1
10067: RET
// every 0 0$1 trigger IsInArea ( FarmerVehicle , FarmerExitArea ) do
10068: LD_EXP 50
10072: PPUSH
10073: LD_INT 1
10075: PPUSH
10076: CALL_OW 308
10080: IFFALSE 10103
10082: GO 10084
10084: DISABLE
// begin RemoveUnit ( FarmerVehicle ) ;
10085: LD_EXP 50
10089: PPUSH
10090: CALL_OW 64
// RemoveUnit ( Messenger ) ;
10094: LD_EXP 48
10098: PPUSH
10099: CALL_OW 64
// end ;
10103: END
// every 0 0$1 trigger FilterUnitsInArea ( HillEnterArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) > 0 and CaptureAmBase = false do
10104: LD_INT 6
10106: PPUSH
10107: LD_INT 22
10109: PUSH
10110: LD_INT 2
10112: PUSH
10113: EMPTY
10114: LIST
10115: LIST
10116: PUSH
10117: LD_INT 21
10119: PUSH
10120: LD_INT 1
10122: PUSH
10123: EMPTY
10124: LIST
10125: LIST
10126: PUSH
10127: EMPTY
10128: LIST
10129: LIST
10130: PPUSH
10131: CALL_OW 70
10135: PUSH
10136: LD_INT 0
10138: GREATER
10139: PUSH
10140: LD_EXP 1
10144: PUSH
10145: LD_INT 0
10147: EQUAL
10148: AND
10149: IFFALSE 10166
10151: GO 10153
10153: DISABLE
// begin Say ( Heike , D3-H-1 ) ;
10154: LD_EXP 39
10158: PPUSH
10159: LD_STRING D3-H-1
10161: PPUSH
10162: CALL_OW 88
// end ;
10166: END
// every 0 0$1 trigger FilterUnitsInArea ( SpotArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) > 0 and Americans_are_evacuating = false do var i ;
10167: LD_INT 7
10169: PPUSH
10170: LD_INT 22
10172: PUSH
10173: LD_INT 2
10175: PUSH
10176: EMPTY
10177: LIST
10178: LIST
10179: PUSH
10180: LD_INT 21
10182: PUSH
10183: LD_INT 1
10185: PUSH
10186: EMPTY
10187: LIST
10188: LIST
10189: PUSH
10190: EMPTY
10191: LIST
10192: LIST
10193: PPUSH
10194: CALL_OW 70
10198: PUSH
10199: LD_INT 0
10201: GREATER
10202: PUSH
10203: LD_EXP 22
10207: PUSH
10208: LD_INT 0
10210: EQUAL
10211: AND
10212: IFFALSE 10632
10214: GO 10216
10216: DISABLE
10217: LD_INT 0
10219: PPUSH
// begin SetAttitude ( 1 , 2 , att_friend , true ) ;
10220: LD_INT 1
10222: PPUSH
10223: LD_INT 2
10225: PPUSH
10226: LD_INT 1
10228: PPUSH
10229: LD_INT 1
10231: PPUSH
10232: CALL_OW 80
// InGameOn ;
10236: CALL_OW 8
// PlaceSeeing ( 36 , 24 , 2 , - 10 ) ;
10240: LD_INT 36
10242: PPUSH
10243: LD_INT 24
10245: PPUSH
10246: LD_INT 2
10248: PPUSH
10249: LD_INT 10
10251: NEG
10252: PPUSH
10253: CALL_OW 330
// CenterOnXY ( 37 , 25 ) ;
10257: LD_INT 37
10259: PPUSH
10260: LD_INT 25
10262: PPUSH
10263: CALL_OW 84
// DialogueOn ;
10267: CALL_OW 6
// if IsInArea ( Heike , DetectArabUnitsArea ) then
10271: LD_EXP 39
10275: PPUSH
10276: LD_INT 8
10278: PPUSH
10279: CALL_OW 308
10283: IFFALSE 10297
// Say ( Heike , D3-H-2 ) ;
10285: LD_EXP 39
10289: PPUSH
10290: LD_STRING D3-H-2
10292: PPUSH
10293: CALL_OW 88
// if Oswald > 0 and IsInArea ( Oswald , DetectArabUnitsArea ) and IsInArea ( Heike , DetectArabUnitsArea ) then
10297: LD_EXP 42
10301: PUSH
10302: LD_INT 0
10304: GREATER
10305: PUSH
10306: LD_EXP 42
10310: PPUSH
10311: LD_INT 8
10313: PPUSH
10314: CALL_OW 308
10318: AND
10319: PUSH
10320: LD_EXP 39
10324: PPUSH
10325: LD_INT 8
10327: PPUSH
10328: CALL_OW 308
10332: AND
10333: IFFALSE 10347
// Say ( Oswald , D3-Osw-1 ) ;
10335: LD_EXP 42
10339: PPUSH
10340: LD_STRING D3-Osw-1
10342: PPUSH
10343: CALL_OW 88
// if Oswald > 0 and IsInArea ( Oswald , DetectArabUnitsArea ) and not IsInArea ( Heike , DetectArabUnitsArea ) then
10347: LD_EXP 42
10351: PUSH
10352: LD_INT 0
10354: GREATER
10355: PUSH
10356: LD_EXP 42
10360: PPUSH
10361: LD_INT 8
10363: PPUSH
10364: CALL_OW 308
10368: AND
10369: PUSH
10370: LD_EXP 39
10374: PPUSH
10375: LD_INT 8
10377: PPUSH
10378: CALL_OW 308
10382: NOT
10383: AND
10384: IFFALSE 10398
// Say ( Oswald , D3-Osw-1a ) ;
10386: LD_EXP 42
10390: PPUSH
10391: LD_STRING D3-Osw-1a
10393: PPUSH
10394: CALL_OW 88
// if Oswald > 0 and not IsInArea ( Oswald , DetectArabUnitsArea ) then
10398: LD_EXP 42
10402: PUSH
10403: LD_INT 0
10405: GREATER
10406: PUSH
10407: LD_EXP 42
10411: PPUSH
10412: LD_INT 8
10414: PPUSH
10415: CALL_OW 308
10419: NOT
10420: AND
10421: IFFALSE 10435
// Say ( Oswald , D3-Osw-1b ) ;
10423: LD_EXP 42
10427: PPUSH
10428: LD_STRING D3-Osw-1b
10430: PPUSH
10431: CALL_OW 88
// Say ( Heike , D3-H-3 ) ;
10435: LD_EXP 39
10439: PPUSH
10440: LD_STRING D3-H-3
10442: PPUSH
10443: CALL_OW 88
// Say ( Heike , D3-H-4 ) ;
10447: LD_EXP 39
10451: PPUSH
10452: LD_STRING D3-H-4
10454: PPUSH
10455: CALL_OW 88
// if Oswald > 0 then
10459: LD_EXP 42
10463: PUSH
10464: LD_INT 0
10466: GREATER
10467: IFFALSE 10481
// Say ( Oswald , D3-Osw-2 ) ;
10469: LD_EXP 42
10473: PPUSH
10474: LD_STRING D3-Osw-2
10476: PPUSH
10477: CALL_OW 88
// if KilledAmSci_02 > 0 and IsOk ( Aviradze ) then
10481: LD_EXP 35
10485: PUSH
10486: LD_INT 0
10488: GREATER
10489: PUSH
10490: LD_EXP 40
10494: PPUSH
10495: CALL_OW 302
10499: AND
10500: IFFALSE 10514
// Say ( Aviradze , D3-Aviradze-1 ) ;
10502: LD_EXP 40
10506: PPUSH
10507: LD_STRING D3-Aviradze-1
10509: PPUSH
10510: CALL_OW 88
// DialogueOff ;
10514: CALL_OW 7
// RemoveSeeing ( 36 , 24 , 2 ) ;
10518: LD_INT 36
10520: PPUSH
10521: LD_INT 24
10523: PPUSH
10524: LD_INT 2
10526: PPUSH
10527: CALL_OW 331
// for i in FilterUnitsInArea ( DetectArabUnitsArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) do
10531: LD_ADDR_VAR 0 1
10535: PUSH
10536: LD_INT 8
10538: PPUSH
10539: LD_INT 22
10541: PUSH
10542: LD_INT 2
10544: PUSH
10545: EMPTY
10546: LIST
10547: LIST
10548: PUSH
10549: LD_INT 21
10551: PUSH
10552: LD_INT 1
10554: PUSH
10555: EMPTY
10556: LIST
10557: LIST
10558: PUSH
10559: EMPTY
10560: LIST
10561: LIST
10562: PPUSH
10563: CALL_OW 70
10567: PUSH
10568: FOR_IN
10569: IFFALSE 10588
// ComMoveXY ( i , 64 , 41 ) ;
10571: LD_VAR 0 1
10575: PPUSH
10576: LD_INT 64
10578: PPUSH
10579: LD_INT 41
10581: PPUSH
10582: CALL_OW 111
10586: GO 10568
10588: POP
10589: POP
// wait ( 0 0$10 ) ;
10590: LD_INT 350
10592: PPUSH
10593: CALL_OW 67
// InGameOff ;
10597: CALL_OW 9
// SetAttitude ( 1 , 2 , att_enemy , true ) ;
10601: LD_INT 1
10603: PPUSH
10604: LD_INT 2
10606: PPUSH
10607: LD_INT 2
10609: PPUSH
10610: LD_INT 1
10612: PPUSH
10613: CALL_OW 80
// ChangeMissionObjectives ( MRockOut ) ;
10617: LD_STRING MRockOut
10619: PPUSH
10620: CALL_OW 337
// SpottedAmericansBase = true ;
10624: LD_ADDR_EXP 34
10628: PUSH
10629: LD_INT 1
10631: ST_TO_ADDR
// end ;
10632: PPOPN 1
10634: END
// every 0 0$5 do var i , temp , see_list , temp_list , count , string_val ;
10635: GO 10637
10637: DISABLE
10638: LD_INT 0
10640: PPUSH
10641: PPUSH
10642: PPUSH
10643: PPUSH
10644: PPUSH
10645: PPUSH
// begin count = 0 ;
10646: LD_ADDR_VAR 0 5
10650: PUSH
10651: LD_INT 0
10653: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
10654: LD_INT 18
10656: PPUSH
10657: CALL_OW 67
// see_list = [ ] ;
10661: LD_ADDR_VAR 0 3
10665: PUSH
10666: EMPTY
10667: ST_TO_ADDR
// if ContactTime ( [ 2 , 1 ] ) < 0 0$2 then
10668: LD_INT 2
10670: PUSH
10671: LD_INT 1
10673: PUSH
10674: EMPTY
10675: LIST
10676: LIST
10677: PPUSH
10678: CALL_OW 462
10682: PUSH
10683: LD_INT 70
10685: LESS
10686: IFFALSE 10830
// begin count = count + 1 ;
10688: LD_ADDR_VAR 0 5
10692: PUSH
10693: LD_VAR 0 5
10697: PUSH
10698: LD_INT 1
10700: PLUS
10701: ST_TO_ADDR
// if count >= 5 then
10702: LD_VAR 0 5
10706: PUSH
10707: LD_INT 5
10709: GREATEREQUAL
10710: IFFALSE 10828
// begin see_list = FilterAllUnits ( [ [ f_side , 1 ] , [ f_see , 2 ] ] ) ;
10712: LD_ADDR_VAR 0 3
10716: PUSH
10717: LD_INT 22
10719: PUSH
10720: LD_INT 1
10722: PUSH
10723: EMPTY
10724: LIST
10725: LIST
10726: PUSH
10727: LD_INT 101
10729: PUSH
10730: LD_INT 2
10732: PUSH
10733: EMPTY
10734: LIST
10735: LIST
10736: PUSH
10737: EMPTY
10738: LIST
10739: LIST
10740: PPUSH
10741: CALL_OW 69
10745: ST_TO_ADDR
// for i = 1 to see_list do
10746: LD_ADDR_VAR 0 1
10750: PUSH
10751: DOUBLE
10752: LD_INT 1
10754: DEC
10755: ST_TO_ADDR
10756: LD_VAR 0 3
10760: PUSH
10761: FOR_TO
10762: IFFALSE 10826
// begin temp_list = UnitsInside ( see_list [ i ] ) ;
10764: LD_ADDR_VAR 0 4
10768: PUSH
10769: LD_VAR 0 3
10773: PUSH
10774: LD_VAR 0 1
10778: ARRAY
10779: PPUSH
10780: CALL_OW 313
10784: ST_TO_ADDR
// if temp_list > 0 then
10785: LD_VAR 0 4
10789: PUSH
10790: LD_INT 0
10792: GREATER
10793: IFFALSE 10824
// see_list = Replace ( see_list , i , temp_list [ 1 ] ) ;
10795: LD_ADDR_VAR 0 3
10799: PUSH
10800: LD_VAR 0 3
10804: PPUSH
10805: LD_VAR 0 1
10809: PPUSH
10810: LD_VAR 0 4
10814: PUSH
10815: LD_INT 1
10817: ARRAY
10818: PPUSH
10819: CALL_OW 1
10823: ST_TO_ADDR
// end ;
10824: GO 10761
10826: POP
10827: POP
// end ; end else
10828: GO 10838
// count = 0 ;
10830: LD_ADDR_VAR 0 5
10834: PUSH
10835: LD_INT 0
10837: ST_TO_ADDR
// until see_list > 0 ;
10838: LD_VAR 0 3
10842: PUSH
10843: LD_INT 0
10845: GREATER
10846: IFFALSE 10654
// DialogueOn ;
10848: CALL_OW 6
// Say ( see_list [ 1 ] , D3AmMale1 ) ;
10852: LD_VAR 0 3
10856: PUSH
10857: LD_INT 1
10859: ARRAY
10860: PPUSH
10861: LD_STRING D3AmMale1
10863: PPUSH
10864: CALL_OW 88
// Say ( Heike , D3H1 ) ;
10868: LD_EXP 39
10872: PPUSH
10873: LD_STRING D3H1
10875: PPUSH
10876: CALL_OW 88
// DialogueOff ;
10880: CALL_OW 7
// if SpottedAmericansBase = false then
10884: LD_EXP 34
10888: PUSH
10889: LD_INT 0
10891: EQUAL
10892: IFFALSE 10901
// ChangeMissionObjectives ( MRockDel ) ;
10894: LD_STRING MRockDel
10896: PPUSH
10897: CALL_OW 337
// repeat wait ( 0 0$1 ) ;
10901: LD_INT 35
10903: PPUSH
10904: CALL_OW 67
// temp = 0 ;
10908: LD_ADDR_VAR 0 2
10912: PUSH
10913: LD_INT 0
10915: ST_TO_ADDR
// for i in start_americans do
10916: LD_ADDR_VAR 0 1
10920: PUSH
10921: LD_EXP 3
10925: PUSH
10926: FOR_IN
10927: IFFALSE 10970
// if GetLives ( i ) < 850 or i = 0 then
10929: LD_VAR 0 1
10933: PPUSH
10934: CALL_OW 256
10938: PUSH
10939: LD_INT 850
10941: LESS
10942: PUSH
10943: LD_VAR 0 1
10947: PUSH
10948: LD_INT 0
10950: EQUAL
10951: OR
10952: IFFALSE 10968
// temp = temp + 1 ;
10954: LD_ADDR_VAR 0 2
10958: PUSH
10959: LD_VAR 0 2
10963: PUSH
10964: LD_INT 1
10966: PLUS
10967: ST_TO_ADDR
10968: GO 10926
10970: POP
10971: POP
// until temp > 2 ;
10972: LD_VAR 0 2
10976: PUSH
10977: LD_INT 2
10979: GREATER
10980: IFFALSE 10901
// see_list = FilterAllUnits ( [ [ f_side , 1 ] , [ f_see , 2 ] , [ f_ok ] ] ) ;
10982: LD_ADDR_VAR 0 3
10986: PUSH
10987: LD_INT 22
10989: PUSH
10990: LD_INT 1
10992: PUSH
10993: EMPTY
10994: LIST
10995: LIST
10996: PUSH
10997: LD_INT 101
10999: PUSH
11000: LD_INT 2
11002: PUSH
11003: EMPTY
11004: LIST
11005: LIST
11006: PUSH
11007: LD_INT 50
11009: PUSH
11010: EMPTY
11011: LIST
11012: PUSH
11013: EMPTY
11014: LIST
11015: LIST
11016: LIST
11017: PPUSH
11018: CALL_OW 69
11022: ST_TO_ADDR
// for i = 1 to see_list do
11023: LD_ADDR_VAR 0 1
11027: PUSH
11028: DOUBLE
11029: LD_INT 1
11031: DEC
11032: ST_TO_ADDR
11033: LD_VAR 0 3
11037: PUSH
11038: FOR_TO
11039: IFFALSE 11103
// begin temp_list = UnitsInside ( see_list [ i ] ) ;
11041: LD_ADDR_VAR 0 4
11045: PUSH
11046: LD_VAR 0 3
11050: PUSH
11051: LD_VAR 0 1
11055: ARRAY
11056: PPUSH
11057: CALL_OW 313
11061: ST_TO_ADDR
// if temp_list > 0 then
11062: LD_VAR 0 4
11066: PUSH
11067: LD_INT 0
11069: GREATER
11070: IFFALSE 11101
// see_list = Replace ( see_list , i , temp_list [ 1 ] ) ;
11072: LD_ADDR_VAR 0 3
11076: PUSH
11077: LD_VAR 0 3
11081: PPUSH
11082: LD_VAR 0 1
11086: PPUSH
11087: LD_VAR 0 4
11091: PUSH
11092: LD_INT 1
11094: ARRAY
11095: PPUSH
11096: CALL_OW 1
11100: ST_TO_ADDR
// end ;
11101: GO 11038
11103: POP
11104: POP
// if GetLives ( dep ) < 1000 then
11105: LD_INT 1
11107: PPUSH
11108: CALL_OW 256
11112: PUSH
11113: LD_INT 1000
11115: LESS
11116: IFFALSE 11128
// string_val = D3AmMale2b else
11118: LD_ADDR_VAR 0 6
11122: PUSH
11123: LD_STRING D3AmMale2b
11125: ST_TO_ADDR
11126: GO 11136
// string_val = D3AmMale2a ;
11128: LD_ADDR_VAR 0 6
11132: PUSH
11133: LD_STRING D3AmMale2a
11135: ST_TO_ADDR
// wait ( 0 0$5 ) ;
11136: LD_INT 175
11138: PPUSH
11139: CALL_OW 67
// DialogueOn ;
11143: CALL_OW 6
// if see_list > 0 then
11147: LD_VAR 0 3
11151: PUSH
11152: LD_INT 0
11154: GREATER
11155: IFFALSE 11177
// Say ( see_list [ 1 ] , string_val ) else
11157: LD_VAR 0 3
11161: PUSH
11162: LD_INT 1
11164: ARRAY
11165: PPUSH
11166: LD_VAR 0 6
11170: PPUSH
11171: CALL_OW 88
11175: GO 11206
// Say ( UnitFilter ( start_americans , [ f_ok ] ) [ 1 ] , string_val ) ;
11177: LD_EXP 3
11181: PPUSH
11182: LD_INT 50
11184: PUSH
11185: EMPTY
11186: LIST
11187: PPUSH
11188: CALL_OW 72
11192: PUSH
11193: LD_INT 1
11195: ARRAY
11196: PPUSH
11197: LD_VAR 0 6
11201: PPUSH
11202: CALL_OW 88
// DialogueOff ;
11206: CALL_OW 7
// americans_are_evacuating = true ;
11210: LD_ADDR_EXP 22
11214: PUSH
11215: LD_INT 1
11217: ST_TO_ADDR
// for i in start_americans do
11218: LD_ADDR_VAR 0 1
11222: PUSH
11223: LD_EXP 3
11227: PUSH
11228: FOR_IN
11229: IFFALSE 11334
// begin ComExitBuilding ( i ) ;
11231: LD_VAR 0 1
11235: PPUSH
11236: CALL_OW 122
// if FilterUnitsInArea ( NorthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) > FilterUnitsInArea ( SouthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) then
11240: LD_INT 9
11242: PPUSH
11243: LD_INT 22
11245: PUSH
11246: LD_INT 2
11248: PUSH
11249: EMPTY
11250: LIST
11251: LIST
11252: PUSH
11253: LD_INT 21
11255: PUSH
11256: LD_INT 1
11258: PUSH
11259: EMPTY
11260: LIST
11261: LIST
11262: PUSH
11263: EMPTY
11264: LIST
11265: LIST
11266: PPUSH
11267: CALL_OW 70
11271: PUSH
11272: LD_INT 10
11274: PPUSH
11275: LD_INT 22
11277: PUSH
11278: LD_INT 2
11280: PUSH
11281: EMPTY
11282: LIST
11283: LIST
11284: PUSH
11285: LD_INT 21
11287: PUSH
11288: LD_INT 1
11290: PUSH
11291: EMPTY
11292: LIST
11293: LIST
11294: PUSH
11295: EMPTY
11296: LIST
11297: LIST
11298: PPUSH
11299: CALL_OW 70
11303: GREATER
11304: IFFALSE 11320
// AddComMoveToArea ( i , AmEscapeSouthArea ) else
11306: LD_VAR 0 1
11310: PPUSH
11311: LD_INT 12
11313: PPUSH
11314: CALL_OW 173
11318: GO 11332
// AddComMoveToArea ( i , AmEscapeNorthArea ) ;
11320: LD_VAR 0 1
11324: PPUSH
11325: LD_INT 11
11327: PPUSH
11328: CALL_OW 173
// end ;
11332: GO 11228
11334: POP
11335: POP
// repeat for i in start_americans do
11336: LD_ADDR_VAR 0 1
11340: PUSH
11341: LD_EXP 3
11345: PUSH
11346: FOR_IN
11347: IFFALSE 11426
// if ( IsInArea ( i , AmEscapeNorthArea ) or IsInArea ( i , AmEscapeSouthArea ) ) and IsOk ( i ) then
11349: LD_VAR 0 1
11353: PPUSH
11354: LD_INT 11
11356: PPUSH
11357: CALL_OW 308
11361: PUSH
11362: LD_VAR 0 1
11366: PPUSH
11367: LD_INT 12
11369: PPUSH
11370: CALL_OW 308
11374: OR
11375: PUSH
11376: LD_VAR 0 1
11380: PPUSH
11381: CALL_OW 302
11385: AND
11386: IFFALSE 11424
// begin RemoveUnit ( i ) ;
11388: LD_VAR 0 1
11392: PPUSH
11393: CALL_OW 64
// if not americans_got_away then
11397: LD_EXP 24
11401: NOT
11402: IFFALSE 11416
// Say ( Heike , D3-H-5 ) ;
11404: LD_EXP 39
11408: PPUSH
11409: LD_STRING D3-H-5
11411: PPUSH
11412: CALL_OW 88
// americans_got_away = true ;
11416: LD_ADDR_EXP 24
11420: PUSH
11421: LD_INT 1
11423: ST_TO_ADDR
// end ;
11424: GO 11346
11426: POP
11427: POP
// wait ( 0 0$1 ) ;
11428: LD_INT 35
11430: PPUSH
11431: CALL_OW 67
// until UnitFilter ( start_americans , [ [ f_ok ] , [ f_placed ] ] ) = 0 ;
11435: LD_EXP 3
11439: PPUSH
11440: LD_INT 50
11442: PUSH
11443: EMPTY
11444: LIST
11445: PUSH
11446: LD_INT 52
11448: PUSH
11449: EMPTY
11450: LIST
11451: PUSH
11452: EMPTY
11453: LIST
11454: LIST
11455: PPUSH
11456: CALL_OW 72
11460: PUSH
11461: LD_INT 0
11463: EQUAL
11464: IFFALSE 11336
// americans_have_evacuated = true ;
11466: LD_ADDR_EXP 23
11470: PUSH
11471: LD_INT 1
11473: ST_TO_ADDR
// if americans_got_away then
11474: LD_EXP 24
11478: IFFALSE 11521
// attack_times = Replace ( attack_times , 1 , attack_times [ 1 ] - attack_times [ 1 ] div 7 ) ;
11480: LD_ADDR_EXP 21
11484: PUSH
11485: LD_EXP 21
11489: PPUSH
11490: LD_INT 1
11492: PPUSH
11493: LD_EXP 21
11497: PUSH
11498: LD_INT 1
11500: ARRAY
11501: PUSH
11502: LD_EXP 21
11506: PUSH
11507: LD_INT 1
11509: ARRAY
11510: PUSH
11511: LD_INT 7
11513: DIV
11514: MINUS
11515: PPUSH
11516: CALL_OW 1
11520: ST_TO_ADDR
// end ;
11521: PPOPN 6
11523: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 2 ] , [ f_btype , b_depot ] ] ) > 0 do var i , eng , sol , temp ;
11524: LD_INT 22
11526: PUSH
11527: LD_INT 2
11529: PUSH
11530: EMPTY
11531: LIST
11532: LIST
11533: PUSH
11534: LD_INT 30
11536: PUSH
11537: LD_INT 0
11539: PUSH
11540: EMPTY
11541: LIST
11542: LIST
11543: PUSH
11544: EMPTY
11545: LIST
11546: LIST
11547: PPUSH
11548: CALL_OW 69
11552: PUSH
11553: LD_INT 0
11555: GREATER
11556: IFFALSE 12224
11558: GO 11560
11560: DISABLE
11561: LD_INT 0
11563: PPUSH
11564: PPUSH
11565: PPUSH
11566: PPUSH
// begin PrepareFarmerUnits ;
11567: CALL 1703 0 0
// eng = FilterAllUnits ( [ [ f_side , 5 ] , [ f_class , class_engineer ] ] ) ;
11571: LD_ADDR_VAR 0 2
11575: PUSH
11576: LD_INT 22
11578: PUSH
11579: LD_INT 5
11581: PUSH
11582: EMPTY
11583: LIST
11584: LIST
11585: PUSH
11586: LD_INT 25
11588: PUSH
11589: LD_INT 2
11591: PUSH
11592: EMPTY
11593: LIST
11594: LIST
11595: PUSH
11596: EMPTY
11597: LIST
11598: LIST
11599: PPUSH
11600: CALL_OW 69
11604: ST_TO_ADDR
// sol = FilterAllUnits ( [ [ f_side , 5 ] , [ f_class , class_soldier ] ] ) ;
11605: LD_ADDR_VAR 0 3
11609: PUSH
11610: LD_INT 22
11612: PUSH
11613: LD_INT 5
11615: PUSH
11616: EMPTY
11617: LIST
11618: LIST
11619: PUSH
11620: LD_INT 25
11622: PUSH
11623: LD_INT 1
11625: PUSH
11626: EMPTY
11627: LIST
11628: LIST
11629: PUSH
11630: EMPTY
11631: LIST
11632: LIST
11633: PPUSH
11634: CALL_OW 69
11638: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
11639: LD_INT 35
11641: PPUSH
11642: CALL_OW 67
// temp = FilterAllUnits ( [ [ f_side , 5 ] , [ f_constructed ] ] ) ;
11646: LD_ADDR_VAR 0 4
11650: PUSH
11651: LD_INT 22
11653: PUSH
11654: LD_INT 5
11656: PUSH
11657: EMPTY
11658: LIST
11659: LIST
11660: PUSH
11661: LD_INT 57
11663: PUSH
11664: EMPTY
11665: LIST
11666: PUSH
11667: EMPTY
11668: LIST
11669: LIST
11670: PPUSH
11671: CALL_OW 69
11675: ST_TO_ADDR
// if temp > 0 then
11676: LD_VAR 0 4
11680: PUSH
11681: LD_INT 0
11683: GREATER
11684: IFFALSE 11751
// for i in sol do
11686: LD_ADDR_VAR 0 1
11690: PUSH
11691: LD_VAR 0 3
11695: PUSH
11696: FOR_IN
11697: IFFALSE 11749
// SetTaskList ( i , [ [ h , 0 , 0 , temp [ 1 ] , 0 , 0 , 0 ] ] ) ;
11699: LD_VAR 0 1
11703: PPUSH
11704: LD_STRING h
11706: PUSH
11707: LD_INT 0
11709: PUSH
11710: LD_INT 0
11712: PUSH
11713: LD_VAR 0 4
11717: PUSH
11718: LD_INT 1
11720: ARRAY
11721: PUSH
11722: LD_INT 0
11724: PUSH
11725: LD_INT 0
11727: PUSH
11728: LD_INT 0
11730: PUSH
11731: EMPTY
11732: LIST
11733: LIST
11734: LIST
11735: LIST
11736: LIST
11737: LIST
11738: LIST
11739: PUSH
11740: EMPTY
11741: LIST
11742: PPUSH
11743: CALL_OW 446
11747: GO 11696
11749: POP
11750: POP
// if FilterAllUnits ( [ [ f_side , 5 ] , [ f_btype , b_depot ] , [ f_not , [ f_constructed ] ] ] ) = 0 then
11751: LD_INT 22
11753: PUSH
11754: LD_INT 5
11756: PUSH
11757: EMPTY
11758: LIST
11759: LIST
11760: PUSH
11761: LD_INT 30
11763: PUSH
11764: LD_INT 0
11766: PUSH
11767: EMPTY
11768: LIST
11769: LIST
11770: PUSH
11771: LD_INT 3
11773: PUSH
11774: LD_INT 57
11776: PUSH
11777: EMPTY
11778: LIST
11779: PUSH
11780: EMPTY
11781: LIST
11782: LIST
11783: PUSH
11784: EMPTY
11785: LIST
11786: LIST
11787: LIST
11788: PPUSH
11789: CALL_OW 69
11793: PUSH
11794: LD_INT 0
11796: EQUAL
11797: IFFALSE 11822
// ComBuild ( eng , b_depot , 112 , 65 , 3 ) else
11799: LD_VAR 0 2
11803: PPUSH
11804: LD_INT 0
11806: PPUSH
11807: LD_INT 112
11809: PPUSH
11810: LD_INT 65
11812: PPUSH
11813: LD_INT 3
11815: PPUSH
11816: CALL_OW 145
11820: GO 11962
// if FilterAllUnits ( [ [ f_side , 5 ] , [ f_btype , b_breastwork ] , [ f_not , [ f_constructed ] ] ] ) = 0 then
11822: LD_INT 22
11824: PUSH
11825: LD_INT 5
11827: PUSH
11828: EMPTY
11829: LIST
11830: LIST
11831: PUSH
11832: LD_INT 30
11834: PUSH
11835: LD_INT 31
11837: PUSH
11838: EMPTY
11839: LIST
11840: LIST
11841: PUSH
11842: LD_INT 3
11844: PUSH
11845: LD_INT 57
11847: PUSH
11848: EMPTY
11849: LIST
11850: PUSH
11851: EMPTY
11852: LIST
11853: LIST
11854: PUSH
11855: EMPTY
11856: LIST
11857: LIST
11858: LIST
11859: PPUSH
11860: CALL_OW 69
11864: PUSH
11865: LD_INT 0
11867: EQUAL
11868: IFFALSE 11893
// ComBuild ( eng , b_breastwork , 107 , 55 , 2 ) else
11870: LD_VAR 0 2
11874: PPUSH
11875: LD_INT 31
11877: PPUSH
11878: LD_INT 107
11880: PPUSH
11881: LD_INT 55
11883: PPUSH
11884: LD_INT 2
11886: PPUSH
11887: CALL_OW 145
11891: GO 11962
// if FilterAllUnits ( [ [ f_side , 5 ] , [ f_btype , b_breastwork ] , [ f_not , [ f_constructed ] ] ] ) = 1 then
11893: LD_INT 22
11895: PUSH
11896: LD_INT 5
11898: PUSH
11899: EMPTY
11900: LIST
11901: LIST
11902: PUSH
11903: LD_INT 30
11905: PUSH
11906: LD_INT 31
11908: PUSH
11909: EMPTY
11910: LIST
11911: LIST
11912: PUSH
11913: LD_INT 3
11915: PUSH
11916: LD_INT 57
11918: PUSH
11919: EMPTY
11920: LIST
11921: PUSH
11922: EMPTY
11923: LIST
11924: LIST
11925: PUSH
11926: EMPTY
11927: LIST
11928: LIST
11929: LIST
11930: PPUSH
11931: CALL_OW 69
11935: PUSH
11936: LD_INT 1
11938: EQUAL
11939: IFFALSE 11962
// ComBuild ( eng , b_breastwork , 106 , 69 , 1 ) ;
11941: LD_VAR 0 2
11945: PPUSH
11946: LD_INT 31
11948: PPUSH
11949: LD_INT 106
11951: PPUSH
11952: LD_INT 69
11954: PPUSH
11955: LD_INT 1
11957: PPUSH
11958: CALL_OW 145
// until FilterAllUnits ( [ [ f_side , 5 ] , [ f_btype , b_breastwork ] , [ f_not , [ f_constructed ] ] ] ) = 2 ;
11962: LD_INT 22
11964: PUSH
11965: LD_INT 5
11967: PUSH
11968: EMPTY
11969: LIST
11970: LIST
11971: PUSH
11972: LD_INT 30
11974: PUSH
11975: LD_INT 31
11977: PUSH
11978: EMPTY
11979: LIST
11980: LIST
11981: PUSH
11982: LD_INT 3
11984: PUSH
11985: LD_INT 57
11987: PUSH
11988: EMPTY
11989: LIST
11990: PUSH
11991: EMPTY
11992: LIST
11993: LIST
11994: PUSH
11995: EMPTY
11996: LIST
11997: LIST
11998: LIST
11999: PPUSH
12000: CALL_OW 69
12004: PUSH
12005: LD_INT 2
12007: EQUAL
12008: IFFALSE 11639
// DialogueOn ;
12010: CALL_OW 6
// CenterNowOnXY ( 113 , 65 ) ;
12014: LD_INT 113
12016: PPUSH
12017: LD_INT 65
12019: PPUSH
12020: CALL_OW 86
// SayRadio ( Messenger , D5-F-4 ) ;
12024: LD_EXP 48
12028: PPUSH
12029: LD_STRING D5-F-4
12031: PPUSH
12032: CALL_OW 94
// if Difficulty = 1 then
12036: LD_OWVAR 67
12040: PUSH
12041: LD_INT 1
12043: EQUAL
12044: IFFALSE 12058
// SayRadio ( Messenger , D5-F-5 ) ;
12046: LD_EXP 48
12050: PPUSH
12051: LD_STRING D5-F-5
12053: PPUSH
12054: CALL_OW 94
// if Difficulty = 2 then
12058: LD_OWVAR 67
12062: PUSH
12063: LD_INT 2
12065: EQUAL
12066: IFFALSE 12080
// SayRadio ( Messenger , D5-F-5a ) ;
12068: LD_EXP 48
12072: PPUSH
12073: LD_STRING D5-F-5a
12075: PPUSH
12076: CALL_OW 94
// if IsOk ( Kowalski ) then
12080: LD_EXP 44
12084: PPUSH
12085: CALL_OW 302
12089: IFFALSE 12103
// Say ( Kowalski , D4Ko1 ) ;
12091: LD_EXP 44
12095: PPUSH
12096: LD_STRING D4Ko1
12098: PPUSH
12099: CALL_OW 88
// DialogueOff ;
12103: CALL_OW 7
// GameCounterShow = 1 ;
12107: LD_ADDR_EXP 33
12111: PUSH
12112: LD_INT 1
12114: ST_TO_ADDR
// SetSide ( FilterAllUnits ( [ f_side , 5 ] ) diff eng , 2 ) ;
12115: LD_INT 22
12117: PUSH
12118: LD_INT 5
12120: PUSH
12121: EMPTY
12122: LIST
12123: LIST
12124: PPUSH
12125: CALL_OW 69
12129: PUSH
12130: LD_VAR 0 2
12134: DIFF
12135: PPUSH
12136: LD_INT 2
12138: PPUSH
12139: CALL_OW 235
// ComMoveToArea ( eng , FarmerExitArea ) ;
12143: LD_VAR 0 2
12147: PPUSH
12148: LD_INT 1
12150: PPUSH
12151: CALL_OW 113
// ChangeMissionObjectives ( M2 ) ;
12155: LD_STRING M2
12157: PPUSH
12158: CALL_OW 337
// GameCounterShow = true ;
12162: LD_ADDR_EXP 33
12166: PUSH
12167: LD_INT 1
12169: ST_TO_ADDR
// Hint ( CargoPickup ) ;
12170: LD_STRING CargoPickup
12172: PPUSH
12173: CALL_OW 339
// Hint ( Transport ) ;
12177: LD_STRING Transport
12179: PPUSH
12180: CALL_OW 339
// Query ( Query1 ) ;
12184: LD_STRING Query1
12186: PPUSH
12187: CALL_OW 97
// wait ( 0 0$15 ) ;
12191: LD_INT 525
12193: PPUSH
12194: CALL_OW 67
// for i in eng do
12198: LD_ADDR_VAR 0 1
12202: PUSH
12203: LD_VAR 0 2
12207: PUSH
12208: FOR_IN
12209: IFFALSE 12222
// RemoveUnit ( i ) ;
12211: LD_VAR 0 1
12215: PPUSH
12216: CALL_OW 64
12220: GO 12208
12222: POP
12223: POP
// end ;
12224: PPOPN 4
12226: END
// every 2 2$0 trigger CaptureAmBase and americans_got_away = false do var i ;
12227: LD_EXP 1
12231: PUSH
12232: LD_EXP 24
12236: PUSH
12237: LD_INT 0
12239: EQUAL
12240: AND
12241: IFFALSE 12354
12243: GO 12245
12245: DISABLE
12246: LD_INT 0
12248: PPUSH
// begin DialogueOn ;
12249: CALL_OW 6
// SayRadio ( Messenger , D5-F-1 ) ;
12253: LD_EXP 48
12257: PPUSH
12258: LD_STRING D5-F-1
12260: PPUSH
12261: CALL_OW 94
// Say ( Heike , D5-H-1 ) ;
12265: LD_EXP 39
12269: PPUSH
12270: LD_STRING D5-H-1
12272: PPUSH
12273: CALL_OW 88
// SayRadio ( Messenger , D5-F-2 ) ;
12277: LD_EXP 48
12281: PPUSH
12282: LD_STRING D5-F-2
12284: PPUSH
12285: CALL_OW 94
// Say ( Heike , D5-H-2 ) ;
12289: LD_EXP 39
12293: PPUSH
12294: LD_STRING D5-H-2
12296: PPUSH
12297: CALL_OW 88
// SayRadio ( Messenger , D5-F-3 ) ;
12301: LD_EXP 48
12305: PPUSH
12306: LD_STRING D5-F-3
12308: PPUSH
12309: CALL_OW 94
// Say ( Heike , D5-H-3 ) ;
12313: LD_EXP 39
12317: PPUSH
12318: LD_STRING D5-H-3
12320: PPUSH
12321: CALL_OW 88
// DialogueOff ;
12325: CALL_OW 7
// ChangeMissionObjectives ( M_Convoy ) ;
12329: LD_STRING M_Convoy
12331: PPUSH
12332: CALL_OW 337
// wait ( 4 4$0 ) ;
12336: LD_INT 8400
12338: PPUSH
12339: CALL_OW 67
// PrepareAmConvoy ;
12343: CALL 4711 0 0
// wait ( 0 0$1 ) ;
12347: LD_INT 35
12349: PPUSH
12350: CALL_OW 67
// end ;
12354: PPOPN 1
12356: END
// every 0 0$1 trigger first_shipment_have_been_sent do var i , delayed ;
12357: LD_EXP 36
12361: IFFALSE 12692
12363: GO 12365
12365: DISABLE
12366: LD_INT 0
12368: PPUSH
12369: PPUSH
// begin Wait ( 0 0$13 + 0 0$4 * [ 1 / ( 1.44 * 1.44 * 1.44 ) , 1 / ( 1.44 * 1.44 ) , 1 / 1.44 , 1 , 1.44 , 1.44 * 1.44 , 1.44 * 1.44 * 1.44 ] [ game_speed ] ) ;
12370: LD_INT 455
12372: PUSH
12373: LD_INT 140
12375: PUSH
12376: LD_INT 1
12378: PUSH
12379: LD_REAL  1.44000000000000E+0000
12382: PUSH
12383: LD_REAL  1.44000000000000E+0000
12386: MUL
12387: PUSH
12388: LD_REAL  1.44000000000000E+0000
12391: MUL
12392: DIVREAL
12393: PUSH
12394: LD_INT 1
12396: PUSH
12397: LD_REAL  1.44000000000000E+0000
12400: PUSH
12401: LD_REAL  1.44000000000000E+0000
12404: MUL
12405: DIVREAL
12406: PUSH
12407: LD_INT 1
12409: PUSH
12410: LD_REAL  1.44000000000000E+0000
12413: DIVREAL
12414: PUSH
12415: LD_INT 1
12417: PUSH
12418: LD_REAL  1.44000000000000E+0000
12421: PUSH
12422: LD_REAL  1.44000000000000E+0000
12425: PUSH
12426: LD_REAL  1.44000000000000E+0000
12429: MUL
12430: PUSH
12431: LD_REAL  1.44000000000000E+0000
12434: PUSH
12435: LD_REAL  1.44000000000000E+0000
12438: MUL
12439: PUSH
12440: LD_REAL  1.44000000000000E+0000
12443: MUL
12444: PUSH
12445: EMPTY
12446: LIST
12447: LIST
12448: LIST
12449: LIST
12450: LIST
12451: LIST
12452: LIST
12453: PUSH
12454: LD_OWVAR 65
12458: ARRAY
12459: MUL
12460: PLUS
12461: PPUSH
12462: CALL_OW 67
// delayed = false ;
12466: LD_ADDR_VAR 0 2
12470: PUSH
12471: LD_INT 0
12473: ST_TO_ADDR
// while FilterAllUnits ( [ [ f_side , 1 ] , [ f_ok ] , [ f_see , 2 ] ] ) > 0 and americans_attacking and ContactTime ( [ 2 , 1 ] ) < 0 0$10 do
12474: LD_INT 22
12476: PUSH
12477: LD_INT 1
12479: PUSH
12480: EMPTY
12481: LIST
12482: LIST
12483: PUSH
12484: LD_INT 50
12486: PUSH
12487: EMPTY
12488: LIST
12489: PUSH
12490: LD_INT 101
12492: PUSH
12493: LD_INT 2
12495: PUSH
12496: EMPTY
12497: LIST
12498: LIST
12499: PUSH
12500: EMPTY
12501: LIST
12502: LIST
12503: LIST
12504: PPUSH
12505: CALL_OW 69
12509: PUSH
12510: LD_INT 0
12512: GREATER
12513: PUSH
12514: LD_EXP 20
12518: AND
12519: PUSH
12520: LD_INT 2
12522: PUSH
12523: LD_INT 1
12525: PUSH
12526: EMPTY
12527: LIST
12528: LIST
12529: PPUSH
12530: CALL_OW 462
12534: PUSH
12535: LD_INT 350
12537: LESS
12538: AND
12539: IFFALSE 12558
// begin wait ( 0 0$4 ) ;
12541: LD_INT 140
12543: PPUSH
12544: CALL_OW 67
// delayed = true ;
12548: LD_ADDR_VAR 0 2
12552: PUSH
12553: LD_INT 1
12555: ST_TO_ADDR
// end ;
12556: GO 12474
// if delayed then
12558: LD_VAR 0 2
12562: IFFALSE 12571
// wait ( 0 0$5 ) ;
12564: LD_INT 175
12566: PPUSH
12567: CALL_OW 67
// if IsOk ( Kowalski ) then
12571: LD_EXP 44
12575: PPUSH
12576: CALL_OW 302
12580: IFFALSE 12692
// begin CenterOnUnits ( Heike ) ;
12582: LD_EXP 39
12586: PPUSH
12587: CALL_OW 85
// DialogueOn ;
12591: CALL_OW 6
// if not delayed then
12595: LD_VAR 0 2
12599: NOT
12600: IFFALSE 12616
// Say ( Heike , D5H1a ) else
12602: LD_EXP 39
12606: PPUSH
12607: LD_STRING D5H1a
12609: PPUSH
12610: CALL_OW 88
12614: GO 12628
// Say ( Heike , D5H1b ) ;
12616: LD_EXP 39
12620: PPUSH
12621: LD_STRING D5H1b
12623: PPUSH
12624: CALL_OW 88
// Say ( Kowalski , D5Ko1 ) ;
12628: LD_EXP 44
12632: PPUSH
12633: LD_STRING D5Ko1
12635: PPUSH
12636: CALL_OW 88
// Say ( Heike , D5H2 ) ;
12640: LD_EXP 39
12644: PPUSH
12645: LD_STRING D5H2
12647: PPUSH
12648: CALL_OW 88
// Say ( Kowalski , D5Ko2 ) ;
12652: LD_EXP 44
12656: PPUSH
12657: LD_STRING D5Ko2
12659: PPUSH
12660: CALL_OW 88
// Say ( Heike , D5H3 ) ;
12664: LD_EXP 39
12668: PPUSH
12669: LD_STRING D5H3
12671: PPUSH
12672: CALL_OW 88
// Say ( Kowalski , D5Ko3 ) ;
12676: LD_EXP 44
12680: PPUSH
12681: LD_STRING D5Ko3
12683: PPUSH
12684: CALL_OW 88
// DialogueOff ;
12688: CALL_OW 7
// end ; end ;
12692: PPOPN 2
12694: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , 2 ] , [ f_nation , nation_arabian ] , [ f_not , [ f_constructed ] ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] ] ] ) > 0 do
12695: LD_INT 22
12697: PUSH
12698: LD_INT 2
12700: PUSH
12701: EMPTY
12702: LIST
12703: LIST
12704: PUSH
12705: LD_INT 23
12707: PUSH
12708: LD_INT 2
12710: PUSH
12711: EMPTY
12712: LIST
12713: LIST
12714: PUSH
12715: LD_INT 3
12717: PUSH
12718: LD_INT 57
12720: PUSH
12721: EMPTY
12722: LIST
12723: PUSH
12724: EMPTY
12725: LIST
12726: LIST
12727: PUSH
12728: LD_INT 2
12730: PUSH
12731: LD_INT 30
12733: PUSH
12734: LD_INT 6
12736: PUSH
12737: EMPTY
12738: LIST
12739: LIST
12740: PUSH
12741: LD_INT 30
12743: PUSH
12744: LD_INT 7
12746: PUSH
12747: EMPTY
12748: LIST
12749: LIST
12750: PUSH
12751: EMPTY
12752: LIST
12753: LIST
12754: LIST
12755: PUSH
12756: EMPTY
12757: LIST
12758: LIST
12759: LIST
12760: LIST
12761: PPUSH
12762: CALL_OW 69
12766: PUSH
12767: LD_INT 0
12769: GREATER
12770: IFFALSE 12779
12772: GO 12774
12774: DISABLE
// FirstApeDialogue ;
12775: CALL 12780 0 0
12779: END
// function FirstApeDialogue ; var i , temp ; begin
12780: LD_INT 0
12782: PPUSH
12783: PPUSH
12784: PPUSH
// while not IsOk ( Aviradze ) do
12785: LD_EXP 40
12789: PPUSH
12790: CALL_OW 302
12794: NOT
12795: IFFALSE 12819
// begin wait ( 0 0$1 ) ;
12797: LD_INT 35
12799: PPUSH
12800: CALL_OW 67
// if IsDead ( Aviradze ) then
12804: LD_EXP 40
12808: PPUSH
12809: CALL_OW 301
12813: IFFALSE 12817
// exit ;
12815: GO 13078
// end ;
12817: GO 12785
// CenterOnUnits ( Aviradze ) ;
12819: LD_EXP 40
12823: PPUSH
12824: CALL_OW 85
// DialogueOn ;
12828: CALL_OW 6
// Say ( Heike , D7H1 ) ;
12832: LD_EXP 39
12836: PPUSH
12837: LD_STRING D7H1
12839: PPUSH
12840: CALL_OW 88
// Say ( Aviradze , D7Av1 ) ;
12844: LD_EXP 40
12848: PPUSH
12849: LD_STRING D7Av1
12851: PPUSH
12852: CALL_OW 88
// Say ( Heike , D7H2 ) ;
12856: LD_EXP 39
12860: PPUSH
12861: LD_STRING D7H2
12863: PPUSH
12864: CALL_OW 88
// Say ( Aviradze , D7Av2 ) ;
12868: LD_EXP 40
12872: PPUSH
12873: LD_STRING D7Av2
12875: PPUSH
12876: CALL_OW 88
// if IsOk ( Oswald ) then
12880: LD_EXP 42
12884: PPUSH
12885: CALL_OW 302
12889: IFFALSE 12939
// begin Say ( Oswald , D7Os1 ) ;
12891: LD_EXP 42
12895: PPUSH
12896: LD_STRING D7Os1
12898: PPUSH
12899: CALL_OW 88
// Say ( Aviradze , D7Av3 ) ;
12903: LD_EXP 40
12907: PPUSH
12908: LD_STRING D7Av3
12910: PPUSH
12911: CALL_OW 88
// Say ( Oswald , D7Os2 ) ;
12915: LD_EXP 42
12919: PPUSH
12920: LD_STRING D7Os2
12922: PPUSH
12923: CALL_OW 88
// Say ( Heike , D7H3 ) ;
12927: LD_EXP 39
12931: PPUSH
12932: LD_STRING D7H3
12934: PPUSH
12935: CALL_OW 88
// end ; Say ( Heike , D7H4 ) ;
12939: LD_EXP 39
12943: PPUSH
12944: LD_STRING D7H4
12946: PPUSH
12947: CALL_OW 88
// Say ( Aviradze , D7Av4 ) ;
12951: LD_EXP 40
12955: PPUSH
12956: LD_STRING D7Av4
12958: PPUSH
12959: CALL_OW 88
// Say ( Aviradze , D7Av5 ) ;
12963: LD_EXP 40
12967: PPUSH
12968: LD_STRING D7Av5
12970: PPUSH
12971: CALL_OW 88
// Say ( Aviradze , D7Av6 ) ;
12975: LD_EXP 40
12979: PPUSH
12980: LD_STRING D7Av6
12982: PPUSH
12983: CALL_OW 88
// DialogueOff ;
12987: CALL_OW 7
// Wait ( 0 0$0.2 ) ;
12991: LD_INT 7
12993: PPUSH
12994: CALL_OW 67
// if not first_armoury and not first_workshop and not first_lab and not first_oil_mine then
12998: LD_EXP 28
13002: NOT
13003: PUSH
13004: LD_EXP 29
13008: NOT
13009: AND
13010: PUSH
13011: LD_EXP 30
13015: NOT
13016: AND
13017: PUSH
13018: LD_EXP 31
13022: NOT
13023: AND
13024: IFFALSE 13033
// ChangeMissionObjectives ( M_out_build_base ) ;
13026: LD_STRING M_out_build_base
13028: PPUSH
13029: CALL_OW 337
// ChangeMissionObjectives ( M_start_plant_gather ) ;
13033: LD_STRING M_start_plant_gather
13035: PPUSH
13036: CALL_OW 337
// first_lab = false ;
13040: LD_ADDR_EXP 30
13044: PUSH
13045: LD_INT 0
13047: ST_TO_ADDR
// SetAreaMapShow ( pink_bedflower_area , 3 ) ;
13048: LD_INT 14
13050: PPUSH
13051: LD_INT 3
13053: PPUSH
13054: CALL_OW 424
// SetAreaMapShow ( greenhat_area , 5 ) ;
13058: LD_INT 13
13060: PPUSH
13061: LD_INT 5
13063: PPUSH
13064: CALL_OW 424
// SetAreaMapShow ( royal_aphrodite_area , 7 ) ;
13068: LD_INT 15
13070: PPUSH
13071: LD_INT 7
13073: PPUSH
13074: CALL_OW 424
// end ;
13078: LD_VAR 0 1
13082: RET
// export break_follow ; every 0 0$0.7 trigger not first_lab and IsLive ( Aviradze ) do var near_ape , first_time , lab_list , lab , temp_unit , temp_list ;
13083: LD_EXP 30
13087: NOT
13088: PUSH
13089: LD_EXP 40
13093: PPUSH
13094: CALL_OW 300
13098: AND
13099: IFFALSE 14082
13101: GO 13103
13103: DISABLE
13104: LD_INT 0
13106: PPUSH
13107: PPUSH
13108: PPUSH
13109: PPUSH
13110: PPUSH
13111: PPUSH
// begin if not HasTask ( Aviradze ) then
13112: LD_EXP 40
13116: PPUSH
13117: CALL_OW 314
13121: NOT
13122: IFFALSE 13233
// if IsInArea ( Aviradze , pink_bedflower_area ) and aviradze_plant_gathering [ 1 ] > 0 then
13124: LD_EXP 40
13128: PPUSH
13129: LD_INT 14
13131: PPUSH
13132: CALL_OW 308
13136: PUSH
13137: LD_EXP 25
13141: PUSH
13142: LD_INT 1
13144: ARRAY
13145: PUSH
13146: LD_INT 0
13148: GREATER
13149: AND
13150: IFFALSE 13161
// AviradzePlantGatheringFunc ( 1 ) else
13152: LD_INT 1
13154: PPUSH
13155: CALL 18145 0 1
13159: GO 13233
// if IsInArea ( Aviradze , greenhat_area ) and aviradze_plant_gathering [ 2 ] > 0 then
13161: LD_EXP 40
13165: PPUSH
13166: LD_INT 13
13168: PPUSH
13169: CALL_OW 308
13173: PUSH
13174: LD_EXP 25
13178: PUSH
13179: LD_INT 2
13181: ARRAY
13182: PUSH
13183: LD_INT 0
13185: GREATER
13186: AND
13187: IFFALSE 13198
// AviradzePlantGatheringFunc ( 2 ) else
13189: LD_INT 2
13191: PPUSH
13192: CALL 18145 0 1
13196: GO 13233
// if IsInArea ( Aviradze , royal_aphrodite_area ) and aviradze_plant_gathering [ 3 ] > 0 then
13198: LD_EXP 40
13202: PPUSH
13203: LD_INT 15
13205: PPUSH
13206: CALL_OW 308
13210: PUSH
13211: LD_EXP 25
13215: PUSH
13216: LD_INT 3
13218: ARRAY
13219: PUSH
13220: LD_INT 0
13222: GREATER
13223: AND
13224: IFFALSE 13233
// AviradzePlantGatheringFunc ( 3 ) ;
13226: LD_INT 3
13228: PPUSH
13229: CALL 18145 0 1
// if ( aviradze_plant_gathering diff 0 ) = 0 then
13233: LD_EXP 25
13237: PUSH
13238: LD_INT 0
13240: DIFF
13241: PUSH
13242: LD_INT 0
13244: EQUAL
13245: IFFALSE 14081
// begin wait ( 0 0$0.2 ) ;
13247: LD_INT 7
13249: PPUSH
13250: CALL_OW 67
// ChangeMissionObjectives ( M_find_ape ) ;
13254: LD_STRING M_find_ape
13256: PPUSH
13257: CALL_OW 337
// first_time = true ;
13261: LD_ADDR_VAR 0 2
13265: PUSH
13266: LD_INT 1
13268: ST_TO_ADDR
// repeat repeat if UnitFilter ( apes , [ [ f_class , class_apeman ] , [ f_alive ] ] ) = 0 or IsDead ( Aviradze ) then
13269: LD_EXP 59
13273: PPUSH
13274: LD_INT 25
13276: PUSH
13277: LD_INT 12
13279: PUSH
13280: EMPTY
13281: LIST
13282: LIST
13283: PUSH
13284: LD_INT 51
13286: PUSH
13287: EMPTY
13288: LIST
13289: PUSH
13290: EMPTY
13291: LIST
13292: LIST
13293: PPUSH
13294: CALL_OW 72
13298: PUSH
13299: LD_INT 0
13301: EQUAL
13302: PUSH
13303: LD_EXP 40
13307: PPUSH
13308: CALL_OW 301
13312: OR
13313: IFFALSE 13317
// exit ;
13315: GO 14082
// wait ( 0 0$1 ) ;
13317: LD_INT 35
13319: PPUSH
13320: CALL_OW 67
// near_ape = NearestUnitToUnit ( UnitFilter ( apes , [ f_ok ] ) , Aviradze ) ;
13324: LD_ADDR_VAR 0 1
13328: PUSH
13329: LD_EXP 59
13333: PPUSH
13334: LD_INT 50
13336: PUSH
13337: EMPTY
13338: LIST
13339: PPUSH
13340: CALL_OW 72
13344: PPUSH
13345: LD_EXP 40
13349: PPUSH
13350: CALL_OW 74
13354: ST_TO_ADDR
// until GetDistUnits ( Aviradze , near_ape ) <= 5 and See ( 2 , near_ape ) ;
13355: LD_EXP 40
13359: PPUSH
13360: LD_VAR 0 1
13364: PPUSH
13365: CALL_OW 296
13369: PUSH
13370: LD_INT 5
13372: LESSEQUAL
13373: PUSH
13374: LD_INT 2
13376: PPUSH
13377: LD_VAR 0 1
13381: PPUSH
13382: CALL_OW 292
13386: AND
13387: IFFALSE 13269
// ComTurnUnit ( Aviradze , near_ape ) ;
13389: LD_EXP 40
13393: PPUSH
13394: LD_VAR 0 1
13398: PPUSH
13399: CALL_OW 119
// Wait ( 0 0$0.2 ) ;
13403: LD_INT 7
13405: PPUSH
13406: CALL_OW 67
// repeat break_follow = false ;
13410: LD_ADDR_EXP 52
13414: PUSH
13415: LD_INT 0
13417: ST_TO_ADDR
// RaiseSailEvent ( near_ape ) ;
13418: LD_VAR 0 1
13422: PPUSH
13423: CALL_OW 427
// if first_time then
13427: LD_VAR 0 2
13431: IFFALSE 13453
// begin Say ( Aviradze , D9Av2 ) ;
13433: LD_EXP 40
13437: PPUSH
13438: LD_STRING D9Av2
13440: PPUSH
13441: CALL_OW 88
// first_time = false ;
13445: LD_ADDR_VAR 0 2
13449: PUSH
13450: LD_INT 0
13452: ST_TO_ADDR
// end ; lab = 0 ;
13453: LD_ADDR_VAR 0 4
13457: PUSH
13458: LD_INT 0
13460: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
13461: LD_INT 35
13463: PPUSH
13464: CALL_OW 67
// temp_unit = IsInUnit ( Aviradze ) ;
13468: LD_ADDR_VAR 0 5
13472: PUSH
13473: LD_EXP 40
13477: PPUSH
13478: CALL_OW 310
13482: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_lab , b_lab_half ] then
13483: LD_VAR 0 5
13487: PPUSH
13488: CALL_OW 266
13492: PUSH
13493: LD_INT 6
13495: PUSH
13496: LD_INT 7
13498: PUSH
13499: EMPTY
13500: LIST
13501: LIST
13502: IN
13503: IFFALSE 13517
// begin lab = temp_unit ;
13505: LD_ADDR_VAR 0 4
13509: PUSH
13510: LD_VAR 0 5
13514: ST_TO_ADDR
// break ;
13515: GO 13582
// end ; if GetDistUnits ( Aviradze , near_ape ) > 7 then
13517: LD_EXP 40
13521: PPUSH
13522: LD_VAR 0 1
13526: PPUSH
13527: CALL_OW 296
13531: PUSH
13532: LD_INT 7
13534: GREATER
13535: IFFALSE 13548
// begin lab = - 1 ;
13537: LD_ADDR_VAR 0 4
13541: PUSH
13542: LD_INT 1
13544: NEG
13545: ST_TO_ADDR
// break ;
13546: GO 13582
// end ; until IsDead ( near_ape ) or IsDead ( Aviradze ) or temp_unit <> lab ;
13548: LD_VAR 0 1
13552: PPUSH
13553: CALL_OW 301
13557: PUSH
13558: LD_EXP 40
13562: PPUSH
13563: CALL_OW 301
13567: OR
13568: PUSH
13569: LD_VAR 0 5
13573: PUSH
13574: LD_VAR 0 4
13578: NONEQUAL
13579: OR
13580: IFFALSE 13461
// break_follow = true ;
13582: LD_ADDR_EXP 52
13586: PUSH
13587: LD_INT 1
13589: ST_TO_ADDR
// if IsDead ( near_ape ) or IsDead ( Aviradze ) or temp_unit <> lab then
13590: LD_VAR 0 1
13594: PPUSH
13595: CALL_OW 301
13599: PUSH
13600: LD_EXP 40
13604: PPUSH
13605: CALL_OW 301
13609: OR
13610: PUSH
13611: LD_VAR 0 5
13615: PUSH
13616: LD_VAR 0 4
13620: NONEQUAL
13621: OR
13622: IFFALSE 13626
// break ;
13624: GO 13847
// temp_list = [ ShiftX ( GetX ( lab ) , GetDir ( lab ) , 2 ) , ShiftY ( GetY ( lab ) , GetDir ( lab ) , 2 ) ] ;
13626: LD_ADDR_VAR 0 6
13630: PUSH
13631: LD_VAR 0 4
13635: PPUSH
13636: CALL_OW 250
13640: PPUSH
13641: LD_VAR 0 4
13645: PPUSH
13646: CALL_OW 254
13650: PPUSH
13651: LD_INT 2
13653: PPUSH
13654: CALL_OW 272
13658: PUSH
13659: LD_VAR 0 4
13663: PPUSH
13664: CALL_OW 251
13668: PPUSH
13669: LD_VAR 0 4
13673: PPUSH
13674: CALL_OW 254
13678: PPUSH
13679: LD_INT 2
13681: PPUSH
13682: CALL_OW 273
13686: PUSH
13687: EMPTY
13688: LIST
13689: LIST
13690: ST_TO_ADDR
// repeat ComMoveXY ( near_ape , temp_list [ 1 ] , temp_list [ 2 ] ) ;
13691: LD_VAR 0 1
13695: PPUSH
13696: LD_VAR 0 6
13700: PUSH
13701: LD_INT 1
13703: ARRAY
13704: PPUSH
13705: LD_VAR 0 6
13709: PUSH
13710: LD_INT 2
13712: ARRAY
13713: PPUSH
13714: CALL_OW 111
// AddComStand ( near_ape ) ;
13718: LD_VAR 0 1
13722: PPUSH
13723: CALL_OW 225
// wait ( 0 0$0.7 ) ;
13727: LD_INT 24
13729: PPUSH
13730: CALL_OW 67
// until ( GetDistUnits ( near_ape , lab ) <= 3 and UnitsInside ( lab ) < 6 ) or IsInUnit ( Aviradze ) <> lab or IsDead ( near_ape ) or IsDead ( Aviradze ) ;
13734: LD_VAR 0 1
13738: PPUSH
13739: LD_VAR 0 4
13743: PPUSH
13744: CALL_OW 296
13748: PUSH
13749: LD_INT 3
13751: LESSEQUAL
13752: PUSH
13753: LD_VAR 0 4
13757: PPUSH
13758: CALL_OW 313
13762: PUSH
13763: LD_INT 6
13765: LESS
13766: AND
13767: PUSH
13768: LD_EXP 40
13772: PPUSH
13773: CALL_OW 310
13777: PUSH
13778: LD_VAR 0 4
13782: NONEQUAL
13783: OR
13784: PUSH
13785: LD_VAR 0 1
13789: PPUSH
13790: CALL_OW 301
13794: OR
13795: PUSH
13796: LD_EXP 40
13800: PPUSH
13801: CALL_OW 301
13805: OR
13806: IFFALSE 13691
// until IsInUnit ( Aviradze ) = lab or IsDead ( near_ape ) or IsDead ( Aviradze ) ;
13808: LD_EXP 40
13812: PPUSH
13813: CALL_OW 310
13817: PUSH
13818: LD_VAR 0 4
13822: EQUAL
13823: PUSH
13824: LD_VAR 0 1
13828: PPUSH
13829: CALL_OW 301
13833: OR
13834: PUSH
13835: LD_EXP 40
13839: PPUSH
13840: CALL_OW 301
13844: OR
13845: IFFALSE 13410
// until not IsDead ( near_ape ) and not IsDead ( Aviradze ) and lab > 0 ;
13847: LD_VAR 0 1
13851: PPUSH
13852: CALL_OW 301
13856: NOT
13857: PUSH
13858: LD_EXP 40
13862: PPUSH
13863: CALL_OW 301
13867: NOT
13868: AND
13869: PUSH
13870: LD_VAR 0 4
13874: PUSH
13875: LD_INT 0
13877: GREATER
13878: AND
13879: IFFALSE 13269
// RemoveUnit ( near_ape ) ;
13881: LD_VAR 0 1
13885: PPUSH
13886: CALL_OW 64
// SetSide ( near_ape , 2 ) ;
13890: LD_VAR 0 1
13894: PPUSH
13895: LD_INT 2
13897: PPUSH
13898: CALL_OW 235
// PlaceHumanInUnit ( near_ape , lab ) ;
13902: LD_VAR 0 1
13906: PPUSH
13907: LD_VAR 0 4
13911: PPUSH
13912: CALL_OW 52
// CenterOnUnits ( lab ) ;
13916: LD_VAR 0 4
13920: PPUSH
13921: CALL_OW 85
// DialogueOn ;
13925: CALL_OW 6
// Say ( Aviradze , D9Av3 ) ;
13929: LD_EXP 40
13933: PPUSH
13934: LD_STRING D9Av3
13936: PPUSH
13937: CALL_OW 88
// if IsOk ( Sonya ) then
13941: LD_EXP 43
13945: PPUSH
13946: CALL_OW 302
13950: IFFALSE 13966
// Say ( Sonya , D9So1 ) else
13952: LD_EXP 43
13956: PPUSH
13957: LD_STRING D9So1
13959: PPUSH
13960: CALL_OW 88
13964: GO 13978
// Say ( Heike , D9H1 ) ;
13966: LD_EXP 39
13970: PPUSH
13971: LD_STRING D9H1
13973: PPUSH
13974: CALL_OW 88
// if GetSex ( near_ape ) = sex_male then
13978: LD_VAR 0 1
13982: PPUSH
13983: CALL_OW 258
13987: PUSH
13988: LD_INT 1
13990: EQUAL
13991: IFFALSE 14007
// Say ( Aviradze , D9Av4a ) else
13993: LD_EXP 40
13997: PPUSH
13998: LD_STRING D9Av4a
14000: PPUSH
14001: CALL_OW 88
14005: GO 14019
// Say ( Aviradze , D9Av4b ) ;
14007: LD_EXP 40
14011: PPUSH
14012: LD_STRING D9Av4b
14014: PPUSH
14015: CALL_OW 88
// DialogueOff ;
14019: CALL_OW 7
// wait ( 0 0$0.2 ) ;
14023: LD_INT 7
14025: PPUSH
14026: CALL_OW 67
// ChangeMissionObjectives ( M_train_apes ) ;
14030: LD_STRING M_train_apes
14032: PPUSH
14033: CALL_OW 337
// SetTech ( tech_apelang , 2 , state_enabled ) ;
14037: LD_INT 1
14039: PPUSH
14040: LD_INT 2
14042: PPUSH
14043: LD_INT 1
14045: PPUSH
14046: CALL_OW 322
// SetTech ( tech_apeagres , 2 , state_enabled ) ;
14050: LD_INT 11
14052: PPUSH
14053: LD_INT 2
14055: PPUSH
14056: LD_INT 1
14058: PPUSH
14059: CALL_OW 322
// tamed_apemen = tamed_apemen ^ near_ape ;
14063: LD_ADDR_EXP 26
14067: PUSH
14068: LD_EXP 26
14072: PUSH
14073: LD_VAR 0 1
14077: ADD
14078: ST_TO_ADDR
// end else
14079: GO 14082
// enable ;
14081: ENABLE
// end ;
14082: PPOPN 6
14084: END
// every 0 0$1 trigger ConvoyAmericans_List and AmConvoySeePlayer = false do var i , vehs , cargo ;
14085: LD_EXP 4
14089: PUSH
14090: LD_EXP 5
14094: PUSH
14095: LD_INT 0
14097: EQUAL
14098: AND
14099: IFFALSE 14343
14101: GO 14103
14103: DISABLE
14104: LD_INT 0
14106: PPUSH
14107: PPUSH
14108: PPUSH
// begin enable ;
14109: ENABLE
// vehs = UnitFilter ( ConvoyAmericans_List , [ [ f_side , 1 ] , [ f_ok ] , [ f_or , [ f_weapon , us_machine_gun ] , [ f_weapon , us_gatling_gun ] , [ f_weapon , us_light_gun ] ] ] ) ;
14110: LD_ADDR_VAR 0 2
14114: PUSH
14115: LD_EXP 4
14119: PPUSH
14120: LD_INT 22
14122: PUSH
14123: LD_INT 1
14125: PUSH
14126: EMPTY
14127: LIST
14128: LIST
14129: PUSH
14130: LD_INT 50
14132: PUSH
14133: EMPTY
14134: LIST
14135: PUSH
14136: LD_INT 2
14138: PUSH
14139: LD_INT 34
14141: PUSH
14142: LD_INT 2
14144: PUSH
14145: EMPTY
14146: LIST
14147: LIST
14148: PUSH
14149: LD_INT 34
14151: PUSH
14152: LD_INT 4
14154: PUSH
14155: EMPTY
14156: LIST
14157: LIST
14158: PUSH
14159: LD_INT 34
14161: PUSH
14162: LD_INT 3
14164: PUSH
14165: EMPTY
14166: LIST
14167: LIST
14168: PUSH
14169: EMPTY
14170: LIST
14171: LIST
14172: LIST
14173: LIST
14174: PUSH
14175: EMPTY
14176: LIST
14177: LIST
14178: LIST
14179: PPUSH
14180: CALL_OW 72
14184: ST_TO_ADDR
// cargo = UnitFilter ( ConvoyAmericans_List , [ [ f_side , 1 ] , [ f_ok ] , [ f_weapon , us_cargo_bay ] ] ) ;
14185: LD_ADDR_VAR 0 3
14189: PUSH
14190: LD_EXP 4
14194: PPUSH
14195: LD_INT 22
14197: PUSH
14198: LD_INT 1
14200: PUSH
14201: EMPTY
14202: LIST
14203: LIST
14204: PUSH
14205: LD_INT 50
14207: PUSH
14208: EMPTY
14209: LIST
14210: PUSH
14211: LD_INT 34
14213: PUSH
14214: LD_INT 12
14216: PUSH
14217: EMPTY
14218: LIST
14219: LIST
14220: PUSH
14221: EMPTY
14222: LIST
14223: LIST
14224: LIST
14225: PPUSH
14226: CALL_OW 72
14230: ST_TO_ADDR
// AddComAgressiveMove ( vehs , 94 , 21 ) ;
14231: LD_VAR 0 2
14235: PPUSH
14236: LD_INT 94
14238: PPUSH
14239: LD_INT 21
14241: PPUSH
14242: CALL_OW 174
// AddComAgressiveMove ( vehs , 89 , 39 ) ;
14246: LD_VAR 0 2
14250: PPUSH
14251: LD_INT 89
14253: PPUSH
14254: LD_INT 39
14256: PPUSH
14257: CALL_OW 174
// AddComAgressiveMove ( vehs , 85 , 69 ) ;
14261: LD_VAR 0 2
14265: PPUSH
14266: LD_INT 85
14268: PPUSH
14269: LD_INT 69
14271: PPUSH
14272: CALL_OW 174
// AddComAgressiveMove ( vehs , 49 , 49 ) ;
14276: LD_VAR 0 2
14280: PPUSH
14281: LD_INT 49
14283: PPUSH
14284: LD_INT 49
14286: PPUSH
14287: CALL_OW 174
// AddComAgressiveMove ( vehs , 38 , 30 ) ;
14291: LD_VAR 0 2
14295: PPUSH
14296: LD_INT 38
14298: PPUSH
14299: LD_INT 30
14301: PPUSH
14302: CALL_OW 174
// ComMoveXY ( cargo , GetX ( vehs [ 1 ] ) , GetY ( vehs [ 1 ] ) ) ;
14306: LD_VAR 0 3
14310: PPUSH
14311: LD_VAR 0 2
14315: PUSH
14316: LD_INT 1
14318: ARRAY
14319: PPUSH
14320: CALL_OW 250
14324: PPUSH
14325: LD_VAR 0 2
14329: PUSH
14330: LD_INT 1
14332: ARRAY
14333: PPUSH
14334: CALL_OW 251
14338: PPUSH
14339: CALL_OW 111
// end ;
14343: PPOPN 3
14345: END
// every 0 0$1 trigger AmConvoySeePlayer = false do var i , j , tmp ;
14346: LD_EXP 5
14350: PUSH
14351: LD_INT 0
14353: EQUAL
14354: IFFALSE 14573
14356: GO 14358
14358: DISABLE
14359: LD_INT 0
14361: PPUSH
14362: PPUSH
14363: PPUSH
// begin enable ;
14364: ENABLE
// for i in ConvoyAmericans_List do
14365: LD_ADDR_VAR 0 1
14369: PUSH
14370: LD_EXP 4
14374: PUSH
14375: FOR_IN
14376: IFFALSE 14571
// for j in FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) do
14378: LD_ADDR_VAR 0 2
14382: PUSH
14383: LD_INT 22
14385: PUSH
14386: LD_INT 2
14388: PUSH
14389: EMPTY
14390: LIST
14391: LIST
14392: PUSH
14393: LD_INT 21
14395: PUSH
14396: LD_INT 1
14398: PUSH
14399: EMPTY
14400: LIST
14401: LIST
14402: PUSH
14403: EMPTY
14404: LIST
14405: LIST
14406: PPUSH
14407: CALL_OW 69
14411: PUSH
14412: FOR_IN
14413: IFFALSE 14567
// if See ( 2 , i ) and GetDistUnits ( i , j ) <= 11 then
14415: LD_INT 2
14417: PPUSH
14418: LD_VAR 0 1
14422: PPUSH
14423: CALL_OW 292
14427: PUSH
14428: LD_VAR 0 1
14432: PPUSH
14433: LD_VAR 0 2
14437: PPUSH
14438: CALL_OW 296
14442: PUSH
14443: LD_INT 11
14445: LESSEQUAL
14446: AND
14447: IFFALSE 14565
// begin AmConvoySeePlayer = true ;
14449: LD_ADDR_EXP 5
14453: PUSH
14454: LD_INT 1
14456: ST_TO_ADDR
// tmp = FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] , [ f_ok ] ] ) ;
14457: LD_ADDR_VAR 0 3
14461: PUSH
14462: LD_INT 22
14464: PUSH
14465: LD_INT 1
14467: PUSH
14468: EMPTY
14469: LIST
14470: LIST
14471: PUSH
14472: LD_INT 21
14474: PUSH
14475: LD_INT 1
14477: PUSH
14478: EMPTY
14479: LIST
14480: LIST
14481: PUSH
14482: LD_INT 50
14484: PUSH
14485: EMPTY
14486: LIST
14487: PUSH
14488: EMPTY
14489: LIST
14490: LIST
14491: LIST
14492: PPUSH
14493: CALL_OW 69
14497: ST_TO_ADDR
// DialogueOn ;
14498: CALL_OW 6
// if GetSex ( tmp [ 1 ] ) = 1 then
14502: LD_VAR 0 3
14506: PUSH
14507: LD_INT 1
14509: ARRAY
14510: PPUSH
14511: CALL_OW 258
14515: PUSH
14516: LD_INT 1
14518: EQUAL
14519: IFFALSE 14539
// Say ( tmp [ 1 ] , D5-AmSol-1 ) else
14521: LD_VAR 0 3
14525: PUSH
14526: LD_INT 1
14528: ARRAY
14529: PPUSH
14530: LD_STRING D5-AmSol-1
14532: PPUSH
14533: CALL_OW 88
14537: GO 14555
// Say ( tmp [ 1 ] , D5-FAmSol-1 ) ;
14539: LD_VAR 0 3
14543: PUSH
14544: LD_INT 1
14546: ARRAY
14547: PPUSH
14548: LD_STRING D5-FAmSol-1
14550: PPUSH
14551: CALL_OW 88
// DialogueOff ;
14555: CALL_OW 7
// exit ;
14559: POP
14560: POP
14561: POP
14562: POP
14563: GO 14573
// end ;
14565: GO 14412
14567: POP
14568: POP
14569: GO 14375
14571: POP
14572: POP
// end ;
14573: PPOPN 3
14575: END
// every 0 0$10 trigger AmConvoySeePlayer = false do var i , tmp ;
14576: LD_EXP 5
14580: PUSH
14581: LD_INT 0
14583: EQUAL
14584: IFFALSE 14747
14586: GO 14588
14588: DISABLE
14589: LD_INT 0
14591: PPUSH
14592: PPUSH
// begin enable ;
14593: ENABLE
// for i in ConvoyAmericans_List do
14594: LD_ADDR_VAR 0 1
14598: PUSH
14599: LD_EXP 4
14603: PUSH
14604: FOR_IN
14605: IFFALSE 14745
// if IsInArea ( i , AmericanBaseArea ) then
14607: LD_VAR 0 1
14611: PPUSH
14612: LD_INT 2
14614: PPUSH
14615: CALL_OW 308
14619: IFFALSE 14743
// begin AmConvoySeePlayer = true ;
14621: LD_ADDR_EXP 5
14625: PUSH
14626: LD_INT 1
14628: ST_TO_ADDR
// AmConvoyEscapeFromMap = true ;
14629: LD_ADDR_EXP 6
14633: PUSH
14634: LD_INT 1
14636: ST_TO_ADDR
// tmp = FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_human ] , [ f_ok ] ] ) ;
14637: LD_ADDR_VAR 0 2
14641: PUSH
14642: LD_INT 22
14644: PUSH
14645: LD_INT 1
14647: PUSH
14648: EMPTY
14649: LIST
14650: LIST
14651: PUSH
14652: LD_INT 21
14654: PUSH
14655: LD_INT 1
14657: PUSH
14658: EMPTY
14659: LIST
14660: LIST
14661: PUSH
14662: LD_INT 50
14664: PUSH
14665: EMPTY
14666: LIST
14667: PUSH
14668: EMPTY
14669: LIST
14670: LIST
14671: LIST
14672: PPUSH
14673: CALL_OW 69
14677: ST_TO_ADDR
// DialogueOn ;
14678: CALL_OW 6
// if GetSex ( tmp [ 1 ] ) = 1 then
14682: LD_VAR 0 2
14686: PUSH
14687: LD_INT 1
14689: ARRAY
14690: PPUSH
14691: CALL_OW 258
14695: PUSH
14696: LD_INT 1
14698: EQUAL
14699: IFFALSE 14719
// Say ( tmp [ 1 ] , D5-AmSol-1a ) else
14701: LD_VAR 0 2
14705: PUSH
14706: LD_INT 1
14708: ARRAY
14709: PPUSH
14710: LD_STRING D5-AmSol-1a
14712: PPUSH
14713: CALL_OW 88
14717: GO 14735
// Say ( tmp [ 1 ] , D5-FAmSol-1a ) ;
14719: LD_VAR 0 2
14723: PUSH
14724: LD_INT 1
14726: ARRAY
14727: PPUSH
14728: LD_STRING D5-FAmSol-1a
14730: PPUSH
14731: CALL_OW 88
// DialogueOff ;
14735: CALL_OW 7
// exit ;
14739: POP
14740: POP
14741: GO 14747
// end ;
14743: GO 14604
14745: POP
14746: POP
// end ;
14747: PPOPN 2
14749: END
// every 0 0$1 trigger AmConvoySeePlayer and AmConvoyEscapeFromMap = false do var i , tmp ;
14750: LD_EXP 5
14754: PUSH
14755: LD_EXP 6
14759: PUSH
14760: LD_INT 0
14762: EQUAL
14763: AND
14764: IFFALSE 15155
14766: GO 14768
14768: DISABLE
14769: LD_INT 0
14771: PPUSH
14772: PPUSH
// begin enable ;
14773: ENABLE
// if Difficulty = 1 then
14774: LD_OWVAR 67
14778: PUSH
14779: LD_INT 1
14781: EQUAL
14782: IFFALSE 14941
// for i in ConvoyAmericans_List do
14784: LD_ADDR_VAR 0 1
14788: PUSH
14789: LD_EXP 4
14793: PUSH
14794: FOR_IN
14795: IFFALSE 14939
// if GetWeapon ( i ) = us_cargo_bay and GetLives ( i ) <= 700 then
14797: LD_VAR 0 1
14801: PPUSH
14802: CALL_OW 264
14806: PUSH
14807: LD_INT 12
14809: EQUAL
14810: PUSH
14811: LD_VAR 0 1
14815: PPUSH
14816: CALL_OW 256
14820: PUSH
14821: LD_INT 700
14823: LESSEQUAL
14824: AND
14825: IFFALSE 14937
// begin tmp = i ;
14827: LD_ADDR_VAR 0 2
14831: PUSH
14832: LD_VAR 0 1
14836: ST_TO_ADDR
// AmConvoyEscapeFromMap = true ;
14837: LD_ADDR_EXP 6
14841: PUSH
14842: LD_INT 1
14844: ST_TO_ADDR
// DialogueOn ;
14845: CALL_OW 6
// if GetSex ( UnitsInside ( tmp ) [ 1 ] ) = 1 then
14849: LD_VAR 0 2
14853: PPUSH
14854: CALL_OW 313
14858: PUSH
14859: LD_INT 1
14861: ARRAY
14862: PPUSH
14863: CALL_OW 258
14867: PUSH
14868: LD_INT 1
14870: EQUAL
14871: IFFALSE 14896
// Say ( UnitsInside ( tmp ) [ 1 ] , D5-AmSol-2 ) else
14873: LD_VAR 0 2
14877: PPUSH
14878: CALL_OW 313
14882: PUSH
14883: LD_INT 1
14885: ARRAY
14886: PPUSH
14887: LD_STRING D5-AmSol-2
14889: PPUSH
14890: CALL_OW 88
14894: GO 14917
// Say ( UnitsInside ( tmp ) [ 1 ] , D5-FAmSol-2 ) ;
14896: LD_VAR 0 2
14900: PPUSH
14901: CALL_OW 313
14905: PUSH
14906: LD_INT 1
14908: ARRAY
14909: PPUSH
14910: LD_STRING D5-FAmSol-2
14912: PPUSH
14913: CALL_OW 88
// Say ( Heike , D5-H-4 ) ;
14917: LD_EXP 39
14921: PPUSH
14922: LD_STRING D5-H-4
14924: PPUSH
14925: CALL_OW 88
// DialogueOff ;
14929: CALL_OW 7
// exit ;
14933: POP
14934: POP
14935: GO 15155
// end ;
14937: GO 14794
14939: POP
14940: POP
// if UnitFilter ( ConvoyAmericans_List , [ [ f_type , unit_vehicle ] , [ f_not , [ f_lives , 650 ] ] ] ) >= 2 then
14941: LD_EXP 4
14945: PPUSH
14946: LD_INT 21
14948: PUSH
14949: LD_INT 2
14951: PUSH
14952: EMPTY
14953: LIST
14954: LIST
14955: PUSH
14956: LD_INT 3
14958: PUSH
14959: LD_INT 24
14961: PUSH
14962: LD_INT 650
14964: PUSH
14965: EMPTY
14966: LIST
14967: LIST
14968: PUSH
14969: EMPTY
14970: LIST
14971: LIST
14972: PUSH
14973: EMPTY
14974: LIST
14975: LIST
14976: PPUSH
14977: CALL_OW 72
14981: PUSH
14982: LD_INT 2
14984: GREATEREQUAL
14985: IFFALSE 15155
// begin AmConvoyEscapeFromMap = true ;
14987: LD_ADDR_EXP 6
14991: PUSH
14992: LD_INT 1
14994: ST_TO_ADDR
// tmp = UnitFilter ( ConvoyAmericans_List , [ [ f_type , unit_human ] , [ f_lives , 251 ] ] ) ;
14995: LD_ADDR_VAR 0 2
14999: PUSH
15000: LD_EXP 4
15004: PPUSH
15005: LD_INT 21
15007: PUSH
15008: LD_INT 1
15010: PUSH
15011: EMPTY
15012: LIST
15013: LIST
15014: PUSH
15015: LD_INT 24
15017: PUSH
15018: LD_INT 251
15020: PUSH
15021: EMPTY
15022: LIST
15023: LIST
15024: PUSH
15025: EMPTY
15026: LIST
15027: LIST
15028: PPUSH
15029: CALL_OW 72
15033: ST_TO_ADDR
// if tmp > 0 then
15034: LD_VAR 0 2
15038: PUSH
15039: LD_INT 0
15041: GREATER
15042: IFFALSE 15068
// tmp = tmp [ Rand ( 1 , tmp ) ] ;
15044: LD_ADDR_VAR 0 2
15048: PUSH
15049: LD_VAR 0 2
15053: PUSH
15054: LD_INT 1
15056: PPUSH
15057: LD_VAR 0 2
15061: PPUSH
15062: CALL_OW 12
15066: ARRAY
15067: ST_TO_ADDR
// DialogueOn ;
15068: CALL_OW 6
// if GetSex ( tmp ) = 1 then
15072: LD_VAR 0 2
15076: PPUSH
15077: CALL_OW 258
15081: PUSH
15082: LD_INT 1
15084: EQUAL
15085: IFFALSE 15101
// Say ( tmp , D5-AmSol-3 ) else
15087: LD_VAR 0 2
15091: PPUSH
15092: LD_STRING D5-AmSol-3
15094: PPUSH
15095: CALL_OW 88
15099: GO 15113
// Say ( tmp , D5-FAmSol-3 ) ;
15101: LD_VAR 0 2
15105: PPUSH
15106: LD_STRING D5-FAmSol-3
15108: PPUSH
15109: CALL_OW 88
// if Difficulty = 1 then
15113: LD_OWVAR 67
15117: PUSH
15118: LD_INT 1
15120: EQUAL
15121: IFFALSE 15137
// Say ( Heike , D5-H-4 ) else
15123: LD_EXP 39
15127: PPUSH
15128: LD_STRING D5-H-4
15130: PPUSH
15131: CALL_OW 88
15135: GO 15149
// Say ( Heike , D5-H-4a ) ;
15137: LD_EXP 39
15141: PPUSH
15142: LD_STRING D5-H-4a
15144: PPUSH
15145: CALL_OW 88
// DialogueOff ;
15149: CALL_OW 7
// exit ;
15153: GO 15155
// end ; end ;
15155: PPOPN 2
15157: END
// every 0 0$1 trigger AmConvoyEscapeFromMap do var i ;
15158: LD_EXP 6
15162: IFFALSE 15246
15164: GO 15166
15166: DISABLE
15167: LD_INT 0
15169: PPUSH
// begin enable ;
15170: ENABLE
// for i in ConvoyAmericans_List do
15171: LD_ADDR_VAR 0 1
15175: PUSH
15176: LD_EXP 4
15180: PUSH
15181: FOR_IN
15182: IFFALSE 15244
// begin ComMoveToArea ( i , AmConvoyEscapeArea ) ;
15184: LD_VAR 0 1
15188: PPUSH
15189: LD_INT 16
15191: PPUSH
15192: CALL_OW 113
// if IsInArea ( i , AmConvoyEscapeArea ) and GetSide ( i ) = 1 then
15196: LD_VAR 0 1
15200: PPUSH
15201: LD_INT 16
15203: PPUSH
15204: CALL_OW 308
15208: PUSH
15209: LD_VAR 0 1
15213: PPUSH
15214: CALL_OW 255
15218: PUSH
15219: LD_INT 1
15221: EQUAL
15222: AND
15223: IFFALSE 15242
// begin RemoveUnit ( i ) ;
15225: LD_VAR 0 1
15229: PPUSH
15230: CALL_OW 64
// AmConvoyEscapedFromPlayer = true ;
15234: LD_ADDR_EXP 7
15238: PUSH
15239: LD_INT 1
15241: ST_TO_ADDR
// end ; end ;
15242: GO 15181
15244: POP
15245: POP
// end ;
15246: PPOPN 1
15248: END
// every 0 0$1 trigger americans_have_evacuated do
15249: LD_EXP 23
15253: IFFALSE 15375
15255: GO 15257
15257: DISABLE
// begin if americans_got_away then
15258: LD_EXP 24
15262: IFFALSE 15274
// begin AmAlarmAttack = true ;
15264: LD_ADDR_EXP 8
15268: PUSH
15269: LD_INT 1
15271: ST_TO_ADDR
// exit ;
15272: GO 15375
// end ; while not ConvoyPlaced do
15274: LD_EXP 9
15278: NOT
15279: IFFALSE 15290
// wait ( 0 0$1 ) ;
15281: LD_INT 35
15283: PPUSH
15284: CALL_OW 67
15288: GO 15274
// while FilterAllUnits ( [ [ f_side , 1 ] , [ f_ok ] , [ f_not , [ f_empty ] ] ] ) > 0 do
15290: LD_INT 22
15292: PUSH
15293: LD_INT 1
15295: PUSH
15296: EMPTY
15297: LIST
15298: LIST
15299: PUSH
15300: LD_INT 50
15302: PUSH
15303: EMPTY
15304: LIST
15305: PUSH
15306: LD_INT 3
15308: PUSH
15309: LD_INT 58
15311: PUSH
15312: EMPTY
15313: LIST
15314: PUSH
15315: EMPTY
15316: LIST
15317: LIST
15318: PUSH
15319: EMPTY
15320: LIST
15321: LIST
15322: LIST
15323: PPUSH
15324: CALL_OW 69
15328: PUSH
15329: LD_INT 0
15331: GREATER
15332: IFFALSE 15343
// wait ( 0 0$1 ) ;
15334: LD_INT 35
15336: PPUSH
15337: CALL_OW 67
15341: GO 15290
// ChangeMissionObjectives ( M_ConvoyDel ) ;
15343: LD_STRING M_ConvoyDel
15345: PPUSH
15346: CALL_OW 337
// if AmConvoyEscapedFromPlayer = false then
15350: LD_EXP 7
15354: PUSH
15355: LD_INT 0
15357: EQUAL
15358: IFFALSE 15367
// wait ( 5 5$0 ) ;
15360: LD_INT 10500
15362: PPUSH
15363: CALL_OW 67
// AmAlarmAttack = true ;
15367: LD_ADDR_EXP 8
15371: PUSH
15372: LD_INT 1
15374: ST_TO_ADDR
// end ;
15375: END
// every 0 0$1 trigger FilterUnitsInArea ( EnemySpotArea , [ [ f_side , 1 ] , [ f_type , unit_human ] , [ f_see , 2 ] ] ) do
15376: LD_INT 17
15378: PPUSH
15379: LD_INT 22
15381: PUSH
15382: LD_INT 1
15384: PUSH
15385: EMPTY
15386: LIST
15387: LIST
15388: PUSH
15389: LD_INT 21
15391: PUSH
15392: LD_INT 1
15394: PUSH
15395: EMPTY
15396: LIST
15397: LIST
15398: PUSH
15399: LD_INT 101
15401: PUSH
15402: LD_INT 2
15404: PUSH
15405: EMPTY
15406: LIST
15407: LIST
15408: PUSH
15409: EMPTY
15410: LIST
15411: LIST
15412: LIST
15413: PPUSH
15414: CALL_OW 70
15418: IFFALSE 15435
15420: GO 15422
15422: DISABLE
// Say ( Heike , D11-H-1 ) ;
15423: LD_EXP 39
15427: PPUSH
15428: LD_STRING D11-H-1
15430: PPUSH
15431: CALL_OW 88
15435: END
// every 0 0$1 do var i , j ;
15436: GO 15438
15438: DISABLE
15439: LD_INT 0
15441: PPUSH
15442: PPUSH
// begin enable ;
15443: ENABLE
// if waveDialogBlock = 3 then
15444: LD_EXP 16
15448: PUSH
15449: LD_INT 3
15451: EQUAL
15452: IFFALSE 15456
// exit ;
15454: GO 15807
// if waveDialog = 1 and waveDialogBlock = 0 then
15456: LD_EXP 15
15460: PUSH
15461: LD_INT 1
15463: EQUAL
15464: PUSH
15465: LD_EXP 16
15469: PUSH
15470: LD_INT 0
15472: EQUAL
15473: AND
15474: IFFALSE 15560
// for i in first_wave do
15476: LD_ADDR_VAR 0 1
15480: PUSH
15481: LD_EXP 11
15485: PUSH
15486: FOR_IN
15487: IFFALSE 15558
// for j in i do
15489: LD_ADDR_VAR 0 2
15493: PUSH
15494: LD_VAR 0 1
15498: PUSH
15499: FOR_IN
15500: IFFALSE 15554
// if See ( 2 , j ) then
15502: LD_INT 2
15504: PPUSH
15505: LD_VAR 0 2
15509: PPUSH
15510: CALL_OW 292
15514: IFFALSE 15552
// begin waveDialogBlock = waveDialogBlock + 1 ;
15516: LD_ADDR_EXP 16
15520: PUSH
15521: LD_EXP 16
15525: PUSH
15526: LD_INT 1
15528: PLUS
15529: ST_TO_ADDR
// DialogueOn ;
15530: CALL_OW 6
// Say ( Heike , D11H1 ) ;
15534: LD_EXP 39
15538: PPUSH
15539: LD_STRING D11H1
15541: PPUSH
15542: CALL_OW 88
// DialogueOff ;
15546: CALL_OW 7
// break ;
15550: GO 15554
// end ;
15552: GO 15499
15554: POP
15555: POP
15556: GO 15486
15558: POP
15559: POP
// if waveDialog = 2 and waveDialogBlock = 1 then
15560: LD_EXP 15
15564: PUSH
15565: LD_INT 2
15567: EQUAL
15568: PUSH
15569: LD_EXP 16
15573: PUSH
15574: LD_INT 1
15576: EQUAL
15577: AND
15578: IFFALSE 15664
// for i in second_wave do
15580: LD_ADDR_VAR 0 1
15584: PUSH
15585: LD_EXP 12
15589: PUSH
15590: FOR_IN
15591: IFFALSE 15662
// for j in i do
15593: LD_ADDR_VAR 0 2
15597: PUSH
15598: LD_VAR 0 1
15602: PUSH
15603: FOR_IN
15604: IFFALSE 15658
// if See ( 2 , j ) then
15606: LD_INT 2
15608: PPUSH
15609: LD_VAR 0 2
15613: PPUSH
15614: CALL_OW 292
15618: IFFALSE 15656
// begin waveDialogBlock = waveDialogBlock + 1 ;
15620: LD_ADDR_EXP 16
15624: PUSH
15625: LD_EXP 16
15629: PUSH
15630: LD_INT 1
15632: PLUS
15633: ST_TO_ADDR
// DialogueOn ;
15634: CALL_OW 6
// Say ( Heike , D11H2 ) ;
15638: LD_EXP 39
15642: PPUSH
15643: LD_STRING D11H2
15645: PPUSH
15646: CALL_OW 88
// DialogueOff ;
15650: CALL_OW 7
// break ;
15654: GO 15658
// end ;
15656: GO 15603
15658: POP
15659: POP
15660: GO 15590
15662: POP
15663: POP
// if waveDialog = 3 and waveDialogBlock = 2 then
15664: LD_EXP 15
15668: PUSH
15669: LD_INT 3
15671: EQUAL
15672: PUSH
15673: LD_EXP 16
15677: PUSH
15678: LD_INT 2
15680: EQUAL
15681: AND
15682: IFFALSE 15807
// for i in third_wave do
15684: LD_ADDR_VAR 0 1
15688: PUSH
15689: LD_EXP 13
15693: PUSH
15694: FOR_IN
15695: IFFALSE 15805
// for j in i do
15697: LD_ADDR_VAR 0 2
15701: PUSH
15702: LD_VAR 0 1
15706: PUSH
15707: FOR_IN
15708: IFFALSE 15801
// if See ( 2 , j ) then
15710: LD_INT 2
15712: PPUSH
15713: LD_VAR 0 2
15717: PPUSH
15718: CALL_OW 292
15722: IFFALSE 15799
// begin waveDialogBlock = waveDialogBlock + 1 ;
15724: LD_ADDR_EXP 16
15728: PUSH
15729: LD_EXP 16
15733: PUSH
15734: LD_INT 1
15736: PLUS
15737: ST_TO_ADDR
// while FilterAllUnits ( [ [ f_side , 1 ] , [ f_ok ] ] ) > 0 do
15738: LD_INT 22
15740: PUSH
15741: LD_INT 1
15743: PUSH
15744: EMPTY
15745: LIST
15746: LIST
15747: PUSH
15748: LD_INT 50
15750: PUSH
15751: EMPTY
15752: LIST
15753: PUSH
15754: EMPTY
15755: LIST
15756: LIST
15757: PPUSH
15758: CALL_OW 69
15762: PUSH
15763: LD_INT 0
15765: GREATER
15766: IFFALSE 15777
// wait ( 0 0$1 ) ;
15768: LD_INT 35
15770: PPUSH
15771: CALL_OW 67
15775: GO 15738
// DialogueOn ;
15777: CALL_OW 6
// Say ( Heike , D11H3 ) ;
15781: LD_EXP 39
15785: PPUSH
15786: LD_STRING D11H3
15788: PPUSH
15789: CALL_OW 88
// DialogueOff ;
15793: CALL_OW 7
// break ;
15797: GO 15801
// end ;
15799: GO 15707
15801: POP
15802: POP
15803: GO 15694
15805: POP
15806: POP
// end ;
15807: PPOPN 2
15809: END
// every 0 0$1 do
15810: GO 15812
15812: DISABLE
// begin if GetResourceType ( GetBase ( FarmerDepot ) , mat_cans ) >= secondary_crate_goal and GetResourceType ( GetBase ( FarmerDepot ) , mat_oil ) >= secondary_crate_goal then
15813: LD_EXP 2
15817: PPUSH
15818: CALL_OW 274
15822: PPUSH
15823: LD_INT 1
15825: PPUSH
15826: CALL_OW 275
15830: PUSH
15831: LD_EXP 18
15835: GREATEREQUAL
15836: PUSH
15837: LD_EXP 2
15841: PPUSH
15842: CALL_OW 274
15846: PPUSH
15847: LD_INT 2
15849: PPUSH
15850: CALL_OW 275
15854: PUSH
15855: LD_EXP 18
15859: GREATEREQUAL
15860: AND
15861: IFFALSE 15872
// begin ChangeMissionObjectives ( M_crate_out ) ;
15863: LD_STRING M_crate_out
15865: PPUSH
15866: CALL_OW 337
// exit ;
15870: GO 15873
// end ; enable ;
15872: ENABLE
// end ;
15873: END
// every 0 0$1 do var i ;
15874: GO 15876
15876: DISABLE
15877: LD_INT 0
15879: PPUSH
// begin for i in FilterAllUnits ( [ [ f_side , 1 ] , [ f_type , unit_vehicle ] ] ) do
15880: LD_ADDR_VAR 0 1
15884: PUSH
15885: LD_INT 22
15887: PUSH
15888: LD_INT 1
15890: PUSH
15891: EMPTY
15892: LIST
15893: LIST
15894: PUSH
15895: LD_INT 21
15897: PUSH
15898: LD_INT 2
15900: PUSH
15901: EMPTY
15902: LIST
15903: LIST
15904: PUSH
15905: EMPTY
15906: LIST
15907: LIST
15908: PPUSH
15909: CALL_OW 69
15913: PUSH
15914: FOR_IN
15915: IFFALSE 15946
// if GetFuel ( i ) < 10 then
15917: LD_VAR 0 1
15921: PPUSH
15922: CALL_OW 261
15926: PUSH
15927: LD_INT 10
15929: LESS
15930: IFFALSE 15944
// SetFuel ( i , 10 ) ;
15932: LD_VAR 0 1
15936: PPUSH
15937: LD_INT 10
15939: PPUSH
15940: CALL_OW 240
15944: GO 15914
15946: POP
15947: POP
// enable ;
15948: ENABLE
// end ; end_of_file
15949: PPOPN 1
15951: END
// export num_apes , num_tigers , aggressivity , am_skill_lvl ; export depot_initial_crates ; export function PrepareDifficulty ; var fourth_attack_time , i , mean ; begin
15952: LD_INT 0
15954: PPUSH
15955: PPUSH
15956: PPUSH
15957: PPUSH
// num_apes = [ 8 , 6 , 5 ] [ difficulty ] ;
15958: LD_ADDR_EXP 53
15962: PUSH
15963: LD_INT 8
15965: PUSH
15966: LD_INT 6
15968: PUSH
15969: LD_INT 5
15971: PUSH
15972: EMPTY
15973: LIST
15974: LIST
15975: LIST
15976: PUSH
15977: LD_OWVAR 67
15981: ARRAY
15982: ST_TO_ADDR
// num_tigers = [ 2 , 4 , 6 ] [ difficulty ] ;
15983: LD_ADDR_EXP 54
15987: PUSH
15988: LD_INT 2
15990: PUSH
15991: LD_INT 4
15993: PUSH
15994: LD_INT 6
15996: PUSH
15997: EMPTY
15998: LIST
15999: LIST
16000: LIST
16001: PUSH
16002: LD_OWVAR 67
16006: ARRAY
16007: ST_TO_ADDR
// aggressivity = [ 10 , 30 , 50 ] [ difficulty ] ;
16008: LD_ADDR_EXP 55
16012: PUSH
16013: LD_INT 10
16015: PUSH
16016: LD_INT 30
16018: PUSH
16019: LD_INT 50
16021: PUSH
16022: EMPTY
16023: LIST
16024: LIST
16025: LIST
16026: PUSH
16027: LD_OWVAR 67
16031: ARRAY
16032: ST_TO_ADDR
// am_skill_lvl = [ 2 , 3 , 4 ] [ difficulty ] ;
16033: LD_ADDR_EXP 56
16037: PUSH
16038: LD_INT 2
16040: PUSH
16041: LD_INT 3
16043: PUSH
16044: LD_INT 4
16046: PUSH
16047: EMPTY
16048: LIST
16049: LIST
16050: LIST
16051: PUSH
16052: LD_OWVAR 67
16056: ARRAY
16057: ST_TO_ADDR
// fourth_attack_time = secondary_crate_goal / ( [ 1.3 , 1.5 , 2.5 ] [ difficulty ] * 10 ) * 1 1$40 ;
16058: LD_ADDR_VAR 0 2
16062: PUSH
16063: LD_EXP 18
16067: PUSH
16068: LD_REAL  1.30000000000000E+0000
16071: PUSH
16072: LD_REAL  1.50000000000000E+0000
16075: PUSH
16076: LD_REAL  2.50000000000000E+0000
16079: PUSH
16080: EMPTY
16081: LIST
16082: LIST
16083: LIST
16084: PUSH
16085: LD_OWVAR 67
16089: ARRAY
16090: PUSH
16091: LD_INT 10
16093: MUL
16094: DIVREAL
16095: PUSH
16096: LD_INT 3500
16098: MUL
16099: ST_TO_ADDR
// mean = fourth_attack_time / 4 ;
16100: LD_ADDR_VAR 0 4
16104: PUSH
16105: LD_VAR 0 2
16109: PUSH
16110: LD_INT 4
16112: DIVREAL
16113: ST_TO_ADDR
// attack_times = [ ] ;
16114: LD_ADDR_EXP 21
16118: PUSH
16119: EMPTY
16120: ST_TO_ADDR
// for i = 1 to 3 do
16121: LD_ADDR_VAR 0 3
16125: PUSH
16126: DOUBLE
16127: LD_INT 1
16129: DEC
16130: ST_TO_ADDR
16131: LD_INT 3
16133: PUSH
16134: FOR_TO
16135: IFFALSE 16197
// attack_times = attack_times ^ Rand ( mean * i - mean div 7 , mean * i + mean div 7 ) ;
16137: LD_ADDR_EXP 21
16141: PUSH
16142: LD_EXP 21
16146: PUSH
16147: LD_VAR 0 4
16151: PUSH
16152: LD_VAR 0 3
16156: MUL
16157: PUSH
16158: LD_VAR 0 4
16162: PUSH
16163: LD_INT 7
16165: DIV
16166: MINUS
16167: PPUSH
16168: LD_VAR 0 4
16172: PUSH
16173: LD_VAR 0 3
16177: MUL
16178: PUSH
16179: LD_VAR 0 4
16183: PUSH
16184: LD_INT 7
16186: DIV
16187: PLUS
16188: PPUSH
16189: CALL_OW 12
16193: ADD
16194: ST_TO_ADDR
16195: GO 16134
16197: POP
16198: POP
// attack_times = attack_times ^ fourth_attack_time ;
16199: LD_ADDR_EXP 21
16203: PUSH
16204: LD_EXP 21
16208: PUSH
16209: LD_VAR 0 2
16213: ADD
16214: ST_TO_ADDR
// depot_initial_crates = [ 590 , 520 , 450 ] [ difficulty ] ;
16215: LD_ADDR_EXP 57
16219: PUSH
16220: LD_INT 590
16222: PUSH
16223: LD_INT 520
16225: PUSH
16226: LD_INT 450
16228: PUSH
16229: EMPTY
16230: LIST
16231: LIST
16232: LIST
16233: PUSH
16234: LD_OWVAR 67
16238: ARRAY
16239: ST_TO_ADDR
// SetResourceType ( GetBase ( dep ) , mat_cans , depot_initial_crates ) ;
16240: LD_INT 1
16242: PPUSH
16243: CALL_OW 274
16247: PPUSH
16248: LD_INT 1
16250: PPUSH
16251: LD_EXP 57
16255: PPUSH
16256: CALL_OW 277
// end ;
16260: LD_VAR 0 1
16264: RET
// export function AI_GetAwayFromXY ( unit1 , x , y , dist , add ) ; var list_nearest , list_coords , temp_dir , dir_list , b , min_dist , temp_dist , c , rand_num , rand_near_hex , attempts ; begin
16265: LD_INT 0
16267: PPUSH
16268: PPUSH
16269: PPUSH
16270: PPUSH
16271: PPUSH
16272: PPUSH
16273: PPUSH
16274: PPUSH
16275: PPUSH
16276: PPUSH
16277: PPUSH
16278: PPUSH
// if not IsOk ( unit1 ) or dist = 1 or not ValidHex ( x , y ) or GetDistUnitXY ( unit1 , x , y ) >= dist or not add in [ true , false ] then
16279: LD_VAR 0 1
16283: PPUSH
16284: CALL_OW 302
16288: NOT
16289: PUSH
16290: LD_VAR 0 4
16294: PUSH
16295: LD_INT 1
16297: EQUAL
16298: OR
16299: PUSH
16300: LD_VAR 0 2
16304: PPUSH
16305: LD_VAR 0 3
16309: PPUSH
16310: CALL_OW 488
16314: NOT
16315: OR
16316: PUSH
16317: LD_VAR 0 1
16321: PPUSH
16322: LD_VAR 0 2
16326: PPUSH
16327: LD_VAR 0 3
16331: PPUSH
16332: CALL_OW 297
16336: PUSH
16337: LD_VAR 0 4
16341: GREATEREQUAL
16342: OR
16343: PUSH
16344: LD_VAR 0 5
16348: PUSH
16349: LD_INT 1
16351: PUSH
16352: LD_INT 0
16354: PUSH
16355: EMPTY
16356: LIST
16357: LIST
16358: IN
16359: NOT
16360: OR
16361: IFFALSE 16365
// exit ;
16363: GO 17922
// attempts = 0 ;
16365: LD_ADDR_VAR 0 17
16369: PUSH
16370: LD_INT 0
16372: ST_TO_ADDR
// repeat list_nearest = [ ] ;
16373: LD_ADDR_VAR 0 7
16377: PUSH
16378: EMPTY
16379: ST_TO_ADDR
// list_coords = [ ] ;
16380: LD_ADDR_VAR 0 8
16384: PUSH
16385: EMPTY
16386: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
16387: LD_ADDR_VAR 0 9
16391: PUSH
16392: LD_VAR 0 2
16396: PPUSH
16397: LD_VAR 0 3
16401: PPUSH
16402: LD_VAR 0 1
16406: PPUSH
16407: CALL_OW 250
16411: PPUSH
16412: LD_VAR 0 1
16416: PPUSH
16417: CALL_OW 251
16421: PPUSH
16422: CALL 17927 0 4
16426: ST_TO_ADDR
// if attempts = 0 then
16427: LD_VAR 0 17
16431: PUSH
16432: LD_INT 0
16434: EQUAL
16435: IFFALSE 16543
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
16437: LD_ADDR_VAR 0 10
16441: PUSH
16442: LD_VAR 0 9
16446: PUSH
16447: LD_VAR 0 9
16451: PUSH
16452: LD_INT 1
16454: PLUS
16455: PUSH
16456: LD_VAR 0 9
16460: PUSH
16461: LD_INT 1
16463: MINUS
16464: PUSH
16465: EMPTY
16466: LIST
16467: LIST
16468: LIST
16469: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
16470: LD_VAR 0 10
16474: PUSH
16475: LD_INT 2
16477: ARRAY
16478: PUSH
16479: LD_INT 6
16481: EQUAL
16482: IFFALSE 16505
// dir_list = Replace ( dir_list , 2 , 0 ) ;
16484: LD_ADDR_VAR 0 10
16488: PUSH
16489: LD_VAR 0 10
16493: PPUSH
16494: LD_INT 2
16496: PPUSH
16497: LD_INT 0
16499: PPUSH
16500: CALL_OW 1
16504: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
16505: LD_VAR 0 10
16509: PUSH
16510: LD_INT 3
16512: ARRAY
16513: PUSH
16514: LD_INT 1
16516: NEG
16517: EQUAL
16518: IFFALSE 16541
// dir_list = Replace ( dir_list , 3 , 5 ) ;
16520: LD_ADDR_VAR 0 10
16524: PUSH
16525: LD_VAR 0 10
16529: PPUSH
16530: LD_INT 3
16532: PPUSH
16533: LD_INT 5
16535: PPUSH
16536: CALL_OW 1
16540: ST_TO_ADDR
// end else
16541: GO 16580
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
16543: LD_ADDR_VAR 0 10
16547: PUSH
16548: LD_INT 0
16550: PUSH
16551: LD_INT 1
16553: PUSH
16554: LD_INT 2
16556: PUSH
16557: LD_INT 3
16559: PUSH
16560: LD_INT 4
16562: PUSH
16563: LD_INT 5
16565: PUSH
16566: EMPTY
16567: LIST
16568: LIST
16569: LIST
16570: LIST
16571: LIST
16572: LIST
16573: PUSH
16574: LD_VAR 0 9
16578: DIFF
16579: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
16580: LD_ADDR_VAR 0 14
16584: PUSH
16585: DOUBLE
16586: LD_INT 1
16588: DEC
16589: ST_TO_ADDR
16590: LD_VAR 0 10
16594: PUSH
16595: LD_INT 0
16597: PLUS
16598: PUSH
16599: FOR_TO
16600: IFFALSE 16922
// case dir_list [ c ] of 0 :
16602: LD_VAR 0 10
16606: PUSH
16607: LD_VAR 0 14
16611: ARRAY
16612: PUSH
16613: LD_INT 0
16615: DOUBLE
16616: EQUAL
16617: IFTRUE 16621
16619: GO 16662
16621: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
16622: LD_ADDR_VAR 0 8
16626: PUSH
16627: LD_VAR 0 8
16631: PPUSH
16632: LD_INT 1
16634: PPUSH
16635: LD_VAR 0 2
16639: PUSH
16640: LD_VAR 0 3
16644: PUSH
16645: LD_VAR 0 4
16649: MINUS
16650: PUSH
16651: EMPTY
16652: LIST
16653: LIST
16654: PPUSH
16655: CALL_OW 2
16659: ST_TO_ADDR
16660: GO 16920
16662: LD_INT 1
16664: DOUBLE
16665: EQUAL
16666: IFTRUE 16670
16668: GO 16711
16670: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
16671: LD_ADDR_VAR 0 8
16675: PUSH
16676: LD_VAR 0 8
16680: PPUSH
16681: LD_INT 1
16683: PPUSH
16684: LD_VAR 0 2
16688: PUSH
16689: LD_VAR 0 4
16693: PLUS
16694: PUSH
16695: LD_VAR 0 3
16699: PUSH
16700: EMPTY
16701: LIST
16702: LIST
16703: PPUSH
16704: CALL_OW 2
16708: ST_TO_ADDR
16709: GO 16920
16711: LD_INT 2
16713: DOUBLE
16714: EQUAL
16715: IFTRUE 16719
16717: GO 16766
16719: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
16720: LD_ADDR_VAR 0 8
16724: PUSH
16725: LD_VAR 0 8
16729: PPUSH
16730: LD_INT 1
16732: PPUSH
16733: LD_VAR 0 2
16737: PUSH
16738: LD_VAR 0 4
16742: PLUS
16743: PUSH
16744: LD_VAR 0 3
16748: PUSH
16749: LD_VAR 0 4
16753: PLUS
16754: PUSH
16755: EMPTY
16756: LIST
16757: LIST
16758: PPUSH
16759: CALL_OW 2
16763: ST_TO_ADDR
16764: GO 16920
16766: LD_INT 3
16768: DOUBLE
16769: EQUAL
16770: IFTRUE 16774
16772: GO 16815
16774: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
16775: LD_ADDR_VAR 0 8
16779: PUSH
16780: LD_VAR 0 8
16784: PPUSH
16785: LD_INT 1
16787: PPUSH
16788: LD_VAR 0 2
16792: PUSH
16793: LD_VAR 0 3
16797: PUSH
16798: LD_VAR 0 4
16802: PLUS
16803: PUSH
16804: EMPTY
16805: LIST
16806: LIST
16807: PPUSH
16808: CALL_OW 2
16812: ST_TO_ADDR
16813: GO 16920
16815: LD_INT 4
16817: DOUBLE
16818: EQUAL
16819: IFTRUE 16823
16821: GO 16864
16823: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
16824: LD_ADDR_VAR 0 8
16828: PUSH
16829: LD_VAR 0 8
16833: PPUSH
16834: LD_INT 1
16836: PPUSH
16837: LD_VAR 0 2
16841: PUSH
16842: LD_VAR 0 4
16846: MINUS
16847: PUSH
16848: LD_VAR 0 3
16852: PUSH
16853: EMPTY
16854: LIST
16855: LIST
16856: PPUSH
16857: CALL_OW 2
16861: ST_TO_ADDR
16862: GO 16920
16864: LD_INT 5
16866: DOUBLE
16867: EQUAL
16868: IFTRUE 16872
16870: GO 16919
16872: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
16873: LD_ADDR_VAR 0 8
16877: PUSH
16878: LD_VAR 0 8
16882: PPUSH
16883: LD_INT 1
16885: PPUSH
16886: LD_VAR 0 2
16890: PUSH
16891: LD_VAR 0 4
16895: MINUS
16896: PUSH
16897: LD_VAR 0 3
16901: PUSH
16902: LD_VAR 0 4
16906: MINUS
16907: PUSH
16908: EMPTY
16909: LIST
16910: LIST
16911: PPUSH
16912: CALL_OW 2
16916: ST_TO_ADDR
16917: GO 16920
16919: POP
16920: GO 16599
16922: POP
16923: POP
// if dist < 30 then
16924: LD_VAR 0 4
16928: PUSH
16929: LD_INT 30
16931: LESS
16932: IFFALSE 16944
// c = 1 else
16934: LD_ADDR_VAR 0 14
16938: PUSH
16939: LD_INT 1
16941: ST_TO_ADDR
16942: GO 16952
// c = 2 ;
16944: LD_ADDR_VAR 0 14
16948: PUSH
16949: LD_INT 2
16951: ST_TO_ADDR
// b = 1 ;
16952: LD_ADDR_VAR 0 11
16956: PUSH
16957: LD_INT 1
16959: ST_TO_ADDR
// while b <= ( dist - 1 ) do
16960: LD_VAR 0 11
16964: PUSH
16965: LD_VAR 0 4
16969: PUSH
16970: LD_INT 1
16972: MINUS
16973: LESSEQUAL
16974: IFFALSE 17402
// begin if 0 in dir_list and 1 in dir_list then
16976: LD_INT 0
16978: PUSH
16979: LD_VAR 0 10
16983: IN
16984: PUSH
16985: LD_INT 1
16987: PUSH
16988: LD_VAR 0 10
16992: IN
16993: AND
16994: IFFALSE 17046
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
16996: LD_ADDR_VAR 0 8
17000: PUSH
17001: LD_VAR 0 8
17005: PPUSH
17006: LD_INT 1
17008: PPUSH
17009: LD_VAR 0 2
17013: PUSH
17014: LD_VAR 0 11
17018: PLUS
17019: PUSH
17020: LD_VAR 0 3
17024: PUSH
17025: LD_VAR 0 4
17029: MINUS
17030: PUSH
17031: LD_VAR 0 11
17035: PLUS
17036: PUSH
17037: EMPTY
17038: LIST
17039: LIST
17040: PPUSH
17041: CALL_OW 2
17045: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
17046: LD_INT 1
17048: PUSH
17049: LD_VAR 0 10
17053: IN
17054: PUSH
17055: LD_INT 2
17057: PUSH
17058: LD_VAR 0 10
17062: IN
17063: AND
17064: IFFALSE 17110
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
17066: LD_ADDR_VAR 0 8
17070: PUSH
17071: LD_VAR 0 8
17075: PPUSH
17076: LD_INT 1
17078: PPUSH
17079: LD_VAR 0 2
17083: PUSH
17084: LD_VAR 0 4
17088: PLUS
17089: PUSH
17090: LD_VAR 0 3
17094: PUSH
17095: LD_VAR 0 11
17099: PLUS
17100: PUSH
17101: EMPTY
17102: LIST
17103: LIST
17104: PPUSH
17105: CALL_OW 2
17109: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
17110: LD_INT 2
17112: PUSH
17113: LD_VAR 0 10
17117: IN
17118: PUSH
17119: LD_INT 3
17121: PUSH
17122: LD_VAR 0 10
17126: IN
17127: AND
17128: IFFALSE 17180
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
17130: LD_ADDR_VAR 0 8
17134: PUSH
17135: LD_VAR 0 8
17139: PPUSH
17140: LD_INT 1
17142: PPUSH
17143: LD_VAR 0 2
17147: PUSH
17148: LD_VAR 0 4
17152: PLUS
17153: PUSH
17154: LD_VAR 0 11
17158: MINUS
17159: PUSH
17160: LD_VAR 0 3
17164: PUSH
17165: LD_VAR 0 4
17169: PLUS
17170: PUSH
17171: EMPTY
17172: LIST
17173: LIST
17174: PPUSH
17175: CALL_OW 2
17179: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
17180: LD_INT 3
17182: PUSH
17183: LD_VAR 0 10
17187: IN
17188: PUSH
17189: LD_INT 4
17191: PUSH
17192: LD_VAR 0 10
17196: IN
17197: AND
17198: IFFALSE 17250
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
17200: LD_ADDR_VAR 0 8
17204: PUSH
17205: LD_VAR 0 8
17209: PPUSH
17210: LD_INT 1
17212: PPUSH
17213: LD_VAR 0 2
17217: PUSH
17218: LD_VAR 0 11
17222: MINUS
17223: PUSH
17224: LD_VAR 0 3
17228: PUSH
17229: LD_VAR 0 4
17233: PLUS
17234: PUSH
17235: LD_VAR 0 11
17239: MINUS
17240: PUSH
17241: EMPTY
17242: LIST
17243: LIST
17244: PPUSH
17245: CALL_OW 2
17249: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
17250: LD_INT 4
17252: PUSH
17253: LD_VAR 0 10
17257: IN
17258: PUSH
17259: LD_INT 5
17261: PUSH
17262: LD_VAR 0 10
17266: IN
17267: AND
17268: IFFALSE 17314
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
17270: LD_ADDR_VAR 0 8
17274: PUSH
17275: LD_VAR 0 8
17279: PPUSH
17280: LD_INT 1
17282: PPUSH
17283: LD_VAR 0 2
17287: PUSH
17288: LD_VAR 0 4
17292: MINUS
17293: PUSH
17294: LD_VAR 0 3
17298: PUSH
17299: LD_VAR 0 11
17303: MINUS
17304: PUSH
17305: EMPTY
17306: LIST
17307: LIST
17308: PPUSH
17309: CALL_OW 2
17313: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
17314: LD_INT 5
17316: PUSH
17317: LD_VAR 0 10
17321: IN
17322: PUSH
17323: LD_INT 0
17325: PUSH
17326: LD_VAR 0 10
17330: IN
17331: AND
17332: IFFALSE 17384
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
17334: LD_ADDR_VAR 0 8
17338: PUSH
17339: LD_VAR 0 8
17343: PPUSH
17344: LD_INT 1
17346: PPUSH
17347: LD_VAR 0 2
17351: PUSH
17352: LD_VAR 0 4
17356: MINUS
17357: PUSH
17358: LD_VAR 0 11
17362: PLUS
17363: PUSH
17364: LD_VAR 0 3
17368: PUSH
17369: LD_VAR 0 4
17373: MINUS
17374: PUSH
17375: EMPTY
17376: LIST
17377: LIST
17378: PPUSH
17379: CALL_OW 2
17383: ST_TO_ADDR
// b = b + c end ;
17384: LD_ADDR_VAR 0 11
17388: PUSH
17389: LD_VAR 0 11
17393: PUSH
17394: LD_VAR 0 14
17398: PLUS
17399: ST_TO_ADDR
17400: GO 16960
// if list_coords = 0 then
17402: LD_VAR 0 8
17406: PUSH
17407: LD_INT 0
17409: EQUAL
17410: IFFALSE 17414
// exit ;
17412: GO 17922
// repeat min_dist = 5000 ;
17414: LD_ADDR_VAR 0 12
17418: PUSH
17419: LD_INT 5000
17421: ST_TO_ADDR
// for b in list_coords do
17422: LD_ADDR_VAR 0 11
17426: PUSH
17427: LD_VAR 0 8
17431: PUSH
17432: FOR_IN
17433: IFFALSE 17492
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
17435: LD_ADDR_VAR 0 13
17439: PUSH
17440: LD_VAR 0 1
17444: PPUSH
17445: LD_VAR 0 11
17449: PUSH
17450: LD_INT 1
17452: ARRAY
17453: PPUSH
17454: LD_VAR 0 11
17458: PUSH
17459: LD_INT 2
17461: ARRAY
17462: PPUSH
17463: CALL_OW 297
17467: ST_TO_ADDR
// if temp_dist < min_dist then
17468: LD_VAR 0 13
17472: PUSH
17473: LD_VAR 0 12
17477: LESS
17478: IFFALSE 17490
// min_dist = temp_dist ;
17480: LD_ADDR_VAR 0 12
17484: PUSH
17485: LD_VAR 0 13
17489: ST_TO_ADDR
// end ;
17490: GO 17432
17492: POP
17493: POP
// c = 0 ;
17494: LD_ADDR_VAR 0 14
17498: PUSH
17499: LD_INT 0
17501: ST_TO_ADDR
// repeat c = c + 1 ;
17502: LD_ADDR_VAR 0 14
17506: PUSH
17507: LD_VAR 0 14
17511: PUSH
17512: LD_INT 1
17514: PLUS
17515: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
17516: LD_VAR 0 1
17520: PPUSH
17521: LD_VAR 0 8
17525: PUSH
17526: LD_VAR 0 14
17530: ARRAY
17531: PUSH
17532: LD_INT 1
17534: ARRAY
17535: PPUSH
17536: LD_VAR 0 8
17540: PUSH
17541: LD_VAR 0 14
17545: ARRAY
17546: PUSH
17547: LD_INT 2
17549: ARRAY
17550: PPUSH
17551: CALL_OW 297
17555: PUSH
17556: LD_VAR 0 12
17560: EQUAL
17561: IFFALSE 17626
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
17563: LD_ADDR_VAR 0 7
17567: PUSH
17568: LD_VAR 0 7
17572: PPUSH
17573: LD_INT 1
17575: PPUSH
17576: LD_VAR 0 8
17580: PUSH
17581: LD_VAR 0 14
17585: ARRAY
17586: PPUSH
17587: CALL_OW 2
17591: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
17592: LD_ADDR_VAR 0 8
17596: PUSH
17597: LD_VAR 0 8
17601: PPUSH
17602: LD_VAR 0 14
17606: PPUSH
17607: CALL_OW 3
17611: ST_TO_ADDR
// c = c - 1 ;
17612: LD_ADDR_VAR 0 14
17616: PUSH
17617: LD_VAR 0 14
17621: PUSH
17622: LD_INT 1
17624: MINUS
17625: ST_TO_ADDR
// end ; until c = list_coords ;
17626: LD_VAR 0 14
17630: PUSH
17631: LD_VAR 0 8
17635: EQUAL
17636: IFFALSE 17502
// c = 0 ;
17638: LD_ADDR_VAR 0 14
17642: PUSH
17643: LD_INT 0
17645: ST_TO_ADDR
// if list_nearest > 0 then
17646: LD_VAR 0 7
17650: PUSH
17651: LD_INT 0
17653: GREATER
17654: IFFALSE 17796
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
17656: LD_ADDR_VAR 0 15
17660: PUSH
17661: LD_INT 1
17663: PPUSH
17664: LD_VAR 0 7
17668: PPUSH
17669: CALL_OW 12
17673: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
17674: LD_ADDR_VAR 0 16
17678: PUSH
17679: LD_VAR 0 7
17683: PUSH
17684: LD_VAR 0 15
17688: ARRAY
17689: ST_TO_ADDR
// if ValidHex ( rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) > 0 and HexInfo ( rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) = 0 then
17690: LD_VAR 0 16
17694: PUSH
17695: LD_INT 1
17697: ARRAY
17698: PPUSH
17699: LD_VAR 0 16
17703: PUSH
17704: LD_INT 2
17706: ARRAY
17707: PPUSH
17708: CALL_OW 488
17712: PUSH
17713: LD_INT 0
17715: GREATER
17716: PUSH
17717: LD_VAR 0 16
17721: PUSH
17722: LD_INT 1
17724: ARRAY
17725: PPUSH
17726: LD_VAR 0 16
17730: PUSH
17731: LD_INT 2
17733: ARRAY
17734: PPUSH
17735: CALL_OW 428
17739: PUSH
17740: LD_INT 0
17742: EQUAL
17743: AND
17744: IFFALSE 17756
// c = 1 else
17746: LD_ADDR_VAR 0 14
17750: PUSH
17751: LD_INT 1
17753: ST_TO_ADDR
17754: GO 17776
// list_nearest = Delete ( list_nearest , rand_num ) ;
17756: LD_ADDR_VAR 0 7
17760: PUSH
17761: LD_VAR 0 7
17765: PPUSH
17766: LD_VAR 0 15
17770: PPUSH
17771: CALL_OW 3
17775: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
17776: LD_VAR 0 14
17780: PUSH
17781: LD_INT 1
17783: EQUAL
17784: PUSH
17785: LD_VAR 0 7
17789: PUSH
17790: LD_INT 0
17792: EQUAL
17793: OR
17794: IFFALSE 17656
// end ; until c = 1 or list_coords = 0 ;
17796: LD_VAR 0 14
17800: PUSH
17801: LD_INT 1
17803: EQUAL
17804: PUSH
17805: LD_VAR 0 8
17809: PUSH
17810: LD_INT 0
17812: EQUAL
17813: OR
17814: IFFALSE 17414
// attempts = attempts + 1 ;
17816: LD_ADDR_VAR 0 17
17820: PUSH
17821: LD_VAR 0 17
17825: PUSH
17826: LD_INT 1
17828: PLUS
17829: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
17830: LD_VAR 0 14
17834: PUSH
17835: LD_INT 1
17837: EQUAL
17838: PUSH
17839: LD_VAR 0 17
17843: PUSH
17844: LD_INT 1
17846: GREATER
17847: OR
17848: IFFALSE 16373
// if c = 1 then
17850: LD_VAR 0 14
17854: PUSH
17855: LD_INT 1
17857: EQUAL
17858: IFFALSE 17922
// if add then
17860: LD_VAR 0 5
17864: IFFALSE 17895
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
17866: LD_VAR 0 1
17870: PPUSH
17871: LD_VAR 0 16
17875: PUSH
17876: LD_INT 1
17878: ARRAY
17879: PPUSH
17880: LD_VAR 0 16
17884: PUSH
17885: LD_INT 2
17887: ARRAY
17888: PPUSH
17889: CALL_OW 171
17893: GO 17922
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
17895: LD_VAR 0 1
17899: PPUSH
17900: LD_VAR 0 16
17904: PUSH
17905: LD_INT 1
17907: ARRAY
17908: PPUSH
17909: LD_VAR 0 16
17913: PUSH
17914: LD_INT 2
17916: ARRAY
17917: PPUSH
17918: CALL_OW 111
// end ;
17922: LD_VAR 0 6
17926: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
17927: LD_INT 0
17929: PPUSH
17930: PPUSH
17931: PPUSH
17932: PPUSH
17933: PPUSH
17934: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
17935: LD_VAR 0 1
17939: PPUSH
17940: LD_VAR 0 2
17944: PPUSH
17945: CALL_OW 488
17949: NOT
17950: PUSH
17951: LD_VAR 0 3
17955: PPUSH
17956: LD_VAR 0 4
17960: PPUSH
17961: CALL_OW 488
17965: NOT
17966: OR
17967: IFFALSE 17980
// begin result = - 1 ;
17969: LD_ADDR_VAR 0 5
17973: PUSH
17974: LD_INT 1
17976: NEG
17977: ST_TO_ADDR
// exit ;
17978: GO 18140
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
17980: LD_ADDR_VAR 0 6
17984: PUSH
17985: LD_VAR 0 1
17989: PPUSH
17990: LD_VAR 0 2
17994: PPUSH
17995: LD_VAR 0 3
17999: PPUSH
18000: LD_VAR 0 4
18004: PPUSH
18005: CALL_OW 298
18009: ST_TO_ADDR
// dist_2 = 99999 ;
18010: LD_ADDR_VAR 0 7
18014: PUSH
18015: LD_INT 99999
18017: ST_TO_ADDR
// for b = 0 to 5 do
18018: LD_ADDR_VAR 0 8
18022: PUSH
18023: DOUBLE
18024: LD_INT 0
18026: DEC
18027: ST_TO_ADDR
18028: LD_INT 5
18030: PUSH
18031: FOR_TO
18032: IFFALSE 18128
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
18034: LD_ADDR_VAR 0 9
18038: PUSH
18039: LD_VAR 0 1
18043: PPUSH
18044: LD_VAR 0 8
18048: PPUSH
18049: LD_VAR 0 6
18053: PPUSH
18054: CALL_OW 272
18058: PPUSH
18059: LD_VAR 0 2
18063: PPUSH
18064: LD_VAR 0 8
18068: PPUSH
18069: LD_VAR 0 6
18073: PPUSH
18074: CALL_OW 273
18078: PPUSH
18079: LD_VAR 0 3
18083: PPUSH
18084: LD_VAR 0 4
18088: PPUSH
18089: CALL_OW 298
18093: ST_TO_ADDR
// if temp_dist < dist_2 then
18094: LD_VAR 0 9
18098: PUSH
18099: LD_VAR 0 7
18103: LESS
18104: IFFALSE 18126
// begin dist_2 = temp_dist ;
18106: LD_ADDR_VAR 0 7
18110: PUSH
18111: LD_VAR 0 9
18115: ST_TO_ADDR
// dir = b ;
18116: LD_ADDR_VAR 0 10
18120: PUSH
18121: LD_VAR 0 8
18125: ST_TO_ADDR
// end ; end ;
18126: GO 18031
18128: POP
18129: POP
// result = dir ;
18130: LD_ADDR_VAR 0 5
18134: PUSH
18135: LD_VAR 0 10
18139: ST_TO_ADDR
// end ;
18140: LD_VAR 0 5
18144: RET
// export function AviradzePlantGatheringFunc ( dialogue_num ) ; var avi_hexes_list , i , temp_list , temp_list_x , temp_list_y , temp_hex , temp_list_2 , destirbed ; begin
18145: LD_INT 0
18147: PPUSH
18148: PPUSH
18149: PPUSH
18150: PPUSH
18151: PPUSH
18152: PPUSH
18153: PPUSH
18154: PPUSH
18155: PPUSH
// if aviradze_plant_gathering [ dialogue_num ] = 2 then
18156: LD_EXP 25
18160: PUSH
18161: LD_VAR 0 1
18165: ARRAY
18166: PUSH
18167: LD_INT 2
18169: EQUAL
18170: IFFALSE 18313
// begin CenterOnUnits ( Aviradze ) ;
18172: LD_EXP 40
18176: PPUSH
18177: CALL_OW 85
// DialogueOn ;
18181: CALL_OW 6
// case dialogue_num of 1 :
18185: LD_VAR 0 1
18189: PUSH
18190: LD_INT 1
18192: DOUBLE
18193: EQUAL
18194: IFTRUE 18198
18196: GO 18213
18198: POP
// Say ( Aviradze , D8Av1 ) ; 2 :
18199: LD_EXP 40
18203: PPUSH
18204: LD_STRING D8Av1
18206: PPUSH
18207: CALL_OW 88
18211: GO 18260
18213: LD_INT 2
18215: DOUBLE
18216: EQUAL
18217: IFTRUE 18221
18219: GO 18236
18221: POP
// Say ( Aviradze , D8Av2 ) ; 3 :
18222: LD_EXP 40
18226: PPUSH
18227: LD_STRING D8Av2
18229: PPUSH
18230: CALL_OW 88
18234: GO 18260
18236: LD_INT 3
18238: DOUBLE
18239: EQUAL
18240: IFTRUE 18244
18242: GO 18259
18244: POP
// Say ( Aviradze , D8Av3 ) ; end ;
18245: LD_EXP 40
18249: PPUSH
18250: LD_STRING D8Av3
18252: PPUSH
18253: CALL_OW 88
18257: GO 18260
18259: POP
// if ( aviradze_plant_gathering diff 2 ) = 0 then
18260: LD_EXP 25
18264: PUSH
18265: LD_INT 2
18267: DIFF
18268: PUSH
18269: LD_INT 0
18271: EQUAL
18272: IFFALSE 18286
// Say ( Aviradze , D8Av4 ) ;
18274: LD_EXP 40
18278: PPUSH
18279: LD_STRING D8Av4
18281: PPUSH
18282: CALL_OW 88
// DialogueOff ;
18286: CALL_OW 7
// aviradze_plant_gathering = Replace ( aviradze_plant_gathering , dialogue_num , 1 ) ;
18290: LD_ADDR_EXP 25
18294: PUSH
18295: LD_EXP 25
18299: PPUSH
18300: LD_VAR 0 1
18304: PPUSH
18305: LD_INT 1
18307: PPUSH
18308: CALL_OW 1
18312: ST_TO_ADDR
// end ; case dialogue_num of 1 :
18313: LD_VAR 0 1
18317: PUSH
18318: LD_INT 1
18320: DOUBLE
18321: EQUAL
18322: IFTRUE 18326
18324: GO 18345
18326: POP
// temp_list = AreaToList ( pink_bedflower_area , false ) ; 2 :
18327: LD_ADDR_VAR 0 5
18331: PUSH
18332: LD_INT 14
18334: PPUSH
18335: LD_INT 0
18337: PPUSH
18338: CALL_OW 517
18342: ST_TO_ADDR
18343: GO 18400
18345: LD_INT 2
18347: DOUBLE
18348: EQUAL
18349: IFTRUE 18353
18351: GO 18372
18353: POP
// temp_list = AreaToList ( greenhat_area , false ) ; 3 :
18354: LD_ADDR_VAR 0 5
18358: PUSH
18359: LD_INT 13
18361: PPUSH
18362: LD_INT 0
18364: PPUSH
18365: CALL_OW 517
18369: ST_TO_ADDR
18370: GO 18400
18372: LD_INT 3
18374: DOUBLE
18375: EQUAL
18376: IFTRUE 18380
18378: GO 18399
18380: POP
// temp_list = AreaToList ( royal_aphrodite_area , false ) ; end ;
18381: LD_ADDR_VAR 0 5
18385: PUSH
18386: LD_INT 15
18388: PPUSH
18389: LD_INT 0
18391: PPUSH
18392: CALL_OW 517
18396: ST_TO_ADDR
18397: GO 18400
18399: POP
// temp_list_x = temp_list [ 1 ] ;
18400: LD_ADDR_VAR 0 6
18404: PUSH
18405: LD_VAR 0 5
18409: PUSH
18410: LD_INT 1
18412: ARRAY
18413: ST_TO_ADDR
// temp_list_y = temp_list [ 2 ] ;
18414: LD_ADDR_VAR 0 7
18418: PUSH
18419: LD_VAR 0 5
18423: PUSH
18424: LD_INT 2
18426: ARRAY
18427: ST_TO_ADDR
// temp_list = [ ] ;
18428: LD_ADDR_VAR 0 5
18432: PUSH
18433: EMPTY
18434: ST_TO_ADDR
// temp_hex = [ GetX ( Aviradze ) , GetY ( Aviradze ) ] ;
18435: LD_ADDR_VAR 0 8
18439: PUSH
18440: LD_EXP 40
18444: PPUSH
18445: CALL_OW 250
18449: PUSH
18450: LD_EXP 40
18454: PPUSH
18455: CALL_OW 251
18459: PUSH
18460: EMPTY
18461: LIST
18462: LIST
18463: ST_TO_ADDR
// for i = 1 to temp_list_x do
18464: LD_ADDR_VAR 0 4
18468: PUSH
18469: DOUBLE
18470: LD_INT 1
18472: DEC
18473: ST_TO_ADDR
18474: LD_VAR 0 6
18478: PUSH
18479: FOR_TO
18480: IFFALSE 18578
// if GetDistXY ( temp_hex [ 1 ] , temp_hex [ 2 ] , temp_list_x [ i ] , temp_list_y [ i ] ) <= 7 then
18482: LD_VAR 0 8
18486: PUSH
18487: LD_INT 1
18489: ARRAY
18490: PPUSH
18491: LD_VAR 0 8
18495: PUSH
18496: LD_INT 2
18498: ARRAY
18499: PPUSH
18500: LD_VAR 0 6
18504: PUSH
18505: LD_VAR 0 4
18509: ARRAY
18510: PPUSH
18511: LD_VAR 0 7
18515: PUSH
18516: LD_VAR 0 4
18520: ARRAY
18521: PPUSH
18522: CALL_OW 298
18526: PUSH
18527: LD_INT 7
18529: LESSEQUAL
18530: IFFALSE 18576
// temp_list = Insert ( temp_list , 1 , [ temp_list_x [ i ] , temp_list_y [ i ] ] ) ;
18532: LD_ADDR_VAR 0 5
18536: PUSH
18537: LD_VAR 0 5
18541: PPUSH
18542: LD_INT 1
18544: PPUSH
18545: LD_VAR 0 6
18549: PUSH
18550: LD_VAR 0 4
18554: ARRAY
18555: PUSH
18556: LD_VAR 0 7
18560: PUSH
18561: LD_VAR 0 4
18565: ARRAY
18566: PUSH
18567: EMPTY
18568: LIST
18569: LIST
18570: PPUSH
18571: CALL_OW 2
18575: ST_TO_ADDR
18576: GO 18479
18578: POP
18579: POP
// temp_list = temp_list diff [ temp_hex ] ;
18580: LD_ADDR_VAR 0 5
18584: PUSH
18585: LD_VAR 0 5
18589: PUSH
18590: LD_VAR 0 8
18594: PUSH
18595: EMPTY
18596: LIST
18597: DIFF
18598: ST_TO_ADDR
// avi_hexes_list = [ ] ;
18599: LD_ADDR_VAR 0 3
18603: PUSH
18604: EMPTY
18605: ST_TO_ADDR
// for i = 1 to 5 do
18606: LD_ADDR_VAR 0 4
18610: PUSH
18611: DOUBLE
18612: LD_INT 1
18614: DEC
18615: ST_TO_ADDR
18616: LD_INT 5
18618: PUSH
18619: FOR_TO
18620: IFFALSE 18681
// begin temp_list_2 = temp_list ;
18622: LD_ADDR_VAR 0 9
18626: PUSH
18627: LD_VAR 0 5
18631: ST_TO_ADDR
// avi_hexes_list = Insert ( avi_hexes_list , 1 , temp_list [ Rand ( 1 , temp_list ) ] ) ;
18632: LD_ADDR_VAR 0 3
18636: PUSH
18637: LD_VAR 0 3
18641: PPUSH
18642: LD_INT 1
18644: PPUSH
18645: LD_VAR 0 5
18649: PUSH
18650: LD_INT 1
18652: PPUSH
18653: LD_VAR 0 5
18657: PPUSH
18658: CALL_OW 12
18662: ARRAY
18663: PPUSH
18664: CALL_OW 2
18668: ST_TO_ADDR
// temp_list = temp_list_2 ;
18669: LD_ADDR_VAR 0 5
18673: PUSH
18674: LD_VAR 0 9
18678: ST_TO_ADDR
// end ;
18679: GO 18619
18681: POP
18682: POP
// ComMoveXY ( Aviradze , avi_hexes_list [ 1 ] [ 1 ] , avi_hexes_list [ 1 ] [ 2 ] ) ;
18683: LD_EXP 40
18687: PPUSH
18688: LD_VAR 0 3
18692: PUSH
18693: LD_INT 1
18695: ARRAY
18696: PUSH
18697: LD_INT 1
18699: ARRAY
18700: PPUSH
18701: LD_VAR 0 3
18705: PUSH
18706: LD_INT 1
18708: ARRAY
18709: PUSH
18710: LD_INT 2
18712: ARRAY
18713: PPUSH
18714: CALL_OW 111
// AddComWait ( Aviradze , Rand ( 0 0$1 , 0 0$2 ) ) ;
18718: LD_EXP 40
18722: PPUSH
18723: LD_INT 35
18725: PPUSH
18726: LD_INT 70
18728: PPUSH
18729: CALL_OW 12
18733: PPUSH
18734: CALL_OW 202
// for i = 2 to 5 do
18738: LD_ADDR_VAR 0 4
18742: PUSH
18743: DOUBLE
18744: LD_INT 2
18746: DEC
18747: ST_TO_ADDR
18748: LD_INT 5
18750: PUSH
18751: FOR_TO
18752: IFFALSE 18815
// begin AddComMoveXY ( Aviradze , avi_hexes_list [ i ] [ 1 ] , avi_hexes_list [ i ] [ 2 ] ) ;
18754: LD_EXP 40
18758: PPUSH
18759: LD_VAR 0 3
18763: PUSH
18764: LD_VAR 0 4
18768: ARRAY
18769: PUSH
18770: LD_INT 1
18772: ARRAY
18773: PPUSH
18774: LD_VAR 0 3
18778: PUSH
18779: LD_VAR 0 4
18783: ARRAY
18784: PUSH
18785: LD_INT 2
18787: ARRAY
18788: PPUSH
18789: CALL_OW 171
// AddComWait ( Aviradze , Rand ( 0 0$1 , 0 0$2 ) ) ;
18793: LD_EXP 40
18797: PPUSH
18798: LD_INT 35
18800: PPUSH
18801: LD_INT 70
18803: PPUSH
18804: CALL_OW 12
18808: PPUSH
18809: CALL_OW 202
// end ;
18813: GO 18751
18815: POP
18816: POP
// destirbed = false ;
18817: LD_ADDR_VAR 0 10
18821: PUSH
18822: LD_INT 0
18824: ST_TO_ADDR
// repeat Wait ( 0 0$0.3 ) ;
18825: LD_INT 10
18827: PPUSH
18828: CALL_OW 67
// temp_list = GetTaskList ( Aviradze ) ;
18832: LD_ADDR_VAR 0 5
18836: PUSH
18837: LD_EXP 40
18841: PPUSH
18842: CALL_OW 437
18846: ST_TO_ADDR
// if temp_list > 0 then
18847: LD_VAR 0 5
18851: PUSH
18852: LD_INT 0
18854: GREATER
18855: IFFALSE 18888
// if not temp_list [ temp_list ] [ 1 ] = S then
18857: LD_VAR 0 5
18861: PUSH
18862: LD_VAR 0 5
18866: ARRAY
18867: PUSH
18868: LD_INT 1
18870: ARRAY
18871: PUSH
18872: LD_STRING S
18874: EQUAL
18875: NOT
18876: IFFALSE 18888
// begin destirbed = true ;
18878: LD_ADDR_VAR 0 10
18882: PUSH
18883: LD_INT 1
18885: ST_TO_ADDR
// break ;
18886: GO 18898
// end ; until temp_list = 0 ;
18888: LD_VAR 0 5
18892: PUSH
18893: LD_INT 0
18895: EQUAL
18896: IFFALSE 18825
// if not destirbed then
18898: LD_VAR 0 10
18902: NOT
18903: IFFALSE 19144
// begin aviradze_plant_gathering = Replace ( aviradze_plant_gathering , dialogue_num , 0 ) ;
18905: LD_ADDR_EXP 25
18909: PUSH
18910: LD_EXP 25
18914: PPUSH
18915: LD_VAR 0 1
18919: PPUSH
18920: LD_INT 0
18922: PPUSH
18923: CALL_OW 1
18927: ST_TO_ADDR
// DialogueOn ;
18928: CALL_OW 6
// case ( aviradze_plant_gathering diff 0 ) of 2 :
18932: LD_EXP 25
18936: PUSH
18937: LD_INT 0
18939: DIFF
18940: PUSH
18941: LD_INT 2
18943: DOUBLE
18944: EQUAL
18945: IFTRUE 18949
18947: GO 18964
18949: POP
// Say ( Aviradze , D8Av5 ) ; 1 :
18950: LD_EXP 40
18954: PPUSH
18955: LD_STRING D8Av5
18957: PPUSH
18958: CALL_OW 88
18962: GO 19011
18964: LD_INT 1
18966: DOUBLE
18967: EQUAL
18968: IFTRUE 18972
18970: GO 18987
18972: POP
// Say ( Aviradze , D8Av6 ) ; 0 :
18973: LD_EXP 40
18977: PPUSH
18978: LD_STRING D8Av6
18980: PPUSH
18981: CALL_OW 88
18985: GO 19011
18987: LD_INT 0
18989: DOUBLE
18990: EQUAL
18991: IFTRUE 18995
18993: GO 19010
18995: POP
// Say ( Aviradze , D9Av1 ) ; end ;
18996: LD_EXP 40
19000: PPUSH
19001: LD_STRING D9Av1
19003: PPUSH
19004: CALL_OW 88
19008: GO 19011
19010: POP
// DialogueOff ;
19011: CALL_OW 7
// case dialogue_num of 1 :
19015: LD_VAR 0 1
19019: PUSH
19020: LD_INT 1
19022: DOUBLE
19023: EQUAL
19024: IFTRUE 19028
19026: GO 19038
19028: POP
// ChangeMissionObjectives ( M_out_bedflower ) ; 2 :
19029: LD_STRING M_out_bedflower
19031: PPUSH
19032: CALL_OW 337
19036: GO 19075
19038: LD_INT 2
19040: DOUBLE
19041: EQUAL
19042: IFTRUE 19046
19044: GO 19056
19046: POP
// ChangeMissionObjectives ( M_out_greenhat ) ; 3 :
19047: LD_STRING M_out_greenhat
19049: PPUSH
19050: CALL_OW 337
19054: GO 19075
19056: LD_INT 3
19058: DOUBLE
19059: EQUAL
19060: IFTRUE 19064
19062: GO 19074
19064: POP
// ChangeMissionObjectives ( M_out_royal ) ; end ;
19065: LD_STRING M_out_royal
19067: PPUSH
19068: CALL_OW 337
19072: GO 19075
19074: POP
// case dialogue_num of 1 :
19075: LD_VAR 0 1
19079: PUSH
19080: LD_INT 1
19082: DOUBLE
19083: EQUAL
19084: IFTRUE 19088
19086: GO 19101
19088: POP
// SetAreaMapShow ( pink_bedflower_area , 0 ) ; 2 :
19089: LD_INT 14
19091: PPUSH
19092: LD_INT 0
19094: PPUSH
19095: CALL_OW 424
19099: GO 19144
19101: LD_INT 2
19103: DOUBLE
19104: EQUAL
19105: IFTRUE 19109
19107: GO 19122
19109: POP
// SetAreaMapShow ( greenhat_area , 0 ) ; 3 :
19110: LD_INT 13
19112: PPUSH
19113: LD_INT 0
19115: PPUSH
19116: CALL_OW 424
19120: GO 19144
19122: LD_INT 3
19124: DOUBLE
19125: EQUAL
19126: IFTRUE 19130
19128: GO 19143
19130: POP
// SetAreaMapShow ( royal_aphrodite_area , 0 ) ; end ;
19131: LD_INT 15
19133: PPUSH
19134: LD_INT 0
19136: PPUSH
19137: CALL_OW 424
19141: GO 19144
19143: POP
// end ; end ;
19144: LD_VAR 0 2
19148: RET
// export function CreateAmVehicleAndDriver ; begin
19149: LD_INT 0
19151: PPUSH
// InitUc ;
19152: CALL_OW 18
// InitVc ;
19156: CALL_OW 20
// uc_nation = nation_american ;
19160: LD_ADDR_OWVAR 21
19164: PUSH
19165: LD_INT 1
19167: ST_TO_ADDR
// uc_side = 1 ;
19168: LD_ADDR_OWVAR 20
19172: PUSH
19173: LD_INT 1
19175: ST_TO_ADDR
// uc_direction = 2 ;
19176: LD_ADDR_OWVAR 24
19180: PUSH
19181: LD_INT 2
19183: ST_TO_ADDR
// vc_chassis = us_medium_wheeled ;
19184: LD_ADDR_OWVAR 37
19188: PUSH
19189: LD_INT 2
19191: ST_TO_ADDR
// vc_engine = engine_combustion ;
19192: LD_ADDR_OWVAR 39
19196: PUSH
19197: LD_INT 1
19199: ST_TO_ADDR
// vc_control = control_manual ;
19200: LD_ADDR_OWVAR 38
19204: PUSH
19205: LD_INT 1
19207: ST_TO_ADDR
// if Rand ( 1 , 2 ) = 1 then
19208: LD_INT 1
19210: PPUSH
19211: LD_INT 2
19213: PPUSH
19214: CALL_OW 12
19218: PUSH
19219: LD_INT 1
19221: EQUAL
19222: IFFALSE 19234
// vc_weapon = us_light_gun else
19224: LD_ADDR_OWVAR 40
19228: PUSH
19229: LD_INT 3
19231: ST_TO_ADDR
19232: GO 19242
// vc_weapon = us_double_gun ;
19234: LD_ADDR_OWVAR 40
19238: PUSH
19239: LD_INT 5
19241: ST_TO_ADDR
// result = [ CreateVehicle ] ;
19242: LD_ADDR_VAR 0 1
19246: PUSH
19247: CALL_OW 45
19251: PUSH
19252: EMPTY
19253: LIST
19254: ST_TO_ADDR
// InitHc ;
19255: CALL_OW 19
// PrepareMechanic ( false , am_skill_lvl ) ;
19259: LD_INT 0
19261: PPUSH
19262: LD_EXP 56
19266: PPUSH
19267: CALL_OW 383
// result = Replace ( result , 2 , CreateHuman ) ;
19271: LD_ADDR_VAR 0 1
19275: PUSH
19276: LD_VAR 0 1
19280: PPUSH
19281: LD_INT 2
19283: PPUSH
19284: CALL_OW 44
19288: PPUSH
19289: CALL_OW 1
19293: ST_TO_ADDR
// PlaceHumanInUnit ( result [ 2 ] , result [ 1 ] ) ;
19294: LD_VAR 0 1
19298: PUSH
19299: LD_INT 2
19301: ARRAY
19302: PPUSH
19303: LD_VAR 0 1
19307: PUSH
19308: LD_INT 1
19310: ARRAY
19311: PPUSH
19312: CALL_OW 52
// end ;
19316: LD_VAR 0 1
19320: RET
// export function CreateAmSoldier ; begin
19321: LD_INT 0
19323: PPUSH
// InitUc ;
19324: CALL_OW 18
// InitHc ;
19328: CALL_OW 19
// uc_nation = nation_american ;
19332: LD_ADDR_OWVAR 21
19336: PUSH
19337: LD_INT 1
19339: ST_TO_ADDR
// uc_side = 1 ;
19340: LD_ADDR_OWVAR 20
19344: PUSH
19345: LD_INT 1
19347: ST_TO_ADDR
// uc_direction = 2 ;
19348: LD_ADDR_OWVAR 24
19352: PUSH
19353: LD_INT 2
19355: ST_TO_ADDR
// PrepareSoldier ( false , am_skill_lvl ) ;
19356: LD_INT 0
19358: PPUSH
19359: LD_EXP 56
19363: PPUSH
19364: CALL_OW 381
// result = CreateHuman ;
19368: LD_ADDR_VAR 0 1
19372: PUSH
19373: CALL_OW 44
19377: ST_TO_ADDR
// end ;
19378: LD_VAR 0 1
19382: RET
// export function AmericanEscape ; var i ; begin
19383: LD_INT 0
19385: PPUSH
19386: PPUSH
// DialogueOn ;
19387: CALL_OW 6
// Say ( UnitFilter ( start_americans , [ f_ok ] ) [ 1 ] , D3AmMale2b ) ;
19391: LD_EXP 3
19395: PPUSH
19396: LD_INT 50
19398: PUSH
19399: EMPTY
19400: LIST
19401: PPUSH
19402: CALL_OW 72
19406: PUSH
19407: LD_INT 1
19409: ARRAY
19410: PPUSH
19411: LD_STRING D3AmMale2b
19413: PPUSH
19414: CALL_OW 88
// DialogueOff ;
19418: CALL_OW 7
// americans_are_evacuating = true ;
19422: LD_ADDR_EXP 22
19426: PUSH
19427: LD_INT 1
19429: ST_TO_ADDR
// for i in start_americans do
19430: LD_ADDR_VAR 0 2
19434: PUSH
19435: LD_EXP 3
19439: PUSH
19440: FOR_IN
19441: IFFALSE 19718
// begin ComExitBuilding ( i ) ;
19443: LD_VAR 0 2
19447: PPUSH
19448: CALL_OW 122
// if FilterUnitsInArea ( NorthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) = 0 then
19452: LD_INT 9
19454: PPUSH
19455: LD_INT 22
19457: PUSH
19458: LD_INT 2
19460: PUSH
19461: EMPTY
19462: LIST
19463: LIST
19464: PUSH
19465: LD_INT 21
19467: PUSH
19468: LD_INT 1
19470: PUSH
19471: EMPTY
19472: LIST
19473: LIST
19474: PUSH
19475: EMPTY
19476: LIST
19477: LIST
19478: PPUSH
19479: CALL_OW 70
19483: PUSH
19484: LD_INT 0
19486: EQUAL
19487: IFFALSE 19501
// AddComMoveToArea ( i , AmEscapeNorthArea ) ;
19489: LD_VAR 0 2
19493: PPUSH
19494: LD_INT 11
19496: PPUSH
19497: CALL_OW 173
// if FilterUnitsInArea ( SouthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) = 0 then
19501: LD_INT 10
19503: PPUSH
19504: LD_INT 22
19506: PUSH
19507: LD_INT 2
19509: PUSH
19510: EMPTY
19511: LIST
19512: LIST
19513: PUSH
19514: LD_INT 21
19516: PUSH
19517: LD_INT 1
19519: PUSH
19520: EMPTY
19521: LIST
19522: LIST
19523: PUSH
19524: EMPTY
19525: LIST
19526: LIST
19527: PPUSH
19528: CALL_OW 70
19532: PUSH
19533: LD_INT 0
19535: EQUAL
19536: IFFALSE 19550
// AddComMoveToArea ( i , AmEscapeSouthArea ) ;
19538: LD_VAR 0 2
19542: PPUSH
19543: LD_INT 12
19545: PPUSH
19546: CALL_OW 173
// if FilterUnitsInArea ( NorthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) > 0 and FilterUnitsInArea ( SouthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) > 0 then
19550: LD_INT 9
19552: PPUSH
19553: LD_INT 22
19555: PUSH
19556: LD_INT 2
19558: PUSH
19559: EMPTY
19560: LIST
19561: LIST
19562: PUSH
19563: LD_INT 21
19565: PUSH
19566: LD_INT 1
19568: PUSH
19569: EMPTY
19570: LIST
19571: LIST
19572: PUSH
19573: EMPTY
19574: LIST
19575: LIST
19576: PPUSH
19577: CALL_OW 70
19581: PUSH
19582: LD_INT 0
19584: GREATER
19585: PUSH
19586: LD_INT 10
19588: PPUSH
19589: LD_INT 22
19591: PUSH
19592: LD_INT 2
19594: PUSH
19595: EMPTY
19596: LIST
19597: LIST
19598: PUSH
19599: LD_INT 21
19601: PUSH
19602: LD_INT 1
19604: PUSH
19605: EMPTY
19606: LIST
19607: LIST
19608: PUSH
19609: EMPTY
19610: LIST
19611: LIST
19612: PPUSH
19613: CALL_OW 70
19617: PUSH
19618: LD_INT 0
19620: GREATER
19621: AND
19622: IFFALSE 19716
// begin if FilterUnitsInArea ( NorthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) > FilterUnitsInArea ( SouthArea , [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) then
19624: LD_INT 9
19626: PPUSH
19627: LD_INT 22
19629: PUSH
19630: LD_INT 2
19632: PUSH
19633: EMPTY
19634: LIST
19635: LIST
19636: PUSH
19637: LD_INT 21
19639: PUSH
19640: LD_INT 1
19642: PUSH
19643: EMPTY
19644: LIST
19645: LIST
19646: PUSH
19647: EMPTY
19648: LIST
19649: LIST
19650: PPUSH
19651: CALL_OW 70
19655: PUSH
19656: LD_INT 10
19658: PPUSH
19659: LD_INT 22
19661: PUSH
19662: LD_INT 2
19664: PUSH
19665: EMPTY
19666: LIST
19667: LIST
19668: PUSH
19669: LD_INT 21
19671: PUSH
19672: LD_INT 1
19674: PUSH
19675: EMPTY
19676: LIST
19677: LIST
19678: PUSH
19679: EMPTY
19680: LIST
19681: LIST
19682: PPUSH
19683: CALL_OW 70
19687: GREATER
19688: IFFALSE 19704
// AddComMoveToArea ( i , AmEscapeSouthArea ) else
19690: LD_VAR 0 2
19694: PPUSH
19695: LD_INT 12
19697: PPUSH
19698: CALL_OW 173
19702: GO 19716
// AddComMoveToArea ( i , AmEscapeSouthArea ) ;
19704: LD_VAR 0 2
19708: PPUSH
19709: LD_INT 12
19711: PPUSH
19712: CALL_OW 173
// end ; end ;
19716: GO 19440
19718: POP
19719: POP
// end ; end_of_file
19720: LD_VAR 0 1
19724: RET
// export lastCrates ; every 2 2$0 do var calc , cratesOnMap ;
19725: GO 19727
19727: DISABLE
19728: LD_INT 0
19730: PPUSH
19731: PPUSH
// begin enable ;
19732: ENABLE
// cratesOnMap = GetResourceArea ( crate_spawn_area , 1 ) * 10 ;
19733: LD_ADDR_VAR 0 2
19737: PUSH
19738: LD_INT 18
19740: PPUSH
19741: LD_INT 1
19743: PPUSH
19744: CALL_OW 287
19748: PUSH
19749: LD_INT 10
19751: MUL
19752: ST_TO_ADDR
// if GetResourceType ( GetBase ( dep ) , 1 ) + GetResourceType ( GetBase ( FarmerDepot ) , 1 ) + lastCrates + cratesOnMap < 350 then
19753: LD_INT 1
19755: PPUSH
19756: CALL_OW 274
19760: PPUSH
19761: LD_INT 1
19763: PPUSH
19764: CALL_OW 275
19768: PUSH
19769: LD_EXP 2
19773: PPUSH
19774: CALL_OW 274
19778: PPUSH
19779: LD_INT 1
19781: PPUSH
19782: CALL_OW 275
19786: PLUS
19787: PUSH
19788: LD_EXP 58
19792: PLUS
19793: PUSH
19794: LD_VAR 0 2
19798: PLUS
19799: PUSH
19800: LD_INT 350
19802: LESS
19803: IFFALSE 20053
// begin calc = ( GetResourceType ( GetBase ( dep ) , 1 ) + GetResourceType ( GetBase ( FarmerDepot ) , 1 ) + lastCrates + cratesOnMap ) - 350 ;
19805: LD_ADDR_VAR 0 1
19809: PUSH
19810: LD_INT 1
19812: PPUSH
19813: CALL_OW 274
19817: PPUSH
19818: LD_INT 1
19820: PPUSH
19821: CALL_OW 275
19825: PUSH
19826: LD_EXP 2
19830: PPUSH
19831: CALL_OW 274
19835: PPUSH
19836: LD_INT 1
19838: PPUSH
19839: CALL_OW 275
19843: PLUS
19844: PUSH
19845: LD_EXP 58
19849: PLUS
19850: PUSH
19851: LD_VAR 0 2
19855: PLUS
19856: PUSH
19857: LD_INT 350
19859: MINUS
19860: ST_TO_ADDR
// case calc of - 10 :
19861: LD_VAR 0 1
19865: PUSH
19866: LD_INT 10
19868: NEG
19869: DOUBLE
19870: EQUAL
19871: IFTRUE 19875
19873: GO 19899
19875: POP
// begin CreateCratesArea ( 1 , crate_spawn_area , true ) ;
19876: LD_INT 1
19878: PPUSH
19879: LD_INT 18
19881: PPUSH
19882: LD_INT 1
19884: PPUSH
19885: CALL_OW 55
// lastCrates = 10 ;
19889: LD_ADDR_EXP 58
19893: PUSH
19894: LD_INT 10
19896: ST_TO_ADDR
// end ; - 20 :
19897: GO 20053
19899: LD_INT 20
19901: NEG
19902: DOUBLE
19903: EQUAL
19904: IFTRUE 19908
19906: GO 19932
19908: POP
// begin CreateCratesArea ( 2 , crate_spawn_area , true ) ;
19909: LD_INT 2
19911: PPUSH
19912: LD_INT 18
19914: PPUSH
19915: LD_INT 1
19917: PPUSH
19918: CALL_OW 55
// lastCrates = 20 ;
19922: LD_ADDR_EXP 58
19926: PUSH
19927: LD_INT 20
19929: ST_TO_ADDR
// end ; - 30 :
19930: GO 20053
19932: LD_INT 30
19934: NEG
19935: DOUBLE
19936: EQUAL
19937: IFTRUE 19941
19939: GO 19965
19941: POP
// begin CreateCratesArea ( 3 , crate_spawn_area , true ) ;
19942: LD_INT 3
19944: PPUSH
19945: LD_INT 18
19947: PPUSH
19948: LD_INT 1
19950: PPUSH
19951: CALL_OW 55
// lastCrates = 30 ;
19955: LD_ADDR_EXP 58
19959: PUSH
19960: LD_INT 30
19962: ST_TO_ADDR
// end ; - 40 :
19963: GO 20053
19965: LD_INT 40
19967: NEG
19968: DOUBLE
19969: EQUAL
19970: IFTRUE 19974
19972: GO 19998
19974: POP
// begin CreateCratesArea ( 4 , crate_spawn_area , true ) ;
19975: LD_INT 4
19977: PPUSH
19978: LD_INT 18
19980: PPUSH
19981: LD_INT 1
19983: PPUSH
19984: CALL_OW 55
// lastCrates = 40 ;
19988: LD_ADDR_EXP 58
19992: PUSH
19993: LD_INT 40
19995: ST_TO_ADDR
// end ; - 50 :
19996: GO 20053
19998: LD_INT 50
20000: NEG
20001: DOUBLE
20002: EQUAL
20003: IFTRUE 20007
20005: GO 20031
20007: POP
// begin CreateCratesArea ( 5 , crate_spawn_area , true ) ;
20008: LD_INT 5
20010: PPUSH
20011: LD_INT 18
20013: PPUSH
20014: LD_INT 1
20016: PPUSH
20017: CALL_OW 55
// lastCrates = 50 ;
20021: LD_ADDR_EXP 58
20025: PUSH
20026: LD_INT 50
20028: ST_TO_ADDR
// end ; else
20029: GO 20053
20031: POP
// begin CreateCratesArea ( 5 , crate_spawn_area , true ) ;
20032: LD_INT 5
20034: PPUSH
20035: LD_INT 18
20037: PPUSH
20038: LD_INT 1
20040: PPUSH
20041: CALL_OW 55
// lastCrates = 50 ;
20045: LD_ADDR_EXP 58
20049: PUSH
20050: LD_INT 50
20052: ST_TO_ADDR
// end ; end ; end ; end ; end_of_file
20053: PPOPN 2
20055: END
// export apes , tigers ; export function PrepareNature ; var i , spots , num , temp_unit ; begin
20056: LD_INT 0
20058: PPUSH
20059: PPUSH
20060: PPUSH
20061: PPUSH
20062: PPUSH
// InitHc ;
20063: CALL_OW 19
// InitUc ;
20067: CALL_OW 18
// spots = [ [ 29 , 6 ] , [ 38 , 13 ] , [ 49 , 5 ] , [ 64 , 20 ] , [ 67 , 9 ] , [ 73 , 25 ] , [ 83 , 7 ] , [ 110 , 28 ] , [ 125 , 60 ] , [ 71 , 73 ] , [ 59 , 72 ] , [ 43 , 68 ] , [ 28 , 49 ] , [ 52 , 62 ] , [ 73 , 4 ] , [ 61 , 7 ] , [ 40 , 5 ] , [ 89 , 76 ] , [ 63 , 68 ] , [ 44 , 65 ] ] ;
20071: LD_ADDR_VAR 0 3
20075: PUSH
20076: LD_INT 29
20078: PUSH
20079: LD_INT 6
20081: PUSH
20082: EMPTY
20083: LIST
20084: LIST
20085: PUSH
20086: LD_INT 38
20088: PUSH
20089: LD_INT 13
20091: PUSH
20092: EMPTY
20093: LIST
20094: LIST
20095: PUSH
20096: LD_INT 49
20098: PUSH
20099: LD_INT 5
20101: PUSH
20102: EMPTY
20103: LIST
20104: LIST
20105: PUSH
20106: LD_INT 64
20108: PUSH
20109: LD_INT 20
20111: PUSH
20112: EMPTY
20113: LIST
20114: LIST
20115: PUSH
20116: LD_INT 67
20118: PUSH
20119: LD_INT 9
20121: PUSH
20122: EMPTY
20123: LIST
20124: LIST
20125: PUSH
20126: LD_INT 73
20128: PUSH
20129: LD_INT 25
20131: PUSH
20132: EMPTY
20133: LIST
20134: LIST
20135: PUSH
20136: LD_INT 83
20138: PUSH
20139: LD_INT 7
20141: PUSH
20142: EMPTY
20143: LIST
20144: LIST
20145: PUSH
20146: LD_INT 110
20148: PUSH
20149: LD_INT 28
20151: PUSH
20152: EMPTY
20153: LIST
20154: LIST
20155: PUSH
20156: LD_INT 125
20158: PUSH
20159: LD_INT 60
20161: PUSH
20162: EMPTY
20163: LIST
20164: LIST
20165: PUSH
20166: LD_INT 71
20168: PUSH
20169: LD_INT 73
20171: PUSH
20172: EMPTY
20173: LIST
20174: LIST
20175: PUSH
20176: LD_INT 59
20178: PUSH
20179: LD_INT 72
20181: PUSH
20182: EMPTY
20183: LIST
20184: LIST
20185: PUSH
20186: LD_INT 43
20188: PUSH
20189: LD_INT 68
20191: PUSH
20192: EMPTY
20193: LIST
20194: LIST
20195: PUSH
20196: LD_INT 28
20198: PUSH
20199: LD_INT 49
20201: PUSH
20202: EMPTY
20203: LIST
20204: LIST
20205: PUSH
20206: LD_INT 52
20208: PUSH
20209: LD_INT 62
20211: PUSH
20212: EMPTY
20213: LIST
20214: LIST
20215: PUSH
20216: LD_INT 73
20218: PUSH
20219: LD_INT 4
20221: PUSH
20222: EMPTY
20223: LIST
20224: LIST
20225: PUSH
20226: LD_INT 61
20228: PUSH
20229: LD_INT 7
20231: PUSH
20232: EMPTY
20233: LIST
20234: LIST
20235: PUSH
20236: LD_INT 40
20238: PUSH
20239: LD_INT 5
20241: PUSH
20242: EMPTY
20243: LIST
20244: LIST
20245: PUSH
20246: LD_INT 89
20248: PUSH
20249: LD_INT 76
20251: PUSH
20252: EMPTY
20253: LIST
20254: LIST
20255: PUSH
20256: LD_INT 63
20258: PUSH
20259: LD_INT 68
20261: PUSH
20262: EMPTY
20263: LIST
20264: LIST
20265: PUSH
20266: LD_INT 44
20268: PUSH
20269: LD_INT 65
20271: PUSH
20272: EMPTY
20273: LIST
20274: LIST
20275: PUSH
20276: EMPTY
20277: LIST
20278: LIST
20279: LIST
20280: LIST
20281: LIST
20282: LIST
20283: LIST
20284: LIST
20285: LIST
20286: LIST
20287: LIST
20288: LIST
20289: LIST
20290: LIST
20291: LIST
20292: LIST
20293: LIST
20294: LIST
20295: LIST
20296: LIST
20297: ST_TO_ADDR
// uc_nation = nation_nature ;
20298: LD_ADDR_OWVAR 21
20302: PUSH
20303: LD_INT 0
20305: ST_TO_ADDR
// uc_side = 0 ;
20306: LD_ADDR_OWVAR 20
20310: PUSH
20311: LD_INT 0
20313: ST_TO_ADDR
// hc_class = class_apeman ;
20314: LD_ADDR_OWVAR 28
20318: PUSH
20319: LD_INT 12
20321: ST_TO_ADDR
// apes = [ ] ;
20322: LD_ADDR_EXP 59
20326: PUSH
20327: EMPTY
20328: ST_TO_ADDR
// for i = 1 to num_apes do
20329: LD_ADDR_VAR 0 2
20333: PUSH
20334: DOUBLE
20335: LD_INT 1
20337: DEC
20338: ST_TO_ADDR
20339: LD_EXP 53
20343: PUSH
20344: FOR_TO
20345: IFFALSE 20581
// begin if spots = 0 then
20347: LD_VAR 0 3
20351: PUSH
20352: LD_INT 0
20354: EQUAL
20355: IFFALSE 20361
// exit ;
20357: POP
20358: POP
20359: GO 21095
// uc_direction = Rand ( 0 , 5 ) ;
20361: LD_ADDR_OWVAR 24
20365: PUSH
20366: LD_INT 0
20368: PPUSH
20369: LD_INT 5
20371: PPUSH
20372: CALL_OW 12
20376: ST_TO_ADDR
// hc_agressivity = Rand ( - aggressivity , 0 ) ;
20377: LD_ADDR_OWVAR 35
20381: PUSH
20382: LD_EXP 55
20386: NEG
20387: PPUSH
20388: LD_INT 0
20390: PPUSH
20391: CALL_OW 12
20395: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
20396: LD_ADDR_OWVAR 29
20400: PUSH
20401: LD_INT 11
20403: PPUSH
20404: LD_INT 13
20406: PPUSH
20407: CALL_OW 12
20411: PUSH
20412: LD_INT 10
20414: PPUSH
20415: LD_INT 11
20417: PPUSH
20418: CALL_OW 12
20422: PUSH
20423: EMPTY
20424: LIST
20425: LIST
20426: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
20427: LD_ADDR_OWVAR 27
20431: PUSH
20432: LD_INT 1
20434: PPUSH
20435: LD_INT 2
20437: PPUSH
20438: CALL_OW 12
20442: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , 0 , 0 , 0 ] ;
20443: LD_ADDR_OWVAR 31
20447: PUSH
20448: LD_INT 0
20450: PPUSH
20451: LD_INT 1
20453: PPUSH
20454: CALL_OW 12
20458: PUSH
20459: LD_INT 0
20461: PUSH
20462: LD_INT 0
20464: PUSH
20465: LD_INT 0
20467: PUSH
20468: EMPTY
20469: LIST
20470: LIST
20471: LIST
20472: LIST
20473: ST_TO_ADDR
// apes = apes ^ CreateHuman ;
20474: LD_ADDR_EXP 59
20478: PUSH
20479: LD_EXP 59
20483: PUSH
20484: CALL_OW 44
20488: ADD
20489: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
20490: LD_ADDR_VAR 0 4
20494: PUSH
20495: LD_INT 1
20497: PPUSH
20498: LD_VAR 0 3
20502: PPUSH
20503: CALL_OW 12
20507: ST_TO_ADDR
// PlaceUnitXYR ( apes [ i ] , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
20508: LD_EXP 59
20512: PUSH
20513: LD_VAR 0 2
20517: ARRAY
20518: PPUSH
20519: LD_VAR 0 3
20523: PUSH
20524: LD_VAR 0 4
20528: ARRAY
20529: PUSH
20530: LD_INT 1
20532: ARRAY
20533: PPUSH
20534: LD_VAR 0 3
20538: PUSH
20539: LD_VAR 0 4
20543: ARRAY
20544: PUSH
20545: LD_INT 2
20547: ARRAY
20548: PPUSH
20549: LD_INT 5
20551: PPUSH
20552: LD_INT 0
20554: PPUSH
20555: CALL_OW 50
// spots = Delete ( spots , num ) ;
20559: LD_ADDR_VAR 0 3
20563: PUSH
20564: LD_VAR 0 3
20568: PPUSH
20569: LD_VAR 0 4
20573: PPUSH
20574: CALL_OW 3
20578: ST_TO_ADDR
// end ;
20579: GO 20344
20581: POP
20582: POP
// hc_class = class_tiger ;
20583: LD_ADDR_OWVAR 28
20587: PUSH
20588: LD_INT 14
20590: ST_TO_ADDR
// hc_sex = sex_male ;
20591: LD_ADDR_OWVAR 27
20595: PUSH
20596: LD_INT 1
20598: ST_TO_ADDR
// hc_gallery = nature_foreg ;
20599: LD_ADDR_OWVAR 33
20603: PUSH
20604: LD_STRING nature_foreg
20606: ST_TO_ADDR
// hc_face_number = 3 ;
20607: LD_ADDR_OWVAR 34
20611: PUSH
20612: LD_INT 3
20614: ST_TO_ADDR
// tigers = [ ] ;
20615: LD_ADDR_EXP 60
20619: PUSH
20620: EMPTY
20621: ST_TO_ADDR
// for i = 1 to num_tigers do
20622: LD_ADDR_VAR 0 2
20626: PUSH
20627: DOUBLE
20628: LD_INT 1
20630: DEC
20631: ST_TO_ADDR
20632: LD_EXP 54
20636: PUSH
20637: FOR_TO
20638: IFFALSE 20873
// begin if spots = 0 then
20640: LD_VAR 0 3
20644: PUSH
20645: LD_INT 0
20647: EQUAL
20648: IFFALSE 20654
// exit ;
20650: POP
20651: POP
20652: GO 21095
// uc_direction = Rand ( 0 , 5 ) ;
20654: LD_ADDR_OWVAR 24
20658: PUSH
20659: LD_INT 0
20661: PPUSH
20662: LD_INT 5
20664: PPUSH
20665: CALL_OW 12
20669: ST_TO_ADDR
// hc_agressivity = Rand ( aggressivity - 10 , aggressivity + 10 ) ;
20670: LD_ADDR_OWVAR 35
20674: PUSH
20675: LD_EXP 55
20679: PUSH
20680: LD_INT 10
20682: MINUS
20683: PPUSH
20684: LD_EXP 55
20688: PUSH
20689: LD_INT 10
20691: PLUS
20692: PPUSH
20693: CALL_OW 12
20697: ST_TO_ADDR
// hc_attr = [ Rand ( 10 , 12 ) , Rand ( 10 , 11 ) ] ;
20698: LD_ADDR_OWVAR 29
20702: PUSH
20703: LD_INT 10
20705: PPUSH
20706: LD_INT 12
20708: PPUSH
20709: CALL_OW 12
20713: PUSH
20714: LD_INT 10
20716: PPUSH
20717: LD_INT 11
20719: PPUSH
20720: CALL_OW 12
20724: PUSH
20725: EMPTY
20726: LIST
20727: LIST
20728: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , difficulty - 1 ) , 0 , 0 , 0 ] ;
20729: LD_ADDR_OWVAR 31
20733: PUSH
20734: LD_INT 0
20736: PPUSH
20737: LD_OWVAR 67
20741: PUSH
20742: LD_INT 1
20744: MINUS
20745: PPUSH
20746: CALL_OW 12
20750: PUSH
20751: LD_INT 0
20753: PUSH
20754: LD_INT 0
20756: PUSH
20757: LD_INT 0
20759: PUSH
20760: EMPTY
20761: LIST
20762: LIST
20763: LIST
20764: LIST
20765: ST_TO_ADDR
// tigers = tigers ^ CreateHuman ;
20766: LD_ADDR_EXP 60
20770: PUSH
20771: LD_EXP 60
20775: PUSH
20776: CALL_OW 44
20780: ADD
20781: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
20782: LD_ADDR_VAR 0 4
20786: PUSH
20787: LD_INT 1
20789: PPUSH
20790: LD_VAR 0 3
20794: PPUSH
20795: CALL_OW 12
20799: ST_TO_ADDR
// PlaceUnitXYR ( tigers [ i ] , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
20800: LD_EXP 60
20804: PUSH
20805: LD_VAR 0 2
20809: ARRAY
20810: PPUSH
20811: LD_VAR 0 3
20815: PUSH
20816: LD_VAR 0 4
20820: ARRAY
20821: PUSH
20822: LD_INT 1
20824: ARRAY
20825: PPUSH
20826: LD_VAR 0 3
20830: PUSH
20831: LD_VAR 0 4
20835: ARRAY
20836: PUSH
20837: LD_INT 2
20839: ARRAY
20840: PPUSH
20841: LD_INT 5
20843: PPUSH
20844: LD_INT 0
20846: PPUSH
20847: CALL_OW 50
// spots = Delete ( spots , num ) ;
20851: LD_ADDR_VAR 0 3
20855: PUSH
20856: LD_VAR 0 3
20860: PPUSH
20861: LD_VAR 0 4
20865: PPUSH
20866: CALL_OW 3
20870: ST_TO_ADDR
// end ;
20871: GO 20637
20873: POP
20874: POP
// hc_class = class_phororhacos ;
20875: LD_ADDR_OWVAR 28
20879: PUSH
20880: LD_INT 18
20882: ST_TO_ADDR
// hc_face_number = 1 ;
20883: LD_ADDR_OWVAR 34
20887: PUSH
20888: LD_INT 1
20890: ST_TO_ADDR
// hc_skills = [ 0 , 0 , 0 , 0 ] ;
20891: LD_ADDR_OWVAR 31
20895: PUSH
20896: LD_INT 0
20898: PUSH
20899: LD_INT 0
20901: PUSH
20902: LD_INT 0
20904: PUSH
20905: LD_INT 0
20907: PUSH
20908: EMPTY
20909: LIST
20910: LIST
20911: LIST
20912: LIST
20913: ST_TO_ADDR
// for i = 1 to 5 do
20914: LD_ADDR_VAR 0 2
20918: PUSH
20919: DOUBLE
20920: LD_INT 1
20922: DEC
20923: ST_TO_ADDR
20924: LD_INT 5
20926: PUSH
20927: FOR_TO
20928: IFFALSE 21093
// begin if spots = 0 then
20930: LD_VAR 0 3
20934: PUSH
20935: LD_INT 0
20937: EQUAL
20938: IFFALSE 20944
// exit ;
20940: POP
20941: POP
20942: GO 21095
// uc_direction = Rand ( 0 , 5 ) ;
20944: LD_ADDR_OWVAR 24
20948: PUSH
20949: LD_INT 0
20951: PPUSH
20952: LD_INT 5
20954: PPUSH
20955: CALL_OW 12
20959: ST_TO_ADDR
// hc_agressivity = Rand ( - 30 , 0 ) ;
20960: LD_ADDR_OWVAR 35
20964: PUSH
20965: LD_INT 30
20967: NEG
20968: PPUSH
20969: LD_INT 0
20971: PPUSH
20972: CALL_OW 12
20976: ST_TO_ADDR
// hc_attr = [ Rand ( 9 , 10 ) , Rand ( 11 , 12 ) ] ;
20977: LD_ADDR_OWVAR 29
20981: PUSH
20982: LD_INT 9
20984: PPUSH
20985: LD_INT 10
20987: PPUSH
20988: CALL_OW 12
20992: PUSH
20993: LD_INT 11
20995: PPUSH
20996: LD_INT 12
20998: PPUSH
20999: CALL_OW 12
21003: PUSH
21004: EMPTY
21005: LIST
21006: LIST
21007: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
21008: LD_ADDR_VAR 0 4
21012: PUSH
21013: LD_INT 1
21015: PPUSH
21016: LD_VAR 0 3
21020: PPUSH
21021: CALL_OW 12
21025: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
21026: CALL_OW 44
21030: PPUSH
21031: LD_VAR 0 3
21035: PUSH
21036: LD_VAR 0 4
21040: ARRAY
21041: PUSH
21042: LD_INT 1
21044: ARRAY
21045: PPUSH
21046: LD_VAR 0 3
21050: PUSH
21051: LD_VAR 0 4
21055: ARRAY
21056: PUSH
21057: LD_INT 2
21059: ARRAY
21060: PPUSH
21061: LD_INT 5
21063: PPUSH
21064: LD_INT 0
21066: PPUSH
21067: CALL_OW 50
// spots = Delete ( spots , num ) ;
21071: LD_ADDR_VAR 0 3
21075: PUSH
21076: LD_VAR 0 3
21080: PPUSH
21081: LD_VAR 0 4
21085: PPUSH
21086: CALL_OW 3
21090: ST_TO_ADDR
// end ;
21091: GO 20927
21093: POP
21094: POP
// end ;
21095: LD_VAR 0 1
21099: RET
// every 0 0$1 do var i ;
21100: GO 21102
21102: DISABLE
21103: LD_INT 0
21105: PPUSH
// begin enable ;
21106: ENABLE
// for i in apes ^ tigers do
21107: LD_ADDR_VAR 0 1
21111: PUSH
21112: LD_EXP 59
21116: PUSH
21117: LD_EXP 60
21121: ADD
21122: PUSH
21123: FOR_IN
21124: IFFALSE 21185
// begin if GetSide ( i ) = 0 then
21126: LD_VAR 0 1
21130: PPUSH
21131: CALL_OW 255
21135: PUSH
21136: LD_INT 0
21138: EQUAL
21139: IFFALSE 21183
// begin AI_GetAwayFromXY ( i , 87 , 33 , 10 , false ) ;
21141: LD_VAR 0 1
21145: PPUSH
21146: LD_INT 87
21148: PPUSH
21149: LD_INT 33
21151: PPUSH
21152: LD_INT 10
21154: PPUSH
21155: LD_INT 0
21157: PPUSH
21158: CALL 16265 0 5
// AI_GetAwayFromXY ( i , 111 , 65 , 20 , false ) ;
21162: LD_VAR 0 1
21166: PPUSH
21167: LD_INT 111
21169: PPUSH
21170: LD_INT 65
21172: PPUSH
21173: LD_INT 20
21175: PPUSH
21176: LD_INT 0
21178: PPUSH
21179: CALL 16265 0 5
// end ; end ;
21183: GO 21123
21185: POP
21186: POP
// end ; end_of_file
21187: PPOPN 1
21189: END
// on BuildingCaptured ( building , former_side , capturing_unit ) do begin if GetBType ( building ) in [ b_lab , b_lab_half ] and former_side = 1 and IsOk ( Aviradze ) then
21190: LD_VAR 0 1
21194: PPUSH
21195: CALL_OW 266
21199: PUSH
21200: LD_INT 6
21202: PUSH
21203: LD_INT 7
21205: PUSH
21206: EMPTY
21207: LIST
21208: LIST
21209: IN
21210: PUSH
21211: LD_VAR 0 2
21215: PUSH
21216: LD_INT 1
21218: EQUAL
21219: AND
21220: PUSH
21221: LD_EXP 40
21225: PPUSH
21226: CALL_OW 302
21230: AND
21231: IFFALSE 21275
// begin DialogueOn ;
21233: CALL_OW 6
// Say ( Aviradze , D7Av0 ) ;
21237: LD_EXP 40
21241: PPUSH
21242: LD_STRING D7Av0
21244: PPUSH
21245: CALL_OW 88
// DialogueOff ;
21249: CALL_OW 7
// if not OtherTechHint then
21253: LD_EXP 37
21257: NOT
21258: IFFALSE 21275
// begin OtherTechHint = 1 ;
21260: LD_ADDR_EXP 37
21264: PUSH
21265: LD_INT 1
21267: ST_TO_ADDR
// Hint ( OtherNationTech ) ;
21268: LD_STRING OtherNationTech
21270: PPUSH
21271: CALL_OW 339
// end ; end ; if GetBType ( building ) = b_armoury and former_side = 1 then
21275: LD_VAR 0 1
21279: PPUSH
21280: CALL_OW 266
21284: PUSH
21285: LD_INT 4
21287: EQUAL
21288: PUSH
21289: LD_VAR 0 2
21293: PUSH
21294: LD_INT 1
21296: EQUAL
21297: AND
21298: IFFALSE 21343
// begin first_armoury = false ;
21300: LD_ADDR_EXP 28
21304: PUSH
21305: LD_INT 0
21307: ST_TO_ADDR
// if not first_armoury and not first_workshop and not first_lab and not first_oil_mine then
21308: LD_EXP 28
21312: NOT
21313: PUSH
21314: LD_EXP 29
21318: NOT
21319: AND
21320: PUSH
21321: LD_EXP 30
21325: NOT
21326: AND
21327: PUSH
21328: LD_EXP 31
21332: NOT
21333: AND
21334: IFFALSE 21343
// ChangeMissionObjectives ( M_out_build_base ) ;
21336: LD_STRING M_out_build_base
21338: PPUSH
21339: CALL_OW 337
// end ; if GetBType ( building ) = b_oil_mine and former_side = 1 then
21343: LD_VAR 0 1
21347: PPUSH
21348: CALL_OW 266
21352: PUSH
21353: LD_INT 29
21355: EQUAL
21356: PUSH
21357: LD_VAR 0 2
21361: PUSH
21362: LD_INT 1
21364: EQUAL
21365: AND
21366: IFFALSE 21411
// begin first_oil_mine = false ;
21368: LD_ADDR_EXP 31
21372: PUSH
21373: LD_INT 0
21375: ST_TO_ADDR
// if not first_armoury and not first_workshop and not first_lab and not first_oil_mine then
21376: LD_EXP 28
21380: NOT
21381: PUSH
21382: LD_EXP 29
21386: NOT
21387: AND
21388: PUSH
21389: LD_EXP 30
21393: NOT
21394: AND
21395: PUSH
21396: LD_EXP 31
21400: NOT
21401: AND
21402: IFFALSE 21411
// ChangeMissionObjectives ( M_out_build_base ) ;
21404: LD_STRING M_out_build_base
21406: PPUSH
21407: CALL_OW 337
// end ; if GetBType ( building ) in [ b_workshop , b_factory ] and former_side = 1 then
21411: LD_VAR 0 1
21415: PPUSH
21416: CALL_OW 266
21420: PUSH
21421: LD_INT 2
21423: PUSH
21424: LD_INT 3
21426: PUSH
21427: EMPTY
21428: LIST
21429: LIST
21430: IN
21431: PUSH
21432: LD_VAR 0 2
21436: PUSH
21437: LD_INT 1
21439: EQUAL
21440: AND
21441: IFFALSE 21510
// begin DialogueOn ;
21443: CALL_OW 6
// if IsOk ( Willard ) then
21447: LD_EXP 45
21451: PPUSH
21452: CALL_OW 302
21456: IFFALSE 21472
// Say ( Willard , D6Wi0 ) else
21458: LD_EXP 45
21462: PPUSH
21463: LD_STRING D6Wi0
21465: PPUSH
21466: CALL_OW 88
21470: GO 21484
// Say ( Willard , D6H0 ) ;
21472: LD_EXP 45
21476: PPUSH
21477: LD_STRING D6H0
21479: PPUSH
21480: CALL_OW 88
// if not OtherTechHint then
21484: LD_EXP 37
21488: NOT
21489: IFFALSE 21506
// begin OtherTechHint = 1 ;
21491: LD_ADDR_EXP 37
21495: PUSH
21496: LD_INT 1
21498: ST_TO_ADDR
// Hint ( OtherNationTech ) ;
21499: LD_STRING OtherNationTech
21501: PPUSH
21502: CALL_OW 339
// end ; DialogueOff ;
21506: CALL_OW 7
// end ; if building = dep and former_side = 1 then
21510: LD_VAR 0 1
21514: PUSH
21515: LD_INT 1
21517: EQUAL
21518: PUSH
21519: LD_VAR 0 2
21523: PUSH
21524: LD_INT 1
21526: EQUAL
21527: AND
21528: IFFALSE 21928
// begin SetResourceType ( GetBase ( dep ) , mat_cans , depot_initial_crates ) ;
21530: LD_INT 1
21532: PPUSH
21533: CALL_OW 274
21537: PPUSH
21538: LD_INT 1
21540: PPUSH
21541: LD_EXP 57
21545: PPUSH
21546: CALL_OW 277
// while not americans_have_evacuated do
21550: LD_EXP 23
21554: NOT
21555: IFFALSE 21566
// Wait ( 0 0$1 ) ;
21557: LD_INT 35
21559: PPUSH
21560: CALL_OW 67
21564: GO 21550
// CaptureAmBase = true ;
21566: LD_ADDR_EXP 1
21570: PUSH
21571: LD_INT 1
21573: ST_TO_ADDR
// DialogueOn ;
21574: CALL_OW 6
// Say ( ArEngi , D4EnMale1 ) ;
21578: LD_EXP 46
21582: PPUSH
21583: LD_STRING D4EnMale1
21585: PPUSH
21586: CALL_OW 88
// Say ( Heike , D4-H-1 ) ;
21590: LD_EXP 39
21594: PPUSH
21595: LD_STRING D4-H-1
21597: PPUSH
21598: CALL_OW 88
// SayRadio ( Messenger , D4-F-1 ) ;
21602: LD_EXP 48
21606: PPUSH
21607: LD_STRING D4-F-1
21609: PPUSH
21610: CALL_OW 94
// SayRadio ( Messenger , D4-F-2 ) ;
21614: LD_EXP 48
21618: PPUSH
21619: LD_STRING D4-F-2
21621: PPUSH
21622: CALL_OW 94
// if GetResourceVisibility ( 28 , 3 , 2 ) = 0 then
21626: LD_INT 28
21628: PPUSH
21629: LD_INT 3
21631: PPUSH
21632: LD_INT 2
21634: PPUSH
21635: CALL_OW 440
21639: PUSH
21640: LD_INT 0
21642: EQUAL
21643: IFFALSE 21669
// begin Say ( Heike , D4-H-2 ) ;
21645: LD_EXP 39
21649: PPUSH
21650: LD_STRING D4-H-2
21652: PPUSH
21653: CALL_OW 88
// SayRadio ( Messenger , D4-F-3 ) ;
21657: LD_EXP 48
21661: PPUSH
21662: LD_STRING D4-F-3
21664: PPUSH
21665: CALL_OW 94
// end ; Say ( Heike , D4-H-3 ) ;
21669: LD_EXP 39
21673: PPUSH
21674: LD_STRING D4-H-3
21676: PPUSH
21677: CALL_OW 88
// SayRadio ( Messenger , D4-F-4 ) ;
21681: LD_EXP 48
21685: PPUSH
21686: LD_STRING D4-F-4
21688: PPUSH
21689: CALL_OW 94
// SayRadio ( Messenger , D4-F-5 ) ;
21693: LD_EXP 48
21697: PPUSH
21698: LD_STRING D4-F-5
21700: PPUSH
21701: CALL_OW 94
// Say ( Heike , D4-H-4 ) ;
21705: LD_EXP 39
21709: PPUSH
21710: LD_STRING D4-H-4
21712: PPUSH
21713: CALL_OW 88
// SayRadio ( Messenger , D4-F-6 ) ;
21717: LD_EXP 48
21721: PPUSH
21722: LD_STRING D4-F-6
21724: PPUSH
21725: CALL_OW 94
// Say ( Heike , D4-H-5 ) ;
21729: LD_EXP 39
21733: PPUSH
21734: LD_STRING D4-H-5
21736: PPUSH
21737: CALL_OW 88
// if americans_got_away then
21741: LD_EXP 24
21745: IFFALSE 21761
// Say ( Heike , D4H1a ) else
21747: LD_EXP 39
21751: PPUSH
21752: LD_STRING D4H1a
21754: PPUSH
21755: CALL_OW 88
21759: GO 21773
// Say ( Heike , D4H1b ) ;
21761: LD_EXP 39
21765: PPUSH
21766: LD_STRING D4H1b
21768: PPUSH
21769: CALL_OW 88
// Say ( Aviradze , D4Av1 ) ;
21773: LD_EXP 40
21777: PPUSH
21778: LD_STRING D4Av1
21780: PPUSH
21781: CALL_OW 88
// if FilterAllUnits ( [ [ f_btype , b_solar_power ] , [ f_not , [ f_constructed ] ] ] ) = 0 then
21785: LD_INT 30
21787: PUSH
21788: LD_INT 27
21790: PUSH
21791: EMPTY
21792: LIST
21793: LIST
21794: PUSH
21795: LD_INT 3
21797: PUSH
21798: LD_INT 57
21800: PUSH
21801: EMPTY
21802: LIST
21803: PUSH
21804: EMPTY
21805: LIST
21806: LIST
21807: PUSH
21808: EMPTY
21809: LIST
21810: LIST
21811: PPUSH
21812: CALL_OW 69
21816: PUSH
21817: LD_INT 0
21819: EQUAL
21820: IFFALSE 21836
// Say ( Willard , D4Wil1 ) else
21822: LD_EXP 45
21826: PPUSH
21827: LD_STRING D4Wil1
21829: PPUSH
21830: CALL_OW 88
21834: GO 21848
// Say ( Willard , D4Wil2 ) ;
21836: LD_EXP 45
21840: PPUSH
21841: LD_STRING D4Wil2
21843: PPUSH
21844: CALL_OW 88
// Say ( Heike , D4H2 ) ;
21848: LD_EXP 39
21852: PPUSH
21853: LD_STRING D4H2
21855: PPUSH
21856: CALL_OW 88
// DialogueOff ;
21860: CALL_OW 7
// wait ( 0 0$0.2 ) ;
21864: LD_INT 7
21866: PPUSH
21867: CALL_OW 67
// ChangeMissionObjectives ( M2New ) ;
21871: LD_STRING M2New
21873: PPUSH
21874: CALL_OW 337
// Hint ( Dismantle ) ;
21878: LD_STRING Dismantle
21880: PPUSH
21881: CALL_OW 339
// wait ( 0 0$30 ) ;
21885: LD_INT 1050
21887: PPUSH
21888: CALL_OW 67
// CreateCratesArea ( Rand ( 1 , 5 ) , crate_spawn_area , true ) ;
21892: LD_INT 1
21894: PPUSH
21895: LD_INT 5
21897: PPUSH
21898: CALL_OW 12
21902: PPUSH
21903: LD_INT 18
21905: PPUSH
21906: LD_INT 1
21908: PPUSH
21909: CALL_OW 55
// wait ( 0 0$1 ) ;
21913: LD_INT 35
21915: PPUSH
21916: CALL_OW 67
// first_shipment_have_been_sent = true ;
21920: LD_ADDR_EXP 36
21924: PUSH
21925: LD_INT 1
21927: ST_TO_ADDR
// end ; if building = FarmerDepot then
21928: LD_VAR 0 1
21932: PUSH
21933: LD_EXP 2
21937: EQUAL
21938: IFFALSE 21952
// SetSide ( building , 5 ) ;
21940: LD_VAR 0 1
21944: PPUSH
21945: LD_INT 5
21947: PPUSH
21948: CALL_OW 235
// end ;
21952: PPOPN 3
21954: END
// on BuildingComplete ( building ) do var temp_list , temp_list_2 , speaker , temp_unit , tmpEng ;
21955: LD_INT 0
21957: PPUSH
21958: PPUSH
21959: PPUSH
21960: PPUSH
21961: PPUSH
// begin if GetSide ( building ) = 2 then
21962: LD_VAR 0 1
21966: PPUSH
21967: CALL_OW 255
21971: PUSH
21972: LD_INT 2
21974: EQUAL
21975: IFFALSE 22519
// begin case GetBType ( building ) of b_armoury :
21977: LD_VAR 0 1
21981: PPUSH
21982: CALL_OW 266
21986: PUSH
21987: LD_INT 4
21989: DOUBLE
21990: EQUAL
21991: IFTRUE 21995
21993: GO 22047
21995: POP
// if first_armoury then
21996: LD_EXP 28
22000: IFFALSE 22045
// begin first_armoury = false ;
22002: LD_ADDR_EXP 28
22006: PUSH
22007: LD_INT 0
22009: ST_TO_ADDR
// if not first_armoury and not first_workshop and not first_lab and not first_oil_mine then
22010: LD_EXP 28
22014: NOT
22015: PUSH
22016: LD_EXP 29
22020: NOT
22021: AND
22022: PUSH
22023: LD_EXP 30
22027: NOT
22028: AND
22029: PUSH
22030: LD_EXP 31
22034: NOT
22035: AND
22036: IFFALSE 22045
// ChangeMissionObjectives ( M_out_build_base ) ;
22038: LD_STRING M_out_build_base
22040: PPUSH
22041: CALL_OW 337
// end ; b_workshop :
22045: GO 22519
22047: LD_INT 2
22049: DOUBLE
22050: EQUAL
22051: IFTRUE 22055
22053: GO 22464
22055: POP
// if first_workshop then
22056: LD_EXP 29
22060: IFFALSE 22462
// begin CenterOnUnits ( building ) ;
22062: LD_VAR 0 1
22066: PPUSH
22067: CALL_OW 85
// first_workshop = false ;
22071: LD_ADDR_EXP 29
22075: PUSH
22076: LD_INT 0
22078: ST_TO_ADDR
// temp_list = FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , 2 ] , [ f_ok ] ] ) ;
22079: LD_ADDR_VAR 0 2
22083: PUSH
22084: LD_INT 21
22086: PUSH
22087: LD_INT 1
22089: PUSH
22090: EMPTY
22091: LIST
22092: LIST
22093: PUSH
22094: LD_INT 22
22096: PUSH
22097: LD_INT 2
22099: PUSH
22100: EMPTY
22101: LIST
22102: LIST
22103: PUSH
22104: LD_INT 50
22106: PUSH
22107: EMPTY
22108: LIST
22109: PUSH
22110: EMPTY
22111: LIST
22112: LIST
22113: LIST
22114: PPUSH
22115: CALL_OW 69
22119: ST_TO_ADDR
// if ( temp_list diff Heike ) = 0 then
22120: LD_VAR 0 2
22124: PUSH
22125: LD_EXP 39
22129: DIFF
22130: PUSH
22131: LD_INT 0
22133: EQUAL
22134: IFFALSE 22148
// speaker = Heike else
22136: LD_ADDR_VAR 0 4
22140: PUSH
22141: LD_EXP 39
22145: ST_TO_ADDR
22146: GO 22169
// if IsOk ( Willard ) then
22148: LD_EXP 45
22152: PPUSH
22153: CALL_OW 302
22157: IFFALSE 22169
// speaker = Willard ;
22159: LD_ADDR_VAR 0 4
22163: PUSH
22164: LD_EXP 45
22168: ST_TO_ADDR
// DialogueOn ;
22169: CALL_OW 6
// if speaker = Heike then
22173: LD_VAR 0 4
22177: PUSH
22178: LD_EXP 39
22182: EQUAL
22183: IFFALSE 22244
// begin Say ( Heike , D6H1b ) ;
22185: LD_EXP 39
22189: PPUSH
22190: LD_STRING D6H1b
22192: PPUSH
22193: CALL_OW 88
// Say ( Heike , D6H2b ) ;
22197: LD_EXP 39
22201: PPUSH
22202: LD_STRING D6H2b
22204: PPUSH
22205: CALL_OW 88
// if not first_lab then
22209: LD_EXP 30
22213: NOT
22214: IFFALSE 22230
// Say ( Heike , D6H3ba ) else
22216: LD_EXP 39
22220: PPUSH
22221: LD_STRING D6H3ba
22223: PPUSH
22224: CALL_OW 88
22228: GO 22242
// Say ( Heike , D6H3bb ) ;
22230: LD_EXP 39
22234: PPUSH
22235: LD_STRING D6H3bb
22237: PPUSH
22238: CALL_OW 88
// end else
22242: GO 22409
// begin Say ( speaker , D6Wi1 ) ;
22244: LD_VAR 0 4
22248: PPUSH
22249: LD_STRING D6Wi1
22251: PPUSH
22252: CALL_OW 88
// Say ( Heike , D6H1 ) ;
22256: LD_EXP 39
22260: PPUSH
22261: LD_STRING D6H1
22263: PPUSH
22264: CALL_OW 88
// Say ( speaker , D6Wi2 ) ;
22268: LD_VAR 0 4
22272: PPUSH
22273: LD_STRING D6Wi2
22275: PPUSH
22276: CALL_OW 88
// if speaker = Ralph or not IsOk ( Ralph ) then
22280: LD_VAR 0 4
22284: PUSH
22285: LD_EXP 41
22289: EQUAL
22290: PUSH
22291: LD_EXP 41
22295: PPUSH
22296: CALL_OW 302
22300: NOT
22301: OR
22302: IFFALSE 22318
// Say ( Heike , D6H2 ) else
22304: LD_EXP 39
22308: PPUSH
22309: LD_STRING D6H2
22311: PPUSH
22312: CALL_OW 88
22316: GO 22354
// begin Say ( Ralph , D6Ra1 ) ;
22318: LD_EXP 41
22322: PPUSH
22323: LD_STRING D6Ra1
22325: PPUSH
22326: CALL_OW 88
// Say ( Aviradze , D6Av1 ) ;
22330: LD_EXP 40
22334: PPUSH
22335: LD_STRING D6Av1
22337: PPUSH
22338: CALL_OW 88
// Say ( Sonya , D6So1 ) ;
22342: LD_EXP 43
22346: PPUSH
22347: LD_STRING D6So1
22349: PPUSH
22350: CALL_OW 88
// end ; temp_unit = Sonya ;
22354: LD_ADDR_VAR 0 5
22358: PUSH
22359: LD_EXP 43
22363: ST_TO_ADDR
// Say ( temp_unit , D6So2 ) ;
22364: LD_VAR 0 5
22368: PPUSH
22369: LD_STRING D6So2
22371: PPUSH
22372: CALL_OW 88
// if not first_lab then
22376: LD_EXP 30
22380: NOT
22381: IFFALSE 22397
// Say ( temp_unit , D6So3a ) else
22383: LD_VAR 0 5
22387: PPUSH
22388: LD_STRING D6So3a
22390: PPUSH
22391: CALL_OW 88
22395: GO 22409
// Say ( temp_unit , D6So3b ) ;
22397: LD_VAR 0 5
22401: PPUSH
22402: LD_STRING D6So3b
22404: PPUSH
22405: CALL_OW 88
// end ; DialogueOff ;
22409: CALL_OW 7
// Wait ( 0 0$0.2 ) ;
22413: LD_INT 7
22415: PPUSH
22416: CALL_OW 67
// if not first_armoury and not first_workshop and not first_lab and not first_oil_mine then
22420: LD_EXP 28
22424: NOT
22425: PUSH
22426: LD_EXP 29
22430: NOT
22431: AND
22432: PUSH
22433: LD_EXP 30
22437: NOT
22438: AND
22439: PUSH
22440: LD_EXP 31
22444: NOT
22445: AND
22446: IFFALSE 22455
// ChangeMissionObjectives ( M_out_build_base ) ;
22448: LD_STRING M_out_build_base
22450: PPUSH
22451: CALL_OW 337
// ChangeMissionObjectives ( M_add_build_vehicle ) ;
22455: LD_STRING M_add_build_vehicle
22457: PPUSH
22458: CALL_OW 337
// end ; b_oil_mine :
22462: GO 22519
22464: LD_INT 29
22466: DOUBLE
22467: EQUAL
22468: IFTRUE 22472
22470: GO 22518
22472: POP
// begin first_oil_mine = false ;
22473: LD_ADDR_EXP 31
22477: PUSH
22478: LD_INT 0
22480: ST_TO_ADDR
// if not first_armoury and not first_workshop and not first_lab and not first_oil_mine then
22481: LD_EXP 28
22485: NOT
22486: PUSH
22487: LD_EXP 29
22491: NOT
22492: AND
22493: PUSH
22494: LD_EXP 30
22498: NOT
22499: AND
22500: PUSH
22501: LD_EXP 31
22505: NOT
22506: AND
22507: IFFALSE 22516
// ChangeMissionObjectives ( M_out_build_base ) ;
22509: LD_STRING M_out_build_base
22511: PPUSH
22512: CALL_OW 337
// end ; end ;
22516: GO 22519
22518: POP
// end ; if GetSide ( building ) = 5 and GetBType ( building ) = b_depot then
22519: LD_VAR 0 1
22523: PPUSH
22524: CALL_OW 255
22528: PUSH
22529: LD_INT 5
22531: EQUAL
22532: PUSH
22533: LD_VAR 0 1
22537: PPUSH
22538: CALL_OW 266
22542: PUSH
22543: LD_INT 0
22545: EQUAL
22546: AND
22547: IFFALSE 22579
// begin FarmerDepot = building ;
22549: LD_ADDR_EXP 2
22553: PUSH
22554: LD_VAR 0 1
22558: ST_TO_ADDR
// SetResourceType ( GetBase ( building ) , mat_cans , 20 ) ;
22559: LD_VAR 0 1
22563: PPUSH
22564: CALL_OW 274
22568: PPUSH
22569: LD_INT 1
22571: PPUSH
22572: LD_INT 20
22574: PPUSH
22575: CALL_OW 277
// end ; if GetSide ( building ) = 1 then
22579: LD_VAR 0 1
22583: PPUSH
22584: CALL_OW 255
22588: PUSH
22589: LD_INT 1
22591: EQUAL
22592: IFFALSE 22608
// AmBuildCount = AmBuildCount + 1 ;
22594: LD_ADDR_EXP 51
22598: PUSH
22599: LD_EXP 51
22603: PUSH
22604: LD_INT 1
22606: PLUS
22607: ST_TO_ADDR
// end ;
22608: PPOPN 6
22610: END
// on UpgradeComplete ( building ) do begin if GetSide ( building ) = 1 then
22611: LD_VAR 0 1
22615: PPUSH
22616: CALL_OW 255
22620: PUSH
22621: LD_INT 1
22623: EQUAL
22624: IFFALSE 22640
// AmBuildCount = AmBuildCount + 1 ;
22626: LD_ADDR_EXP 51
22630: PUSH
22631: LD_EXP 51
22635: PUSH
22636: LD_INT 1
22638: PLUS
22639: ST_TO_ADDR
// end ;
22640: PPOPN 1
22642: END
// on LeaveBuilding ( building , un ) do begin if not Researched ( 2 , tech_apelang ) then
22643: LD_INT 2
22645: PPUSH
22646: LD_INT 1
22648: PPUSH
22649: CALL_OW 325
22653: NOT
22654: IFFALSE 22685
// if GetClass ( un ) = class_apeman then
22656: LD_VAR 0 2
22660: PPUSH
22661: CALL_OW 257
22665: PUSH
22666: LD_INT 12
22668: EQUAL
22669: IFFALSE 22685
// ComEnterUnit ( un , building ) ;
22671: LD_VAR 0 2
22675: PPUSH
22676: LD_VAR 0 1
22680: PPUSH
22681: CALL_OW 120
// end ;
22685: PPOPN 2
22687: END
// on SailEvent ( info ) do begin while not break_follow do
22688: LD_EXP 52
22692: NOT
22693: IFFALSE 22737
// begin ComMoveXY ( info [ 1 ] , GetX ( Aviradze ) , GetY ( Aviradze ) ) ;
22695: LD_VAR 0 1
22699: PUSH
22700: LD_INT 1
22702: ARRAY
22703: PPUSH
22704: LD_EXP 40
22708: PPUSH
22709: CALL_OW 250
22713: PPUSH
22714: LD_EXP 40
22718: PPUSH
22719: CALL_OW 251
22723: PPUSH
22724: CALL_OW 111
// wait ( 0 0$0.5 ) ;
22728: LD_INT 18
22730: PPUSH
22731: CALL_OW 67
// end ;
22735: GO 22688
// end ;
22737: PPOPN 1
22739: END
// on ResearchComplete ( tech , lab ) do begin if tech = tech_apeagres then
22740: LD_VAR 0 1
22744: PUSH
22745: LD_INT 11
22747: EQUAL
22748: IFFALSE 22877
// begin DialogueOn ;
22750: CALL_OW 6
// Say ( Aviradze , D10Av1 ) ;
22754: LD_EXP 40
22758: PPUSH
22759: LD_STRING D10Av1
22761: PPUSH
22762: CALL_OW 88
// if IsOk ( Oswald ) then
22766: LD_EXP 42
22770: PPUSH
22771: CALL_OW 302
22775: IFFALSE 22873
// begin Say ( Aviradze , D10Av2 ) ;
22777: LD_EXP 40
22781: PPUSH
22782: LD_STRING D10Av2
22784: PPUSH
22785: CALL_OW 88
// Say ( Oswald , D10Os1 ) ;
22789: LD_EXP 42
22793: PPUSH
22794: LD_STRING D10Os1
22796: PPUSH
22797: CALL_OW 88
// Say ( Aviradze , D10Av3 ) ;
22801: LD_EXP 40
22805: PPUSH
22806: LD_STRING D10Av3
22808: PPUSH
22809: CALL_OW 88
// Say ( Oswald , D10Os2 ) ;
22813: LD_EXP 42
22817: PPUSH
22818: LD_STRING D10Os2
22820: PPUSH
22821: CALL_OW 88
// Say ( Heike , D10H1 ) ;
22825: LD_EXP 39
22829: PPUSH
22830: LD_STRING D10H1
22832: PPUSH
22833: CALL_OW 88
// Say ( Oswald , D10Os3 ) ;
22837: LD_EXP 42
22841: PPUSH
22842: LD_STRING D10Os3
22844: PPUSH
22845: CALL_OW 88
// Say ( Heike , D10H2 ) ;
22849: LD_EXP 39
22853: PPUSH
22854: LD_STRING D10H2
22856: PPUSH
22857: CALL_OW 88
// Say ( Aviradze , D10Av4 ) ;
22861: LD_EXP 40
22865: PPUSH
22866: LD_STRING D10Av4
22868: PPUSH
22869: CALL_OW 88
// end ; DialogueOff ;
22873: CALL_OW 7
// end ; end ;
22877: PPOPN 2
22879: END
// on ApemanTamed ( ape , tamer ) do begin tamed_apemen = tamed_apemen ^ ape ;
22880: LD_ADDR_EXP 26
22884: PUSH
22885: LD_EXP 26
22889: PUSH
22890: LD_VAR 0 1
22894: ADD
22895: ST_TO_ADDR
// end ;
22896: PPOPN 2
22898: END
// every 0 0$1 + 0 0$0.4 do var i ;
22899: GO 22901
22901: DISABLE
22902: LD_INT 0
22904: PPUSH
// begin tamed_apemen = UnitFilter ( tamed_apemen , [ f_alive ] ) ;
22905: LD_ADDR_EXP 26
22909: PUSH
22910: LD_EXP 26
22914: PPUSH
22915: LD_INT 51
22917: PUSH
22918: EMPTY
22919: LIST
22920: PPUSH
22921: CALL_OW 72
22925: ST_TO_ADDR
// for i in tamed_apemen do
22926: LD_ADDR_VAR 0 1
22930: PUSH
22931: LD_EXP 26
22935: PUSH
22936: FOR_IN
22937: IFFALSE 23003
// if GetClass ( i ) = class_apeman_soldier then
22939: LD_VAR 0 1
22943: PPUSH
22944: CALL_OW 257
22948: PUSH
22949: LD_INT 15
22951: EQUAL
22952: IFFALSE 23001
// begin num_apeman_soldiers = num_apeman_soldiers + 1 ;
22954: LD_ADDR_EXP 27
22958: PUSH
22959: LD_EXP 27
22963: PUSH
22964: LD_INT 1
22966: PLUS
22967: ST_TO_ADDR
// tamed_apemen = tamed_apemen diff i ;
22968: LD_ADDR_EXP 26
22972: PUSH
22973: LD_EXP 26
22977: PUSH
22978: LD_VAR 0 1
22982: DIFF
22983: ST_TO_ADDR
// if num_apeman_soldiers = 5 then
22984: LD_EXP 27
22988: PUSH
22989: LD_INT 5
22991: EQUAL
22992: IFFALSE 23001
// ChangeMissionObjectives ( M_out_train_apes ) ;
22994: LD_STRING M_out_train_apes
22996: PPUSH
22997: CALL_OW 337
// end ;
23001: GO 22936
23003: POP
23004: POP
// enable ;
23005: ENABLE
// end ;
23006: PPOPN 1
23008: END
// every 0 0$1 + 0 0$0.4 do var i ;
23009: GO 23011
23011: DISABLE
23012: LD_INT 0
23014: PPUSH
// begin tamed_apemen = UnitFilter ( tamed_apemen , [ f_alive ] ) ;
23015: LD_ADDR_EXP 26
23019: PUSH
23020: LD_EXP 26
23024: PPUSH
23025: LD_INT 51
23027: PUSH
23028: EMPTY
23029: LIST
23030: PPUSH
23031: CALL_OW 72
23035: ST_TO_ADDR
// for i in tamed_apemen do
23036: LD_ADDR_VAR 0 1
23040: PUSH
23041: LD_EXP 26
23045: PUSH
23046: FOR_IN
23047: IFFALSE 23113
// if GetClass ( i ) = class_apeman_soldier then
23049: LD_VAR 0 1
23053: PPUSH
23054: CALL_OW 257
23058: PUSH
23059: LD_INT 15
23061: EQUAL
23062: IFFALSE 23111
// begin num_apeman_soldiers = num_apeman_soldiers + 1 ;
23064: LD_ADDR_EXP 27
23068: PUSH
23069: LD_EXP 27
23073: PUSH
23074: LD_INT 1
23076: PLUS
23077: ST_TO_ADDR
// tamed_apemen = tamed_apemen diff i ;
23078: LD_ADDR_EXP 26
23082: PUSH
23083: LD_EXP 26
23087: PUSH
23088: LD_VAR 0 1
23092: DIFF
23093: ST_TO_ADDR
// if num_apeman_soldiers = 5 then
23094: LD_EXP 27
23098: PUSH
23099: LD_INT 5
23101: EQUAL
23102: IFFALSE 23111
// ChangeMissionObjectives ( M_out_train_apes ) ;
23104: LD_STRING M_out_train_apes
23106: PPUSH
23107: CALL_OW 337
// end ;
23111: GO 23046
23113: POP
23114: POP
// enable ;
23115: ENABLE
// end ;
23116: PPOPN 1
23118: END
// on VehicleConstructed ( vehicle , factory ) do begin if first_vehicle then
23119: LD_EXP 32
23123: IFFALSE 23140
// begin first_vehicle = false ;
23125: LD_ADDR_EXP 32
23129: PUSH
23130: LD_INT 0
23132: ST_TO_ADDR
// ChangeMissionObjectives ( M_out_build_vehicle ) ;
23133: LD_STRING M_out_build_vehicle
23135: PPUSH
23136: CALL_OW 337
// end ; end ;
23140: PPOPN 2
23142: END
// on UnitDestroyed ( un ) do begin if un = Heike then
23143: LD_VAR 0 1
23147: PUSH
23148: LD_EXP 39
23152: EQUAL
23153: IFFALSE 23177
// begin ExclusiveOn ;
23155: CALL_OW 4
// wait ( 0 0$1 ) ;
23159: LD_INT 35
23161: PPUSH
23162: CALL_OW 67
// YouLost ( HeikeDead ) ;
23166: LD_STRING HeikeDead
23168: PPUSH
23169: CALL_OW 104
// ExclusiveOff ;
23173: CALL_OW 5
// end ; if un = dep or un = farmerdepot then
23177: LD_VAR 0 1
23181: PUSH
23182: LD_INT 1
23184: EQUAL
23185: PUSH
23186: LD_VAR 0 1
23190: PUSH
23191: LD_EXP 2
23195: EQUAL
23196: OR
23197: IFFALSE 23221
// begin ExclusiveOn ;
23199: CALL_OW 4
// wait ( 0 0$1 ) ;
23203: LD_INT 35
23205: PPUSH
23206: CALL_OW 67
// YouLost ( DepDestroyed ) ;
23210: LD_STRING DepDestroyed
23212: PPUSH
23213: CALL_OW 104
// ExclusiveOff ;
23217: CALL_OW 5
// end ; if not CaptureAmBase and GetClass ( un ) = class_engineer and GetSide ( un ) = 2 then
23221: LD_EXP 1
23225: NOT
23226: PUSH
23227: LD_VAR 0 1
23231: PPUSH
23232: CALL_OW 257
23236: PUSH
23237: LD_INT 2
23239: EQUAL
23240: AND
23241: PUSH
23242: LD_VAR 0 1
23246: PPUSH
23247: CALL_OW 255
23251: PUSH
23252: LD_INT 2
23254: EQUAL
23255: AND
23256: IFFALSE 23265
// YouLost ( NoEng ) ;
23258: LD_STRING NoEng
23260: PPUSH
23261: CALL_OW 104
// end ;
23265: PPOPN 1
23267: END
// on Contact ( side1 , side2 ) do begin if side1 = 2 and side2 = 5 then
23268: LD_VAR 0 1
23272: PUSH
23273: LD_INT 2
23275: EQUAL
23276: PUSH
23277: LD_VAR 0 2
23281: PUSH
23282: LD_INT 5
23284: EQUAL
23285: AND
23286: IFFALSE 23295
// YouLost ( SojAttack ) ;
23288: LD_STRING SojAttack
23290: PPUSH
23291: CALL_OW 104
// end ;
23295: PPOPN 2
23297: END
// on Command ( com ) do var i , j , temp ;
23298: LD_INT 0
23300: PPUSH
23301: PPUSH
23302: PPUSH
// begin for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) do
23303: LD_ADDR_VAR 0 2
23307: PUSH
23308: LD_INT 22
23310: PUSH
23311: LD_INT 2
23313: PUSH
23314: EMPTY
23315: LIST
23316: LIST
23317: PUSH
23318: LD_INT 21
23320: PUSH
23321: LD_INT 1
23323: PUSH
23324: EMPTY
23325: LIST
23326: LIST
23327: PUSH
23328: EMPTY
23329: LIST
23330: LIST
23331: PPUSH
23332: CALL_OW 69
23336: PUSH
23337: FOR_IN
23338: IFFALSE 23447
// if GetTaskList ( i ) > 0 then
23340: LD_VAR 0 2
23344: PPUSH
23345: CALL_OW 437
23349: PUSH
23350: LD_INT 0
23352: GREATER
23353: IFFALSE 23445
// for j = 1 to GetTaskList ( i ) do
23355: LD_ADDR_VAR 0 3
23359: PUSH
23360: DOUBLE
23361: LD_INT 1
23363: DEC
23364: ST_TO_ADDR
23365: LD_VAR 0 2
23369: PPUSH
23370: CALL_OW 437
23374: PUSH
23375: FOR_TO
23376: IFFALSE 23443
// begin temp = GetTaskList ( i ) [ j ] [ 4 ] ;
23378: LD_ADDR_VAR 0 4
23382: PUSH
23383: LD_VAR 0 2
23387: PPUSH
23388: CALL_OW 437
23392: PUSH
23393: LD_VAR 0 3
23397: ARRAY
23398: PUSH
23399: LD_INT 4
23401: ARRAY
23402: ST_TO_ADDR
// if temp = FarmerDepot and GetSide ( temp ) = 5 then
23403: LD_VAR 0 4
23407: PUSH
23408: LD_EXP 2
23412: EQUAL
23413: PUSH
23414: LD_VAR 0 4
23418: PPUSH
23419: CALL_OW 255
23423: PUSH
23424: LD_INT 5
23426: EQUAL
23427: AND
23428: IFFALSE 23441
// SetTaskList ( i , [ ] ) ;
23430: LD_VAR 0 2
23434: PPUSH
23435: EMPTY
23436: PPUSH
23437: CALL_OW 446
// end ;
23441: GO 23375
23443: POP
23444: POP
23445: GO 23337
23447: POP
23448: POP
// end ; end_of_file
23449: PPOPN 4
23451: END
// export Timer ; every 0 0$01 trigger AmAlarmAttack do
23452: LD_EXP 8
23456: IFFALSE 23808
23458: GO 23460
23460: DISABLE
// begin enable ;
23461: ENABLE
// Timer = Timer + 0 0$01 ;
23462: LD_ADDR_EXP 61
23466: PUSH
23467: LD_EXP 61
23471: PUSH
23472: LD_INT 35
23474: PLUS
23475: ST_TO_ADDR
// if attacksCounter = 1 and Timer >= attack_times [ 1 ] then
23476: LD_EXP 10
23480: PUSH
23481: LD_INT 1
23483: EQUAL
23484: PUSH
23485: LD_EXP 61
23489: PUSH
23490: LD_EXP 21
23494: PUSH
23495: LD_INT 1
23497: ARRAY
23498: GREATEREQUAL
23499: AND
23500: IFFALSE 23559
// begin attacksCounter = attacksCounter + 1 ;
23502: LD_ADDR_EXP 10
23506: PUSH
23507: LD_EXP 10
23511: PUSH
23512: LD_INT 1
23514: PLUS
23515: ST_TO_ADDR
// waveDialog = waveDialog + 1 ;
23516: LD_ADDR_EXP 15
23520: PUSH
23521: LD_EXP 15
23525: PUSH
23526: LD_INT 1
23528: PLUS
23529: ST_TO_ADDR
// SpawnAttack ( 1 , [ AmNorthSpawnArea , AmSouthSpawnArea ] [ Rand ( 1 , 2 ) ] ) ;
23530: LD_INT 1
23532: PPUSH
23533: LD_INT 4
23535: PUSH
23536: LD_INT 19
23538: PUSH
23539: EMPTY
23540: LIST
23541: LIST
23542: PUSH
23543: LD_INT 1
23545: PPUSH
23546: LD_INT 2
23548: PPUSH
23549: CALL_OW 12
23553: ARRAY
23554: PPUSH
23555: CALL 5032 0 2
// end ; if attacksCounter = 2 and Timer >= attack_times [ 2 ] then
23559: LD_EXP 10
23563: PUSH
23564: LD_INT 2
23566: EQUAL
23567: PUSH
23568: LD_EXP 61
23572: PUSH
23573: LD_EXP 21
23577: PUSH
23578: LD_INT 2
23580: ARRAY
23581: GREATEREQUAL
23582: AND
23583: IFFALSE 23642
// begin attacksCounter = attacksCounter + 1 ;
23585: LD_ADDR_EXP 10
23589: PUSH
23590: LD_EXP 10
23594: PUSH
23595: LD_INT 1
23597: PLUS
23598: ST_TO_ADDR
// waveDialog = waveDialog + 1 ;
23599: LD_ADDR_EXP 15
23603: PUSH
23604: LD_EXP 15
23608: PUSH
23609: LD_INT 1
23611: PLUS
23612: ST_TO_ADDR
// SpawnAttack ( 2 , [ AmNorthSpawnArea , AmSouthSpawnArea ] [ Rand ( 1 , 2 ) ] ) ;
23613: LD_INT 2
23615: PPUSH
23616: LD_INT 4
23618: PUSH
23619: LD_INT 19
23621: PUSH
23622: EMPTY
23623: LIST
23624: LIST
23625: PUSH
23626: LD_INT 1
23628: PPUSH
23629: LD_INT 2
23631: PPUSH
23632: CALL_OW 12
23636: ARRAY
23637: PPUSH
23638: CALL 5032 0 2
// end ; if attacksCounter = 3 and Timer >= attack_times [ 3 ] then
23642: LD_EXP 10
23646: PUSH
23647: LD_INT 3
23649: EQUAL
23650: PUSH
23651: LD_EXP 61
23655: PUSH
23656: LD_EXP 21
23660: PUSH
23661: LD_INT 3
23663: ARRAY
23664: GREATEREQUAL
23665: AND
23666: IFFALSE 23725
// begin attacksCounter = attacksCounter + 1 ;
23668: LD_ADDR_EXP 10
23672: PUSH
23673: LD_EXP 10
23677: PUSH
23678: LD_INT 1
23680: PLUS
23681: ST_TO_ADDR
// waveDialog = waveDialog + 1 ;
23682: LD_ADDR_EXP 15
23686: PUSH
23687: LD_EXP 15
23691: PUSH
23692: LD_INT 1
23694: PLUS
23695: ST_TO_ADDR
// SpawnAttack ( 3 , [ AmNorthSpawnArea , AmSouthSpawnArea ] [ Rand ( 1 , 2 ) ] ) ;
23696: LD_INT 3
23698: PPUSH
23699: LD_INT 4
23701: PUSH
23702: LD_INT 19
23704: PUSH
23705: EMPTY
23706: LIST
23707: LIST
23708: PUSH
23709: LD_INT 1
23711: PPUSH
23712: LD_INT 2
23714: PPUSH
23715: CALL_OW 12
23719: ARRAY
23720: PPUSH
23721: CALL 5032 0 2
// end ; if attacksCounter = 4 and Timer >= attack_times [ 4 ] then
23725: LD_EXP 10
23729: PUSH
23730: LD_INT 4
23732: EQUAL
23733: PUSH
23734: LD_EXP 61
23738: PUSH
23739: LD_EXP 21
23743: PUSH
23744: LD_INT 4
23746: ARRAY
23747: GREATEREQUAL
23748: AND
23749: IFFALSE 23808
// begin attacksCounter = attacksCounter + 1 ;
23751: LD_ADDR_EXP 10
23755: PUSH
23756: LD_EXP 10
23760: PUSH
23761: LD_INT 1
23763: PLUS
23764: ST_TO_ADDR
// waveDialog = waveDialog + 1 ;
23765: LD_ADDR_EXP 15
23769: PUSH
23770: LD_EXP 15
23774: PUSH
23775: LD_INT 1
23777: PLUS
23778: ST_TO_ADDR
// SpawnAttack ( 4 , [ AmNorthSpawnArea , AmSouthSpawnArea ] [ Rand ( 1 , 2 ) ] ) ;
23779: LD_INT 4
23781: PPUSH
23782: LD_INT 4
23784: PUSH
23785: LD_INT 19
23787: PUSH
23788: EMPTY
23789: LIST
23790: LIST
23791: PUSH
23792: LD_INT 1
23794: PPUSH
23795: LD_INT 2
23797: PPUSH
23798: CALL_OW 12
23802: ARRAY
23803: PPUSH
23804: CALL 5032 0 2
// end ; end ; end_of_file
23808: END
// export function ShowTimer ; var AllStrings ; begin
23809: LD_INT 0
23811: PPUSH
23812: PPUSH
// AllStrings := [ #Ar03-CrateCount , GetResourceType ( GetBase ( FarmerDepot ) , 1 ) , #Ar03-OilCount , GetResourceType ( GetBase ( FarmerDepot ) , 2 ) ] ;
23813: LD_ADDR_VAR 0 2
23817: PUSH
23818: LD_STRING #Ar03-CrateCount
23820: PUSH
23821: LD_EXP 2
23825: PPUSH
23826: CALL_OW 274
23830: PPUSH
23831: LD_INT 1
23833: PPUSH
23834: CALL_OW 275
23838: PUSH
23839: LD_STRING #Ar03-OilCount
23841: PUSH
23842: LD_EXP 2
23846: PPUSH
23847: CALL_OW 274
23851: PPUSH
23852: LD_INT 2
23854: PPUSH
23855: CALL_OW 275
23859: PUSH
23860: EMPTY
23861: LIST
23862: LIST
23863: LIST
23864: LIST
23865: ST_TO_ADDR
// Display_Strings := AllStrings ;
23866: LD_ADDR_OWVAR 47
23870: PUSH
23871: LD_VAR 0 2
23875: ST_TO_ADDR
// end ;
23876: LD_VAR 0 1
23880: RET
// every 0 0$1 trigger GameCounterShow do
23881: LD_EXP 33
23885: IFFALSE 23895
23887: GO 23889
23889: DISABLE
// begin ShowTimer ;
23890: CALL 23809 0 0
// enable ;
23894: ENABLE
// end ; end_of_file
23895: END
// every 0 0$03 trigger GameCounterShow do var answer , i , un , c ;
23896: LD_EXP 33
23900: IFFALSE 24205
23902: GO 23904
23904: DISABLE
23905: LD_INT 0
23907: PPUSH
23908: PPUSH
23909: PPUSH
23910: PPUSH
// begin repeat wait ( 0 0$8 ) ;
23911: LD_INT 280
23913: PPUSH
23914: CALL_OW 67
// c = 0 ;
23918: LD_ADDR_VAR 0 4
23922: PUSH
23923: LD_INT 0
23925: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] ] ) do
23926: LD_ADDR_VAR 0 2
23930: PUSH
23931: LD_INT 22
23933: PUSH
23934: LD_INT 2
23936: PUSH
23937: EMPTY
23938: LIST
23939: LIST
23940: PUSH
23941: LD_INT 21
23943: PUSH
23944: LD_INT 1
23946: PUSH
23947: EMPTY
23948: LIST
23949: LIST
23950: PUSH
23951: EMPTY
23952: LIST
23953: LIST
23954: PPUSH
23955: CALL_OW 69
23959: PUSH
23960: FOR_IN
23961: IFFALSE 24028
// begin if IsInUnit ( i ) then
23963: LD_VAR 0 2
23967: PPUSH
23968: CALL_OW 310
23972: IFFALSE 23991
// un = IsInUnit ( i ) else
23974: LD_ADDR_VAR 0 3
23978: PUSH
23979: LD_VAR 0 2
23983: PPUSH
23984: CALL_OW 310
23988: ST_TO_ADDR
23989: GO 24001
// un = i ;
23991: LD_ADDR_VAR 0 3
23995: PUSH
23996: LD_VAR 0 2
24000: ST_TO_ADDR
// if not IsInArea ( un , FarmerBaseArea ) then
24001: LD_VAR 0 3
24005: PPUSH
24006: LD_INT 20
24008: PPUSH
24009: CALL_OW 308
24013: NOT
24014: IFFALSE 24026
// begin c = 1 ;
24016: LD_ADDR_VAR 0 4
24020: PUSH
24021: LD_INT 1
24023: ST_TO_ADDR
// break ;
24024: GO 24028
// end ; end ;
24026: GO 23960
24028: POP
24029: POP
// if c then
24030: LD_VAR 0 4
24034: IFFALSE 24038
// continue ;
24036: GO 23911
// if GetResourceType ( GetBase ( FarmerDepot ) , 1 ) < 350 or GetResourceType ( GetBase ( FarmerDepot ) , 2 ) < 350 then
24038: LD_EXP 2
24042: PPUSH
24043: CALL_OW 274
24047: PPUSH
24048: LD_INT 1
24050: PPUSH
24051: CALL_OW 275
24055: PUSH
24056: LD_INT 350
24058: LESS
24059: PUSH
24060: LD_EXP 2
24064: PPUSH
24065: CALL_OW 274
24069: PPUSH
24070: LD_INT 2
24072: PPUSH
24073: CALL_OW 275
24077: PUSH
24078: LD_INT 350
24080: LESS
24081: OR
24082: IFFALSE 24121
// begin answer = Query ( Q_leave_not_enough_mat ) ;
24084: LD_ADDR_VAR 0 1
24088: PUSH
24089: LD_STRING Q_leave_not_enough_mat
24091: PPUSH
24092: CALL_OW 97
24096: ST_TO_ADDR
// case answer of 1 :
24097: LD_VAR 0 1
24101: PUSH
24102: LD_INT 1
24104: DOUBLE
24105: EQUAL
24106: IFTRUE 24110
24108: GO 24120
24110: POP
// YouLost ( LowGather ) ; end ;
24111: LD_STRING LowGather
24113: PPUSH
24114: CALL_OW 104
24118: GO 24121
24120: POP
// end ; if GetResourceType ( GetBase ( FarmerDepot ) , 1 ) >= 350 or GetResourceType ( GetBase ( FarmerDepot ) , 2 ) >= 350 then
24121: LD_EXP 2
24125: PPUSH
24126: CALL_OW 274
24130: PPUSH
24131: LD_INT 1
24133: PPUSH
24134: CALL_OW 275
24138: PUSH
24139: LD_INT 350
24141: GREATEREQUAL
24142: PUSH
24143: LD_EXP 2
24147: PPUSH
24148: CALL_OW 274
24152: PPUSH
24153: LD_INT 2
24155: PPUSH
24156: CALL_OW 275
24160: PUSH
24161: LD_INT 350
24163: GREATEREQUAL
24164: OR
24165: IFFALSE 24201
// begin answer = Query ( Q_leave_enough_mat ) ;
24167: LD_ADDR_VAR 0 1
24171: PUSH
24172: LD_STRING Q_leave_enough_mat
24174: PPUSH
24175: CALL_OW 97
24179: ST_TO_ADDR
// case answer of 1 :
24180: LD_VAR 0 1
24184: PUSH
24185: LD_INT 1
24187: DOUBLE
24188: EQUAL
24189: IFTRUE 24193
24191: GO 24200
24193: POP
// EndMission ; end ;
24194: CALL 24208 0 0
24198: GO 24201
24200: POP
// end ; until false ;
24201: LD_INT 0
24203: IFFALSE 23911
// end ;
24205: PPOPN 4
24207: END
// function EndMission ; var num , list , un_list , name_list ; begin
24208: LD_INT 0
24210: PPUSH
24211: PPUSH
24212: PPUSH
24213: PPUSH
24214: PPUSH
// DialogueOn ;
24215: CALL_OW 6
// Say ( Heike , D12H1 ) ;
24219: LD_EXP 39
24223: PPUSH
24224: LD_STRING D12H1
24226: PPUSH
24227: CALL_OW 88
// DialogueOff ;
24231: CALL_OW 7
// if GetResourceType ( GetBase ( FarmerDepot ) , mat_cans ) >= secondary_crate_goal and GetResourceType ( GetBase ( FarmerDepot ) , mat_oil ) >= secondary_crate_goal then
24235: LD_EXP 2
24239: PPUSH
24240: CALL_OW 274
24244: PPUSH
24245: LD_INT 1
24247: PPUSH
24248: CALL_OW 275
24252: PUSH
24253: LD_EXP 18
24257: GREATEREQUAL
24258: PUSH
24259: LD_EXP 2
24263: PPUSH
24264: CALL_OW 274
24268: PPUSH
24269: LD_INT 2
24271: PPUSH
24272: CALL_OW 275
24276: PUSH
24277: LD_EXP 18
24281: GREATEREQUAL
24282: AND
24283: IFFALSE 24295
// num = 1 else
24285: LD_ADDR_VAR 0 2
24289: PUSH
24290: LD_INT 1
24292: ST_TO_ADDR
24293: GO 24304
// num = - 1 ;
24295: LD_ADDR_VAR 0 2
24299: PUSH
24300: LD_INT 1
24302: NEG
24303: ST_TO_ADDR
// AddMedal ( ExtraCrates , num ) ;
24304: LD_STRING ExtraCrates
24306: PPUSH
24307: LD_VAR 0 2
24311: PPUSH
24312: CALL_OW 101
// if num_apeman_soldiers >= 5 then
24316: LD_EXP 27
24320: PUSH
24321: LD_INT 5
24323: GREATEREQUAL
24324: IFFALSE 24336
// num = 1 else
24326: LD_ADDR_VAR 0 2
24330: PUSH
24331: LD_INT 1
24333: ST_TO_ADDR
24334: GO 24440
// if first_lab then
24336: LD_EXP 30
24340: IFFALSE 24375
// begin if IsDead ( Aviradze ) then
24342: LD_EXP 40
24346: PPUSH
24347: CALL_OW 301
24351: IFFALSE 24364
// num = - 5 else
24353: LD_ADDR_VAR 0 2
24357: PUSH
24358: LD_INT 5
24360: NEG
24361: ST_TO_ADDR
24362: GO 24373
// num = - 4 ;
24364: LD_ADDR_VAR 0 2
24368: PUSH
24369: LD_INT 4
24371: NEG
24372: ST_TO_ADDR
// end else
24373: GO 24440
// if ( aviradze_plant_gathering diff 0 ) > 0 then
24375: LD_EXP 25
24379: PUSH
24380: LD_INT 0
24382: DIFF
24383: PUSH
24384: LD_INT 0
24386: GREATER
24387: IFFALSE 24400
// num = - 3 else
24389: LD_ADDR_VAR 0 2
24393: PUSH
24394: LD_INT 3
24396: NEG
24397: ST_TO_ADDR
24398: GO 24440
// if num_apeman_soldiers = 0 and tamed_apemen = 0 then
24400: LD_EXP 27
24404: PUSH
24405: LD_INT 0
24407: EQUAL
24408: PUSH
24409: LD_EXP 26
24413: PUSH
24414: LD_INT 0
24416: EQUAL
24417: AND
24418: IFFALSE 24431
// num = - 2 else
24420: LD_ADDR_VAR 0 2
24424: PUSH
24425: LD_INT 2
24427: NEG
24428: ST_TO_ADDR
24429: GO 24440
// num = - 1 ;
24431: LD_ADDR_VAR 0 2
24435: PUSH
24436: LD_INT 1
24438: NEG
24439: ST_TO_ADDR
// AddMedal ( Apes , num ) ;
24440: LD_STRING Apes
24442: PPUSH
24443: LD_VAR 0 2
24447: PPUSH
24448: CALL_OW 101
// if not first_vehicle then
24452: LD_EXP 32
24456: NOT
24457: IFFALSE 24469
// num = 1 else
24459: LD_ADDR_VAR 0 2
24463: PUSH
24464: LD_INT 1
24466: ST_TO_ADDR
24467: GO 24495
// if first_workshop then
24469: LD_EXP 29
24473: IFFALSE 24486
// num = - 2 else
24475: LD_ADDR_VAR 0 2
24479: PUSH
24480: LD_INT 2
24482: NEG
24483: ST_TO_ADDR
24484: GO 24495
// num = - 1 ;
24486: LD_ADDR_VAR 0 2
24490: PUSH
24491: LD_INT 1
24493: NEG
24494: ST_TO_ADDR
// AddMedal ( SolarVehicle , num ) ;
24495: LD_STRING SolarVehicle
24497: PPUSH
24498: LD_VAR 0 2
24502: PPUSH
24503: CALL_OW 101
// GiveMedals ( Medals ) ;
24507: LD_STRING Medals
24509: PPUSH
24510: CALL_OW 102
// list = FilterAllUnits ( [ [ f_side , 2 ] , [ f_type , unit_human ] , [ f_not , [ f_class , class_apeman ] ] , [ f_not , [ f_class , class_apeman_soldier ] ] , [ f_not , [ f_class , class_apeman_kamikaze ] ] , [ f_not , [ f_class , class_apeman_engineer ] ] ] ) ;
24514: LD_ADDR_VAR 0 3
24518: PUSH
24519: LD_INT 22
24521: PUSH
24522: LD_INT 2
24524: PUSH
24525: EMPTY
24526: LIST
24527: LIST
24528: PUSH
24529: LD_INT 21
24531: PUSH
24532: LD_INT 1
24534: PUSH
24535: EMPTY
24536: LIST
24537: LIST
24538: PUSH
24539: LD_INT 3
24541: PUSH
24542: LD_INT 25
24544: PUSH
24545: LD_INT 12
24547: PUSH
24548: EMPTY
24549: LIST
24550: LIST
24551: PUSH
24552: EMPTY
24553: LIST
24554: LIST
24555: PUSH
24556: LD_INT 3
24558: PUSH
24559: LD_INT 25
24561: PUSH
24562: LD_INT 15
24564: PUSH
24565: EMPTY
24566: LIST
24567: LIST
24568: PUSH
24569: EMPTY
24570: LIST
24571: LIST
24572: PUSH
24573: LD_INT 3
24575: PUSH
24576: LD_INT 25
24578: PUSH
24579: LD_INT 17
24581: PUSH
24582: EMPTY
24583: LIST
24584: LIST
24585: PUSH
24586: EMPTY
24587: LIST
24588: LIST
24589: PUSH
24590: LD_INT 3
24592: PUSH
24593: LD_INT 25
24595: PUSH
24596: LD_INT 16
24598: PUSH
24599: EMPTY
24600: LIST
24601: LIST
24602: PUSH
24603: EMPTY
24604: LIST
24605: LIST
24606: PUSH
24607: EMPTY
24608: LIST
24609: LIST
24610: LIST
24611: LIST
24612: LIST
24613: LIST
24614: PPUSH
24615: CALL_OW 69
24619: ST_TO_ADDR
// RewardPeople ( list ) ;
24620: LD_VAR 0 3
24624: PPUSH
24625: CALL_OW 43
// SaveCharacters ( Heike , Heike_03_cont ) ;
24629: LD_EXP 39
24633: PPUSH
24634: LD_STRING Heike_03_cont
24636: PPUSH
24637: CALL_OW 38
// un_list = [ Sonya , Oswald , Ralph , Aviradze , Kowalski , Willard ] ;
24641: LD_ADDR_VAR 0 4
24645: PUSH
24646: LD_EXP 43
24650: PUSH
24651: LD_EXP 42
24655: PUSH
24656: LD_EXP 41
24660: PUSH
24661: LD_EXP 40
24665: PUSH
24666: LD_EXP 44
24670: PUSH
24671: LD_EXP 45
24675: PUSH
24676: EMPTY
24677: LIST
24678: LIST
24679: LIST
24680: LIST
24681: LIST
24682: LIST
24683: ST_TO_ADDR
// name_list = [ Sonya , Oswald , Ralph , Aviradze , Kowalski , Willard ] ;
24684: LD_ADDR_VAR 0 5
24688: PUSH
24689: LD_STRING Sonya
24691: PUSH
24692: LD_STRING Oswald
24694: PUSH
24695: LD_STRING Ralph
24697: PUSH
24698: LD_STRING Aviradze
24700: PUSH
24701: LD_STRING Kowalski
24703: PUSH
24704: LD_STRING Willard
24706: PUSH
24707: EMPTY
24708: LIST
24709: LIST
24710: LIST
24711: LIST
24712: LIST
24713: LIST
24714: ST_TO_ADDR
// for num = 1 to un_list do
24715: LD_ADDR_VAR 0 2
24719: PUSH
24720: DOUBLE
24721: LD_INT 1
24723: DEC
24724: ST_TO_ADDR
24725: LD_VAR 0 4
24729: PUSH
24730: FOR_TO
24731: IFFALSE 24783
// if un_list [ num ] in list then
24733: LD_VAR 0 4
24737: PUSH
24738: LD_VAR 0 2
24742: ARRAY
24743: PUSH
24744: LD_VAR 0 3
24748: IN
24749: IFFALSE 24781
// SaveCharacters ( un_list [ num ] , name_list [ num ] & _03_cont ) ;
24751: LD_VAR 0 4
24755: PUSH
24756: LD_VAR 0 2
24760: ARRAY
24761: PPUSH
24762: LD_VAR 0 5
24766: PUSH
24767: LD_VAR 0 2
24771: ARRAY
24772: PUSH
24773: LD_STRING _03_cont
24775: STR
24776: PPUSH
24777: CALL_OW 38
24781: GO 24730
24783: POP
24784: POP
// SaveCharacters ( list diff ( Heike ^ un_list ) , Others_03_cont ) ;
24785: LD_VAR 0 3
24789: PUSH
24790: LD_EXP 39
24794: PUSH
24795: LD_VAR 0 4
24799: ADD
24800: DIFF
24801: PPUSH
24802: LD_STRING Others_03_cont
24804: PPUSH
24805: CALL_OW 38
// SaveVariable ( GetResourceType ( GetBase ( FarmerDepot ) , 1 ) >= secondary_crate_goal , Extra_crates_collected_03_cont ) ;
24809: LD_EXP 2
24813: PPUSH
24814: CALL_OW 274
24818: PPUSH
24819: LD_INT 1
24821: PPUSH
24822: CALL_OW 275
24826: PUSH
24827: LD_EXP 18
24831: GREATEREQUAL
24832: PPUSH
24833: LD_STRING Extra_crates_collected_03_cont
24835: PPUSH
24836: CALL_OW 39
// SaveVariable ( GetResourceType ( GetBase ( FarmerDepot ) , 2 ) >= secondary_crate_goal , Extra_oil_collected_03_cont ) ;
24840: LD_EXP 2
24844: PPUSH
24845: CALL_OW 274
24849: PPUSH
24850: LD_INT 2
24852: PPUSH
24853: CALL_OW 275
24857: PUSH
24858: LD_EXP 18
24862: GREATEREQUAL
24863: PPUSH
24864: LD_STRING Extra_oil_collected_03_cont
24866: PPUSH
24867: CALL_OW 39
// SaveVariable ( num_apeman_soldiers >= 5 , Apemen_soldiers_trained_03_cont ) ;
24871: LD_EXP 27
24875: PUSH
24876: LD_INT 5
24878: GREATEREQUAL
24879: PPUSH
24880: LD_STRING Apemen_soldiers_trained_03_cont
24882: PPUSH
24883: CALL_OW 39
// YouWin ;
24887: CALL_OW 103
// end ;
24891: LD_VAR 0 1
24895: RET
